人々がオンラインで医師の予約を取れるように、オンライン予約システムを構築しています。MVC 4 コントローラーを大まかに作成して、各医師の予約を取得するために必要なストアド プロシージャでテストできるようにしました。
以下では、コントローラーに 10 人の医師をハードコーディングしたことがわかりますが、URL から医師 ID を取得する必要があります。医師の数はさまざまです (最初のページには 10 人の医師がいるが、最後のページには 1 人の医師しかいない場合があります)。ページ)。
注: 各医師は複数の企業で働くことができるため、コントローラーとストアド プロシージャに "BusinessID" を追加する必要もあります。
URL は次のようになります (DOC ID には 2 つの部分があります: StaffID-BusinessID):
http://mydomain.com/Bookings?start=2013-01-01&StaffID=1-1&StaffID=2-1&StaffID=3-1&StaffID=4-1&StaffID=5-1&StaffID=6-1
私の質問は次のとおりです。
- Doctors ID (StaffID) と BusinessID を URL から動的に実行できるようにコントローラーを変更するにはどうすればよいですか (上記の URL の例を参照)。
- URL に含まれる SaffID-BusinessID ごとに動的にコントローラーのパーツを作成するにはどうすればよいですか (コメント内の*が付いているパーツを参照してください)。
- どうすればこれを最適化できますか?
----利用可能なタイムスロットコントローラーを取得----
public ActionResult Index(DateTime? start)
{
if (!start.HasValue )
{
start = DateTime.Today;
}
//get date information (this will always be 7 days)
var day1 = start.Value.Date;
var day2 = day1.AddDays(1);
var day3 = day1.AddDays(2);
var day4 = day1.AddDays(3);
var day5 = day1.AddDays(4);
var day6 = day1.AddDays(5);
var day7 = day1.AddDays(6);
//***NOTE: THIS IS HARD CODED TO TEN DOCTORS BUT WILL NEED TO BE ABLE TO GET A DYNAMIC AMOUNT OF DOCTORS AS SOME PAGES MAY ONLY HAVE A FEW DOCTORS ON IT
//NOTE: Stored Procedure = SP_GetAvailableAppointments @StaffID int = 0, @StartDate Date = NULL, @NumberOfDays INT = 1);
//get doc1 appointments for the next 7 days
var model1 = db.SP_GetAvailableAppointments(1, start, 1);
var model2 = db.SP_GetAvailableAppointments(1, day2, 1);
var model3 = db.SP_GetAvailableAppointments(1, day3, 1);
var model4 = db.SP_GetAvailableAppointments(1, day4, 1);
var model5 = db.SP_GetAvailableAppointments(1, day5, 1);
var model6 = db.SP_GetAvailableAppointments(1, day6, 1);
var model7 = db.SP_GetAvailableAppointments(1, day7, 1);
//get doc2 appointments for the next 7 days
var model8 = db.SP_GetAvailableAppointments(2, day1, 1);
var model9 = db.SP_GetAvailableAppointments(2, day2, 1);
var model10 = db.SP_GetAvailableAppointments(2, day3, 1);
var model11 = db.SP_GetAvailableAppointments(2, day4, 1);
var model12 = db.SP_GetAvailableAppointments(2, day5, 1);
var model13 = db.SP_GetAvailableAppointments(2, day6, 1);
var model14 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc3 appointments for the next 7 days
var model15 = db.SP_GetAvailableAppointments(2, day1, 1);
var model16 = db.SP_GetAvailableAppointments(2, day2, 1);
var model17 = db.SP_GetAvailableAppointments(2, day3, 1);
var model18 = db.SP_GetAvailableAppointments(2, day4, 1);
var model19 = db.SP_GetAvailableAppointments(2, day5, 1);
var model20 = db.SP_GetAvailableAppointments(2, day6, 1);
var model21 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc4 appointments for the next 7 days
var model22 = db.SP_GetAvailableAppointments(2, day1, 1);
var model23 = db.SP_GetAvailableAppointments(2, day2, 1);
var model24 = db.SP_GetAvailableAppointments(2, day3, 1);
var model25 = db.SP_GetAvailableAppointments(2, day4, 1);
var model26 = db.SP_GetAvailableAppointments(2, day5, 1);
var model27 = db.SP_GetAvailableAppointments(2, day6, 1);
var model28 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc5 appointments for the next 7 days
var model29 = db.SP_GetAvailableAppointments(2, day1, 1);
var model30 = db.SP_GetAvailableAppointments(2, day2, 1);
var model31 = db.SP_GetAvailableAppointments(2, day3, 1);
var model32 = db.SP_GetAvailableAppointments(2, day4, 1);
var model33 = db.SP_GetAvailableAppointments(2, day5, 1);
var model34 = db.SP_GetAvailableAppointments(2, day6, 1);
var model35 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc6 appointments for the next 7 days
var model36 = db.SP_GetAvailableAppointments(2, day1, 1);
var model37 = db.SP_GetAvailableAppointments(2, day2, 1);
var model38 = db.SP_GetAvailableAppointments(2, day3, 1);
var model39 = db.SP_GetAvailableAppointments(2, day4, 1);
var model40 = db.SP_GetAvailableAppointments(2, day5, 1);
var model41 = db.SP_GetAvailableAppointments(2, day6, 1);
var model42 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc7 appointments for the next 7 days
var model43 = db.SP_GetAvailableAppointments(2, day1, 1);
var model44 = db.SP_GetAvailableAppointments(2, day2, 1);
var model45 = db.SP_GetAvailableAppointments(2, day3, 1);
var model46 = db.SP_GetAvailableAppointments(2, day4, 1);
var model47 = db.SP_GetAvailableAppointments(2, day5, 1);
var model48 = db.SP_GetAvailableAppointments(2, day6, 1);
var model49 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc8 appointments for the next 7 days
var model50 = db.SP_GetAvailableAppointments(2, day1, 1);
var model51 = db.SP_GetAvailableAppointments(2, day2, 1);
var model52 = db.SP_GetAvailableAppointments(2, day3, 1);
var model53 = db.SP_GetAvailableAppointments(2, day4, 1);
var model54 = db.SP_GetAvailableAppointments(2, day5, 1);
var model55 = db.SP_GetAvailableAppointments(2, day6, 1);
var model56 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc9 appointments for the next 7 days
var model57 = db.SP_GetAvailableAppointments(2, day1, 1);
var model58 = db.SP_GetAvailableAppointments(2, day2, 1);
var model59 = db.SP_GetAvailableAppointments(2, day3, 1);
var model60 = db.SP_GetAvailableAppointments(2, day4, 1);
var model61 = db.SP_GetAvailableAppointments(2, day5, 1);
var model62 = db.SP_GetAvailableAppointments(2, day6, 1);
var model63 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc10 appointments for the next 7 days
var model64 = db.SP_GetAvailableAppointments(2, day1, 1);
var model65 = db.SP_GetAvailableAppointments(2, day2, 1);
var model66 = db.SP_GetAvailableAppointments(2, day3, 1);
var model67 = db.SP_GetAvailableAppointments(2, day4, 1);
var model68 = db.SP_GetAvailableAppointments(2, day5, 1);
var model69 = db.SP_GetAvailableAppointments(2, day6, 1);
var model70 = db.SP_GetAvailableAppointments(2, day7, 1);
//new Json Object - myDates
var myDates = new
{
date1 = day1.ToShortDateString(),
date2 = day2.ToShortDateString(),
date3 = day3.ToShortDateString(),
date4 = day4.ToShortDateString(),
date5 = day5.ToShortDateString(),
date6 = day6.ToShortDateString(),
date7 = day7.ToShortDateString(),
dname1 = day1.DayOfWeek.ToString(),
dname2 = day2.DayOfWeek.ToString(),
dname3 = day3.DayOfWeek.ToString(),
dname4 = day4.DayOfWeek.ToString(),
dname5 = day5.DayOfWeek.ToString(),
dname6 = day6.DayOfWeek.ToString(),
dname7 = day7.DayOfWeek.ToString(),
ndate = day1.AddDays(7).ToString("yyyy-MM-dd"), //next start date
pdate = day1.AddDays(-7).ToString("yyyy-MM-dd") //previous start date
};
//***NOTE: THIS IS HARD CODED TO TEN DOCTORS BUT WILL NEED TO BE ABLE TO GET A DYNAMIC AMOUNT OF DOCTORS AS SOME PAGES MAY ONLY HAVE A FEW DOCTORS ON IT
//new Json Object - doc1
var doc1 = new
{
staffid = 1,
day1 = model1,
day2 = model2,
day3 = model3,
day4 = model4,
day5 = model5,
day6 = model6,
day7 = model7
};
//new Json Object - doc2
var doc2 = new
{
staffid = 2,
day1 = model8,
day2 = model9,
day3 = model10,
day4 = model11,
day5 = model12,
day6 = model13,
day7 = model14
};
//new Json Object - doc3
var doc3 = new
{
staffid = 3,
day1 = model15,
day2 = model16,
day3 = model17,
day4 = model18,
day5 = model19,
day6 = model20,
day7 = model21
};
//new Json Object - doc5
var doc4 = new
{
staffid = 4,
day1 = model22,
day2 = model23,
day3 = model24,
day4 = model25,
day5 = model26,
day6 = model27,
day7 = model28
};
//new Json Object - doc5
var doc5 = new
{
staffid = 5,
day1 = model29,
day2 = model30,
day3 = model31,
day4 = model32,
day5 = model33,
day6 = model34,
day7 = model35
};
//new Json Object - doc6
var doc6 = new
{
staffid = 6,
day1 = model36,
day2 = model37,
day3 = model38,
day4 = model39,
day5 = model40,
day6 = model41,
day7 = model42
};
//new Json Object - doc7
var doc7 = new
{
staffid = 7,
day1 = model43,
day2 = model44,
day3 = model45,
day4 = model46,
day5 = model47,
day6 = model48,
day7 = model49
};
//new Json Object - doc8
var doc8 = new
{
staffid = 8,
day1 = model50,
day2 = model51,
day3 = model52,
day4 = model53,
day5 = model54,
day6 = model55,
day7 = model56
};
//new Json Object - doc10
var doc9 = new
{
staffid = 9,
day1 = model57,
day2 = model58,
day3 = model59,
day4 = model60,
day5 = model61,
day6 = model62,
day7 = model63
};
//new Json Object - doc10
var doc10 = new
{
staffid = 10,
day1 = model64,
day2 = model65,
day3 = model66,
day4 = model67,
day5 = model68,
day6 = model69,
day7 = model70
};
//Output the Json results
return Json(new
{
myDates,
doc1,
doc2,
doc3,
doc4,
doc5,
doc6,
doc7,
doc8,
doc9,
doc10
}, JsonRequestBehavior.AllowGet);
----必要な JSON 結果----
{
"myDates": {
"date1": "22/02/2013",
"date2": "23/02/2013",
"date3": "24/02/2013",
"date4": "25/02/2013",
"date5": "26/02/2013",
"date6": "27/02/2013",
"date7": "28/02/2013",
"dname1": "Friday",
"dname2": "Saturday",
"dname3": "Sunday",
"dname4": "Monday",
"dname5": "Tuesday",
"dname6": "Wednesday",
"dname7": "Thursday",
"ndate": "2013-03-01",
"pdate": "2013-02-15"
},
"doc1": {
"staffid": 1,
"day1": [{
"ID": 34022,
"StaffID": 1,
"BusinessID": 1,
"SlotDay": "Friday",
"SlotTime": {
"Ticks": 324000000000,
"Days": 0,
"Hours": 9,
"Milliseconds": 0,
"Minutes": 0,
"Seconds": 0,
"TotalDays": 0.375,
"TotalHours": 9,
"TotalMilliseconds": 32400000,
"TotalMinutes": 540,
"TotalSeconds": 32400
},
"StartDate": "\/Date(1325336400000)\/",
"EndDate": "\/Date(1577797200000)\/",
"SlotType": 1,
"Created": "\/Date(1361389440000)\/",
"CreatedBy": null,
"Modified": "\/Date(1361389440000)\/",
"ModifiedBy": null,
"Active": true,
"SlotDate": "\/Date(1361451600000)\/"
}]
}
}
---UPDATE:---- コントローラーから次の json 出力を取得できますが、myDates と myStaff から「キー」と「値」を削除し、日付ごとに予約時間をグループ化する必要があります - 例: date0 、日付 1、日付 2..
{
"myDates": [{
"Key": "date0",
"Value": "23/02/2013"
}, {
"Key": "date1",
"Value": "24/02/2013"
}, {
"Key": "date2",
"Value": "25/02/2013"
}, {
"Key": "date3",
"Value": "26/02/2013"
}, {
"Key": "date4",
"Value": "27/02/2013"
}, {
"Key": "date5",
"Value": "28/02/2013"
}, {
"Key": "date6",
"Value": "1/03/2013"
}, {
"Key": "dname0",
"Value": "Saturday"
}, {
"Key": "dname1",
"Value": "Sunday"
}, {
"Key": "dname2",
"Value": "Monday"
}, {
"Key": "dname3",
"Value": "Tuesday"
}, {
"Key": "dname4",
"Value": "Wednesday"
}, {
"Key": "dname5",
"Value": "Thursday"
}, {
"Key": "dname6",
"Value": "Friday"
}, {
"Key": "ndate",
"Value": "2013-03-02"
}, {
"Key": "pdate",
"Value": "2013-02-16"
}],
"myStaff": [{
"Key": "staff0",
"Value": [
[{
"SlotID": 42501,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "23/02/2013",
"SlotDay": "Saturday",
"SlotTime": "10:00"
}, {
"SlotID": 42502,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "23/02/2013",
"SlotDay": "Saturday",
"SlotTime": "10:30"
}],
[{
"SlotID": 47001,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "24/02/2013",
"SlotDay": "Sunday",
"SlotTime": "10:00"
}, {
"SlotID": 47002,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "24/02/2013",
"SlotDay": "Sunday",
"SlotTime": "10:30"
}]
]
}]
}
基本的に、次のようにフォーマットされたjsonを取得する必要があります。
{
"myDates": [{
"date0": "23/02/2013",
"date1": "24/02/2013",
"date2": "25/02/2013",
"date3": "26/02/2013",
"date4": "27/02/2013",
"date5": "28/02/2013",
"date6": "1/03/2013",
"dname0": "Saturday",
"dname1": "Sunday",
"dname2": "Monday",
"dname3": "Tuesday",
"dname4": "Wednesday",
"dname5": "Thursday",
"dname6": "Friday",
"ndate": "2013-03-02",
"pdate": "2013-02-16",
}],
"myStaff": [{
"staff0": {[
"date0": {[
[{
"SlotID": 42501,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "23/02/2013",
"SlotDay": "Saturday",
"SlotTime": "10:00"
}, {
"SlotID": 42502,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "23/02/2013",
"SlotDay": "Saturday",
"SlotTime": "10:30"
}],
"date1": {[
"SlotID": 47001,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "24/02/2013",
"SlotDay": "Sunday",
"SlotTime": "10:00"
}, {
"SlotID": 47002,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "24/02/2013",
"SlotDay": "Sunday",
"SlotTime": "10:30"
}]
]}
}]
}]
}
これは私のコントローラーです:
public ActionResult Index(DateTime start, string id = null)
{
var allids = Request.QueryString["id"];
// split the input into anonymous objects containing staffid and businessid
var staffids = from staffid in allids.Split(',').Select(x => x.Split('-'))
select new { sid = int.Parse(staffid[0]), bid = int.Parse(staffid[1]) };
// get the days you need
var days = Enumerable.Range(0, 7).Select(x => start.AddDays(x));
// create myDates
int i = 0;
var myDates = (from day in days
select new KeyValuePair<string, string>(
String.Format("date{0}", i++),
day.ToShortDateString())).ToList();
i = 0;
myDates.AddRange(
(from day in days
select new KeyValuePair<string, string>(
String.Format("dname{0}", i++),
day.DayOfWeek.ToString())).ToList());
myDates.Add(new KeyValuePair<string, string>("ndate", days.First().AddDays(7).ToString("yyyy-MM-dd")));
myDates.Add(new KeyValuePair<string, string>("pdate", days.First().AddDays(-7).ToString("yyyy-MM-dd")));
// receive all the stored_procedures
i = 0;
var myStaff = from staff in staffids
select new KeyValuePair<string, object>(
String.Format("staff{0}", i++),
(from day in days
select db.Database.SqlQuery<GetAvailableAppointments>("EXEC SP_GetAvailableAppointments @StaffID, @BusinessID, @StartDate",
new SqlParameter("StaffID", staff.sid),
new SqlParameter("BusinessID", staff.bid),
new SqlParameter("StartDate", day))).ToList()
);
return Json(new { myDates, myStaff }, JsonRequestBehavior.AllowGet);
}
どんな助けでも大歓迎です:)