Browse Source

Merge branch 'develop' of http://132.232.92.186:3000/XinXiBu/OA2023 into develop

jiangjc 10 months ago
parent
commit
b47e572bba

+ 1 - 1
OASystem/OASystem.Api/Controllers/FinancialController.cs

@@ -2593,7 +2593,7 @@ namespace OASystem.API.Controllers
                             groupSZSubStr += $"{subItem.RemaksDescription}\r\n";
                         }
 
-                        groupGZSubStr += $"\t";
+                        //groupGZSubStr += $"\t";
                     }
 
                     if (!string.IsNullOrEmpty(groupGZSubStr)) groupGZStr += $"团组:{item.GroupName}\r\n{groupGZSubStr}\r\n";

+ 172 - 3
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>
         /// 酒店预订
         /// 确认单
@@ -11127,7 +11296,7 @@ namespace OASystem.API.Controllers
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> PostVisaFeeAddAndUpdate(VisaFeeAddAndUpdateDto _dto)
         {
-            var _view = await _visaFeeInfoRep._AddAndUpdate(_dto);
+            var _view = await _visaFeeInfoRep._Update(_dto);
             if (_view.Code != 0)
             {
                 return Ok(JsonView(false, _view.Msg));

+ 0 - 1
OASystem/OASystem.Domain/Dtos/Groups/VisaFeeDto.cs

@@ -23,7 +23,6 @@ namespace OASystem.Domain.Dtos.Groups
         /// 1 添加 
         /// 2 修改
         /// </summary>
-        public int Status { get; set; }
 
         public int OpUserId { get; set; }
 

+ 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
 
 

+ 2 - 1
OASystem/OASystem.Infrastructure/Repositories/Groups/DecreasePaymentsRepository.cs

@@ -52,8 +52,9 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     sqlWhere += string.Format(@" And ccp.IsPay = {0} ", dto.IsPaySign);
                 }
 
+                //雷怡 2024-5-8 15:14 新增View字段 CreateTime
                 string sql = string.Format(@" Select gdp.Id,gdp.DiId,gdp.PriceName,gdp.Price,sd1.[Name] as Currency,gdp.FilePath,su.CnName as CreateUserName,
-ccp.IsAuditDM as isAudit,ccp.IsPay
+ccp.IsAuditDM as isAudit,ccp.IsPay,gdp.CreateTime
 From Grp_DecreasePayments as gdp With(Nolock) Left Join Grp_CreditCardPayment as ccp With(Nolock) On gdp.Id = ccp.CId
 Left Join Sys_SetData as sd1 On gdp.Currency = sd1.Id
 Left Join Sys_Users as su On gdp.CreateUserId = su.Id

+ 19 - 24
OASystem/OASystem.Infrastructure/Repositories/Groups/VisaFeeInfoRepository.cs

@@ -79,9 +79,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
         /// <param name="portType"></param>
         /// <param name="diId"></param>
         /// <returns></returns>
-        public async Task<Result> _AddAndUpdate(VisaFeeAddAndUpdateDto dto)
+        public async Task<Result> _Update(VisaFeeAddAndUpdateDto dto)
         {
-            if (dto.Status < 1 || dto.Status > 2) return _result = new Result() { Code = -1, Msg = "请传入有效的Status参数" };
             if (dto.VisaFeeInfos.Count  < 1) return _result = new Result() { Code = -1, Msg = "请传入有效的签证费用集合参数" };
             if (dto.PortType < 1 || dto.PortType > 3) return _result = new Result() { Code = -1, Msg = "请传入有效的portType参数" };
 
@@ -116,8 +115,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                             VisaPrice = item.VisaFee,
                             LastUpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                         };
-                        int update = _sqlSugar.Updateable(_CountryFeeCost).UpdateColumns(it => new { it.VisaPrice, it.LastUpdateTime }).WhereColumns(it => it.Id).ExecuteCommand();
-                        if (update > 0)
+                        int update1 = _sqlSugar.Updateable(_CountryFeeCost).UpdateColumns(it => new { it.VisaPrice, it.LastUpdateTime }).WhereColumns(it => it.Id).ExecuteCommand();
+                        if (update1 > 0)
                         {
                             visaFeeUpdate = true;
                         }
@@ -136,26 +135,22 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 });
             }
 
-
-            if (dto.Status == 1) //添加
+            //执行删除
+            var update = _sqlSugar.Updateable<Grp_VisaFeeInfo>().SetColumns(it => new Grp_VisaFeeInfo()
             {
-                var add = _sqlSugar.Insertable(visaInfos).ExecuteCommand();
-                if (add > 0)
-                {
-                    CommitTran(); 
-                    return new Result() {Code = 0 ,Msg = "操作成功!" };
-                }
-            }
-            else if (dto.Status == 2) //修改
+                DeleteUserId = dto.OpUserId,
+                DeleteTime = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"),
+                IsDel = 1
+
+            }).Where(it => it.DiId == dto.DiId).ExecuteCommand();
+
+            var add = _sqlSugar.Insertable(visaInfos).ExecuteCommand();
+            if (add > 0)
             {
-                var  update = _sqlSugar.Updateable(visaInfos).IgnoreColumns(it => new { it.CreateUserId,it.CreateTime,it.IsDel }).WhereColumns(it => it.Id).ExecuteCommand();
-                if (update > 0 || visaFeeUpdate)
-                {
-                    CommitTran();
-                    return new Result() { Code = 0, Msg = "操作成功!" };
-                }
+                CommitTran(); 
+                return new Result() {Code = 0 ,Msg = "操作成功!" };
             }
-
+           
             RollbackTran();
             return _result;
         }
@@ -170,9 +165,9 @@ namespace OASystem.Infrastructure.Repositories.Groups
         {
             if (diId < 1) return _result = new Result() { Code = -1, Msg = "请传入有效的DiId参数" };
 
-            var visaData = await _sqlSugar.Queryable<Grp_VisaFeeInfo>().Where(it => it.IsDel == 0).ToListAsync();
+            var visaData = await _sqlSugar.Queryable<Grp_VisaFeeInfo>().Where(it => it.IsDel == 0 && it.DiId == diId).ToListAsync();
             List<int> ids = visaData.Select (it => it.CountryVisaFeeId).ToList();
-            var visaCountryDatas = await _sqlSugar.Queryable< Res_CountryFeeCost >().Where(it => ids.Contains(it.Id)).ToListAsync();
+            var visaCountryDatas = await _sqlSugar.Queryable<Res_CountryFeeCost>().Where(it => ids.Contains(it.Id)).ToListAsync();
 
             List<dynamic> datas = new List<dynamic>();
             string remark = "";
@@ -183,7 +178,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 {
                     var countryData = visaCountryDatas.Find(it => it.Id == item.CountryVisaFeeId);
 
-                    decimal visaFeeTotal = countryData?.VisaPrice ?? 0.00M + item.AgencyFee + item.OtherFee;
+                    decimal visaFeeTotal = Convert.ToDecimal( countryData?.VisaPrice ?? 0.00M) + item.AgencyFee + item.OtherFee;
                     remark += $@"{countryData?.VisaCountry ?? ""}:签证总费用:{visaFeeTotal}元/人 其中(";
                     if (countryData?.VisaPrice > 0) remark += $@"签证费用:{countryData?.VisaPrice.ToString("#0.00")}元、";
                     if (item.AgencyFee > 0) remark += $@"代办费:{item.AgencyFee.ToString("#0.00")}元、";