Browse Source

酒店预订
生成Voucher-2024Versions

leiy 10 months ago
parent
commit
6dbf9c8837

+ 171 - 2
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -67,6 +67,7 @@ using OASystem.API.OAMethodLib.YouDaoAPI;
 using NPOI.XSSF.Streaming.Values;
 using OASystem.API.OAMethodLib.Quartz.Business;
 using System.Linq;
+using NPOI.POIFS.NIO;
 
 namespace OASystem.API.Controllers
 {
@@ -9004,10 +9005,12 @@ namespace OASystem.API.Controllers
             }
 
         }
+
+
         /// <summary>
         /// 生成VOUCHER
         /// </summary>
-        /// <param name=""></param>
+        /// <param name="dto"></param>
         /// <returns></returns>
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
@@ -9201,6 +9204,7 @@ namespace OASystem.API.Controllers
             }
 
         }
+       
         /// <summary>
         /// 导出确认单
         /// </summary>
@@ -9638,12 +9642,13 @@ namespace OASystem.API.Controllers
         /// <summary>
         /// 酒店预订
         /// 生成VOUCHER
+        /// 2024.05.06 之前版本
         /// </summary>
         /// <param name="_dto"></param>
         /// <returns></returns>
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> PostHotelReservationsCreateVoucher(HotelReservationsCreateVoucherDto _dto)
+        public async Task<IActionResult> PostHotelReservationsCreateVoucher1(HotelReservationsCreateVoucherDto _dto)
         {
             try
             {
@@ -9903,6 +9908,170 @@ namespace OASystem.API.Controllers
 
         }
 
+        /// <summary>
+        /// 酒店预订
+        /// 生成VOUCHER
+        /// 2024.05.06 之后版本
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostHotelReservationsCreateVoucher(HotelReservationsCreateVoucherDto _dto)
+        {
+                #region  参数验证
+                if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));
+                if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id
+                if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空"));
+
+                #region 团组操作权限验证 76 酒店预定模块
+                var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);
+                if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg));
+                #endregion
+
+                PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
+
+                #region 页面操作权限验证
+                pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
+
+                if (pageFunAuthView.FilesDownloadAuth == 0) return Ok(JsonView(false, "您没有文件下载权限!"));
+
+            #endregion
+
+            #endregion
+
+            List<Grp_HotelReservations> hrDtas = await _sqlSugar.Queryable<Grp_HotelReservations>().Where(it => it.IsDel == 0 && it.DiId == _dto.DiId).ToListAsync();
+
+            //判断数据是否完整
+            if (hrDtas.Count < 1) return Ok(JsonView(false, "请先录入酒店预订信息!"));
+
+            hrDtas = hrDtas.OrderBy(it => it.CheckInDate).ToList();
+            string strFileName = "HotelStatement/";
+
+            string guestNames = ""; //格式Mr.xxx Ms.xxx
+            List<HotelVoucherInfoView> vouchers = new List<HotelVoucherInfoView>();
+
+            #region 数据处理
+
+            List<int> guestIds = new List<int>();
+            int index = 0; 
+            foreach (var item in hrDtas)
+            {
+                if (item.GuestName.Contains(","))
+                {
+                    string[] guestIdArr = item.GuestName.Split(',');
+                    foreach (var guestIdStr in guestIdArr)
+                    {
+                        bool guestBool = int.TryParse(guestIdStr,out int guestId);
+                        if (guestBool)
+                        {
+                            guestIds.Add(guestId);
+                        }
+                    }
+                }
+                else guestNames += item.GuestName;
+
+
+                var voucherInfo = new HotelVoucherInfoView()
+                {
+                    HotelName = item.HotelName,
+                    CheckInDate = item.CheckInDate,
+                    CheckOutDate = item.CheckOutDate,
+                    ConfirmationNumber = item.DetermineNo.Trim(),
+                    RoomType = item.RoomExplanation
+                };
+                vouchers.Add(voucherInfo);
+
+            }
+
+            if (guestIds.Count > 0)
+            {
+                guestIds = guestIds.Distinct().ToList();
+
+                var guestDatas = await _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0 && guestIds.Contains(it.Id)).ToListAsync();
+                if (guestDatas.Count > 0 )
+                {
+                    guestNames = "";
+                    foreach ( var guest in guestDatas ) 
+                    {
+                        string guestName = "";
+                        if (guest.Sex == 0) guestName += @"MR.";
+                        else if (guest.Sex == 1) guestName += @"MS.";
+
+                        if (guest.Pinyin == null) guestName += $"{string.Join("", guest.LastName.GetTotalPingYin()).ToUpper()}/{string.Join("", guest.FirstName.GetTotalPingYin()).ToUpper()}";
+                        else guestName += @$"{guest.Pinyin.Replace(" ","")}";
+
+                        guestNames += @$"{guestName.Trim()}、";
+                    }
+                    if (guestNames.Length > 0 )
+                    {
+                        guestNames = guestNames.Substring(0, guestNames.Length - 1);
+                    }
+                }
+            }
+
+            #endregion
+
+            //载入模板
+            string sss = AppSettingsHelper.Get("WordBasePath") + "Template/Voucher-2024Versions.docx";
+
+            Document doc = new Document(sss);
+            DocumentBuilder builder = new DocumentBuilder(doc);
+
+            if (doc.Range.Bookmarks["GuestName"] != null)
+            {
+                Bookmark mark = doc.Range.Bookmarks["GuestName"];
+                mark.Text = guestNames;
+            }
+
+            NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);
+            Aspose.Words.Tables.Table table = allTables[0] as Aspose.Words.Tables.Table;
+
+            vouchers = vouchers.OrderBy(it => it.CheckInDate).ToList();
+            for (int i = 1; i <= vouchers.Count; i++)
+            {
+
+                HotelVoucherInfoView hviv = vouchers[i-1];
+
+                builder.MoveToCell(0, i, 0, 0);
+                builder.Write(hviv.HotelName);
+
+                builder.MoveToCell(0, i, 1, 0);
+                builder.Write(hviv.CheckInDate);
+
+                builder.MoveToCell(0, i, 2, 0);
+                builder.Write(hviv.CheckOutDate);
+
+                builder.MoveToCell(0, i, 3, 0);
+                builder.Write(hviv.RoomType);
+
+                builder.MoveToCell(0, i, 4, 0);
+                builder.Write(hviv.ConfirmationNumber);
+
+            }
+
+            //删除多余行
+            int currRowIndex = vouchers.Count+1;
+            int delRows = 21 - currRowIndex;
+            if (delRows > 0)
+            {
+                for (int i = 0; i < delRows; i++)
+                {
+                    table.Rows.RemoveAt(currRowIndex);
+                    //cultivateRowIndex++;
+                }
+            }
+
+
+            strFileName += "VOUCHER.docx";
+
+            var fileDir = AppSettingsHelper.Get("WordBasePath") + strFileName;
+            doc.Save(fileDir);
+            string Url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/" + strFileName;
+            return Ok(JsonView(true, "操作成功!", Url));
+        }
+
+
         /// <summary>
         /// 酒店预订
         /// 确认单

+ 31 - 0
OASystem/OASystem.Domain/ViewModels/Groups/HotelReservationsByDiIdView.cs

@@ -341,6 +341,37 @@ namespace OASystem.Domain.ViewModels.Groups
         public string? CcpRemark { get; set; }
     }
 
+    /// <summary>
+    /// 酒店Voucher Info
+    /// </summary>
+    public class HotelVoucherInfoView
+    {
+        /// <summary>
+        /// 酒店名称
+        /// </summary>
+        public string? HotelName { get; set; }
+
+        /// <summary>
+        /// 入住时间
+        /// </summary>
+        public string? CheckInDate { get; set; }
+
+        /// <summary>
+        /// 离店时间
+        /// </summary>
+        public string? CheckOutDate { get; set; }
+
+        /// <summary>
+        /// 房间类型
+        /// </summary>
+        public string? RoomType { get; set; }
+
+        /// <summary>
+        /// 确认号
+        /// </summary>
+        public string? ConfirmationNumber { get; set; }
+    }
+
     #endregion