update from old git

This commit is contained in:
2025-09-04 18:30:54 +08:00
parent af2c152ef6
commit 61502cb3bd
46 changed files with 6420 additions and 0 deletions

View File

@@ -0,0 +1,144 @@
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
/// <summary>
/// RegionAndRoomAndBedSchedule 的摘要描述
/// </summary>
namespace Model
{
public partial class RegionAndRoomAndBedSchedule
{
public enum SchedulePurpose
{
None = -1, // 無特定用途
// 區域相關
Region_Repair = 10, // 區域修繕
Region_Cleaning = 11, // 區域清潔
// 客房相關
Room_Reservation = 20, // 客房預訂
Room_Cleaning = 21, // 客房清潔
Room_Disinfection = 22, // 客房消毒
Room_Repair = 23, // 客房維修
// 床位相關
Bed_Reservation = 30, // 床位預訂
Bed_Cleaning = 31, // 床位清潔
Bed_Repair = 32, // 床位維修
Bed_Disinfection = 33, // 床位消毒
// 其他用途
Event_Use = 90, // 活動使用
Other = 99 // 其他
}
public enum StatusEnum
{
None = 0,
Normal = 1,
Cancel = 2,
}
/// <summary>
/// 查找指定时间段内可用床位(无排程占用)
/// </summary>
/// <param name="db">数据库上下文</param>
/// <param name="start">查询开始时间</param>
/// <param name="end">查询结束时间</param>
/// <returns>可用床位列表</returns>
public static async Task<List<RegionRoomBed>> GetAvailableBedsAsync(ezEntities db, DateTime start, DateTime? end)
{
start = start.Date;
end = end?.Date;
// 找出在日期範圍內被占用的床位 Uuid包括長期占用 ScheduleDate = null
var busyBedUuidsQuery = db.RegionAndRoomAndBedSchedule
.Where(s => s.IsDeleted == false && s.IsActive
&& (s.ScheduleDate == null
|| (end.HasValue
&& s.ScheduleDate >= start
&& s.ScheduleDate <= end.Value)));
var busyBedUuids = await busyBedUuidsQuery
.Select(s => s.TargetUuid)
.Distinct()
.ToListAsync();
// 空閒床位 = 所有床位 - 忙碌床位
var availableBeds = await db.RegionRoomBed
.Where(b => !busyBedUuids.Contains(b.Uuid))
.ToListAsync();
return availableBeds;
}
public static async Task<bool> IsBedAvailableAsync(ezEntities db, Guid targetUuid, DateTime start, DateTime? end)
{
// 如果 end 為 null表示長期占用直接判斷是否已有長期占用
if (end == null)
{
var hasLongTerm = await db.RegionAndRoomAndBedSchedule
.AnyAsync(s => s.IsDeleted == false
&& s.IsActive
&& s.TargetUuid == targetUuid
&& s.ScheduleDate == null);
return !hasLongTerm;
}
// 短期占用,查詢每日排程中有無衝突
var totalDays = (end.Value.Date - start.Date).Days + 1;
for (int i = 0; i < totalDays; i++)
{
var date = start.Date.AddDays(i);
var conflict = await db.RegionAndRoomAndBedSchedule
.AnyAsync(s => s.IsDeleted == false
&& s.IsActive
&& s.TargetUuid == targetUuid
&& s.ScheduleDate == date);
if (conflict)
return false;
}
return true;
}
public static async Task<object> GetAvailableBedCountsAsync(ezEntities db, DateTime start, DateTime end)
{
start = start.Date;
end = end.Date;
// 找出所有在日期範圍內被占用的床位
var busyBedUuids = await db.RegionAndRoomAndBedSchedule
.Where(s => s.IsDeleted == false && s.IsActive
&& (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 new { male, female };
}
}
}