上一章讲了我项目的选座,这一章接着讲选座后的多票购买,就是因为选完座后让这个功能多了点代码,因为一座一人,选座后的座位要对应着来,不能多不能少不能重复,所以判断就多了一些,还是代码直观,请往下看代码。
public ActionResult GroupPurchase(R_BillDetails BillDetails, string TicketTypeaaa, int? TicketTypeaaanumber, int? TicketTypenumber, int SeatNumber)
{
ReturnJson re = new ReturnJson();
try
{
using (var srcop = new TransactionScope())
{
var billdelt = (from tb in myModuls.R_BillDetails
where tb.ShiftScheduleID == BillDetails.ShiftScheduleID
orderby tb.Seat
select tb).ToList();
if (billdelt.Count() * 1 + TicketTypeaaanumber * 1 + TicketTypenumber * 1 <= SeatNumber)//判断座位是否足够。SeatNumber车辆座位数
{
var number = 0;
if (TicketTypenumber != null && TicketTypenumber != 0)//循环全票
{
for (int i = 0; i < SeatNumber; i++)
{
var bil = (from tb in myModuls.R_BillDetails
where tb.ShiftScheduleID == BillDetails.ShiftScheduleID && tb.Plate == BillDetails.Plate && tb.Seat == (i+1)
select tb).Count();
if (bil == 0)
{
var bi = (from tb in myModuls.R_Bill
where tb.BillID == BillDetails.BillID
select tb).Single();
BillDetails.Ticket = bi.TicketNumber;
BillDetails.Seat = (i + 1);
myModuls.R_BillDetails.Add(BillDetails);
bi.TicketNumber = bi.TicketNumber * 1 + 1;
bi.Inventory = bi.Inventory * 1 - 1;
myModuls.Entry(bi).State = System.Data.Entity.EntityState.Modified;
myModuls.SaveChanges();
number++;
if (number== TicketTypenumber)//判断是否完成
{
break;
}
}
}
}
else
{
TicketTypenumber = 0;
}
var numbering = 0;
if (TicketTypeaaanumber != null && TicketTypeaaanumber != 0)//循环半票
{
for (int i = 0; i < SeatNumber; i++)
{
var bil = (from tb in myModuls.R_BillDetails
where tb.ShiftScheduleID == BillDetails.ShiftScheduleID && tb.Plate == BillDetails.Plate && tb.Seat == (i + 1)
select tb).Count();
if (bil == 0)
{
var bi = (from tb in myModuls.R_Bill
where tb.BillID == BillDetails.BillID
select tb).Single();
BillDetails.Ticket = bi.TicketNumber;
BillDetails.Seat = (i + 1);
BillDetails.TicketType = TicketTypeaaa;
myModuls.R_BillDetails.Add(BillDetails);
bi.TicketNumber = bi.TicketNumber * 1 + 1;
bi.Inventory = bi.Inventory * 1 - 1;
myModuls.Entry(bi).State = System.Data.Entity.EntityState.Modified;
myModuls.SaveChanges();
numbering++;
if (numbering == TicketTypeaaanumber) //判断是否完成
{
break;
}
}
}
}
else
{
TicketTypeaaanumber = 0;
}
if (number == TicketTypenumber && numbering == TicketTypeaaanumber)
{
re.State = true;
re.Text = "全部出票成功,请收钱";
}
else
{
re.State = false;
re.Text = "出票失败";
}
}
else
{
re.State = false;
re.Text = "抱歉,该车辆的座位已不足啦,剩余" + (Convert.ToInt32(SeatNumber) - Convert.ToInt32(billdelt.Count())) + "个";
}
srcop.Complete();
}
}
catch (Exception e)
{
Console.WriteLine(e);
re.State = false;
re.Text = "数据异常";
}
return Json(re, JsonRequestBehavior.AllowGet);
}
其实可以用一个循环来循环完全票半票的,但我想着还是分开来明了,最后就看效果吧,这次就到这里了。