guadan
This commit is contained in:
@@ -3,6 +3,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
using System.Web.Routing;
|
||||
@@ -39,7 +40,7 @@ public class regionController : ApiController
|
||||
var startDate = filter.StartDate.Date;
|
||||
var endDate = filter.EndDate.Date;
|
||||
|
||||
var query = _db.Region//区域状态是否启用这里只设置了过滤了有客房的区域,是否要过滤所有
|
||||
var query = _db.Region//區域狀態是否啟用這裡只設置了過濾了有客房的區域,是否要過濾所有
|
||||
.Where(r => !r.IsDeleted)
|
||||
.Where(r => r.IsActive)
|
||||
.Where(r => r.Room.Any());
|
||||
@@ -68,6 +69,7 @@ public class regionController : ApiController
|
||||
r.Uuid,
|
||||
r.Name,
|
||||
regionPath = r.Name,
|
||||
isStop = !IsRegionAvailable(r.Uuid),
|
||||
Room = r.Room
|
||||
.Where(room => filter.Gender == null || room.Gender == filter.Gender)
|
||||
.Where(room =>
|
||||
@@ -149,6 +151,30 @@ public class regionController : ApiController
|
||||
Summary = summary,
|
||||
});
|
||||
}
|
||||
public bool IsRegionAvailable(Guid regionUuid)
|
||||
{
|
||||
var current = _db.Region.FirstOrDefault(r => r.Uuid == regionUuid);
|
||||
while (current != null)
|
||||
{
|
||||
// 當前區域不可用就直接返回 false
|
||||
if (!current.IsActive || current.IsDeleted)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// 沒有父區域了,說明一路上都可用
|
||||
if (!current.ParentUuid.HasValue)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// 繼續往父區域走
|
||||
current = _db.Region.FirstOrDefault(r => r.Uuid == current.ParentUuid.Value);
|
||||
}
|
||||
|
||||
// 沒查到(極端情況,比如資料庫被改了)
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 遞迴生成區域完整路徑
|
||||
@@ -228,25 +254,25 @@ public class regionController : ApiController
|
||||
{
|
||||
var allRegions = _db.Region.ToList();
|
||||
|
||||
// 根区域
|
||||
// 根區域
|
||||
var rootRegions = allRegions
|
||||
.Where(r => r.ParentUuid == null)
|
||||
.OrderBy(r => r.SortOrder)
|
||||
.ToList();
|
||||
|
||||
// 生成树并按性别过滤
|
||||
// 生成樹並按性別過濾
|
||||
var tree = rootRegions
|
||||
.Select(r => BuildRegionDtoByGender(r, allRegions, request.IsMale))
|
||||
.Where(r => r != null) // 去掉没有房间的区域
|
||||
.Where(r => r != null) // 去掉沒有房間的區域
|
||||
.ToList();
|
||||
|
||||
return Ok(tree);
|
||||
}
|
||||
|
||||
// 根据性别过滤房间的 BuildRegionDto
|
||||
// 根據性別過濾房間的 BuildRegionDto
|
||||
private RegionDto BuildRegionDtoByGender(Region region, List<Region> allRegions, bool? gender)
|
||||
{
|
||||
// 过滤房间按性别
|
||||
// 過濾房間按性別
|
||||
var rooms = region.Room?
|
||||
.Where(a => !gender.HasValue || a.Gender == gender.Value)
|
||||
.Select(a => new RoomDto
|
||||
@@ -268,14 +294,14 @@ public class regionController : ApiController
|
||||
})
|
||||
.ToList();
|
||||
|
||||
// 递归生成子区域
|
||||
// 遞迴生成子區域
|
||||
var children = allRegions
|
||||
.Where(r => r.ParentUuid == region.Uuid)
|
||||
.Select(child => BuildRegionDtoByGender(child, allRegions, gender))
|
||||
.Where(c => c != null) // 去掉没有房间的子区域
|
||||
.Where(c => c != null) // 去掉沒有房間的子區域
|
||||
.ToList();
|
||||
|
||||
// 如果这个区域既没有房间也没有子区域,则返回 null
|
||||
// 如果這個區域既沒有房間也沒有子區域,則返回 null
|
||||
if (!rooms.Any() && !children.Any())
|
||||
return null;
|
||||
|
||||
@@ -297,10 +323,10 @@ public class regionController : ApiController
|
||||
};
|
||||
}
|
||||
|
||||
// 请求模型
|
||||
// 請求模型
|
||||
public class GenderRequest
|
||||
{
|
||||
public bool? IsMale { get; set; } // true = 男, false = 女, null = 不过滤
|
||||
public bool? IsMale { get; set; } // true = 男, false = 女, null = 不過濾
|
||||
}
|
||||
|
||||
public class RoomDto
|
||||
@@ -374,10 +400,28 @@ public class regionController : ApiController
|
||||
var region = _db.Region.FirstOrDefault(r => r.Uuid == dto.Uuid);
|
||||
if (region == null)
|
||||
return NotFound();
|
||||
if(dto.RoomCount < region.Room.Count())
|
||||
if (dto.RoomCount < region.Room.Count())
|
||||
{
|
||||
return BadRequest("客房數量小於已存在的客房數量");
|
||||
}
|
||||
if (dto.IsActive == false)
|
||||
{
|
||||
var regionIds = GetAllRegionIds(region.Uuid);
|
||||
var hasPendingBeds = _db.RegionRoomBed
|
||||
.Where(b => regionIds.Contains(b.Room.RegionUuid))
|
||||
.SelectMany(b => b.GuaDanOrderGuest)
|
||||
.Any(g => !g.IsDeleted &&
|
||||
(g.RegionRoomBedStatus.Code == GuaDanOrderGuest.STATUS_BOOKED || // 預約中
|
||||
g.RegionRoomBedStatus.Code == GuaDanOrderGuest.STATUS_CHECKED_IN)); // 已入住
|
||||
if (hasPendingBeds)
|
||||
{
|
||||
return Content(HttpStatusCode.BadRequest, new
|
||||
{
|
||||
code = "BED_IS_USED",
|
||||
message = "該區域有床位正在掛單中,請先處理"
|
||||
});
|
||||
}
|
||||
}
|
||||
region.Name = dto.Name;
|
||||
region.Description = dto.Description;
|
||||
region.SortOrder = dto.SortOrder;
|
||||
@@ -416,6 +460,25 @@ public class regionController : ApiController
|
||||
return Ok(new { message = "刪除成功" });
|
||||
}
|
||||
|
||||
public List<Guid> GetAllRegionIds(Guid regionUuid)
|
||||
{
|
||||
var regionIds = new List<Guid> { regionUuid };
|
||||
|
||||
var children = _db.Region
|
||||
.Where(r => r.ParentUuid == regionUuid)
|
||||
.Select(r => r.Uuid)
|
||||
.ToList();
|
||||
|
||||
foreach (var childId in children)
|
||||
{
|
||||
regionIds.AddRange(GetAllRegionIds(childId));
|
||||
}
|
||||
|
||||
return regionIds;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 遞迴刪除子節點
|
||||
private void DeleteRegionRecursive(Region region)
|
||||
{
|
||||
@@ -438,7 +501,7 @@ public class regionController : ApiController
|
||||
[Route("api/region/regionwithroom")]
|
||||
public IHttpActionResult GetRegionWithRoom()
|
||||
{
|
||||
//返回有房间的region
|
||||
//返回有房間的region
|
||||
var data = _db.Region.Where(a => a.Room.Count() > 0)
|
||||
.Select(r => new
|
||||
{
|
||||
@@ -459,7 +522,7 @@ public class regionController : ApiController
|
||||
[Route("api/room/roomwithbed")]
|
||||
public IHttpActionResult GetRoomWithBed(Guid? RegionUuid = null)
|
||||
{
|
||||
//获取所有有床位的房间
|
||||
//獲取所有有床位的房間
|
||||
var query = _db.Room
|
||||
.Select(r => new
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user