浏览代码

合并服务器

yuanrf 1 年之前
父节点
当前提交
915bbd134e
共有 28 个文件被更改,包括 3122 次插入277 次删除
  1. 7 3
      OASystem/EntitySync/Program.cs
  2. 38 0
      OASystem/OASystem.Api/Controllers/BusinessController.cs
  3. 174 2
      OASystem/OASystem.Api/Controllers/GroupsController.cs
  4. 81 0
      OASystem/OASystem.Api/Controllers/MarketCustomerResourcesController.cs
  5. 4 0
      OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs
  6. 546 22
      OASystem/OASystem.Api/Controllers/StatisticsController.cs
  7. 58 0
      OASystem/OASystem.Api/OAMethodLib/GeneralMethod.cs
  8. 29 0
      OASystem/OASystem.Domain/Dtos/CRM/NewClientDataQueryDto.cs
  9. 2 0
      OASystem/OASystem.Domain/Dtos/DtoBase.cs
  10. 26 0
      OASystem/OASystem.Domain/Dtos/FileDto/FileDto.cs
  11. 87 26
      OASystem/OASystem.Domain/Dtos/Groups/TourClientListDto.cs
  12. 3 3
      OASystem/OASystem.Domain/Entities/Customer/Crm_CustomerCert.cs
  13. 1 1
      OASystem/OASystem.Domain/Entities/Customer/Crm_CustomerCompany.cs
  14. 31 30
      OASystem/OASystem.Domain/Entities/Customer/Crm_DeleClient.cs
  15. 65 0
      OASystem/OASystem.Domain/Entities/Financial/Fin_GroupExtraCost.cs
  16. 15 2
      OASystem/OASystem.Domain/Entities/Groups/Grp_AirTicketReservations.cs
  17. 33 3
      OASystem/OASystem.Domain/Entities/Groups/Grp_InvitationOfficialActivities.cs
  18. 72 0
      OASystem/OASystem.Domain/Entities/PersonnelModule/Pm_TaskAllocation.cs
  19. 62 0
      OASystem/OASystem.Domain/Entities/PersonnelModule/Pm_TaskRelevanceUser.cs
  20. 156 0
      OASystem/OASystem.Domain/ViewModels/CRM/NewClientDataView.cs
  21. 2 2
      OASystem/OASystem.Domain/ViewModels/CRM/VisaDeleClientView.cs
  22. 40 54
      OASystem/OASystem.Domain/ViewModels/Groups/TourClientListView.cs
  23. 822 17
      OASystem/OASystem.Domain/ViewModels/Statistics/GroupStatementView.cs
  24. 224 12
      OASystem/OASystem.Infrastructure/Repositories/CRM/NewClientDataRepository.cs
  25. 1 1
      OASystem/OASystem.Infrastructure/Repositories/CRM/VisaDeleClientRepository.cs
  26. 44 29
      OASystem/OASystem.Infrastructure/Repositories/Groups/HotelPriceRepository.cs
  27. 5 5
      OASystem/OASystem.Infrastructure/Repositories/Groups/InvitationOfficialActivitiesRepository.cs
  28. 494 65
      OASystem/OASystem.Infrastructure/Repositories/Groups/TourClientListRepository.cs

+ 7 - 3
OASystem/EntitySync/Program.cs

@@ -120,8 +120,12 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Fin_PaymentRefundAndOtherMoney),
     //typeof(Grp_InsuranceCost),
     //typeof(Grp_TourClientList), //接团客户名单
-    typeof(Dis_Intercontinental), //洲
-    typeof(Dis_Country), //国家
-    typeof(Dis_City), //城市
+    //typeof(Dis_Intercontinental), //洲
+    //typeof(Dis_Country), //国家
+    //typeof(Dis_City), //城市 
+    //typeof(Fin_GroupExtraCost), //超支费用 
+    typeof(Pm_TaskAllocation), //任务分配 
+    typeof(Pm_TaskRelevanceUser), //任务分配关联人员(完成者) 
+
 });
 Console.WriteLine("数据库结构同步完成!");

+ 38 - 0
OASystem/OASystem.Api/Controllers/BusinessController.cs

@@ -4,6 +4,7 @@ using OASystem.API.OAMethodLib.ALiYun;
 using OASystem.API.OAMethodLib.ExcelOutput;
 using OASystem.Domain.Common;
 using OASystem.Domain.Dtos.Business;
+using OASystem.Domain.Dtos.FileDto;
 using OASystem.Domain.Dtos.Financial;
 using OASystem.Domain.Dtos.Groups;
 using OASystem.Domain.Entities.Business;
@@ -621,5 +622,42 @@ Where c.ConfListId = {0}", ConfId);
         }
 
         #endregion
+
+
+        #region 文件删除
+        /// <summary>
+        ///  文件操作 
+        ///  删除指定文件 
+        /// </summary>
+        /// <param name="dto">Dto</param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostFileDel(FileDelDto dto)
+        {
+            try
+            {
+                string pathUrl = dto.PathUrl;
+                if (string.IsNullOrEmpty(pathUrl))
+                    return Ok(JsonView(false, "路径为空或者不是有效路径!"));
+
+                if (System.IO.File.Exists(pathUrl))
+                {
+                    System.IO.File.Delete(pathUrl);
+                    return Ok(JsonView(false, "操作成功!"));
+                }
+                else
+                {
+                    return Ok(JsonView(false, "该文件不存在!"));
+                }
+            }
+            catch (Exception ex)
+            {
+
+                return Ok(JsonView(false, ex.Message));
+            }
+        }
+
+        #endregion
     }
 }

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

@@ -43,6 +43,7 @@ using System.Diagnostics.Eventing.Reader;
 using System.IO;
 using StackExchange.Redis;
 using Org.BouncyCastle.Utilities;
+using Aspose.Words.Drawing;
 using Aspose.Cells.Charts;
 
 namespace OASystem.API.Controllers
@@ -1250,7 +1251,7 @@ namespace OASystem.API.Controllers
                                 string ioaCurrencyCode = "Unknown";
                                 string ioaCurrencyName= "Unknown";
 
-                                var currencyData = currencyItems.Where(s => s.Id == invitationOfficialActivities.Currency && s.IsDel == 0).FirstOrDefault();
+                                var currencyData = currencyItems.Where(s => s.Id == invitationOfficialActivities.InviteCurrency && s.IsDel == 0).FirstOrDefault();
                                 if (currencyData != null)
                                 {
                                     ioaCurrencyCode = currencyData.Name;
@@ -1258,7 +1259,7 @@ namespace OASystem.API.Controllers
                                 }
 
                                 _detail.PriceNameContent = invitationOfficialActivities.InviterArea;
-                                _detail.PriceMsgContent = "邀请费用:" + invitationOfficialActivities.InviteCosts + " "+ ioaCurrencyCode + "("+ ioaCurrencyName+ ")<br/>" +
+                                _detail.PriceMsgContent = "邀请费用:" + invitationOfficialActivities.InviteCost + " "+ ioaCurrencyCode + "("+ ioaCurrencyName+ ")<br/>" +
                                                           "活动费用:- <br/>" +
                                                           "备注:" + invitationOfficialActivities.Remark + "<br/>";
 
@@ -6724,6 +6725,177 @@ namespace OASystem.API.Controllers
 
             return Ok(JsonView(viewData.Data));
         }
+
+        /// <summary>
+        /// 接团客户名单
+        /// AddMultiple(添加多个)
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<IActionResult> PostTourClientListAddMultiple(TourClientListAddMultipleDto _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.AddAuth == 0) return Ok(JsonView(false, "您没有添加权限!"));
+           
+
+            #endregion
+
+            #endregion
+
+            var viewData = await _tourClientListRep._AddMultiple(_dto);
+            if (viewData.Code != 0)
+            {
+                return Ok(JsonView(false, viewData.Msg));
+            }
+
+            return Ok(JsonView(true,viewData.Msg));
+        }
+
+        /// <summary>
+        /// 接团客户名单
+        /// Del
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<IActionResult> PostTourClientListDel(TourClientListDelDto _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.DeleteAuth == 0) return Ok(JsonView(false, "您没有删除权限!"));
+
+
+            #endregion
+
+            #endregion
+
+            var viewData = await _tourClientListRep._Del(_dto.Id, _dto.UserId);
+            if (viewData.Code != 0)
+            {
+                return Ok(JsonView(false, viewData.Msg));
+            }
+
+            return Ok(JsonView(viewData.Data));
+        }
+
+        /// <summary>
+        /// 接团客户名单
+        /// 文件下载 客户名单
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<IActionResult> PostTourClientListDownloadFile(PostTourClientListDownloadFile _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.FilesDownloadAuth == 0) return Ok(JsonView(false, "您没有文件下载权限!"));
+
+            #endregion
+
+            #endregion
+
+            string clientSql = 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.DiId = {0}",_dto.DiId);
+            List<TourClientListDetailsView> DcList = await _sqlSugar.SqlQueryable<TourClientListDetailsView>(clientSql).ToListAsync();
+
+            if (DcList.Count < 0) return Ok(JsonView(false, "该团未录入客户名单!"));
+
+            //载入模板
+            string tempPath = AppSettingsHelper.Get("WordBasePath") + "Template/dwon_团组人员列表模板.doc";
+
+            //载入模板
+            var doc = new Document(tempPath);
+            DocumentBuilder builder = new DocumentBuilder(doc);
+
+            //获取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 < DcList.Count; i++)
+            {
+                builder.MoveToCell(0, i + 1, 0, 0);
+                builder.Write(DcList[i].LastName + DcList[i].FirstName);
+
+                builder.MoveToCell(0, i + 1, 1, 0);
+                int sex = DcList[i].Sex;
+                string sexStr = string.Empty;
+                if (sex == 0) sexStr = "男";
+                else if (sex == 1) sexStr = "女";
+                else sexStr = "未设置";
+                builder.Write(sexStr);
+
+                builder.MoveToCell(0, i + 1, 2, 0);
+                string birthDay = DcList[i].BirthDay;
+                string birthDayStr = string.Empty;
+                if (!string.IsNullOrEmpty(birthDay))
+                {
+                    birthDayStr = Convert.ToDateTime(birthDay).ToString("yyyy-MM-dd");
+                }
+                builder.Write(birthDayStr);
+
+                builder.MoveToCell(0, i + 1, 3, 0);
+                builder.Write(DcList[i].CompanyFullName);
+
+                builder.MoveToCell(0, i + 1, 4, 0);
+                builder.Write(DcList[i].Job);
+            }
+
+
+            //删除多余行
+            while (tableOne.Rows.Count > DcList.Count + 1)
+            {
+                tableOne.Rows.RemoveAt(DcList.Count + 1);
+            }
+
+            string fileName = "组团人员名单(" + DateTime.Now.ToString("yyyyhhddHHmmss") + ").doc";
+
+            var fileDir = AppSettingsHelper.Get("WordBasePath") + fileName;
+            doc.Save(fileDir);
+            string Url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/" + fileName;
+            return Ok(JsonView(true, "操作成功!", Url));
+        }
+
         #endregion
     }
 }

+ 81 - 0
OASystem/OASystem.Api/Controllers/MarketCustomerResourcesController.cs

@@ -20,6 +20,37 @@ namespace OASystem.API.Controllers
         {
             this._clientDataRepository = clientDataRepository;
         }
+
+        /// <summary>
+        /// 客户资料数据
+        /// 基础数据
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> MarketCustomerInit(PortDtoBase dto)
+        {
+            JsonView jw = new JsonView();
+            try
+            {
+                Result resultData = await _clientDataRepository._Init(dto.PortType);
+                if (resultData.Code == 0)
+                {
+                    jw = JsonView(true, resultData.Msg, resultData.Data);
+                }
+                else
+                {
+                    jw = JsonView(false, resultData.Msg, resultData.Data);
+                }
+            }
+            catch (Exception)
+            {
+                jw = JsonView(false, "程序错误!");
+            }
+
+            return Ok(jw);
+        }
+
         /// <summary>
         /// 查询客户资料数据
         /// </summary>
@@ -48,6 +79,37 @@ namespace OASystem.API.Controllers
 
             return Ok(jw);
         }
+
+        /// <summary>
+        /// 客户资料数据
+        /// Details
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostNewClientDataDetails(NewClientDataDetailsDto dto)
+        {
+            JsonView jw = new JsonView();
+            try
+            {
+                Result resultData = await _clientDataRepository._BatchAssignment(dto.PortType , dto.Id);
+                if (resultData.Code == 0)
+                {
+                    jw = JsonView(true, resultData.Msg, resultData.Data);
+                }
+                else
+                {
+                    jw = JsonView(false, resultData.Msg, resultData.Data);
+                }
+            }
+            catch (Exception)
+            {
+                jw = JsonView(false, "程序错误!");
+            }
+
+            return Ok(jw);
+        }
+
         /// <summary>
         /// 客户资料操作(Status:1.新增,2.修改)
         /// </summary>
@@ -71,6 +133,7 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(false, "程序错误!"));
             }
         }
+        
         /// <summary>
         /// 新客户资料操作(删除)
         /// </summary>
@@ -144,5 +207,23 @@ namespace OASystem.API.Controllers
             }
             return Ok(JsonView(true, result.Msg,result.Data));
         }
+
+        /// <summary>
+        /// 新客户资料操作
+        /// 批量分配
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostBatchAssignment(BatchAssignmentDto dto)
+        {
+            var res = await _clientDataRepository._BatchAssignment(dto);
+            if (res.Code != 0)
+            {
+                return Ok(JsonView(false, "操作失败!"));
+            }
+            return Ok(JsonView(true, "操作成功!"));
+        }
     }
 }

+ 4 - 0
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -946,5 +946,9 @@ namespace OASystem.API.Controllers
         }
         #endregion
 
+
+        #region 任务单
+
+        #endregion
     }
 }

+ 546 - 22
OASystem/OASystem.Api/Controllers/StatisticsController.cs

@@ -11,6 +11,11 @@ using OASystem.Domain.ViewModels.Statistics;
 using OASystem.Infrastructure.Repositories.Groups;
 using static OpenAI.GPT3.ObjectModels.SharedModels.IOpenAiModels;
 using System;
+using OASystem.Domain.Entities.Customer;
+using System.Collections.Generic;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using Microsoft.VisualBasic;
+using OASystem.Domain.Entities.Groups;
 
 namespace OASystem.API.Controllers
 {
@@ -26,6 +31,7 @@ namespace OASystem.API.Controllers
         private readonly SqlSugarClient _sqlSugar;
         private readonly DelegationInfoRepository _groupRep;
         private readonly SetDataRepository _setDataRep;
+        private readonly TeamRateRepository _teamRateRep;
 
         /// <summary>
         /// Init
@@ -34,12 +40,13 @@ namespace OASystem.API.Controllers
         /// <param name="sqlSugar"></param>
         /// <param name="groupRep"></param>
         /// <param name="setDataRep"></param>
-        public StatisticsController(IMapper mapper, SqlSugarClient sqlSugar, DelegationInfoRepository groupRep, SetDataRepository setDataRep)
+        public StatisticsController(IMapper mapper, SqlSugarClient sqlSugar, DelegationInfoRepository groupRep, SetDataRepository setDataRep, TeamRateRepository teamRate)
         {
             _mapper = mapper;
             _groupRep = groupRep;
             _setDataRep = setDataRep;
             _sqlSugar = sqlSugar;
+            _teamRateRep = teamRate;
         }
 
 
@@ -132,7 +139,7 @@ namespace OASystem.API.Controllers
         {
             #region  参数验证
             if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));
-            if (_dto.PageId < 1) return Ok(JsonView(false, "页面Id为空"));
+            if (_dto.PageId < 1) _dto.PageId = 38; //团组报表页面Id
             if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空"));
 
             PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
@@ -142,14 +149,16 @@ namespace OASystem.API.Controllers
             if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限"));
             #endregion
 
+
             #endregion
             if (_dto.PortType == 1 || _dto.PortType == 2 || _dto.PortType == 3) // web/Android/IOS
             {
                 GroupStatementDetailsView _view = new GroupStatementDetailsView();
 
-                #region 费用类型 币种,转账
+                #region 费用类型 币种,转账,客户信息
 
                 List<Sys_SetData> _setDatas = await _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0).ToListAsync();
+                var _clientDatas = await _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0).ToListAsync();
 
                 #endregion
 
@@ -184,15 +193,68 @@ namespace OASystem.API.Controllers
 										        Where pr.IsDel = 0 and pr.Diid = {0}", _dto.DiId);
                 List<Gsd_ProceedsReceivedView> _prViews = await _sqlSugar.SqlQueryable<Gsd_ProceedsReceivedView>(_prSql).ToListAsync();
                 prTotalAmount = _prViews.Sum(it => it.Price);
-                _giView.ProceedsReceiveds = _prViews;
+                _giView.ProceedsReceivedViews = _prViews;
                 _giView.ProceedsReceivedStr = string.Format(@"已收款合计:{0} CNY(人名币)", prTotalAmount.ConvertToDecimal1().ToString("#0.00"));
 
 
                 /*
                  * 超支费用 
-                 * 未挪表
                  */
+                decimal exTotalAmount = 0.00M;
+                string _ecSql = string.Format(@"Select gec.Id As GECId,gec.DiId As GECDiId,gec.PriceName,ccp.PayMoney,sd1.Name As PaymentCurrency,
+                                                ccp.RMBPrice As CNYPrice,ccp.DayRate,ccp.Payee,ccp.OrbitalPrivateTransfer,sd2.Name As PayWay,
+                                                sd3.Name As CardType,ccp.IsPay,u.CnName As Applicant
+                                                From  Fin_GroupExtraCost gec
+                                                Left Join Grp_CreditCardPayment ccp On ccp.isdel = 0 And ccp.CTable = 81 And gec.Id = ccp.CId
+                                                Left Join Sys_SetData sd1 On ccp.PaymentCurrency = sd1.Id
+                                                Left Join Sys_SetData sd2 On ccp.PayDId = sd2.Id 
+                                                Left Join Sys_SetData sd3 On ccp.CTDId = sd3.Id
+                                                Left Join Sys_Users u On ccp.CreateUserId = u.Id
+                                                Where gec.IsDel = 0 And ccp.IsAuditGM = 1 And ccp.IsPay = 1 And  gec.DiId = {0}",_dto.DiId);
+
+                List<Gsd_ExtraCostsView> _ExtraCostsViews = await _sqlSugar.SqlQueryable<Gsd_ExtraCostsView>(_ecSql).ToListAsync();
+
+                //模拟数据
+                if (_ExtraCostsViews.Count < 1)
+                {
+                    _ExtraCostsViews.Add(new Gsd_ExtraCostsView()
+                    {
+                        GECId = 0,
+                        GECDiId = 2334,
+                        PriceName = "模拟数据-超支费用名称",
+                        PayMoney = 1000.00M,
+                        PaymentCurrency = "CNY",
+                        DayRate = 1.0000M,
+                        CNYPrice = 1000.00M,
+                        Payee = "模拟数据-超支费用收款方",
+                        OrbitalPrivateTransfer = 1,
+                        PayWay = "刷卡",
+                        CardType = "招行卡",
+                        IsPay = 1,
+                        Applicant = "刘华举"
+                    });
+                    _ExtraCostsViews.Add(new Gsd_ExtraCostsView()
+                    {
+                        GECId = 0,
+                        GECDiId = 2334,
+                        PriceName = "模拟数据-超支费用名称",
+                        PayMoney = 1000.00M,
+                        PaymentCurrency = "CNY",
+                        DayRate = 1.0000M,
+                        CNYPrice = 1000.00M,
+                        Payee = "模拟数据-超支费用收款方",
+                        OrbitalPrivateTransfer = 1,
+                        PayWay = "刷卡",
+                        CardType = "招行卡",
+                        IsPay = 1,
+                        Applicant = "刘华举"
+                    });
+                }
 
+                exTotalAmount = _ExtraCostsViews.Sum(it => it.CNYPrice);
+
+                _giView.ExtraCostsViews = _ExtraCostsViews;
+                _giView.ExtraCostsStr = string.Format(@"人名币总费用:{0} CNY", exTotalAmount.ConvertToDecimal1().ToString("#0.00"));
                 /*
                  * 收款退还
                  */
@@ -209,9 +271,7 @@ namespace OASystem.API.Controllers
 										         And ccp.IsAuditGM = 1 And ccp.IsPay = 1
 										         And prom.DiId =   {0}", _dto.DiId);
                 var _promDatas = await _sqlSugar.SqlQueryable<Gsd_PaymentRefundAndOtherMoneyDataSource1View>(_ropSql).ToListAsync();
-
                 
-
                 foreach (var ropItem in _promDatas)
                 {
                     string thisCueencyCode = "Unknown";
@@ -249,9 +309,9 @@ namespace OASystem.API.Controllers
                         ThisRate = ropItem.DayRate,
                         Payee = ropItem.Payee,
                         PayTime = ropItem.AuditGMDate,
-                        FeeType = orbitalPrivateTransferStr,
+                        OrbitalPrivateTransfer = ropItem.OrbitalPrivateTransfer,
                         PayType = payStr,
-                        PayStatus = ropItem.IsPay == 0 ? "未付款" : "已付款",
+                        IsPay = ropItem.IsPay,
                         Applicant = ropItem.Appliction
 
                     };
@@ -259,40 +319,504 @@ namespace OASystem.API.Controllers
                     _promView.Add(gsd_PaymentRefund);
                 }
 
+                //模拟数据
+                if (_promView.Count < 1)
+                {
+                    _promView.Add(new Gsd_PaymentRefundAndOtherMoneyView() {
+                        Id = 0,
+                        DiId = 2334,
+                        PriceName = "模拟数据-费用名称",
+                        PayCurrencyCode ="CNY",
+                        PayCurrencyName = "人名币",
+                        Price = 1000.00M,
+                        CNYPrice = 1000.00M,
+                        ThisRate = 1.00M,
+                        Payee="模拟数据-收款方",
+                        PayTime = "2023-01-01 15:20:01",
+                        OrbitalPrivateTransfer = 1,
+                        PayType = "刷卡",
+                        IsPay = 1,
+                        Applicant = "刘华举"
+                    });
+                    _promView.Add(new Gsd_PaymentRefundAndOtherMoneyView()
+                    {
+                        Id = 0,
+                        DiId = 2334,
+                        PriceName = "模拟数据-费用名称",
+                        PayCurrencyCode = "CNY",
+                        PayCurrencyName = "人名币",
+                        Price = 1000.00M,
+                        CNYPrice = 1000.00M,
+                        ThisRate = 1.00M,
+                        Payee = "模拟数据-收款方",
+                        PayTime = "2023-01-01 15:20:01",
+                        OrbitalPrivateTransfer = 1,
+                        PayType = "刷卡",
+                        IsPay = 1,
+                        Applicant = "刘华举"
+                    });
+                }
+
                 promTotalAmount = _promView.Sum(it => it.CNYPrice);
-                _giView.PaymentRefundAndOtherMoneys = _promView;
+                _giView.PaymentRefundAndOtherMoneyViews = _promView;
                 _giView.PaymentRefundAndOtherMoneyStr = string.Format(@"人名币总费用:{0} CNY", promTotalAmount.ConvertToDecimal1().ToString("#0.00"));
 
                 decimal BalancePayment = frTotalAmount - prTotalAmount + promTotalAmount;
                 _view.GroupIncome = _giView;
-                _view.GroupIncomeStr = string.Format(@"剩余尾款:{0} (包含了收款退还费用数据)", BalancePayment.ConvertToDecimal1().ToString("#0.00"));
+                _view.GroupIncomeStr = string.Format(@"<span style='color:red;'>剩余尾款:{0} CNY(包含了收款退还费用数据)</span>", BalancePayment.ConvertToDecimal1().ToString("#0.00"));
                 #endregion
 
                 #region 团组支出
                 GroupExpenditureView _geView = new GroupExpenditureView();
 
                 #region 酒店预定费用
+                List<GroupHotelFeeView> groupHotelFeeViews = new List<GroupHotelFeeView>();
+
+                string hotelFeeSql = string.Format(@"Select hr.Id As HrId,hr.DiId As HrDiId,hr.City,hr.HotelName,hr.CheckInDate,hr.CheckOutDate,
+                                                     sd1.Name As PaymentCurrency,hr.SingleRoomPrice,hr.SingleRoomCount,hr.DoubleRoomPrice,
+                                                     hr.DoubleRoomCount,hr.SuiteRoomPrice,hr.SuiteRoomCount,hr.OtherRoomPrice,hr.OtherRoomCount,
+                                                     hr.BreakfastPrice,sd4.Name As BreakfastCurrency,hr.Isoppay,hr.GovernmentRent,
+                                                     sd5.Name As GovernmentRentCurrency,hr.CityTax,sd6.Name As CityTaxCurrency,
+                                                     ccp.PayMoney,ccp.RMBPrice As CNYPrice,ccp.DayRate,ccp.Payee,ccp.OrbitalPrivateTransfer,
+                                                     sd2.Name As PayWay,sd3.Name As CardType,ccp.IsPay,u.CnName As Applicant
+                                                     From Grp_HotelReservations  hr
+                                                     Left Join Grp_CreditCardPayment ccp On hr.Id = ccp.CId
+                                                     Left Join Sys_SetData sd1 On ccp.PaymentCurrency = sd1.Id
+                                                     Left Join Sys_SetData sd2 On ccp.PayDId = sd2.Id
+                                                     Left Join Sys_SetData sd3 On ccp.CTDId = sd3.Id
+                                                     Left Join Sys_Users u On ccp.CreateUserId = u.Id
+                                                     Left Join Sys_SetData sd4 On hr.BreakfastCurrency = sd4.Id
+                                                     Left Join Sys_SetData sd5 On hr.GovernmentRentCurrency = sd5.Id
+                                                     Left Join Sys_SetData sd6 On hr.CityTaxCurrency = sd6.Id
+                                                     Where hr.IsDel = 0 And ccp.IsDel = 0 And ccp.CTable = 76 And ccp.IsAuditGM = 1 And ccp.IsPay = 1
+                                                     And hr.DiId = {0}", _dto.DiId);
+
+                groupHotelFeeViews = await _sqlSugar.SqlQueryable<GroupHotelFeeView>(hotelFeeSql).ToListAsync();
+
+                decimal HotelCNYTotalPrice = 0.00M;
+
+                var teamRateData = await _teamRateRep.PostGroupRateInfoByDiId(_dto.DiId);
+                foreach (var item in groupHotelFeeViews)
+                {
+                    HotelCNYTotalPrice += item.CNYPrice;
+
+                    string currencyRateStr = "";
+                    List<string> currencys = new List<string>();
+                    if (!string.IsNullOrEmpty(item.BreakfastCurrency)) currencys.Add(item.BreakfastCurrency);
+                    if (!string.IsNullOrEmpty(item.GovernmentRentCurrency)) currencys.Add(item.GovernmentRentCurrency);
+                    if (!string.IsNullOrEmpty(item.CityTaxCurrency)) currencys.Add(item.CityTaxCurrency);
+                    if (!string.IsNullOrEmpty(item.PaymentCurrency)) currencys.Add(item.PaymentCurrency);
+
+                    currencyRateStr = await GeneralMethod.PostGroupRateByCTableAndCurrency(teamRateData, 76, currencys);
+
+                    item.CurrencyRateStr = currencyRateStr;
+                }
+
+                _geView.GroupHotelFeeViews = groupHotelFeeViews;
+                _geView.GroupHotelFeeStr = string.Format(@"人名币总费用:{0} CNY", HotelCNYTotalPrice);
+
+                #endregion
+
+                #region 地接费用
+
+                List<GroupCTGGRFeeView> groupCTGGRFeeViews = new List<GroupCTGGRFeeView>();
+
+                string CTGGRFeeSql = string.Format(@"Select ctggr.Id As CTGGRId,ctggr.DiId As CTGGRDiId,ctggr.Area,ctggrc.*,ccp.PayMoney,
+                                                     sd2.name As PaymentCurrency,ccp.PayPercentage,(ccp.PayMoney * ccp.PayPercentage / 100) As AmountPaid,
+                                                     (ccp.PayMoney -(ccp.PayMoney * ccp.PayPercentage / 100)) As BalancePayment,ccp.DayRate,
+                                                     ccp.RMBPrice As CNYPrice,ccp.Payee,ccp.AuditGMDate,
+                                                     ccp.OrbitalPrivateTransfer,sd1.Name As PayWay,ccp.IsPay,u.CnName As Applicant
+                                                     From Grp_CarTouristGuideGroundReservations ctggr
+                                                     Left Join ( Select cggrc.CTGGRId,sd1.Name As PriceName,cggrc.Price,sd2.Name As PriceCurrency,
+                                                     				   cggrc.PriceContent
+                                                     			From Grp_CarTouristGuideGroundReservationsContent cggrc
+                                                     			Left Join Sys_SetData sd1 On cggrc.SId = sd1.Id
+                                                     			Left Join Sys_SetData sd2 On cggrc.Currency = sd2.Id
+                                                     			Where cggrc.ISdel = 0 And cggrc.Price != 0.00 
+                                                     			) ctggrc On ctggr.Id = ctggrc.CTGGRId 
+                                                     Left Join Grp_CreditCardPayment ccp On ccp.IsDel = 0  And ccp.CTable = 79 And ctggr.Id = ccp.CId
+                                                     Left Join Sys_SetData sd1 On ccp.PayDId = sd1.Id
+                                                     Left Join Sys_SetData sd2 On ccp.PaymentCurrency = sd2.Id
+                                                     Left Join Sys_Users u On ccp.CreateUserId = u.Id
+                                                     Where ctggr.IsDel = 0 And ccp.IsAuditGM = 1 And ccp.IsPay = 1 And ctggr.DiId = {0} ",_dto.DiId);
+
+                groupCTGGRFeeViews = await _sqlSugar.SqlQueryable<GroupCTGGRFeeView>(CTGGRFeeSql).ToListAsync();
+
+                string CTGGRFeeStr = "";
+                decimal CTGGRCNYTotalPrice = 0.00M;
+                foreach (var item in groupCTGGRFeeViews)
+                {
+                    if (!string.IsNullOrEmpty(item.AuditGMDate))
+                    {
+                        item.AuditGMDate = Convert.ToDateTime(item.AuditGMDate).ToString("yyyy-MM-dd HH:mm:ss");
+                    }
+
+                    CTGGRFeeStr += string.Format(@"{0}总费用:{1} {2}(人名币:{3} CNY 当时支付汇率:{4})\r\n", 
+                        item.Area, item.AmountPaid.ConvertToDecimal1(), item.PaymentCurrency, item.CNYPrice, item.DayRate);
+                    CTGGRCNYTotalPrice += item.CNYPrice;
+                }
+                _geView.GroupCTGGRFeeViews = groupCTGGRFeeViews;
 
+                _geView.GroupCTGGRFeeStr = string.Format(@"{0}人名币总费用:{1} CNY", CTGGRFeeStr,CTGGRCNYTotalPrice);
                 #endregion
-          //      Select hr.Id As HrId,hr.DiId As HrDiId,hr.City,hr.HotelName,hr.CheckInDate,hr.CheckOutDate,
-										//ccp.PaymentCurrency,sd1.Name As PaymentCurrencyName,hr.SingleRoomPrice,hr.SingleRoomCount,
-										//hr.DoubleRoomPrice,hr.DoubleRoomCount,hr.SuiteRoomPrice,hr.SuiteRoomCount,hr.OtherRoomPrice,
-										//hr.OtherRoomCount,hr.GovernmentRent,hr.CityTax,hr.Commission,ccp.PayMoney,ccp.RMBPrice As CNYPrice,
-										//ccp.DayRate,ccp.Payee,
-										//From Grp_HotelReservations  hr
-          //                              Inner Join Grp_CreditCardPayment ccp On hr.Id = ccp.CId
 
-          //                              Left Join Sys_SetData sd1 On ccp.PaymentCurrency = sd1.Id
+                #region 机票预订费用
+
+                List<GroupAirFeeView> groupAirFeeViews = new List<GroupAirFeeView>();
+                string groupAirFeeSql = string.Format(@"Select atr.Id As AirId,atr.DIId As AirDiId,atr.FlightsCode,atr.FlightsCity,sd4.Name As AirTypeName,
+                                                        atr.FlightsDate,atr.FlightsTime,atr.ClientName,atr.ClientNum,ccp.PayMoney,
+                                                        sd1.Name As PayMoneyCurrency,ccp.RMBPrice As CNYPrice,ccp.DayRate,ccp.Payee,ccp.AuditGMDate,
+                                                        ccp.OrbitalPrivateTransfer,sd2.Name As PayWay,sd3.Name As CardType,ccp.IsPay,u.CnName As Applicant
+                                                        From Grp_AirTicketReservations atr
+                                                        Left Join Grp_CreditCardPayment ccp On ccp.isdel = 0 And ccp.CTable = 85 And atr.Id = ccp.CId
+                                                        Left Join Sys_SetData sd1 On ccp.PaymentCurrency = sd1.Id
+                                                        Left Join Sys_SetData sd2 On ccp.PayDId = sd2.Id
+                                                        Left Join Sys_SetData sd3 On ccp.CTDId = sd3.Id
+                                                        Left Join Sys_SetData sd4 On atr.CType = sd4.Id
+                                                        Left Join Sys_Users u On ccp.CreateUserId = u.Id
+                                                        Where atr.IsDel = 0 And ccp.IsAuditGM = 1 And ccp.IsPay = 1 And atr.DiId = {0} ", _dto.DiId);
+                groupAirFeeViews = await _sqlSugar.SqlQueryable<GroupAirFeeView>(groupAirFeeSql).ToListAsync();
+
+                string str = "";
+                decimal AirCNYTotalPrice = 0.00M;
+                decimal JJCCNYTotalPrice = 0.00M, JJCPeopleNum = 0.00M, JJCAveragePrice = 0.00M;
+                decimal GWCCNYTotalPrice = 0.00M, GWCPeopleNum = 0.00M, GWCAveragePrice = 0.00M;
+
+                if (groupAirFeeViews.Count > 0)
+                {
+                    JJCCNYTotalPrice = groupAirFeeViews.Where(it => it.AirTypeName.Equals("经济舱")).Sum(it => it.CNYPrice);
+                    JJCPeopleNum = groupAirFeeViews.Where(it => it.AirTypeName.Equals("经济舱")).Sum(it => it.ClientNum);
+                    JJCAveragePrice = (JJCCNYTotalPrice / JJCPeopleNum).ConvertToDecimal1();
+                    GWCCNYTotalPrice = groupAirFeeViews.Where(it => it.AirTypeName.Equals("公务舱")).Sum(it => it.CNYPrice);
+                    GWCPeopleNum = groupAirFeeViews.Where(it => it.AirTypeName.Equals("公务舱")).Sum(it => it.ClientNum);
+                    GWCAveragePrice = (GWCCNYTotalPrice / GWCPeopleNum).ConvertToDecimal1();
+                }
+               
+                int Index = 0;
+                foreach (var item in groupAirFeeViews)
+                {
 
-          //                              Where hr.IsDel = 0 And ccp.IsDel = 0 And ccp.CTable = 76 And ccp.IsAuditGM = 1 And ccp.IsPay = 1
+                    if (item.AirId > 2924)
+                    {
+                        string itemClientName = "";
+                        if (!string.IsNullOrEmpty(item.ClientName))
+                        {
+                            string[] clientIds = new string[] { };
+                            if (item.ClientName.Contains(','))
+                            {
+                                clientIds = item.ClientName.Split(',');
+                            }
+                            else
+                            {
+                                clientIds = new string[] { item.ClientName };
+                            }
+                            if (clientIds.Length > 0)
+                            {
+                                int[] output = Array.ConvertAll<string, int>(clientIds, delegate (string s) { return int.Parse(s); });
+                                var clients = _clientDatas.Where(it => output.Contains(it.Id)).ToList();
+                                string clientPinYinName = "";
+                                decimal unitCost = 0.00M;
+                                unitCost = (item.PayMoney / item.ClientNum).ConvertToDecimal1();
+                                foreach (var client in clients)
+                                {
+                                    Index += 1;
+                                    int clienIndex = 1;
+                                    itemClientName += string.Format(@"{0}.{1} ;", clienIndex, client);
+                                    clientPinYinName += string.Format(@"{0}.{1}出票价为:{2} CNY;", Index, client.Pinyin, unitCost);
+                                    clienIndex++;
+                                }
+                            }
+                        }
+                        item.ClientName = itemClientName;
+                    }
+                    else
+                    {
+                        string clientPinYinName = "";
+                        decimal unitCost = 0.00M;
+                        unitCost = (item.PayMoney / item.ClientNum).ConvertToDecimal1();
+
+                        string[] clientNames = item.ClientName.Split('.');
+                        for (int i = 0; i < item.ClientNum; i++)
+                        {
+                            string name = "";
+                            if (clientNames.Length > 0)
+                            {
+                                int index = i + 1;
+                                if (index < clientNames.Length)
+                                {
+                                    name = clientNames[index].Replace("MR","").Replace("MS","");
+                                }
+                            }
+                            
+                            clientPinYinName += string.Format(@"{0}.{1}出票价为:{2} CNY;", Index, name, unitCost);
+                        }
+                        
+                    }
 
-          //                              And hr.DiId = 2337
 
+                    
 
-                _view.GroupExpenditure = _geView;
+                    if (!string.IsNullOrEmpty(item.AuditGMDate))
+                    {
+                        item.AuditGMDate = Convert.ToDateTime(item.AuditGMDate).ToString("yyyy-MM-dd HH:mm:ss");
+                    }
+                }
+
+                _geView.GroupAirFeeViews = groupAirFeeViews;
+                if (!string.IsNullOrEmpty(str))
+                {
+                    str = string.Format(@"其中:{0}", str);
+                }
+
+                _geView.GroupAirFeeStr = string.Format(@"人名币总费用:{0} CNY\r\n{1}\r\n经济舱均价为:{2}CNY/人;公务舱均价为:{3}CNY/人;", AirCNYTotalPrice, str, JJCAveragePrice, GWCAveragePrice);
+                #endregion
+
+                #region 签证费用
+
+                List<GroupVisaFeeView> groupVisaFeeViews = new List<GroupVisaFeeView>();
+                string groupVisaFeeSql = string.Format(@"Select vi.Id As VisaId,vi.DIId As VisaDiId,vi.VisaClient,ccp.PayMoney,sd1.Name As PayMoneyCurrency,
+                                                         ccp.DayRate,ccp.Payee,ccp.AuditGMDate,ccp.OrbitalPrivateTransfer,sd2.Name As PayWay,
+                                                         sd3.Name As CardTypeName,ccp.IsPay,u.CnName As Applicant
+                                                         From Grp_VisaInfo vi
+                                                         Left Join Grp_CreditCardPayment ccp On ccp.isdel = 0 And ccp.CTable = 80 And vi.Id = ccp.CId
+                                                         Left Join Sys_SetData sd1 On ccp.PaymentCurrency = sd1.Id
+                                                         Left Join Sys_SetData sd2 On ccp.PayDId = sd2.Id
+                                                         Left Join Sys_SetData sd3 On ccp.CTDId = sd3.Id
+                                                         Left Join Sys_Users u On ccp.CreateUserId = u.Id
+                                                         Where vi.IsDel = 0 And ccp.IsAuditGM = 1 And ccp.IsPay = 1 And vi.DIId = {0}",_dto.DiId);
+
+                groupVisaFeeViews = await _sqlSugar.SqlQueryable<GroupVisaFeeView>(groupVisaFeeSql).ToListAsync();
+
+                decimal VisaCNYTotalPirce = 0.00M;
+
+                foreach (var item in groupVisaFeeViews)
+                {
+                    VisaCNYTotalPirce += item.PayMoney;
+                    if (!string.IsNullOrEmpty(item.AuditGMDate))
+                    {
+                        item.AuditGMDate = Convert.ToDateTime(item.AuditGMDate).ToString("yyyy-MM-dd HH:mm:ss");
+                    }
+                }
+
+                _geView.GroupVisaFeeViews = groupVisaFeeViews;
+                _geView.GroupVisaFeeStr = string.Format(@"人名币总费用:{0} CNY", VisaCNYTotalPirce.ConvertToDecimal1());
+                #endregion
+
+                #region 邀请/公务活动费用  CTable = 81
+
+                List<GroupInvitationalFeeView> groupInvitationalFeeViews = new List<GroupInvitationalFeeView>();
+                string groupInvitationalFeeSql = string.Format(@"Select ioa.Id As IOAId,ioa.DiId As IOADiId,ioa.InviterArea,ioa.Inviter,ioa.InviteTime,
+                                                                 ioa.InviteCost,sd3.Name As InviteCurrency,ioa.SendCost,sd4.Name As SendCurrency,ioa.EventsCost,
+                                                                 sd5.Name As EventsCurrency,ioa.TranslateCost,sd6.Name As TranslateCurrency,ccp.PayMoney,
+                                                                 sd7.Name As PaymentCurrency,ccp.RMBPrice As CNYPrice,ccp.Payee,ccp.AuditGMDate,
+                                                                 ccp.OrbitalPrivateTransfer,sd2.Name As PayWay,ccp.IsPay,u.CnName As Applicant
+                                                                 From  Grp_InvitationOfficialActivities ioa
+                                                                 Left Join Grp_CreditCardPayment ccp On ccp.isdel = 0 And ccp.CTable = 81 And ioa.Id = ccp.CId
+                                                                 Left Join Sys_SetData sd1 On ccp.PaymentCurrency = sd1.Id
+                                                                 Left Join Sys_SetData sd2 On ccp.PayDId = sd2.Id
+                                                                 Left Join Sys_SetData sd3 On ioa.InviteCurrency = sd3.Id
+                                                                 Left Join Sys_SetData sd4 On ioa.SendCurrency = sd4.Id
+                                                                 Left Join Sys_SetData sd5 On ioa.EventsCurrency = sd5.Id
+                                                                 Left Join Sys_SetData sd6 On ioa.TranslateCurrency = sd6.Id
+                                                                 Left Join Sys_SetData sd7 On ccp.PaymentCurrency = sd7.Id
+                                                                 Left Join Sys_Users u On ccp.CreateUserId = u.Id
+                                                                 Where ioa.IsDel = 0 And ccp.IsAuditGM = 1 And ccp.IsPay = 1 And  ioa.Diid = {0}",_dto.DiId);
+
+                groupInvitationalFeeViews = await _sqlSugar.SqlQueryable<GroupInvitationalFeeView>(groupInvitationalFeeSql).ToListAsync();
+
+                //模拟数据
+                if (groupInvitationalFeeViews.Count < 1)
+                {
+                    groupInvitationalFeeViews.Add(new GroupInvitationalFeeView()
+                    {
+                        IOAId = 0,
+                        IOADiId = 2334,
+                        InviterArea = "模拟数据-邀请方地区",
+                        Inviter = "模拟数据-邀请方",
+                        InviteTime = "2023-10-10",
+                        InviteCost = 100.00M,
+                        InviteCurrency = "EUR",
+                        SendCost = 100.00M,
+                        SendCurrency = "EUR",
+                        EventsCost = 10000.00M,
+                        EventsCurrency = "EUR",
+                        TranslateCost = 300.00M,
+                        TranslateCurrency = "EUR",
+                        PayMoney = 10500.00M,
+                        PaymentCurrency = "EUR",
+                        CNYPrice = 76765.50M,
+                        Payee = "模拟数据-收款方",
+                        AuditGMDate = "2023-12-05",
+                        OrbitalPrivateTransfer = 1,
+                        PayWay = "刷卡",
+                        IsPay = 1,
+                        Applicant = "刘华举"
+                    });
+                    groupInvitationalFeeViews.Add(new GroupInvitationalFeeView()
+                    {
+                        IOAId = 0,
+                        IOADiId = 2334,
+                        InviterArea = "模拟数据-邀请方地区",
+                        Inviter = "模拟数据-邀请方",
+                        InviteTime = "2023-10-10",
+                        InviteCost = 100.00M,
+                        InviteCurrency = "EUR",
+                        SendCost = 100.00M,
+                        SendCurrency = "EUR",
+                        EventsCost = 10000.00M,
+                        EventsCurrency = "EUR",
+                        TranslateCost = 300.00M,
+                        TranslateCurrency = "EUR",
+                        PayMoney = 10500.00M,
+                        PaymentCurrency = "EUR",
+                        CNYPrice = 76765.50M,
+                        Payee = "模拟数据-收款方",
+                        AuditGMDate = "2023-12-05",
+                        OrbitalPrivateTransfer = 1,
+                        PayWay = "刷卡",
+                        IsPay = 1,
+                        Applicant = "刘华举"
+                    });
+                }
+
+                decimal InvitationalCNYTotalPrice = 0.00M;
+
+                foreach (var item in groupInvitationalFeeViews)
+                {
+                    InvitationalCNYTotalPrice += item.CNYPrice;
+
+                    if (!string.IsNullOrEmpty(item.AuditGMDate))
+                    {
+                        item.AuditGMDate = Convert.ToDateTime(item.AuditGMDate).ToString("yyyy-MM-dd HH:mm:ss");
+                    }
+
+                    string currencyRateStr = "";
+                    List<string> currencys = new List<string>();
+                    if (!string.IsNullOrEmpty(item.InviteCurrency)) currencys.Add(item.InviteCurrency);
+                    if (!string.IsNullOrEmpty(item.SendCurrency)) currencys.Add(item.SendCurrency);
+                    if (!string.IsNullOrEmpty(item.EventsCurrency)) currencys.Add(item.EventsCurrency);
+                    if (!string.IsNullOrEmpty(item.TranslateCurrency)) currencys.Add(item.TranslateCurrency);
+                    if (!string.IsNullOrEmpty(item.PaymentCurrency)) currencys.Add(item.PaymentCurrency);
+
+                    currencyRateStr = await GeneralMethod.PostGroupRateByCTableAndCurrency(teamRateData, 81, currencys);
+
+                    item.CurrencyRateStr = currencyRateStr;
+                }
+
+                _geView.GroupInvitationalFeeViews = groupInvitationalFeeViews;
+                _geView.GroupInvitationalFeeStr = string.Format(@"人民币总费用:{0} CNY", InvitationalCNYTotalPrice);
+                #endregion
+
+                #region 保险费用
+                List<GroupInsuranceFeeView> groupInsuranceFeeViews = new List<GroupInsuranceFeeView>();
+                string groupInsuranceFeeSql = string.Format(@"Select ic.Id As InsuranceId,ic.Diid As InsuranceDiId,ClientName,ccp.PayMoney,ccp.RMBPrice As CNYPrice,
+                                                              sd1.Name As PayMoneyCurrency,ccp.Payee,ccp.AuditGMDate,ccp.OrbitalPrivateTransfer,
+                                                              sd2.Name As PayWay,ccp.IsPay,u.CnName As Applicant
+                                                              From Grp_Customers ic
+                                                              Left Join Grp_CreditCardPayment ccp On ccp.isdel = 0 And ccp.CTable = 82 And ic.Id = ccp.CId
+                                                              Left Join Sys_SetData sd1 On ccp.PaymentCurrency = sd1.Id
+                                                              Left Join Sys_SetData sd2 On ccp.PayDId = sd2.Id
+                                                              Left Join Sys_Users u On ccp.CreateUserId = u.Id
+                                                              Where ic.IsDel = 0 And ccp.IsAuditGM = 1 And ccp.IsPay = 1 And ic.DiId = {0}", _dto.DiId);
+                groupInsuranceFeeViews = await _sqlSugar.SqlQueryable<GroupInsuranceFeeView>(groupInsuranceFeeSql).ToListAsync();
+
+                decimal InsuranceCNYTotalPrice = 0.00M;
+                foreach (var item in groupInsuranceFeeViews)
+                {
+                    InsuranceCNYTotalPrice += item.CNYPrice;
+
+                    if (!string.IsNullOrEmpty(item.AuditGMDate))
+                    {
+                        item.AuditGMDate = Convert.ToDateTime(item.AuditGMDate).ToString("yyyy-MM-dd HH:mm:ss");
+                    }
+                }
+                _geView.GroupInsuranceFeeViews = groupInsuranceFeeViews;
+                _geView.GroupInsuranceFeeStr = string.Format(@"人名币总费用:{0} CNY", InsuranceCNYTotalPrice);
                 #endregion
 
+                #region 其他款项费用 
+                List<GroupDecreaseFeeView> groupDecreaseFeeViews = new List<GroupDecreaseFeeView>();
+                string groupDecreaseFeeSql = string.Format(@"Select dp.Id As DPId,dp.DiId As DPDiId,dp.PriceName,ccp.PayMoney,sd1.Name As PayMoneyCurrency,
+                                                             ccp.RMBPrice As CNYPrice,ccp.DayRate,ccp.Payee,ccp.AuditGMDate,ccp.OrbitalPrivateTransfer,
+                                                             sd2.Name As PayWay,ccp.IsPay,u.CnName As Applicant
+                                                             From Grp_DecreasePayments dp
+                                                             Left Join Grp_CreditCardPayment ccp On ccp.isdel = 0 And ccp.CTable = 98 And dp.Id = ccp.CId
+                                                             Left Join Sys_SetData sd1 On ccp.PaymentCurrency = sd1.Id
+                                                             Left Join Sys_SetData sd2 On ccp.PayDId = sd2.Id
+                                                             Left Join Sys_Users u On ccp.CreateUserId = u.Id
+                                                             Where dp.IsDel = 0 And ccp.IsAuditGM = 1 And ccp.IsPay = 1 And dp.Diid = {0}",_dto.DiId);
+                groupDecreaseFeeViews = await _sqlSugar.SqlQueryable<GroupDecreaseFeeView>(groupDecreaseFeeSql).ToListAsync();
+
+                //模拟数据
+                if (groupDecreaseFeeViews.Count < 1)
+                {
+                    groupDecreaseFeeViews.Add(new GroupDecreaseFeeView()
+                    {
+                        DPId = 0,
+                        DPDiId = 2334,
+                        PriceName = "模拟数据-费用名称",
+                        PayMoney = 1000.00M,
+                        PayMoneyCurrency = "CNY",
+                        DayRate = 1.0000M,
+                        CNYPrice = 1.0000M,
+                        AuditGMDate = "2023-12-10 12:13:00",
+                        Payee = "模拟数据-付款方",
+                        OrbitalPrivateTransfer = 1,
+                        PayWay = "现金",
+                        IsPay = 1,
+                        Applicant = "刘华举"
+                    });
+                    groupDecreaseFeeViews.Add(new GroupDecreaseFeeView()
+                    {
+                        DPId = 0,
+                        DPDiId = 2334,
+                        PriceName = "模拟数据-费用名称",
+                        PayMoney = 1000.00M,
+                        PayMoneyCurrency = "CNY",
+                        DayRate = 1.0000M,
+                        CNYPrice = 1.0000M,
+                        AuditGMDate = "2023-12-10 12:13:00",
+                        Payee = "模拟数据-付款方",
+                        OrbitalPrivateTransfer = 1,
+                        PayWay = "现金",
+                        IsPay = 1,
+                        Applicant = "刘华举"
+                    });
+                }
+
+                decimal DecreaseCNYTotalPrice = 0.00M;
+                foreach (var item in groupDecreaseFeeViews)
+                {
+                    DecreaseCNYTotalPrice += item.CNYPrice;
+
+                    if (!string.IsNullOrEmpty(item.AuditGMDate))
+                    {
+                        item.AuditGMDate = Convert.ToDateTime(item.AuditGMDate).ToString("yyyy-MM-dd HH:mm:ss");
+                    }
+                }
+
+                _geView.GroupDecreaseFeeViews = groupDecreaseFeeViews;
+                _geView.GroupDecreaseFeeStr = string.Format(@"人名币总费用:{0} CNY", DecreaseCNYTotalPrice);
+                #endregion
+
+                _view.GroupExpenditure = _geView;
+                #endregion
 
+                decimal _totalExpenditure = 0.00M; //总支出
+                decimal _amountReceivable = 0.00M; //应收金额
+                decimal _amountReceived = 0.00M;   //已收金额
+                decimal _profit = 0.00M;           //利润
+                _totalExpenditure = HotelCNYTotalPrice + CTGGRCNYTotalPrice + AirCNYTotalPrice + VisaCNYTotalPirce + InvitationalCNYTotalPrice + 
+                                    InsuranceCNYTotalPrice + DecreaseCNYTotalPrice + exTotalAmount;
+                _amountReceivable = frTotalAmount;
+                _amountReceived = prTotalAmount;
+                _profit = _amountReceived - _totalExpenditure;
+                _view.FeeTotalStr = string.Format(@"<span>
+                                                    <span>当前总支出:{0} CNY</span> 
+                                                    <span style='padding-left:10px;color: Green;'>应收金额:{1} CNY</span> 
+                                                    <span style='padding-left:10px;color: Green;'>已收金额:{2} CNY</span>
+                                                    <span style='padding-left:10px;color: Green;'>利润(收入-支出):{3} CNY</span>
+                                                    </span>", _totalExpenditure, _amountReceivable, _amountReceived, _profit);
                 return Ok(JsonView(true, "查询成功!", _view));
             }
             else

+ 58 - 0
OASystem/OASystem.Api/OAMethodLib/GeneralMethod.cs

@@ -1,11 +1,13 @@
 using Microsoft.AspNetCore.Mvc.TagHelpers;
 using OASystem.API.OAMethodLib.JuHeAPI;
 using OASystem.Domain;
+using OASystem.Domain.Dtos.Financial;
 using OASystem.Domain.Entities.District;
 using OASystem.Domain.Entities.Financial;
 using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.Entities.PersonnelModule;
 using OASystem.Domain.Entities.System;
+using OASystem.Domain.ViewModels.Financial;
 using OASystem.Domain.ViewModels.JuHeExchangeRate;
 using OASystem.Domain.ViewModels.PersonnelModule;
 using OASystem.Infrastructure.Repositories.Groups;
@@ -409,5 +411,61 @@ namespace OASystem.API.OAMethodLib
 
         #endregion
         #endregion
+
+        #region 团组汇率
+
+        /// <summary>
+        /// 团组汇率 
+        /// 获取板块 币种 及 汇率
+        /// 76	酒店预订  77	行程          79	车/导游地接
+        /// 80	签证      82	团组客户保险  85	机票预订
+        /// 98	其他款项  285	收款退还
+        /// </summary>
+        /// <param name="teamRateModels"></param>
+        /// <param name="cTable"></param>
+        /// <param name="currencyCode"></param>
+        /// <returns>
+        /// string 
+        /// eg: CNY 1.0000 
+        /// </returns>
+        public static async Task<string> PostGroupRateByCTableAndCurrency(List<TeamRateModelView> teamRateModels,int cTable,List<string> currencyCodes)
+        {
+            string str = "";
+
+
+
+            List<string> currencyRates = new List<string>();
+            TeamRateModelView hotelRateData = teamRateModels.Where(it => it.CTableId == cTable).FirstOrDefault();
+            if (hotelRateData != null)
+            {
+                var hotelRates = hotelRateData.TeamRates;
+
+                foreach (var item in currencyCodes)
+                {
+                    if (!string.IsNullOrEmpty(item))
+                    {
+                        var hotelRateInfo = hotelRates.Where(it => it.CurrencyCode.Equals(item)).FirstOrDefault();
+                        if (hotelRateInfo != null)
+                        {
+                            string str1 = string.Format("{0} {1}\r\n", hotelRateInfo.CurrencyCode, hotelRateInfo.Rate);
+                            currencyRates.Add(str1);
+                        }
+                    }
+                }
+
+                if (currencyRates != null || currencyRates.Count > 0)
+                {
+                    currencyRates = currencyRates.Distinct().ToList();
+                    foreach (var item in currencyRates)
+                    {
+                        str += item;
+                    }
+
+                }
+            }
+            return str;
+        }
+
+        #endregion
     }
 }

+ 29 - 0
OASystem/OASystem.Domain/Dtos/CRM/NewClientDataQueryDto.cs

@@ -17,10 +17,12 @@ namespace OASystem.Domain.Dtos.CRM
         /// 联系人
         /// </summary>
         public string Contact { get; set; }
+
         /// <summary>
         /// 地区
         /// </summary>
         public string Location { get; set; }
+
         /// <summary>
         /// 单位
         /// </summary>
@@ -30,6 +32,8 @@ namespace OASystem.Domain.Dtos.CRM
         /// 负责人
         /// </summary>
         public string Userid { get; set; }
+
+
         /// <summary>
         /// 客户级别(地市州)
         /// </summary>
@@ -186,4 +190,29 @@ namespace OASystem.Domain.Dtos.CRM
         public List<int> AscribedDepartment { get; set; }
 
     }
+
+    /// <summary>
+    /// 详情 Dto
+    /// </summary>
+    public class NewClientDataDetailsDto:PortDtoBase
+    {
+        public int Id { get; set; }
+    }
+    /// <summary>
+    /// 批量指派
+    /// </summary>
+    public class BatchAssignmentDto
+    {
+        public int UserId { get; set; }
+
+        /// <summary>
+        /// 客户资料表Id集合
+        /// </summary>
+        public List<int>? ClientDataIdItem { get; set; }
+
+        /// <summary>
+        /// 用户Id集合
+        /// </summary>
+        public List<int>? UserIdItem { get; set; }
+    }
 }

+ 2 - 0
OASystem/OASystem.Domain/Dtos/DtoBase.cs

@@ -89,4 +89,6 @@ namespace OASystem.Domain.Dtos
         /// </summary>
         public int PageId { get; set; }
     }
+
+   
 }

+ 26 - 0
OASystem/OASystem.Domain/Dtos/FileDto/FileDto.cs

@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.FileDto
+{
+    /// <summary>
+    /// 文件 Dto
+    /// </summary>
+    public class FileDto
+    {
+    }
+
+    /// <summary>
+    /// 文件删除 Dto
+    /// </summary>
+    public class FileDelDto
+    {
+        /// <summary>
+        /// 文件路径(含文件名称)
+        /// </summary>
+        public string? PathUrl { get; set; }
+    }
+}

+ 87 - 26
OASystem/OASystem.Domain/Dtos/Groups/TourClientListDto.cs

@@ -100,68 +100,129 @@ namespace OASystem.Domain.Dtos.Groups
         public string? IDCardNo { get; set; }
 
         /// <summary>
-        /// 手机号
+        /// 生日
         /// </summary>
-        public string? Tel { get; set; }
+        public string? BirthDay { get; set; }
 
         /// <summary>
-        /// 生日
+        /// 舱位类型(数据类型表Id)
         /// </summary>
-        public string? BirthDay { get; set; }
+        public int ShippingSpaceTypeId { get; set; }
 
         /// <summary>
-        /// 护照类型Id(数据类型表Id)
+        /// 舱位特殊需求
         /// </summary>
-        public int PassportType { get; set; }
+        public string? ShippingSpaceSpecialNeeds { get; set; }
 
         /// <summary>
-        /// 护照No
+        /// 酒店特殊需求
         /// </summary>
-        public string? PassportNo { get; set; }
+        public string? HotelSpecialNeeds { get; set; }
 
         /// <summary>
-        /// 签发国
+        /// 餐食特殊需求
         /// </summary>
-        public string? Country { get; set; }
+        public string? MealSpecialNeeds { get; set; }
 
         /// <summary>
-        /// 签发地区
+        /// 备注
         /// </summary>
-        public string? Area { get; set; }
+        public string? Remark { get; set; }
+    }
 
+    /// <summary>
+    /// 接团客户名单
+    /// AddMultiple
+    /// </summary>
+    public class TourClientListAddMultipleDto : UserPageFuncDtoBase
+    {
         /// <summary>
-        /// 签发时间
+        /// 团组Id
         /// </summary>
-        public string? IssueDt { get; set; }
+        public int DiId { get; set; }
 
         /// <summary>
-        /// 有效期限
+        /// 接团客户名单
+        /// AddMultiple Infos
         /// </summary>
-        public string? ExpiryDt { get; set; }
+        public List<TourClientListInfo>? TourClientListInfos { get; set; }
 
+    }
+
+    /// <summary>
+    /// 接团客户名单
+    /// AddMultiple Info
+    /// </summary>
+    public class TourClientListInfo
+    {
         /// <summary>
-        /// 舱位类型(数据类型表Id)
+        /// 
         /// </summary>
-        public int ShippingSpaceTypeId { get; set; }
+        public string? LastName { get; set; }
 
         /// <summary>
-        /// 舱位特殊需求
+        /// 
         /// </summary>
-        public string? ShippingSpaceSpecialNeeds { get; set; }
+        public string? FirstName { get; set; }
 
         /// <summary>
-        /// 酒店特殊需求
+        /// 性别
+        /// 0 男1 女 其他值 未设置
         /// </summary>
-        public string? HotelSpecialNeeds { get; set; }
+        public int Sex { get; set; }
 
         /// <summary>
-        /// 餐食特殊需求
+        /// 公司名全称
         /// </summary>
-        public string? MealSpecialNeeds { get; set; }
+        public string? CompanyFullName { get; set; }
 
         /// <summary>
-        /// 备注
+        /// 职位
         /// </summary>
-        public string? Remark { get; set; }
+        public string? Job { get; set; }
+
+        /// <summary>
+        /// 身份证No
+        /// </summary>
+        public string? IDCardNo { get; set; }
+
+        /// <summary>
+        /// 手机号
+        /// </summary>
+        public string? Phone { get; set; }
+
+        /// <summary>
+        /// 生日
+        /// </summary>
+        public string? BirthDay { get; set; }
+
+        /// <summary>
+        /// 舱位类型(数据类型表Id)
+        /// </summary>
+        public int ShippingSpaceTypeId { get; set; }
+
+    }
+
+    /// <summary>
+    /// 接团客户名单
+    /// Del
+    /// </summary>
+    public class TourClientListDelDto : UserPageFuncDtoBase
+    {
+        /// <summary>
+        /// 数据Id
+        /// Id>=0 Del 
+        /// Id<0 无效
+        /// </summary>
+        public int Id { get; set; }
+    }
+
+    /// <summary>
+    /// 接团客户名单
+    /// 客户名单下载
+    /// </summary>
+    public class PostTourClientListDownloadFile: UserPageFuncDtoBase
+    {
+        public int DiId { get; set; }
     }
 }

+ 3 - 3
OASystem/OASystem.Domain/Entities/Customer/Crm_CustomerCert.cs

@@ -29,7 +29,7 @@ namespace OASystem.Domain.Entities.Customer
         /// SdId == 74 该字段有值
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int PassportType { get; set; }
+        public int PassportType { get; set; } = 0;
 
         /// <summary>
         /// 证件号
@@ -58,12 +58,12 @@ namespace OASystem.Domain.Entities.Customer
         /// 有效期起始时间
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "DateTime")]
-        public DateTime IssueDt { get; set; }
+        public DateTime? IssueDt { get; set; } = null;
         /// <summary>
         /// 有效期截止时间
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "DateTime")]
-        public DateTime ExpiryDt { get; set; }
+        public DateTime? ExpiryDt { get; set; } = null;
 
         /// <summary>
         /// 身份证户籍地址

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

@@ -39,6 +39,6 @@ namespace OASystem.Domain.Entities.Customer
         /// 最后操作时间
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "DateTime")]
-        public DateTime LastedOpDt { get; set; }
+        public DateTime LastedOpDt { get; set; } = DateTime.Now;
     }
 }

+ 31 - 30
OASystem/OASystem.Domain/Entities/Customer/Crm_DeleClient.cs

@@ -11,12 +11,12 @@ namespace OASystem.Domain.Entities.Customer
     /// 客户信息表
     /// </summary>
     [SugarTable("Crm_DeleClient")]
-    public class Crm_DeleClient:EntityBase
+    public class Crm_DeleClient : EntityBase
     {
         /// <summary>
         /// 团组Id
         /// </summary>
-        [SugarColumn(IsNullable =true,ColumnDataType ="int")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int DiId { get; set; }
         /// <summary>
         /// 中文姓
@@ -39,15 +39,16 @@ namespace OASystem.Domain.Entities.Customer
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
         public string Pinyin { get; set; }
         /// <summary>
-        /// 性别 0男1女
+        /// 性别 
+        /// 0男1女 -1未选择
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int Sex { get; set; }
+        public int Sex { get; set; } = -1;
         /// <summary>
         /// 婚姻状况 0、1、2、3、4 (未设置、未婚、已婚、离异、丧偶)
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int Marriage { get; set; }
+        public int Marriage { get; set; } = 0;
         /// <summary>
         /// 客户手机号
         /// </summary>
@@ -72,12 +73,12 @@ namespace OASystem.Domain.Entities.Customer
         /// <summary>
         /// 机票喜好舱位
         /// </summary>
-        [SugarColumn(IsNullable =true,ColumnDataType = "varchar(300)")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(300)")]
         public string AirType { get; set; }
         /// <summary>
         /// 是否靠窗
         /// </summary>
-        [SugarColumn(IsNullable =true,ColumnDataType ="int")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int SeatPref { get; set; }
         /// <summary>
         /// 机票备注
@@ -94,7 +95,7 @@ namespace OASystem.Domain.Entities.Customer
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(300)")]
         public string RoomPref { get; set; }
-       
+
         /// <summary>
         /// 家庭联系方式
         /// </summary>
@@ -177,7 +178,7 @@ namespace OASystem.Domain.Entities.Customer
         /// 0否1是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int IsGetSchengen { get; set; }
+        public int IsGetSchengen { get; set; } = 0;
         /// <summary>
         /// 申根有效期
         /// </summary>
@@ -192,19 +193,19 @@ namespace OASystem.Domain.Entities.Customer
         /// 申根是否在使馆有指纹记录 
         /// 0否1是
         /// </summary>
-        [SugarColumn(IsNullable =true,ColumnDataType ="int")]
-        public int IsFinger { get; set; }
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsFinger { get; set; } = 0;
         /// <summary>
         /// 申根指纹录入时间
         /// </summary>
-        [SugarColumn(IsNullable =true,ColumnDataType ="DateTime")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "DateTime")]
         public DateTime FingerDate { get; set; }
         /// <summary>
         /// 是否因公去过美国/加拿大
         /// 0否1是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int IsVisitUC { get; set; }
+        public int IsVisitUC { get; set; } = 0;
         /// <summary>
         /// 美国抵达日期
         /// </summary>
@@ -214,7 +215,7 @@ namespace OASystem.Domain.Entities.Customer
         /// 美国停留天数
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int USADays { get; set; }
+        public int USADays { get; set; } = 0;
         /// <summary>
         /// 加拿大抵达日期
         /// </summary>
@@ -224,7 +225,7 @@ namespace OASystem.Domain.Entities.Customer
         /// 加拿大停留天数
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int CanDays { get; set; }
+        public int CanDays { get; set; } = 0;
         /// <summary>
         /// 是否曾获得过因公美国签证 0否1是
         /// </summary>
@@ -234,12 +235,12 @@ namespace OASystem.Domain.Entities.Customer
         /// 因公美国签证最近获得时间
         /// 0否1是
         /// </summary>
-        [SugarColumn(IsNullable =true,ColumnDataType ="DateTime")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "DateTime")]
         public DateTime GetUSAVisaDate { get; set; }
         /// <summary>
         /// 因公美国签证地点
         /// </summary>
-        [SugarColumn(IsNullable =true,ColumnDataType = "varchar(50)")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
         public string GetUPPlace { get; set; }
         /// <summary>
         /// 因公美国签证种类
@@ -254,13 +255,13 @@ namespace OASystem.Domain.Entities.Customer
         /// <summary>
         /// 是否在使馆留过十指的指纹 0否1是
         /// </summary>
-        [SugarColumn(IsNullable =true,ColumnDataType ="int")]
-        public int USAFinger { get; set; }
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int USAFinger { get; set; } = 0;
         /// <summary>
         /// 是否曾经被拒签 0否1是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int IsRejected { get; set; }
+        public int IsRejected { get; set; } = 0;
         /// <summary>
         /// 被拒时间
         /// </summary>
@@ -280,12 +281,12 @@ namespace OASystem.Domain.Entities.Customer
         /// 美国签证是否被吊销过 0否1是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int IsRevoke { get; set; }
+        public int IsRevoke { get; set; } = 0;
         /// <summary>
         /// 护照是否曾经丢失 0否1是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int IsLose { get; set; }
+        public int IsLose { get; set; } = 0;
         /// <summary>
         /// 丢失护照时间
         /// </summary>
@@ -300,13 +301,13 @@ namespace OASystem.Domain.Entities.Customer
         /// 丢失的护照是否有美国签证 0否1是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int IsUSAVisa { get; set; }
+        public int IsUSAVisa { get; set; } = 0;
         /// <summary>
         /// 夫/妻是否已在美国 
         /// 0否1是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int MateUSA { get; set; }
+        public int MateUSA { get; set; } = 0;
         /// <summary>
         /// 夫/妻身份
         /// </summary>
@@ -316,18 +317,18 @@ namespace OASystem.Domain.Entities.Customer
         /// 未婚夫/妻是否已在美国 0否1是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int WHUSA { get; set; }
+        public int WHUSA { get; set; } = 0;
         /// <summary>
         /// 未婚夫/妻身份
         /// </summary>
-        [SugarColumn(IsNullable =true,ColumnDataType ="varchar(50)")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
         public string WHIden { get; set; }
         /// <summary>
         /// 父/母是否已在美国
         /// 0否1是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int ParentUSA { get; set; }
+        public int ParentUSA { get; set; } = 0;
         /// <summary>
         /// 父/母身份
         /// </summary>
@@ -337,7 +338,7 @@ namespace OASystem.Domain.Entities.Customer
         /// 子/女是否已在美国 0否1是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int ChildUSA { get; set; }
+        public int ChildUSA { get; set; } = 0;
         /// <summary>
         /// 子/女身份
         /// </summary>
@@ -347,7 +348,7 @@ namespace OASystem.Domain.Entities.Customer
         /// 兄弟/姐妹是否已在美国 0否1是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int BroUSA { get; set; }
+        public int BroUSA { get; set; } = 0;
         /// <summary>
         /// 兄弟/姐妹身份
         /// </summary>
@@ -363,7 +364,7 @@ namespace OASystem.Domain.Entities.Customer
         /// 0否1是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int IsArmy { get; set; }
+        public int IsArmy { get; set; } = 0;
         /// <summary>
         /// 参军详情
         /// </summary>

+ 65 - 0
OASystem/OASystem.Domain/Entities/Financial/Fin_GroupExtraCost.cs

@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Financial
+{
+    /// <summary>
+    /// 雷怡 2024-01-17 17:56
+    /// 财务 - 团组 超支费用
+    /// </summary>
+    /// </summary>
+    [SugarTable("Fin_GroupExtraCost")]
+    public class Fin_GroupExtraCost : EntityBase
+    {
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int DiId { get; set; }
+
+        /// <summary>
+        /// 费用名称
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string? PriceName { get; set; }
+
+        /// <summary>
+        /// 费用金额
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(10,2)")]
+        public decimal Price { get; set; }
+
+        /// <summary>
+        /// 团组Id(币种ID)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int PriceCurrency { get; set; }
+
+        /// <summary>
+        /// 费用类型(类型ID)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int PriceType { get; set; }
+
+        /// <summary>
+        /// 系数
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(10,2)")]
+        public decimal Coefficient { get; set; }
+
+        /// <summary>
+        /// 费用详细类型(类型ID)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int PriceDetailType{ get; set; }
+
+        /// <summary>
+        /// 附件地址
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string? FilePath { get; set; }
+    }
+}

+ 15 - 2
OASystem/OASystem.Domain/Entities/Groups/Grp_AirTicketReservations.cs

@@ -42,27 +42,32 @@ namespace OASystem.Domain.Entities.Groups
         public string ArrivedTime { get; set; }
         /// <summary>
         /// 是否值机
+        /// 0 否 1 是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int IsCheckIn { get; set; }
         /// <summary>
         /// 是否选座
+        /// 0 否 1 是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int IsSetSeat { get; set; }
 
         /// <summary>
         /// 是否购买行李服务
+        /// 0 否 1 是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int IsPackage { get; set; }
         /// <summary>
         /// 是否行李直挂
+        /// 0 否 1 是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int IsBagHandle { get; set; }
         /// <summary>
         /// 是否火车票出票选座
+        /// 0 否 1 是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int IsTrain { get; set; }
@@ -133,11 +138,19 @@ namespace OASystem.Domain.Entities.Groups
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(1000)")]
         public string PriceDescription { get; set; }
-        
+
         /// <summary>
-        /// 舱类型
+        /// 舱类型(数据类型外键)
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int CType { get; set; }
+
+        /// <summary>
+        /// 客人类型(数据类型外键)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int PassengerType { get; set; }
+
+
     }
 }

+ 33 - 3
OASystem/OASystem.Domain/Entities/Groups/Grp_InvitationOfficialActivities.cs

@@ -46,13 +46,13 @@ namespace OASystem.Domain.Entities.Groups
         /// 邀请费用
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(10,2)")]
-        public decimal InviteCosts { get; set; }
+        public decimal InviteCost { get; set; }
 
         /// <summary>
-        /// 币种
+        /// 邀请费用币种
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int Currency { get; set; }
+        public int InviteCurrency { get; set; }
 
         /// <summary>
         /// 快递费用
@@ -60,6 +60,36 @@ namespace OASystem.Domain.Entities.Groups
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(10,2)")]
         public decimal SendCost { get; set; }
 
+        /// <summary>
+        /// 快递费用币种
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int SendCurrency { get; set; }
+
+        /// <summary>
+        /// 公务活动费
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(10,2)")]
+        public decimal EventsCost { get; set; }
+
+        /// <summary>
+        /// 公务活动费币种
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int EventsCurrency { get; set; }
+
+        /// <summary>
+        /// 公务翻译费
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(10,2)")]
+        public decimal TranslateCost { get; set; }
+
+        /// <summary>
+        /// 公务翻译费币种
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int TranslateCurrency { get; set; }
+
         /// <summary>
         /// 公务标识
         /// </summary>

+ 72 - 0
OASystem/OASystem.Domain/Entities/PersonnelModule/Pm_TaskAllocation.cs

@@ -0,0 +1,72 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.PersonnelModule
+{
+    /// <summary>
+    /// 人事 任务单
+    /// 任务分配
+    /// </summary>
+    [SugarTable("Pm_TaskAllocation")]
+    public class Pm_TaskAllocation: EntityBase
+    {
+        /// <summary>
+        /// 团组ID(没有团组为-1)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int DiId { get; set; }
+
+        /// <summary>
+        /// 任务归属部门ID
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int DepId { get; set; }
+
+        /// <summary>
+        /// 任务名称
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string? TaskName { get; set; }
+
+        /// <summary>
+        /// 任务内容
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
+        public string? TaskContent { get; set; }
+
+        /// <summary>
+        /// 任务优先级 1 2 3 4
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int TaskPriority { get; set; }
+
+        /// <summary>
+        /// 任务预计开始时间(由发布者设置开始时间)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string? PredictBeginTime { get; set; }
+
+        /// <summary>
+        /// 任务预计结束时间(由发布者设置结束时间)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string? PredictEndTime { get; set; }
+
+        /// <summary>
+        ///  0 否 1 是  
+        ///  发布者确认任务是否完成(员工任务完成时间小于或等于有效时间 默认完成)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsComplete { get; set; }
+
+        /// <summary>
+        /// 0 否 1 是  
+        /// 是否纳入绩效考核
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsIntoPerformance { get; set; }
+    }
+}

+ 62 - 0
OASystem/OASystem.Domain/Entities/PersonnelModule/Pm_TaskRelevanceUser.cs

@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.PersonnelModule
+{
+    /// <summary>
+    /// 人事 任务单
+    /// 任务分配关联人员(完成者)
+    /// </summary>
+    [SugarTable("Pm_TaskRelevanceUser")]
+    public class Pm_TaskRelevanceUser: EntityBase
+    {
+        /// <summary>
+        /// 任务表外键 Id
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int TAId { get; set; }
+
+        /// <summary>
+        /// 接受任务人员 Id
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int UserId { get; set; }
+
+        /// <summary>
+        /// 实际开始时间
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string? BeginTime { get; set; }
+
+        /// <summary>
+        /// 实际结束时间
+        /// 大于任务分配的预计结束时间 默认未完成 其他原因
+        /// 大于任务分配的预计结束时间且未开始 默认未完成 原因 未开始
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string? OverTime { get; set; }
+
+        /// <summary>
+        /// 任务状态 
+        /// 0 已知晓 1 进行中 2 待审核 3 未完成  4 已完成 5任务中止
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int TaskStatus { get; set; }
+
+        /// <summary>
+        /// 未完成原因
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string? Cause { get; set; }
+
+        /// <summary>
+        /// 评分 
+        /// 1 优秀(9-10) 2 良好(7-9) 3 一般(5-6) 4 不合格(0-5)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int Score { get; set; }
+    }
+}

+ 156 - 0
OASystem/OASystem.Domain/ViewModels/CRM/NewClientDataView.cs

@@ -1,13 +1,164 @@
 using OASystem.Domain.Entities.Customer;
 using Org.BouncyCastle.Asn1.Ocsp;
+using Org.BouncyCastle.Asn1.X9;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using static Google.Protobuf.Reflection.SourceCodeInfo.Types;
 
 namespace OASystem.Domain.ViewModels.CRM
 {
+
+    public class DetailsView
+    {
+        public int Id { get; set; }
+        /// <summary>
+        /// 客户分类
+        /// </summary>
+        public int Category { get; set; }
+
+        /// <summary>
+        /// 地市州Id
+        /// </summary>
+        public int Lvlid { get; set; }
+
+        /// <summary>
+        /// 权重
+        /// </summary>
+        public string Weight { get; set; }
+
+        /// <summary>
+        /// 联系人
+        /// </summary>
+        public string Contact { get; set; }
+
+        /// <summary>
+        /// 联系人性别
+        /// </summary>
+        public int Gender { get; set; }
+
+        /// <summary>
+        /// 联系手机号
+        /// </summary>
+        public string Telephone { get; set; }
+
+        /// <summary>
+        /// 联系座机号
+        /// </summary>
+        public string Phone { get; set; }
+
+        /// <summary>
+        /// 邮件
+        /// </summary>
+        public string Email { get; set; }
+
+        /// <summary>
+        /// 职位
+        /// </summary>
+        public string Job { get; set; }
+
+        /// <summary>
+        /// 客户单位
+        /// </summary>
+        public string Client { get; set; }
+
+        /// <summary>
+        /// 客户单位简写
+        /// </summary>
+        public string ClientShort { get; set; }
+
+        /// <summary>
+        /// 所属区域(所在城市)
+        /// </summary>
+        public string Location { get; set; }
+
+        /// <summary>
+        /// 地址
+        /// </summary>
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 护照
+        /// </summary>
+        public string Passport { get; set; }
+
+        /// <summary>
+        /// 护照日期
+        /// </summary>
+        public DateTime? PassportDate { get; set; }
+
+        /// <summary>
+        /// 生日
+        /// </summary>
+        public string Birthday { get; set; }
+
+        /// <summary>
+        /// 预计出团
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int PreDele { get; set; }
+
+        /// <summary>
+        /// 已出团
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int FinlishedDele { get; set; }
+
+        /// <summary>
+        /// 归属人员
+        /// </summary>
+        public List<int>? AscribedUser { get; set; }
+
+        /// <summary>
+        /// 归属部门
+        /// </summary>
+        public List<int>? AscribedDepartment { get; set; }
+
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string Remark { get; set; }
+    }
+
+    public class NewClientDataAndroidIOSView
+    {
+        /// <summary>
+        /// 编号
+        /// </summary>
+        public int RowNumber { get; set; }
+
+        public int Id { get; set; }
+
+
+        /// <summary>
+        /// 客户单位
+        /// </summary>
+        public string? Client { get; set; }
+
+        /// <summary>
+        /// 联系人
+        /// </summary>
+        public string? Contact { get; set; }
+
+        /// <summary>
+        /// 职位
+        /// </summary>
+        public string? Job { get; set; }
+
+        /// <summary>
+        /// 联系手机号
+        /// </summary>
+        public string? Telephone { get; set; }
+
+        /// <summary>
+        /// 所在区域
+        /// </summary>
+        public string? Location { get; set; }
+
+    }
+
     public class NewClientDataView:Crm_NewClientData
     {
         /// <summary>
@@ -28,10 +179,12 @@ namespace OASystem.Domain.ViewModels.CRM
          /// 地市州Id
          /// </summary>
         public string LvlidStr { get; set; }
+
         /// <summary>
         /// 归属人员
         /// </summary>
         public dynamic AscribedUser { get; set; }
+
         /// <summary>
         /// 归属部门
         /// </summary>
@@ -50,6 +203,7 @@ namespace OASystem.Domain.ViewModels.CRM
         /// 归属人员姓名
         /// </summary>
         public string CnName { get; set; }
+
         public int NewClientDataId { get; set; }
     }
 
@@ -62,10 +216,12 @@ namespace OASystem.Domain.ViewModels.CRM
         /// setData部门部门Id
         /// </summary>
         public int Id { get; set; }
+
         /// <summary>
         /// 归属部门名称
         /// </summary>
         public string Name { get; set; }
+
         public int NewClientDataId { get; set; }
     }
 }

+ 2 - 2
OASystem/OASystem.Domain/ViewModels/CRM/VisaDeleClientView.cs

@@ -29,9 +29,9 @@ namespace OASystem.Domain.ViewModels.CRM
         public string ClientName { get; set; }
 
         /// <summary>
-        /// 所属公司
+        /// 所属公司(全称)
         /// </summary>
-        public string CompanyName { get; set; }
+        public string CompanyFullName { get; set; }
 
         /// <summary>
         /// 性别 0 男  1 女

+ 40 - 54
OASystem/OASystem.Domain/ViewModels/Groups/TourClientListView.cs

@@ -57,21 +57,6 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </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>
@@ -105,21 +90,6 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </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>
@@ -145,35 +115,35 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public string? BirthDay { get; set; }
 
-        /// <summary>
-        /// 护照类型Id(数据类型表Id)
-        /// </summary>
-        public int PassportType { get; set; }
+        ///// <summary>
+        ///// 护照类型Id(数据类型表Id)
+        ///// </summary>
+        //public int PassportType { get; set; }
 
-        /// <summary>
-        /// 护照No
-        /// </summary>
-        public string? PassportNo { get; set; }
+        ///// <summary>
+        ///// 护照No
+        ///// </summary>
+        //public string? PassportNo { get; set; }
 
-        /// <summary>
-        /// 签发国
-        /// </summary>
-        public string? Country { get; set; }
+        ///// <summary>
+        ///// 签发国
+        ///// </summary>
+        //public string? Country { get; set; }
 
-        /// <summary>
-        /// 签发地区
-        /// </summary>
-        public string? Area { get; set; }
+        ///// <summary>
+        ///// 签发地区
+        ///// </summary>
+        //public string? Area { get; set; }
 
-        /// <summary>
-        /// 签发时间
-        /// </summary>
-        public string? IssueDt { get; set; }
+        ///// <summary>
+        ///// 签发时间
+        ///// </summary>
+        //public string? IssueDt { get; set; }
 
-        /// <summary>
-        /// 有效期限
-        /// </summary>
-        public string? ExpiryDt { get; set; }
+        ///// <summary>
+        ///// 有效期限
+        ///// </summary>
+        //public string? ExpiryDt { get; set; }
 
         /// <summary>
         /// 舱位类型(数据类型表Id)
@@ -200,4 +170,20 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public string? Remark { get; set; }
     }
+
+    /// <summary>
+    /// 公司名称信息
+    /// </summary>
+    public class CustomerCompanyCiew
+    {
+        /// <summary>
+        /// id
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 公司全称
+        /// </summary>
+        public string? CompanyFullName { get; set; }
+    }
 }

+ 822 - 17
OASystem/OASystem.Domain/ViewModels/Statistics/GroupStatementView.cs

@@ -114,7 +114,7 @@ namespace OASystem.Domain.ViewModels.Statistics
         /// <summary>
         /// 费用总计 描述
         /// </summary>
-        public string? TotalStr { get; set; }
+        public string? FeeTotalStr { get; set; }
 
         /// <summary>
         /// 团组收入
@@ -155,7 +155,7 @@ namespace OASystem.Domain.ViewModels.Statistics
         /// <summary>
         /// 已收 Items
         /// </summary>
-        public List<Gsd_ProceedsReceivedView>? ProceedsReceiveds { get; set; }
+        public List<Gsd_ProceedsReceivedView>? ProceedsReceivedViews { get; set; }
 
         /// <summary>
         /// 已收 Str
@@ -165,17 +165,17 @@ namespace OASystem.Domain.ViewModels.Statistics
         /// <summary>
         /// 支出费用 Items
         /// </summary>
-        public List<dynamic>? IncurExpenses { get; set; } = new List<dynamic>();
+        public List<Gsd_ExtraCostsView>? ExtraCostsViews { get; set; } 
 
         /// <summary>
         /// 支出费用 Str
         /// </summary>
-        public string? IncurExpenseStr{ get; set; } = string.Empty;
+        public string? ExtraCostsStr { get; set; } 
 
         /// <summary>
         /// 收款退还 Items
         /// </summary>
-        public List<Gsd_PaymentRefundAndOtherMoneyView>? PaymentRefundAndOtherMoneys { get; set; }
+        public List<Gsd_PaymentRefundAndOtherMoneyView>? PaymentRefundAndOtherMoneyViews { get; set; }
 
         /// <summary>
         /// 收款退还 Str
@@ -200,7 +200,7 @@ namespace OASystem.Domain.ViewModels.Statistics
         /// <summary>
         /// 单价
         /// </summary>
-        public decimal Price { get; set; }
+        public decimal Price { get; set; } = 0.00M;
 
         /// <summary>
         /// 数量
@@ -230,12 +230,12 @@ namespace OASystem.Domain.ViewModels.Statistics
         /// <summary>
         /// 汇率
         /// </summary>
-        public decimal Rate { get; set; }
+        public decimal Rate { get; set; } = 1.0000M;
 
         /// <summary>
         /// 应收金额
         /// </summary>
-        public decimal ItemSumPrice { get; set; }
+        public decimal ItemSumPrice { get; set; } = 0.00M;
     }
 
     /// <summary>
@@ -255,7 +255,7 @@ namespace OASystem.Domain.ViewModels.Statistics
         /// <summary>
         /// 费用金额
         /// </summary>
-        public decimal Price { get; set; }
+        public decimal Price { get; set; } = 0.00M;
 
         /// <summary>
         /// 币种
@@ -293,6 +293,71 @@ namespace OASystem.Domain.ViewModels.Statistics
         public string? Remark { get; set; }
     }
 
+    /// <summary>
+    /// 超支费用
+    /// </summary>
+    public class Gsd_ExtraCostsView 
+    {
+        public int GECId { get; set; }
+        public int GECDiId { get; set; }
+
+        /// <summary>
+        /// 费用名称
+        /// </summary>
+        public string? PriceName { get; set; }
+
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public decimal PayMoney { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 付款币种
+        /// </summary>
+        public string? PaymentCurrency { get; set; }
+
+        /// <summary>
+        /// 当天汇率
+        /// </summary>
+        public decimal DayRate { get; set; } = 1.0000M;
+
+        /// <summary>
+        /// 人名币金额
+        /// </summary>
+        public decimal CNYPrice { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string? Payee { get; set; }
+
+        /// <summary>
+        /// 费用标识
+        /// -1 未选择 0 公转 1 私转
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string? PayWay { get; set; }
+
+        /// <summary>
+        /// 卡类型
+        /// </summary>
+        public string? CardType { get; set; }
+
+        /// <summary>
+        /// 付款状态
+        /// </summary>
+        public int IsPay { get; set; }
+
+        /// <summary>
+        /// 申请人
+        /// </summary>
+        public string? Applicant { get; set; }
+    }
+
     /// <summary>
     /// 收款退还
     /// </summary>
@@ -320,17 +385,17 @@ namespace OASystem.Domain.ViewModels.Statistics
         /// <summary>
         /// 费用
         /// </summary>
-        public decimal Price { get; set; }
+        public decimal Price { get; set; } = 0.00M;
 
         /// <summary>
         /// 人名币金额
         /// </summary>
-        public decimal CNYPrice { get; set; }
+        public decimal CNYPrice { get; set; } = 0.00M;
 
         /// <summary>
         /// 当时汇率
         /// </summary>
-        public decimal ThisRate { get; set; }
+        public decimal ThisRate { get; set; } = 1.0000M;
 
         /// <summary>
         /// 收款方
@@ -344,8 +409,9 @@ namespace OASystem.Domain.ViewModels.Statistics
 
         /// <summary>
         /// 费用标识
+        /// -1 未选择 0 公转 1 私转
         /// </summary>
-        public string? FeeType { get; set; }
+        public int? OrbitalPrivateTransfer { get; set; }
 
         /// <summary>
         /// 支付方式
@@ -354,8 +420,9 @@ namespace OASystem.Domain.ViewModels.Statistics
 
         /// <summary>
         /// 付款状态
+        /// 0 未付款 1 已付款
         /// </summary>
-        public string? PayStatus { get; set; }
+        public int IsPay { get; set; }
 
         /// <summary>
         /// 申请人
@@ -375,7 +442,7 @@ namespace OASystem.Domain.ViewModels.Statistics
 
         public int PrDiId { get; set; }
         public string PrPriceName { get; set; }
-        public decimal PrPrice { get; set; }
+        public decimal PrPrice { get; set; } = 0.00M;
         public int PrCurrencyId { get; set; }
         public int PrPayType { get; set; }
         public int PrPriceType { get; set; }
@@ -390,11 +457,749 @@ namespace OASystem.Domain.ViewModels.Statistics
     /// 团组支出 View
     /// </summary>
     public class GroupExpenditureView
-    { 
-        
+    {
+        /// <summary>
+        /// 酒店费用集合
+        /// </summary>
+        public List<GroupHotelFeeView>? GroupHotelFeeViews { get; set; }
+
+        /// <summary>
+        /// 酒店费用描述
+        /// </summary>
+        public string? GroupHotelFeeStr { get; set; }
+
+        /// <summary>
+        /// 地接费用集合
+        /// </summary>
+        public List<GroupCTGGRFeeView>? GroupCTGGRFeeViews { get; set; }
+
+        /// <summary>
+        /// 地接费用描述
+        /// </summary>
+        public string? GroupCTGGRFeeStr { get; set; }
+
+        /// <summary>
+        /// 机票费用集合
+        /// </summary>
+        public List<GroupAirFeeView>? GroupAirFeeViews { get; set; }
+
+        /// <summary>
+        /// 机票费用描述
+        /// </summary>
+        public string? GroupAirFeeStr { get; set; }
+
+        /// <summary>
+        /// 签证费用集合
+        /// </summary>
+        public List<GroupVisaFeeView>? GroupVisaFeeViews { get; set; }
+
+        /// <summary>
+        /// 签证费用描述
+        /// </summary>
+        public string? GroupVisaFeeStr { get; set; }
+
+        /// <summary>
+        /// 邀请/公务费用集合
+        /// </summary>
+        public List<GroupInvitationalFeeView>? GroupInvitationalFeeViews { get; set; }
+
+        /// <summary>
+        /// 邀请/公务费用描述
+        /// </summary>
+        public string? GroupInvitationalFeeStr { get; set; }
+
+        /// <summary>
+        /// 保险费用集合
+        /// </summary>
+        public List<GroupInsuranceFeeView>? GroupInsuranceFeeViews { get; set; }
+
+        /// <summary>
+        /// 保险费用描述
+        /// </summary>
+        public string? GroupInsuranceFeeStr { get; set; }
+
+        /// <summary>
+        /// 增减款项费用集合
+        /// </summary>
+        public List<GroupDecreaseFeeView>? GroupDecreaseFeeViews { get; set; }
+
+        /// <summary>
+        /// 增减款项费用描述
+        /// </summary>
+        public string? GroupDecreaseFeeStr { get; set; }
+    }
+
+    /// <summary>
+    /// 酒店费用View
+    /// </summary>
+    public class GroupHotelFeeView
+    {
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        public int HrDiId { get; set; }
+
+        /// <summary>
+        /// 酒店Id
+        /// </summary>
+        public int HrId { get; set; }
+
+        /// <summary>
+        /// 城市
+        /// </summary>
+        public string? City { get; set; }
+
+        /// <summary>
+        /// 酒店名称
+        /// </summary>
+        public string? HotelName { get; set; }
+
+        /// <summary>
+        /// 入住时间
+        /// </summary>
+        public string? CheckInDate { get; set; }
+
+        /// <summary>
+        /// 离店时间
+        /// </summary>
+        public string? CheckOutDate { get; set; }
+
+        /// <summary>
+        /// 支付币种
+        /// </summary>
+        public string? PaymentCurrency { get; set; }
+
+        /// <summary>
+        /// 单间价格
+        /// </summary>
+        public decimal SingleRoomPrice { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 单间数量
+        /// </summary>
+        public int SingleRoomCount { get; set; }
+
+        /// <summary>
+        /// 双间价格
+        /// </summary>
+        public decimal DoubleRoomPrice { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 双间数量
+        /// </summary>
+        public int DoubleRoomCount { get; set; }
+
+        /// <summary>
+        /// 套房价格
+        /// </summary>
+        public decimal SuiteRoomPrice { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 套房数量
+        /// </summary>
+        public int SuiteRoomCount { get; set; }
+
+        /// <summary>
+        /// 其他房型价格
+        /// </summary>
+        public decimal OtherRoomPrice { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 其他房型数量
+        /// </summary>
+        public int OtherRoomCount { get; set; }
+
+        /// <summary>
+        /// 早餐费用
+        /// </summary>
+        public decimal BreakfastPrice { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 早餐币种
+        /// </summary>
+        public string? BreakfastCurrency { get; set; }
+
+        /// <summary>
+        /// 由地接支付
+        /// 0 是 1否
+        /// </summary>
+        public int Isoppay { get; set; }
+
+        /// <summary>
+        /// 地税
+        /// </summary>
+        public decimal GovernmentRent { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 地税币种
+        /// </summary>
+        public string? GovernmentRentCurrency { get; set; }
+
+        /// <summary>
+        /// 城市价格
+        /// </summary>
+        public decimal CityTax { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 城市币种
+        /// </summary>
+        public string? CityTaxCurrency { get; set; }
+
+        /// <summary>
+        /// 信用卡金额
+        /// </summary>
+        public decimal PayMoney { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 人名币金额
+        /// </summary>
+        public decimal CNYPrice { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 当天汇率
+        /// </summary>
+        public decimal DayRate { get; set; } = 1.0000M;
+
+        /// <summary>
+        /// 币种汇率
+        /// </summary>
+        public string? CurrencyRateStr { get; set; }
+
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string? Payee { get; set; }
+
+        /// <summary>
+        /// 费用标识
+        /// -1 未选择 0 公转 1 私转
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string? PayWay { get; set; }
+
+        /// <summary>
+        /// 卡类型
+        /// </summary>
+        public string? CardType { get; set; }
+
+        /// <summary>
+        /// 是否支付
+        /// -1 未选择 0 未付款 1 已付款 
+        /// </summary>
+        public int IsPay { get; set; }
+
+        /// <summary>
+        /// 操作人
+        /// </summary>
+        public string? Applicant { get; set; }
     }
 
+    /// <summary>
+    /// 地接费用View
+    /// </summary>
+    public class GroupCTGGRFeeView
+    {
+        public int CTGGRDiId { get; set; }
+        public int CTGGRId { get; set; }
+
+        /// <summary>
+        /// 地区
+        /// </summary>
+        public string? Area { get; set; }
+
+        /// <summary>
+        /// 费用名称
+        /// </summary>
+        public string? PriceName { get; set; }
+
+        /// <summary>
+        /// 费用描述
+        /// </summary>
+        public string? PriceContent { get; set; }
+
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public decimal PayMoney { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 付款币种
+        /// </summary>
+        public string? PaymentCurrency { get; set; }
+
+        /// <summary>
+        /// 此次付款百分比
+        /// </summary>
+        public decimal PayPercentage { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 已付款金额
+        /// </summary>
+        public decimal AmountPaid { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 尾款
+        /// </summary>
+        public decimal BalancePayment { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 当时汇率
+        /// </summary>
+        public decimal DayRate { get; set; } = 1.0000M;
+
+        /// <summary>
+        /// 付款人名币金额
+        /// </summary>
+        public decimal CNYPrice { get; set; }
+
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public string? Payee { get; set; }
+
+        /// <summary>
+        /// 付款时间
+        /// </summary>
+        public string? AuditGMDate { get; set; }
+
+        /// <summary>
+        /// 费用标识
+        /// -1 未选择 0 公转 1 私转
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string? PayWay { get; set; }
+
+        /// <summary>
+        /// 是否支付
+        /// -1 未选择 0 未付款 1 已付款 
+        /// </summary>
+        public int IsPay { get; set; }
 
+        /// <summary>
+        /// 操作人
+        /// </summary>
+        public string? Applicant { get; set; }
+    }
+
+    /// <summary>
+    /// 机票费用View
+    /// </summary>
+    public class GroupAirFeeView 
+    {
+        public int AirId { get; set; }
+        public int AirDiId { get; set; }
+
+        /// <summary>
+        /// 舱位类型
+        /// </summary>
+        public string? AirTypeName { get; set; }
+        /// <summary>
+        /// 航班号
+        /// </summary>
+        public string? FlightsCode { get; set; }
+
+        /// <summary>
+        /// 城市A-B
+        /// </summary>
+        public string? FlightsCity { get; set; }
+
+        /// <summary>
+        /// 航班日期
+        /// </summary>
+        public string? FlightsDate { get; set; }
+
+        /// <summary>
+        /// 航班时间
+        /// </summary>
+        public string? FlightsTime { get; set; }
+
+        /// <summary>
+        /// 客户姓名
+        /// </summary>
+        public string? ClientName { get; set; }
+
+        /// <summary>
+        /// 客户人数
+        /// </summary>
+        public int ClientNum { get; set; }
+
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public decimal PayMoney { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 付款币种
+        /// </summary>
+        public string? PayMoneyCurrency { get; set; }
+
+        /// <summary>
+        /// CNY 金额
+        /// </summary>
+        public decimal CNYPrice { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 当时汇率
+        /// </summary>
+        public decimal DayRate { get; set; } = 1.0000M;
+
+        /// <summary>
+        /// 付款时间
+        /// </summary>
+        public string? AuditGMDate { get; set; }
+
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string? Payee { get; set; }
+
+        /// <summary>
+        /// 费用标识
+        /// -1 未选择 0 公转 1 私转
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string? PayWay { get; set; }
+
+        /// <summary>
+        /// 卡类型
+        /// </summary>
+        public string? CardType { get; set; }
+
+        /// <summary>
+        /// 是否支付
+        /// -1 未选择 0 未付款 1 已付款 
+        /// </summary>
+        public int IsPay { get; set; }
+
+        /// <summary>
+        /// 操作人
+        /// </summary>
+        public string? Applicant { get; set; }
+    }
+
+    /// <summary>
+    /// 签证费用View
+    /// </summary>
+    public class GroupVisaFeeView
+    {
+        public int VisaId { get; set; }
+
+        public int VisaDiId { get; set; }
+
+        /// <summary>
+        /// 客户名称
+        /// </summary>
+        public string? VisaClient { get; set; }
+
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public decimal PayMoney { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 付款币种
+        /// </summary>
+        public string? PayMoneyCurrency { get; set; }
+
+        /// <summary>
+        /// 当时汇率
+        /// </summary>
+        public decimal DayRate { get; set; } = 1.0000M;
+
+        /// <summary>
+        /// 付款时间
+        /// </summary>
+        public string? AuditGMDate { get; set; }
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string? Payee { get; set; }
+
+        /// <summary>
+        /// 费用标识
+        /// -1 未选择 0 公转 1 私转
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string? PayWay { get; set; }
+
+        /// <summary>
+        /// 卡类型
+        /// </summary>
+        public string? CardType { get; set; }
+
+        /// <summary>
+        /// 是否支付
+        /// -1 未选择 0 未付款 1 已付款 
+        /// </summary>
+        public int IsPay { get; set; }
+
+        /// <summary>
+        /// 操作人
+        /// </summary>
+        public string? Applicant { get; set; }
+    }
+
+    /// <summary>
+    /// 邀请/公务费用View
+    /// </summary>
+    public class GroupInvitationalFeeView
+    {
+        public int IOAId { get; set; }
+
+        public int IOADiId { get; set; }
+
+        /// <summary>
+        /// 邀请方地区
+        /// </summary>
+        public string? InviterArea { get; set; }
+
+        /// <summary>
+        /// 邀请方
+        /// </summary>
+        public string? Inviter { get; set; }
+
+        /// <summary>
+        /// 邀请时间
+        /// </summary>
+        public string? InviteTime { get; set; }
+
+        /// <summary>
+        /// 邀请函费用
+        /// </summary>
+        public decimal InviteCost { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 邀请函币种
+        /// </summary>
+        public string? InviteCurrency { get; set; }
+
+        /// <summary>
+        /// 快递费用
+        /// </summary>
+        public decimal SendCost { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 快递币种
+        /// </summary>
+        public string? SendCurrency { get; set; }
+
+        /// <summary>
+        /// 活动费用
+        /// </summary>
+        public decimal EventsCost { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 活动币种
+        /// </summary>
+        public string? EventsCurrency { get; set; }
+
+        /// <summary>
+        /// 翻译费用
+        /// </summary>
+        public decimal TranslateCost { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 翻译币种
+        /// </summary>
+        public string? TranslateCurrency { get; set; }
+
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public decimal PayMoney { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 付款币种
+        /// </summary>
+        public string? PaymentCurrency { get; set; }
+
+        /// <summary>
+        /// 人名币费用
+        /// </summary>
+        public decimal CNYPrice { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 当时币种汇率
+        /// </summary>
+        public string? CurrencyRateStr { get; set; }
+
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string? Payee { get; set; }
+
+        /// <summary>
+        /// 付款时间
+        /// </summary>
+        public string? AuditGMDate { get; set; }
+
+        /// <summary>
+        /// 费用标识
+        /// -1 未选择 0 公转 1 私转
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string? PayWay { get; set; }
+
+        /// <summary>
+        /// 是否支付
+        /// -1 未选择 0 未付款 1 已付款 
+        /// </summary>
+        public int IsPay { get; set; }
+
+        /// <summary>
+        /// 操作人
+        /// </summary>
+        public string? Applicant { get; set; }
+    }
+
+    /// <summary>
+    /// 保险费用View
+    /// </summary>
+    public class GroupInsuranceFeeView
+    {
+        public int InsuranceId { get; set; }
+
+        public int InsuranceDiId { get; set; }
+
+        /// <summary>
+        /// 客户名称
+        /// </summary>
+        public string? ClientName { get; set; }
+
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public decimal PayMoney { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 付款币种
+        /// </summary>
+        public string? PayMoneyCurrency { get; set; }
+
+        /// <summary>
+        /// 人名币金额
+        /// </summary>
+        public decimal CNYPrice { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 付款时间
+        /// </summary>
+        public string? AuditGMDate { get; set; }
+
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string? Payee { get; set; }
+
+        /// <summary>
+        /// 费用标识
+        /// -1 未选择 0 公转 1 私转
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string? PayWay { get; set; }
+
+        /// <summary>
+        /// 是否支付
+        /// -1 未选择 0 未付款 1 已付款 
+        /// </summary>
+        public int IsPay { get; set; }
+
+        /// <summary>
+        /// 操作人
+        /// </summary>
+        public string? Applicant { get; set; }
+    }
+
+    /// <summary>
+    /// 增减款项View
+    /// </summary>
+    public class GroupDecreaseFeeView
+    {
+        public int DPId { get; set; }
+        public int DPDiId { get; set; }
+
+        /// <summary>
+        /// 费用名称
+        /// </summary>
+        public string? PriceName { get; set; }
+
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public decimal PayMoney { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 付款币种
+        /// </summary>
+        public string? PayMoneyCurrency { get; set; }
+
+        /// <summary>
+        /// 当时汇率
+        /// </summary>
+        public decimal DayRate { get; set; } = 1.0000M;
+
+        /// <summary>
+        /// 人名币金额
+        /// </summary>
+        public decimal CNYPrice { get; set; } = 0.00M;
+
+        /// <summary>
+        /// 付款时间
+        /// </summary>
+        public string? AuditGMDate { get; set; }
+
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string? Payee { get; set; }
+
+        /// <summary>
+        /// 费用标识
+        /// -1 未选择 0 公转 1 私转
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string? PayWay { get; set; }
+
+        /// <summary>
+        /// 是否支付
+        /// -1 未选择 0 未付款 1 已付款 
+        /// </summary>
+        public int IsPay { get; set; }
+
+        /// <summary>
+        /// 操作人
+        /// </summary>
+        public string? Applicant { get; set; }
+
+    }
     #endregion
 
 }

+ 224 - 12
OASystem/OASystem.Infrastructure/Repositories/CRM/NewClientDataRepository.cs

@@ -1,6 +1,7 @@
 using AutoMapper;
 using AutoMapper.Execution;
 using MySqlX.XDevAPI.Relational;
+using NPOI.OpenXmlFormats.Dml.Diagram;
 using OASystem.Domain;
 using OASystem.Domain.Dtos;
 using OASystem.Domain.Dtos.CRM;
@@ -11,10 +12,12 @@ using SqlSugar;
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.ComponentModel.Design;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Xml.Linq;
+using static Google.Protobuf.Reflection.SourceCodeInfo.Types;
 using static OASystem.Domain.Dtos.CRM.NewClientDataQueryDto;
 
 namespace OASystem.Infrastructure.Repositories.CRM
@@ -28,6 +31,149 @@ namespace OASystem.Infrastructure.Repositories.CRM
             _mapper = mapper;
         }
 
+        /// <summary>
+        /// 客户资料
+        /// 基础数据源
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<Result> _Init(int portType)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+
+            if (portType == 1 || portType == 2 || portType == 3)
+            {
+                #region 下拉框初始化数据
+                //负责人下拉框
+                List<dynamic> _Users = new List<dynamic>();
+                List<Sys_Users> users = _sqlSugar.Queryable<Sys_Users>().Where(u => u.IsDel == 0 && u.CompanyId == 2).ToList();
+                foreach (Sys_Users user in users)
+                {
+                    var data = new
+                    {
+                        Id = user.Id,
+                        Name = user.CnName
+                    };
+                    _Users.Add(data);
+                };
+
+
+                List<Sys_SetData> initData = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0).ToList();
+
+                //客户级别数据
+                List<dynamic> _level = new List<dynamic>();
+                List<Sys_SetData> level = initData.Where(u => u.STid == 33 && u.IsDel == 0).ToList();
+                foreach (Sys_SetData item in level)
+                {
+                    var data = new
+                    {
+                        Id = item.Id,
+                        Name = item.Name
+                    };
+                    _level.Add(data);
+                };
+                //客户类别
+                List<dynamic> _CustomerClass = new List<dynamic>();
+                List<Sys_SetData> CustomerClass = initData.Where(u => u.STid == 37 && u.IsDel == 0).ToList();
+                foreach (Sys_SetData item in CustomerClass)
+                {
+                    var data = new
+                    {
+                        Id = item.Id,
+                        Name = item.Name
+                    };
+                    _CustomerClass.Add(data);
+                };
+                //业务分类 
+                List<dynamic> _ServiceClass = new List<dynamic>();
+                List<Sys_SetData> ServiceClass = initData.Where(u => u.STid == 36 && u.IsDel == 0).ToList();
+                foreach (Sys_SetData item in ServiceClass)
+                {
+                    var data = new
+                    {
+                        Id = item.Id,
+                        Name = item.Name
+                    };
+                    _ServiceClass.Add(data);
+                };
+
+                //身份分类
+                List<dynamic> _ProvinceClass = new List<dynamic>();
+                List<Sys_SetData> ProvinceClass = initData.Where(u => u.STid == 42 && u.IsDel == 0).ToList();
+                foreach (Sys_SetData item in ProvinceClass)
+                {
+                    var data = new
+                    {
+                        Id = item.Id,
+                        Name = item.Name
+                    };
+                    _ProvinceClass.Add(data);
+                };
+                #endregion
+                var data1 = new {
+                    Users = _Users,
+                    Level = _level,
+                    CustomerClass = _CustomerClass,
+                    ServiceClass= _ServiceClass,
+                    ProvinceClass = _ProvinceClass
+                };
+                return result = new Result()
+                {
+                    Code = 0,
+                    Msg = "查询成功",
+                    Data = data1
+                };
+
+            }
+            else
+            {
+                result.Msg = string.Format("请传入有效的PortType参数!");
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 市场客户资料数据
+        /// 详情
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<Result> _BatchAssignment(int portType,int id)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+
+            if (portType == 1 || portType == 2 || portType == 3)
+            {
+                if (id < 0)
+                {
+                    result.Msg = string.Format("请传入有效的Id参数!");
+                    return result;
+                }
+
+                string infoSql = string.Format(@" Select * From  Crm_NewClientData Where Isdel = 0 And Id = {0}", id);
+                var info = await _sqlSugar.SqlQueryable<DetailsView>(infoSql).FirstAsync();
+                if (info != null )
+                {
+                    List<AscribedUser> AscribedUser = await _sqlSugar.SqlQueryable<AscribedUser>
+                           ("select u1.UsersId as UserId ,u2.CnName,u1.NewClientDataId from Crm_ClientDataAndUser u1,Sys_Users u2 where u1.UsersId=u2.Id and NewClientDataId=" + info.Id + "   AND u1.ISDEL = 0").ToListAsync();
+                    info.AscribedUser = AscribedUser.Select(it => it.UserId).ToList();
+
+                    List<AscribedDepartment> AscribedDepartment = await _sqlSugar.SqlQueryable<AscribedDepartment>
+                  ("select  d2.Id,d2.Name,d1.NewClientDataId  from Crm_ClientDataAndBusiness d1,Sys_SetData d2 where d1.SetDataId=d2.Id and NewClientDataId=" + info.Id + "  AND d1.ISDEL = 0").ToListAsync();
+                    info.AscribedDepartment = AscribedDepartment.Select(it => it.Id).ToList();
+
+                    result.Code = 0;
+                    result.Data = info;
+                }
+            }
+            else
+            {
+                result.Msg = string.Format("请传入有效的PortType参数!");
+            }
+
+            return result;
+        }
+
         /// <summary>
         /// 客户资料初识初始化
         /// </summary>
@@ -224,9 +370,16 @@ namespace OASystem.Infrastructure.Repositories.CRM
                 foreach (var item in NewClientDataView)
                 {
                     Sys_SetData CategoryStr = _sqlSugar.Queryable<Sys_SetData>().Single(it => it.Id == item.Category);
-                    item.CategoryStr = CategoryStr != null ? CategoryStr.Name : null;
+                    if (CategoryStr != null)
+                    {
+                        item.CategoryStr = CategoryStr != null ? CategoryStr.Name : null;
+                    }
+
                     Sys_SetData lvlStr = _sqlSugar.Queryable<Sys_SetData>().Single(it => it.Id == item.Lvlid);
-                    item.LvlidStr = lvlStr != null ? lvlStr.Name : null;
+                    if (lvlStr != null)
+                    {
+                        item.LvlidStr = lvlStr != null ? lvlStr.Name : null;
+                    }
                 }
 
                 if (NewClientDataView.Count > 0)
@@ -337,28 +490,32 @@ namespace OASystem.Infrastructure.Repositories.CRM
                         };
 
                     }
-                    else if (dto.PortType == 2)
+                    else if (dto.PortType == 2 || dto.PortType == 3)
                     {
-
+                        List<NewClientDataAndroidIOSView> newClientDataIOSViews = new List<NewClientDataAndroidIOSView>();
                         foreach (var item in NewClientDataView)
                         {
-                            List<AscribedUser> AscribedUser = await _sqlSugar.SqlQueryable<AscribedUser>
-                           ("select u1.UsersId as UserId ,u2.CnName,u1.NewClientDataId from Crm_ClientDataAndUser u1,Sys_Users u2 where u1.UsersId=u2.Id and NewClientDataId=" + item.Id + "   AND u1.ISDEL = 0").ToListAsync();
-                            item.AscribedUser = AscribedUser.Select(x=> x.UserId);
 
-                            List<AscribedDepartment> AscribedDepartment = await _sqlSugar.SqlQueryable<AscribedDepartment>
-                          ("select  d2.Id,d2.Name,d1.NewClientDataId  from Crm_ClientDataAndBusiness d1,Sys_SetData d2 where d1.SetDataId=d2.Id and NewClientDataId=" + item.Id + "  AND d1.ISDEL = 0").ToListAsync();
-                            item.AscribedDepartment = AscribedDepartment.Select(x => x.Id);
+                            newClientDataIOSViews.Add(new NewClientDataAndroidIOSView()
+                            {
+                                RowNumber = item.RowNumber,
+                                Id = item.Id,
+                                Client = item.Client,
+                                Contact = item.Contact,
+                                Job = item.Job,
+                                Telephone = item.Telephone,
+                                Location = item.Location,
+                            });
                         }
 
-
                         result = new Result()
                         {
                             Code = 0,
                             Msg = "查询成功",
-                            Data = new { pageCount = count, totalPage = (int)totalPage, pageIndex = dto.PageIndex, pageSize = dto.PageSize, pageSource = NewClientDataView },
+                            Data = new { pageCount = count, totalPage = (int)totalPage, pageIndex = dto.PageIndex, pageSize = dto.PageSize, pageSource = newClientDataIOSViews },
                         };
                     }
+                    
                 }
                 else
                 {
@@ -701,5 +858,60 @@ namespace OASystem.Infrastructure.Repositories.CRM
 
             return AcrionResult;
         }
+
+        /// <summary>
+        /// 市场客户资料数据
+        /// 批量指派
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<Result> _BatchAssignment(BatchAssignmentDto dto)
+        {
+            Result AcrionResult = new Result() { Code = -1,Msg="操作失败"};
+            if (dto.UserIdItem != null || dto.UserIdItem.Count < 1)
+            {
+                AcrionResult.Msg = "用户ID集合不能为空!";
+                return AcrionResult;
+            }
+
+            if (dto.ClientDataIdItem != null || dto.ClientDataIdItem.Count < 1)
+            {
+                AcrionResult.Msg = "客户资料ID集合不能为空!";
+                return AcrionResult;
+            }
+
+            List<Crm_ClientDataAndUser> _ClientDataAndUsers = new List<Crm_ClientDataAndUser>();
+
+            List < Crm_ClientDataAndUser > _ClientDataAndUsers1 = await _sqlSugar.Queryable< Crm_ClientDataAndUser >().Where(it => it.IsDel == 0).ToListAsync();
+            foreach (var clientDataId in dto.ClientDataIdItem)
+            {
+                Crm_ClientDataAndUser ClientDataAndUser = new Crm_ClientDataAndUser()
+                { 
+                    CreateUserId = dto.UserId,
+                    NewClientDataId = clientDataId
+                };
+
+                foreach (var userId in dto.UserIdItem)
+                {
+                    ClientDataAndUser.usersId = userId;
+                    Crm_ClientDataAndUser _ClientDataAndUsers2 = _ClientDataAndUsers1.Where(it => it.NewClientDataId == clientDataId && it.usersId == userId).FirstOrDefault();
+                    if (_ClientDataAndUsers2 == null)
+                    {
+                        _ClientDataAndUsers.Add(ClientDataAndUser);
+                    }
+                }
+            }
+            if (_ClientDataAndUsers.Count > 0)
+            {
+                var adds = await _sqlSugar.Insertable(_ClientDataAndUsers).ExecuteCommandAsync();
+                if (adds > 0)
+                {
+                    AcrionResult.Code = 0;
+                    return AcrionResult;
+                }
+            }
+
+            return AcrionResult;
+        }
     }
 }

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

@@ -42,7 +42,7 @@ namespace OASystem.Infrastructure.Repositories.CRM
             Result result = new Result() { Code = -2 };
             if (dto.PortType == 1 || dto.PortType == 2) 
             {
-                string sql = string.Format(@"Select cdc.Id,LastName+FirstName ClientName,ccc.CompanyName,Sex,Marriage,
+                string sql = string.Format(@"Select cdc.Id,LastName+FirstName ClientName,ccc.CompanyFullName,Sex,Marriage,
                                              	    Phone LandlinePhone,Tel,crmCard1.CertNo IDNo,crmCard2.CertNo PassportNo
                                              From Crm_DeleClient cdc
                                              Left Join Crm_CustomerCompany ccc On cdc.crmCompanyId = ccc.Id

+ 44 - 29
OASystem/OASystem.Infrastructure/Repositories/Groups/HotelPriceRepository.cs

@@ -622,7 +622,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                                      Left Join Sys_SetData  sd On sd.IsDel=0 And sd.STid=16  And tr.CTable = sd.Id 
                                                      Where tr.IsDel = 0 And tr.DiId = {0} And tr.CTable = {1}", dto.DiId, dto.CTable);
 
-                    var teamRateInfo =  _sqlSugar.SqlQueryable<TeamRateInfoView>(teamRateInfoSql).ToList();
+                    var teamRateInfo = _sqlSugar.SqlQueryable<TeamRateInfoView>(teamRateInfoSql).ToList();
 
                     #region 团组汇率
 
@@ -908,6 +908,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
             int portType = _dto.PortType;
             if (portType == 1 || portType == 2 || portType == 3)
             {
+
                 Grp_HotelReservations _HotelReservations = new Grp_HotelReservations();
                 Grp_CreditCardPayment _CreditCardPayment = new Grp_CreditCardPayment();
 
@@ -915,6 +916,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 _HotelReservations = _mapper.Map<Grp_HotelReservations>(_dto);
                 _CreditCardPayment = _mapper.Map<Grp_CreditCardPayment>(_dto);
 
+                
+
                 _HotelReservations.DiId = _dto.DiId;
                 _HotelReservations.CardPriceCurrency = _dto.CTDId;
                 _HotelReservations.CreateUserId = _dto.UserId;
@@ -927,6 +930,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     if (checkNoRes.Code == 0) 
                     {
                         checkNo = checkNoRes.Data;
+                        _HotelReservations.CheckNumber = checkNo;
                     }
                 }
 
@@ -950,36 +954,48 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     }
                 }
 
-                List<TeamRateModelView> teamRateModelViews = new List<TeamRateModelView>();
-                teamRateModelViews = await _teamRateRep.PostGroupRateInfoByDiId(_dto.DiId);
-                if (teamRateModelViews.Count < 0)
+                decimal currencyRate = 0.00M;
+                if (_CreditCardPayment.PayMoney != 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;
-                }
+                    if(_CreditCardPayment.PaymentCurrency <= 0)
+                    {
+                        _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;
+                    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;
+                    }
+                    currencyRate = teamRateDescView.Rate;
                 }
-                _CreditCardPayment.DayRate = teamRateDescView.Rate;
+                
+                _CreditCardPayment.DayRate = currencyRate;
                 _CreditCardPayment.RMBPrice = (_CreditCardPayment.DayRate * _CreditCardPayment.PayMoney).DecimalsKeepTwo();
 
                 //if (_CreditCardPayment.PayDId == 72) //刷卡
@@ -988,7 +1004,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 //    _CreditCardPayment.CardholderName = "Zhang Hailin";
                 //}
 
-
                 _CreditCardPayment.Remark = _dto.CcpRemark;
                 #endregion
 

+ 5 - 5
OASystem/OASystem.Infrastructure/Repositories/Groups/InvitationOfficialActivitiesRepository.cs

@@ -353,8 +353,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         Inviter = dto.Inviter,
                         InviteTime = dto.InviteTime,
                         Attachment = dto.Attachment,
-                        InviteCosts = dto.InviteCosts,
-                        Currency = dto.Currency,
+                        InviteCost = dto.InviteCosts,
+                        InviteCurrency = dto.Currency,
                         SendCost = dto.SendCost,
                         IsGoOfficaiaBussiness = dto.IsGoOfficaiaBussiness,
                         Remark = dto.Remark,
@@ -403,13 +403,13 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                 if (_TeamRate != null)
                                 {
 
-                                    if (grp_Invitation.Currency == 49)
+                                    if (grp_Invitation.InviteCurrency == 49)
                                     {
                                         grp_CreditCardPayment.DayRate = _TeamRate.RateU;
                                         grp_CreditCardPayment.RMBPrice = grp_CreditCardPayment.PayMoney * Convert.ToDecimal(_TeamRate.RateU);
                                         //ccp.PayMoney = ccp.PayMoney * float.Parse(tr.RateU); 
                                     }
-                                    else if (grp_Invitation.Currency == 51)
+                                    else if (grp_Invitation.InviteCurrency == 51)
                                     {
                                         grp_CreditCardPayment.DayRate = _TeamRate.RateE;
                                         grp_CreditCardPayment.RMBPrice = grp_CreditCardPayment.PayMoney * Convert.ToDecimal(_TeamRate.RateE);
@@ -430,7 +430,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                 {
                                     PayDId = dto.PayDId,
                                     PayMoney = grp_CreditCardPayment.PayMoney,
-                                    PaymentCurrency = grp_Invitation.Currency,
+                                    PaymentCurrency = grp_Invitation.InviteCurrency,
                                     Payee = dto.Payee,
                                     OrbitalPrivateTransfer = dto.OrbitalPrivateTransfer,
                                     DayRate = grp_CreditCardPayment.DayRate,

+ 494 - 65
OASystem/OASystem.Infrastructure/Repositories/Groups/TourClientListRepository.cs

@@ -1,13 +1,16 @@
 using AutoMapper;
 using OASystem.Domain;
+using OASystem.Domain.Dtos.CRM;
 using OASystem.Domain.Dtos.Groups;
 using OASystem.Domain.Entities.Customer;
 using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.ViewModels.Groups;
 using OASystem.Infrastructure.Tools;
 using Org.BouncyCastle.Utilities.Encoders;
+using StackExchange.Redis;
 using System;
 using System.Collections.Generic;
+using System.Globalization;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -75,12 +78,27 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 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 passportTypeData = setData.Where(it => it.STid == 74).ToList(); //护照类型
+                //List<SetDataInfoView> _PassportTypeData = _mapper.Map<List<SetDataInfoView>>(passportTypeData);
+
+                //客户信息资料
+                var clientInfoSql = string.Format(@"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
+	                                                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
+	                                                Where dc.IsDel = 0");
+                var clientData = await _sqlSugar.SqlQueryable<TourClientListDetailsView>(clientInfoSql).ToListAsync();
+
+                //公司信息 
+                var clientCompanySql = string.Format(@"Select Id,CompanyFullName From Crm_CustomerCompany Where IsDel = 0");
+                var clientCompanyData = await _sqlSugar.SqlQueryable<CustomerCompanyCiew>(clientCompanySql).ToListAsync();
 
                 var _view = new {
                     ShippingSpaceTypeData = _ShippingSpaceTypeData,
-                    PassportTypeData = _PassportTypeData
+                    ClientData = clientData,
+                    ClientCompanyData = clientCompanyData
+                    //PassportTypeData = _PassportTypeData
                 };
                 _result.Code = 0;
                 _result.Data = _view;
@@ -120,8 +138,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 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");
+                    //data.IssueDt = data.IssueDt.DateFormat("yyyy-MM-dd");
+                    //data.ExpiryDt = data.ExpiryDt.DateFormat("yyyy-MM-dd");
                     _result.Code = 0;
                     _result.Data = data;
                 }
@@ -141,93 +159,504 @@ namespace OASystem.Infrastructure.Repositories.Groups
         /// <returns></returns>
         public async Task<Result> _AddOrEdit(TourClientListAddOrEditDto dto)
         {
-            if (dto.Id < 0) // 1 web 2 Android 3 ios
+            if (string.IsNullOrEmpty(dto.CompanyFullName))
             {
-                if (dto.Id == 0) // 添加
+                _result.Msg = "客户单位名称为空!";
+                return _result;
+            }
+
+            if (string.IsNullOrEmpty(dto.IDCardNo))
+            {
+                _result.Msg = "客户身份证No为空!";
+                return _result;
+            }
+
+            if (dto.ShippingSpaceTypeId < 0)
+            {
+                _result.Msg = "舱位类型为空!";
+                return _result;
+            }
+
+            if (dto.Id >= 0) 
+            {
+
+                #region 参数处理
+                _sqlSugar.BeginTran();
+                int clientId = -1;
+                int crmCompanyId = -1;
+                var clientInfo = await _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0 &&
+                                                                                         it.LastName.Equals(dto.LastName) &&
+                                                                                         it.FirstName.Equals(dto.FirstName) &&
+                                                                                         it.Phone.Equals(dto.Phone)
+                                                                                   ).FirstAsync();
+
+                Crm_CustomerCompany _CustomerCompany = new Crm_CustomerCompany()
+                {
+                    CompanyFullName = dto.CompanyFullName,
+                    LastedOpUserId = dto.UserId,
+                    CreateUserId = dto.UserId
+                };
+
+                Crm_CustomerCert _CustomerCert = new Crm_CustomerCert()
+                {
+                    SdId = 773,
+                    CertNo = dto.IDCardNo,
+                    CreateUserId = dto.UserId
+                };
+
+                Crm_DeleClient _DeleClient = new Crm_DeleClient()
                 {
-                    #region 参数处理
-                    _sqlSugar.BeginTran();
-                    int clientId = -1;
-                    var clientInfo = await _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0 &&
-                                                                                             it.LastName.Equals(dto.LastName) &&
-                                                                                             it.FirstName.Equals(dto.FirstName) &&
-                                                                                             it.Phone.Equals(dto.Phone)
+                    LastName = dto.LastName,
+                    FirstName = dto.FirstName,
+                    Pinyin = dto.Pinyin,
+                    Phone = dto.Phone,
+                    Sex = dto.Sex,
+                    BirthDay = dto.BirthDay,
+                    Job = dto.Job,
+                    CreateUserId = dto.UserId
+                };
+
+                //客户单位/公司 操作
+                //1.添加 or 修改 公司基本信息
+                if (clientInfo == null)
+                {
+                    var companyInfo = await _sqlSugar.Queryable<Crm_CustomerCompany>().Where(it => it.IsDel == 0 &&
+                                                                                                   it.CompanyFullName.Equals(dto.CompanyFullName)
+                                                                                             ).FirstAsync();
+                    if (companyInfo != null) crmCompanyId = companyInfo.Id;
+                    else
+                    {
+                        var companyAdd = await _sqlSugar.Insertable(_CustomerCompany).ExecuteReturnIdentityAsync();
+                        if (companyAdd < 0)
+                        {
+                            _result.Msg = "客户公司信息添加失败!";
+                            _sqlSugar.RollbackTran();
+                            return _result;
+                        }
+                        crmCompanyId = companyAdd;
+                    }
+                }
+                else
+                {
+                    var companyInfo = await _sqlSugar.Queryable<Crm_CustomerCompany>().Where(it => it.IsDel == 0 &&
+                                                                                                   it.Id == clientInfo.CrmCompanyId
+                                                                                             ).FirstAsync();
+                    if (companyInfo != null)
+                    {
+                        crmCompanyId = companyInfo.Id;
+                        if (!companyInfo.CompanyFullName.Equals(dto.CompanyFullName))
+                        {
+                            companyInfo.CompanyFullName = dto.CompanyFullName;
+                            var companyEdit = await _sqlSugar.Updateable(companyInfo).UpdateColumns(it =>
+                                                                                 new
+                                                                                 {
+                                                                                     it.CompanyFullName,
+                                                                                 }
+                                                                             )
+                                                                            .Where(it => it.Id == companyInfo.Id)
+                                                                            .ExecuteCommandAsync();
+                            if (companyEdit < 0)
+                            {
+                                _result.Msg = "客户公司信息修改失败!";
+                                _sqlSugar.RollbackTran();
+                                return _result;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        var companyAdd = await _sqlSugar.Insertable(_CustomerCompany).ExecuteReturnIdentityAsync();
+                        if (companyAdd < 0)
+                        {
+                            _result.Msg = "客户公司信息添加失败!";
+                            _sqlSugar.RollbackTran();
+                            return _result;
+                        }
+                        crmCompanyId = companyAdd;
+                    }
+                }
+
+                //客户人员 操作
+                //2.添加 or 修改 客户基本信息
+                if (clientInfo != null)  //该客户存在 修改信息 
+                {
+                    clientId = clientInfo.Id;
+                    var clientEdit = await _sqlSugar.Updateable(_DeleClient).UpdateColumns(it =>
+                                                                                 new
+                                                                                 {
+                                                                                     it.LastName,
+                                                                                     it.FirstName,
+                                                                                     it.Pinyin,
+                                                                                     it.Sex,
+                                                                                     it.Phone,
+                                                                                     it.BirthDay
+                                                                                 }
+                                                                             )
+                                                                            .Where(it => it.Id == clientId)
+                                                                            .ExecuteCommandAsync();
+                    if (clientEdit < 0)
+                    {
+                        _result.Msg = "客户基础信息修改失败!";
+                        _sqlSugar.RollbackTran();
+                        return _result;
+                    }
+                }
+                else //不存在添加 客户信息
+                {
+                    _DeleClient.CrmCompanyId = crmCompanyId;
+                    var clientAdd = await _sqlSugar.Insertable(_DeleClient).ExecuteReturnIdentityAsync();
+                    if (clientAdd < 0)
+                    {
+                        _result.Msg = "客户基本信息添加失败!";
+                        _sqlSugar.RollbackTran();
+                        return _result;
+                    }
+                    clientId = clientAdd;
+
+                }
+
+                //客户身份证操作
+                //3.添加 or 修改 身份证信息
+                _CustomerCert.DcId = clientId;
+                if (clientInfo == null)
+                {
+                    var certInfo = await _sqlSugar.Queryable<Crm_CustomerCert>().Where(it => it.IsDel == 0 &&
+                                                                                             it.SdId == 773 &&      //卡类型 身份证
+                                                                                             it.CertNo == dto.IDCardNo    //人员Id
                                                                                        ).FirstAsync();
-                    if (clientInfo != null)  //该客户存在 修改信息 
+                    if (certInfo == null)
                     {
-                        Crm_DeleClient _DeleClient = new Crm_DeleClient()
+                        var certAdd = await _sqlSugar.Insertable(_CustomerCert).ExecuteReturnIdentityAsync();
+                        if (certAdd < 0)
                         {
-                            LastName = dto.LastName,
-                            FirstName = dto.FirstName,
-                            Pinyin = dto.Pinyin,
-                            Sex = dto.Sex,
-                            Phone = dto.Phone,
-                            BirthDay = dto.BirthDay
-                        };
-
-
-                        clientId = clientInfo.Id;
-
-                        //1.修改基本信息
-                        var clientEdit = await _sqlSugar.Updateable(_DeleClient).UpdateColumns(it =>
-                                                                                     new
-                                                                                     {
-                                                                                         it.LastName,
-                                                                                         it.FirstName,
-                                                                                         it.Pinyin,
-                                                                                         it.Sex,
-                                                                                         it.Phone,
-                                                                                         it.BirthDay
-                                                                                     }
-                                                                                 )
-                                                                                .Where(it => it.Id == clientId)
-                                                                                .ExecuteCommandAsync();
-                        if (clientEdit < 0)
+                            _result.Msg = "客户身份证添加失败!";
+                            _sqlSugar.RollbackTran();
+                            return _result;
+                        }
+                    }
+                }
+                else
+                {
+                    var certInfo = await _sqlSugar.Queryable<Crm_CustomerCert>().Where(it => it.IsDel == 0 &&
+                                                                                             it.SdId == 773 &&      //卡类型 身份证
+                                                                                             it.DcId == clientInfo.Id    //人员Id
+                                                                                       ).FirstAsync();
+                    if (certInfo == null)
+                    {
+
+                        var certAdd = await _sqlSugar.Insertable(_CustomerCert).ExecuteReturnIdentityAsync();
+                        if (certAdd < 0)
                         {
+                            _result.Msg = "客户身份证添加失败!";
                             _sqlSugar.RollbackTran();
-                            _result.Msg = "客户基础信息修改失败!";
+                            return _result;
                         }
-                        //2.修改卡类型信息
-                        //2.1 修改身份证信息
+                    }
+                    else
+                    {
+                        var certEdit = await _sqlSugar.Updateable(_CustomerCert).UpdateColumns(it =>
+                                                                                 new
+                                                                                 {
+                                                                                     it.CertNo,
+                                                                                 }
+                                                                             )
+                                                                            .Where(it => it.Id == certInfo.Id)
+                                                                            .ExecuteCommandAsync();
+                        if (certEdit < 0)
+                        {
+                            _result.Msg = "客户身份证修改失败!";
+                            _sqlSugar.RollbackTran();
+                            return _result;
+                        }
+                    }
+                }
+
 
+                //团组客户信息名单操作
+                Grp_TourClientList _TourClientList = new Grp_TourClientList()
+                {
+                    DiId = dto.DiId,
+                    ClientId = clientId,
+                    ShippingSpaceTypeId = dto.ShippingSpaceTypeId,
+                    ShippingSpaceSpecialNeeds = dto.ShippingSpaceSpecialNeeds,
+                    HotelSpecialNeeds = dto.HotelSpecialNeeds,
+                    MealSpecialNeeds = dto.MealSpecialNeeds,
+                    Remark = dto.Remark,
+                    CreateUserId = dto.UserId
+                };
 
+                #endregion
+
+                if (dto.Id == 0) // 添加
+                {
+                    var tourClientAdd = await _sqlSugar.Insertable(_TourClientList).ExecuteReturnIdentityAsync();
+                    if (tourClientAdd < 0)
+                    {
+                        _result.Msg = "接团客户名单添加失败!";
+                        _sqlSugar.RollbackTran();
+                        return _result;
                     }
-                    else //不存在添加 客户信息
+                }
+                else if (dto.Id > 0) //修改
+                {
+                    var certEdit = await _sqlSugar.Updateable(_TourClientList).UpdateColumns(it =>
+                                                                                new
+                                                                                {
+                                                                                    it.ClientId,
+                                                                                    it.ShippingSpaceTypeId,
+                                                                                    it.ShippingSpaceSpecialNeeds,
+                                                                                    it.HotelSpecialNeeds,
+                                                                                    it.MealSpecialNeeds,
+                                                                                    it.Remark,
+                                                                                }
+                    )
+                                                                           .Where(it => it.Id == dto.Id)
+                                                                           .ExecuteCommandAsync();
+                    if (certEdit < 0)
                     {
-                        //1.添加基本信息
-                        //2.添加卡类型信息
-                        //2.1 添加身份证信息
-                        //2.2 添加护照信息
+                        _result.Msg = "接团客户名单失败修改!";
+                        _sqlSugar.RollbackTran();
+                        return _result;
                     }
+                }
+                
+                _result.Code = 0;
+                _sqlSugar.CommitTran();
+
+            }
+            else
+            {
+                _result.Msg = "请传入有效的id参数!";
+            }
+            return _result;
+        }
+
+
+        /// <summary>
+        /// AddMultiple
+        /// 添加多个
+        /// </summary>
+        /// <param name="portId"></param>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public async Task<Result> _AddMultiple(TourClientListAddMultipleDto dto)
+        {
+            if (dto.DiId < 0)
+            {
+                _result.Msg = string.Format(@"请传入有效的团组Id参数!");
+                return _result;
+            }
+            List<TourClientListInfo> _TourClientListInfos = dto.TourClientListInfos;
+            if (_TourClientListInfos == null || _TourClientListInfos.Count < 0)
+            {
+                _result.Msg = string.Format(@"接团客户名单信息集合为空,不执行批量添加!");
+                return _result;
+            }
+
+            List<Crm_DeleClient> _DeleClients = await _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0).ToListAsync();
+            List<Crm_CustomerCompany> _CustomerCompanies = await _sqlSugar.Queryable<Crm_CustomerCompany>().Where(it => it.IsDel == 0).ToListAsync();
+            List<Crm_CustomerCert> _CustomerCerts = await _sqlSugar.Queryable<Crm_CustomerCert>().Where(it => it.IsDel == 0 && it.SdId == 773).ToListAsync(); // 身份证类型证件信息
+
+            string _Msg = "";
+            int _DiId = dto.DiId;
+            int _UserId = dto.UserId;
 
+            foreach (var item in _TourClientListInfos)
+            {
+                _sqlSugar.BeginTran();
+                int companyId = -1;
+                int clientId = -1;
+                string clientName = string.Format(@"{0}{1}", item.LastName, item.FirstName);
+                Crm_DeleClient _DeleClientInfo = _DeleClients.Where(it => it.LastName.Equals(item.LastName) &&
+                                                                          it.FirstName.Equals(item.FirstName) &&
+                                                                          it.Phone.Equals(item.Phone)).FirstOrDefault();
+                if (_DeleClientInfo == null) //添加
+                {
+                    if (!string.IsNullOrEmpty(item.CompanyFullName))
+                    {
+                        var companyInfo = _CustomerCompanies.Where(it => it.CompanyFullName.Equals(item.CompanyFullName)).FirstOrDefault();
+                        if (companyInfo != null) companyId = companyInfo.Id;
+                        else
+                        {
+                            Crm_CustomerCompany _CustomerCompany = new Crm_CustomerCompany()
+                            {
+                                CompanyFullName = item.CompanyFullName,
+                                LastedOpUserId = _UserId,
+                                CreateUserId = _UserId
+                            };
 
-                    Grp_TourClientList _TourClientList = new Grp_TourClientList() {
-                        DiId = dto.DiId,
-                        ClientId = clientId,
-                        ShippingSpaceTypeId = dto.ShippingSpaceTypeId,
-                        ShippingSpaceSpecialNeeds = dto.ShippingSpaceSpecialNeeds,
-                        HotelSpecialNeeds = dto.HotelSpecialNeeds,
-                        MealSpecialNeeds = dto.MealSpecialNeeds,
-                        CreateUserId = dto.UserId,
-                        IsDel = 0
+                            var companyAdd = await _sqlSugar.Insertable(_CustomerCompany).ExecuteReturnIdentityAsync();
+                            if (companyAdd < 0)
+                            {
+                                _Msg += string.Format("{0} 公司信息添加失败!请前往客户信息确认!\r\n", clientName);
+                            }
+                            companyId = companyAdd;
+                        }
+                    }
+                    
+                    _DeleClientInfo = new Crm_DeleClient() 
+                    {
+                        LastName = item.LastName,
+                        FirstName = item.FirstName,
+                        CrmCompanyId = companyId,
+                        Job = item.Job,
+                        Sex = item.Sex,
+                        Phone = item.Phone,
+                        BirthDay = item.BirthDay,
                     };
+                    var clientAdd = await _sqlSugar.Insertable(_DeleClientInfo).ExecuteReturnIdentityAsync();
+                    if (clientAdd < 0)
+                    {
+                        _Msg += string.Format("{0} 基本信息添加失败,本条客户名单不添加!请重新添加!\r\n", clientName);
+                        _sqlSugar.RollbackTran();
+                        continue;
+                    }
+                    clientId = clientAdd;
 
+                    if (!string.IsNullOrEmpty(item.IDCardNo))
+                    {
+                        Crm_CustomerCert _CustomerCert = _CustomerCerts.Where(it => it.DcId == clientId && it.CertNo.Equals(item.IDCardNo)).FirstOrDefault();
+                        if (_CustomerCert == null)
+                        {
+                            _CustomerCert = new Crm_CustomerCert() 
+                            {
+                                DcId = clientId,
+                                SdId = 773,
+                                CertNo = item.IDCardNo,
+                                CreateUserId = _UserId,
+                            };
+                            var customerCertAdd = await _sqlSugar.Insertable(_CustomerCert).ExecuteCommandAsync();
+                            if (customerCertAdd < 0)
+                            {
+                                _Msg += string.Format("{0} 身份证信息添加失败!请前往客户信息确认!\r\n", clientName);
+                            }
+                        }
+                    }
 
-                    _sqlSugar.CommitTran();
-                    #endregion
+                }
+                else //修改客户基本信息
+                {
+                    clientId = _DeleClientInfo.Id;
 
+                    if (!string.IsNullOrEmpty(item.CompanyFullName))
+                    {
+                        var companyInfo = _CustomerCompanies.Where(it => it.CompanyFullName.Equals(item.CompanyFullName)).FirstOrDefault();
+                        if (companyInfo != null) companyId = companyInfo.Id;
+                        else
+                        {
+                            Crm_CustomerCompany _CustomerCompany = new Crm_CustomerCompany()
+                            {
+                                CompanyFullName = item.CompanyFullName,
+                                LastedOpUserId = _UserId,
+                                CreateUserId = _UserId
+                            };
+
+                            var companyAdd = await _sqlSugar.Insertable(_CustomerCompany).ExecuteReturnIdentityAsync();
+                            if (companyAdd < 0)
+                            {
+                                _Msg += string.Format("{0} 公司信息添加失败!请前往客户信息确认!\r\n", clientName);
+                            }
+                            companyId = companyAdd;
+                        }
+                    }
+
+                    Crm_DeleClient _DeleClient = new Crm_DeleClient() { 
+                        LastName = item.LastName,
+                        FirstName = item.FirstName,
+                        Sex = item.Sex,
+                        Phone = item.Phone,
+                        BirthDay = item.BirthDay
+                    };
+                    var clientEdit = await _sqlSugar.Updateable(_DeleClient).UpdateColumns(it =>
+                                                                                 new
+                                                                                 {
+                                                                                     it.LastName,
+                                                                                     it.FirstName,
+                                                                                     it.Sex,
+                                                                                     it.Phone,
+                                                                                     it.BirthDay
+                                                                                 }
+                                                                             )
+                                                                            .Where(it => it.Id == clientId)
+                                                                            .ExecuteCommandAsync();
+                    if (clientEdit < 0)
+                    {
+                        _Msg += string.Format("{0} 基本信息修改失败,!请前往客户信息修改!\r\n", clientName);
+                    }
 
                 }
-                else if (dto.Id > 0) //修改
-                { 
-                
+
+
+                //团组客户信息名单操作
+                Grp_TourClientList _TourClientList = new Grp_TourClientList()
+                {
+                    DiId = _DiId,
+                    ClientId = clientId,
+                    ShippingSpaceTypeId = item.ShippingSpaceTypeId,
+                    CreateUserId = _UserId
+                };
+                var tourClientAdd = await _sqlSugar.Insertable(_TourClientList).ExecuteReturnIdentityAsync();
+                if (tourClientAdd < 0)
+                {
+                    _Msg += string.Format("{0} 接团客户名单添加失败!请检查数据完整性后重新添加!\r\n", clientName);
+                    _sqlSugar.RollbackTran();
+                    continue;
                 }
 
+                _sqlSugar.CommitTran();
+            }
+
+            if (!string.IsNullOrEmpty(_Msg)) _result.Msg = _Msg;
+            else _result.Msg = string.Format("操作成功!");
+
+            _result.Code = 0;
+
+            return _result;
+        }
+
+
+        /// <summary>
+        /// Del
+        /// </summary>
+        /// <param name="portId"></param>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public async Task<Result> _Del(int id, int userId)
+        {
+
+            if (id > 0) 
+            {
+
+                Grp_TourClientList _TourClientList = new Grp_TourClientList()
+                {
+                    Id = id,
+                    IsDel = 1,
+                    DeleteUserId = userId,
+                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+                };
+
+                var certEdit = await _sqlSugar.Updateable(_TourClientList).UpdateColumns(it =>
+                                                                                new
+                                                                                {
+                                                                                    it.IsDel,
+                                                                                    it.DeleteUserId,
+                                                                                    it.DeleteTime,
+                                                                                }
+                    )
+                                                                           .Where(it => it.Id == id)
+                                                                           .ExecuteCommandAsync();
+                if (certEdit < 0)
+                {
+                    _result.Msg = string.Format(@"接团客户名单删除修改!");
+                    return _result;
+                }
+                _result.Code = 0;
             }
             else
             {
-                _result.Msg = "请传入有效的id参数!";
+                _result.Msg = string.Format(@"请传入有效的Id参数");
             }
+
             return _result;
         }
     }