Quellcode durchsuchen

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

wangh vor 1 Jahr
Ursprung
Commit
9fbece4c14
23 geänderte Dateien mit 1713 neuen und 88 gelöschten Zeilen
  1. 3 2
      OASystem/EntitySync/Program.cs
  2. 26 2
      OASystem/OASystem.Api/Controllers/AuthController.cs
  3. 625 19
      OASystem/OASystem.Api/Controllers/GroupsController.cs
  4. 53 22
      OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs
  5. 3 1
      OASystem/OASystem.Api/OAMethodLib/JsonConvertOverride.cs
  6. 20 20
      OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs
  7. 2 2
      OASystem/OASystem.Api/appsettings.json
  8. 1 0
      OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs
  9. 34 0
      OASystem/OASystem.Domain/Dtos/Groups/HotelReservationsDto.cs
  10. 150 0
      OASystem/OASystem.Domain/Dtos/Groups/TourClientListDto.cs
  11. 9 0
      OASystem/OASystem.Domain/Entities/Customer/Crm_CustomerCert.cs
  12. 12 4
      OASystem/OASystem.Domain/Entities/Customer/Crm_CustomerCompany.cs
  13. 1 1
      OASystem/OASystem.Domain/Entities/Customer/Crm_GroupCustomer.cs
  14. 2 0
      OASystem/OASystem.Domain/Entities/Groups/Grp_HotelReservations.cs
  15. 53 0
      OASystem/OASystem.Domain/Entities/Groups/Grp_TourClientList.cs
  16. 198 0
      OASystem/OASystem.Domain/ViewModels/Groups/TourClientListView.cs
  17. 30 0
      OASystem/OASystem.Domain/ViewModels/System/SetDataView.cs
  18. 1 1
      OASystem/OASystem.Infrastructure/Repositories/CRM/VisaDeleClientCompanyRepository.cs
  19. 214 8
      OASystem/OASystem.Infrastructure/Repositories/Groups/HotelPriceRepository.cs
  20. 0 2
      OASystem/OASystem.Infrastructure/Repositories/Groups/TeamRateRepository.cs
  21. 175 0
      OASystem/OASystem.Infrastructure/Repositories/Groups/TourClientListRepository.cs
  22. 4 4
      OASystem/OASystem.Infrastructure/Repositories/Login/LoginRepository.cs
  23. 97 0
      OASystem/OASystem.Infrastructure/Tools/CommonFun.cs

+ 3 - 2
OASystem/EntitySync/Program.cs

@@ -116,7 +116,8 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Grp_VisaInfo)
     //typeof(Grp_CarTouristGuideGroundReservations),
     //typeof(Grp_CarTouristGuideGroundReservationsContent),//
-    //typeof(Fin_PaymentRefundAndOtherMoney)
-    typeof(Grp_InsuranceCost)
+    //typeof(Fin_PaymentRefundAndOtherMoney),
+    //typeof(Grp_InsuranceCost),
+    typeof(Grp_TourClientList) //接团客户名单
 });
 Console.WriteLine("数据库结构同步完成!");

+ 26 - 2
OASystem/OASystem.Api/Controllers/AuthController.cs

@@ -552,7 +552,7 @@ namespace OASystem.API.Controllers
         //            if (!string.IsNullOrEmpty(oldUser.IDCard))
         //            {
         //                idCrad = oldUser.IDCard.Trim();
-                        
+
         //                #region 处理身份证Number 出生日期
         //                if (idCrad.ValidateIdNumber())
         //                {
@@ -690,6 +690,30 @@ namespace OASystem.API.Controllers
 
         //    return Ok(JsonView(view));
         //}
-    
+
+        /// <summary>
+        /// 测试 
+        /// 创建员工号
+        /// </summary>
+        /// <param name="depId">部门Id</param>
+        /// <returns></returns>
+        [HttpPost("TestCreateUserNumber")]
+        [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> TestCreateUserNumber(int depId)
+        {
+
+            try
+            {
+                var number = await _loginRep.CreateNumber(depId);
+
+                return Ok(JsonView(true, "操作成功!", number));
+            }
+            catch (Exception ex)
+            {
+
+                return Ok(JsonView(false, "操作失败!", ex.Message));
+            }
+            
+        }
     }
 }

+ 625 - 19
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -65,6 +65,8 @@ namespace OASystem.API.Controllers
         private readonly CustomersRepository _customersRep;
         private readonly MessageRepository _message;
         private readonly SqlSugarClient _sqlSugar;
+        private readonly TourClientListRepository _tourClientListRep;
+
         #region 成本相关
         private readonly CheckBoxsRepository _checkBoxs;
         private readonly GroupCostRepository _GroupCostRepository;
@@ -83,7 +85,8 @@ namespace OASystem.API.Controllers
             InvitationOfficialActivitiesRepository InvitationOfficialActivitiesRep, DelegationEnDataRepository delegationEnDataRep, EnterExitCostRepository enterExitCostRep
             , DelegationVisaRepository delegationVisaRep, MessageRepository message, VisaPriceRepository visaPriceRep, CarTouristGuideGroundRepository carTouristGuideGroundRep,
             CheckBoxsRepository checkBoxs, GroupCostRepository GroupCostRepository, CostTypeHotelNumberRepository CostTypeHotelNumberRepository,
-            GroupCostParameterRepository GroupCostParameterRepository, HotelPriceRepository hotelPriceRep, CustomersRepository customersRep, SetDataRepository setDataRep)
+            GroupCostParameterRepository GroupCostParameterRepository, HotelPriceRepository hotelPriceRep, CustomersRepository customersRep, SetDataRepository setDataRep,
+            TourClientListRepository tourClientListRep)
         {
             _mapper = mapper;
             _grpScheduleRep = grpScheduleRep;
@@ -112,6 +115,7 @@ namespace OASystem.API.Controllers
             _hotelPriceRep = hotelPriceRep;
             _customersRep = customersRep;
             _setDataRep = setDataRep;
+            _tourClientListRep = tourClientListRep;
         }
 
         #region 流程管控
@@ -2778,9 +2782,9 @@ namespace OASystem.API.Controllers
                         if (item.CrmCompanyId != 0)
                         {
                             Crm_CustomerCompany crm_Customer = await _sqlSugar.Queryable<Crm_CustomerCompany>().FirstAsync(a => a.Id == item.CrmCompanyId && a.IsDel == 0);
-                            if (!transDic.ContainsKey(crm_Customer.CompanyName))
+                            if (!transDic.ContainsKey(crm_Customer.CompanyFullName))
                             {
-                                texts.Add(crm_Customer.CompanyName);
+                                texts.Add(crm_Customer.CompanyFullName);
                             }
                         }
                     }
@@ -2820,7 +2824,7 @@ namespace OASystem.API.Controllers
                         }
                         guestList.DOB = dele.BirthDay.Replace('-', '.');
                         Crm_CustomerCompany crm_Customer = await _sqlSugar.Queryable<Crm_CustomerCompany>().FirstAsync(a => a.Id == dele.CrmCompanyId && a.IsDel == 0);
-                        string jobName = transDic.Where(s => s.Key == crm_Customer.CompanyName).FirstOrDefault().Value + " " + transDic.Where(s => s.Key == dele.Job).FirstOrDefault().Value;
+                        string jobName = transDic.Where(s => s.Key == crm_Customer.CompanyFullName).FirstOrDefault().Value + " " + transDic.Where(s => s.Key == dele.Job).FirstOrDefault().Value;
 
                         guestList.Job = jobName;
                         list.Add(guestList);
@@ -2972,21 +2976,25 @@ namespace OASystem.API.Controllers
             {
                 var groupNameData = await _groupRepository.GetGroupNameList(new GroupNameDto { PortType = dto.PortType });
 
-                string currencySql = string.Format("Select * From Sys_SetData Where STid = 66 And IsDel = 0");
-                var currencyData = await _sqlSugar.SqlQueryable<SetDataInfoView>(currencySql).ToListAsync();
+                string sql = string.Format("Select * From Sys_SetData Where IsDel = 0");
+                //SetDataInfoView
+                var dataSource = await _sqlSugar.SqlQueryable<Sys_SetData>(sql).ToListAsync();
 
+                var currencyData = dataSource.Where(it => it.STid == 66).ToList(); //所有币种
+                List<SetDataInfoView> _CurrencyData = _mapper.Map<List<SetDataInfoView>>(currencyData);
 
-                //string nationalTravelFeeSql = string.Format(@"Select ssd.Name as CurrencyCode, ssd.Remark as CurrencyName,su.CnName as LastUpdateUserName,gntf.* From Grp_NationalTravelFee gntf
-                //                                                Left Join Sys_SetData ssd On ssd.STid = 66 And gntf.Currency = ssd.Id
-                //                                                Left Join Sys_Users su On gntf.LastUpdateUserId = su.Id 
-                //                                                Where gntf.Isdel = 0");
-                //var nationalTravelFeeData = await _sqlSugar.SqlQueryable<NationalTravelFeeInfoView>(nationalTravelFeeSql).ToListAsync();
+                var wordTypeData = dataSource.Where(it => it.STid == 72).ToList();  //三公费用-Word明细类型
+                List<SetDataInfoView> _WordTypeData = _mapper.Map<List<SetDataInfoView>>(wordTypeData);
 
+                var excelTypeData = dataSource.Where(it => it.STid == 73).ToList(); //三公费用-Excel明细类型
+                List<SetDataInfoView> _ExcelTypeData = _mapper.Map<List<SetDataInfoView>>(excelTypeData);
 
                 return Ok(JsonView(true, "查询成功!", new
                 {
                     GroupNameData = groupNameData.Data,
-                    CurrencyData = currencyData,
+                    CurrencyData = _CurrencyData,
+                    WordTypeData = _WordTypeData,
+                    ExcelTypeData = _ExcelTypeData
                     //NationalTravelFeeData = nationalTravelFeeData
                 }));
             }
@@ -3072,6 +3080,9 @@ namespace OASystem.API.Controllers
             }
         }
 
+
+
+
         /// <summary>
         /// 团组模块 - 出入境费用 - 子项删除
         /// </summary>
@@ -4255,8 +4266,6 @@ namespace OASystem.API.Controllers
                         string Url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/" + strFileName;
                         return Ok(JsonView(true, "成功!", Url));
 
-                        //保存为doc,并打开 
-
                     }
                     catch (Exception ex)
                     {
@@ -4286,7 +4295,6 @@ namespace OASystem.API.Controllers
         public async Task<IActionResult> ConfirmWord(HotelReservationsByIdDto dto)
         {
             //团组信息
-
             Grp_DelegationInfo di = _sqlSugar.Queryable<Grp_DelegationInfo>().First(a => a.Id == dto.Id);
 
             //酒店数据
@@ -4332,14 +4340,12 @@ namespace OASystem.API.Controllers
                 }
             }
 
-
             Dictionary<string, string> dic = new Dictionary<string, string>();
             dic.Add("Dele", di.TeamName);
             dic.Add("City", di.VisitCountry);
 
 
             //模板路径
-            //string sss = AppSettingsHelper.Get("WordBasePath") + "Template/酒店预订模板.doc";
             string tempPath = AppSettingsHelper.Get("WordBasePath") + "Template/酒店用房确认单-模板.doc";
             //载入模板
             Aspose.Words.Document doc = new Aspose.Words.Document(tempPath);
@@ -4396,8 +4402,6 @@ namespace OASystem.API.Controllers
                 throw;
             }
 
-            //doc.Save(HttpUtility.UrlEncode(strFileName, Encoding.UTF8), Aspose.Words.SaveFormat.Doc, Aspose.Words.SaveType.OpenInWord, Response);
-
         }
         /// <summary>
         /// 酒店费用删除
@@ -4519,6 +4523,53 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(true, data.Msg, data.Data));
 
 
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, "Catch:"+ex.Message));
+            }
+        }
+
+        /// <summary>
+        /// 酒店预订
+        /// 创建 入住卷号码
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostHotelReservationsCreateCheckVolumeNo(HotelReservationBasicsDataInitDto _dto)
+        {
+            try
+            {
+                #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为空"));
+
+                PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
+
+                #region 页面操作权限验证
+                pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
+
+                if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!"));
+                #endregion
+
+                #region 团组操作权限验证 76 酒店预定模块
+                var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);
+                if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg));
+                #endregion
+
+                #endregion
+
+                Result data = await _hotelPriceRep._CreateCheckVolumeNo(_dto.DiId);
+                if (data.Code != 0)
+                {
+                    return Ok(JsonView(false, data.Msg));
+                }
+                return Ok(JsonView(true, data.Msg, data.Data));
+
+
             }
             catch (Exception ex)
             {
@@ -4621,6 +4672,416 @@ namespace OASystem.API.Controllers
             }
         }
 
+        /// <summary>
+        /// 酒店预订
+        /// Del 
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostHotelReservationsDel(HotelReservationsDelDto _dto)
+        {
+            try
+            {
+                #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.DeleteAuth == 0) return Ok(JsonView(false, "您没有删除权限!"));
+
+
+                #endregion
+
+                #endregion
+
+                Result data = await _hotelPriceRep._Del(_dto.Id, _dto.UserId);
+                if (data.Code != 0)
+                {
+                    return Ok(JsonView(false, data.Msg));
+                }
+                return Ok(JsonView(true, data.Msg, data.Data));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, ex.Message));
+            }
+        }
+
+        /// <summary>
+        /// 酒店预订
+        /// 生成VOUCHER
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostHotelReservationsCreateVoucher(HotelReservationsCreateVoucherDto _dto)
+        {
+            try
+            {
+                #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
+
+
+                Grp_HotelReservations hr = await _sqlSugar.Queryable<Grp_HotelReservations>().Where(it => it.IsDel == 0 && it.Id == _dto.Id).FirstAsync();
+
+                //判断数据是否完整
+                if (hr != null)
+                {
+                    if (!string.IsNullOrEmpty(hr.DetermineNo))
+                    {
+                        string strFileName = "HotelStatement/";
+                        Grp_DelegationInfo dele = await _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0 && it.Id == _dto.DiId).FirstAsync();
+                        if (dele != null)
+                            strFileName += dele.TourCode;
+
+
+                        //载入模板
+                        string sss = AppSettingsHelper.Get("WordBasePath") + "Template/酒店预订模板.doc";
+
+                        Document doc = new Document(sss);
+                        DocumentBuilder builder = new DocumentBuilder(doc);
+
+                        #region 替换Word模板书签内容
+
+                        //这里可以创建个DataTable循环添加书签的值,这里提示一下就不多做修改了
+                        //入住卷预定号码
+
+                        if (doc.Range.Bookmarks["VNO"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["VNO"];
+                            mark.Text = hr.CheckNumber;
+                        }
+                        //酒店时间
+                        if (doc.Range.Bookmarks["Date"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["Date"];
+                            mark.Text = Convert.ToDateTime(hr.CreateTime).ToString("yyyy-MM-dd");
+                        }
+                        //团号
+                        if (doc.Range.Bookmarks["TNo"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["TNo"];
+                            mark.Text = dele.TourCode;
+                        }
+                        //预定号码
+                        if (doc.Range.Bookmarks["BookingId"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["BookingId"];
+                            mark.Text = hr.ReservationsNo;
+                        }
+
+                        if (doc.Range.Bookmarks["HotelConfirmNo"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["HotelConfirmNo"];
+                            mark.Text = hr.DetermineNo;
+                        }
+
+                        //酒店城市
+                        if (doc.Range.Bookmarks["City"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["City"];
+                            mark.Text = hr.City;
+                        }
+                        //酒店名称
+                        if (doc.Range.Bookmarks["HName"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["HName"];
+                            mark.Text = hr.HotelName;
+                        }
+                        //酒店地址
+                        if (doc.Range.Bookmarks["Address"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["Address"];
+                            mark.Text = hr.HotelAddress;
+                        }
+                        //酒店电话
+                        if (doc.Range.Bookmarks["Tel"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["Tel"];
+                            mark.Text = hr.HotelTel;
+                        }
+                        //酒店传真
+                        if (doc.Range.Bookmarks["Fax"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["Fax"];
+                            if (!string.IsNullOrWhiteSpace(hr.HotelFax))
+                            {
+                                mark.Text = hr.HotelFax;
+                            }
+
+                        }
+                        //入住时间
+                        if (doc.Range.Bookmarks["CIn"] != null)
+                        {
+                            DateTime dtCheckIn = Convert.ToDateTime(hr.CheckInDate);
+                            Bookmark mark = doc.Range.Bookmarks["CIn"];
+                            mark.Text = dtCheckIn.Day + " " + dtCheckIn.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckIn.Year;
+                        }
+                        //退房时间
+                        if (doc.Range.Bookmarks["COut"] != null)
+                        {
+                            DateTime dtCheckOut = Convert.ToDateTime(hr.CheckOutDate);
+                            Bookmark mark = doc.Range.Bookmarks["COut"];
+                            mark.Text = dtCheckOut.Day + " " + dtCheckOut.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckOut.Year;
+                        }
+                        //客户名称
+                        if (doc.Range.Bookmarks["GName"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["GName"];
+                            mark.Text = hr.GuestName;
+                        }
+
+                        //房间介绍
+                        if (doc.Range.Bookmarks["ROOM"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["ROOM"];
+                            mark.Text = hr.RoomExplanation;
+                        }
+
+                        //报价描述
+                        if (doc.Range.Bookmarks["NOTE"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["NOTE"];
+                            Sys_SetData ss = _sqlSugar.Queryable<Sys_SetData>().First(a => a.Id == hr.ReservationsWebsite);
+                            if (ss != null)
+                                mark.Text = ss.Name;
+                        }
+                        //入住时间
+                        if (doc.Range.Bookmarks["CheckIn"] != null)
+                        {
+                            DateTime dtCheckIn = Convert.ToDateTime(hr.CheckInDate);
+                            Bookmark mark = doc.Range.Bookmarks["CheckIn"];
+                            mark.Text = dtCheckIn.Day + " " + dtCheckIn.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckIn.Year + " ";
+                        }
+                        //退房时间
+                        if (doc.Range.Bookmarks["CheckOut"] != null)
+                        {
+                            DateTime dtCheckOut = Convert.ToDateTime(hr.CheckOutDate);
+                            Bookmark mark = doc.Range.Bookmarks["CheckOut"];
+                            mark.Text = " " + dtCheckOut.Day + " " + dtCheckOut.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckOut.Year;
+                        }
+                        //日期
+                        if (doc.Range.Bookmarks["DT"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["DT"];
+                            mark.Text = Convert.ToDateTime(hr.CreateTime).ToString("yyyy-MM-dd");
+                        }
+                        //名称
+                        if (doc.Range.Bookmarks["VName"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["VName"];
+                            mark.Text = hr.HotelName;
+                        }
+                        //号码
+                        if (doc.Range.Bookmarks["VOUCHERNO"] != null)
+                        {
+                            Bookmark mark = doc.Range.Bookmarks["VOUCHERNO"];
+                            mark.Text = hr.CheckNumber;
+                        }
+
+                        #endregion
+
+                        strFileName += "VOUCHER.doc";
+
+                        var fileDir = AppSettingsHelper.Get("WordBasePath") + strFileName;
+                        doc.Save(fileDir);
+                        string Url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/" + strFileName;
+                        return Ok(JsonView(true, "操作成功!", Url));
+
+                    }
+                    else
+                    {
+                        return Ok(JsonView(false, "酒店确定号码未填写,无法生成Voucher!"));
+                    }
+                }
+                else
+                {
+                    return Ok(JsonView(false, "该条数据已删除或不存在!"));
+                }
+
+            }
+            catch (Exception ex)
+            {
+
+                return Ok(JsonView(false, ex.Message));
+            }
+
+           
+
+        }
+
+        /// <summary>
+        /// 酒店预订
+        /// 确认单
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostHotelReservationsConfirmationSlip(HotelReservationsConfirmationSlipDto _dto)
+        {
+            try
+            {
+                #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
+
+                //团组信息
+                Grp_DelegationInfo di = _sqlSugar.Queryable<Grp_DelegationInfo>().First(a => a.Id == _dto.DiId);
+
+                //酒店数据
+                List<Grp_HotelReservations> listhoteldata = await _sqlSugar.Queryable<Grp_HotelReservations>().Where(a => a.DiId == _dto.DiId && a.IsDel == 0).ToListAsync();
+
+                if (listhoteldata.Count < 0)
+                {
+                    return Ok(JsonView(false, "当前团组暂无酒店预订信息!"));
+                }
+
+                //利datatable存储
+                DataTable dt = new DataTable();
+                dt.Columns.Add("CheckInDate", typeof(string));
+                dt.Columns.Add("City", typeof(string));
+                dt.Columns.Add("Hotel", typeof(string));
+                dt.Columns.Add("Room", typeof(string));
+
+                for (int i = 0; i < listhoteldata.Count; i++)
+                {
+                    DateTime dayStart = Convert.ToDateTime(listhoteldata[i].CheckInDate);
+                    DateTime dayEnd = Convert.ToDateTime(listhoteldata[i].CheckOutDate);
+                    while (dayStart < dayEnd)
+                    {
+                        string temp = "";
+                        DataRow row = dt.NewRow();
+                        row["CheckInDate"] = dayStart.ToString("yyyy-MM-dd");
+                        row["City"] = listhoteldata[i].City;
+                        row["Hotel"] = listhoteldata[i].HotelName;
+                        if (listhoteldata[i].SingleRoomCount > 0)
+                        {
+                            temp = listhoteldata[i].SingleRoomCount + "个单间" + "\r\n";
+                        }
+                        if (listhoteldata[i].DoubleRoomCount > 0)
+                        {
+                            temp = temp + listhoteldata[i].DoubleRoomCount + "个标间" + "\r\n";
+                        }
+                        if (listhoteldata[i].SuiteRoomCount > 0)
+                        {
+                            temp = temp + listhoteldata[i].SuiteRoomCount + "个套房" + "\r\n";
+                        }
+                        if (listhoteldata[i].OtherRoomCount > 0)
+                        {
+                            temp = temp + listhoteldata[i].OtherRoomCount + "个其他房型" + "\r\n";
+                        }
+                        row["Room"] = temp;
+                        dt.Rows.Add(row);
+                        dayStart = dayStart.AddDays(1);
+                    }
+                }
+
+                Dictionary<string, string> dic = new Dictionary<string, string>();
+                dic.Add("Dele", di.TeamName);
+                dic.Add("City", di.VisitCountry);
+
+
+                //模板路径
+                string tempPath = AppSettingsHelper.Get("WordBasePath") + "Template/酒店用房确认单-模板.doc";
+                //载入模板
+                Aspose.Words.Document doc = new Aspose.Words.Document(tempPath);
+                DocumentBuilder builder = new DocumentBuilder(doc);
+
+                foreach (var key in dic.Keys)
+                {
+                    builder.MoveToBookmark(key);
+                    builder.Write(dic[key]);
+                }
+
+                //获取word里所有表格
+                NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);
+                //获取所填表格的序数
+                Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table;
+                var rowStart = tableOne.Rows[0]; //获取第1行
+
+                //循环赋值
+                for (int i = 0; i < dt.Rows.Count; i++)
+                {
+                    builder.MoveToCell(0, i + 1, 0, 0);
+                    builder.Write(dt.Rows[i]["CheckInDate"].ToString());
+
+                    builder.MoveToCell(0, i + 1, 1, 0);
+                    builder.Write(dt.Rows[i]["City"].ToString());
+
+                    builder.MoveToCell(0, i + 1, 2, 0);
+                    builder.Write(dt.Rows[i]["Hotel"].ToString());
+
+                    builder.MoveToCell(0, i + 1, 3, 0);
+                    builder.Write(dt.Rows[i]["Room"].ToString());
+                }
+
+                //删除多余行
+                while (tableOne.Rows.Count > dt.Rows.Count + 1)
+                {
+                    tableOne.Rows.RemoveAt(dt.Rows.Count + 1);
+                }
+                string strFileName = di.TeamName + "酒店确认单.doc";
+               
+                doc.Save(AppSettingsHelper.Get("WordBasePath") + "HotelStatement/" + strFileName);
+                string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/HotelStatement/" + strFileName;
+                return Ok(JsonView(true, "成功", url));
+                
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, ex.Message));
+            }
+        }
+
         #endregion
 
         #region 团组状态
@@ -4948,5 +5409,150 @@ namespace OASystem.API.Controllers
             }
         }
         #endregion
+
+        #region 接团客户名单 PageId 104
+
+        /// <summary>
+        /// 接团客户名单
+        /// 根据团组Id查询List
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<IActionResult> PostTourClientListByDiId(TourClientListByDiIdDto _dto)
+        {
+            #region  参数验证
+            if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId"));
+            if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId
+            if (_dto.DiId < 1) return Ok(JsonView(false, "请传入有效的DiId!"));
+
+            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
+
+            #region 页面操作权限验证
+            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
+
+            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!"));
+            #endregion
+
+            #endregion
+
+            var viewData = await _tourClientListRep._ItemByDiId(_dto.PortType,_dto.DiId);
+            if (viewData.Code != 0)
+            {
+                return Ok(JsonView(false, viewData.Msg));
+            }
+
+            return Ok(JsonView(viewData.Data));
+        }
+
+
+        /// <summary>
+        /// 接团客户名单
+        /// 基础数据 Init
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<IActionResult> PostTourClientListBasicDataInit(TourClientListBasicDataInitDto _dto)
+        {
+
+            #region  参数验证
+            if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数"));
+            if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId
+
+            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
+
+            #region 页面操作权限验证
+            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
+
+            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!"));
+            #endregion
+
+            #endregion
+
+            var viewData = await _tourClientListRep._BasicDataInit(_dto.PortType);
+            if (viewData.Code != 0)
+            {
+                return Ok(JsonView(false, viewData.Msg));
+            }
+
+            return Ok(JsonView(viewData.Data));
+        }
+
+        /// <summary>
+        /// 接团客户名单
+        /// 根据 Id查询 Details
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<IActionResult> PostTourClientListDetails(TourClientListDetailsDto _dto)
+        {
+
+            #region  参数验证
+            if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数"));
+            if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId
+            if (_dto.Id < 1) return Ok(JsonView(false, "请传入有效的Id参数!"));
+
+            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
+
+            #region 页面操作权限验证
+            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
+
+            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!"));
+            #endregion
+
+            #endregion
+
+            var viewData = await _tourClientListRep._Details(_dto.PortType, _dto.Id);
+            if (viewData.Code != 0)
+            {
+                return Ok(JsonView(false, viewData.Msg));
+            }
+
+            return Ok(JsonView(viewData.Data));
+        }
+
+        /// <summary>
+        /// 接团客户名单
+        /// 根据 Id查询 Details
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<IActionResult> PostTourClientListAddOrEdit(TourClientListAddOrEditDto _dto)
+        {
+
+            #region  参数验证
+            if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数"));
+            if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId
+            if (_dto.Id < 0) return Ok(JsonView(false, "请传入有效的Id参数!"));
+
+            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
+
+            #region 页面操作权限验证
+            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
+
+            if (_dto.Id == 0) //添加
+            {
+                if (pageFunAuthView.AddAuth == 0) return Ok(JsonView(false, "您没有添加权限!"));
+            }else if (_dto.Id >= 0) //修改
+            {
+                if (pageFunAuthView.EditAuth == 0) return Ok(JsonView(false, "您没有编辑权限!"));
+            }
+
+            #endregion
+
+            #endregion
+
+            var viewData = await _tourClientListRep._Details(_dto.PortType, _dto.Id);
+            if (viewData.Code != 0)
+            {
+                return Ok(JsonView(false, viewData.Msg));
+            }
+
+            return Ok(JsonView(viewData.Data));
+        }
+        #endregion
     }
 }

+ 53 - 22
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -108,7 +108,6 @@ namespace OASystem.API.Controllers
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> GetWageSheetMonthWorkdaysAddOrEdit(WageSheetMonthWorkdaysAddOrEditDto dto)
         {
-
             //参数处理
             string yearFormat = "yyyy-MM";
             string dtFormat = "yyyy-MM-dd";
@@ -127,6 +126,11 @@ namespace OASystem.API.Controllers
             pm_WageIssueWorkingDay1 = _mapper.Map<Pm_WageIssueWorkingDay>(dto);
             List<Sys_Calendar> sys_Calendars = new List<Sys_Calendar>();
             sys_Calendars = _mapper.Map<List<Sys_Calendar>>(dto.CalendarInfos);
+            if (sys_Calendars.Count > 0)
+            {
+                sys_Calendars = sys_Calendars.OrderBy(it => it.Dt).ToList();
+            }
+
             pm_WageIssueWorkingDay1.Workdays = sys_Calendars.Where(it => it.IsWorkDay == true).ToList().Count();
             foreach (var item in sys_Calendars)
             {
@@ -142,13 +146,50 @@ namespace OASystem.API.Controllers
             
             try
             {
+                List<Sys_Calendar> sys_Calendars_add = new List<Sys_Calendar>();
+                List<Sys_Calendar> sys_Calendars_update = new List<Sys_Calendar>();
+                sys_Calendars_add = sys_Calendars.Where(it => it.Id == 0).OrderBy(it => it.Dt).ToList();
+                sys_Calendars_update = sys_Calendars.Where(it => it.Id != 0).OrderBy(it => it.Dt).ToList();
+
+                int add1 = 0;
+                int upd = 0;
+                if (sys_Calendars_add.Count > 0)
+                {
+                    var calendarsAdd = await _sqlSugar.Insertable(sys_Calendars_add).ExecuteReturnIdentityAsync();
+
+                    if (calendarsAdd < 0)
+                    {
+                        _sqlSugar.RollbackTran();
+                        return Ok(JsonView(false, "工作日/节假日/休息日添加失败!"));
+                    }
+                }
+                if (sys_Calendars_update.Count > 0)
+                {
+                    var calendarsUpdate = await _sqlSugar.Updateable<Sys_Calendar>(sys_Calendars)
+                    .UpdateColumns(it => new { it.Dt, it.IsWorkDay, it.IsHoliDay, it.HoliName })
+                    .WhereColumns(it => it.Id)
+                    .ExecuteCommandAsync();
+                    if (calendarsUpdate < 0)
+                    {
+                        _sqlSugar.RollbackTran();
+                        return Ok(JsonView(false, "工作日/节假日/休息日编辑失败!"));
+                    }
+                }
+
+                var calendarsDatas = await _sqlSugar.Queryable<Sys_Calendar>()
+                    .Where(it => Convert.ToDateTime(it.Dt) >= Convert.ToDateTime(dto.StartDate) && Convert.ToDateTime(it.Dt) <= Convert.ToDateTime(dto.EndDate)).ToListAsync();
+                if (calendarsDatas.Count < 0)
+                {
+                    _sqlSugar.RollbackTran();
+                    return Ok(JsonView(false, "日期包暂无工作日/节假日/休息日的信息!"));
+                }
                 //月份表是否存在
                 Pm_WageIssueWorkingDay pm_WageIssueWorkingDay = new Pm_WageIssueWorkingDay()
                 {
                     YearMonth = dto.YearMonth,
                     StartDate = dto.StartDate,
                     EndDate = dto.EndDate,
-                    Workdays = dto.CalendarInfos.Where(it => it.IsWorkDay == true).ToList().Count()
+                    Workdays = calendarsDatas.Where(it => it.IsWorkDay == true).ToList().Count()
                 };
 
                 string sql = string.Format("Select * From Pm_WageIssueWorkingDay Where Isdel = 0 And YearMonth='{0}'", dto.YearMonth);
@@ -159,8 +200,12 @@ namespace OASystem.API.Controllers
 
                 if (workdsys == null) //添加
                 {
-
                     int addId = await _sqlSugar.Insertable(pm_WageIssueWorkingDay).ExecuteReturnIdentityAsync();
+                    if (addId < 0)
+                    {
+                        _sqlSugar.RollbackTran();
+                        return Ok(JsonView(false, "工作日设置添加失败!"));
+                    }
                 }
                 else //更新
                 {
@@ -168,25 +213,11 @@ namespace OASystem.API.Controllers
                         .IgnoreColumns(z => new { z.CreateUserId, z.CreateTime, z.DeleteUserId, z.DeleteTime, z.IsDel })
                         .WhereColumns(it => it.YearMonth)
                         .ExecuteCommandAsync();
-                }
-
-                List<Sys_Calendar> sys_Calendars_add = new List<Sys_Calendar>();
-                List<Sys_Calendar> sys_Calendars_update = new List<Sys_Calendar>();
-                sys_Calendars_add = sys_Calendars.Where(it => it.Id == 0).OrderBy(it => it.Dt).ToList();
-                sys_Calendars_update = sys_Calendars.Where(it => it.Id != 0).OrderBy(it => it.Dt).ToList();
-
-                int add1 = 0;
-                int upd = 0;
-                if (sys_Calendars_add.Count > 0)
-                {
-                    await _sqlSugar.Insertable(sys_Calendars_add).ExecuteReturnIdentityAsync();
-                }
-                if (sys_Calendars_update.Count > 0)
-                {
-                    await _sqlSugar.Updateable<Sys_Calendar>(sys_Calendars)
-                    .UpdateColumns(it => new { it.Dt, it.IsWorkDay, it.IsHoliDay, it.HoliName })
-                    .WhereColumns(it => it.Id)
-                    .ExecuteCommandAsync();
+                    if (updCount < 0)
+                    {
+                        _sqlSugar.RollbackTran();
+                        return Ok(JsonView(false, "工作日设置编辑失败!"));
+                    }
                 }
 
                 _sqlSugar.CommitTran();

+ 3 - 1
OASystem/OASystem.Api/OAMethodLib/JsonConvertOverride.cs

@@ -5,7 +5,7 @@ using System.Text.Json.Serialization;
 namespace OASystem.API.OAMethodLib
 {
 
-    #region 日期格式转换
+    #region 日期格式转换("yyyy-MM-dd HH;mm:ss")
 
     public class DateTimeJsonConverter : System.Text.Json.Serialization.JsonConverter<DateTime>
     {
@@ -36,6 +36,8 @@ namespace OASystem.API.OAMethodLib
     }
     #endregion
 
+
+
     #region String null值转换(读/写)
 
 

+ 20 - 20
OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs

@@ -608,26 +608,26 @@ namespace OASystem.API.OAMethodLib
                             }
 
                             #region 年假测试数据
-                            leaveDetails.Add(new LeaveDetails() { 
-                                TypeId = 1,
-                                TypeName = "年假",
-                                StartDt = Convert.ToDateTime("2023-11-21 09:00:00"),
-                                EndDt = Convert.ToDateTime("2023-11-21 12:00:00"),
-                                DtType = "halfday",
-                                Unit = "天",
-                                New_Duration = 0.50M
-                            });
-
-                            leaveDetails.Add(new LeaveDetails()
-                            {
-                                TypeId = 1,
-                                TypeName = "年假",
-                                StartDt = Convert.ToDateTime("2023-11-21 12:00:00"),
-                                EndDt = Convert.ToDateTime("2023-11-23 18:00:00"),
-                                DtType = "halfday",
-                                Unit = "天",
-                                New_Duration = 2.50M
-                            });
+                            //leaveDetails.Add(new LeaveDetails() { 
+                            //    TypeId = 1,
+                            //    TypeName = "年假",
+                            //    StartDt = Convert.ToDateTime("2023-11-21 09:00:00"),
+                            //    EndDt = Convert.ToDateTime("2023-11-21 12:00:00"),
+                            //    DtType = "halfday",
+                            //    Unit = "天",
+                            //    New_Duration = 0.50M
+                            //});
+
+                            //leaveDetails.Add(new LeaveDetails()
+                            //{
+                            //    TypeId = 1,
+                            //    TypeName = "年假",
+                            //    StartDt = Convert.ToDateTime("2023-11-21 12:00:00"),
+                            //    EndDt = Convert.ToDateTime("2023-11-23 18:00:00"),
+                            //    DtType = "halfday",
+                            //    Unit = "天",
+                            //    New_Duration = 2.50M
+                            //});
 
 
                             #endregion

+ 2 - 2
OASystem/OASystem.Api/appsettings.json

@@ -1,7 +1,7 @@
 {
   "ConnectionStrings": {
-    "OA2023DB": "server=132.232.92.186;uid=sa;pwd=Yjx@158291;database=OA2023DB;",
-    "OA2014DB": "server=132.232.92.186;uid=sa;pwd=Yjx@158291;database=OA2014;"
+    "OA2023DB": "server=132.232.92.186;uid=sa;pwd=Yjx@158291;database=OA2023DB;MultipleActiveResultSets=True;",
+    "OA2014DB": "server=132.232.92.186;uid=sa;pwd=Yjx@158291;database=OA2014;MultipleActiveResultSets=True"
   },
   "JwtSecurityKey": "48d3f4fe770940a1068052f581536b81", //jwt密钥
   "UseSwagger": "true", //启用Swagger

+ 1 - 0
OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs

@@ -44,6 +44,7 @@ namespace OASystem.Domain.AutoMappers
             CreateMap<OperationSetDataTypeDto, Sys_SetDataType>();
             CreateMap<OperationSetDataDto, Sys_SetData>();
             CreateMap<Sys_SetData, SetDataInfoView>();
+            CreateMap<Sys_SetData, SetDataCurrencyInfoView>();
             #endregion
 
             #region 公司板块

+ 34 - 0
OASystem/OASystem.Domain/Dtos/Groups/HotelReservationsDto.cs

@@ -263,9 +263,43 @@ namespace OASystem.Domain.Dtos.Groups
         public string? CcpRemark { get; set; }
     }
 
+    /// <summary>
+    /// 酒店预定
+    /// Del
+    /// </summary>
+    public class HotelReservationsDelDto : UserPageFuncDtoBase
+    {
+        /// <summary>
+        /// Id
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        public int DiId { get; set; }
 
+    }
 
 
+    /// <summary>
+    /// 酒店预订
+    /// 生成VOUCHER
+    /// </summary>
+    public class HotelReservationsCreateVoucherDto : UserPageFuncDtoBase
+    {
+        public int DiId { get; set; }
+        public int Id { get; set; }
+    }
+
+    /// <summary>
+    /// 酒店预订
+    /// 确认单
+    /// </summary>
+    public class HotelReservationsConfirmationSlipDto : UserPageFuncDtoBase
+    {
+        public int DiId { get; set; }
+    }
 
 
 

+ 150 - 0
OASystem/OASystem.Domain/Dtos/Groups/TourClientListDto.cs

@@ -0,0 +1,150 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Groups
+{
+    /// <summary>
+    /// 接团客户名单
+    /// </summary>
+    public class TourClientListDto
+    {
+    }
+
+
+    /// <summary>
+    /// 接团客户名单
+    /// 根据团组Id查询List
+    /// </summary>
+    public class TourClientListByDiIdDto : UserPageFuncDtoBase
+    {
+        public int DiId { get; set; }
+    }
+
+    /// <summary>
+    /// 接团客户名单
+    /// 基础数据 Dto
+    /// </summary>
+    public class TourClientListBasicDataInitDto : UserPageFuncDtoBase { }
+
+    /// <summary>
+    /// 接团客户名单
+    /// 根据Id 查询 Details
+    /// </summary>
+    public class TourClientListDetailsDto : UserPageFuncDtoBase
+    {
+        public int Id { get; set; }
+    }
+
+    /// <summary>
+    /// 接团客户名单
+    /// Add Or Edit
+    /// </summary>
+    public class TourClientListAddOrEditDto : UserPageFuncDtoBase
+    {
+        /// <summary>
+        /// 数据Id
+        /// Id==0 Add Id>0 Update Id<0 无效
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 姓
+        /// </summary>
+        public string? LastName { get; set; }
+
+        /// <summary>
+        /// 名
+        /// </summary>
+        public string? FirstName { get; set; }
+
+        /// <summary>
+        /// 姓名拼音
+        /// 姓/名 eg: LEI/YI
+        /// </summary>
+        public string? Pinyin { get; set; }
+
+        /// <summary>
+        /// 性别
+        /// 0 男1 女 其他值 未设置
+        /// </summary>
+        public int Sex { get; set; }
+
+        /// <summary>
+        /// 公司名全称
+        /// </summary>
+        public string? CompanyFullName { get; set; }
+
+        /// <summary>
+        /// 职位
+        /// </summary>
+        public string? Job { get; set; }
+
+        /// <summary>
+        /// 身份证No
+        /// </summary>
+        public string? IDCardNo { get; set; }
+
+        /// <summary>
+        /// 生日
+        /// </summary>
+        public string? BirthDay { get; set; }
+
+        /// <summary>
+        /// 护照类型Id(数据类型表Id)
+        /// </summary>
+        public int PassportType { get; set; }
+
+        /// <summary>
+        /// 护照No
+        /// </summary>
+        public string? PassportNo { get; set; }
+
+        /// <summary>
+        /// 签发国
+        /// </summary>
+        public string? Country { get; set; }
+
+        /// <summary>
+        /// 签发地区
+        /// </summary>
+        public string? Area { get; set; }
+
+        /// <summary>
+        /// 签发时间
+        /// </summary>
+        public string? IssueDt { get; set; }
+
+        /// <summary>
+        /// 有效期限
+        /// </summary>
+        public string? ExpiryDt { get; set; }
+
+        /// <summary>
+        /// 舱位类型(数据类型表Id)
+        /// </summary>
+        public int ShippingSpaceTypeId { get; set; }
+
+        /// <summary>
+        /// 舱位特殊需求
+        /// </summary>
+        public string? ShippingSpaceSpecialNeeds { get; set; }
+
+        /// <summary>
+        /// 酒店特殊需求
+        /// </summary>
+        public string? HotelSpecialNeeds { get; set; }
+
+        /// <summary>
+        /// 餐食特殊需求
+        /// </summary>
+        public string? MealSpecialNeeds { get; set; }
+
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string? Remark { get; set; }
+    }
+}

+ 9 - 0
OASystem/OASystem.Domain/Entities/Customer/Crm_CustomerCert.cs

@@ -17,11 +17,20 @@ namespace OASystem.Domain.Entities.Customer
         /// </summary>
         [SugarColumn(IsNullable =true,ColumnDataType ="int")]
         public int DcId { get; set; }
+
         /// <summary>
         /// 证件类型表Id
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int SdId { get; set; }
+
+        /// <summary>
+        /// 护照类型 Id(数据类型表Id)
+        /// SdId == 74 该字段有值
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int PassportType { get; set; }
+
         /// <summary>
         /// 证件号
         /// </summary>

+ 12 - 4
OASystem/OASystem.Domain/Entities/Customer/Crm_CustomerCompany.cs

@@ -9,26 +9,34 @@ namespace OASystem.Domain.Entities.Customer
     {
         /// <summary>
         /// 客户公司名称
+        /// 简称
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(40)")]
+        public string? CompanyAbbreviation { get; set; }
+
+        /// <summary>
+        /// 客户公司名称
+        /// 全称
         /// </summary>
         [SugarColumn(IsNullable =true,ColumnDataType = "varchar(80)")]
-        public string CompanyName { get; set; }
+        public string? CompanyFullName { get; set; }
         /// <summary>
         /// 公司地址
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
-        public string Address { get; set; }
+        public string? Address { get; set; }
         /// <summary>
         /// 邮政编码
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(80)")]
-        public string PostCodes { get; set; }
+        public string? PostCodes { get; set; }
         /// <summary>
         /// 最后操作人
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int LastedOpUserId { get; set; }
         /// <summary>
-        /// 客户公司名称
+        /// 最后操作时间
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "DateTime")]
         public DateTime LastedOpDt { get; set; }

+ 1 - 1
OASystem/OASystem.Domain/Entities/Customer/Crm_GroupCustomer.cs

@@ -13,7 +13,7 @@ namespace OASystem.Domain.Entities.Customer
     public class Crm_GroupCustomer:EntityBase
     {
         /// <summary>
-        ///  团组Id
+        ///  团组Id 保留
         /// </summary>
         [SugarColumn(IsNullable =true,ColumnDataType ="int")]
         public int DiId { get; set; }

+ 2 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_HotelReservations.cs

@@ -194,9 +194,11 @@ namespace OASystem.Domain.Entities.Groups
 
         /// <summary>
         /// 由地接支付
+        /// 0 是 1否
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int Isoppay { get; set; }
+
         /// <summary>
         /// 是否有单间
         /// 弃用 弃用时间 2023-12-28 17:30

+ 53 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_TourClientList.cs

@@ -0,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Groups
+{
+    /// <summary>
+    /// 接团客户名单
+    /// 关联表 
+    /// 关联 团组信息 客户资料库 
+    /// </summary>
+    [SugarTable("Grp_TourClientList")]
+    public class Grp_TourClientList : EntityBase
+    {
+        /// <summary>
+        /// 团组Id(团组信息表)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int DiId { get; set; }
+
+        /// <summary>
+        /// 客户Id(客户资料表)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int ClientId { get; set; }
+
+        /// <summary>
+        /// 舱位类型Id (数据表Id)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int ShippingSpaceTypeId { get; set; }
+
+        /// <summary>
+        /// 舱位特殊需求
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
+        public string? ShippingSpaceSpecialNeeds { get; set; }
+
+        /// <summary>
+        /// 酒店特殊需求
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
+        public string? HotelSpecialNeeds { get; set; }
+
+        /// <summary>
+        /// 酒店特殊需求
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
+        public string? MealSpecialNeeds { get; set; }
+    }
+}

+ 198 - 0
OASystem/OASystem.Domain/ViewModels/Groups/TourClientListView.cs

@@ -0,0 +1,198 @@
+using Google.Protobuf;
+using Newtonsoft.Json;
+using OASystem.Domain.Entities.Groups;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.ViewModels.Groups
+{
+    /// <summary>
+    /// 接团客户名单
+    /// </summary>
+    public class TourClientListView:Grp_TourClientList
+    {
+    }
+
+    /// <summary>
+    /// 接团客户名单
+    /// 根据团组Id查询List
+    /// View
+    /// </summary>
+    public class TourClientListByDiIdView
+    {
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 姓
+        /// </summary>
+        public string? LastName { get; set; }
+
+        /// <summary>
+        /// 名
+        /// </summary>
+        public string? FirstName { get; set; }
+
+        /// <summary>
+        /// 公司名全称
+        /// </summary>
+        public string? CompanyFullName { get; set; }
+
+        /// <summary>
+        /// 职位
+        /// </summary>
+        public string? Job { get; set; }
+
+        /// <summary>
+        /// 身份证No
+        /// </summary>
+        public string? IDCardNo { get; set; }
+
+        /// <summary>
+        /// 性别
+        /// 0 男1 女 其他值 未设置
+        /// </summary>
+        public int Sex { get; set; }
+
+
+        /// <summary>
+        /// 性别
+        /// 0 男1 女 其他值 未设置
+        /// </summary>
+        public string? SexStr
+        {
+            get
+            {
+                string str = "未设置";
+                if (Sex == 0) str = "男";
+                else if (Sex == 1) str = "女";
+                return str;
+            }
+        }
+    }
+
+    /// <summary>
+    /// 接团客户名单
+    /// 根据团组Id查询List
+    /// View
+    /// </summary>
+    public class TourClientListDetailsView
+    {
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 姓
+        /// </summary>
+        public string? LastName { get; set; }
+
+        /// <summary>
+        /// 名
+        /// </summary>
+        public string? FirstName { get; set; }
+
+        /// <summary>
+        /// 姓名拼音
+        /// 姓/名 eg: LEI/YI
+        /// </summary>
+        public string? Pinyin { get; set; }
+
+        /// <summary>
+        /// 性别
+        /// 0 男1 女 其他值 未设置
+        /// </summary>
+        public int Sex { get; set; }
+
+        /// <summary>
+        /// 性别
+        /// 0 男1 女 其他值 未设置
+        /// </summary>
+        public string? SexStr
+        {
+            get
+            {
+                string str = "未设置";
+                if (Sex == 0) str = "男";
+                else if (Sex == 1) str = "女";
+                return str;
+            }
+        }
+
+        /// <summary>
+        /// 公司名全称
+        /// </summary>
+        public string? CompanyFullName { get; set; }
+
+        /// <summary>
+        /// 职位
+        /// </summary>
+        public string? Job { get; set; }
+
+        /// <summary>
+        /// 身份证No
+        /// </summary>
+        public string? IDCardNo { get; set; }
+
+        /// <summary>
+        /// 生日
+        /// </summary>
+        public string? BirthDay { get; set; }
+
+        /// <summary>
+        /// 护照类型Id(数据类型表Id)
+        /// </summary>
+        public int PassportType { get; set; }
+
+        /// <summary>
+        /// 护照No
+        /// </summary>
+        public string? PassportNo { get; set; }
+
+        /// <summary>
+        /// 签发国
+        /// </summary>
+        public string? Country { get; set; }
+
+        /// <summary>
+        /// 签发地区
+        /// </summary>
+        public string? Area { get; set; }
+
+        /// <summary>
+        /// 签发时间
+        /// </summary>
+        public string? IssueDt { get; set; }
+
+        /// <summary>
+        /// 有效期限
+        /// </summary>
+        public string? ExpiryDt { get; set; }
+
+        /// <summary>
+        /// 舱位类型(数据类型表Id)
+        /// </summary>
+        public int ShippingSpaceTypeId { get; set; }
+
+        /// <summary>
+        /// 舱位特殊需求
+        /// </summary>
+        public string? ShippingSpaceSpecialNeeds { get; set; }
+
+        /// <summary>
+        /// 酒店特殊需求
+        /// </summary>
+        public string? HotelSpecialNeeds { get; set; }
+
+        /// <summary>
+        /// 餐食特殊需求
+        /// </summary>
+        public string? MealSpecialNeeds { get; set; }
+
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string? Remark { get; set; }
+    }
+}

+ 30 - 0
OASystem/OASystem.Domain/ViewModels/System/SetDataView.cs

@@ -36,6 +36,36 @@ namespace OASystem.Domain.ViewModels.System
         public string Remark { get; set; }
     }
 
+    /// <summary>
+    /// 卡类型数据data
+    /// </summary>
+    public class SetDataCurrencyInfoView
+    {
+        public int Id { get; set; }
+        /// <summary>
+        /// 分类名称
+        /// </summary>
+        public string? Name { get; set; }
+
+        /// <summary>
+        /// 卡类型对应的币种
+        /// </summary>
+        public string? Currency { get {
+                string? currency = string.Empty;
+                if (Id == 74) currency = "USD"; //74	美元卡
+                else if (Id == 75) currency = "EUR"; //775	欧元卡
+                else if(Id == 86) currency = "CNY";  //86	招行卡
+                else if (Id == 346) currency = "CNY";  //346	中信卡
+                else if (Id == 363) currency = "CNY";  //363	交行卡
+                return currency;
+            } }
+
+        /// <summary>
+        /// 卡号
+        /// </summary>
+        public string? Remark { get; set; }
+    }
+
 
 
     public class SetDataAndPageInfoView

+ 1 - 1
OASystem/OASystem.Infrastructure/Repositories/CRM/VisaDeleClientCompanyRepository.cs

@@ -88,7 +88,7 @@ namespace OASystem.Infrastructure.Repositories.CRM
                 {
                     bool res = await UpdateAsync(a => a.Id == dto.Id, a => new Crm_CustomerCompany
                     {
-                        CompanyName=dto.CompanyName,
+                        CompanyFullName = dto.CompanyName,
                         Address = dto.Address,
                         PostCodes = dto.PostCodes,
                         LastedOpUserId = dto.LastedOpUserId,

+ 214 - 8
OASystem/OASystem.Infrastructure/Repositories/Groups/HotelPriceRepository.cs

@@ -24,11 +24,13 @@ namespace OASystem.Infrastructure.Repositories.Groups
     {
         private readonly IMapper _mapper;
         private readonly Result _result;
-        public HotelPriceRepository(SqlSugarClient sqlSugar, IMapper mapper) :
+        private readonly TeamRateRepository _teamRateRep;
+        public HotelPriceRepository(SqlSugarClient sqlSugar, IMapper mapper, TeamRateRepository teamRateRep) :
             base(sqlSugar)
         {
             this._mapper = mapper;
             _result = new Result() { Code = -1, Msg = "操作失败!" };
+            _teamRateRep = teamRateRep;
         }
 
         #region 保留
@@ -365,7 +367,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
                 //卡类型
                 List<Sys_SetData> BankCard = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 15 && a.IsDel == 0).ToList();
-                List<SetDataInfoView> _BankCard = _mapper.Map<List<SetDataInfoView>>(BankCard);
+                List<SetDataCurrencyInfoView> _BankCard = _mapper.Map<List<SetDataCurrencyInfoView>>(BankCard);
 
                 //预订网站
                 List<Sys_SetData> BookingWebsite = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 12 && a.IsDel == 0).ToList();
@@ -703,7 +705,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
         #endregion
 
         /// <summary>
-        /// 酒店预定费用
+        /// 酒店预定
         /// Items By DiId
         /// </summary>
         /// <param name="dto"></param>
@@ -765,7 +767,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
                 //卡类型
                 List<Sys_SetData> BankCard = _dataSouruce.Where(a => a.STid == 15).ToList();
-                List<SetDataInfoView> _BankCard = _mapper.Map<List<SetDataInfoView>>(BankCard);
+                List<SetDataCurrencyInfoView> _BankCard = _mapper.Map<List<SetDataCurrencyInfoView>>(BankCard);
 
                 //房间入住人类型 
                 List<Sys_SetData> CheckPerson = _dataSouruce.Where(a => a.STid == 71).ToList();
@@ -806,6 +808,42 @@ namespace OASystem.Infrastructure.Repositories.Groups
             return _result;
         }
 
+        /// <summary>
+        /// 酒店预定
+        /// 创建 入住卷号码
+        /// </summary>
+        /// <param name="DiId"></param>
+        /// <returns></returns>
+        public async Task<Result> _CreateCheckVolumeNo(int DiId)
+        {
+            var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.Id == DiId && it.IsDel == 0).FirstAsync();
+            if (groupInfo != null)
+            {
+                if (!string.IsNullOrEmpty(groupInfo.VisitCountry))
+                {
+                    string no = string.Empty;
+
+                    string[] countrys = new string[] { };
+                    countrys = groupInfo.VisitCountry.Split('|');
+                    foreach (string country in countrys)
+                    {
+                        //国家城市三字码 未挪数据 暂时用随机数代替
+
+
+                    }
+                    no = CommonFun.GetRandomLetter(countrys.Length).ToUpper();
+
+                    no += CommonFun.GetRandomNumber(2);
+
+                    _result.Code = 0;
+                    _result.Data = no;
+                    _result.Msg = "入住卷号码 获取成功!";
+                }
+            }
+
+            return _result;
+        }
+
         /// <summary>
         /// 酒店预定
         /// details
@@ -866,6 +904,72 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 #region 参数处理
                 _HotelReservations = _mapper.Map<Grp_HotelReservations>(_dto);
                 _CreditCardPayment = _mapper.Map<Grp_CreditCardPayment>(_dto);
+
+                _HotelReservations.DiId = _dto.DiId;
+                _HotelReservations.CreateUserId = _dto.UserId;
+                _HotelReservations.Remark = _dto.HotelRemark;
+
+                #region CCP 表参数
+                _CreditCardPayment.CreateUserId = _dto.UserId;
+                _CreditCardPayment.DIId = _dto.DiId;
+                _CreditCardPayment.CTable = 76;
+                _CreditCardPayment.PayPercentage = 100.00M;
+                _CreditCardPayment.PayThenMoney = _CreditCardPayment.PayMoney;
+
+                string paymentCurrencyCode = string.Empty;
+                List<Sys_SetData> currencySouruce = await _sqlSugar.Queryable<Sys_SetData>().Where(a => a.IsDel == 0 && a.STid == 66).ToListAsync();
+                if (currencySouruce.Count > 0)
+                {
+                    Sys_SetData currency = new Sys_SetData();
+                    currency = currencySouruce.Where(it => it.Id == _CreditCardPayment.PaymentCurrency).FirstOrDefault();
+                    if (currency != null)
+                    {
+                        paymentCurrencyCode = currency.Name;
+                    }
+                }
+
+                List<TeamRateModelView> teamRateModelViews = new List<TeamRateModelView>();
+                teamRateModelViews = await _teamRateRep.PostGroupRateInfoByDiId(_dto.DiId);
+                if (teamRateModelViews.Count < 0)
+                {
+                    _result.Msg = "该团未设置酒店预订模块相关币种汇率!";
+                    return _result;
+                }
+                TeamRateModelView teamRateModels_hotel = new TeamRateModelView();
+                teamRateModels_hotel = teamRateModelViews.Where(it => it.CTableId == 76).FirstOrDefault();
+                if (teamRateModels_hotel == null)
+                {
+                    _result.Msg = "该团未设置酒店预订模块相关币种汇率!";
+                    return _result;
+                }
+
+                List<TeamRateDescView> teamRateDescViews = new List<TeamRateDescView>();
+                teamRateDescViews = teamRateModels_hotel.TeamRates;
+                if (teamRateDescViews.Count < 0)
+                {
+                    _result.Msg = "该团未设置酒店预订模块相关币种汇率!";
+                    return _result;
+                }
+                TeamRateDescView teamRateDescView = new TeamRateDescView();
+                teamRateDescView = teamRateDescViews.Where(it => it.CurrencyCode == paymentCurrencyCode).FirstOrDefault();
+                if (teamRateDescView == null)
+                {
+                    _result.Msg = "该团未设置酒店预订模块相关币种汇率!";
+                    return _result;
+                }
+                _CreditCardPayment.DayRate = teamRateDescView.Rate;
+                _CreditCardPayment.RMBPrice = (_CreditCardPayment.DayRate * _CreditCardPayment.PayMoney).DecimalsKeepTwo();
+
+                if (_CreditCardPayment.PayDId == 72) //刷卡
+                {
+                    _CreditCardPayment.BankNo = "6222 **** **** 7990";
+                    _CreditCardPayment.CardholderName = "Zhang Hailin";
+                }
+
+
+                _CreditCardPayment.Remark = _dto.CcpRemark;
+                #endregion
+
                 #endregion
 
                 if (_dto.Id == 0) // Add
@@ -890,6 +994,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         return _result;
                     }
                     _result.Msg = "操作成功!";
+                    _result.Code = 0;
                     _sqlSugar.CommitTran(); // 提交
                 }
                 else if (_dto.Id > 0) //Edit
@@ -910,17 +1015,83 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                                          it.GuestName,
                                                          it.CheckInDate,
                                                          it.CheckOutDate,
-
+                                                         it.CheckType,
+                                                         it.RoomExplanation,
+                                                         it.SingleRoomPrice,
+                                                         it.SingleRoomCount,
+                                                         it.DoubleRoomPrice,
+                                                         it.DoubleRoomCount,
+                                                         it.SuiteRoomPrice,
+                                                         it.SuiteRoomCount,
+                                                         it.OtherRoomPrice, 
+                                                         it.OtherRoomCount,
+                                                         it.CardPrice,
+                                                         it.CardPriceCurrency,
+                                                         it.Isoppay,
+                                                         it.BreakfastPrice,
+                                                         it.BreakfastCurrency,
+                                                         it.GovernmentRent,
+                                                         it.GovernmentRentCurrency,
+                                                         it.CityTax,
+                                                         it.CityTaxCurrency,
+                                                         it.Remark,
                                                      })
                                                      .WhereColumns(it => it.Id)
                                                      .ExecuteCommandAsync();
 
-                    var hotelInfo = await _sqlSugar.Queryable<Grp_HotelReservations>().FirstAsync();
+                    if (hotelStatus < 0)
+                    {
+                        _result.Msg = "酒店预定信息修改失败!";
+                        _sqlSugar.RollbackTran(); //回滚
+                        return _result;
 
+                    }
+
+                    var hotelInfo = await _sqlSugar.Queryable<Grp_CreditCardPayment>()
+                                                   .Where(it => it.DIId == _dto.DiId && it.CId == _dto.Id && it.CTable == 76 && it.IsDel == 0)
+                                                   .FirstAsync();
+                    if (hotelInfo == null) //ccp表 Add
+                    {
 
+                    }
+                    else //ccp表 Edit
+                    {
+                        _CreditCardPayment.Id = hotelInfo.Id;
+
+                        int creditCardStatus = await _sqlSugar.Updateable<Grp_CreditCardPayment>(_CreditCardPayment)
+                                                    .UpdateColumns(it => new
+                                                    {
+                                                       it.PayDId,
+                                                       it.ConsumptionPatterns,
+                                                       it.ConsumptionDate,
+                                                       it.PayMoney,
+                                                       it.PaymentCurrency,
+                                                       it.PayThenMoney,
+                                                       it.DayRate,
+                                                       it.RMBPrice,
+                                                       it.BankNo,
+                                                       it.CardholderName,
+                                                       it.OtherBankName,
+                                                       it.OtherSideNo,
+                                                       it.OtherSideName,
+                                                       it.Payee,
+                                                       it.OrbitalPrivateTransfer,
+                                                       it.Remark,
+                                                    })
+                                                    .WhereColumns(it => it.Id)
+                                                    .ExecuteCommandAsync();
+                        if (creditCardStatus < 0)
+                        {
+                            _result.Msg = "付款信息表修改失败!";
+                            _sqlSugar.RollbackTran(); //回滚
+                            return _result;
+                        }
 
-                    _sqlSugar.CommitTran();
-                    _sqlSugar.RollbackTran();
+                    }
+
+                    _result.Msg = "操作成功!";
+                    _result.Code = 0;
+                    _sqlSugar.CommitTran(); // 提交
                 }
                 else if (_dto.Id < 0) //不正确的Id
                 {
@@ -936,5 +1107,40 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
             return _result;
         }
+
+        /// <summary>
+        /// 酒店预定
+        /// Del
+        /// </summary>
+        /// <returns></returns>
+        public async Task<Result> _Del(int id,int userId)
+        {
+            Grp_HotelReservations _HotelReservations = new Grp_HotelReservations()
+            {
+                Id = id,
+                IsDel = 1,
+                DeleteUserId = userId,
+                DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+            };
+            int hrStatus = await _sqlSugar.Updateable<Grp_HotelReservations>(_HotelReservations)
+                                        .UpdateColumns(it => new
+                                        {
+                                            it.IsDel,
+                                            it.DeleteUserId,
+                                            it.DeleteTime,
+                                        })
+                                        .WhereColumns(it => it.Id)
+                                        .ExecuteCommandAsync();
+            if (hrStatus < 0)
+            {
+                _result.Msg = "操作失败!";
+                return _result;
+            }
+
+            _result.Msg = "操作成功!";
+            _result.Code = 0;
+
+            return _result;
+        }
     }
 }

+ 0 - 2
OASystem/OASystem.Infrastructure/Repositories/Groups/TeamRateRepository.cs

@@ -45,8 +45,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
             var teamRateDatas = await _setDataRep.GetSetDataBySTId(_setDataRep, 66); // STid=66 全球币种
 
-            
-
             dynamic _data = null;
 
             if (dto.PortType == 1)

+ 175 - 0
OASystem/OASystem.Infrastructure/Repositories/Groups/TourClientListRepository.cs

@@ -0,0 +1,175 @@
+using AutoMapper;
+using OASystem.Domain;
+using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.ViewModels.Groups;
+using OASystem.Infrastructure.Tools;
+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 TourClientListRepository :BaseRepository<Grp_TourClientList,TourClientListView>
+    {
+        private readonly Result _result;
+        private readonly IMapper _mapper;
+
+        public TourClientListRepository(SqlSugarClient sqlSugar, IMapper mapper)
+            : base(sqlSugar)
+        {
+            _result = new Result() { Code = -1, Msg = "操作失败!" };
+            _mapper = mapper;
+        }
+
+        /// <summary>
+        /// 根据团组Id查询List
+        /// </summary>
+        /// <param name="portId"></param>
+        /// <param name="diId"></param>
+        /// <returns></returns>
+        public async Task<Result> _ItemByDiId(int portId, int diId)
+        {
+            if (portId == 1 || portId == 2 || portId == 3 ) // 1 web 2 Android 3 ios
+            {
+                string sql = string.Format(@"Select tcl.Id,tcl.DiId,temp.* From Grp_TourClientList tcl
+                                                 Left Join 
+	                                                 (Select dc.Id As DcId,dc.LastName,dc.FirstName,ccom.CompanyFullName,dc.Job,cc.CertNo As IDCardNo,dc.Sex 
+	                                                 From Crm_DeleClient dc
+	                                                 Left Join Crm_CustomerCompany ccom On dc.CrmCompanyId = ccom.Id  And ccom.IsDel = 0
+	                                                 Left Join Crm_CustomerCert cc On dc.Id = cc.DcId And cc.SdId = 773 And cc.IsDel = 0
+	                                                 Where dc.IsDel = 0) temp 
+                                                 On temp.DcId =tcl.ClientId  
+                                                 Where tcl.IsDel = 0 And tcl.DiId = {0}", diId);
+                var data = await _sqlSugar.SqlQueryable<TourClientListByDiIdView>(sql).ToListAsync();
+                _result.Code = 0;
+                _result.Data = data;
+            }
+            else
+            {
+                _result.Msg = "请传入有效的PortType参数,1 Web 2 Android 3 IOS!";
+            }
+            return _result;
+        }
+
+        /// <summary>
+        /// 基础数据 Init
+        /// </summary>
+        /// <param name="portId"></param>
+        /// <returns></returns>
+        public async Task<Result> _BasicDataInit(int portId)
+        {
+            if (portId == 1 || portId == 2 || portId == 3) // 1 web 2 Android 3 ios
+            {
+                
+                var setData = await _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0) .ToListAsync();
+
+                var shippingSpaceTypeData = setData.Where(it => it.STid == 44).ToList(); //舱位类型
+                List<SetDataInfoView> _ShippingSpaceTypeData = _mapper.Map<List<SetDataInfoView>>(shippingSpaceTypeData);
+
+                var passportTypeData = setData.Where(it => it.STid == 74).ToList(); //护照类型
+                List<SetDataInfoView> _PassportTypeData = _mapper.Map<List<SetDataInfoView>>(passportTypeData);
+
+                var _view = new {
+                    ShippingSpaceTypeData = _ShippingSpaceTypeData,
+                    PassportTypeData = _PassportTypeData
+                };
+                _result.Code = 0;
+                _result.Data = _view;
+            }
+            else
+            {
+                _result.Msg = "请传入有效的PortType参数,1 Web 2 Android 3 IOS!";
+            }
+            return _result;
+        }
+
+        /// <summary>
+        /// 根据Id查询Details
+        /// </summary>
+        /// <param name="portId"></param>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public async Task<Result> _Details(int portId, int id)
+        {
+            if (portId == 1 || portId == 2 || portId == 3) // 1 web 2 Android 3 ios
+            {
+                string sql = string.Format(@"Select tcl.Id,tcl.DiId,temp.*,tcl.ShippingSpaceTypeId,tcl.ShippingSpaceSpecialNeeds,
+                                             tcl.HotelSpecialNeeds,tcl.MealSpecialNeeds,tcl.Remark
+                                             From Grp_TourClientList tcl
+                                             Left Join 
+	                                             (Select dc.Id As DcId,dc.LastName,dc.FirstName,dc.Pinyin,dc.Sex,ccom.CompanyFullName,dc.Job,
+	                                                 cc1.CertNo As IDCardNo,dc.Phone,dc.BirthDay,cc2.PassportType,cc2.CertNo As PassportNo,cc2.Country,
+	                                                 cc2.Area,cc2.IssueDt,cc2.ExpiryDt
+	                                                 From Crm_DeleClient dc
+	                                                 Left Join Crm_CustomerCompany ccom On dc.CrmCompanyId = ccom.Id  And ccom.IsDel = 0
+	                                                 Left Join Crm_CustomerCert cc1 On dc.Id = cc1.DcId And cc1.SdId = 773 And cc1.IsDel = 0
+	                                                 Left Join Crm_CustomerCert cc2 On dc.Id = cc2.DcId And cc2.SdId = 774 And cc2.IsDel = 0
+	                                                 Where dc.IsDel = 0) temp 
+                                             On temp.DcId =tcl.ClientId  
+                                             Where tcl.IsDel = 0 And tcl.Id = {0}", id);
+                var data = await _sqlSugar.SqlQueryable<TourClientListDetailsView>(sql).FirstAsync();
+                if (data != null) 
+                {
+                    data.BirthDay = data.BirthDay.DateFormat("yyyy-MM-dd");
+                    data.IssueDt = data.IssueDt.DateFormat("yyyy-MM-dd");
+                    data.ExpiryDt = data.ExpiryDt.DateFormat("yyyy-MM-dd");
+                    _result.Code = 0;
+                    _result.Data = data;
+                }
+            }
+            else
+            {
+                _result.Msg = "请传入有效的PortType参数,1 Web 2 Android 3 IOS!";
+            }
+            return _result;
+        }
+
+        /// <summary>
+        /// Add Or Edit
+        /// </summary>
+        /// <param name="portId"></param>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public async Task<Result> _AddOrEdit(int portId, int id)
+        {
+            if (portId == 1 || portId == 2 || portId == 3) // 1 web 2 Android 3 ios
+            {
+                string sql = string.Format(@"Select tcl.Id,tcl.DiId,temp.*,tcl.ShippingSpaceTypeId,tcl.ShippingSpaceSpecialNeeds,
+                                             tcl.HotelSpecialNeeds,tcl.MealSpecialNeeds,tcl.Remark
+                                             From Grp_TourClientList tcl
+                                             Left Join 
+	                                             (Select dc.Id As DcId,dc.LastName,dc.FirstName,dc.Pinyin,dc.Sex,ccom.CompanyFullName,dc.Job,
+	                                                 cc1.CertNo As IDCardNo,dc.Phone,dc.BirthDay,cc2.PassportType,cc2.CertNo As PassportNo,cc2.Country,
+	                                                 cc2.Area,cc2.IssueDt,cc2.ExpiryDt
+	                                                 From Crm_DeleClient dc
+	                                                 Left Join Crm_CustomerCompany ccom On dc.CrmCompanyId = ccom.Id  And ccom.IsDel = 0
+	                                                 Left Join Crm_CustomerCert cc1 On dc.Id = cc1.DcId And cc1.SdId = 773 And cc1.IsDel = 0
+	                                                 Left Join Crm_CustomerCert cc2 On dc.Id = cc2.DcId And cc2.SdId = 774 And cc2.IsDel = 0
+	                                                 Where dc.IsDel = 0) temp 
+                                             On temp.DcId =tcl.ClientId  
+                                             Where tcl.IsDel = 0 And tcl.Id = {0}", id);
+                var data = await _sqlSugar.SqlQueryable<TourClientListDetailsView>(sql).FirstAsync();
+                if (data != null)
+                {
+                    data.BirthDay = data.BirthDay.DateFormat("yyyy-MM-dd");
+                    data.IssueDt = data.IssueDt.DateFormat("yyyy-MM-dd");
+                    data.ExpiryDt = data.ExpiryDt.DateFormat("yyyy-MM-dd");
+                    _result.Code = 0;
+                    _result.Data = data;
+                }
+            }
+            else
+            {
+                _result.Msg = "请传入有效的PortType参数,1 Web 2 Android 3 IOS!";
+            }
+            return _result;
+        }
+
+    }
+}

+ 4 - 4
OASystem/OASystem.Infrastructure/Repositories/Login/LoginRepository.cs

@@ -102,8 +102,8 @@ namespace OASystem.Infrastructure.Repositories.Login
             string IdCrad = registerDto.IdCrad;
             string birthDay = IdCrad.Substring(6, 4) + "-" + IdCrad.Substring(10, 2) + "-" + IdCrad.Substring(12, 2);
 
-            //string number = await CreateNumber(registerDto.DepId);
-            string number = "10001";
+            string number = await CreateNumber(registerDto.DepId);
+            //string number = "10001";
             if (string.IsNullOrEmpty(number))
             {
                 result.Code = -2;
@@ -182,11 +182,11 @@ namespace OASystem.Infrastructure.Repositories.Login
             var userData = await _sqlSugar.SqlQueryable<Sys_Users>(userSql).ToListAsync();
             if (userData.Count <= 0) return number;
 
-            string depSql = string.Format("Select * From  Sys_Department Where IsDel= 0 And Id = {0} ", depId);
+            string depSql = string.Format("Select * From  Sys_Department Where Id = {0} ", depId);
             var depData = await _sqlSugar.SqlQueryable<Sys_Department>(depSql).FirstAsync();
             if (depData == null) return number;
 
-            string numPrefix = depData.Remark; 
+            string numPrefix = depData.DepCode; 
             if (string.IsNullOrEmpty(numPrefix)) return number;
 
             int numSuffix = 1;

+ 97 - 0
OASystem/OASystem.Infrastructure/Tools/CommonFun.cs

@@ -1,5 +1,6 @@
 using OASystem.Domain.ViewModels.Financial;
 using OASystem.Domain.ViewModels.Groups;
+using System.Globalization;
 using System.Reflection.Metadata;
 
 namespace OASystem.Infrastructure.Tools;
@@ -199,6 +200,57 @@ public static class CommonFun
         return sb.ToString();
     }
 
+
+    /// <summary>
+    /// 根据自定义随机包含的字符获取指定长度的随机字母(含大小写)
+    /// </summary>
+    /// <param name="length">随机字符长度</param>
+    /// <returns>随机字符</returns>
+    public static string GetRandomLetter(int length)
+    {
+        string a = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjklmnpqrstuvwxyz";
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < length; i++)
+        {
+            sb.Append(a[new Random(Guid.NewGuid().GetHashCode()).Next(0, a.Length - 1)]);
+        }
+
+        return sb.ToString();
+    }
+
+    /// <summary>
+    /// 生成不重复随机数字
+    /// 操作者:037
+    /// 2021-07-26 15:39
+    /// </summary>
+    /// <param name="CodeCount">输入字符串长度</param>
+    /// <returns>字符串</returns>
+    public static string GetRandomNumber(int len)
+    {
+        string allChar = "0,1,2,3,4,5,6,7,8,9";
+        string[] allCharArray = allChar.Split(',');
+        string RandomCode = "";
+        int temp = -1;
+        Random rand = new Random();
+
+        for (int i = 0; i < len; i++)
+        {
+            if (temp != -1)
+            {
+                rand = new Random(temp * i * ((int)DateTime.Now.Ticks));
+            }
+            int t = rand.Next(allCharArray.Length - 1);
+            while (temp == t)
+
+            {
+                t = rand.Next(allCharArray.Length - 1);
+            }
+            temp = t;
+            RandomCode += allCharArray[t];
+        }
+        return RandomCode;
+    }
+
     #endregion
 
     #region decimal 截取
@@ -239,6 +291,21 @@ public static class CommonFun
 
     #endregion
 
+    #region decimal 保留两位小数
+
+    /// <summary>
+    /// decimal 保留两位小数 不四舍五入
+    /// </summary>
+    /// <param name="number"></param>
+    /// <returns></returns>
+    public static decimal DecimalsKeepTwo(this decimal myDecimal)
+    {
+        var subDecimal = Math.Floor(myDecimal * 100) / 100;//保留两位小数,直接截取
+        return subDecimal;
+    }
+
+    #endregion
+
     #region 团组模块 - 汇率相关存储解析
     /// <summary>
     /// 团组模块 - 汇率相关 To List
@@ -312,4 +379,34 @@ public static class CommonFun
         return regex.IsMatch(idNumber);
     }
     #endregion
+
+    #region string格式日期格式化
+
+    /// <summary>
+    /// string格式日期格式化
+    /// </summary>
+    /// <param name="dateStr"></param>
+    /// <param name="format">
+    /// 格式化标准
+    /// yyyy-MM-dd  yyyy/MM/dd
+    /// </param>
+    /// <returns></returns>
+    public static string DateFormat(this string dateStr, string format)
+    {
+        if (!string.IsNullOrEmpty(dateStr))
+        {
+            if (!string.IsNullOrEmpty(format))
+            {
+                DateTime result;
+                if (DateTime.TryParse(dateStr, out result))
+                {
+                    return result.ToString(format);
+                }
+            }
+        }
+
+        return "";
+    }
+
+    #endregion
 }