From c38dc55dff2549815a8654c16aec07466764ab67 Mon Sep 17 00:00:00 2001 From: HUANGBANGLIN Date: Tue, 16 Sep 2025 17:53:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E6=8C=82=E5=8D=95=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/App_Code/api/guadanOrderController.cs | 51 +++++++- web/App_Code/api/regionController.cs | 7 +- web/App_Code/api/regionRoomBedController.cs | 7 +- web/App_Code/api/regionRoomController.cs | 51 ++++++-- web/admin/guadan/create.aspx | 4 + web/admin/guadan/guest/index.aspx | 14 +-- web/admin/guadan/index.aspx | 129 ++++++++++++++++++-- web/admin/region/index.aspx | 4 + 8 files changed, 238 insertions(+), 29 deletions(-) diff --git a/web/App_Code/api/guadanOrderController.cs b/web/App_Code/api/guadanOrderController.cs index dbf7a6a..07b63f8 100644 --- a/web/App_Code/api/guadanOrderController.cs +++ b/web/App_Code/api/guadanOrderController.cs @@ -1,4 +1,5 @@ using Model; +using PagedList; using System; using System.Collections.Generic; using System.Data.Entity; @@ -15,12 +16,36 @@ using static regionController; public class guadanOrderController : ApiController { private Model.ezEntities _db = new Model.ezEntities(); - [HttpGet] + [HttpPost] [Route("api/guadan/list")] - public async Task getGuadanList() + public async Task getGuadanList([FromBody] guadan_order_search_dto search) { - var data = await _db.GuaDanOrder + + var query = _db.GuaDanOrder .Where(a => a.IsCancel == false) + .Where(a => a.IsDeleted == false); + if(search.guadanUser != null) + { + query = query.Where(order => order.BookerName == search.guadanUser); + } + if (search.startDate != null && search.endDate != null) + { + query = query.Where(order => order.StartDate >= search.startDate) + .Where(order => order.EndDate <= search.endDate); + } + else + { + if (search.startDate != null) + { + query = query.Where(order => order.StartDate == search.startDate); + } + else if (search.endDate != null) + { + query = query.Where(order => order.EndDate == search.endDate); + } + } + var total = query.Count(); + var data = await query .OrderByDescending(b => b.CreatedAt) .Select(a => new { @@ -36,8 +61,15 @@ public class guadanOrderController : ApiController .Where(c => c.GuaDanOrderNo == a.GuaDanOrderNo && c.IsDeleted == false) .Where(c => c.RegionRoomBedStatus.Code != GuaDanOrderGuest.STATUS_CANCELLED) .Count(), - }).ToListAsync(); - return Ok(data); + }) + .Skip((search.page - 1) * search.pageSize) + .Take(search.pageSize) + .ToListAsync(); + return Ok(new + { + total, + data + }); } [HttpGet] [Route("api/guadan/getorderbyid")] @@ -221,4 +253,13 @@ public class guadanOrderController : ApiController public RegionRoomBed bed { get; set; } = null; } + public class guadan_order_search_dto + { + public DateTime? startDate { get; set; } + public DateTime? endDate { get; set; } + public string guadanUser { get; set; } + public int page { get; set; } = 1; + public int pageSize { get; set; } = 10; + } + } \ No newline at end of file diff --git a/web/App_Code/api/regionController.cs b/web/App_Code/api/regionController.cs index 7d7eb61..d830ffb 100644 --- a/web/App_Code/api/regionController.cs +++ b/web/App_Code/api/regionController.cs @@ -39,8 +39,9 @@ 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()); if (filter.Gender != null) @@ -373,6 +374,10 @@ 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()) + { + return BadRequest("客房數量小於已存在的客房數量"); + } region.Name = dto.Name; region.Description = dto.Description; region.SortOrder = dto.SortOrder; diff --git a/web/App_Code/api/regionRoomBedController.cs b/web/App_Code/api/regionRoomBedController.cs index a2c74e6..dec7292 100644 --- a/web/App_Code/api/regionRoomBedController.cs +++ b/web/App_Code/api/regionRoomBedController.cs @@ -379,6 +379,7 @@ public class regionRoomBedController : ApiController RoomUuid = roomUuid, CheckInAt = allocationStart, CheckOutAt = allocationEnd, + StatusCode = "401", }; _db.GuaDanOrderGuest.Add(guest); @@ -396,7 +397,8 @@ public class regionRoomBedController : ApiController IsDeleted = false, CreatedBy = "系统自动分配", CreatedAt = DateTime.Now, - GuaDanOrderNo = guest.GuaDanOrderNo + GuaDanOrderNo = guest.GuaDanOrderNo, + Title = "掛單" }; _db.RegionAndRoomAndBedSchedule.Add(newSchedule); } @@ -413,7 +415,8 @@ public class regionRoomBedController : ApiController IsDeleted = false, CreatedBy = "系统自动分配", CreatedAt = DateTime.Now, - GuaDanOrderNo = guest.GuaDanOrderNo + GuaDanOrderNo = guest.GuaDanOrderNo, + Title = "掛單" }; _db.RegionAndRoomAndBedSchedule.Add(newSchedule); } diff --git a/web/App_Code/api/regionRoomController.cs b/web/App_Code/api/regionRoomController.cs index dc0e2a9..33cc4f5 100644 --- a/web/App_Code/api/regionRoomController.cs +++ b/web/App_Code/api/regionRoomController.cs @@ -38,6 +38,15 @@ public class regionRoomController : ApiController { return BadRequest("請輸入床位數量"); } + var region = _db.Region.Find(room.RegionUuid); + if(region == null) + { + return BadRequest("未找到客房所屬的區域"); + } + if(region.Room.Count() >= region.RoomCount) + { + return BadRequest("當前區域客房數量已經達到上限"); + } var newRoom = new Room(); newRoom.Name = room.Name; newRoom.RegionUuid = room.RegionUuid; @@ -103,15 +112,43 @@ public class regionRoomController : ApiController [Route("api/region/room/delete")] public async Task deleteRoom([FromBody] Room rm) { - var room = await _db.Room.FindAsync(rm.Uuid); - if (room == null) return BadRequest("房間不存在"); + using (var transaction = _db.Database.BeginTransaction()) + { + try + { + var room = await _db.Room.FindAsync(rm.Uuid); + if (room == null) return BadRequest("房間不存在"); - var beds = _db.RegionRoomBed.Where(b => b.RoomUuid == room.Uuid); - _db.RegionRoomBed.RemoveRange(beds); + var beds = _db.RegionRoomBed.Where(b => b.RoomUuid == room.Uuid); + _db.RegionRoomBed.RemoveRange(beds); - _db.Room.Remove(room); - await _db.SaveChangesAsync(); - return Ok(new { message = "刪除成功" }); + _db.Room.Remove(room); + + await _db.SaveChangesAsync(); + transaction.Commit(); + + return Ok(new { message = "刪除成功" }); + } + catch (System.Data.Entity.Infrastructure.DbUpdateException ex) + { + transaction.Rollback(); + + // 判断是否为外键约束错误 + if (ex.InnerException?.InnerException is System.Data.SqlClient.SqlException sqlEx && + sqlEx.Number == 547) // 547 = 外键冲突 + { + return BadRequest("房間或床位正在被使用,不能刪除"); + } + + return InternalServerError(ex); + } + catch (Exception ex) + { + transaction.Rollback(); + return InternalServerError(ex); + } + } } + } \ No newline at end of file diff --git a/web/admin/guadan/create.aspx b/web/admin/guadan/create.aspx index 01d212d..e6fc61c 100644 --- a/web/admin/guadan/create.aspx +++ b/web/admin/guadan/create.aspx @@ -1146,6 +1146,10 @@ .then(res => { this.resetAutomaticBedAllocation(); this.getGuadanOrderGuestByOrderNo(); + }).catch((error) => { + this.$refs.messageModal.open({ + message: (error.response?.data?.message || error.message) + }); }); }, diff --git a/web/admin/guadan/guest/index.aspx b/web/admin/guadan/guest/index.aspx index cdf72b6..ac07da3 100644 --- a/web/admin/guadan/guest/index.aspx +++ b/web/admin/guadan/guest/index.aspx @@ -20,13 +20,13 @@
- + -
- + -
@@ -95,7 +95,7 @@ -