修改挂单功能

This commit is contained in:
2025-09-09 16:25:28 +08:00
parent e6c6b1f43f
commit ded24a8446
23 changed files with 1073 additions and 231 deletions

View File

@@ -40,24 +40,23 @@ public class regionRoomBedController : ApiController
.Where(a => a.RoomUuid == roomUuid)
.ToList();
// 取出所有相关排程
var schedules = _db.RegionAndRoomAndBedSchedule
.Where(b => b.IsDeleted == false && b.IsActive)
.ToList();
StartTime = StartTime.Date;
EndTime = EndTime?.Date;
var data = beds.Select(a =>
{
// 在内存中处理日期比较
var bedSchedules = schedules
var bedSchedules = _db.RegionAndRoomAndBedSchedule
.Where(s => s.GuaDanOrderGuest.StatusCode != "403")
.Where(s => s.GuaDanOrderGuest.StatusCode != "404")
.Where(b => b.TargetUuid == a.Uuid
&& (b.ScheduleDate == null // 长期占用
|| (b.ScheduleDate >= StartTime.Date && b.ScheduleDate <= EndTime.Value.Date)))
&& (b.ScheduleDate == null
|| (b.ScheduleDate >= StartTime && b.ScheduleDate < EndTime)))
.ToList()
.Select(c => new
{
c.Uuid,
c.Description,
c.IsDeleted,
c.IsActive,
c.GuaDanOrderNo,
c.UseType,
c.Title,
@@ -74,13 +73,14 @@ public class regionRoomBedController : ApiController
a.Name,
a.Gender,
a.IsActive,
a.StatusUuid,
a.StatusCode,
a.RoomUuid,
canUsed,
schedule = bedSchedules
};
});
return Ok(data);
}
@@ -93,7 +93,7 @@ public class regionRoomBedController : ApiController
{
return BadRequest("當前客房不存在");
}
if(room.Gender != bed.Gender)
if (room.Gender != bed.Gender)
{
return BadRequest("床為性別和房間性別必須一致");
}
@@ -105,7 +105,7 @@ public class regionRoomBedController : ApiController
{
Name = bed.Name,
RoomUuid = bed.RoomUuid,
StatusUuid = bed.StatusUuid,
StatusCode = bed.StatusCode,
IsActive = bed.IsActive,
Gender = bed.Gender,
Uuid = Guid.NewGuid(),
@@ -114,10 +114,11 @@ public class regionRoomBedController : ApiController
_db.SaveChanges();
//創建床位
return Ok(new {
return Ok(new
{
uuid = regionBed.Uuid,
roomUuid = regionBed.RoomUuid,
statusuuid = regionBed.StatusUuid,
statuscode = regionBed.StatusCode,
isactive = regionBed.IsActive,
gender = regionBed.Gender,
name = regionBed.Name,
@@ -146,7 +147,7 @@ public class regionRoomBedController : ApiController
{
return BadRequest("床為性別和房間性別必須一致");
}
oldBed.StatusUuid = bed.StatusUuid;
oldBed.StatusCode = bed.StatusCode;
oldBed.IsActive = bed.IsActive;
oldBed.Name = bed.Name;
oldBed.Gender = bed.Gender;
@@ -174,8 +175,37 @@ public class regionRoomBedController : ApiController
public async Task<IHttpActionResult> GetCanUseBedCountByTime(DateTime startTime, DateTime endTime)
{
//获取某个时间段内可用床位数量
var counts = await RegionAndRoomAndBedSchedule.GetAvailableBedCountsAsync(_db, startTime, endTime);
return Ok(counts);
var start = startTime.Date;
var end = endTime.Date;
// 找出所有在日期範圍內被占用的床位
var busyBedUuids = await _db.RegionAndRoomAndBedSchedule
.Where(s => s.GuaDanOrderGuest.StatusCode != "403")
.Where(s => s.GuaDanOrderGuest.StatusCode != "404")
.Where(a => a.IsCancel == false)
.Where(s => s.IsDeleted == false
&& (s.ScheduleDate == null // 長期占用
|| (s.ScheduleDate >= start && s.ScheduleDate < end)))
.Select(s => s.TargetUuid)
.Distinct()
.ToListAsync();
// 可用床位 = 所有床位 - 忙碌床位
var availableBeds = _db.RegionRoomBed
.Where(b => !busyBedUuids.Contains(b.Uuid));
var result = await availableBeds
.GroupBy(b => b.Gender)
.Select(g => new
{
Gender = g.Key,
Count = g.Count()
})
.ToListAsync();
var male = result.Where(r => r.Gender == true).Select(r => r.Count).FirstOrDefault();
var female = result.Where(r => r.Gender == false).Select(r => r.Count).FirstOrDefault();
return Ok(new {male, female});
}
[HttpPost]
@@ -260,7 +290,7 @@ public class regionRoomBedController : ApiController
}
}
if(index < followers.Count)
if (index < followers.Count)
{
isAllallocation = false;
return;
@@ -313,7 +343,7 @@ public class regionRoomBedController : ApiController
{
// 先拉出床位相關排程到內存,避免 EF 不支援 .Date
var schedules = _db.RegionAndRoomAndBedSchedule
.Where(s => s.IsDeleted == false && s.IsActive && s.TargetUuid == req.bedUuid)
.Where(s => s.IsDeleted == false && !s.IsCancel && s.TargetUuid == req.bedUuid)
.ToList();
bool conflictExists = schedules.Any(s =>
@@ -364,7 +394,6 @@ public class regionRoomBedController : ApiController
ScheduleDate = date,
UseType = (int)RegionAndRoomAndBedSchedule.SchedulePurpose.Bed_Reservation,
IsDeleted = false,
IsActive = true,
CreatedBy = "系统自动分配",
CreatedAt = DateTime.Now,
GuaDanOrderNo = guest.GuaDanOrderNo
@@ -382,7 +411,6 @@ public class regionRoomBedController : ApiController
ScheduleDate = null,
UseType = (int)RegionAndRoomAndBedSchedule.SchedulePurpose.Bed_Reservation,
IsDeleted = false,
IsActive = true,
CreatedBy = "系统自动分配",
CreatedAt = DateTime.Now,
GuaDanOrderNo = guest.GuaDanOrderNo
@@ -406,7 +434,7 @@ public class regionRoomBedController : ApiController
private bool BedIsCanUsed(RegionRoomBed bed, DateTime? StartTime, DateTime? EndTime)
{
if(!bed.IsActive)
if (!bed.IsActive)
{
return false;
}