LEIYI 8 months ago
parent
commit
c155cbd67d

+ 3 - 2
OASystem/EntitySync/Program.cs

@@ -137,8 +137,9 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Grp_ApprovalTravelDetails),  //公务出访表
     //typeof(Grp_ApprovalTravelDetails),  //公务出访表
      //typeof(Sys_Countries),  //洲
      //typeof(Sys_Countries),  //洲
      //typeof(Sys_Continent),  //国家
      //typeof(Sys_Continent),  //国家
-     typeof(Sys_Cities),  //城市
+     //typeof(Sys_Cities),  //城市
-     typeof(Grp_GroupModelFile),//团组文件
+     //typeof(Grp_GroupModelFile),//团组文件 
+     typeof(Grp_VisaCommission),//签证费用录入 
 
 
 });
 });
 Console.WriteLine("数据库结构同步完成!");
 Console.WriteLine("数据库结构同步完成!");

+ 169 - 5
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -82,6 +82,8 @@ namespace OASystem.API.Controllers
         private readonly HotelInquiryRepository _hotelInquiryRep;
         private readonly HotelInquiryRepository _hotelInquiryRep;
         private readonly FeeAuditRepository _feeAuditRep;
         private readonly FeeAuditRepository _feeAuditRep;
 
 
+        private readonly VisaCommissionRepository _visaCommissionRep;
+
         public GroupsController(ILogger<GroupsController> logger, IMapper mapper, SqlSugarClient sqlSugar, GrpScheduleRepository grpScheduleRep, DelegationInfoRepository groupRepository,
         public GroupsController(ILogger<GroupsController> logger, IMapper mapper, SqlSugarClient sqlSugar, GrpScheduleRepository grpScheduleRep, DelegationInfoRepository groupRepository,
             TaskAssignmentRepository taskAssignmentRep, AirTicketResRepository airTicketResRep, DecreasePaymentsRepository decreasePaymentsRep,
             TaskAssignmentRepository taskAssignmentRep, AirTicketResRepository airTicketResRep, DecreasePaymentsRepository decreasePaymentsRep,
             InvitationOfficialActivitiesRepository InvitationOfficialActivitiesRep, DelegationEnDataRepository delegationEnDataRep, EnterExitCostRepository enterExitCostRep
             InvitationOfficialActivitiesRepository InvitationOfficialActivitiesRep, DelegationEnDataRepository delegationEnDataRep, EnterExitCostRepository enterExitCostRep
@@ -90,7 +92,7 @@ namespace OASystem.API.Controllers
             GroupCostParameterRepository GroupCostParameterRepository, HotelPriceRepository hotelPriceRep, CustomersRepository customersRep, SetDataRepository setDataRep,
             GroupCostParameterRepository GroupCostParameterRepository, HotelPriceRepository hotelPriceRep, CustomersRepository customersRep, SetDataRepository setDataRep,
             TourClientListRepository tourClientListRep, TeamRateRepository teamRateRep, IHubContext<ChatHub, IChatClient> hubContext, UsersRepository usersRep, IJuHeApiService juHeApi,
             TourClientListRepository tourClientListRep, TeamRateRepository teamRateRep, IHubContext<ChatHub, IChatClient> hubContext, UsersRepository usersRep, IJuHeApiService juHeApi,
             InvertedListRepository invertedListRep, VisaFeeInfoRepository visaFeeInfoRep, TicketBlackCodeRepository ticketBlackCodeRep, HotelInquiryRepository hotelInquiryRep,
             InvertedListRepository invertedListRep, VisaFeeInfoRepository visaFeeInfoRep, TicketBlackCodeRepository ticketBlackCodeRep, HotelInquiryRepository hotelInquiryRep,
-            ThreeCodeRepository threeCodeRepository, FeeAuditRepository feeAuditRep)
+            ThreeCodeRepository threeCodeRepository, FeeAuditRepository feeAuditRep, VisaCommissionRepository visaCommissionRep)
         {
         {
             _logger = logger;
             _logger = logger;
             _mapper = mapper;
             _mapper = mapper;
@@ -131,6 +133,7 @@ namespace OASystem.API.Controllers
             _hotelInquiryRep = hotelInquiryRep;
             _hotelInquiryRep = hotelInquiryRep;
             _threeCodeRepository = threeCodeRepository;
             _threeCodeRepository = threeCodeRepository;
             _feeAuditRep = feeAuditRep;
             _feeAuditRep = feeAuditRep;
+            _visaCommissionRep = visaCommissionRep;
         }
         }
 
 
         #region 流程管控
         #region 流程管控
@@ -6377,6 +6380,50 @@ namespace OASystem.API.Controllers
         }
         }
         #endregion
         #endregion
 
 
+
+        #region 签证提成录入
+
+        /// <summary>
+        /// 签证提成录入 
+        /// 基础数据
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        [HttpGet]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> VisaCommissionInit()
+        {
+            return Ok(await _visaCommissionRep._Init());
+        }
+
+        /// <summary>
+        /// 签证提成录入 
+        /// Item
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        [HttpGet]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> VisaCommissionItem(VisaCommissionItemDto dto)
+        {
+            var validator = new VisaCommissionItemDtoValidator();
+            var validatorRes = await validator.ValidateAsync(dto);
+            if (!validatorRes.IsValid)
+            {
+                StringBuilder sb = new StringBuilder();
+                foreach (var item in validatorRes.Errors)
+                {
+                    sb.AppendLine(item.ErrorMessage);
+                }
+                return Ok(JsonView(false, sb.ToString()));
+            }
+
+            return Ok(await _visaCommissionRep._Init());
+        }
+
+
+        #endregion
+
         #region op费用录入
         #region op费用录入
         /// <summary>
         /// <summary>
         /// 根据diid查询op费用列表
         /// 根据diid查询op费用列表
@@ -10196,7 +10243,7 @@ ORDER by  gctggrc.id DESC
         /// <returns></returns>
         /// <returns></returns>
         [HttpPost]
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> PostHotelReservationsCreateVoucher1(HotelReservationsCreateVoucherDto _dto)
+        public async Task<IActionResult> PostHotelReservationsCreateVoucherOld(HotelReservationsCreateVoucherDto _dto)
         {
         {
             try
             try
             {
             {
@@ -10204,6 +10251,8 @@ ORDER by  gctggrc.id DESC
                 if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));
                 if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));
                 if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id
                 if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id
                 if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空"));
                 if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空"));
+                if (_dto.Id < 1) return Ok(JsonView(false, "Id为空"));
+
 
 
                 #region 团组操作权限验证 76 酒店预定模块
                 #region 团组操作权限验证 76 酒店预定模块
                 var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);
                 var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);
@@ -10233,7 +10282,6 @@ ORDER by  gctggrc.id DESC
                         if (dele != null)
                         if (dele != null)
                             strFileName += dele.TourCode;
                             strFileName += dele.TourCode;
 
 
-
                         //载入模板
                         //载入模板
                         string sss = AppSettingsHelper.Get("WordBasePath") + "Template/酒店预订模板.doc";
                         string sss = AppSettingsHelper.Get("WordBasePath") + "Template/酒店预订模板.doc";
 
 
@@ -10444,11 +10492,9 @@ ORDER by  gctggrc.id DESC
                 {
                 {
                     return Ok(JsonView(false, "该条数据已删除或不存在!"));
                     return Ok(JsonView(false, "该条数据已删除或不存在!"));
                 }
                 }
-
             }
             }
             catch (Exception ex)
             catch (Exception ex)
             {
             {
-
                 return Ok(JsonView(false, ex.Message));
                 return Ok(JsonView(false, ex.Message));
             }
             }
         }
         }
@@ -10616,6 +10662,124 @@ ORDER by  gctggrc.id DESC
             return Ok(JsonView(true, "操作成功!", Url));
             return Ok(JsonView(true, "操作成功!", Url));
         }
         }
 
 
+
+        /// <summary>
+        /// 酒店预订
+        /// 生成VOUCHER 批量生成 
+        /// New 
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostHotelReservationsCreateVoucherBatchNew(HotelReservationsCreateVoucherDto _dto)
+        {
+            #region  参数验证
+            if (_dto.UserId < 1) return Ok(JsonView(StatusCodes.Status400BadRequest, "员工Id为空", ""));
+            if (_dto.PageId < 1) _dto.PageId = 28; 
+            if (_dto.DiId < 1) return Ok(JsonView(StatusCodes.Status400BadRequest, "团组Id为空", ""));
+
+            #region 团组操作权限验证 76 酒店预定模块
+            var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);
+            if (groupAuthView.Code != 0) return Ok(JsonView(StatusCodes.Status400BadRequest, 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
+
+            var hrDtas = await _sqlSugar.Queryable<Grp_HotelReservations>()
+                                        .Where(it => it.IsDel == 0 && it.DiId == _dto.DiId)
+                                        //.Select(x => new
+                                        //{
+                                        //    x.CreateTime,
+                                        //    x.CheckNumber,
+                                        //    x.ReservationsNo,
+                                        //    x.DetermineNo,
+                                        //    x.HotelName,
+                                        //    x.HotelAddress,
+                                        //    x.HotelTel,
+                                        //    x.HotelFax,
+                                        //    x.CheckInDate,
+                                        //    x.CheckOutDate,
+                                        //    x.GuestName,
+                                        //    x.RoomExplanation,
+                                        //})
+                                        .OrderBy(x => x.CreateTime)
+                                        .ToListAsync();
+
+            //判断数据是否完整
+            if (hrDtas.Count < 1) return Ok(JsonView(StatusCodes.Status400BadRequest, "请先录入酒店预订信息!", ""));
+
+            string strFileName = "HotelStatement/";
+            var dele = await _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0 && it.Id == _dto.DiId).FirstAsync();
+            if (dele != null)
+                strFileName += dele.TourCode;
+
+            var guestDatas = await _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0).ToListAsync();
+            for (int i = 0; i < hrDtas.Count; i++)
+            {
+                string guestNames = string.Empty;
+                List<int> guestIds = new List<int>();
+                var item = hrDtas[i];
+                //处理客户姓名
+                if (item.GuestName.Contains(","))
+                {
+                    string[] guestIdArr = item.GuestName.Split(',');
+                    foreach (var guestIdStr in guestIdArr)
+                        if (int.TryParse(guestIdStr, out int guestId)) 
+                            guestIds.Add(guestId);
+                }
+                else guestNames += item.GuestName;
+
+                if (guestIds.Count > 0)
+                {
+                    guestIds = guestIds.Distinct().ToList();
+
+                    var guestDatas1 = guestDatas.Where(it => guestIds.Contains(it.Id)).ToList();
+                    if (guestDatas1.Count > 0)
+                    {
+                        guestNames = "";
+                        foreach (var guest in guestDatas1)
+                        {
+                            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);
+                        }
+                    }
+                }
+
+                if (!string.IsNullOrEmpty(guestNames))
+                {
+                    hrDtas[i].GuestName = guestNames;
+                }
+            }
+
+            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>
         /// <summary>
         /// 酒店预订
         /// 酒店预订
         /// 生成 预定成本 Excel
         /// 生成 预定成本 Excel

+ 30 - 0
OASystem/OASystem.Domain/Dtos/Groups/VisaCommissionDto.cs

@@ -0,0 +1,30 @@
+using FluentValidation;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Groups
+{
+    public class VisaCommissionDto
+    {
+    }
+
+    public class VisaCommissionItemDto: PortDtoBase
+    {
+        public int CurrUserId { get; set; }
+
+        public int DiId { get; set; }
+    }
+    public class VisaCommissionItemDtoValidator : AbstractValidator<VisaCommissionItemDto>
+    {
+        public VisaCommissionItemDtoValidator() {
+
+            RuleFor(x => x.PortType).InclusiveBetween(from: 1, to: 3)
+                                    .WithMessage(MsgTips.Port);
+            RuleFor(x => x.CurrUserId).LessThan(valueToCompare: 1)
+                                      .WithMessage("请输入有效的CurrUserId!");
+        }
+    }
+}

+ 41 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_VisaCommission.cs

@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Groups
+{
+    /// <summary>
+    /// 签证提成
+    /// </summary>
+    [SqlSugar.SugarTable("Grp_VisaCommission")]
+    public class Grp_VisaCommission : EntityBase
+    {
+        /// <summary>
+        /// 团组Id 
+        /// 外键
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int DiId { get; set; }
+
+        /// <summary>
+        /// 用户Id 
+        /// 归属人
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int UId { get; set; }
+
+        /// <summary>
+        /// 国家
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string Country { get; set; }
+
+        /// <summary>
+        /// 数量
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int Quantity { get; set; }
+    }
+}

+ 13 - 0
OASystem/OASystem.Domain/ViewModels/Groups/VisaCommissionViewModel.cs

@@ -0,0 +1,13 @@
+using OASystem.Domain.Entities.Groups;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.ViewModels.Groups
+{
+    public class VisaCommissionViewModel:Grp_VisaCommission
+    {
+    }
+}

+ 6 - 0
OASystem/OASystem.Infrastructure/Repositories/Groups/DelegationInfoRepository.cs

@@ -917,6 +917,12 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 var _groupNameList = await _sqlSugar.SqlQueryable<GroupNameView>(sql).ToListAsync();
                 var _groupNameList = await _sqlSugar.SqlQueryable<GroupNameView>(sql).ToListAsync();
                 if (_groupNameList.Count > 0)
                 if (_groupNameList.Count > 0)
                 {
                 {
+                    for (int i = 0; i < _groupNameList.Count; i++)
+                    {
+                        var info = _groupNameList[i];
+                        _groupNameList[i].GroupName = FormartTeamName(info.GroupName);
+                    }
+
                     result.Code = 0;
                     result.Code = 0;
                     result.Msg = "成功!";
                     result.Msg = "成功!";
                     result.Data = _groupNameList;
                     result.Data = _groupNameList;

+ 38 - 0
OASystem/OASystem.Infrastructure/Repositories/Groups/VisaCommissionRepository.cs

@@ -0,0 +1,38 @@
+using AutoMapper;
+using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.ViewModels.Groups;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Infrastructure.Repositories.Groups
+{
+    /// <summary>
+    /// 签证提成录入
+    /// 仓储
+    /// </summary>
+    public class VisaCommissionRepository : BaseRepository<Grp_VisaCommission, VisaCommissionViewModel>
+    {
+        private readonly IMapper _mapper;
+        private readonly DelegationInfoRepository _groupRep;
+        public VisaCommissionRepository(SqlSugarClient sqlSugar, IMapper mapper, DelegationInfoRepository groupRep)
+            : base(sqlSugar)
+        {
+            _mapper = mapper;
+            _groupRep = groupRep;
+        }
+
+        /// <summary>
+        /// 基础数据
+        /// </summary>
+        /// <returns></returns>
+        public async Task<JsonView> _Init()
+        {
+            var groupInfo = await _groupRep.GetGroupNameList(new Domain.Dtos.Groups.GroupNameDto() { PortType = 1 });
+
+            return new JsonView() { Code = StatusCodes.Status200OK, Msg = "操作成功!", Data = new { GroupData = groupInfo.Data } };
+        }
+    }
+}

+ 1 - 1
OASystem/OASystem.Infrastructure/Repositories/Resource/OfficialActivitiesRepository.cs

@@ -254,7 +254,6 @@ FROM
             {
             {
                 bool res = await UpdateAsync(a => a.Id == dto.Id, a => new Res_OfficialActivities
                 bool res = await UpdateAsync(a => a.Id == dto.Id, a => new Res_OfficialActivities
                 {
                 {
-
                     Country = dto.Country,
                     Country = dto.Country,
                     Area = dto.Area,
                     Area = dto.Area,
                     Type = dto.Type,
                     Type = dto.Type,
@@ -277,6 +276,7 @@ FROM
                     Trip = dto.Trip,
                     Trip = dto.Trip,
                     CreateUserId = dto.CreateUserId,
                     CreateUserId = dto.CreateUserId,
                     Remark = dto.Remark,
                     Remark = dto.Remark,
+                    IsPay = dto.IsPay,
                     IsSubmitApproval = dto.IsSubmitApproval,
                     IsSubmitApproval = dto.IsSubmitApproval,
                 });
                 });
                 if (!res)
                 if (!res)