using Aspose.Cells; using Aspose.Cells.Drawing.Texts; using Aspose.Words; using Aspose.Words.Tables; using NPOI.Util; using OASystem.API.OAMethodLib; using OASystem.API.OAMethodLib.File; using OASystem.Domain.Dtos.Groups; using OASystem.Domain.Entities.Groups; using OASystem.Domain.ViewModels.Groups; using OASystem.Infrastructure.Repositories.Groups; using TencentCloud.Ocr.V20181119.Models; using OASystem.Infrastructure.Tools; using System.Web; using System.Data; using static OASystem.Infrastructure.Repositories.Groups.AirTicketResRepository; using static OpenAI.GPT3.ObjectModels.SharedModels.IOpenAiModels; using Cell = Aspose.Words.Tables.Cell; using Row = Aspose.Words.Tables.Row; using System.Runtime.Intrinsics.Arm; using Microsoft.AspNetCore.Mvc.Filters; using OASystem.Domain.Entities.Customer; using NPOI.SS.Formula.Functions; using OASystem.Domain.Dtos.CRM; using System.Diagnostics; using MathNet.Numerics.Statistics.Mcmc; using AlibabaCloud.OpenApiClient.Models; using System; using NPOI.HPSF; using SqlSugar; using System.Collections; using Org.BouncyCastle.Ocsp; using System.Globalization; using static QRCoder.PayloadGenerator; using Bookmark = Aspose.Words.Bookmark; using Aspose.Words.Fields; using NPOI.POIFS.FileSystem; using Microsoft.AspNetCore.Mvc.ViewEngines; using OASystem.Domain.ViewModels.QiYeWeChat; using OASystem.Domain.Entities.Financial; using NPOI.POIFS.Crypt.Dsig; using System.Diagnostics.Eventing.Reader; using System.IO; using StackExchange.Redis; using Org.BouncyCastle.Utilities; using Aspose.Words.Drawing; using Aspose.Cells.Charts; using static NPOI.HSSF.Util.HSSFColor; using Quartz.Util; using Google.Protobuf.WellKnownTypes; using Microsoft.AspNetCore.SignalR; using OASystem.API.OAMethodLib.Hub.HubClients; using OASystem.API.OAMethodLib.Hub.Hubs; using System.Collections.Generic; using OASystem.API.OAMethodLib.JuHeAPI; using static Microsoft.EntityFrameworkCore.DbLoggerCategory; using SixLabors.Fonts.Tables.AdvancedTypographic; using Microsoft.EntityFrameworkCore; using System.Security.Cryptography.Xml; using MathNet.Numerics; using System.Security.Policy; using System.Xml; using OASystem.Domain.Dtos.QiYeWeChat; using static NPOI.POIFS.Crypt.CryptoFunctions; using Aspose.Words.Lists; using OASystem.API.OAMethodLib.YouDaoAPI; using NPOI.XSSF.Streaming.Values; using OASystem.API.OAMethodLib.Quartz.Business; using System.Linq; namespace OASystem.API.Controllers { /// /// 团组相关 /// //[Authorize] [Route("api/[controller]/[action]")] public class GroupsController : ControllerBase { private readonly GrpScheduleRepository _grpScheduleRep; private readonly IMapper _mapper; private readonly DelegationInfoRepository _groupRepository; private readonly TaskAssignmentRepository _taskAssignmentRep; private readonly AirTicketResRepository _airTicketResRep; private readonly DecreasePaymentsRepository _decreasePaymentsRep; private readonly InvitationOfficialActivitiesRepository _InvitationOfficialActivitiesRep; private readonly DelegationEnDataRepository _delegationEnDataRep; private readonly DelegationVisaRepository _delegationVisaRep; private readonly VisaPriceRepository _visaPriceRep; private readonly CarTouristGuideGroundRepository _carTouristGuideGroundRep; private readonly HotelPriceRepository _hotelPriceRep; private readonly CustomersRepository _customersRep; private readonly MessageRepository _message; private readonly SqlSugarClient _sqlSugar; private readonly TourClientListRepository _tourClientListRep; private readonly TeamRateRepository _teamRateRep; #region 成本相关 private readonly CheckBoxsRepository _checkBoxs; private readonly GroupCostRepository _GroupCostRepository; private readonly CostTypeHotelNumberRepository _CostTypeHotelNumberRepository; private readonly GroupCostParameterRepository _GroupCostParameterRepository; #endregion private readonly SetDataRepository _setDataRep; private string url; private string path; private readonly EnterExitCostRepository _enterExitCostRep; private readonly IHubContext _hubContext; private readonly UsersRepository _usersRep; private readonly IJuHeApiService _juHeApi; private readonly InvertedListRepository _invertedListRep; private readonly VisaFeeInfoRepository _visaFeeInfoRep; private readonly TicketBlackCodeRepository _ticketBlackCodeRep; public GroupsController(IMapper mapper, SqlSugarClient sqlSugar, GrpScheduleRepository grpScheduleRep, DelegationInfoRepository groupRepository, TaskAssignmentRepository taskAssignmentRep, AirTicketResRepository airTicketResRep, DecreasePaymentsRepository decreasePaymentsRep, InvitationOfficialActivitiesRepository InvitationOfficialActivitiesRep, DelegationEnDataRepository delegationEnDataRep, EnterExitCostRepository enterExitCostRep , DelegationVisaRepository delegationVisaRep, MessageRepository message, VisaPriceRepository visaPriceRep, CarTouristGuideGroundRepository carTouristGuideGroundRep, CheckBoxsRepository checkBoxs, GroupCostRepository GroupCostRepository, CostTypeHotelNumberRepository CostTypeHotelNumberRepository, GroupCostParameterRepository GroupCostParameterRepository, HotelPriceRepository hotelPriceRep, CustomersRepository customersRep, SetDataRepository setDataRep, TourClientListRepository tourClientListRep, TeamRateRepository teamRateRep, IHubContext hubContext, UsersRepository usersRep, IJuHeApiService juHeApi, InvertedListRepository invertedListRep, VisaFeeInfoRepository visaFeeInfoRep, TicketBlackCodeRepository ticketBlackCodeRep) { _mapper = mapper; _grpScheduleRep = grpScheduleRep; _groupRepository = groupRepository; _taskAssignmentRep = taskAssignmentRep; _airTicketResRep = airTicketResRep; _sqlSugar = sqlSugar; url = AppSettingsHelper.Get("ExcelBaseUrl"); path = AppSettingsHelper.Get("ExcelBasePath"); if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path);//不存在就创建文件夹 } _decreasePaymentsRep = decreasePaymentsRep; _InvitationOfficialActivitiesRep = InvitationOfficialActivitiesRep; _delegationEnDataRep = delegationEnDataRep; _enterExitCostRep = enterExitCostRep; _delegationVisaRep = delegationVisaRep; _message = message; _visaPriceRep = visaPriceRep; _carTouristGuideGroundRep = carTouristGuideGroundRep; _checkBoxs = checkBoxs; _GroupCostRepository = GroupCostRepository; _CostTypeHotelNumberRepository = CostTypeHotelNumberRepository; _GroupCostParameterRepository = GroupCostParameterRepository; _hotelPriceRep = hotelPriceRep; _customersRep = customersRep; _setDataRep = setDataRep; _tourClientListRep = tourClientListRep; _teamRateRep = teamRateRep; _hubContext = hubContext; _usersRep = usersRep; _juHeApi = juHeApi; _invertedListRep = invertedListRep; _visaFeeInfoRep = visaFeeInfoRep; _ticketBlackCodeRep = ticketBlackCodeRep; } #region 流程管控 /// /// 获取团组流程管控信息 /// /// 参数Json字符串 /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostSearchGrpSchedule(JsonDtoBase _jsonDto) { if (string.IsNullOrEmpty(_jsonDto.Paras)) { return Ok(JsonView(false, "参数为空")); } Grp_ScheduleDto _ScheduleDto = JsonConvert.DeserializeObject(_jsonDto.Paras); if (_ScheduleDto != null) { if (_ScheduleDto.SearchType == 2)//获取列表 { List _grpScheduleViewList = await _grpScheduleRep.GetViewList_GrpSchedule(_ScheduleDto); return Ok(JsonView(_grpScheduleViewList)); } else//获取对象 { Grp_ScheduleCombinView _grpScheduleView = await _grpScheduleRep.GetView_GrpSchedule(_ScheduleDto); if (_grpScheduleView != null) { return Ok(JsonView(_grpScheduleView)); } } } else { return Ok(JsonView(false, "参数反序列化失败")); } return Ok(JsonView(false, "暂无数据!")); } /// /// 修改团组流程管控详细表数据 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostUpdateGrpScheduleDetail(Grp_ScheduleDetailUpdDto dto) { Grp_ScheduleDetailInfo _detail = _mapper.Map(dto); var result = await _grpScheduleRep._sqlSugar.Updateable() .SetColumns(it => it.Duty == _detail.Duty) .SetColumns(it => it.ExpectBeginDt == _detail.ExpectBeginDt) .SetColumns(it => it.ExpectEndDt == _detail.ExpectEndDt) .SetColumns(it => it.JobContent == _detail.JobContent) .SetColumns(it => it.Remark == _detail.Remark) .SetColumns(it => it.StepStatus == _detail.StepStatus) .Where(s => s.Id == dto.Id) //.UpdateColumns(s => new { s.Duty, s.ExpectBeginDt, s.ExpectEndDt, s.JobContent, s.Remark, s.StepStatus }) .ExecuteCommandAsync(); if (result > 0) { return Ok(JsonView(true, "保存成功!")); } return Ok(JsonView(false, "保存失败!")); } /// /// 删除团组流程管控详细表数据,删除人Id请放在Duty /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostDeleteGrpScheduleDetail(Grp_ScheduleDetailUpdDto dto) { Grp_ScheduleDetailInfo _detail = _mapper.Map(dto); _detail.IsDel = 1; _detail.DeleteUserId = dto.Duty; _detail.DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var result = await _grpScheduleRep._sqlSugar.Updateable() .SetColumns(it => it.IsDel == _detail.IsDel) .SetColumns(it => it.DeleteUserId == _detail.DeleteUserId) .SetColumns(it => it.DeleteTime == _detail.DeleteTime) .Where(it => it.Id == dto.Id) //.UpdateColumns(s => new { s.IsDel, s.DeleteUserId, s.DeleteTime }) //.WhereColumns(s => s.Id == dto.Id) .ExecuteCommandAsync(); if (result > 0) { return Ok(JsonView(true, "删除成功!")); } return Ok(JsonView(false, "删除失败!")); } /// /// 增加团组流程管控详细表数据 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostInsertGrpScheduleDetail(Grp_ScheduleDetailInsertDto dto) { Grp_ScheduleDetailInfo _detail = _mapper.Map(dto); if (DateTime.Now < _detail.ExpectBeginDt) { _detail.StepStatus = 0; } else {//若大于设置时间,不考虑设置的预计结束日期,统一视为进行中 _detail.StepStatus = 1; } var result = await _grpScheduleRep._sqlSugar.Insertable(_detail).ExecuteReturnIdentityAsync(); if (result > 0) { Grp_ScheduleDetailView _result = await _grpScheduleRep.GetInsertBackData(result); return Ok(JsonView(true, "添加成功!", _result)); } return Ok(JsonView(false, "添加失败!")); } #endregion #region 团组基本信息 /// /// 接团信息列表 /// /// 团组列表请求dto /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GetGroupList(GroupListDto dto) { var groupData = await _groupRepository.GetGroupList(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(groupData.Data)); } /// /// 接团信息列表 Page /// /// 团组列表请求dto /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostGroupPageList(GroupPageListDto dto) { #region 参数验证 if (dto.UserId < 1) return Ok(JsonView(false, "员工Id为空")); if (dto.PageId < 1) return Ok(JsonView(false, "页面Id为空")); PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(dto.UserId, dto.PageId); if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限")); #endregion #endregion if (dto.PortType == 1 || dto.PortType == 2) // web/Android { string sqlWhere = string.Empty; if (dto.IsSure == 0) //未完成 { sqlWhere += string.Format(@" And IsSure = 0"); } else if (dto.IsSure == 1) //已完成 { sqlWhere += string.Format(@" And IsSure = 1"); } if (!string.IsNullOrEmpty(dto.SearchCriteria)) { string tj = dto.SearchCriteria; sqlWhere += string.Format(@"And (ssd.Name Like '%{0}%' Or TeamName Like '%{1}%' Or ClientName Like '%{2}%' Or ClientName Like '%{3}%' Or su.CnName Like '%{4}%')", tj, tj, tj, tj, tj); } string sql = string.Format(@"Select Row_Number,Id,SalesQuoteNo,TourCode,TeamTypeId, TeamType, TeamLevId,TeamLev,TeamName,ClientName,ClientUnit, VisitDate,VisitDays,VisitPNumber,JietuanOperatorId, JietuanOperator,IsSure,CreateTime From ( Select row_number() over(order by gdi.CreateTime Desc) as Row_Number, gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType, ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit, VisitDate,VisitDays,VisitPNumber,JietuanOperator JietuanOperatorId, su.CnName JietuanOperator,IsSure,gdi.CreateTime From Grp_DelegationInfo gdi Left Join Sys_SetData ssd On gdi.TeamDid = ssd.Id Left Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id Left Join Sys_Users su On gdi.JietuanOperator = su.Id Where gdi.IsDel = 0 {0} ) temp", sqlWhere); RefAsync total = 0;//REF和OUT不支持异步,想要真的异步这是最优解 var _DelegationList = await _sqlSugar.SqlQueryable(sql).ToPageListAsync(dto.PageIndex, dto.PageSize, total);//ToPageAsync #region 处理所属部门 /* * 1.sq 和 gyy 等显示 市场部 * 2.王鸽和主管及张总还有管理员号统一国交部 * 2-1. 4 管理员 ,21 张海麟 */ List userIds = _DelegationList.Select(it => it.JietuanOperatorId).ToList(); List userIds1 = new List() { 4, 21 }; var UserDepDatas = _sqlSugar.Queryable() .LeftJoin((u, d) => u.DepId == d.Id) .Where(u => u.IsDel == 0 && userIds.Contains(u.Id)) .Select((u, d) => new { UserId = u.Id, DepName = userIds1.Contains(u.Id) ? "国交部" : d.DepName }) .ToList(); foreach (var item in _DelegationList) { item.Department = UserDepDatas.Find(it => item.JietuanOperatorId == it.UserId)?.DepName ?? "Unknown"; } #endregion var _view = new { PageFuncAuth = pageFunAuthView, Data = _DelegationList }; return Ok(JsonView(true, "查询成功!", _view, total)); } else { return Ok(JsonView(false, "查询失败")); } } /// /// 团组列表 /// /// [HttpPost] public async Task GetGroupListByWhere(GroupListByWhere dto) { #region 参数验证 if (dto.UserId < 1) return Ok(JsonView(false, "员工Id为空")); if (dto.PageId < 1) return Ok(JsonView(false, "页面Id为空")); PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(dto.UserId, dto.PageId); if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限")); #endregion #endregion if (dto.PortType != 1 && dto.PortType != 2) { return Ok(JsonView(false, "查询失败!")); } string orderbyStr = "order by gdi.CreateTime Desc"; string sqlWhere = string.Empty; if (dto.IsSure == 0) //未完成 { sqlWhere += string.Format(@" And IsSure = 0"); } else if (dto.IsSure == 1) //已完成 { sqlWhere += string.Format(@" And IsSure = 1"); } //团组类型 if (dto.TeamDid > 0) { sqlWhere += string.Format(@"And TeamDid = {0} ", dto.TeamDid); } //团组名称 if (!string.IsNullOrEmpty(dto.TeamName)) { sqlWhere += string.Format(@"And TeamName Like '%{0}%'", dto.TeamName); } //客户名称 if (!string.IsNullOrEmpty(dto.ClientName)) { sqlWhere += string.Format(@"And ClientName Like '%{0}%'", dto.ClientName); } //客户单位 if (!string.IsNullOrEmpty(dto.ClientUnit)) { sqlWhere += string.Format(@"And ClientUnit Like '%{0}%'", dto.ClientUnit); } //出访时间 if (!string.IsNullOrEmpty(dto.visitDataTime)) { sqlWhere += string.Format(@"And VisitDate >= '{0}'", dto.visitDataTime); orderbyStr = "order by gdi.VisitDate"; } string sql = string.Format(@"Select Row_Number,Id,SalesQuoteNo,TourCode,TeamTypeId, TeamType, TeamLevId,TeamLev,TeamName,ClientName,ClientUnit, VisitDate,VisitDays,VisitPNumber,JietuanOperatorId, JietuanOperator,IsSure,CreateTime From ( Select row_number() over({0}) as Row_Number, gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType, ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit, VisitDate,VisitDays,VisitPNumber,JietuanOperator JietuanOperatorId, su.CnName JietuanOperator,IsSure,gdi.CreateTime From Grp_DelegationInfo gdi Left Join Sys_SetData ssd On gdi.TeamDid = ssd.Id Left Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id Left Join Sys_Users su On gdi.JietuanOperator = su.Id Where gdi.IsDel = 0 {1} ) temp ", orderbyStr, sqlWhere); RefAsync total = 0;//REF和OUT不支持异步,想要真的异步这是最优解 var _DelegationList = await _sqlSugar.SqlQueryable(sql).ToPageListAsync(dto.PageIndex, dto.PageSize, total);//ToPageAsync #region 处理所属部门 /* * 1.sq 和 gyy 等显示 市场部 * 2.王鸽和主管及张总还有管理员号统一国交部 * 2-1. 4 管理员 ,21 张海麟 */ List userIds = _DelegationList.Select(it => it.JietuanOperatorId).ToList(); List userIds1 = new List() { 4, 21 }; var UserDepDatas = _sqlSugar.Queryable() .LeftJoin((u, d) => u.DepId == d.Id) .Where(u => u.IsDel == 0 && userIds.Contains(u.Id)) .Select((u, d) => new { UserId = u.Id, DepName = userIds1.Contains(u.Id) ? "国交部" : d.DepName }) .ToList(); foreach (var item in _DelegationList) { item.Department = UserDepDatas.Find(it => item.JietuanOperatorId == it.UserId)?.DepName ?? "Unknown"; } #endregion var _view = new { PageFuncAuth = pageFunAuthView, Data = _DelegationList }; return Ok(JsonView(true, "查询成功!", _view, total)); } /// /// 接团信息详情 /// /// 团组info请求dto /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GetGroupInfo(GroupInfoDto dto) { var groupData = await _groupRepository.GetGroupInfo(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(groupData.Data)); } /// /// 接团信息 编辑添加 /// 基础信息数据源 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GroupEditBasicSource(GroupListDto dto) { var groupData = await _groupRepository.GroupEditBasicSource(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(groupData.Data)); } /// /// 接团信息 操作(增改) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GroupOperation(GroupOperationDto dto) { try { var groupData = await _groupRepository.GroupOperation(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } int diId = 0; //添加时 默认加入团组汇率 if (dto.Status == 1) //添加 { diId = groupData.Data; //添加默认币种 await GeneralMethod.PostGroupRateAddInit(dto.UserId, diId); //默认分配权限 await GeneralMethod.PostGroupAuthAddInit(dto.UserId, diId); //消息提示 王鸽 主管号 List _managerIds = new List() { 22, 32 }; var userIds = _usersRep._sqlSugar.Queryable().Where(it => it.IsDel == 0 && _managerIds.Contains(it.JobPostId)).Select(it => it.Id).ToList(); if (userIds.Count > 0) { userIds.Add(208); //创建团组管控 GroupStepForDelegation.CreateWorkStep(diId); //发送消息 string groupName = dto.TeamName; string createGroupUser = string.Empty; var userInfo = _usersRep._sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.Id == dto.UserId).First(); if (userInfo != null) createGroupUser = userInfo.CnName; string title = $"系统通知"; string content = $"团组[{groupName}(创建人:{createGroupUser})]创建成功,请前往页面进行下一步操作!"; await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.GroupBusinessOperations, title, content, userIds, diId); } //默认创建倒推表 await _invertedListRep._Create(dto.UserId, diId); } else if (dto.Status == 2) { diId = dto.Id; } return Ok(JsonView(true, "操作成功!", diId)); } catch (Exception ex) { Logs("[response]" + JsonConvert.SerializeObject(dto)); Logs(ex.Message); return Ok(JsonView(false, ex.Message)); } } /// /// 接团流程操作(增改) /// 安卓端使用 建团时添加客户名单 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GroupProcessOperation(GroupProcessOperationDto dto) { try { #region 参数验证 if (dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数")); PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 //pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(dto.UserId, 104); //if (pageFunAuthView.AddAuth == 0) return Ok(JsonView(false, "客户名单您没有添加权限!")); pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(dto.UserId, 27); if (pageFunAuthView.AddAuth == 0) return Ok(JsonView(false, "团组操作您没有添加权限!")); #endregion #endregion _sqlSugar.BeginTran(); var _dto = new GroupOperationDto(); _dto = _mapper.Map(dto); var groupData = await _groupRepository.GroupOperation(_dto); if (groupData.Code != 0) { return Ok(JsonView(false, "团组操作添加失败!" + groupData.Msg)); } int diId = 0; //添加时 默认加入团组汇率 if (dto.Status == 1) //添加 { diId = groupData.Data; //添加默认币种 await GeneralMethod.PostGroupRateAddInit(dto.UserId, diId); //默认分配权限 await GeneralMethod.PostGroupAuthAddInit(dto.UserId, diId); //消息提示 王鸽 主管号 List _managerIds = new List() { 22, 32 }; var userIds = _usersRep._sqlSugar.Queryable().Where(it => it.IsDel == 0 && _managerIds.Contains(it.JobPostId)).Select(it => it.Id).ToList(); if (userIds.Count > 0) { userIds.Add(208); //创建团组管控 GroupStepForDelegation.CreateWorkStep(diId); //发送消息 string groupName = dto.TeamName; string createGroupUser = string.Empty; var userInfo = _usersRep._sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.Id == dto.UserId).First(); if (userInfo != null) createGroupUser = userInfo.CnName; string title = $"系统通知"; string content = $"团组[{groupName}(创建人:{createGroupUser})]创建成功,请前往页面进行下一步操作!"; await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.GroupBusinessOperations, title, content, userIds, diId); } } if (dto.Status == 2) { diId = dto.Id; if (diId == 0) { return Ok(JsonView(false, "修改失败! 未添加团组id" + groupData.Msg)); } } var viewData = await _tourClientListRep.OperMultiple(dto.TourClientListInfos, diId, dto.UserId); if (viewData.Code != 0) { _sqlSugar.RollbackTran(); return Ok(JsonView(false, "客户名单添加失败!" + viewData.Msg)); } _sqlSugar.CommitTran(); return Ok(JsonView(true, "添加成功")); } catch (Exception ex) { _sqlSugar.RollbackTran(); return Ok(JsonView(false, ex.Message)); } } /// /// 接团信息 操作(删除) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GroupDel(GroupDelDto dto) { try { var groupData = await _groupRepository.GroupDel(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true)); } catch (Exception ex) { Logs("[response]" + JsonConvert.SerializeObject(dto)); Logs(ex.Message); return Ok(JsonView(false, ex.Message)); } } /// /// 获取团组销售报价号 /// 团组添加时 使用 /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GetGroupSalesQuoteNo() { var groupData = await _groupRepository.GetGroupSalesQuoteNo(); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } object salesQuoteNo = new { SalesQuoteNo = groupData.Data }; return Ok(JsonView(salesQuoteNo)); } /// /// 设置确认出团 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task SetConfirmationGroup(ConfirmationGroupDto dto) { var groupData = await _groupRepository.ConfirmationGroup(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } GroupStepForDelegation.CreateWorkStep(dto.GroupId); //创建管控流程 return Ok(JsonView(true, "操作成功!", groupData.Data)); } /// /// 获取团组名称data And 签证国别Data /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GetGroupNameAndVisaNationality(GroupNameDto dto) { var groupData = await _groupRepository.GetGroupNameAndVisaNationality(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(groupData.Data)); } /// /// 根据CTable类型返回对应的团组名称及简单数据(APP端) /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostGroupNameAndEasy(DecreasePaymentsDto dto) { try { Result groupData = await _decreasePaymentsRep.PostGroupNameAndEasy(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } #endregion #region 团组&签证 /// /// 根据团组Id获取签证客户信息List /// /// 请求dto /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GetCrmByGroupId(ClientByGroupIdDto dto) { var groupData = await _groupRepository.GetCrmByGroupId(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(groupData.Data)); } /// /// IOS获取团组签证拍照上传进度01(团组列表) /// /// 请求dto /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostIOSVisaProgress(IOS_VisaDto dto) { if (dto == null) { return Ok(JsonView(false, "参数为空")); } DelegationVisaViewList visaList = _delegationVisaRep.GetDelegationList(dto); return Ok(JsonView(visaList)); } /// /// IOS获取团组签证拍照上传进度02(团组签证详情\人员列表\国家) /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostIOSVisaProgressContent(IOS_VisaCustomerListDto dto) { if (dto == null) { return Ok(JsonView(false, "请求错误:")); } List list = _delegationVisaRep.GetDelegationProgressList(dto.diId); return Ok(JsonView(list)); } /// /// IOS获取团组签证拍照上传进度03(相册) /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostIOSVisaProgressImageList(IOS_VisaImageListDto dto) { if (dto == null) { return Ok(JsonView(false, "请求错误:")); } List list = _delegationVisaRep.GetVisaProgressImageList(dto.visaProgressCustomerId, dto.picType); string url = AppSettingsHelper.Get("VisaProgressImageBaseUrl") + AppSettingsHelper.Get("VisaProgressImageFtpPath"); list.ForEach(s => s.url = url); return Ok(JsonView(list)); } /// /// IOS获取团组签证拍照上传进度04(图片上传) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostIOSVisaProgressUploadImage(IOS_VisaUploadImageDto dto) { //string result = decodeBase64ToImage(dto.base64DataURL, dto.imageName); //if (!string.IsNullOrEmpty(result)) //{ //} //else { // return Ok(JsonView(false, "上传失败")); //} DateTime dt1970 = new DateTime(1970, 1, 1, 0, 0, 0, 0); int sucNum = 0; try { foreach (var item in dto.base64DataList) { string imageName = dto.imageName + ((DateTime.Now.Ticks - dt1970.Ticks) / 10000).ToString(); string result = decodeBase64ToImage(item, imageName); if (!string.IsNullOrEmpty(result)) { Grp_VisaProgressCustomerPicture pic = new Grp_VisaProgressCustomerPicture(); pic.CreateUserId = dto.CreateUserId; pic.PicName = imageName; pic.PicPath = result; pic.VisaProgressCustomerId = dto.visaProgressCustomerId; int insertResult = await _delegationVisaRep.AddAsync(pic); if (insertResult > 0) { sucNum++; } } } } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } string msg = string.Format(@"成功上传{0}张", sucNum); return Ok(JsonView(true, msg)); } private string decodeBase64ToImage(string base64DataURL, string imgName) { string filename = "";//声明一个string类型的相对路径 String base64 = base64DataURL.Substring(base64DataURL.IndexOf(",") + 1); //将‘,’以前的多余字符串删除 System.Drawing.Bitmap bitmap = null;//定义一个Bitmap对象,接收转换完成的图片 try//会有异常抛出,try,catch一下 { byte[] arr = Convert.FromBase64String(base64);//将纯净资源Base64转换成等效的8位无符号整形数组 System.IO.MemoryStream ms = new System.IO.MemoryStream(arr);//转换成无法调整大小的MemoryStream对象 bitmap = new System.Drawing.Bitmap(ms);//将MemoryStream对象转换成Bitmap对象 var fileDir = AppSettingsHelper.Get("VisaProgressImageBasePath"); //文件名称 filename = "VisaProgress_" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + imgName + ".jpeg";//所要保存的相对路径及名字 //上传的文件的路径 string filePath = ""; if (!Directory.Exists(fileDir)) { Directory.CreateDirectory(fileDir); } //上传的文件的路径 filePath = fileDir + filename; //string url = HttpRuntime.AppDomainAppPath.ToString(); //string tmpRootDir = System.Web.HttpContext.Current.Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString()); //获取程序根目录 //string imagesurl2 = tmpRootDir + filename; //转换成绝对路径 bitmap.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);//保存到服务器路径 //bitmap.Save(filePath + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp); //bitmap.Save(filePath + ".gif", System.Drawing.Imaging.ImageFormat.Gif); //bitmap.Save(filePath, System.Drawing.Imaging.ImageFormat.Png); ms.Close();//关闭当前流,并释放所有与之关联的资源 bitmap.Dispose(); } catch (Exception e) { string massage = e.Message; Logs("IOS图片上传Error:" + massage); //filename = e.Message; } return filename;//返回相对路径 } /// /// IOS获取团组签证拍照上传进度05(修改签证状态/通知) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostIOSVisaProgressChangeStatus(IOS_VisaChangeStatusDto dto) { if (dto == null) { return Ok(JsonView(false, "请求错误:")); } string msg = "参数错误"; if (dto.diId > 0 && dto.visaStatus > 0 && dto.visaStatus < 4) { try { //_delegationVisaRep.BeginTran(); var updCount = await _delegationVisaRep._sqlSugar.Updateable() .SetColumns(it => it.WorkStatus == dto.visaStatus) .Where(s => s.Id == dto.visaProgressCustomerId) .ExecuteCommandAsync(); if (updCount > 0 && dto.publishCode == 1) { _delegationVisaRep.ChangeDataBase(DBEnum.OA2014DB); //切换到新OA后删除 string sqlDelegation = string.Format(@" Select * From DelegationInfo With(Nolock) Where Id = {0} ", dto.diId); OA2021_DelegationInfo groupData = _sqlSugar.SqlQueryable(sqlDelegation).First(); //GroupInfoDto grpDto = new GroupInfoDto() { Id = dto.diId }; //var groupData = await _groupRepository.GetGroupInfo(grpDto); _delegationVisaRep.ChangeDataBase(DBEnum.OA2023DB); //切换到新OA后删除 if (groupData == null) { _delegationVisaRep.RollbackTran(); } string title = string.Format(@"[签证进度更新]"); string content = string.Format(@"测试文本"); bool rst = await _message.AddMsg(new MessageDto() { Type = MessageTypeEnum.GroupVisaProgressUpdate, IssuerId = dto.publisher, Title = title, Content = content, ReleaseTime = DateTime.Now, UIdList = new List { 234 } }); if (rst) { return Ok(JsonView(true, "发送通知成功")); } } //_delegationVisaRep.CommitTran(); } catch (Exception) { //_delegationVisaRep.RollbackTran(); } } return Ok(JsonView(true, msg)); } #endregion #region 团组任务分配 /// /// 团组任务分配初始化 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GetTaskAssignmen() { var groupData = await _taskAssignmentRep.GetTaskAssignmen(); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } /// /// 团组任务分配查询 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task TaskAssignmenQuery(TaskAssignmenQueryDto dto) { var groupData = await _taskAssignmentRep.TaskAssignmenQuery(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } /// /// 团组任务分配操作 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GetTaskAssignmenOp(TaskAssignmenDto dto) { Result groupData = await _taskAssignmentRep.GetTaskAssignmenOp(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } #endregion #region 团组费用审核 /// /// 费用审核 /// 团组列表 Page /// /// 团组列表请求dto /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostExpenseAuditGroupPageItems(ExpenseAuditGroupPageItemsDto _dto) { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空")); if (_dto.PageId < 1) return Ok(JsonView(false, "页面Id为空")); PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限")); #endregion #endregion if (_dto.PortType == 1 || _dto.PortType == 2 || _dto.PortType == 2) // web/Android/IOS { string sqlWhere = string.Empty; if (_dto.IsSure == 0) //未完成 { sqlWhere += string.Format(@" And IsSure = 0"); } else if (_dto.IsSure == 1) //已完成 { sqlWhere += string.Format(@" And IsSure = 1"); } if (!string.IsNullOrEmpty(_dto.SearchCriteria)) { string tj = _dto.SearchCriteria; sqlWhere += string.Format(@"And (ssd.Name Like '%{0}%' Or TeamName Like '%{1}%' Or ClientName Like '%{2}%' Or ClientName Like '%{3}%' Or su.CnName Like '%{4}%')", tj, tj, tj, tj, tj); } string sql = string.Format(@"Select Row_Number,Id,SalesQuoteNo,TourCode,TeamTypeId, TeamType, TeamName,ClientName,ClientUnit, TeamLevId,TeamLev,VisitDate, VisitDays,VisitPNumber,JietuanOperator,IsSure,CreateTime From ( Select row_number() over(order by gdi.VisitDate Desc) as Row_Number, gdi.Id,SalesQuoteNo,TourCode,ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName, ClientName,ClientUnit,ssd.Id TeamTypeId, ssd.Name TeamType,VisitDate, VisitDays,VisitPNumber,su.CnName JietuanOperator,IsSure,gdi.CreateTime From Grp_DelegationInfo gdi Inner Join Sys_SetData ssd On gdi.TeamDid = ssd.Id Inner Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id Left Join Sys_Users su On gdi.JietuanOperator = su.Id Where gdi.IsDel = 0 {0} ) temp ", sqlWhere); RefAsync total = 0;//REF和OUT不支持异步,想要真的异步这是最优解 var _DelegationList = await _sqlSugar.SqlQueryable(sql).ToPageListAsync(_dto.PageIndex, _dto.PageSize, total);//ToPageAsync var _view = new { PageFuncAuth = pageFunAuthView, Data = _DelegationList }; return Ok(JsonView(true, "查询成功!", _view, total)); } else { return Ok(JsonView(false, "查询失败")); } } /// /// 获取团组费用审核 /// /// 参数Json字符串 /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostSearchGrpCreditCardPayment(Search_GrpCreditCardPaymentDto _dto) { try { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空")); if (_dto.PageId < 1) return Ok(JsonView(false, "页面Id为空")); if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空")); PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限")); #endregion #endregion Grp_CreditCardPaymentView _view = new Grp_CreditCardPaymentView(); List clientNameList = getSimplClientList(_dto.DiId); #region 费用清单 var exp = Expressionable.Create(); exp.AndIF(_dto.AuditStatus != -1, it => it.IsAuditGM == _dto.AuditStatus); exp.AndIF(_dto.Label != -1, it => it.CTable == _dto.Label); List entityList = _groupRepository .Query(s => s.DIId == _dto.DiId && s.IsDel == 0 && s.CreateUserId > 0) .Where(exp.ToExpression()) .ToList(); List detailList = new List(); List ccpCurrencyPrices = new List(); /* * 76://酒店预订 */ List _HotelReservations = await _groupRepository .Query(s => s.DiId == _dto.DiId && s.IsDel == 0) .ToListAsync(); /* * 79://车/导游地接 */ List _CarTouristGuideGroundReservations = await _groupRepository .Query(s => s.DiId == _dto.DiId && s.IsDel == 0) .ToListAsync(); List _CarTouristGuideGroundReservationsContent = await _groupRepository .Query(s => s.DiId == _dto.DiId && s.IsDel == 0) .ToListAsync(); /* * 80: //签证 */ List _VisaInfos = await _groupRepository .Query(s => s.DIId == _dto.DiId && s.IsDel == 0) .ToListAsync(); /* *81: //邀请/公务活动 */ List _InvitationOfficialActivities = await _groupRepository .Query(s => s.DiId == _dto.DiId && s.IsDel == 0) .ToListAsync(); /* * 82: //团组客户保险 */ List _Customers = await _groupRepository.Query(s => s.DiId == _dto.DiId && s.IsDel == 0).ToListAsync(); /* * Lable = 85 机票预订 */ List p_AirTicketReservations = await _groupRepository .Query(s => s.DIId == _dto.DiId && s.IsDel == 0) .ToListAsync(); /* * 85 机票预定 */ List _AirTicketReservations = await _groupRepository.Query(s => s.DIId == _dto.DiId && s.IsDel == 0).ToListAsync(); /* * 98 其他款项 */ List _DecreasePayments = await _groupRepository .Query(s => s.DiId == _dto.DiId && s.IsDel == 0) .ToListAsync(); /* * 285:收款退还 */ List _PaymentRefundAndOtherMoneys = await _groupRepository .Query(s => s.DiId == _dto.DiId && s.IsDel == 0) .ToListAsync(); /* * 1015: //超支费用 */ List _GroupExtraCosts = await _groupRepository.Query(s => s.DiId == _dto.DiId && s.IsDel == 0).ToListAsync(); /* * 币种信息 */ var currencyItems = await _groupRepository.Query(s => s.STid == 66 && s.IsDel == 0).ToListAsync(); /* * 车/导游地接 费用类型 */ var carFeeTypeItems = await _groupRepository.Query(s => s.STid == 17 && s.IsDel == 0).ToListAsync(); /* * 车/导游地接 费用类型 */ var carFeeItems = await _groupRepository.Query(s => s.STid == 83 && s.IsDel == 0).ToListAsync(); var cityData = await _groupRepository.Query(s => s.IsDel == 0).ToListAsync(); /* * 用户信息 */ var userItems = await _groupRepository.Query(s => s.IsDel == 0).ToListAsync(); /* * 费用模块 */ Sys_SetData sdPriceName = _groupRepository.Query(s => s.Id == _dto.Label).First(); string priceModule = string.Empty; if (sdPriceName != null) { priceModule = sdPriceName.Name; } /* * 处理详情数据 */ foreach (var entity in entityList) { Grp_CreditCardPaymentDetailView _detail = new Grp_CreditCardPaymentDetailView(); _detail.Id = entity.Id; _detail.PriceName = priceModule; /* * 应付款金额 */ Sys_SetData sdPaymentCurrency_WaitPay = currencyItems.Where(s => s.Id == entity.PaymentCurrency).FirstOrDefault(); string PaymentCurrency_WaitPay = "Unknown"; string hotelCurrncyCode = "Unknown"; string hotelCurrncyName = "Unknown"; if (sdPaymentCurrency_WaitPay != null) { PaymentCurrency_WaitPay = sdPaymentCurrency_WaitPay.Name; hotelCurrncyCode = sdPaymentCurrency_WaitPay.Name; hotelCurrncyName = sdPaymentCurrency_WaitPay.Remark; if (hotelCurrncyCode.Equals("CNY")) { entity.DayRate = 1.0000M; } } _detail.WaitPay = entity.PayMoney.ConvertToDecimal1().ToString("#0.00") + " " + PaymentCurrency_WaitPay; /* * 此次付款金额 */ decimal CurrPayStr = 0; if (entity.PayPercentage == 0) { if (entity.PayThenMoney != 0) CurrPayStr = (entity.PayThenMoney * entity.DayRate).ConvertToDecimal1(); } else { CurrPayStr = (entity.PayMoney * entity.PayPercentage / 100 * entity.DayRate).ConvertToDecimal1(); } _detail.CurrPay = CurrPayStr.ToString("#0.00") + " CNY"; /* * 剩余尾款 */ decimal BalanceStr = 0; if (entity.PayMoney - (CurrPayStr / entity.DayRate) < 0.01M) BalanceStr = 0; else BalanceStr = (entity.PayMoney - CurrPayStr / entity.DayRate).ConvertToDecimal1(); _detail.Balance = BalanceStr.ToString("#0.00") + " " + PaymentCurrency_WaitPay; /* * Bus名称 */ _detail.BusName = "待增加"; /* *费用所属 */ switch (entity.CTable) { case 76://酒店预订 Grp_HotelReservations hotelReservations = _HotelReservations.Where(s => s.Id == entity.CId).FirstOrDefault(); if (hotelReservations != null) { string GovernmentRentCode = "", GovernmentRentName = "", CityTaxCode = "", CityTaxName = "", BreakfastCode = "", BreakfastName = ""; Sys_SetData sdPaymentCurrency_GovernmentRent = currencyItems.Where(s => s.Id == hotelReservations.GovernmentRentCurrency).FirstOrDefault(); if (sdPaymentCurrency_GovernmentRent != null) { GovernmentRentCode = sdPaymentCurrency_GovernmentRent.Name; GovernmentRentName = sdPaymentCurrency_GovernmentRent.Remark; } Sys_SetData sdPaymentCurrency_CityTax = currencyItems.Where(s => s.Id == hotelReservations.CityTaxCurrency).FirstOrDefault(); if (sdPaymentCurrency_CityTax != null) { CityTaxCode = sdPaymentCurrency_CityTax.Name; CityTaxName = sdPaymentCurrency_CityTax.Remark; } Sys_SetData sdPaymentCurrency_Breakfast = currencyItems.Where(s => s.Id == hotelReservations.BreakfastCurrency).FirstOrDefault(); if (sdPaymentCurrency_Breakfast != null) { BreakfastCode = sdPaymentCurrency_Breakfast.Name; BreakfastName = sdPaymentCurrency_Breakfast.Remark; } string isoppayStr = hotelReservations.Isoppay == 0 ? "是" : "否"; _detail.PriceMsgContent = $"信用卡金额:{_detail.WaitPay} ({hotelCurrncyName})
" + $"房间说明: {hotelReservations.Remark}
" + $"地税: {hotelReservations.GovernmentRent.ToString("#0.00")} {GovernmentRentCode} ({GovernmentRentName})
" + $"城市税: {hotelReservations.CityTax.ToString("#0.00")} {CityTaxCode} ({CityTaxName})
" + $"酒店早餐: {hotelReservations.BreakfastPrice.ToString("#0.00")} {BreakfastCode} ({BreakfastName})
" + $"酒店早餐是否由地接代付: {isoppayStr}"; _detail.PriceNameContent = hotelReservations.HotelName; } break; case 79://车/导游地接 Grp_CarTouristGuideGroundReservations touristGuideGroundReservations = _CarTouristGuideGroundReservations.Where(s => s.Id == entity.CId).FirstOrDefault(); if (touristGuideGroundReservations != null) { if (!string.IsNullOrEmpty(touristGuideGroundReservations.BusName)) { _detail.BusName = touristGuideGroundReservations.BusName; } bool isInt = int.TryParse(touristGuideGroundReservations.Area, out int cityId); if (isInt) { var cityInfo = cityData.Find(it => it.Id == cityId); if (cityInfo != null) { string nameContent = $@"{cityInfo.Country}-{cityInfo.City}"; var carFeeItem = carFeeItems.Find(it => it.Id == touristGuideGroundReservations.PriceType); if (carFeeItem != null) { nameContent += $@"({carFeeItem.Name})"; } _detail.PriceNameContent = nameContent; } } else { _detail.PriceNameContent = touristGuideGroundReservations.Area; } List touristGuideGroundReservationsContents = _CarTouristGuideGroundReservationsContent .Where(s => s.CTGGRId == touristGuideGroundReservations.Id && s.IsDel == 0 && s.Price != 0).ToList(); string priceMsg = string.Empty; foreach (var item in touristGuideGroundReservationsContents) { string typeName = "Unknown"; string carCurrencyCode = "Unknown"; string carCurrencyName = "Unknown"; var carTypeData = carFeeTypeItems.Where(s => s.Id == item.SId && s.IsDel == 0).FirstOrDefault(); if (carTypeData != null) typeName = carTypeData.Name; var currencyData = currencyItems.Where(s => s.Id == item.Currency && s.IsDel == 0).FirstOrDefault(); if (currencyData != null) { carCurrencyCode = currencyData.Name; carCurrencyName = currencyData.Remark; } priceMsg += typeName + ":" + item.Price.ToString("#0.00") + " " + carCurrencyCode + "(" + carCurrencyName + ")
" + "明细:" + item.PriceContent + "
" + "备注:" + item.Remark + "

"; } _detail.PriceMsgContent = priceMsg; } break; case 80: //签证 Grp_VisaInfo visaInfo = _VisaInfos.Where(s => s.Id == entity.CId).FirstOrDefault(); if (visaInfo != null) { _detail.PriceNameContent = getClientNameStr(clientNameList, visaInfo.VisaClient); _detail.PriceMsgContent = "备注:" + visaInfo.Remark; } break; case 81: //邀请/公务活动 Grp_InvitationOfficialActivities _ioa = _InvitationOfficialActivities.Where(s => s.Id == entity.CId).FirstOrDefault(); if (_ioa != null) { string inviteCurrName = "Unknown", //邀请费用币种 Name inviteCurrCode = "Unknown", //邀请费用币种 Code sendCurrName = "Unknown", //快递费用币种 Name sendCurrCode = "Unknown", //快递费用币种 Code eventsCurrName = "Unknown", //公务活动费币种 Name eventsCurrCode = "Unknown", //公务活动费币种 Code translateCurrName = "Unknown", //公务翻译费 Name translateCurrCode = "Unknown"; //公务翻译费 Code #region 处理费用币种 var inviteCurrData = currencyItems.Where(s => s.Id == _ioa.InviteCurrency && s.IsDel == 0).FirstOrDefault(); if (inviteCurrData != null) { inviteCurrName = inviteCurrData.Remark; inviteCurrCode = inviteCurrData.Name; } var sendCurrData = currencyItems.Where(s => s.Id == _ioa.SendCurrency && s.IsDel == 0).FirstOrDefault(); if (sendCurrData != null) { sendCurrName = sendCurrData.Remark; sendCurrCode = sendCurrData.Name; } var eventsCurrData = currencyItems.Where(s => s.Id == _ioa.EventsCurrency && s.IsDel == 0).FirstOrDefault(); if (eventsCurrData != null) { eventsCurrName = eventsCurrData.Remark; eventsCurrCode = eventsCurrData.Name; } var translateCurrData = currencyItems.Where(s => s.Id == _ioa.TranslateCurrency && s.IsDel == 0).FirstOrDefault(); if (translateCurrData != null) { translateCurrName = translateCurrData.Remark; translateCurrCode = translateCurrData.Name; } #endregion _detail.PriceNameContent = _ioa.InviterArea; _detail.PriceMsgContent = $@"邀请费用:{_ioa.InviteCost.ToString("#0.00")} {inviteCurrCode}({inviteCurrName})
" + $@"快递费用:{_ioa.SendCost.ToString("#0.00")} {sendCurrCode}({sendCurrName})
" + $@"公务活动费:{_ioa.EventsCost.ToString("#0.00")} {eventsCurrCode}({eventsCurrName})
" + $@"公务翻译费:{_ioa.TranslateCost.ToString("#0.00")} {translateCurrCode}({translateCurrName})
" + $@"备注:" + _ioa.Remark + "
"; } break; case 82: //团组客户保险 Grp_Customers customers = _Customers.Where(s => s.Id == entity.CId && s.IsDel == 0).FirstOrDefault(); if (customers != null) { _detail.PriceNameContent = getClientNameStr(clientNameList, customers.ClientName); _detail.PriceMsgContent = "备注:" + customers.Remark + "
"; } break; case 85: //机票预订 Grp_AirTicketReservations jpRes = _AirTicketReservations.Where(s => s.Id == entity.CId).FirstOrDefault(); if (jpRes != null) { string FlightsDescription = jpRes.FlightsDescription; string PriceDescription = jpRes.PriceDescription; _detail.PriceMsgContent = "航班号:" + jpRes.FlightsCode + "
城市A-B:" + jpRes.FlightsCity + "
航班描述:" + FlightsDescription.Replace("\r\n", "
") + "
" + "价格描述:" + PriceDescription; _detail.PriceNameContent = "(" + jpRes.FlightsCode + ")"; } break; case 98://其他款项 Grp_DecreasePayments gdpRes = _DecreasePayments.Where(s => s.Id == entity.CId).FirstOrDefault(); if (gdpRes != null) { _detail.PriceMsgContent = "备注:" + gdpRes.Remark; _detail.PriceNameContent = gdpRes.PriceName; } break; case 285://收款退还 Fin_PaymentRefundAndOtherMoney refundAndOtherMoney = _PaymentRefundAndOtherMoneys.Where(s => s.Id == entity.CId).FirstOrDefault(); if (refundAndOtherMoney != null) { _detail.PriceMsgContent = "备注:" + refundAndOtherMoney.Remark; _detail.PriceNameContent = refundAndOtherMoney.PriceName; } break; case 751://酒店早餐 break; case 1015://超支费用 Fin_GroupExtraCost groupExtraCost = _GroupExtraCosts.Where(s => s.Id == entity.CId).FirstOrDefault(); if (groupExtraCost != null) { _detail.PriceNameContent = groupExtraCost.PriceName; _detail.PriceMsgContent = "备注:" + groupExtraCost.Remark; } break; default: break; } /* * 申请人 */ string operatorName = " - "; Sys_Users _opUser = userItems.Where(s => s.Id == entity.CreateUserId).FirstOrDefault(); if (_opUser != null) { operatorName = _opUser.CnName; } _detail.OperatorName = operatorName; /* * 审核人 */ string auditOperatorName = "Unknown"; if (entity.AuditGMOperate == 0) auditOperatorName = " - "; else if (entity.AuditGMOperate == 4) auditOperatorName = "自动审核"; else { Sys_Users _adUser = userItems.Where(s => s.Id == entity.AuditGMOperate).FirstOrDefault(); if (_adUser != null) { auditOperatorName = _adUser.CnName; } } _detail.AuditOperatorName = auditOperatorName; /* * 超预算比例 */ string overBudgetStr = ""; if (entity.ExceedBudget == -1) overBudgetStr = sdPriceName.Name + "尚无预算"; else if (entity.ExceedBudget == 0) overBudgetStr = "未超预算"; else overBudgetStr = entity.ExceedBudget.ToString("P"); _detail.OverBudget = overBudgetStr; /* * 费用总计 */ ccpCurrencyPrices.Add(new CreditCardPaymentCurrencyPriceItem() { CurrencyId = entity.PaymentCurrency, CurrencyName = PaymentCurrency_WaitPay, AmountPayable = entity.PayMoney, ThisPayment = CurrPayStr, BalancePayment = BalanceStr, AuditedFunds = CurrPayStr }); _detail.IsAuditGM = entity.IsAuditGM; detailList.Add(_detail); } #endregion _view.DetailList = new List(detailList); /* * 下方描述处理 */ List nonDuplicat = ccpCurrencyPrices.Where((x, i) => ccpCurrencyPrices.FindIndex(z => z.CurrencyId == x.CurrencyId) == i).ToList();//Lambda表达式去重 CreditCardPaymentCurrencyPriceItem ccpCurrencyPrice = nonDuplicat.Where(it => it.CurrencyId == 836).FirstOrDefault(); if (ccpCurrencyPrice != null) { int CNYIndex = nonDuplicat.IndexOf(ccpCurrencyPrice); nonDuplicat.MoveItemAtIndexToFront(CNYIndex); } else { nonDuplicat.OrderBy(it => it.CurrencyId).ToList(); } string amountPayableStr = string.Format(@"应付款总金额: "); string thisPaymentStr = string.Format(@"此次付款总金额: "); string balancePaymentStr = string.Format(@"目前剩余尾款总金额: "); string auditedFundsStr = string.Format(@"已审费用总额: "); foreach (var item in nonDuplicat) { var strs = ccpCurrencyPrices.Where(it => it.CurrencyId == item.CurrencyId).ToList(); if (strs.Count > 0) { decimal amountPayable = strs.Sum(it => it.AmountPayable); decimal balancePayment = strs.Sum(it => it.BalancePayment); amountPayableStr += string.Format(@"{0}{1} |", amountPayable.ToString("#0.00"), item.CurrencyName); //单独处理此次付款金额 if (item.CurrencyId == 836) //人民币 { decimal thisPayment = ccpCurrencyPrices.Sum(it => it.ThisPayment); thisPaymentStr += string.Format(@"{0}{1} |", thisPayment.ToString("#0.00"), item.CurrencyName); } else { thisPaymentStr += string.Format(@"{0}{1} |", "0.00", item.CurrencyName); } balancePaymentStr += string.Format(@"{0}{1} |", balancePayment.ToString("#0.00"), item.CurrencyName); //单独处理已审核费用 if (item.CurrencyId == 836) //人民币 { decimal auditedFunds = ccpCurrencyPrices.Sum(it => it.AuditedFunds); auditedFundsStr += string.Format(@"{0}{1} |", auditedFunds.ToString("#0.00"), item.CurrencyName); } else { auditedFundsStr += string.Format(@"{0}{1} |", "0.00", item.CurrencyName); } } } _view.TotalStr1 = amountPayableStr.Substring(0, amountPayableStr.Length - 1); _view.TotalStr2 = thisPaymentStr.Substring(0, thisPaymentStr.Length - 1); _view.TotalStr3 = balancePaymentStr.Substring(0, balancePaymentStr.Length - 1); _view.TotalStr4 = auditedFundsStr.Substring(0, auditedFundsStr.Length - 1); var _view1 = new { PageFuncAuth = pageFunAuthView, Data = _view }; return Ok(JsonView(_view1)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 费用审核 /// 修改团组费用审核状态 /// /// 参数Json字符串 /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostAuditGrpCreditCardPayment(Edit_GrpCreditCardPaymentDto _dto) { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空")); if (_dto.PageId < 1) return Ok(JsonView(false, "页面Id为空")); #endregion #region 页面操作权限验证 PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (pageFunAuthView.AuditAuth == 0) return Ok(JsonView(false, "您没有审核权限")); #endregion List idList = _dto.CreditIdStr.Split(',').ToList(); Grp_CreditCardPayment _detail = _mapper.Map(_dto); DateTime dtNow = DateTime.Now; _groupRepository.BeginTran(); int rst = 0; var creditDatas = _grpScheduleRep._sqlSugar.Queryable().Where(it => it.IsDel == 0 && idList.Contains(it.Id.ToString())).ToList(); var creditTypeDatas = _grpScheduleRep._sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.STid == 16).ToList(); var creditCurrencyDatas = _grpScheduleRep._sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.STid == 66).ToList(); var groupDatas = _grpScheduleRep._sqlSugar.Queryable().Where(it => it.IsDel == 0).ToList(); List msgDatas = new List(); foreach (var item in idList) { int CreditId = int.Parse(item); var result = await _grpScheduleRep._sqlSugar.Updateable() .SetColumns(it => it.IsAuditGM == _dto.AuditCode) .SetColumns(it => it.AuditGMOperate == _dto.UserId) .SetColumns(it => it.AuditGMDate == dtNow.ToString("yyyy-MM-dd HH:mm:ss")) .Where(s => s.Id == CreditId) .ExecuteCommandAsync(); if (result < 1) { rst = -1; _groupRepository.RollbackTran(); return Ok(JsonView(false, "操作失败并回滚!")); } var creditData = creditDatas.Where(it => it.Id == CreditId).FirstOrDefault(); if (creditData != null) { string auditStr = _dto.AuditCode == 1 ? "已通过" : _dto.AuditCode == 2 ? "未通过" : "未审核"; string groupNameStr = string.Empty; var groupData = groupDatas.Where(it => it.Id == creditData.DIId).FirstOrDefault(); if (groupData != null) groupNameStr = groupData.TeamName; string creditTypeStr = string.Empty; var creditTypeData = creditTypeDatas.Where(it => it.Id == creditData.CTable).FirstOrDefault(); if (creditTypeData != null) creditTypeStr = creditTypeData.Name; string creditCurrency = string.Empty; var creditCurrencyData = creditCurrencyDatas.Where(it => it.Id == creditData.PaymentCurrency).FirstOrDefault(); if (creditCurrencyData != null) creditCurrency = creditCurrencyData.Name; if (creditCurrency.Equals("CNY")) { creditData.DayRate = 1.0000M; } if (creditData.PayPercentage == 0.00M) { creditData.PayPercentage = 100M; } decimal CNYPrice = (creditData.PayMoney * (creditData.PayPercentage / 100)) * creditData.DayRate; string msgTitle = $"[{groupNameStr}({creditTypeStr})]的费用申请"; string msgContent = ""; if (creditCurrency.Equals("CNY")) { msgContent = $"[{groupNameStr}({creditTypeStr})]费用申请(金额:{CNYPrice.ToString("0.00")} CNY) {auditStr}!"; } else { msgContent = $"[{groupNameStr}({creditTypeStr})]费用申请(金额:{CNYPrice.ToString("0.00")} CNY({creditData.PayMoney.ToString("0.00")} {creditCurrency})) {auditStr}!"; } msgDatas.Add(new { DiId = creditData.DIId, UserId = creditData.CreateUserId, MsgTitle = msgTitle, MsgContent = msgContent }); } } if (rst == 0) { _groupRepository.CommitTran(); foreach (var item in msgDatas) { //发送消息 GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.GroupExpenseAudit, item.MsgTitle, item.MsgContent, new List() { item.UserId }, item.DiId); } return Ok(JsonView(true, "操作成功!")); } return Ok(JsonView(false, "操作失败!")); } #endregion #region 机票费用录入 /// /// 机票录入当前登录人可操作团组 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task AirTicketResSelect(AirTicketResDto dto) { try { Result groupData = await _airTicketResRep.AirTicketResSelect(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 机票费用录入列表 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task AirTicketResList(AirTicketResDto dto) { try { Result groupData = await _airTicketResRep.AirTicketResList(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); throw; } } /// /// 根据id查询费用录入信息 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task AirTicketResById(AirTicketResByIdDto dto) { try { Result groupData = await _airTicketResRep.AirTicketResById(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 机票费用录入操作(Status:1.新增,2.修改) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task OpAirTicketRes(AirTicketResOpDto dto) { try { Result groupData = await _airTicketResRep.OpAirTicketRes(dto, _setDataRep.PostCurrencyByDiid); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 根据舱位类型查询接团客户名单信息 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task tankType(AirTicketResByIdDto dto) { try { List crm_Groups = _sqlSugar.Queryable().Where(a => a.IsDel == 0 && a.AirType == dto.Id).ToList(); if (crm_Groups.Count != 0) { List Customer = new List(); foreach (var item in crm_Groups) { var data = new { Id = item.Id, Pinyin = item.Pinyin, Name = item.LastName + item.FirstName }; Customer.Add(data); } return Ok(JsonView(true, "查询成功!", Customer)); } return Ok(JsonView(true, "暂无数据", crm_Groups)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 根据团号获取客户信息 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public IActionResult QueryClientInfoByDIID(QueryClientInfoByDIIDDto dto) { var jw = JsonView(false); if (dto.DIID < 1) { jw.Msg += "请输入正确的diid"; return Ok(jw); } var arr = getSimplClientList(dto.DIID); jw = JsonView(true, "获取成功!", arr); return Ok(jw); } private List getSimplClientList(int diId) { string sql = string.Format("select b.Id,b.Pinyin,b.lastName,b.firstName,b.phone from Grp_TourClientList a, Crm_DeleClient b where a.clientid = b.id and a.isdel = 0 and a.diid = {0}", diId); List arr = _sqlSugar.SqlQueryable(sql).ToList(); return arr; } private string getClientNameStr(List list, string origin) { string result = origin; if (Regex.Match(origin, @"\d+,?").Value.Length > 0) { string[] temparr = origin.Split(','); string fistrStr = temparr[0]; int count = temparr.Count(); int tempId; bool success = int.TryParse(fistrStr, out tempId); if (success) { SimplClientInfo tempInfo = list.FirstOrDefault(s => s.Id == tempId); if (tempInfo != null) { if (count > 1) { result = string.Format(@"{0}{1}等{2}人", tempInfo.LastName, tempInfo.FirstName, count); } else { result = string.Format(@"{0}{1}", tempInfo.LastName, tempInfo.FirstName); } } } } return result; } /// /// 机票费用录入,删除 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task DelAirTicketRes(DelBaseDto dto) { try { var res = await _airTicketResRep.SoftDeleteByIdAsync(dto.Id.ToString(), dto.DeleteUserId); if (res) { var result = await _sqlSugar.Updateable().Where(a => a.CId == dto.Id && a.CTable == 85).SetColumns(a => new Grp_CreditCardPayment() { IsDel = 1, DeleteUserId = dto.DeleteUserId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }).ExecuteCommandAsync(); return Ok(JsonView(true, "删除成功!")); } return Ok(JsonView(false, "删除失败!")); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 导出机票录入报表 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task DeriveAirTicketRes(AirTicketResDto dto) { try { Result groupData = await _airTicketResRep.DeriveAirTicketRes(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } else { List AirTicketReservations = groupData.Data.GetType().GetProperty("AirTicketRes").GetValue(groupData.Data); if (AirTicketReservations.Count != 0) { Grp_DelegationInfo DelegationInfo = groupData.Data.GetType().GetProperty("Delegation").GetValue(groupData.Data); Sys_Users _Users = groupData.Data.GetType().GetProperty("Users").GetValue(groupData.Data); string diCode = DelegationInfo != null ? DelegationInfo.TourCode : "XXX"; string diName = DelegationInfo != null ? DelegationInfo.TeamName : "XXX"; WorkbookDesigner designer = new WorkbookDesigner(); designer.Workbook = new Workbook(AppSettingsHelper.Get("ExcelBasePath") + "Template/机票预订费用报表模板.xlsx"); decimal countCost = 0; foreach (var item in AirTicketReservations) { #region 处理客人姓名 string clientNames = _tourClientListRep._ResolveCustomerName(item.ClientName); item.ClientName = clientNames; #endregion if (item.BankType == "其他") { item.BankNo = "--"; } else { if (!string.IsNullOrEmpty(item.BankType)) { item.BankNo = item.BankType + ":" + item.BankNo?.Substring(0, 3); } } item.PrePrice = System.Decimal.Round(item.PrePrice, 2); item.Price = System.Decimal.Round(item.Price, 2); countCost += Convert.ToDecimal(item.Price); } designer.SetDataSource("Export", AirTicketReservations); designer.SetDataSource("ExportDiCode", diCode); designer.SetDataSource("ExportDiName", diName); designer.SetDataSource("ExportOpUserName", _Users.CnName); designer.SetDataSource("ExportCountCost", countCost + "(" + AirTicketReservations[0].CurrencyStr); designer.Process(); string fileName = ("AirfareStatement/" + diName + "机票费用报表" + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx").Replace(":", ""); designer.Workbook.Save(AppSettingsHelper.Get("ExcelBasePath") + fileName); string rst = AppSettingsHelper.Get("ExcelBaseUrl") + AppSettingsHelper.Get("ExcelFtpPath") + fileName; return Ok(JsonView(true, "成功", url = rst)); } else { return Ok(JsonView(false, "暂无数据!")); } } } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); throw; } } Dictionary transDic = new Dictionary(); /// /// 行程单导出 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task ItineraryAirTicketRes(ItineraryAirTicketResDto dto) { try { Result groupData = await _airTicketResRep.ItineraryAirTicketRes(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } else { List _AirTicketReservations = groupData.Data; if (dto.Language == "CN") { Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/电子客票行程单模板_CN.docx"); DocumentBuilder builder = new DocumentBuilder(doc); int tableIndex = 0;//表格索引 //得到文档中的第一个表格 Table table = (Table)doc.GetChild(NodeType.Table, tableIndex, true); foreach (var item in _AirTicketReservations) { #region 处理固定数据 string[] FlightsCode = item.FlightsCode.Split('/'); if (FlightsCode.Length != 0) { Res_AirCompany _AirCompany = _sqlSugar.Queryable().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2)); if (_AirCompany != null) { table.Range.Bookmarks["AirlineCompany"].Text = _AirCompany.CnName; } else { table.Range.Bookmarks["AirlineCompany"].Text = "--"; } } table.Range.Bookmarks["AirlineRecordCode"].Text = "--"; table.Range.Bookmarks["ReservationRecordCode"].Text = "--"; string[] nameArray = Regex.Split(item.ClientName, "\\d+\\.", RegexOptions.IgnoreCase); nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray(); string name = ""; foreach (string clientName in nameArray) { if (!name.Contains(clientName)) { name += clientName + ","; } } if (!string.IsNullOrWhiteSpace(name)) { table.Range.Bookmarks["ClientName"].Text = name.Substring(0, name.Length - 1); } else { table.Range.Bookmarks["ClientName"].Text = "--"; } table.Range.Bookmarks["TicketNumber"].Text = "--"; table.Range.Bookmarks["IdentificationCode"].Text = "--"; table.Range.Bookmarks["JointTicket"].Text = "--"; table.Range.Bookmarks["TimeIssue"].Text = "--"; table.Range.Bookmarks["DrawingAgent"].Text = "--"; table.Range.Bookmarks["NavigationCode"].Text = "--"; table.Range.Bookmarks["AgentsAddress"].Text = "--"; table.Range.Bookmarks["AgentPhone"].Text = "--"; table.Range.Bookmarks["AgentFacsimile"].Text = "--"; #endregion #region 循环数据处理 List airs = new List(); string[] DayArray = Regex.Split(item.FlightsDescription, "\\d+\\.", RegexOptions.IgnoreCase); DayArray = DayArray.Where(s => s != " " && s != "" && !string.IsNullOrEmpty(s)).ToArray(); for (int i = 0; i < FlightsCode.Length; i++) { AirInfo air = new AirInfo(); string[] tempstr = DayArray[i] .Replace("\r\n", string.Empty) .Replace("\\r\\n", string.Empty) .TrimStart().TrimEnd() .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); Res_ThreeCode star_Three = _sqlSugar.Queryable().First(a => a.Three == tempstr[3].Substring(0, 3)); string starCity = ""; if (star_Three != null) { starCity = star_Three.AirPort; } Res_ThreeCode End_Three = _sqlSugar.Queryable().First(a => a.Three == tempstr[3].Substring(3, 3)); string EndCity = ""; if (End_Three != null) { EndCity = End_Three.AirPort; } air.Destination = starCity + "/" + EndCity; air.Flight = FlightsCode[i]; air.SeatingClass = item.CTypeName; string dateTime = tempstr[2]; string DateTemp = dateTime.Substring(2, 5).ToUpper(); air.FlightDate = DateTemp; air.DepartureTime = tempstr[5]; air.LandingTime = tempstr[6]; air.ValidityPeriod = DateTemp + "/" + DateTemp; air.TicketStatus = "--"; air.Luggage = "--"; air.DepartureTerminal = "--"; air.LandingTerminal = "--"; airs.Add(air); } int row = 13; for (int i = 0; i < airs.Count; i++) { if (airs.Count > 2) { for (int j = 0; j < airs.Count - 2; j++) { var CopyRow = table.Rows[12].Clone(true); table.Rows.Add(CopyRow); } } PropertyInfo[] properties = airs[i].GetType().GetProperties(); int index = 0; foreach (PropertyInfo property in properties) { string value = property.GetValue(airs[i]).ToString(); Cell ishcel0 = table.Rows[row].Cells[index]; Paragraph p = new Paragraph(doc); string s = value; p.AppendChild(new Run(doc, s)); p.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐 ishcel0.AppendChild(p); ishcel0.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;//垂直居中对齐 index++; } row++; } #endregion Paragraph lastParagraph = new Paragraph(doc); //第一个表格末尾加段落 table.ParentNode.InsertAfter(lastParagraph, table); //复制第一个表格 Table cloneTable = (Table)table.Clone(true); //在文档末尾段落后面加入复制的表格 table.ParentNode.InsertAfter(cloneTable, lastParagraph); if (item != _AirTicketReservations[_AirTicketReservations.Count - 1]) { int rownewsIndex = 13; for (int i = 0; i < 2; i++) { var CopyRow = table.Rows[12].Clone(true); table.Rows.RemoveAt(13); table.Rows.Add(CopyRow); rownewsIndex++; } } else { table.Rows.RemoveAt(12); } cloneTable.Rows.RemoveAt(12); } if (_AirTicketReservations.Count != 0) { string[] FlightsCode = _AirTicketReservations[0].FlightsCode.Split('/'); if (FlightsCode.Length != 0) { Res_AirCompany _AirCompany = _sqlSugar.Queryable().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2)); if (_AirCompany != null) { table.Range.Bookmarks["AirlineCompany"].Text = _AirCompany.CnName; } else { table.Range.Bookmarks["AirlineCompany"].Text = "--"; } } table.Range.Bookmarks["AirlineRecordCode"].Text = "--"; table.Range.Bookmarks["ReservationRecordCode"].Text = "--"; string[] nameArray = Regex.Split(_AirTicketReservations[0].ClientName, "\\d+\\.", RegexOptions.IgnoreCase); nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray(); string name = ""; foreach (string clientName in nameArray) { if (!name.Contains(clientName)) { name += clientName + ","; } } if (!string.IsNullOrWhiteSpace(name)) { table.Range.Bookmarks["ClientName"].Text = name.Substring(0, name.Length - 1); } else { table.Range.Bookmarks["ClientName"].Text = "--"; } table.Range.Bookmarks["TicketNumber"].Text = "--"; table.Range.Bookmarks["IdentificationCode"].Text = "--"; table.Range.Bookmarks["JointTicket"].Text = "--"; table.Range.Bookmarks["TimeIssue"].Text = "--"; table.Range.Bookmarks["DrawingAgent"].Text = "--"; table.Range.Bookmarks["NavigationCode"].Text = "--"; table.Range.Bookmarks["AgentsAddress"].Text = "--"; table.Range.Bookmarks["AgentPhone"].Text = "--"; table.Range.Bookmarks["AgentFacsimile"].Text = "--"; } doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount }); //保存合并后的文档 string fileName = "AirItinerary/电子客票中文行程单_CN.docx"; string rst = AppSettingsHelper.Get("WordBaseUrl") + AppSettingsHelper.Get("WordFtpPath") + fileName; doc.Save(AppSettingsHelper.Get("WordBasePath") + fileName); return Ok(JsonView(true, "成功!", rst)); } else { Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/电子客票行程单模板_EN.docx"); DocumentBuilder builder = new DocumentBuilder(doc); int tableIndex = 0;//表格索引 //得到文档中的第一个表格 Table table = (Table)doc.GetChild(NodeType.Table, tableIndex, true); List texts = new List(); foreach (var item in _AirTicketReservations) { string[] FlightsCode = item.FlightsCode.Split('/'); if (FlightsCode.Length != 0) { Res_AirCompany _AirCompany = _sqlSugar.Queryable().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2)); if (_AirCompany != null) { if (!transDic.ContainsKey(_AirCompany.CnName)) { transDic.Add(_AirCompany.CnName, _AirCompany.EnName); } } else { if (!transDic.ContainsKey("--")) { transDic.Add("--", "--"); } } } string[] nameArray = Regex.Split(item.ClientName, "\\d+\\.", RegexOptions.IgnoreCase); nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray(); string name = ""; foreach (string clientName in nameArray) { name += clientName + ","; } if (!texts.Contains(name)) { texts.Add(name); } List airs = new List(); string[] DayArray = Regex.Split(item.FlightsDescription, "\\d+\\.", RegexOptions.IgnoreCase); DayArray = DayArray.Where(s => s != " " && s != "" && !string.IsNullOrEmpty(s)).ToArray(); for (int i = 0; i < FlightsCode.Length; i++) { AirInfo air = new AirInfo(); string[] tempstr = DayArray[i] .Replace("\r\n", string.Empty) .Replace("\\r\\n", string.Empty) .TrimStart().TrimEnd() .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); Res_ThreeCode star_Three = _sqlSugar.Queryable().First(a => a.Three == tempstr[3].Substring(0, 3)); if (star_Three != null) { if (!transDic.ContainsKey(star_Three.AirPort)) { transDic.Add(star_Three.AirPort, star_Three.AirPort_En); } } Res_ThreeCode End_Three = _sqlSugar.Queryable().First(a => a.Three == tempstr[3].Substring(3, 3)); if (End_Three != null) { if (!transDic.ContainsKey(End_Three.AirPort)) { transDic.Add(End_Three.AirPort, End_Three.AirPort_En); } } if (!texts.Contains(item.CTypeName)) { texts.Add(item.CTypeName); } } } List transData = _airTicketResRep.ReTransBatch(texts, "en"); if (transData.Count > 0) { foreach (TranslateResult item in transData) { if (!transDic.ContainsKey(item.Query)) { transDic.Add(item.Query, item.Translation); } } } foreach (var item in _AirTicketReservations) { #region 处理固定数据 string[] FlightsCode = item.FlightsCode.Split('/'); if (FlightsCode.Length != 0) { Res_AirCompany _AirCompany = _sqlSugar.Queryable().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2)); if (_AirCompany != null) { string str = "--"; string translateResult = transDic.Where(s => s.Key == _AirCompany.CnName).FirstOrDefault().Value; if (!string.IsNullOrEmpty(translateResult)) { str = translateResult; str = _airTicketResRep.Processing(str); } table.Range.Bookmarks["AirlineCompany"].Text = str; } else { table.Range.Bookmarks["AirlineCompany"].Text = "--"; } } table.Range.Bookmarks["AirlineRecordCode"].Text = "--"; table.Range.Bookmarks["ReservationRecordCode"].Text = "--"; string[] nameArray = Regex.Split(item.ClientName, "\\d+\\.", RegexOptions.IgnoreCase); nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray(); string names = ""; foreach (string clientName in nameArray) { names += clientName + ","; } if (!string.IsNullOrWhiteSpace(names)) { string str = "--"; string translateResult = transDic.Where(s => s.Key == names).FirstOrDefault().Value; if (!string.IsNullOrEmpty(translateResult)) { str = translateResult; str = _airTicketResRep.Processing(str); } table.Range.Bookmarks["ClientName"].Text = str; } else { table.Range.Bookmarks["ClientName"].Text = "--"; } table.Range.Bookmarks["TicketNumber"].Text = "--"; table.Range.Bookmarks["IdentificationCode"].Text = "--"; table.Range.Bookmarks["JointTicket"].Text = "--"; table.Range.Bookmarks["TimeIssue"].Text = "--"; table.Range.Bookmarks["DrawingAgent"].Text = "--"; table.Range.Bookmarks["NavigationCode"].Text = "--"; table.Range.Bookmarks["AgentsAddress"].Text = "--"; table.Range.Bookmarks["AgentPhone"].Text = "--"; table.Range.Bookmarks["AgentFacsimile"].Text = "--"; #endregion #region 循环数据处理 List airs = new List(); string[] DayArray = Regex.Split(item.FlightsDescription, "\\d+\\.", RegexOptions.IgnoreCase); DayArray = DayArray.Where(s => s != " " && s != "" && !string.IsNullOrEmpty(s)).ToArray(); for (int i = 0; i < FlightsCode.Length; i++) { AirInfo air = new AirInfo(); string[] tempstr = DayArray[i] .Replace("\r\n", string.Empty) .Replace("\\r\\n", string.Empty) .TrimStart().TrimEnd() .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); Res_ThreeCode star_Three = _sqlSugar.Queryable().First(a => a.Three == tempstr[3].Substring(0, 3)); string starCity = ""; if (star_Three != null) { string str2 = "--"; string translateResult2 = transDic.Where(s => s.Key == star_Three.AirPort).FirstOrDefault().Value; if (!string.IsNullOrEmpty(translateResult2)) { str2 = translateResult2; str2 = _airTicketResRep.Processing(str2); } starCity = str2; } Res_ThreeCode End_Three = _sqlSugar.Queryable().First(a => a.Three == tempstr[3].Substring(3, 3)); string EndCity = ""; if (End_Three != null) { string str1 = "--"; string translateResult1 = transDic.Where(s => s.Key == End_Three.AirPort).FirstOrDefault().Value; if (!string.IsNullOrEmpty(translateResult1)) { str1 = translateResult1; str1 = _airTicketResRep.Processing(str1); } EndCity = str1; } air.Destination = starCity + "/" + EndCity; air.Flight = FlightsCode[i]; string str = "--"; string translateResult = transDic.Where(s => s.Key == item.CTypeName).FirstOrDefault().Value; if (!string.IsNullOrEmpty(translateResult)) { str = translateResult; str = _airTicketResRep.Processing(str); } air.SeatingClass = str; string dateTime = tempstr[2]; string DateTemp = dateTime.Substring(2, 5).ToUpper(); air.FlightDate = DateTemp; air.DepartureTime = tempstr[5]; air.LandingTime = tempstr[6]; air.ValidityPeriod = DateTemp + "/" + DateTemp; air.TicketStatus = "--"; air.Luggage = "--"; air.DepartureTerminal = "--"; air.LandingTerminal = "--"; airs.Add(air); } int row = 13; for (int i = 0; i < airs.Count; i++) { if (airs.Count > 2) { for (int j = 0; j < airs.Count - 2; j++) { var CopyRow = table.Rows[12].Clone(true); table.Rows.Add(CopyRow); } } PropertyInfo[] properties = airs[i].GetType().GetProperties(); int index = 0; foreach (PropertyInfo property in properties) { string value = property.GetValue(airs[i]).ToString(); Cell ishcel0 = table.Rows[row].Cells[index]; Paragraph p = new Paragraph(doc); string s = value; p.AppendChild(new Run(doc, s)); p.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐 ishcel0.AppendChild(p); ishcel0.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;//垂直居中对齐 //ishcel0.CellFormat.VerticalAlignment= index++; } row++; } #endregion Paragraph lastParagraph = new Paragraph(doc); //第一个表格末尾加段落 table.ParentNode.InsertAfter(lastParagraph, table); //复制第一个表格 Table cloneTable = (Table)table.Clone(true); //在文档末尾段落后面加入复制的表格 table.ParentNode.InsertAfter(cloneTable, lastParagraph); if (item != _AirTicketReservations[_AirTicketReservations.Count - 1]) { int rownewsIndex = 13; for (int i = 0; i < 2; i++) { var CopyRow = table.Rows[12].Clone(true); table.Rows.RemoveAt(13); table.Rows.Add(CopyRow); rownewsIndex++; } } else { table.Rows.RemoveAt(12); } cloneTable.Rows.RemoveAt(12); } if (_AirTicketReservations.Count != 0) { string[] FlightsCode = _AirTicketReservations[0].FlightsCode.Split('/'); if (FlightsCode.Length != 0) { Res_AirCompany _AirCompany = _sqlSugar.Queryable().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2)); if (_AirCompany != null) { string str = "--"; string translateResult = transDic.Where(s => s.Key == _AirCompany.CnName).FirstOrDefault().Value; if (!string.IsNullOrEmpty(translateResult)) { str = translateResult; str = _airTicketResRep.Processing(str); } table.Range.Bookmarks["AirlineCompany"].Text = str; } else { table.Range.Bookmarks["AirlineCompany"].Text = "--"; } } table.Range.Bookmarks["AirlineRecordCode"].Text = "--"; table.Range.Bookmarks["ReservationRecordCode"].Text = "--"; string[] nameArray = Regex.Split(_AirTicketReservations[0].ClientName, "\\d+\\.", RegexOptions.IgnoreCase); nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray(); string names = ""; foreach (string clientName in nameArray) { names += clientName + ","; } if (!string.IsNullOrWhiteSpace(names)) { string str = "--"; string translateResult = transDic.Where(s => s.Key == names).FirstOrDefault().Value; if (!string.IsNullOrEmpty(translateResult)) { str = translateResult; str = _airTicketResRep.Processing(str); } table.Range.Bookmarks["ClientName"].Text = str; } else { table.Range.Bookmarks["ClientName"].Text = "--"; } table.Range.Bookmarks["TicketNumber"].Text = "--"; table.Range.Bookmarks["IdentificationCode"].Text = "--"; table.Range.Bookmarks["JointTicket"].Text = "--"; table.Range.Bookmarks["TimeIssue"].Text = "--"; table.Range.Bookmarks["DrawingAgent"].Text = "--"; table.Range.Bookmarks["NavigationCode"].Text = "--"; table.Range.Bookmarks["AgentsAddress"].Text = "--"; table.Range.Bookmarks["AgentPhone"].Text = "--"; table.Range.Bookmarks["AgentFacsimile"].Text = "--"; } doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount }); //保存合并后的文档 string fileName = "AirItinerary/电子客票英文行程单_EN.docx"; string rst = AppSettingsHelper.Get("WordBaseUrl") + AppSettingsHelper.Get("WordFtpPath") + fileName; doc.Save(AppSettingsHelper.Get("WordBasePath") + fileName); return Ok(JsonView(true, "成功!", rst)); } } } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } #endregion #region 团组增减款项 --> 其他款项 /// /// 团组增减款项下拉框绑定 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task DecreasePaymentsSelect(DecreasePaymentsDto dto) { try { #region 参数验证 if (dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数!")); if (dto.CTId < 1) return Ok(JsonView(false, "请传入有效的CTId参数!")); #endregion //var groupData = await GeneralMethod.PostOperationAuthReturnGroupInfosAsync(dto.UserId, dto.CTId); ////支付方式 //List Payment = _sqlSugar.Queryable().Where(a => a.STid == 14 && a.IsDel == 0).ToList(); //List _Payment = _mapper.Map>(Payment); //var data = new //{ // Payment = _Payment, // GroupName = groupData, //}; var res = await _decreasePaymentsRep.DecreasePaymentsSelect(dto); if (res.Code != 0) { return Ok(JsonView(false, res.Msg)); } return Ok(JsonView(true, "操作成功!", res.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 根据团组Id查询团组增减款项 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task DecreasePaymentsList(DecreasePaymentsListDto dto) { try { #region 参数验证 if (dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数!")); if (dto.DiId < 1) return Ok(JsonView(false, "请传入有效的DiId参数!")); #endregion Result groupData = await _decreasePaymentsRep.DecreasePaymentsList(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); } } /// /// 团组增减款项操作(Status:1.新增,2.修改) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task OpDecreasePayments(DecreasePaymentsOpDto dto) { try { Result groupData = await _decreasePaymentsRep.OpDecreasePayments(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 团组增减款项操作 删除 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task DelDecreasePayments(DelBaseDto dto) { if (dto.Id < 1) return Ok(JsonView(false, "请传入有效的Id参数!")); if (dto.DeleteUserId < 1) return Ok(JsonView(false, "请传入有效的DeleteUserId参数!")); var res = await _decreasePaymentsRep._Del(dto.Id, dto.DeleteUserId); if (res.Code == 0) { return Ok(JsonView(true, "删除成功!")); } return Ok(JsonView(false, "删除失败!")); } /// /// 根据团组增减款项Id查询 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task QueryDecreasePaymentsById(DecreasePaymentsByIdDto dto) { try { Result groupData = await _decreasePaymentsRep.QueryDecreasePaymentsById(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } #endregion #region 文件上传、删除 /// /// region 文件上传 可以带参数 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task UploadProject(IFormFile file) { try { var TypeName = Request.Headers["TypeName"].ToString(); if (file != null) { var fileDir = AppSettingsHelper.Get("GrpFileBasePath"); //文件名称 string projectFileName = file.FileName; //上传的文件的路径 string filePath = ""; if (TypeName == "A")//A代表团组增减款项 { if (!Directory.Exists(fileDir)) { Directory.CreateDirectory(fileDir); } //上传的文件的路径 filePath = fileDir + $@"\团组增减款项相关文件\{projectFileName}"; } else if (TypeName == "B")//B代表商邀相关文件 { if (!Directory.Exists(fileDir)) { Directory.CreateDirectory(fileDir); } //上传的文件的路径 filePath = fileDir + $@"\商邀相关文件\{projectFileName}"; } using (FileStream fs = System.IO.File.Create(filePath)) { file.CopyTo(fs); fs.Flush(); } return Ok(JsonView(true, "上传成功!", projectFileName)); } else { return Ok(JsonView(false, "上传失败!")); } } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 删除指定文件 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task DelFile(DelFileDto dto) { try { var TypeName = Request.Headers["TypeName"].ToString(); string filePath = ""; var fileDir = AppSettingsHelper.Get("GrpFileBasePath"); // 返回与指定虚拟路径相对应的物理路径即绝对路径 int id = 0; if (TypeName == "A") { filePath = fileDir + "/团组增减款项相关文件/" + dto.fileName; // 删除该文件 System.IO.File.Delete(filePath); id = await _sqlSugar.Updateable().Where(a => a.Id == dto.Id).SetColumns(a => new Grp_DecreasePayments { FilePath = "" }).ExecuteCommandAsync(); } else if (TypeName == "B") { filePath = fileDir + "/商邀相关文件/" + dto.fileName; // 删除该文件 System.IO.File.Delete(filePath); id = await _sqlSugar.Updateable().Where(a => a.Id == dto.Id).SetColumns(a => new Grp_InvitationOfficialActivities { Attachment = "" }).ExecuteCommandAsync(); } if (id != 0) { return Ok(JsonView(true, "成功!")); } else { return Ok(JsonView(false, "失败!")); } } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } #endregion #region 商邀费用录入 /// /// 根据团组Id查询商邀费用列表 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task InvitationOfficialActivitiesList(InvitationOfficialActivitiesListDto dto) { try { Result groupData = await _InvitationOfficialActivitiesRep.InvitationOfficialActivitiesList(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } // /// /// 商邀费用 Info Page 基础数据源 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task InvitationOfficialActivityInitBasicData() { try { Result groupData = await _InvitationOfficialActivitiesRep._InitBasicData(); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, "操作成功", groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); throw; } } /// /// 根据商邀费用ID查询C表和商邀费用数据 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task InvitationOfficialActivitiesById(InvitationOfficialActivitiesByIdDto dto) { try { Result groupData = await _InvitationOfficialActivitiesRep.InvitationOfficialActivitiesById(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); throw; } } /// /// 商邀费用录入操作(Status:1.新增,2.修改) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task OpInvitationOfficialActivities(OpInvitationOfficialActivitiesDto dto) { try { Result groupData = await _InvitationOfficialActivitiesRep.OpInvitationOfficialActivities(dto, _setDataRep.PostCurrencyByDiid); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 商邀删除 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task DelInvitationOfficialActivities(DelBaseDto dto) { try { _sqlSugar.BeginTran(); var res1 = _sqlSugar.Updateable() .SetColumns(it => new Grp_InvitationOfficialActivities() { IsDel = 1, DeleteUserId = dto.DeleteUserId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }) .Where(it => it.Id == dto.Id) .ExecuteCommand(); if (res1 > 0) { int _diId = 0; var _ioaInfo = _sqlSugar.Queryable().Where(it => it.Id == dto.Id).First(); if (_ioaInfo != null) { _diId = _ioaInfo.DiId; } var res2 = _sqlSugar.Updateable() .SetColumns(a => new Grp_CreditCardPayment() { IsDel = 1, DeleteUserId = dto.DeleteUserId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }) .Where(a => a.CId == dto.Id && a.DIId == _diId && a.CTable == 81) .ExecuteCommand(); if (res2 > 0) { _sqlSugar.CommitTran(); return Ok(JsonView(true, "删除成功!")); } } _sqlSugar.RollbackTran(); return Ok(JsonView(false, "删除失败")); } catch (Exception ex) { _sqlSugar.RollbackTran(); return Ok(JsonView(false, ex.Message)); } } #endregion #region 团组英文资料 /// /// 查询团组英文所有资料 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task QueryDelegationEnData(QueryDelegationEnDataDto dto) { try { Result groupData = await _delegationEnDataRep.QueryDelegationEnData(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 团组英文资料操作(Status:1.新增,2.修改) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task OpDelegationEnData(OpDelegationEnDataDto dto) { try { Result groupData = await _delegationEnDataRep.OpDelegationEnData(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 团组英文资料Id查询数据 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task QueryDelegationEnDataById(QueryDelegationEnDataByIdDto dto) { try { Grp_DelegationEnData _DelegationEnData = await _sqlSugar.Queryable().FirstAsync(it => it.Id == dto.Id && it.IsDel == 0); if (_DelegationEnData != null) { return Ok(JsonView(true, "查询成功!", _DelegationEnData)); } return Ok(JsonView(true, "暂无数据!", _DelegationEnData)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 团组英文资料删除 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task DelDelegationEnData(DelBaseDto dto) { try { var res = await _delegationEnDataRep.SoftDeleteByIdAsync(dto.Id.ToString(), dto.DeleteUserId); if (!res) { return Ok(JsonView(false, "删除失败")); } return Ok(JsonView(true, "删除成功!")); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } #endregion #region 导出邀请函 /// /// 导出邀请函页面初始化 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task QueryinvitationLetter(DecreasePaymentsListDto dto) { try { List grp_Delegations = _sqlSugar.Queryable().Where(a => a.IsDel == 0).OrderBy(a => a.Id, OrderByType.Desc).ToList(); List crm_Deles = new List(); if (dto.DiId == 0) { crm_Deles = await _sqlSugar.Queryable().Where(a => a.DiId == grp_Delegations[0].Id && a.IsDel == 0).ToListAsync(); } else { crm_Deles = await _sqlSugar.Queryable().Where(a => a.DiId == dto.DiId && a.IsDel == 0).ToListAsync(); } return Ok(JsonView(true, "查询成功!", new { deleClient = crm_Deles, delegations = grp_Delegations })); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 导出邀请函 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task invitationLetter(DecreasePaymentsListDto dto) { #region 参数验证 //if (dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数!")); if (dto.DiId < 1) return Ok(JsonView(false, "请传入有效的DiId参数!")); #endregion try { Dictionary transDic = new Dictionary(); string sql = string.Format(@"Select tcl.Id,tcl.DiId,temp.*,tcl.ShippingSpaceTypeId,tcl.ShippingSpaceSpecialNeeds, tcl.HotelSpecialNeeds,tcl.MealSpecialNeeds,tcl.Remark From Grp_TourClientList tcl Left Join (Select dc.Id As DcId,dc.LastName,dc.FirstName,dc.Pinyin,dc.Sex,ccom.CompanyFullName,dc.Job, cc1.CertNo As IDCardNo,dc.Phone,dc.BirthDay,cc2.PassportType,cc2.CertNo As PassportNo,cc2.Country, cc2.Area,cc2.IssueDt,cc2.ExpiryDt From Crm_DeleClient dc Left Join Crm_CustomerCompany ccom On dc.CrmCompanyId = ccom.Id And ccom.IsDel = 0 Left Join Crm_CustomerCert cc1 On dc.Id = cc1.DcId And cc1.SdId = 773 And cc1.IsDel = 0 Left Join Crm_CustomerCert cc2 On dc.Id = cc2.DcId And cc2.SdId = 774 And cc2.IsDel = 0 Where dc.IsDel = 0) temp On temp.DcId =tcl.ClientId Where tcl.IsDel = 0 And tcl.DiId = {0}", dto.DiId); var datas = _sqlSugar.SqlQueryable(sql).ToList(); List texts = new List(); if (datas.Count != 0) { foreach (TourClientListDetailsView item in datas) { if (!string.IsNullOrWhiteSpace(item.Pinyin)) { transDic.Add(item.LastName + item.FirstName, item.Pinyin); } else { string name = item.LastName + item.FirstName; texts.Add(name); } if (!string.IsNullOrEmpty(item.Job) && !texts.Contains(item.Job)) { if (!transDic.ContainsKey(item.Job)) { texts.Add(item.Job); } } if (!string.IsNullOrEmpty(item.CompanyFullName)) { texts.Add(item.CompanyFullName); } } List transData = _airTicketResRep.ReTransBatch(texts, "en"); if (transData.Count > 0) { foreach (TranslateResult item in transData) { if (!transDic.ContainsKey(item.Query)) { transDic.Add(item.Query, item.Translation); } } } List list = new List(); foreach (TourClientListDetailsView dele in datas) { GuestList guestList = new GuestList(); if (!string.IsNullOrWhiteSpace(dele.Pinyin)) { guestList.Name = dele.Pinyin; } else { string Name = transDic.Where(s => s.Key == dele.LastName + dele.FirstName).FirstOrDefault().Value; guestList.Name = Name; } if (dele.Sex == 0) { guestList.Sex = "Male"; } else if (dele.Sex == 1) { guestList.Sex = "Female"; } guestList.DOB = dele.BirthDay.Replace('-', '.'); if (!string.IsNullOrEmpty(dele.Job)) { guestList.Job = dele.Job; } list.Add(guestList); } //载入模板 Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/邀请函模板0210.docx"); 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 < list.Count; i++) { builder.MoveToCell(0, i + 1, 0, 0); builder.Write(list[i].Name.ToString()); builder.MoveToCell(0, i + 1, 1, 0); builder.Write(list[i].Sex.ToString()); builder.MoveToCell(0, i + 1, 2, 0); builder.Write(list[i].DOB.ToString()); builder.MoveToCell(0, i + 1, 3, 0); builder.Write(list[i].Job.ToString()); } //删除多余行 while (tableOne.Rows.Count > list.Count + 1) { tableOne.Rows.RemoveAt(list.Count + 1); } var fileDir = AppSettingsHelper.Get("GrpFileBasePath"); string fileName = "邀请函" + DateTime.Now.ToString("yyyy-MM-dd") + ".docx"; string filePath = fileDir + $@"商邀相关文件/{fileName}"; doc.Save(filePath); string Url = AppSettingsHelper.Get("WordBaseUrl") + "Office/GrpFile/商邀相关文件/" + fileName; return Ok(JsonView(true, "操作成功!", Url)); } else { return Ok(JsonView(false, "该团组客户名单暂未录入!")); } } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); throw; } } #endregion #region 团组经理模块 出入境费用 ///// ///// 团组模块 - 出入境费用 ///// ///// //[HttpPost] //[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] //public async Task SetEnterExitCostCurrencyChange() //{ // try // { // var data = await _enterExitCostRep.SetEnterExitCostCurrencyChange(); // if (data.Code != 0) // { // return Ok(JsonView(false, data.Msg)); // } // return Ok(JsonView(true, "查询成功!")); // } // catch (Exception ex) // { // return Ok(JsonView(false, ex.Message)); // throw; // } //} /// /// 团组模块 - 出入境费用 - 子项 地区更改为 nationalTravelFee 的id /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task SetDayAndCostAreaChange() { try { var nationalTravelFee = await _sqlSugar.Queryable().ToListAsync(); var dayAndCost = await _sqlSugar.Queryable().Where(it => it.IsDel == 0).ToListAsync(); var unite = dayAndCost.Where(a => nationalTravelFee.Any(b => a.Place.Trim() == b.City)).ToList(); //交集 var merge = dayAndCost.Where(a => !nationalTravelFee.Any(b => a.Place.Trim() == b.City)).ToList(); //差集 foreach (var item in unite) //处理交集数据 { dayAndCost.Where(it => it.Id == item.Id).FirstOrDefault().NationalTravelFeeId = nationalTravelFee.Where(it => it.City.Trim() == item.Place.Trim()).FirstOrDefault().Id; } foreach (var item in merge) //处理差集数据 { int nationalTravelFeeId = 0; var cityData = nationalTravelFee.Where(it => it.City.Trim() == item.Place.Trim()).FirstOrDefault(); if (cityData != null) nationalTravelFeeId = cityData.Id; else { var countryData = nationalTravelFee.Where(it => it.Country.Trim() == item.Place.Trim()).FirstOrDefault(); if (countryData != null) nationalTravelFeeId = countryData.Id; } dayAndCost.Where(it => it.Id == item.Id).FirstOrDefault().NationalTravelFeeId = nationalTravelFeeId; } //只更新dayAndCost 的 nationalTravelFeeId; var result = _sqlSugar.Updateable(dayAndCost).UpdateColumns(it => new { it.NationalTravelFeeId }).ExecuteCommand(); if (result > 0) return Ok(JsonView(true, "nationalTravelFeeId列更新成功!")); else return Ok(JsonView(false, "nationalTravelFeeId列更新失败!")); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); throw; } } /// /// 团组模块 - 出入境费用 - 基础数据源(团组名称/币种类型) /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GetEnterExitCostDataSource(PortDtoBase dto) { try { var groupNameData = await _groupRepository.GetGroupNameList(new GroupNameDto { PortType = dto.PortType }); string sql = string.Format("Select * From Sys_SetData Where IsDel = 0"); //SetDataInfoView var dataSource = await _sqlSugar.SqlQueryable(sql).ToListAsync(); var currencyData = dataSource.Where(it => it.STid == 66).ToList(); //所有币种 List _CurrencyData = _mapper.Map>(currencyData); var wordTypeData = dataSource.Where(it => it.STid == 72).ToList(); //三公费用-Word明细类型 List _WordTypeData = _mapper.Map>(wordTypeData); var excelTypeData = dataSource.Where(it => it.STid == 73).ToList(); //三公费用-Excel明细类型 List _ExcelTypeData = _mapper.Map>(excelTypeData); //默认币种显示 List _currencyInfos = new List() { new CurrencyInfo (){ CurrencyCode="USD",CurrencyName = "美元",Rate = 0.0000M }, new CurrencyInfo (){ CurrencyCode="EUR",CurrencyName = "欧元",Rate = 0.0000M }, new CurrencyInfo (){ CurrencyCode="GBP",CurrencyName = "英镑",Rate = 0.0000M }, new CurrencyInfo (){ CurrencyCode="JPY",CurrencyName = "日元",Rate = 0.0000M }, new CurrencyInfo (){ CurrencyCode="HKD",CurrencyName = "港币",Rate = 0.0000M }, }; var _currencyRate = await _juHeApi.PostItemRateAsync(_currencyInfos.Select(it => it.CurrencyCode).ToArray()); if (_currencyRate.Count > 0) { foreach (var item in _currencyInfos) { var rateInfo = _currencyRate.Where(it => it.Name.Equals(item.CurrencyName)).FirstOrDefault(); if (rateInfo != null) { item.Rate = Convert.ToDecimal(rateInfo.FSellPri) / 100.00M; } } } return Ok(JsonView(true, "查询成功!", new { GroupNameData = groupNameData.Data, CurrencyData = _CurrencyData, WordTypeData = _WordTypeData, ExcelTypeData = _ExcelTypeData, CurrencyInit = _currencyInfos })); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); throw; } } /// /// 团组模块 - 出入境费用 /// 实时汇率 tips /// 签证费用 tips /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GetEnterExitCostCorrelationTips(EnterExitCostInfobyDiIdDto dto) { var groupInfo = await _sqlSugar.Queryable().FirstAsync(it => it.Id == dto.DiId && it.IsDel == 0); //默认币种显示 List _currencyInfos = new List() { new CurrencyInfo (){ CurrencyCode="USD",CurrencyName = "美元",Rate = 0.0000M }, new CurrencyInfo (){ CurrencyCode="EUR",CurrencyName = "欧元",Rate = 0.0000M }, new CurrencyInfo (){ CurrencyCode="GBP",CurrencyName = "英镑",Rate = 0.0000M }, new CurrencyInfo (){ CurrencyCode="JPY",CurrencyName = "日元",Rate = 0.0000M }, new CurrencyInfo (){ CurrencyCode="HKD",CurrencyName = "港币",Rate = 0.0000M }, }; var _currencyRate = await _juHeApi.PostItemRateAsync(_currencyInfos.Select(it => it.CurrencyCode).ToArray()); List reteInfos = new List(); if (_currencyRate.Count > 0) { foreach (var item in _currencyInfos) { var rateInfo = _currencyRate.Where(it => it.Name.Equals(item.CurrencyName)).FirstOrDefault(); if (rateInfo != null) { item.Rate = Convert.ToDecimal((Convert.ToDecimal(rateInfo.FSellPri == null ? 0.00M : rateInfo.FSellPri) / 100.00M).ToString("#0.0000")); reteInfos.Add(new { currCode = item.CurrencyCode, currName = item.CurrencyName, rate = item.Rate, lastUpdateDt = rateInfo.Date + " " + rateInfo.Time }); } } } var visaData = await _visaFeeInfoRep.EntryAndExitTips(dto.DiId); var airData = await _ticketBlackCodeRep.EntryAndExitTips(dto.DiId); return Ok(JsonView(true, "查询成功!", new { //GroupNameData = groupNameData.Data, visaData = visaData.Data, airData = airData.Data, reteInfos = reteInfos })); } /// /// 团组模块 - 出入境费用 - Info /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GetEnterExitCostInfobyDiId(EnterExitCostInfobyDiIdDto dto) { try { var data = await _enterExitCostRep.GetEnterExitCostInfoByDiId(dto); if (data.Code != 0) { return Ok(JsonView(false, data.Msg)); } return Ok(JsonView(true, "查询成功!", data.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 团组模块 - 出入境费用 - Add And Update /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostEnterExitCostOperate(EnterExitCostOperateDto dto) { try { var data = await _enterExitCostRep.PostEnterExitCostOperate(dto); if (data.Code != 0) { return Ok(JsonView(false, data.Msg)); } return Ok(JsonView(true, data.Msg, data.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 团组模块 - 出入境费用 - File downlaod /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostEnterExitCostDownload(EnterExitCostDownloadDto dto) { try { if (dto.DiId < 1) { return Ok(JsonView(false, "请传入有效的DiId参数;")); } if (dto.ExportType < 1) { return Ok(JsonView(false, "请传入有效的ExportType参数; 1 明细表 2 表格")); } if (dto.SubTypeId < 1) { return Ok(JsonView(false, @"请传入有效的SubTypeId参数; 1 明细表 --> 1005(默认明细表) 1006(因公出国(境)经费测算明细表) 1007(四川省商务厅出国经费财政先行审核表) 2 表格 --> 1008(派员单位出(境)任务和预算审批意见表) 1009(省级单位出(境)经费报销单) 3 团组成员名单 1 团组成员名单")); } var _EnterExitCosts = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.DiId == dto.DiId).First(); var _DayAndCosts = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.DiId == dto.DiId).ToList(); if (_EnterExitCosts == null) { return Ok(JsonView(false, "该团组未填写出入境费用;")); } //数据源 List dac1 = _DayAndCosts.Where(it => it.Type == 1).ToList(); //住宿费 List dac2 = _DayAndCosts.Where(it => it.Type == 2).ToList(); //伙食费 List dac3 = _DayAndCosts.Where(it => it.Type == 3).ToList(); //公杂费 List dac4 = _DayAndCosts.Where(it => it.Type == 4).ToList(); //培训费 var _CurrDatas = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.STid == 66).ToList(); var _DelegationInfo = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.Id == dto.DiId).First(); var DeleClientList = _sqlSugar.Queryable() .LeftJoin((tcl, dc) => tcl.ClientId == dc.Id && dc.IsDel == 0) .LeftJoin((tcl, dc, cc) => dc.CrmCompanyId == cc.Id && dc.IsDel == 0) .Where((tcl, dc, cc) => tcl.IsDel == 0 && tcl.DiId == dto.DiId) .Select((tcl, dc, cc) => new { Name = dc.LastName + dc.FirstName, Sex = dc.Sex, Birthday = dc.BirthDay, Company = cc.CompanyFullName, Job = dc.Job }) .ToList(); var blackCode = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.DiId == dto.DiId).First(); var threeCodes = _sqlSugar.Queryable().Where(it => it.IsDel == 0).ToList(); var placeData = _sqlSugar.Queryable().Where(it => it.IsDel == 0).ToList(); var rateDatas = await _EnterExitCosts.CurrencyRemark.SplitExchangeRate(); _DelegationInfo.VisitCountry = _DelegationInfo.VisitCountry.Replace("|", "、"); if (dto.ExportType == 1) //明细表 { if (dto.SubTypeId == 1005) //1005(默认明细表) { //获取模板 string tempPath = (AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/Temp/出入境费用表模板.docx"); //载入模板 Document doc = new Document(tempPath); DocumentBuilder builder = new DocumentBuilder(doc); //利用键值对存放数据 Dictionary dic = new Dictionary(); decimal stayFeeTotal = _DayAndCosts.Where(it => it.Type == 1).Sum(it => it.SubTotal); // 住宿费 decimal mealsFeeTotal = _DayAndCosts.Where(it => it.Type == 2).Sum(it => it.SubTotal); // 伙食费费 decimal miscellaneousFeeTotal = _DayAndCosts.Where(it => it.Type == 3).Sum(it => it.SubTotal); // 公杂费 decimal tainFeeTotal = _DayAndCosts.Where(it => it.Type == 4).Sum(it => it.SubTotal); // 培训费 decimal insidePayTotal = _EnterExitCosts.InsidePay; string row1_1 = ""; if (_EnterExitCosts.Visa > 0) { //insidePayTotal += _EnterExitCosts.Visa; row1_1 = $"签证费: {_EnterExitCosts.Visa.ToString("#0.00")} 人民币/人"; if (!string.IsNullOrEmpty(_EnterExitCosts.VisaRemark)) { row1_1 += $"\t签证费用描述: : {_EnterExitCosts.VisaRemark} 人民币/人"; } } string row1_2 = ""; if (_EnterExitCosts.YiMiao > 0) { //insidePayTotal += _EnterExitCosts.YiMiao; row1_2 += $"疫苗费:{_EnterExitCosts.YiMiao.ToString("#0.00")} 人民币/人"; } if (_EnterExitCosts.HeSuan > 0) { //insidePayTotal += _EnterExitCosts.HeSuan; row1_2 += $"核酸检测费:{_EnterExitCosts.HeSuan.ToString("#0.00")} 人民币/人"; } if (_EnterExitCosts.Service > 0) { //insidePayTotal += _EnterExitCosts.Service; row1_2 += $"服务费:{_EnterExitCosts.Service.ToString("#0.00")} 人民币/人"; } string row1_3 = ""; if (_EnterExitCosts.Safe > 0) { //insidePayTotal += _EnterExitCosts.Safe; row1_3 += $"保险费:{_EnterExitCosts.Safe.ToString("#0.00")} 人民币/人"; } if (_EnterExitCosts.Ticket > 0) { //insidePayTotal += _EnterExitCosts.Ticket; row1_3 += $"参展门票:{_EnterExitCosts.Ticket.ToString("#0.00")} 人民币/人"; } string row1 = ""; if (!string.IsNullOrEmpty(row1_1)) row1 += $"{row1_1}\r\n"; if (!string.IsNullOrEmpty(row1_2)) row1 += $"{row1_2}\r\n"; if (!string.IsNullOrEmpty(row1_3)) row1 += $"{row1_3}"; dic.Add("InsidePay", insidePayTotal.ToString("#0.00")); dic.Add("Row1Str", row1); dic.Add("OutsideJJ", _EnterExitCosts.OutsideJJPay.ToString("#0.00")); dic.Add("OutsaideGW", _EnterExitCosts.OutsaideGWPay.ToString("#0.00")); dic.Add("AirJJ", _EnterExitCosts.AirJJ.ToString("#0.00")); dic.Add("AirGW", _EnterExitCosts.AirGW.ToString("#0.00")); dic.Add("CityTranffic", _EnterExitCosts.CityTranffic.ToString("#0.00")); dic.Add("SubZS", stayFeeTotal.ToString("#0.00")); dic.Add("SubHS", mealsFeeTotal.ToString("#0.00")); string miscellaneousFeeTotalStr = miscellaneousFeeTotal.ToString("#0.00"); dic.Add("SubGZF", miscellaneousFeeTotalStr); //dic.Add("SubPX", tainFeeTotal.ToString("#0.00")); decimal subJJC = insidePayTotal + stayFeeTotal + mealsFeeTotal + miscellaneousFeeTotal + tainFeeTotal + _EnterExitCosts.OutsideJJPay; decimal subGWC = insidePayTotal + stayFeeTotal + mealsFeeTotal + miscellaneousFeeTotal + tainFeeTotal + _EnterExitCosts.OutsaideGWPay; dic.Add("SubJJC", subJJC.ToString("#0.00")); dic.Add("SubGWC", subGWC.ToString("#0.00")); #region 填充word模板书签内容 foreach (var key in dic.Keys) { builder.MoveToBookmark(key); builder.Write(dic[key]); } #endregion #region 填充word表格内容 ////获读取指定表格方法二 NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true); Aspose.Words.Tables.Table table1 = allTables[0] as Aspose.Words.Tables.Table; for (int i = 0; i < dac1.Count; i++) { Grp_DayAndCost dac = dac1[i]; if (dac == null) continue; builder.MoveToCell(0, i, 0, 0); builder.Write("第" + dac.Days.ToString() + "晚:"); builder.MoveToCell(0, i, 1, 0); //builder.Write(placeData.Find(it => it.Id == dac.NationalTravelFeeId)?.Country ?? "Unknown"); //builder.Write(dac.Place == null ? "" : dac.Place); builder.Write(GetEnterExitCostExportCity(placeData, dac.NationalTravelFeeId)); builder.MoveToCell(0, i, 2, 0); builder.Write("费用标准:"); string curr = ""; var currData = _CurrDatas.Where(it => it.Id == dac.Currency).FirstOrDefault(); if (currData != null) { curr = currData.Name; } builder.MoveToCell(0, i, 3, 0); builder.Write(dac.Cost.ToString("#0.00") + curr); builder.MoveToCell(0, i, 4, 0); builder.Write("费用小计:"); builder.MoveToCell(0, i, 5, 0); builder.Write(dac.SubTotal.ToString("#0.00") + "CNY"); } //删除多余行 while (table1.Rows.Count > dac1.Count) { table1.Rows.RemoveAt(dac1.Count); } Aspose.Words.Tables.Table table2 = allTables[1] as Aspose.Words.Tables.Table; for (int i = 0; i < dac2.Count; i++) { Grp_DayAndCost dac = dac2[i]; if (dac == null) continue; builder.MoveToCell(1, i, 0, 0); builder.Write("第" + dac.Days.ToString() + "天:"); builder.MoveToCell(1, i, 1, 0); builder.Write(GetEnterExitCostExportCity(placeData, dac.NationalTravelFeeId)); builder.MoveToCell(1, i, 2, 0); builder.Write("费用标准:"); string curr = ""; var currData = _CurrDatas.Where(it => it.Id == dac.Currency).FirstOrDefault(); if (currData != null) { curr = currData.Name; } builder.MoveToCell(1, i, 3, 0); builder.Write(dac.Cost.ToString("#0.00") + curr); builder.MoveToCell(1, i, 4, 0); builder.Write("费用小计:"); builder.MoveToCell(1, i, 5, 0); builder.Write(dac.SubTotal.ToString("#0.00") + "CNY"); } //删除多余行 while (table2.Rows.Count > dac2.Count) { table2.Rows.RemoveAt(dac2.Count); } Aspose.Words.Tables.Table table3 = allTables[2] as Aspose.Words.Tables.Table; for (int i = 0; i < dac3.Count; i++) { Grp_DayAndCost dac = dac3[i]; if (dac == null) continue; builder.MoveToCell(2, i, 0, 0); builder.Write("第" + dac.Days.ToString() + "天:"); builder.MoveToCell(2, i, 1, 0); builder.Write(GetEnterExitCostExportCity(placeData, dac.NationalTravelFeeId)); builder.MoveToCell(2, i, 2, 0); builder.Write("费用标准:"); string curr = ""; var currData = _CurrDatas.Where(it => it.Id == dac.Currency).FirstOrDefault(); if (currData != null) { curr = currData.Name; } builder.MoveToCell(2, i, 3, 0); builder.Write(dac.Cost.ToString("#0.00") + curr); builder.MoveToCell(2, i, 4, 0); builder.Write("费用小计:"); builder.MoveToCell(2, i, 5, 0); builder.Write(dac.SubTotal.ToString("#0.00") + "CNY"); } //删除多余行 while (table3.Rows.Count > dac3.Count) { table3.Rows.RemoveAt(dac3.Count); } #endregion //文件名 string strFileName = _DelegationInfo.TeamName + "出入境费用.docx"; doc.Save(AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/File/" + strFileName); string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/EnterExitCost/File/" + strFileName; return Ok(JsonView(true, "成功", new { Url = url })); } else if (dto.SubTypeId == 1006)//1006(因公出国(境)经费测算明细表) { //获取模板 string tempPath = (AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/Temp/因公出国(境)经费测算明细表.docx"); //载入模板 Document doc = new Document(tempPath); DocumentBuilder builder = new DocumentBuilder(doc); Dictionary dic = new Dictionary(); if (blackCode != null && !string.IsNullOrWhiteSpace(blackCode.BlackCode)) { List list = new List(); try { var spilitArr = Regex.Split(blackCode.BlackCode, "\r\n"); foreach (var item in spilitArr) { var spDotandEmpty = item.Split('.')[1].Split(' ').Where(x => !string.IsNullOrEmpty(x)).ToList(); var depCode = spDotandEmpty[2].Substring(0, 3); var arrCode = spDotandEmpty[2].Substring(3, 3); string depName = threeCodes.Find(it => it.Three.Equals(depCode)).City, arrName = threeCodes.Find(it => it.Three.Equals(arrCode)).City; list.Add(depName); list.Add(arrName); } list = list.Distinct().ToList(); dic.Add("ReturnCode", string.Join("-", list).TrimEnd('-')); } catch (Exception) { dic.Add("ReturnCode", "行程录入不正确!"); } } else { dic.Add("ReturnCode", "未录入行程!"); } dic.Add("ReturnCodeAir", dic["ReturnCode"]); dic.Add("VisitStartDate", _DelegationInfo.VisitStartDate.ToString("yyyy年MM月dd日")); dic.Add("VisitEndDate", _DelegationInfo.VisitEndDate.ToString("yyyy年MM月dd日")); if (dic.ContainsKey("VisitStartDate") && dic.ContainsKey("VisitEndDate")) { TimeSpan sp = _DelegationInfo.VisitEndDate.Subtract(_DelegationInfo.VisitStartDate); dic.Add("Day", sp.Days.ToString()); } dic.Add("VisitCountry", _DelegationInfo.VisitCountry); dic.Add("ClientUnit", _DelegationInfo.ClientUnit); //var Names = string.Join("、", DeleClientList.Select(it => it.Name).ToList()).TrimEnd('、'); //dic.Add("Names", Names); NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true); Aspose.Words.Tables.Table table1 = allTables[0] as Aspose.Words.Tables.Table; decimal dac1totalPrice = 0.00M; int accommodationStartIndex = 6, foodandotherStartIndex = 22; foreach (var dac in dac1) { if (dac.SubTotal == 0.00M) { continue; } //builder.MoveToCell(0, accommodationStartIndex, 0, 0); //builder.Write(DeleClientList[i].LastName + DeleClientList[i].Name); builder.MoveToCell(0, accommodationStartIndex, 1, 0); builder.Write(GetEnterExitCostExportCity(placeData, dac.NationalTravelFeeId)); builder.MoveToCell(0, accommodationStartIndex, 2, 0); string currency = _CurrDatas.Find(it => it.Id == dac.Currency)?.Remark ?? "Unknown"; builder.Write(currency);//币种 builder.MoveToCell(0, accommodationStartIndex, 3, 0); builder.Write(dac.Cost.ToString("#0.00"));//标准 builder.MoveToCell(0, accommodationStartIndex, 4, 0); builder.Write("");//人数 builder.MoveToCell(0, accommodationStartIndex, 5, 0); builder.Write("");//天数 builder.MoveToCell(0, accommodationStartIndex, 6, 0); builder.Write(dac.SubTotal.ToString("#0.00"));//小计 builder.MoveToCell(0, accommodationStartIndex, 7, 0); decimal rate = 0.00M; rate = rateDatas.Find(it => it.CurrencyName.Equals(currency))?.Rate ?? 0.00M; builder.Write(rate.ToString("#0.0000"));//汇率 builder.MoveToCell(0, accommodationStartIndex, 8, 0); decimal rbmPrice = dac.SubTotal; builder.Write(rbmPrice.ToString("#0.00"));//折合人民币 accommodationStartIndex++; dac1totalPrice += Convert.ToDecimal(rbmPrice.ToString("#0.00")); } dic.Add("dac1totalPrice", dac1totalPrice.ToString("#0.00")); for (int i = 21; i > (dac1.Count == 0 ? 1 : dac1.Count) + 6; i--) { table1.Rows.RemoveAt(i - 1); foodandotherStartIndex--; } if (dac2.Count == dac3.Count)//国家 币种 金额 { for (int i = 0; i < dac2.Count; i++) { dac2[i].SubTotal = dac2[i].SubTotal + dac3[i].SubTotal; //小计 dac2[i].Cost = dac3[i].Cost + dac2[i].Cost; //标准 } } decimal dac2totalPrice = 0.00M; foreach (var dac in dac2) { if (dac.SubTotal == 0) { continue; } builder.MoveToCell(0, foodandotherStartIndex, 1, 0); builder.Write(GetEnterExitCostExportCity(placeData, dac.NationalTravelFeeId)); builder.MoveToCell(0, foodandotherStartIndex, 2, 0); string currency = _CurrDatas.Find(it => it.Id == dac.Currency)?.Remark ?? "Unknown"; builder.Write(currency);//币种 builder.MoveToCell(0, foodandotherStartIndex, 3, 0); builder.Write(dac.Cost.ToString("#0.00"));//标准 builder.MoveToCell(0, foodandotherStartIndex, 4, 0); builder.Write("");//人数 builder.MoveToCell(0, foodandotherStartIndex, 5, 0); builder.Write("");//天数 builder.MoveToCell(0, foodandotherStartIndex, 6, 0); builder.Write(dac.SubTotal.ToString("#0.00"));//小计 builder.MoveToCell(0, foodandotherStartIndex, 7, 0); decimal rate = 0.00M; rate = rateDatas.Find(it => it.CurrencyName.Equals(currency))?.Rate ?? 0.00M; builder.Write(rate.ToString("#0.0000"));//汇率 builder.MoveToCell(0, foodandotherStartIndex, 8, 0); decimal rbmPrice = dac.SubTotal; builder.Write(rbmPrice.ToString("#0.00"));//折合人民币 foodandotherStartIndex++; dac2totalPrice += Convert.ToDecimal(rbmPrice.ToString("#0.00")); } dic.Add("dac2totalPrice", dac2totalPrice.ToString("#0.00")); for (int i = foodandotherStartIndex + (15 - dac2.Count); i > (dac2.Count == 0 ? 1 : 0) + foodandotherStartIndex; i--) { table1.Rows.RemoveAt(i - 1); } dic.Add("CityTranffic", _EnterExitCosts.CityTranffic.ToString("#0.00")); string otherFeeStr = ""; if (_EnterExitCosts.Visa > 0) otherFeeStr += $"签证费: {_EnterExitCosts.Visa.ToString("#0.00")} 元,"; if (_EnterExitCosts.Safe > 0) otherFeeStr += $"保险费: {_EnterExitCosts.Safe.ToString("#0.00")} 元,"; if (_EnterExitCosts.Ticket > 0) otherFeeStr += $"参展门票费: {_EnterExitCosts.Ticket.ToString("#0.00")} 元,"; if (otherFeeStr.Length > 0) { otherFeeStr = otherFeeStr.Substring(0, otherFeeStr.Length - 1); otherFeeStr = $"({otherFeeStr})"; dic.Add("OtherFeeStr", otherFeeStr); } //总计 decimal allPrice = dac1totalPrice + dac2totalPrice + _EnterExitCosts.Visa + _EnterExitCosts.Safe + _EnterExitCosts.Ticket; //国际旅费 string outsideJJ = ""; string allPriceJJ = ""; if (_EnterExitCosts.SumJJC == 1) { outsideJJ = string.Format(@"经济舱:{0} 元/人", _EnterExitCosts.AirJJ.ToString("#0.00")); allPriceJJ = string.Format(@"经济舱:{0} 元/人", (allPrice + _EnterExitCosts.OutsideJJPay).ToString("#0.00")); } string outsideGW = ""; string allPriceGW = ""; if (_EnterExitCosts.SumGWC == 1) { outsideGW = string.Format(@"公务舱:{0} 元/人", _EnterExitCosts.AirGW.ToString("#0.00")); allPriceGW = string.Format(@"公务舱:{0} 元/人", (allPrice + _EnterExitCosts.OutsaideGWPay).ToString("#0.00")); } if (_EnterExitCosts.SumJJC == 1 || _EnterExitCosts.SumGWC == 1) { string InTravelPriceStr = string.Format(@" ({0} {1})", outsideJJ, outsideGW); dic.Add("InTravelPrice", InTravelPriceStr); string FinalSumPriceStr = string.Format(@" ({0} {1})", allPriceJJ, allPriceGW); dic.Add("FinalSumPrice", FinalSumPriceStr); } //dic.Add("VisaPay", _EnterExitCosts.Visa.ToString("#0.00")); //dic.Add("SafePay", _EnterExitCosts.Safe.ToString("#0.00")); //dic.Add("YiMiao", _EnterExitCosts.YiMiao.ToString("#0.00")); foreach (var key in dic.Keys) { builder.MoveToBookmark(key); builder.Write(dic[key]); } //模板文件名 string strFileName = $"{_DelegationInfo.TeamName}因公出国(境)经费测算明细表.docx"; doc.Save(AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/File/" + strFileName); string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/EnterExitCost/File/" + strFileName; return Ok(JsonView(true, "成功", new { Url = url })); } else if (dto.SubTypeId == 1007) //1007(四川省商务厅出国经费财政先行审核表) { //获取模板 string tempPath = (AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/Temp/四川省商务厅出国经费财政先行审核表.xls"); //载入模板 WorkbookDesigner designer = new WorkbookDesigner(); designer.Workbook = new Workbook(tempPath); Dictionary dic = new Dictionary(); if (blackCode != null && !string.IsNullOrWhiteSpace(blackCode.BlackCode)) { List list = new List(); try { var spilitArr = Regex.Split(blackCode.BlackCode, "\r\n"); foreach (var item in spilitArr) { var spDotandEmpty = item.Split('.')[1].Split(' ').Where(x => !string.IsNullOrEmpty(x)).ToList(); var depCode = spDotandEmpty[2].Substring(0, 3); var arrCode = spDotandEmpty[2].Substring(3, 3); string depName = threeCodes.Find(it => it.Three.Equals(depCode))?.City ?? "Unknwon", arrName = threeCodes.Find(it => it.Three.Equals(arrCode))?.City ?? "Unknown"; list.Add(depName); list.Add(arrName); } list = list.Distinct().ToList(); dic.Add("ReturnCode", string.Join("-", list).TrimEnd('-')); } catch (Exception) { dic.Add("ReturnCode", "行程录入不正确!"); } } else { dic.Add("ReturnCode", "未录入行程!"); } dic.Add("ReturnCodeAir", dic["ReturnCode"]); dic.Add("VisitStartDate", _DelegationInfo.VisitStartDate.ToString("yyyy年MM月dd日")); dic.Add("VisitEndDate", _DelegationInfo.VisitEndDate.ToString("yyyy年MM月dd日")); if (dic.ContainsKey("VisitStartDate") && dic.ContainsKey("VisitEndDate")) { TimeSpan sp = _DelegationInfo.VisitEndDate.Subtract(_DelegationInfo.VisitStartDate); dic.Add("Day", sp.Days.ToString()); } dic.Add("VisitCountry", _DelegationInfo.VisitCountry); dic.Add("ClientUnit", _DelegationInfo.ClientUnit); var Names = string.Join("、", DeleClientList.Select(it => it.Name).ToList()).TrimEnd('、'); designer.SetDataSource("ClientUnit", _DelegationInfo.ClientUnit); designer.SetDataSource("VisitCountry", _DelegationInfo.VisitCountry); designer.SetDataSource("Group", _DelegationInfo.TeamName); designer.SetDataSource("ClientUnitTitle", _DelegationInfo.TeamName); designer.SetDataSource("Name", Names); designer.SetDataSource("VisitStartDate", dic["VisitStartDate"] + "-" + dic["VisitEndDate"]); designer.SetDataSource("Day", dic["Day"] + "天"); designer.SetDataSource("ReturnCode", dic["ReturnCode"]); designer.SetDataSource("ReturnCodeAir", dic["ReturnCodeAir"]); int startIndex = 10; const int startIndexcopy = 10; if (dac2.Count == dac3.Count)//国家 币种 金额 { for (int i = 0; i < dac2.Count; i++) { dac2[i].SubTotal = dac2[i].SubTotal + dac3[i].SubTotal; //小计 dac2[i].Cost = dac3[i].Cost + dac2[i].Cost; //标准 } } DataTable dtdac1 = new DataTable(); List place = new List(); dtdac1.Columns.AddRange(new DataColumn[] { new DataColumn(){ ColumnName = "city"}, new DataColumn(){ ColumnName = "curr"}, new DataColumn(){ ColumnName = "criterion"}, new DataColumn(){ ColumnName = "number",DataType = typeof(int)}, new DataColumn(){ ColumnName = "day",DataType = typeof(int)}, new DataColumn(){ ColumnName = "cost", DataType = typeof(decimal)}, new DataColumn(){ ColumnName = "rate", DataType = typeof(decimal) }, new DataColumn(){ ColumnName = "costRMB", DataType = typeof(decimal) }, }); DataTable dtdac2 = new DataTable(); dtdac2.Columns.AddRange(new DataColumn[] { new DataColumn(){ ColumnName = "city"}, new DataColumn(){ ColumnName = "curr"}, new DataColumn(){ ColumnName = "criterion"}, new DataColumn(){ ColumnName = "number",DataType = typeof(int)}, new DataColumn(){ ColumnName = "day",DataType = typeof(int)}, new DataColumn(){ ColumnName = "cost", DataType = typeof(decimal)}, new DataColumn(){ ColumnName = "rate", DataType = typeof(decimal) }, new DataColumn(){ ColumnName = "costRMB",DataType = typeof(decimal)}, }); dtdac1.TableName = "tb1"; dtdac2.TableName = "tb2"; decimal dac1totalPrice = 0.00M, dac2totalPrice = 0.00M; foreach (var item in dac1) { item.Place = GetEnterExitCostExportCity(placeData, item.NationalTravelFeeId); if (place.Contains(item.Place)) { continue; } DataRow row = dtdac1.NewRow(); row["city"] = item.Place; string currency = _CurrDatas.Find(it => it.Id == item.Currency)?.Remark ?? "Unknwon"; decimal rate = rateDatas.Find(it => it.CurrencyName == currency)?.Rate ?? 0.00M; row["curr"] = currency; row["rate"] = rate.ToString("#0.0000"); row["criterion"] = item.Cost.ToString("#0.00"); row["number"] = 1; row["day"] = dac1.FindAll(x => x.NationalTravelFeeId == item.NationalTravelFeeId).Count; //row["costRMB"] = rbmPrice; dtdac1.Rows.Add(row); place.Add(item.Place); } place = new List(); foreach (var item in dac2) { item.Place = GetEnterExitCostExportCity(placeData, item.NationalTravelFeeId); if (place.Contains(item.Place)) { continue; } DataRow row = dtdac2.NewRow(); row["city"] = item.Place; string currency = _CurrDatas.Find(it => it.Id == item.Currency)?.Remark ?? "Unknwon"; decimal rate = rateDatas.Find(it => it.CurrencyName == currency)?.Rate ?? 0.00M; row["curr"] = currency; row["rate"] = rate.ToString("#0.0000"); row["criterion"] = item.Cost.ToString("#0.00"); row["number"] = 1; row["day"] = dac2.FindAll(x => x.NationalTravelFeeId == item.NationalTravelFeeId).Count; //row["cost"] = item.SubTotal; //row["costRMB"] = rbmPrice; dtdac2.Rows.Add(row); place.Add(item.Place); //dac2totalPrice += rbmPrice; } dac1totalPrice = dac1.Sum(it => it.SubTotal); dac2totalPrice = dac2.Sum(it => it.SubTotal); designer.SetDataSource("dac1totalPrice", dac1totalPrice.ToString("#0.00")); designer.SetDataSource("dac2totalPrice", dac2totalPrice); designer.SetDataSource("cityTranffic", @$"其中:国外城市间机票费: {_EnterExitCosts.CityTranffic.ToString("#0.00")} 元"); designer.SetDataSource("sumCityTranffic", @$"{_EnterExitCosts.CityTranffic.ToString("#0.00")} "); string cell4Str = $" 4.国际旅费:经济舱:{_EnterExitCosts.AirJJ.ToString("#0.00")} 元/人,公务舱:{_EnterExitCosts.AirGW.ToString("#0.00")} 元/人"; string cellStr = $" 5.其他费用("; if (_EnterExitCosts.Visa > 0) cellStr += $"签证费:{_EnterExitCosts.Visa.ToString("#0.00")}元,"; if (_EnterExitCosts.YiMiao > 0) cellStr += $"疫苗费:{_EnterExitCosts.YiMiao.ToString("#0.00")}元,"; if (_EnterExitCosts.HeSuan > 0) cellStr += $"核酸费:{_EnterExitCosts.HeSuan.ToString("#0.00")}元,"; if (_EnterExitCosts.Safe > 0) cellStr += $"保险费:{_EnterExitCosts.Safe.ToString("#0.00")}元,"; if (_EnterExitCosts.Ticket > 0) cellStr += $"参展门票费:{_EnterExitCosts.Ticket.ToString("#0.00")}元,"; if (_EnterExitCosts.Service > 0) cellStr += $"服务费:{_EnterExitCosts.Service.ToString("#0.00")}元,"; if (cellStr.Length > 8) { cellStr = cellStr.Substring(0, cellStr.Length - 1); } cellStr += ")"; decimal otherFee = _EnterExitCosts.Visa + _EnterExitCosts.YiMiao + _EnterExitCosts.HeSuan + _EnterExitCosts.Safe + _EnterExitCosts.Ticket + _EnterExitCosts.Service; decimal s = dac1totalPrice + dac2totalPrice + _EnterExitCosts.OutsideJJPay + _EnterExitCosts.OutsaideGWPay + otherFee; decimal pxFee = dac4.Sum(it => it.Cost); decimal glvFee = _EnterExitCosts.OutsideJJPay + _EnterExitCosts.OutsaideGWPay; string celllastStr1 = ""; if (dac1totalPrice > 0) celllastStr1 += $"住宿费 {dac1totalPrice.ToString("#0.00")} 元"; if (dac2totalPrice > 0) celllastStr1 += $",伙食费和公杂费 {dac2totalPrice.ToString("#0.00")} 元"; if (pxFee > 0) celllastStr1 += $",培训费 {pxFee.ToString("#0.00")} 元"; celllastStr1 += $",国际旅费 元"; if (otherFee > 0) celllastStr1 += $",其他费用 {otherFee.ToString("#0.00")} 元"; string celllastStr = $" 经审核,{celllastStr1},本次出国经费预算合计为 元。其中:市本级安排 。"; designer.SetDataSource("cell4Str", cell4Str); designer.SetDataSource("cellStr", cellStr); designer.SetDataSource("cellSum", (_EnterExitCosts.Visa + _EnterExitCosts.Safe).ToString("#0.00")); designer.SetDataSource("cellSum4", (_EnterExitCosts.OutsideJJPay + _EnterExitCosts.OutsaideGWPay).ToString("#0.00")); designer.SetDataSource("celllastStr", celllastStr); Workbook wb = designer.Workbook; var sheet = wb.Worksheets[0]; //绑定datatable数据集 designer.SetDataSource(dtdac1); designer.SetDataSource(dtdac2); designer.Process(); var rowStart = dtdac1.Rows.Count; while (rowStart > 0) { sheet.Cells[startIndex, 8].Formula = $"=G{startIndex + 1} * H{startIndex + 1}"; sheet.Cells[startIndex, 6].Formula = $"=E{startIndex + 1} * F{startIndex + 1} * D{startIndex + 1}"; startIndex++; rowStart--; } sheet.Cells[startIndex, 8].Formula = $"=SUM(I{startIndexcopy + 1}: I{startIndex})"; startIndex += 1; //总计行 rowStart = dtdac2.Rows.Count; while (rowStart > 0) { sheet.Cells[startIndex, 8].Formula = $"= G{startIndex + 1} * H{startIndex + 1}"; sheet.Cells[startIndex, 6].Formula = $"= E{startIndex + 1} * F{startIndex + 1} * D{startIndex + 1}"; startIndex++; rowStart--; } sheet.Cells[startIndex, 8].Formula = $"=SUM(I{startIndexcopy + dtdac1.Rows.Count + 2}: I{startIndex})"; wb.CalculateFormula(true); //模板文件名 string strFileName = $"四川省商务厅出国经费财政先行审核表.xls"; designer.Workbook.Save(AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/File/" + strFileName); string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/EnterExitCost/File/" + strFileName; return Ok(JsonView(true, "成功", new { Url = url })); } else if (dto.SubTypeId == 1066) //成都市因公临时出国任务和预算审批意见表(外专培训团专用) { //获取模板 string tempPath = (AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/Temp/成都市因公临时出国任务和预算审批意见表.docx"); //载入模板 Document doc = new Document(tempPath); DocumentBuilder builder = new DocumentBuilder(doc); Dictionary dic = new Dictionary(); dic.Add("GroupName", _DelegationInfo.TeamName); dic.Add("ClientUnit", _DelegationInfo.ClientUnit); string missionLeader = ""; //团负责人默认接团客户名单第一个人 string missionLeaderJob = "";//负责人job int groupNumber = 0; //团人数 if (DeleClientList.Count > 0) { missionLeader = DeleClientList[0]?.Name ?? ""; missionLeaderJob = DeleClientList[0]?.Job ?? ""; } dic.Add("MissionLeader", missionLeader); //团负责人 dic.Add("MissionLeaderJob", missionLeaderJob); //团负责人job dic.Add("GroupNumber", _DelegationInfo.VisitPNumber.ToString()); //团人数 #region MyRegion //if (blackCode != null && !string.IsNullOrWhiteSpace(blackCode.BlackCode)) //{ // List list = new List(); // try // { // var spilitArr = Regex.Split(blackCode.BlackCode, "\r\n"); // foreach (var item in spilitArr) // { // var spDotandEmpty = item.Split('.')[1].Split(' ').Where(x => !string.IsNullOrEmpty(x)).ToList(); // var depCode = spDotandEmpty[2].Substring(0, 3); // var arrCode = spDotandEmpty[2].Substring(3, 3); // string depName = threeCodes.Find(it => it.Three.Equals(depCode)).City, // arrName = threeCodes.Find(it => it.Three.Equals(arrCode)).City; // list.Add(depName); // list.Add(arrName); // } // list = list.Distinct().ToList(); // dic.Add("ReturnCode", string.Join("-", list).TrimEnd('-')); // } // catch (Exception) // { // dic.Add("ReturnCode", "行程录入不正确!"); // } //} //else //{ // dic.Add("ReturnCode", "未录入行程!"); //} List countrys = _groupRepository.GroupSplitCountry(_DelegationInfo.VisitCountry); dic.Add("ReturnCode", string.Join("、", countrys)); #endregion //dic.Add("ReturnCodeAir", dic["ReturnCode"]); //dic.Add("VisitStartDate", _DelegationInfo.VisitStartDate.ToString("yyyy年MM月dd日")); //dic.Add("VisitEndDate", _DelegationInfo.VisitEndDate.ToString("yyyy年MM月dd日")); //if (dic.ContainsKey("VisitStartDate") && dic.ContainsKey("VisitEndDate")) //{ // TimeSpan sp = _DelegationInfo.VisitEndDate.Subtract(_DelegationInfo.VisitStartDate); // dic.Add("Day", sp.Days.ToString()); //} dic.Add("Day", _DelegationInfo.VisitDays.ToString()); dic.Add("CultivateDay", dac4.Count.ToString()); //培训天数 // dic.Add("VisitCountry", _DelegationInfo.VisitCountry); NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true); Aspose.Words.Tables.Table table1 = allTables[0] as Aspose.Words.Tables.Table; //培训人员名单 int cultivateRowIndex = 7; foreach (var item in DeleClientList) { builder.MoveToCell(0, cultivateRowIndex, 0, 0); builder.Write(item.Name); builder.MoveToCell(0, cultivateRowIndex, 1, 0); builder.Write(item.Sex == 0 ? "男" : item.Sex == 1 ? "女" : ""); builder.MoveToCell(0, cultivateRowIndex, 2, 0); string birthDay = ""; if (item.Birthday != null) { DateTime dt = Convert.ToDateTime(item.Birthday); birthDay = $"{dt.Year}.{dt.Month}"; } builder.Write(birthDay); builder.MoveToCell(0, cultivateRowIndex, 3, 0); builder.Write(item.Company); builder.MoveToCell(0, cultivateRowIndex, 4, 0); builder.Write(item.Job); cultivateRowIndex++; } //删除多余行 //cultivateRowIndex -= 2; int delRows = 10 + 7 - cultivateRowIndex; if (delRows > 0) { for (int i = 0; i < delRows; i++) { table1.Rows.RemoveAt(cultivateRowIndex); //cultivateRowIndex++; } } decimal hotelFeeTotal = dac1.Sum(it => it.SubTotal);//住宿费 dic.Add("HotelFeeTotal", hotelFeeTotal.ToString("#0.00")); decimal mealsFeeTotal = dac2.Sum(it => it.SubTotal);//伙食费 dic.Add("MealsFeeTotal", mealsFeeTotal.ToString("#0.00")); decimal miscellaneousFeeTotal = dac3.Sum(it => it.SubTotal);//公杂费 dic.Add("MiscellaneousFeeTotal", miscellaneousFeeTotal.ToString("#0.00")); decimal trainingFeeTotal = dac4.Sum(it => it.SubTotal);//培训费 dic.Add("TrainingFeeTotal", trainingFeeTotal.ToString("#0.00")); decimal cityTranfficFeeToatal = _EnterExitCosts.CityTranffic; //城市区间交通费 dic.Add("CityTranfficFeeToatal", cityTranfficFeeToatal.ToString("#0.00"));// //其他费用 decimal otherFeeTotal = _EnterExitCosts.Visa + _EnterExitCosts.Safe + _EnterExitCosts.Ticket + _EnterExitCosts.YiMiao + _EnterExitCosts.HeSuan + _EnterExitCosts.Service; dic.Add("OtherFeeTotal", otherFeeTotal.ToString("#0.00")); //其他费用合计 decimal _otherFeeTotal = hotelFeeTotal + mealsFeeTotal + miscellaneousFeeTotal + trainingFeeTotal + cityTranfficFeeToatal + otherFeeTotal; decimal _jjcFeeToatal = _EnterExitCosts.AirJJ + _otherFeeTotal; //经济舱 decimal _gwcFeeToatal = _EnterExitCosts.AirGW + _otherFeeTotal; //公务舱 //公务舱合计 //国际旅费 string outsideJJ = ""; string allPriceJJ = ""; if (_EnterExitCosts.SumJJC == 1 && _EnterExitCosts.SumGWC == 0) { dic.Add("AirFeeTotal", _EnterExitCosts.AirJJ.ToString("#0.00")); dic.Add("FeeTotal", _jjcFeeToatal.ToString("#0.00")); } if (_EnterExitCosts.SumGWC == 1 && _EnterExitCosts.SumJJC == 0) { dic.Add("AirFeeTotal", _EnterExitCosts.AirGW.ToString("#0.00")); dic.Add("FeeTotal", _gwcFeeToatal.ToString("#0.00")); } if (_EnterExitCosts.SumJJC == 1 && _EnterExitCosts.SumGWC == 1) { string airFeeTotalStr = string.Format(@$"经济舱:{_EnterExitCosts.AirJJ.ToString("#0.00")} 公务舱:{_EnterExitCosts.AirGW.ToString("#0.00")}"); dic.Add("AirFeeTotal", airFeeTotalStr); string feeTotalStr = string.Format(@$"经济舱:{_jjcFeeToatal.ToString("#0.00")} 公务舱:{_gwcFeeToatal.ToString("#0.00")}"); dic.Add("FeeTotal", feeTotalStr); } foreach (var key in dic.Keys) { builder.MoveToBookmark(key); builder.Write(dic[key]); } //模板文件名 string strFileName = $"{_DelegationInfo.TeamName}成都市因公临时出国任务和预算审批意见表(外专培训团专用).docx"; doc.Save(AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/File/" + strFileName); string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/EnterExitCost/File/" + strFileName; return Ok(JsonView(true, "成功", new { Url = url })); } } else if (dto.ExportType == 2) //表格 { //利用键值对存放数据 Dictionary dic = new Dictionary(); dic.Add("VisitStartDate", _DelegationInfo.VisitStartDate.ToString("yyyy年MM月dd日")); dic.Add("VisitEndDate", _DelegationInfo.VisitEndDate.ToString("yyyy年MM月dd日")); TimeSpan sp = _DelegationInfo.VisitEndDate.Subtract(_DelegationInfo.VisitStartDate); dic.Add("Day", sp.Days.ToString()); dic.Add("VisitCountry", _DelegationInfo.VisitCountry); if (dto.SubTypeId == 1008) //1008(派员单位出(境)任务和预算审批意见表) { //获取模板 string tempPath = (AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/Temp/派员单位出(境)任务和预算审批意见表.docx"); //载入模板 Document doc = new Document(tempPath); DocumentBuilder builder = new DocumentBuilder(doc); dic.Add("TeamName", _DelegationInfo.TeamName); dic.Add("ClientUnit", _DelegationInfo.ClientUnit); //dic.Add("TellPhone", _DelegationInfo.TellPhone); string missionLeaderName = DeleClientList[0].Name, missionLeaderJob = DeleClientList[0].Job; dic.Add("MissionLeaderName", missionLeaderName); dic.Add("MissionLeaderJob", missionLeaderJob); dic.Add("VisitPNumber", _DelegationInfo.VisitPNumber.ToString()); dic.Add("VisitPurpose", _DelegationInfo.VisitPurpose); NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true); Aspose.Words.Tables.Table table1 = allTables[0] as Aspose.Words.Tables.Table; int rowCount = 10;//总人数行 int startRowIndex = 7; //起始行 for (int i = 0; i < DeleClientList.Count; i++) { builder.MoveToCell(0, startRowIndex, 0, 0); builder.Write(DeleClientList[i].Name); //出国人员姓名 builder.MoveToCell(0, startRowIndex, 1, 0); string sex = DeleClientList[i].Sex == 0 ? "男" : DeleClientList[i].Sex == 1 ? "女" : ""; builder.Write(sex);//性别 builder.MoveToCell(0, startRowIndex, 2, 0); builder.Write(Convert.ToDateTime(DeleClientList[i].Birthday).ToString("yyyy年MM月dd日"));//出生年月 builder.MoveToCell(0, startRowIndex, 3, 0); builder.Write(DeleClientList[i].Company);//工作单位 builder.MoveToCell(0, startRowIndex, 4, 0); builder.Write(DeleClientList[i].Job);//职务及级别 builder.MoveToCell(0, startRowIndex, 5, 0); builder.Write("");//人员属性 builder.MoveToCell(0, startRowIndex, 6, 0); builder.Write("");//上次出国时间 startRowIndex++; } int nullRow = rowCount - DeleClientList.Count;//空行 for (int i = 0; i < nullRow; i++) { table1.Rows.Remove(table1.Rows[startRowIndex]); } foreach (var key in dic.Keys) { builder.MoveToBookmark(key); builder.Write(dic[key]); } //模板文件名 string strFileName = $"派员单位出(境)任务和预算审批意见表.docx"; doc.Save(AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/File/" + strFileName); string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/EnterExitCost/File/" + strFileName; return Ok(JsonView(true, "成功", new { Url = url })); } else if (dto.SubTypeId == 1009)//1009(省级单位出(境)经费报销单) { //获取模板 string tempPath = (AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/Temp/省级单位出(境)经费报销单.docx"); //载入模板 Document doc = new Document(tempPath); DocumentBuilder builder = new DocumentBuilder(doc); dic.Add("GroupClient", _DelegationInfo.ClientUnit); var Names = string.Join("、", DeleClientList.Select(x => x.Name)).TrimEnd('、'); dic.Add("Names", Names); int accommodationRows = 12, foodandotherRows = 12; var Dac1currCn = dac1.GroupBy(x => x.Currency).Select(x => x.Key).ToList(); var Dac2currCn = dac2.GroupBy(x => x.Currency).Select(x => x.Key).ToList(); NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true); Aspose.Words.Tables.Table table1 = allTables[0] as Aspose.Words.Tables.Table; int accommodationStartIndex = 6; decimal dac1totalPrice = 0.00M; foreach (var dac in dac1) { if (dac.SubTotal == 0) { continue; } //builder.MoveToCell(0, accommodationStartIndex, 0, 0); //builder.Write(DeleClientList[i].LastName + DeleClientList[i].Name); builder.MoveToCell(0, accommodationStartIndex, 1, 0); builder.Write(GetEnterExitCostExportCity(placeData, dac.NationalTravelFeeId));//城市 builder.MoveToCell(0, accommodationStartIndex, 2, 0); string currency = _CurrDatas.Find(it => it.Id == dac.Currency)?.Remark ?? "Unknwon"; builder.Write(currency);//币种 builder.MoveToCell(0, accommodationStartIndex, 3, 0); builder.Write(dac.Cost.ToString("#0.00"));//标准 builder.MoveToCell(0, accommodationStartIndex, 4, 0); builder.Write("");//人数 builder.MoveToCell(0, accommodationStartIndex, 5, 0); builder.Write("");//天数 builder.MoveToCell(0, accommodationStartIndex, 6, 0); builder.Write(dac.SubTotal.ToString("#0.00"));//小计 builder.MoveToCell(0, accommodationStartIndex, 7, 0); decimal rate = rateDatas.Find(it => it.CurrencyName == currency)?.Rate ?? 0.00M; builder.Write(rate.ToString("#0.0000"));//汇率 builder.MoveToCell(0, accommodationStartIndex, 8, 0); decimal rbmPrice = rate * dac.SubTotal; builder.Write(rbmPrice.ToString("#0.00"));//折合人民币 accommodationStartIndex++; dac1totalPrice += rbmPrice; } dic.Add("dac1totalPrice", dac1totalPrice.ToString("#0.00")); builder.MoveToCell(0, accommodationStartIndex, 1, 0); builder.Write("小计"); builder.MoveToCell(0, accommodationStartIndex, 8, 0); builder.Write(dac1totalPrice.ToString("#0.00")); accommodationStartIndex++; int nullRow = accommodationRows - dac1.Count; //删除空行 //if (nullRow > 0) //{ // int rowIndex = accommodationStartIndex; // for (int i = 0; i < nullRow; i++) // { // Row row = table1.Rows[rowIndex]; // row.Remove(); // rowIndex++; // } //} if (dac2.Count == dac3.Count)//国家 币种 金额 { for (int i = 0; i < dac2.Count; i++) { dac2[i].SubTotal = dac2[i].SubTotal + dac3[i].SubTotal; //小计 dac2[i].Cost = dac3[i].Cost + dac2[i].Cost; //标准 } } int foodandotherStartIndex = 19;// decimal dac2totalPrice = 0.00M; foreach (var dac in dac2) { if (dac.SubTotal == 0) { continue; } //foodandotherStartIndex = 12; builder.MoveToCell(0, foodandotherStartIndex, 1, 0); builder.Write(GetEnterExitCostExportCity(placeData, dac.NationalTravelFeeId));//城市 builder.MoveToCell(0, foodandotherStartIndex, 2, 0); string currency = _CurrDatas.Find(it => it.Id == dac.Currency)?.Remark ?? "Unknwon"; builder.Write(currency);//币种 builder.MoveToCell(0, foodandotherStartIndex, 3, 0); builder.Write(dac.Cost.ToString("#0.00"));//标准 builder.MoveToCell(0, foodandotherStartIndex, 4, 0); builder.Write("");//人数 builder.MoveToCell(0, foodandotherStartIndex, 5, 0); builder.Write("");//天数 builder.MoveToCell(0, foodandotherStartIndex, 6, 0); builder.Write(dac.SubTotal.ToString("#0.00"));//小计 builder.MoveToCell(0, foodandotherStartIndex, 7, 0); decimal rate = rateDatas.Find(it => it.CurrencyName == currency)?.Rate ?? 0.00M; builder.Write(rate.ToString("#0.0000"));//汇率 builder.MoveToCell(0, foodandotherStartIndex, 8, 0); decimal rbmPrice = rate * dac.SubTotal; builder.Write(rbmPrice.ToString("#0.00"));//折合人民币 foodandotherStartIndex++; dac2totalPrice += rbmPrice; } dic.Add("dac2totalPrice", dac2totalPrice.ToString("#0.00")); //删除空行 if (dac2.Count < foodandotherRows) { //int nullRow = accommodationRows - dac2.Count; //while (table2.Rows.Count > dac2.Count) //{ // table2.Rows.RemoveAt(dac2.Count); //} } dic.Add("CityTranffic", _EnterExitCosts.CityTranffic.ToString("#0.00")); string otherFeeStr = ""; if (_EnterExitCosts.Visa > 0) otherFeeStr += $"签证费: {_EnterExitCosts.Visa.ToString("#0.00")} 元,"; if (_EnterExitCosts.Safe > 0) otherFeeStr += $"保险费: {_EnterExitCosts.Safe.ToString("#0.00")} 元,"; if (_EnterExitCosts.Ticket > 0) otherFeeStr += $"参展门票费: {_EnterExitCosts.Ticket.ToString("#0.00")} 元,"; if (otherFeeStr.Length > 0) { otherFeeStr = otherFeeStr.Substring(0, otherFeeStr.Length - 1); otherFeeStr = $"({otherFeeStr})"; dic.Add("OtherFeeStr", otherFeeStr); } foreach (var key in dic.Keys) { builder.MoveToBookmark(key); builder.Write(dic[key]); } //模板文件名 string strFileName = $"省级单位出(境)经费报销单.docx"; doc.Save(AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/File/" + strFileName); string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/EnterExitCost/File/" + strFileName; return Ok(JsonView(true, "成功", new { Url = url })); } } else if (dto.ExportType == 3) { if (dto.SubTypeId == 1) //团组成员名单 { if (DeleClientList.Count < 1) { return Ok(JsonView(false, "团组成员暂未录入!!!")); } //获取模板 string tempPath = (AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/Temp/dwon_团组人员列表模板.doc"); //载入模板 Document 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 < DeleClientList.Count; i++) { builder.MoveToCell(0, i + 1, 0, 0); builder.Write(DeleClientList[i].Name); builder.MoveToCell(0, i + 1, 1, 0); string sex = DeleClientList[i].Sex == 0 ? "男" : DeleClientList[i].Sex == 1 ? "女" : ""; builder.Write(sex); builder.MoveToCell(0, i + 1, 2, 0); builder.Write(Convert.ToDateTime(DeleClientList[i].Birthday).ToString("yyyy年MM月dd日")); builder.MoveToCell(0, i + 1, 3, 0); builder.Write(DeleClientList[i].Company); builder.MoveToCell(0, i + 1, 4, 0); builder.Write(DeleClientList[i].Job); } //删除多余行 while (tableOne.Rows.Count > DeleClientList.Count + 1) { tableOne.Rows.RemoveAt(DeleClientList.Count + 1); } string strFileName = $"{_DelegationInfo.TeamName}组团人员名单({DateTime.Now.ToString("yyyyMMddHHmmss")}).doc"; //C:/Server/File/OA2023/Office/Word/EnterExitCost/File/ //C:\Server\File\OA2023\Office\Word\EnterExitCost\File\ doc.Save(AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/File/" + strFileName); string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/EnterExitCost/File/" + strFileName; return Ok(JsonView(true, "成功", new { Url = url })); } } return Ok(JsonView(false, "操作失败!")); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 获取三公费用标准city /// /// /// /// private string GetEnterExitCostExportCity(List placeData, int nationalTravelFeeId) { string _city = string.Empty; if (placeData.Count < 1) return _city; var data = placeData.Find(it => it.Id == nationalTravelFeeId); if (data == null) return _city; string country = data.Country; string city = data.City; if (city.Contains("其他城市") || city.Contains("所有城市")) _city = $"{country}-{city}"; else _city = city; return _city; } /// /// 团组模块 - 出入境费用 - 明细表导出 /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostEnterExitCostExportDetailsList(EnterExitCostOperateDto dto) { try { var data = await _enterExitCostRep.PostEnterExitCostOperate(dto); if (data.Code != 0) { return Ok(JsonView(false, data.Msg)); } return Ok(JsonView(true, data.Msg, data.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 团组模块 - 出入境费用 - 子项删除 /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostEnterExitCostSubItemDel(EnterExitCostSubItemDelDto dto) { try { var data = await _enterExitCostRep.PostEnterExitCostSubItemDel(dto); if (data.Code != 0) { return Ok(JsonView(false, data.Msg)); } return Ok(JsonView(true, "操作成功!", data.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 团组模块 - 出入境国家费用标准 List /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GetNationalTravelFeeData(PortDtoBase dto) { try { Stopwatch sw = new Stopwatch(); sw.Start(); string nationalTravelFeeSql = string.Format(@"Select ssd.Name as CurrencyCode, ssd.Remark as CurrencyName,su.CnName as LastUpdateUserName,gntf.* From Grp_NationalTravelFee gntf Left Join Sys_SetData ssd On ssd.STid = 66 And gntf.Currency = ssd.Id Left Join Sys_Users su On gntf.LastUpdateUserId = su.Id Where gntf.Isdel = 0"); var nationalTravelFeeData = _sqlSugar.SqlQueryable(nationalTravelFeeSql).ToList(); //var nationalTravel = nationalTravelFeeData.GroupBy(it => it.Country).Select(it1 => it1.FirstOrDefault()); //List nationalTravelFeeData1 = new List(); //foreach (var item in nationalTravel) //{ // var cityData = nationalTravelFeeData.Where(it => it.Country == item.Country).ToList(); // var otherData = cityData.Where(it => it.City.Contains("其他城市")).FirstOrDefault(); // if (otherData != null) // { // cityData.Remove(otherData); // cityData.Add(otherData); // } // nationalTravelFeeData1.Add(new // { // Country = item.Country, // CityData = cityData // }); //} sw.Stop(); return Ok(JsonView(true, "查询成功!耗时:" + sw.ElapsedMilliseconds + "ms", nationalTravelFeeData)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); throw; } } /// /// 团组模块 - 出入境国家费用标准 Page List Data Source /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task GetNationalTravelFeePageDataSource() { string sql = string.Format(@"Select * From Grp_NationalTravelFee Where Isdel = 0 "); var nationalTravelFeeData = await _groupRepository._sqlSugar.SqlQueryable(sql).ToListAsync(); List countryData = new List(); countryData.AddRange(nationalTravelFeeData.Select(it => it.Country).ToList()); countryData = countryData.Distinct().ToList(); List dataSource = new List(); foreach (var item in countryData) { List cityData1 = new List(); cityData1 = nationalTravelFeeData.Where(it => it.Country == item).Select(it => it.City).ToList(); var countryData2 = new { CountryName = item, CityData = cityData1 }; dataSource.Add(countryData2); } return Ok(JsonView(true, "查询成功!", dataSource)); } /// /// 团组模块 - 出入境国家费用标准 Page List /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostNationalTravelFeePage(NationalTravelFeePageDto dto) { int portId = dto.PortType; if (portId != 1 && portId != 2 && portId != 3) return Ok(JsonView(false, "请输入正确的端口号!\r\n请求端口分类1 Web 2 Android 3 IOS")); if (dto.PageIndex == 0) return Ok(JsonView(false, "当前页码数不能为0!")); if (dto.PageSize == 0) return Ok(JsonView(false, "每页条数不能0!")); string whereSql = string.Empty; if (!string.IsNullOrEmpty(dto.Country)) { whereSql += string.Format(@" And gntf.Country ='{0}'", dto.Country); } if (!string.IsNullOrEmpty(dto.City)) { whereSql += string.Format(@" And gntf.City='{0}'", dto.City); } string pageSql = string.Format(@"Select * From ( Select row_number() over(order by gntf.LastUpdateTime Desc) as RowNumber, ssd.Name as CurrencyCode, ssd.Remark as CurrencyName,su.CnName as LastUpdateUserName,gntf.* From Grp_NationalTravelFee gntf Left Join Sys_SetData ssd On ssd.STid = 66 And gntf.Currency = ssd.Id Left Join Sys_Users su On gntf.LastUpdateUserId = su.Id Where gntf.Isdel = 0 {0} ) temp ", whereSql); RefAsync total = 0; var nationalTravelFeeData = await _groupRepository._sqlSugar.SqlQueryable(pageSql).ToPageListAsync(dto.PageIndex, dto.PageSize, total); return Ok(JsonView(true, "查询成功!", nationalTravelFeeData, (int)total)); } /// /// 团组模块 - 出入境国家费用标准 根据城市查询 /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostNationalTravelFeeInfoByCountryAndCity(NationalTravelFeeByCountryAndCityDto dto) { if (dto == null) return Ok(JsonView(false, "请传入参数!")); int portId = dto.PortType; if (portId != 1 && portId != 2 && portId != 3) return Ok(JsonView(false, "请输入正确的端口号!\r\n请求端口分类1 Web 2 Android 3 IOS")); string whereSql = string.Empty; if (!string.IsNullOrEmpty(dto.Country)) { whereSql = string.Format(@"And Country = '{0}' ", dto.Country); } if (!string.IsNullOrEmpty(dto.City)) { whereSql = string.Format(@"And City = '{0}' ", dto.City); } string sql = string.Format(@"Select gntf.Country,gntf.City,gntf.Currency,ssd.Name as CurrencyCode, ssd.Remark as CurrencyName,gntf.RoomCost,gntf.FoodCost,gntf.PublicCost, gntf.LastUpdateUserId,su.CnName as LastUpdateUserName,gntf.LastUpdateTime From Grp_NationalTravelFee gntf Left Join Sys_SetData ssd On ssd.STid = 66 And gntf.Currency = ssd.Id Left Join Sys_Users su On gntf.LastUpdateUserId = su.Id Where gntf.Isdel = 0 {0} ", whereSql); var nationalTravelFeeData = await _groupRepository._sqlSugar.SqlQueryable(sql).FirstAsync(); return Ok(JsonView(true, "查询成功!", nationalTravelFeeData)); } /// /// 团组模块 - 出入境国家费用标准 - Add Or Update /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostNationalTravelFeeOperate(NationalTravelFeeOperateDto dto) { try { var data = await _enterExitCostRep.PostNationalTravelFeeOperate(dto); if (data.Code != 0) { return Ok(JsonView(false, data.Msg)); } return Ok(JsonView(true, "操作成功!", data.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 团组模块 - 出入境国家费用标准 - Del /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostNationalTravelFeeDel(NationalTravelFeeDelDto dto) { try { Grp_NationalTravelFee _nationalTravelFee = new Grp_NationalTravelFee() { Id = dto.Id, DeleteUserId = dto.DeleteUserId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd"), IsDel = 1 }; var delStatus = await _enterExitCostRep._sqlSugar.Updateable(_nationalTravelFee) .UpdateColumns(it => new { it.DeleteTime, it.DeleteUserId, it.IsDel }) .WhereColumns(it => new { it.Id }) .ExecuteCommandAsync(); if (delStatus <= 0) { return Ok(JsonView(false, "删除失败!")); } return Ok(JsonView(true, "操作成功!")); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } #endregion #region 签证费用录入 /// /// 根据diid查询签证费用列表 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task QueryVisaByDiId(VisaPriceDto dto) { try { Result groupData = await _visaPriceRep.PostVisaByDiId(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 根据签证费用Id查询单条数据及c表数据 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task QueryVisaById(PostVisaByIdDto dto) { try { Result groupData = await _visaPriceRep.PostVisaById(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 签证费用删除 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task DelVisaPrice(DelBaseDto dto) { try { var res = await _visaPriceRep.SoftDeleteByIdAsync(dto.Id.ToString(), dto.DeleteUserId); if (!res) { return Ok(JsonView(false, "删除失败")); } var resultC = await _sqlSugar.Updateable().Where(a => a.CId == dto.Id && a.IsDel == 0 && a.CTable == 80).SetColumns(a => new Grp_CreditCardPayment() { IsDel = 1, DeleteUserId = dto.DeleteUserId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }).ExecuteCommandAsync(); return Ok(JsonView(true, "删除成功!")); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 签证费用录入下拉框初始化 /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task VisaPriceAddSelect() { try { //支付方式 List Payment = _sqlSugar.Queryable().Where(a => a.STid == 14 && a.IsDel == 0).ToList(); List _Payment = _mapper.Map>(Payment); //币种 List CurrencyList = _sqlSugar.Queryable().Where(a => a.STid == 66 && a.IsDel == 0).ToList(); List _CurrencyList = _mapper.Map>(CurrencyList); //乘客类型 List PassengerType = _sqlSugar.Queryable().Where(a => a.STid == 69 && a.IsDel == 0).ToList(); List _PassengerType = _mapper.Map>(PassengerType); //卡类型 List BankCard = _sqlSugar.Queryable().Where(a => a.STid == 15 && a.IsDel == 0).ToList(); List _BankCard = _mapper.Map>(BankCard); var data = new { Payment = _Payment, CurrencyList = _CurrencyList, PassengerType = _PassengerType, BankCard = _BankCard }; return Ok(JsonView(true, "查询成功!", data)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 签证费用录入操作(Status:1.新增,2.修改) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task OpVisaPrice(OpVisaPriceDto dto) { try { Result groupData = await _visaPriceRep.OpVisaPrice(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } #endregion #region op费用录入 /// /// 根据diid查询op费用列表 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task QueryCarTouristGuideGroundByDiId(CarTouristGuideGroundDto dto) { try { Result groupData = await _carTouristGuideGroundRep.QueryCarTouristGuideGroundByDiId(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 根据op费用Id查询单条数据及c表数据 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task QueryCarTouristGuideGroundById(CarTouristGuideGroundIdDto dto) { try { Grp_CarTouristGuideGroundReservations _groupData = await _sqlSugar.Queryable().FirstAsync(a => a.Id == dto.Id && a.IsDel == 0); Grp_CreditCardPayment _creditCardPayment = await _sqlSugar.Queryable().FirstAsync(a => a.CId == dto.Id && a.CTable == 79 && a.IsDel == 0); var data = new { CarTouristGuideGround = _groupData, CreditCardPayment = _creditCardPayment }; return Ok(JsonView(true, "查询成功!", data)); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); } } /// /// op费用删除 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task DelCarTouristGuideGround(DelBaseDto dto) { try { var res = await _carTouristGuideGroundRep.SoftDeleteByIdAsync(dto.Id.ToString(), dto.DeleteUserId); if (!res) { return Ok(JsonView(false, "删除失败")); } var result = await _sqlSugar.Updateable().Where(a => a.CTGGRId == dto.Id && a.IsDel == 0).SetColumns(a => new Grp_CarTouristGuideGroundReservationsContent() { IsDel = 1, DeleteUserId = dto.DeleteUserId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }).ExecuteCommandAsync(); var resultC = await _sqlSugar.Updateable().Where(a => a.CId == dto.Id && a.IsDel == 0 && a.CTable == 79).SetColumns(a => new Grp_CreditCardPayment() { IsDel = 1, DeleteUserId = dto.DeleteUserId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }).ExecuteCommandAsync(); return Ok(JsonView(true, "删除成功!")); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// op费用录入操作(Status:1.新增,2.修改) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task OpCarTouristGuideGround(OpCarTouristGuideGroundDto dto) { try { Result groupData = await _carTouristGuideGroundRep.OpCarTouristGuideGround(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 填写费用详细页面初始化绑定 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public IActionResult CarTouristGuideGroundContentInitialize(CarTouristGuideGroundContentDto dto) { try { Result groupData = _carTouristGuideGroundRep.CarTouristGuideGroundContent(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 根据op费用Id查询详细数据 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public IActionResult OpCarTouristGuideGroundContentById(CarTouristGuideGroundIdDto dto) { try { Result groupData = _carTouristGuideGroundRep.OpCarTouristGuideGroundContentById(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// OP费用录入填写详情 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task OpCarTouristGuideGroundContent(OpCarTouristGuideGroundContentDto dto) { try { Result groupData = await _carTouristGuideGroundRep.OpCarTouristGuideGroundContent(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 获取三公详细所有城市 /// /// [HttpGet] public IActionResult OpCarCityResult() { var jw = JsonView(false); var data = _sqlSugar.Queryable().Where(x => x.IsDel == 0).Select(x => new { x.Id, x.Country, x.City, }).ToList(); if (data.Count > 0) { jw = JsonView(true, "获取成功!", data); } else { jw.Msg = "城市数据未空!"; jw.Data = new string[0]; } return Ok(jw); } #region OP行程单 /// /// OP行程单初始化 /// /// /// [HttpPost] public IActionResult InitOpTravel(InitOpTravelDto dto) { var jw = JsonView(false); var groupList = _sqlSugar.Queryable().Where(x => x.IsDel == 0).OrderByDescending(x => x.Id).ToList(); var group = groupList.First(); var diid = dto.Diid == -1 ? group?.Id : dto.Diid; if (group == null) { jw.Msg = "暂无团组!"; return Ok(jw); } group = groupList.Find(x => x.Id == diid); if (group == null) { jw.Msg = "请输入正确的团组ID!"; return Ok(jw); } string city = string.Empty; var blackCode = _sqlSugar.Queryable().Where(x => x.IsDel == 0 && x.DiId == diid).ToList(); if (blackCode.Count > 0) { var black = blackCode.First(); black.BlackCode = black.BlackCode == null ? "" : black.BlackCode; var blackSp = Regex.Split(black.BlackCode, "\\d+\\.", RegexOptions.IgnoreCase).Where(x => !string.IsNullOrWhiteSpace(x)).ToArray(); if (blackSp.Length > 0) { try { var cityArrCode = new List(20); foreach (var item in blackSp) { var itemSp = item.Split(' ').Where(x => !string.IsNullOrWhiteSpace(x)).ToList(); var IndexSelect = itemSp[2]; var cityArrCodeLength = cityArrCode.Count - 1; var startCity = IndexSelect.Substring(0, 3); if (cityArrCodeLength > 0) { var arrEndCity = cityArrCode[cityArrCodeLength]; if (arrEndCity != startCity) { cityArrCode.Add(startCity.ToUpper()); } } else { cityArrCode.Add(startCity.ToUpper()); } var endCity = IndexSelect.Substring(3, 3); cityArrCode.Add(endCity.ToUpper()); } var cityThree = string.Empty; cityArrCode.ForEach(x => cityThree += "'" + x + "',"); cityThree = cityThree.TrimEnd(','); if (string.IsNullOrWhiteSpace(cityThree)) { throw new Exception("error"); } string sql = $"SELECT * FROM Res_ThreeCode rtc WHERE UPPER(rtc.Three) in ({cityThree}) "; var cityArr = _sqlSugar.SqlQueryable(sql).ToList(); foreach (var item in cityArrCode) { var find = cityArr.Find(x => x.Three.ToUpper() == item.ToUpper()); if (find != null) { city += find.City + "/"; } else { city += item + "三字码未收入/"; } } city = city.TrimEnd('/'); } catch (Exception e) { city = "黑屏代码格式不正确!"; } } } else { city = "未录入黑屏代码"; } var OpTravelList = _sqlSugar.Queryable().Where(x => x.Diid == diid && x.IsDel == 0).OrderBy(x => x.Date).Select(x => new TravelArrView { Date = x.Date, Days = x.Days, Diffgroup = x.Diffgroup, Diid = x.Diid, Traffic_First = x.Traffic_First, Traffic_Second = x.Traffic_Second, Trip = x.Trip, WeekDay = x.WeekDay, Id = x.Id }).ToList(); jw.Data = new { groupList = groupList.Select(x => new { x.Id, x.TeamName, x.TourCode }).ToList(), groupInfo = new { group.VisitDays, group.TourCode, group.VisitPNumber, group.TeamName, city }, OpTravelList }; jw.Code = 200; jw.Msg = "操作成功!"; return Ok(jw); } /// /// 删除团组行程单 /// /// [HttpPost] public IActionResult DelTravel(DelOpTravelDto dto) { var jw = JsonView(false); if (dto.UserId <= 0 || dto.Diid <= 0) { jw.Msg = "请输入正确的参数!"; return Ok(jw); } var isTrue = _sqlSugar.Updateable().Where(x => x.Diid == dto.Diid && x.IsDel == 0) .SetColumns(x => new Grp_TravelList { DeleteTime = DateTime.Now.ToString("yyyy-MM-dd"), DeleteUserId = dto.UserId, IsDel = 1, }).ExecuteCommand(); jw = JsonView(true); return Ok(jw); } /// /// 行程单保存 /// /// [HttpPost] public IActionResult TravelSave(TravelSaveDto dto) { var jw = JsonView(false); if (dto.Arr.Count > 0) { try { _sqlSugar.BeginTran(); foreach (var item in dto.Arr) { if (item.Id == 0) { throw new Exception("请传入正确的Id"); } _sqlSugar.Updateable().Where(x => x.Id == item.Id) .SetColumns(x => new Grp_TravelList { Trip = item.Trip }).ExecuteCommand(); } _sqlSugar.CommitTran(); jw = JsonView(true); } catch (Exception ex) { _sqlSugar.RollbackTran(); jw.Msg = "程序异常!" + ex.Message; } } else { jw.Msg = "请传入正确的参数!"; } return Ok(jw); } /// /// 导出行程单 /// /// /// [HttpPost] public IActionResult ExportTravel(InitOpTravelDto dto) { var jw = JsonView(false); //数据源 List _travelList = new List(); int diid = 0; var Find = _sqlSugar.Queryable().First(x => x.Id == dto.Diid); if (Find == null) { jw.Msg = "请选择正确的团组!"; return Ok(jw); } else { diid = Find.Id; } DataTable dtBlack = null; try { dtBlack = GetTableByBlackCode(diid); } catch (Exception) { jw.Msg = "机票黑屏代码有误!"; return Ok(jw); } string CityStr1 = ""; List countriesList = new List(); List cityList = new List(); string countriesIntroduction = ""; string cityIntroduction = ""; string timeDifference = ""; string currExchangeRate = ""; string txt_itemPrepare = ""; string txt_specialReminder = ""; string txt_cGPrecautions = ""; string txt_yGCG = ""; string txt_conduct = ""; string txt_commonEnglish = ""; if (dtBlack == null && (dtBlack.Rows[0]["Day"] == null || dtBlack.Rows[0]["Day"].ToString() == "")) { //提示 //PublicCode.GetAlertMsg(this, GetType(), dt.Rows[dt.Rows.Count - 1]["Error"].ToString()); } else { //创建三字码示例 Res_ThreeCode t = new Res_ThreeCode(); //城市缓存 string city = ""; //出访城市 for (int i = 0; i < dtBlack.Rows.Count; i++) { if ((i + 1) < dtBlack.Rows.Count && dtBlack.Rows[i]["Three"].ToString() == dtBlack.Rows[i + 1]["Three"].ToString()) { continue; } if (dtBlack.Rows.Count > 0 && (dtBlack.Rows[i]["Three"].ToString() != null && dtBlack.Rows[i]["Three"].ToString() != "")) { //出发城市 string cityTemp = dtBlack.Rows[i]["Three"].ToString().Replace("/", string.Empty).Substring(0, 3); t = _sqlSugar.Queryable().First(x => x.Three == cityTemp && x.IsDel == 0); if (t != null) { city = city + "/" + t.City; } else { city = city + "/【" + cityTemp + "未收录,请联系机票同事录入】"; } if (i == dtBlack.Rows.Count - 1) { //抵达城市 cityTemp = dtBlack.Rows[i]["Three"].ToString().Replace("/", string.Empty).Substring(3, 3); t = _sqlSugar.Queryable().First(x => x.Three == cityTemp && x.IsDel == 0); if (t != null) { city = city + "/" + t.City; } else { city = city + "/【" + cityTemp + "未收录,请联系机票同事录入】"; } } } } if (city != "" && city != null) { string[] cityStr2 = city.Split('/'); string[] strs = cityStr2.Distinct().ToArray(); ; string str = ""; foreach (var s in strs) { str += s + "/"; } str = str.TrimStart('/'); str = str.TrimEnd('/'); //lblTourCity.Text = "去重前:" + city.TrimStart('/') + "\n 去重后:" + str; CityStr1 = city.TrimStart('/'); } // 行程repeater if (GetByDiid(diid).Count > 0) { _travelList = GetByDiid(diid).Where(x => x.Issel == 1 && x.IsDel == 0).ToList(); } else { //生成该时间段日期 List timeList = GetTimeListByDataTable(dtBlack); if (timeList != null) { string[] str = new string[timeList.Count]; //rpData.DataSource = str; //rpData.DataBind(); } } } //创建数据源Table DataTable dtSource = new DataTable(); dtSource.Columns.Add("Days", typeof(string)); dtSource.Columns.Add("Date", typeof(string)); dtSource.Columns.Add("Week", typeof(string)); dtSource.Columns.Add("Traffic", typeof(string)); dtSource.Columns.Add("Trip", typeof(string)); //获取数据,放到datatable foreach (var item in _travelList) { DataRow dr = dtSource.NewRow(); dr["Days"] = item.Days; dr["Date"] = item.Date; dr["Week"] = item.WeekDay; dr["Traffic"] = item.Traffic_First + "\r\n" + item.Traffic_Second; if (item.Trip.Replace("(此地区为黄热病地区,请注意打疫苗)", "").Length < 15) { item.Trip += @" 08:00 早餐于酒店; 09:00 公务活动; 10:30 公务活动; 12:00 午餐于当地餐厅; 14:00 公务活动; 16:00 公务活动; 18:00 晚餐于当地餐厅; 19:00 入住酒店休息;"; } dr["Trip"] = item.Trip; dtSource.Rows.Add(dr); } //lblTeamName.Text = di.TourCode; //lblVisitDays.Text = di.VisitDays.ToString(); //lblVisitDays2.Text = di.VisitDays.ToString(); //lblPNumber.Text = di.VisitPNumber.ToString(); //lblGroup.Text = di.TeamName.ToString(); Dictionary dic = new Dictionary(); dic.Add("Dele", Find.TeamName.ToString() + GetNum(Find.VisitDays.ToString())); dic.Add("City", CityStr1); dic.Add("Days", Find.VisitDays.ToString()); dic.Add("DeleCode", Find.TourCode); dic.Add("Pnum", Find.VisitPNumber.ToString()); dic.Add("Pnum2", Find.VisitPNumber.ToString()); List leader = GetByDiidClient(Find.Id); if (leader != null && leader.Count > 0) { dic.Add("Leader", GetByDiidClient(Find.Id)[0].LastName + GetByDiidClient(Find.Id)[0].FirstName); } else { dic.Add("Leader", ""); } dic.Add("Pnum3", Find.VisitPNumber.ToString()); int UserId = 253; dic.Add("OP", ""); dic.Add("OPTel", ""); //dic.Add("OP", "OP姓名"); //dic.Add("OPTel", "OP手机号码"); string countriesStr = ""; countriesList.ForEach(s => countriesStr += s + "、"); countriesStr = countriesStr.TrimEnd('、'); string cityStr = ""; cityList.ForEach(s => cityStr += s + "、"); cityStr = cityStr.TrimEnd('、'); //下方数据 dic.Add("selCountries", countriesStr == null ? "" : countriesStr); dic.Add("selCity", cityStr == null ? "" : cityStr); dic.Add("countriesIntroduction", countriesIntroduction == null ? "" : countriesIntroduction); dic.Add("CityIntroduction", cityIntroduction == null ? "" : cityIntroduction); dic.Add("timeDifference", timeDifference == null ? "" : timeDifference); dic.Add("currExchangeRate", currExchangeRate == null ? "" : currExchangeRate); dic.Add("temperature", ""); dic.Add("txt_itemPrepare", txt_itemPrepare == null ? "" : txt_itemPrepare); dic.Add("txt_specialReminder", txt_specialReminder == null ? "" : txt_specialReminder); dic.Add("txt_cGPrecautions", txt_cGPrecautions == null ? "" : txt_cGPrecautions); dic.Add("txt_yGCG", txt_yGCG == null ? "" : txt_yGCG); dic.Add("txt_conduct", txt_conduct == null ? "" : txt_conduct); dic.Add("txt_commonEnglish", txt_commonEnglish == null ? "" : txt_commonEnglish); //模板路径 string tempPath = AppSettingsHelper.Get("WordBasePath") + "Travel/日行程3.docx"; //载入模板 Document doc = null; DocumentBuilder builder = null; try { //载入模板 doc = new Document(tempPath); builder = new DocumentBuilder(doc); } catch (Exception) { jw.Msg = "模板位置不存在!"; return Ok(jw); } foreach (var key in dic.Keys) { Bookmark bookmark = doc.Range.Bookmarks[key]; if (bookmark != null) { builder.MoveToBookmark(key); builder.Write(dic[key]); } } //获取word里所有表格 NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true); //获取所填表格的序数 Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table; try { //循环赋值 for (int i = 0; i < dtSource.Rows.Count; i++) { builder.MoveToCell(0, i + 1, 0, 0); builder.Write(dtSource.Rows[i]["Days"].ToString()); builder.MoveToCell(0, i + 1, 1, 0); builder.Write(dtSource.Rows[i]["Date"].ToString() + "\r\n" + dtSource.Rows[i]["Week"].ToString()); builder.MoveToCell(0, i + 1, 2, 0); builder.Write(dtSource.Rows[i]["Traffic"].ToString()); var trip = dtSource.Rows[i]["Trip"].ToString(); builder.MoveToCell(0, i + 1, 3, 0); builder.Write(trip); var cell = (Aspose.Words.Tables.Cell)doc.GetChild(NodeType.Cell, ((i + 2) * 4) - 1, true); var paragraphs = cell.GetChildNodes(NodeType.Paragraph, true); // 获取特定索引的段落 Paragraph paragraph = (Paragraph)paragraphs[0]; Run run = paragraph.Runs[0]; Aspose.Words.Font font = run.Font; font.Name = "黑体"; //设置双休红色 cell = (Aspose.Words.Tables.Cell)doc.GetChild(NodeType.Cell, ((i + 2) * 4) - 3, true); paragraphs = cell.GetChildNodes(NodeType.Paragraph, true); paragraph = (Paragraph)paragraphs[1]; if (paragraph.GetText().Contains("星期六") || paragraph.GetText().Contains("星期日")) { run = paragraph.Runs[0]; font = run.Font; font.Color = Color.Red; } } } catch (Exception ex) { } //删除多余行 while (tableOne.Rows.Count > 1 + dtSource.Rows.Count) { tableOne.Rows.RemoveAt(1 + dtSource.Rows.Count);//(1+dtSource.Rows.Count + 1)-1 } string savePath = AppSettingsHelper.Get("WordBasePath") + "Travel/export/"; if (!Directory.Exists(savePath)) { try { Directory.CreateDirectory(savePath); } catch { } } string path = savePath + Find.TeamName + "出访日程.docx"; try { doc.Save(path, Aspose.Words.SaveFormat.Doc); jw = JsonView(true, "导出成功", path); } catch (Exception) { jw = JsonView(false); } return Ok(jw); } /// ///根据机票黑屏代码整理DataTable /// /// /// DataTable GetTableByBlackCode(int diid) { //黑屏代码信息 List listcode = _sqlSugar.Queryable().Where(x => x.DiId == diid && x.IsDel == 0).ToList(); //测试数据为序号,航班号,起飞日期,三字码,起飞时刻,到达时刻,出发航站楼,到达航站楼,机型,飞行时间 //1.3U8391 TU17NOV CTUCAI 0220 0715 T1 T2 330 10H55M DataTable dt = new DataTable(); dt.Columns.Add("Fliagtcode", typeof(string)); //航班号 dt.Columns.Add("Date", typeof(string));//起飞日期 dt.Columns.Add("Three", typeof(string));//三字码 dt.Columns.Add("StartTime", typeof(string));//起飞时刻 dt.Columns.Add("EndTime", typeof(string));//到达时刻 dt.Columns.Add("StartBuilding", typeof(string));//出发航站楼 dt.Columns.Add("EndBuilding", typeof(string));//到达航站楼 dt.Columns.Add("AirModel", typeof(string)); //机型 dt.Columns.Add("FlightTime", typeof(string));//飞行时间 dt.Columns.Add("Day", typeof(string));//整理的起飞日期;作为排序依据 dt.Columns.Add("ArrivedDate", typeof(string));//整理的到达日期 dt.Columns.Add("Error", typeof(string));//整理的到达日期 dt.Columns.Add("Sign", typeof(string));//标识:0表示为原生黑屏代码、1表示“+1”新增的黑屏代码 //判断是否录入黑屏代码 if (listcode.Count() == 0 || listcode == null) { dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "黑屏代码未录入!", null); } else { //读取单段黑屏代码 for (int i = 0; i < listcode.Count; i++) { //去除序号 string[] CodeList = Regex.Split(listcode[i].BlackCode, "\\d+\\.", RegexOptions.IgnoreCase); //去除多余空格,方法一Linq扩展方法 CodeList = CodeList.Where(str => str != "").ToArray(); CodeList = CodeList.Where(str => str != " ").ToArray(); //年 int year = Convert.ToInt32(DateTime.Now.Year.ToString()); //读取单条黑屏代码 for (int j = 0; j < CodeList.Count(); j++) { //去除多余空格,方法二使用Split()方法进行分割,分割有一个选项是RemoveEmptyEntries CodeList[j] = CodeList[j].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty).TrimStart().TrimEnd(); string[] Info = CodeList[j].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); //string[] Info = CodeList[j].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty) // .TrimStart().TrimEnd().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); //去除多余空格 Info = Info.Where(str => str != "").ToArray(); Info = Info.Where(str => str != " ").ToArray(); //判断黑屏代码是否正确拆分; 理应拆成9段 if (Info.Count() < 9) { dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "本团组第" + (i + 1) + "段黑屏代码中第" + (j + 1) + " 条有误,请联系机票同事核对", null); } else { try { //月 int month = Convert.ToInt32(GetLonger(Info[1].Substring(4, 3))); //日 int day = Convert.ToInt32(Info[1].Substring(2, 2)); #region 逐一比较月份,判断是否翻年;逐一比较三字码顶真,判断是否跑错机场 if (j > 0) { string[] Temp = CodeList[j - 1].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty) .TrimStart().TrimEnd().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); Temp = Temp.Where(str => str != "").ToArray(); Temp = Temp.Where(str => str != " ").ToArray(); int monthTemp = Convert.ToInt32(GetLonger(Temp[1].Substring(4, 3))); // 如果相邻月份之差小于0,则证明次一条年份需+1 if (month - monthTemp < 0) { year = year + 1; } //如果相邻代码三字码不顶真,提醒 string FootThree = Temp[2].Substring(3, 3); string HeadThree = Info[2].Substring(0, 3); if (FootThree != HeadThree) { //DelegationInfoService s = new DelegationInfoService(); //UsersService us = new UsersService(); //GroupsTaskAssignmentService gts = new GroupsTaskAssignmentService(); //77 行程 List list2 = _sqlSugar.Queryable().Where(x => x.CTId == 77 && x.DIId == diid && x.IsDel == 0).ToList(); foreach (var temp in list2) { //if (temp.UId != 21) //SendAndReturn(us.GetUsersByID(temp.UId).Email, // "黑屏代码提醒", // s.GetDelegationInfoByID(diid).TeamName + "的机票黑屏代码中,相邻航段的三字码不连续,请查看!"); } //85 机票预订 List list6 = _sqlSugar.Queryable().Where(x => x.CTId == 85 && x.DIId == diid && x.IsDel == 0).ToList(); foreach (var temp in list6) { //if (temp.UId != 21) //SendAndReturn(us.GetUsersByID(temp.UId).Email, // "黑屏代码提醒", // s.GetDelegationInfoByID(diid).TeamName + "的机票黑屏代码中,相邻航段的三字码不连续,请查看!"); } } } #endregion #region 判断到达日期是否需要加1 if (Info[4].Contains("+")) { //日期+1 day = day + 1; //判断是否进入下一月 if (day > Convert.ToInt32(GetDaysByMonth(Info[1].Substring(4, 3), year))) { day = day - Convert.ToInt32(GetDaysByMonth(Info[1].Substring(4, 3), year)); month = month + 1; //判断是否进入下一年 if (month > 12) { month = month - 12; year = year + 1; } } //月份整理格式 string monthTemp = month.ToString(); if (month < 10) { monthTemp = "0" + monthTemp; } //日期整理格式 string daytemp = day.ToString(); if (day < 10) { daytemp = "0" + daytemp; } string temp = Info[4].Split('+')[0]; //添加起飞数据 dt.Rows.Add(Info[0], Info[1], Info[2], Info[3], temp, Info[5], Info[6], Info[7], Info[8], year + "-" + GetLonger(Info[1].Substring(4, 3)) + "-" + Info[1].Substring(2, 2), year + "-" + monthTemp + "-" + daytemp, "", "0"); //加1天,添加到达数据 dt.Rows.Add(Info[0], Info[1].Replace(Info[1].Substring(2, 2), daytemp), Info[2], Info[3], temp, Info[5], Info[6], Info[7], Info[8], year + "-" + monthTemp + "-" + daytemp, year + "-" + monthTemp + "-" + daytemp, "", "1"); } else { //月份整理格式 string monthTemp = month.ToString(); if (month < 10) { monthTemp = "0" + monthTemp; } //日期整理格式 string daytemp = day.ToString(); if (day < 10) { daytemp = "0" + daytemp; } dt.Rows.Add(Info[0], Info[1], Info[2], Info[3], Info[4], Info[5], Info[6], Info[7], Info[8], year + "-" + monthTemp + "-" + daytemp, year + "-" + monthTemp + "-" + daytemp, "", "0"); } #endregion } catch (Exception ex) { string exstr = ex.Message.ToString(); } } } //排序 dt.DefaultView.Sort = "Day asc"; dt = dt.DefaultView.ToTable(); } } return dt; } /// /// 根据团组编号查询信息 /// /// 返回空或者对象信息 List GetByDiid(int Diid) { //调用获取单个对象的方法 return _sqlSugar.Queryable().Where(x => x.Diid == Diid && x.IsDel == 0).ToList(); } /// /// 20210816 /// 根据datatable生成某一时间段的日期 /// /// 黑屏代码生成的datatable /// List GetTimeListByDataTable(DataTable dt) { if (dt.Rows[0]["Day"].ToString() != "") { DateTime datestart = Convert.ToDateTime(dt.Rows[0]["Day"].ToString()); DateTime dateend = Convert.ToDateTime(dt.Rows[dt.Rows.Count - 1]["ArrivedDate"].ToString()); List timeList = new List(); while (datestart <= dateend) { timeList.Add(datestart.ToString("yyyy-MM-dd")); datestart = datestart.AddDays(1); } return timeList; } return null; } /// /// 根据大写数字返回小写数字或根据小写数字返回大写数字 /// /// /// string GetNum(string num) { string str = ""; switch (num) { case "1": str = "一"; break; case "2": str = "二"; break; case "3": str = "三"; break; case "4": str = "四"; break; case "5": str = "五"; break; case "6": str = "六"; break; case "7": str = "七"; break; case "8": str = "八"; break; case "9": str = "九"; break; case "10": str = "十"; break; case "11": str = "十一"; break; case "12": str = "十二"; break; case "一": str = "1"; break; case "二": str = "2"; break; case "三": str = "3"; break; case "四": str = "4"; break; case "五": str = "5"; break; case "六": str = "6"; break; case "七": str = "7"; break; case "八": str = "8"; break; case "九": str = "9"; break; case "十": str = "10"; break; case "十一": str = "11"; break; case "十二": str = "12"; break; } return str; } List GetByDiidClient(int DIID) { return _sqlSugar.Queryable().Where(x => x.DiId == DIID && x.IsDel == 0).ToList(); } /// /// 根据星期,月份的缩写,转换成数字或者全称 /// 根据币种中文名称返回币种代码 /// 根据数字返回机型型号【2、3开头的就是空客,比如空客320,7开头的就是波音,比如波音777】 /// 20210903贾文滔 /// /// /// /// string GetLonger(string temp) { string str = ""; switch (temp.ToUpper()) { case "美元": str = "USD"; break; case "日元": str = "JPY"; break; case "英镑": str = "GBP"; break; case "欧元": str = "EUR"; break; case "港币": str = "HKD"; break; case "MO": str = "星期一"; break; case "TU": str = "星期二"; break; case "WE": str = "星期三"; break; case "TH": str = "星期四"; break; case "FR": str = "星期五"; break; case "SA": str = "星期六"; break; case "SU": str = "星期天"; break; case "JAN": str = "01"; break; case "FEB": str = "02"; break; case "MAR": str = "03"; break; case "APR": str = "04"; break; case "MAY": str = "05"; break; case "JUN": str = "06"; break; case "JUL": str = "07"; break; case "AUG": str = "08"; break; case "SEP": str = "09"; break; case "OCT": str = "10"; break; case "NOV": str = "11"; break; case "DEC": str = "12"; break; case "MONDAY": str = "星期一"; break; case "TUESDAY": str = "星期二"; break; case "WEDNESDAY": str = "星期三"; break; case "THURSDAY": str = "星期四"; break; case "FRIDAY": str = "星期五"; break; case "SATURDAY": str = "星期六"; break; case "SUNDAY": str = "星期日"; break; case "01": str = "JAN"; break; case "02": str = "FEB"; break; case "03": str = "MAR"; break; case "04": str = "APR"; break; case "05": str = "MAY"; break; case "06": str = "JUN"; break; case "07": str = "JUL"; break; case "08": str = "AUG"; break; case "09": str = "SEP"; break; case "10": str = "OCT"; break; case "11": str = "NOV"; break; case "12": str = "DEC"; break; case "2": str = "空客A"; break; case "3": str = "空客A"; break; case "7": str = "波音"; break; } return str; } /// /// 根据月份返回天数 /// /// /// string GetDaysByMonth(string Month, int year) { string str = ""; //判断是否是闰年 if (DateTime.IsLeapYear(year) == false) { switch (Month.ToUpper()) { case "JAN": str = "31"; break; case "FEB": str = "28"; break; case "MAR": str = "31"; break; case "APR": str = "30"; break; case "MAY": str = "31"; break; case "JUN": str = "30"; break; case "JUL": str = "31"; break; case "AUG": str = "31"; break; case "SEP": str = "30"; break; case "OCT": str = "31"; break; case "NOV": str = "30"; break; case "DEC": str = "31"; break; case "01": str = "31"; break; case "02": str = "28"; break; case "03": str = "31"; break; case "04": str = "30"; break; case "05": str = "31"; break; case "06": str = "30"; break; case "07": str = "31"; break; case "08": str = "31"; break; case "09": str = "30"; break; case "10": str = "31"; break; case "11": str = "30"; break; case "12": str = "31"; break; } } else { switch (Month.ToUpper()) { case "JAN": str = "31"; break; case "FEB": str = "29"; break; case "MAR": str = "31"; break; case "APR": str = "30"; break; case "MAY": str = "31"; break; case "JUN": str = "30"; break; case "JUL": str = "31"; break; case "AUG": str = "31"; break; case "SEP": str = "30"; break; case "OCT": str = "31"; break; case "NOV": str = "30"; break; case "DEC": str = "31"; break; case "01": str = "31"; break; case "02": str = "29"; break; case "03": str = "31"; break; case "04": str = "30"; break; case "05": str = "31"; break; case "06": str = "30"; break; case "07": str = "31"; break; case "08": str = "31"; break; case "09": str = "30"; break; case "10": str = "31"; break; case "11": str = "30"; break; case "12": str = "31"; break; } } return str; } #endregion #endregion #region 团组成本 /// /// 团组成本数据初始化 /// /// /// [HttpPost] public async Task GroupCostInit(GroupCostInItDto dto) { var groupList = _sqlSugar.SqlQueryable($@" Select a.Id,TeamName GroupName,b.isTrue From Grp_DelegationInfo a left join (select top 100 percent Diid, CASE WHEN COUNT(*) >= 0 THEN 'True' ELSE 'False' END as isTrue from Grp_GroupCost where Isdel = 0 and date != '' group by Diid) b on a.Id = b.Diid Where TeamName != '' And IsDel = 0 Order By a.Id Desc ").ToList(); //团组列表 int diid = dto.Diid == -1 ? groupList.First().Id : dto.Diid; var groupInfo = await _groupRepository.PostShareGroupInfo(new ShareGroupInfoDto { PortType = 1, Id = diid }); //团组信息 List visaCountryInfoArr = new List(); var groupinfoValue = (groupInfo.Data as Web_ShareGroupInfoView); if (groupinfoValue != null) { var countryArr = groupinfoValue.VisitCountry ??= string.Empty; var spArr = new string[1] { countryArr }; if (countryArr.Contains("|")) { spArr = countryArr.Split("|"); } else if (countryArr.Contains("、")) { spArr = countryArr.Split("、"); } foreach (var item in spArr.Where(x => !string.IsNullOrWhiteSpace(x)).ToList()) { var dbQueryCountry = _sqlSugar.Queryable().First(x => x.VisaCountry.Contains(item)); if (dbQueryCountry != null) { visaCountryInfoArr.Add(dbQueryCountry); } } } var groupChecks = _checkBoxs.GetCheckBoxsByDiid(diid); //团组选中信息 可枚举 var groupCost = _GroupCostRepository.GetAllByDiid(diid); //团组列表信息 var groupCostMap = _mapper.Map>(groupCost); var hotelNumber = _CostTypeHotelNumberRepository.GetCostTypeHotelNumberByDiid(diid); //酒店数量 可枚举 var GroupCostParameter = _GroupCostParameterRepository.GetGroupCostParameterListByDiid(diid); //成本系数 可枚举 //GroupCostParameter.Add(new // Grp_GroupCostParameter()); var GroupCostParameterMap = _mapper.Map>(GroupCostParameter); return Ok(JsonView(new { groupList, groupInfo, groupChecks, groupCost = groupCostMap, hotelNumber, GroupCostParameter = GroupCostParameterMap, visaCountryInfoArr = visaCountryInfoArr.Select(x => new { x.VisaCountry, x.VisaPrice, x.Id, }).ToList(), baoPi = _GroupCostParameterRepository.GetBaoPi(diid) })); } /// /// 团组成本信息保存 /// /// /// [HttpPost] public async Task SaveGroupCost(GroupCostSavaDto dto) { if (dto.Diid <= 0 || dto.Userid <= 0) { return Ok(JsonView(false)); } JsonView jw = null; bool isTrue = false; var Grp_groups = _mapper.Map>(dto.GroupCosts); Grp_groups.ForEach(x => { x.CreateUserId = dto.Userid; x.CreateTime = DateTime.Now; }); //.ToString("yyyy-MM-dd HH:mm:ss") var Grp_CheckBoxs = _mapper.Map>(dto.CheckBoxs); Grp_CheckBoxs.ForEach(x => { x.CreateUserId = dto.Userid; x.CreateTime = DateTime.Now; }); var Grp_HotelNumber = _mapper.Map>(dto.CostTypeHotelNumbers); var Grp_CostParameters = _mapper.Map>(dto.GroupCostParameters); try { _sqlSugar.BeginTran(); isTrue = await _GroupCostRepository. SaveGroupCostList(Grp_groups, dto.Diid); //列表 isTrue = await _checkBoxs.SaveCheckBoxs(Grp_CheckBoxs, dto.Diid); //选中项 isTrue = await _CostTypeHotelNumberRepository.SaveHotelNumber(Grp_HotelNumber, dto.Userid, dto.Diid); //酒店房间数量 isTrue = await _GroupCostParameterRepository.SaveAsync(Grp_CostParameters, dto.Userid, dto.Diid); //系数 _sqlSugar.CommitTran(); jw = JsonView(true, "保存成功!", isTrue); } catch (Exception) { _sqlSugar.RollbackTran(); jw = JsonView(false); } return Ok(jw); } /// /// 司兼导数据 /// /// /// [HttpPost] public IActionResult GetCarGuides(CarGuidesDto dto) { JsonView jw = null; var Data = _sqlSugar.SqlQueryable($@" select * from Grp_CarGuides where isdel = 0 ").ToList(); jw = JsonView(true, "获取成功!", Data); return Ok(jw); } /// /// 导游数据 /// /// /// [HttpPost] public IActionResult GetGuidesInfo(CarGuidesDto dto) { JsonView jw = null; //var Data = _sqlSugar.SqlQueryable($@" SELECT* FROM ( // SELECT*,ROW_NUMBER() OVER (ORDER BY Id) AS RowNumber FROM Grp_GuidesInfo where (city like '%{dto.City}%' or country like '%{dto.City}%' ) and isdel = 0 ) as b // where RowNumber BETWEEN {(dto.Page - 1) * dto.Size + 1} and {(dto.Page) * dto.Size}").ToList(); var Data = _sqlSugar.SqlQueryable($@" select * from Grp_GuidesInfo where isdel = 0 ").ToList(); jw = JsonView(true, "获取成功!", Data); return Ok(jw); } /// /// 成本车数据 /// /// /// [HttpPost] public IActionResult GetCarInfo(CarGuidesDto dto) { JsonView jw = null; var Data = _sqlSugar.SqlQueryable($@" select * from Grp_CarInfo where isdel = 0 ").ToList(); jw = JsonView(true, "获取成功!", Data); return Ok(jw); } /// /// 景点数据 /// /// /// [HttpPost] public IActionResult GetScenicSpotInfo(CarGuidesDto dto) { var Data = _sqlSugar.SqlQueryable($@" select * from Grp_ScenicSpotInfo where isdel = 0 ").ToList(); return Ok(JsonView(true, "获取成功!", Data)); } /// /// 成本通知 /// /// /// [HttpPost] public async Task GroupIsShare(GroupIsShareDto dto) { if (dto.Diid < 0) { return Ok(JsonView(false)); } JsonView jw = null; var GroupCostParameter = _GroupCostParameterRepository.GetGroupCostParameterMainByDiid(dto.Diid); if (GroupCostParameter != null) { int IsShare = 0; if (GroupCostParameter.IsShare == 0) IsShare = 1; else if (GroupCostParameter.IsShare == 1) IsShare = 0; bool isTrue = await _GroupCostParameterRepository.UpdateIsShareById(GroupCostParameter.Id, IsShare); string msg = string.Empty; if (isTrue) { if (IsShare == 0) { msg = "禁止通知,其他模块操作人员不可见此成本信息!"; } else { msg = "通知成功,其他模块操作人员可见此成本信息!"; } jw = JsonView(isTrue, msg); } else { msg = "修改失败!"; jw = JsonView(isTrue, msg); } } else { jw = JsonView(false, "该团没有数据,请添加数据,保存后再操作!"); } return Ok(jw); } /// /// 导出收款账单 /// /// /// [HttpPost] public async Task ExportPriceCheckWordFile(GroupCostExportWordFile dto) { if (dto.Diid == 0) { return Ok(JsonView(false, "请传递团组id")); } var deleInfo = await _groupRepository.PostGroupInfo(new GroupInfoDto { Id = dto.Diid, PortType = 1 }); if (deleInfo.Code != 0) { return Ok(JsonView(false, "团组信息查询失败!")); } var di = deleInfo.Data as DelegationInfoWebView; if (di != null) { //文件名 string strFileName = di.TeamName + "-收款账单.doc"; //获取模板 string tmppath = (AppSettingsHelper.Get("WordBasePath") + "Template/收款账单(四川)模板.doc"); //载入模板 Document doc = new Document(tmppath); decimal TotalPrice = 0.00M; string itemStr = string.Empty; Dictionary airSouer = new Dictionary(); //airSouer.Add("JJCTBR", "经济舱及酒店双人间"); airSouer.Add("JJCTBR", "经济舱及酒店双人间"); airSouer.Add("JJCSGR", "经济舱及酒店单人间"); airSouer.Add("GWCSGR", "公务舱及酒店单人间"); airSouer.Add("GWCJSES", "公务舱及酒店小套房"); airSouer.Add("GWCSUITE", "公务舱及酒店套房"); airSouer.Add("JJCSUITE", "经济舱及酒店套房"); var groupCostType = dto.airs.GroupBy(x => x.costType).OrderBy(x => x.Key); foreach (var cost in groupCostType) { var List = cost.ToList(); if (cost.Key == "A") { foreach (var ListItem in List) { if (ListItem.number > 0) { if (ListItem.code.Contains("TBR")) { itemStr += "团费(" + airSouer[ListItem.code] + ") RMB " + ListItem.price.ToString("F2") + "/人*" + ListItem.number + "(" + (ListItem.number / 2) + "间( ............合计 RMB " + (ListItem.number * ListItem.price).ToString("#0.00") + "\n"; } else { itemStr += "团费(" + airSouer[ListItem.code] + ") RMB " + ListItem.price.ToString("F2") + "/人*" + ListItem.number + "(" + ListItem.number + "间( ............合计 RMB " + (ListItem.number * ListItem.price).ToString("#0.00") + "\n"; } TotalPrice += (ListItem.number * ListItem.price); } } } else { itemStr = itemStr.Insert(0, "A段\r\n"); itemStr += "B段\r\n"; foreach (var ListItem in List) { if (ListItem.number > 0) { if (ListItem.code.Contains("TBR")) { itemStr += "团费(" + airSouer[ListItem.code] + ") RMB " + ListItem.price.ToString("F2") + "/人*" + ListItem.number + "(" + (ListItem.number / 2) + "间( ............合计 RMB " + (ListItem.number * ListItem.price).ToString("#0.00") + "\n"; } else { itemStr += "团费(" + airSouer[ListItem.code] + ") RMB " + ListItem.price.ToString("F2") + "/人*" + ListItem.number + "(" + ListItem.number + "间( ............合计 RMB " + (ListItem.number * ListItem.price).ToString("#0.00") + "\n"; } TotalPrice += (ListItem.number * ListItem.price); } } } } #region 替换Word模板书签内容 Dictionary marks = new Dictionary(); marks.Add("To", di.ClientUnit);//付款方 marks.Add("ToTel", di.TellPhone);//付款方电话 marks.Add("Date", DateTime.Now.ToString("yyyy-MM-dd"));//导出时间 marks.Add("Team", di.VisitCountry.Replace(" ", "、"));//团队名称 marks.Add("TontractTime", (di.VisitDate).ToString("yyyy年MM月dd日"));//付款日期 marks.Add("PayDay", (di.PayDay).ToString());//付款预期 marks.Add("PaymentMoney", (di.PaymentMoney).ToString("#0.00"));//付款金额 marks.Add("WeChat", "WeChat");//微信号 di.WeChat; marks.Add("PayItemContent", itemStr);//详细信息 marks.Add("Total", TotalPrice.ToString("F2"));//合计 #endregion ////注 //if (doc.Range.Bookmarks["Attention"] != null) //{ // Bookmark mark = doc.Range.Bookmarks["Attention"]; // mark.Text = frList[0].Attention; //} foreach (var item in marks.Keys) { if (doc.Range.Bookmarks[item] != null) { Bookmark mark = doc.Range.Bookmarks[item]; mark.Text = marks[item]; } } byte[] bytes = null; using (MemoryStream stream = new MemoryStream()) { doc.Save(stream, Aspose.Words.SaveFormat.Doc); bytes = stream.ToArray(); } //doc.Save((AppSettingsHelper.Get("WordBasePath") + "Template/") + strFileName); return Ok(JsonView(true, "", new { Data = bytes, strFileName, })); } else { return Ok(JsonView(false, "团组信息不存在!")); } } /// /// 导出团组成本 /// /// /// [HttpPost] public async Task ExportGroupCostExcelFile(GroupCostExportExcelFile dto) { var jw = JsonView(false); if (dto.Diid == 0) { return Ok(JsonView(false, "请传递团组id")); } var deleInfo = await _groupRepository.PostGroupInfo(new GroupInfoDto { Id = dto.Diid, PortType = 1 }); if (deleInfo.Code != 0) { return Ok(JsonView(false, "团组信息查询失败!")); } var di = deleInfo.Data as DelegationInfoWebView; if (di == null) { return Ok(JsonView(false, "团组信息查询失败!")); } List List_GC1 = new List(); WorkbookDesigner designer = new WorkbookDesigner(); designer.Workbook = new Workbook(AppSettingsHelper.Get("ExcelBasePath") + ("Template/团组-成本.xls")); var List_GC = _GroupCostRepository.GetAllByDiid(dto.Diid); for (int i = 0; i < List_GC.Count; i++) { GroupCost_Excel gc = new GroupCost_Excel(); gc.Id = List_GC[i].Id; gc.Diid = List_GC[i].Diid.ToString(); gc.DAY = List_GC[i].DAY; string week = ""; if (!string.IsNullOrEmpty(List_GC[i].Date.Trim())) week = CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(Convert.ToDateTime(List_GC[i].Date).DayOfWeek); gc.Date = (List_GC[i].Date + "\n" + week).ToString(); gc.ITIN = List_GC[i].ITIN; gc.CarType = List_GC[i].CarType; gc.CarTiming = List_GC[i].CarTiming.ToString() == "0" ? "/" : List_GC[i].CarTiming.ToString(); gc.CarCost = List_GC[i].CarCost.ToString() == "0" ? "/" : List_GC[i].CarCost.ToString(); gc.CarNumber = List_GC[i].CarNumber.ToString() == "0" ? "/" : List_GC[i].CarNumber.ToString(); gc.TGS = List_GC[i].TGS.ToString() == "0" ? "/" : List_GC[i].TGS.ToString(); gc.TGWH = List_GC[i].TGWH.ToString() == "0" ? "/" : List_GC[i].TGWH.ToString(); gc.TGN = List_GC[i].TGS.ToString() == "0" ? "/" : List_GC[i].TGN.ToString(); gc.TGOF = List_GC[i].TGOF.ToString() == "0" ? "/" : List_GC[i].TGOF.ToString(); gc.TGM = List_GC[i].TGM.ToString() == "0" ? "/" : List_GC[i].TGM.ToString(); gc.TGA = List_GC[i].TGA.ToString() == "0" ? "/" : List_GC[i].TGA.ToString(); gc.TGTF = List_GC[i].TGTF.ToString() == "0" ? "/" : List_GC[i].TGTF.ToString(); gc.TGEF = List_GC[i].TGEF.ToString() == "0" ? "/" : List_GC[i].TGEF.ToString(); gc.CFS = List_GC[i].CFS.ToString() == "0" ? "/" : List_GC[i].CFS.ToString(); gc.CFM = List_GC[i].CFM.ToString() == "0" ? "/" : List_GC[i].CFOF.ToString(); gc.CFOF = List_GC[i].CFOF.ToString() == "0" ? "/" : List_GC[i].CFOF.ToString(); gc.B = List_GC[i].B.ToString() == "0" ? "/" : List_GC[i].B.ToString(); gc.L = List_GC[i].L.ToString() == "0" ? "/" : List_GC[i].L.ToString(); gc.D = List_GC[i].D.ToString() == "0" ? "/" : List_GC[i].D.ToString(); gc.TBR = List_GC[i].TBR.ToString() == "0" ? "/" : List_GC[i].TBR.ToString(); gc.SGR = List_GC[i].SGR.ToString() == "0" ? "/" : List_GC[i].SGR.ToString(); gc.JS_ES = List_GC[i].JS_ES.ToString() == "0" ? "/" : List_GC[i].JS_ES.ToString(); gc.Suite = List_GC[i].Suite.ToString() == "0" ? "/" : List_GC[i].Suite.ToString(); gc.ACCON = List_GC[i].ACCON.ToString() == "0" ? "/" : List_GC[i].ACCON.ToString(); gc.TV = List_GC[i].TV.ToString() == "0" ? "/" : List_GC[i].TV.ToString(); gc.iL = List_GC[i].iL.ToString() == "0" ? "/" : List_GC[i].iL.ToString(); gc.IF = List_GC[i].IF.ToString() == "0" ? "/" : List_GC[i].IF.ToString(); gc.EF = List_GC[i].EF.ToString() == "0" ? "/" : List_GC[i].EF.ToString(); gc.B_R_F = List_GC[i].B_R_F.ToString() == "0" ? "/" : List_GC[i].B_R_F.ToString(); gc.TE = List_GC[i].TE.ToString() == "0" ? "/" : List_GC[i].TE.ToString(); gc.TGTips = List_GC[i].TGTips.ToString() == "0" ? "/" : List_GC[i].TGTips.ToString(); gc.DRVTips = List_GC[i].DRVTips.ToString() == "0" ? "/" : List_GC[i].DRVTips.ToString(); gc.PC = List_GC[i].PC.ToString() == "0" ? "/" : List_GC[i].PC.ToString(); gc.TLF = List_GC[i].TLF.ToString() == "0" ? "/" : List_GC[i].TLF.ToString(); gc.ECT = List_GC[i].ECT.ToString() == "0" ? "/" : List_GC[i].ECT.ToString(); List_GC1.Add(gc); } var dt = CommonFun.GetDataTableFromIList(List_GC1); dt.TableName = "TB"; //报表标题等不用dt的值 designer.SetDataSource("TeamName", dto.title.TeamName); designer.SetDataSource("Pnumber", dto.title.GroupNumber); designer.SetDataSource("Tax", dto.title.Tax); //designer.SetDataSource("FFYS", lblHotelCB.Text); designer.SetDataSource("Currency", dto.title.Currency); //designer.SetDataSource("HotelXS", txtHotelXS.Text); designer.SetDataSource("Rate", dto.title.Rate); var hotels = _CostTypeHotelNumberRepository.GetCostTypeHotelNumberByDiid(dto.Diid); var Aparams = hotels.Find(x => x.Type == "Default"); if (Aparams == null) { return Ok(jw); } //酒店数量 var txtSGRNumber = Aparams.SGR.ToString(); var txtTBRNumber = Aparams.TBR.ToString(); var txtJSESNumber = Aparams.JSES.ToString(); var txtSUITENumbe = Aparams.SUITE.ToString(); if (dto.costType == "B") { Aparams = hotels.Find(x => x.Type == "A"); var Bparams = hotels.Find(x => x.Type == "B"); if (Aparams == null || Bparams == null) { return Ok(jw); } txtSGRNumber = "A段人数:" + Aparams.SGR.ToString() + " B段人数:" + Bparams.SGR.ToString(); txtTBRNumber = "A段人数:" + Aparams.TBR.ToString() + " B段人数:" + Bparams.TBR.ToString(); txtJSESNumber = "A段人数:" + Aparams.JSES.ToString() + " B段人数:" + Bparams.JSES.ToString(); txtSUITENumbe = "A段人数:" + Aparams.SUITE.ToString() + " B段人数:" + Bparams.SUITE.ToString(); } designer.SetDataSource("SGRNumber", txtSGRNumber); designer.SetDataSource("TBRNumber", txtTBRNumber); designer.SetDataSource("JSESNumber", txtJSESNumber); designer.SetDataSource("SUITENumber", txtSUITENumbe); var ws = designer.Workbook.Worksheets[0]; int Row = List_GC.Count; int startIndex = 11; int HideRows = 0; List hideRowsList = new List(); decimal TzZCB2 = 0.00M, TzZLR2 = 0.00M, TzZBJ2 = 0.00M; #region A段left数据 var left = dto.leftInfo.Find(x => x.Type == "A"); if (left == null) { return Ok(jw); } var leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("签证")); if (leftBindData != null) { designer.SetDataSource("VisaDRCB", leftBindData.cb); designer.SetDataSource("VisaRS", leftBindData.rs); designer.SetDataSource("VisaXS", leftBindData.xs); designer.SetDataSource("VisaZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("VisaDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("VisaZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("VisaDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("VisaZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } else { hideRowsList.Add(Row + startIndex + HideRows); //ws.Cells.HideRows((Row + startIndex + HideRows), 2); } HideRows += 2; leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("保险")); if (leftBindData != null) { designer.SetDataSource("BXDRCB", leftBindData.cb); designer.SetDataSource("BXRS", leftBindData.rs); designer.SetDataSource("BXXS", leftBindData.xs); designer.SetDataSource("BXZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BXDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("BXZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BXDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("BXZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } else { hideRowsList.Add(Row + startIndex + HideRows); //ws.Cells.HideRows((Row + startIndex + HideRows), 2); } HideRows += 2; leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("核酸")); if (leftBindData != null) { designer.SetDataSource("HSDRCB", leftBindData.cb); designer.SetDataSource("HSRS", leftBindData.rs); designer.SetDataSource("HSXS", leftBindData.xs); designer.SetDataSource("HSZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("HSDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("HSZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("HSDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("HSZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } else { hideRowsList.Add(Row + startIndex + HideRows); //ws.Cells.HideRows((Row + startIndex + HideRows), 2); } HideRows += 2; leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("经济舱")); if (leftBindData != null) { designer.SetDataSource("JPJJCCB", leftBindData.cb); designer.SetDataSource("JPJJCPnum", leftBindData.rs); designer.SetDataSource("JPJJCXS", leftBindData.xs); designer.SetDataSource("JPJJCZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("JPJJCDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("JPJJCZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("JPJJCDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("JPJJCZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } else { hideRowsList.Add(Row + startIndex + HideRows); //ws.Cells.HideRows((Row + startIndex + HideRows), 2); } HideRows += 2; leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("公务舱")); if (leftBindData != null) { designer.SetDataSource("JPGWCCB", leftBindData.cb); designer.SetDataSource("JPGWCPNum", leftBindData.rs); designer.SetDataSource("JPGWCXS", leftBindData.xs); designer.SetDataSource("JPGWCZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("JPGWCDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("JPGWCZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("JPGWCDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("JPGWCZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } else { hideRowsList.Add(Row + startIndex + HideRows); //ws.Cells.HideRows((Row + startIndex + HideRows), 2); } HideRows += 2; leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("TBR")); if (leftBindData != null) { ////TBR designer.SetDataSource("HotelTBRDRCB", leftBindData.cb); designer.SetDataSource("HotelTBRRS", leftBindData.rs); designer.SetDataSource("HotelTBRXS", leftBindData.xs); designer.SetDataSource("HotelTBRCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("HotelTBRDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("HotelTBRZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("HotelTBRDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("HotelTBRZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } else { hideRowsList.Add(Row + startIndex + HideRows); //ws.Cells.HideRows((Row + startIndex + HideRows), 2); } HideRows += 2; leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("SGR")); if (leftBindData != null) { ////SGR designer.SetDataSource("HotelSGRDRCB", leftBindData.cb); designer.SetDataSource("HotelSGRRS", leftBindData.rs); designer.SetDataSource("HotelSGRXS", leftBindData.xs); designer.SetDataSource("HotelSGRCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("HotelSGRDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("HotelSGRZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("HotelSGRDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("HotelSGRZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } else { hideRowsList.Add(Row + startIndex + HideRows); // ws.Cells.HideRows((Row + startIndex + HideRows), 2); } HideRows += 2; leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("JSES")); if (leftBindData != null) { ////JS/ES designer.SetDataSource("HotelJSESDRCB", leftBindData.cb); designer.SetDataSource("HotelJSESRS", leftBindData.rs); designer.SetDataSource("HotelJSESXS", leftBindData.xs); designer.SetDataSource("HotelJSESCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("HotelJSESDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("HotelJSESZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("HotelJSESDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("HotelJSESZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } else { hideRowsList.Add(Row + startIndex + HideRows); // ws.Cells.HideRows((Row + startIndex + HideRows), 2); } HideRows += 2; leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("SUITE")); if (leftBindData != null) { ////SUITE designer.SetDataSource("HotelSUITEDRCB", leftBindData.cb); designer.SetDataSource("HotelSUITERS", leftBindData.rs); designer.SetDataSource("HotelSUITEXS", leftBindData.xs); designer.SetDataSource("HotelSUITECB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("HotelSUITEDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("HotelSUITEZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("HotelSUITEDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("HotelSUITEZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } else { hideRowsList.Add(Row + startIndex + HideRows); // ws.Cells.HideRows((Row + startIndex + HideRows), 2); } HideRows += 2; leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("地接")); if (leftBindData != null) { designer.SetDataSource("DJDRCB", leftBindData.cb); designer.SetDataSource("DJRS", leftBindData.rs); designer.SetDataSource("DJXS", leftBindData.xs); designer.SetDataSource("DJCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("DJDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("DJZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("DJDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("DJZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } else { hideRowsList.Add(Row + startIndex + HideRows); //ws.Cells.HideRows((Row + startIndex + HideRows), 2); } HideRows += 2; leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("火车票")); if (leftBindData != null) { designer.SetDataSource("HCPCB", leftBindData.cb); designer.SetDataSource("HCPRS", leftBindData.rs); designer.SetDataSource("HCPXS", leftBindData.xs); designer.SetDataSource("HCPZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("HCPDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("HCPZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("HCPDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("HCPZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } else { hideRowsList.Add(Row + startIndex + HideRows); //ws.Cells.HideRows((Row + startIndex + HideRows), 2); } HideRows += 2; leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("船票")); if (leftBindData != null) { designer.SetDataSource("CPCB", leftBindData.cb); designer.SetDataSource("CPRS", leftBindData.rs); designer.SetDataSource("CPXS", leftBindData.xs); designer.SetDataSource("CPZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("CPDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("CPZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("CPDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("CPZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } else { hideRowsList.Add(Row + startIndex + HideRows); //ws.Cells.HideRows((Row + startIndex + HideRows), 2); } HideRows += 2; leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("公务单人")); if (leftBindData != null) { designer.SetDataSource("GWDRCD", leftBindData.cb); designer.SetDataSource("GWRS", leftBindData.rs); designer.SetDataSource("GWXS", leftBindData.xs); designer.SetDataSource("GWCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("GWDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("GWZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("GWDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("GWZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } else { hideRowsList.Add(Row + startIndex + HideRows); //ws.Cells.HideRows((Row + startIndex + HideRows), 2); } HideRows += 2; leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("零用金")); if (leftBindData != null) { designer.SetDataSource("LYJDRCB", leftBindData.cb); designer.SetDataSource("LYJRS", leftBindData.rs); designer.SetDataSource("LYJXS", leftBindData.xs); designer.SetDataSource("LYJCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("LYJDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("LYJZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("LYJDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("LYJZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } else { hideRowsList.Add(Row + startIndex + HideRows); //ws.Cells.HideRows((Row + startIndex + HideRows), 2); } #endregion #region A段Right信息 var right = dto.rightInfo.Find(x => x.Type == "A"); if (right == null) { return Ok(jw); } HideRows += 4; var rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("经济舱 TBR")); if (rightBindData != null) { //经济舱 + 双人间 TBR designer.SetDataSource("lblJJCTBRDRCB", rightBindData.cb); designer.SetDataSource("txtJJCTBRRS", rightBindData.rs); designer.SetDataSource("lblJJCTBRZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("lblJJCTBRDRBJ", rightBindData.bj); designer.SetDataSource("lblJJCTBRZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("lblJJCTBRDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)); designer.SetDataSource("lblJJCTBRZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs)); TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs); TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs); TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs); } else { hideRowsList.Add(Row + startIndex + HideRows); } HideRows += 2; rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("经济舱 SGR")); if (rightBindData != null) { //经济舱 + 单人间 SGR designer.SetDataSource("lblJJCSGRDRCB", rightBindData.cb); designer.SetDataSource("txtJJCSGRRS", rightBindData.rs); designer.SetDataSource("lblJJCSGRZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("lblJJCSGRDRBJ", rightBindData.bj); designer.SetDataSource("lblJJCSGRZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("lblJJCSGRDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)); designer.SetDataSource("lblJJCSGRZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs)); TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs); TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs); TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs); } else { hideRowsList.Add(Row + startIndex + HideRows); } HideRows += 2; rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("公务舱 SGR")); if (rightBindData != null) { //公务舱 + 单人间 SGR designer.SetDataSource("lblGWCSGRCB", rightBindData.cb); designer.SetDataSource("lblGWCSGRRS", rightBindData.rs); designer.SetDataSource("lblGWCSGRZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("lblGWCSGRDRBJ", rightBindData.bj); designer.SetDataSource("lblGWCSGRZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("lblGWCSGRDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)); designer.SetDataSource("lblGWCSGRZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs)); TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs); TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs); TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs); } else { hideRowsList.Add(Row + startIndex + HideRows); } HideRows += 2; rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("公务舱 JS/ES")); if (rightBindData != null) { //公务舱 + 小套房 JSES designer.SetDataSource("lblGWCJSESDRCB", rightBindData.cb); designer.SetDataSource("txtGWCJSESRS", rightBindData.rs); designer.SetDataSource("lblGWCJSESZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("lblGWCJSESDRBJ", rightBindData.bj); designer.SetDataSource("lblGWCJSESZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("lblGWCJSESDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)); designer.SetDataSource("lblGWCJSESZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs)); TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs); TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs); TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs); } else { hideRowsList.Add(Row + startIndex + HideRows); } HideRows += 2; rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("公务舱 SUITE")); if (rightBindData != null) { //公务舱 + 小套房 JSES designer.SetDataSource("lblGWCSUITEDRCB", rightBindData.cb); designer.SetDataSource("txtGWCSUITERS", rightBindData.rs); designer.SetDataSource("lblGWCSUITEZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("lblGWCSUITEDRBJ", rightBindData.bj); designer.SetDataSource("lblGWCSUITEZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("lblGWCSUITEDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)); designer.SetDataSource("lblGWCSUITEZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs)); TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs); TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs); TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs); } else { hideRowsList.Add(Row + startIndex + HideRows); } HideRows += 2; rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("经济舱 SUITE")); if (rightBindData != null) { //经济舱 + 大套房 designer.SetDataSource("lblJJCSUITEDRCB", rightBindData.cb); designer.SetDataSource("txtJJCSUITERS", rightBindData.rs); designer.SetDataSource("lblJJCSUITEZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("lblJJCSUITEDRBJ", rightBindData.bj); designer.SetDataSource("lblJJCSUITEZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("lblJJCSUITEDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)); designer.SetDataSource("lblJJCSUITEZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs)); TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs); TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs); TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs); } else { hideRowsList.Add(Row + startIndex + HideRows); } #endregion #region B段标题清空 designer.SetDataSource("CostBDRCB", ""); designer.SetDataSource("CostBRS", ""); designer.SetDataSource("CostBXS", ""); designer.SetDataSource("CostBZCB", ""); designer.SetDataSource("CostBDRBJ", ""); designer.SetDataSource("CostBZBJ", ""); designer.SetDataSource("CostBDRLR", ""); designer.SetDataSource("CostBZLR", ""); designer.SetDataSource("CostBDRCBOM", ""); designer.SetDataSource("CostBRSOM", ""); designer.SetDataSource("CostBZCBOM", ""); designer.SetDataSource("CostBDRBJOM", ""); designer.SetDataSource("CostBZBJOM", ""); designer.SetDataSource("CostBDRLROM", ""); designer.SetDataSource("CostBZLROM", ""); #endregion designer.SetDataSource("HotelTBRName", "酒店TBR单间成本(CNY)"); designer.SetDataSource("HotelSGRName", "酒店SGR单间成本(CNY)"); designer.SetDataSource("HotelJSESName", "酒店JSES单间成本(CNY)"); designer.SetDataSource("HotelSUITEName", "酒店SUITE单间成本(CNY)"); designer.SetDataSource("DJName", "地接(CNY)"); designer.SetDataSource("HCPName", "地接-火车票(CNY)"); designer.SetDataSource("CPName", "地接-船票(CNY)"); designer.SetDataSource("GWName", "公务(CNY)"); designer.SetDataSource("YQHName", "邀请函(CNY)"); designer.SetDataSource("LYJName", "零用金(CNY)"); designer.SetDataSource("HSName", "核酸检测(CNY)"); designer.SetDataSource("AirGWCName", "机票-公务舱(CNY)"); designer.SetDataSource("AirJJCName", "机票-经济舱(CNY)"); designer.SetDataSource("BXName", "保险(CNY)"); designer.SetDataSource("VisaName", "签证(CNY)"); #region B段基本数据 if (dto.costType == "B") { left = dto.leftInfo.Find(x => x.Type == "B"); if (left == null) { return Ok(jw); } #region B段left数据 leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("核酸")); if (leftBindData != null) { designer.SetDataSource("BHSDRCB", leftBindData.cb); designer.SetDataSource("BHSRS", leftBindData.rs); designer.SetDataSource("BHSXS", leftBindData.xs); designer.SetDataSource("BHSZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BHSDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("BHSZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BHSDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("BHSZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("经济舱")); if (leftBindData != null) { designer.SetDataSource("BJPJJCCB", leftBindData.cb); designer.SetDataSource("BJPJJCPnum", leftBindData.rs); designer.SetDataSource("BJPJJCXS", leftBindData.xs); designer.SetDataSource("BJPJJCZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BJPJJCDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("BJPJJCZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BJPJJCDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("BJPJJCZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("公务舱")); if (leftBindData != null) { designer.SetDataSource("BJPGWCCB", leftBindData.cb); designer.SetDataSource("BJPGWCPNum", leftBindData.rs); designer.SetDataSource("BJPGWCXS", leftBindData.xs); designer.SetDataSource("BJPGWCZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BJPGWCDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("BJPGWCZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BJPGWCDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("BJPGWCZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("火车票")); if (leftBindData != null) { designer.SetDataSource("BHCPCB", leftBindData.cb); designer.SetDataSource("BHCPRS", leftBindData.rs); designer.SetDataSource("BHCPXS", leftBindData.xs); designer.SetDataSource("BHCPZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BHCPDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("BHCPZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BHCPDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("BHCPZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("船票")); if (leftBindData != null) { designer.SetDataSource("BCPCB", leftBindData.cb); designer.SetDataSource("BCPRS", leftBindData.rs); designer.SetDataSource("BCPXS", leftBindData.xs); designer.SetDataSource("BCPZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BCPDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("BCPZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BCPDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("BCPZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } //TBR leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("TBR")); if (leftBindData != null) { designer.SetDataSource("BHotelTBRDRCB", leftBindData.cb); designer.SetDataSource("BHotelTBRRS", leftBindData.rs); designer.SetDataSource("BHotelTBRXS", leftBindData.xs); designer.SetDataSource("BHotelTBRCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BHotelTBRDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("BHotelTBRZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BHotelTBRDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("BHotelTBRZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } //SGR leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("SGR")); if (leftBindData != null) { designer.SetDataSource("BHotelSGRDRCB", leftBindData.cb); designer.SetDataSource("BHotelSGRRS", leftBindData.rs); designer.SetDataSource("BHotelSGRXS", leftBindData.xs); designer.SetDataSource("BHotelSGRCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BHotelSGRDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("BHotelSGRZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BHotelSGRDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("BHotelSGRZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } //JS/ES leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("JSES")); if (leftBindData != null) { designer.SetDataSource("BHotelJSESDRCB", leftBindData.cb); designer.SetDataSource("BHotelJSESRS", leftBindData.rs); designer.SetDataSource("BHotelJSESXS", leftBindData.xs); designer.SetDataSource("BHotelJSESCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BHotelJSESDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("BHotelJSESZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BHotelJSESDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("BHotelJSESZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } //SUITE leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("SUITE")); if (leftBindData != null) { designer.SetDataSource("BHotelSUITEDRCB", leftBindData.cb); designer.SetDataSource("BHotelSUITERS", leftBindData.rs); designer.SetDataSource("BHotelSUITEXS", leftBindData.xs); designer.SetDataSource("BHotelSUITECB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BHotelSUITEDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("BHotelSUITEZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BHotelSUITEDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("BHotelSUITEZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("地接")); if (leftBindData != null) { designer.SetDataSource("BDJDRCB", leftBindData.cb); designer.SetDataSource("BDJRS", leftBindData.rs); designer.SetDataSource("BDJXS", leftBindData.xs); designer.SetDataSource("BDJCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BDJDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("BDJZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BDJDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("BDJZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("公务单人")); if (leftBindData != null) { designer.SetDataSource("BGWDRCD", leftBindData.cb); designer.SetDataSource("BGWRS", leftBindData.rs); designer.SetDataSource("BGWXS", leftBindData.xs); designer.SetDataSource("BGWCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BGWDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("BGWZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BGWDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("BGWZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } #region 优化方案 //Dictionary excelBind = new Dictionary(); //excelBind.Add("零用金", new { //cb="", //rs="", //xs ="", //zcb = "", //}); #endregion leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("零用金")); if (leftBindData != null) { designer.SetDataSource("BLYJDRCB", leftBindData.cb); designer.SetDataSource("BLYJRS", leftBindData.rs); designer.SetDataSource("BLYJXS", leftBindData.xs); designer.SetDataSource("BLYJCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BLYJDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)); designer.SetDataSource("BLYJZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs)); designer.SetDataSource("BLYJDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb)); designer.SetDataSource("BLYJZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs)); } #endregion #region B段Right信息 right = dto.rightInfo.Find(x => x.Type == "B"); if (right == null) { return Ok(jw); } rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("经济舱 TBR")); if (rightBindData != null) { //经济舱 + 双人间 TBR designer.SetDataSource("BlblJJCTBRDRCB", rightBindData.cb); designer.SetDataSource("BtxtJJCTBRRS", rightBindData.rs); designer.SetDataSource("BlblJJCTBRZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("BlblJJCTBRDRBJ", rightBindData.bj); designer.SetDataSource("BlblJJCTBRZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("BlblJJCTBRDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)); designer.SetDataSource("BlblJJCTBRZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs)); TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs); TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs); TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs); } rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("经济舱 SGR")); if (rightBindData != null) { //经济舱 + 单人间 SGR designer.SetDataSource("BlblJJCSGRDRCB", rightBindData.cb); designer.SetDataSource("BtxtJJCSGRRS", rightBindData.rs); designer.SetDataSource("BlblJJCSGRZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("BlblJJCSGRDRBJ", rightBindData.bj); designer.SetDataSource("BlblJJCSGRZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("BlblJJCSGRDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)); designer.SetDataSource("BlblJJCSGRZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs)); TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs); TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs); TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs); } rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("公务舱 SGR")); if (rightBindData != null) { //公务舱 + 单人间 SGR designer.SetDataSource("BlblGWCSGRCB", rightBindData.cb); designer.SetDataSource("BlblGWCSGRRS", rightBindData.rs); designer.SetDataSource("BlblGWCSGRZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("BlblGWCSGRDRBJ", rightBindData.bj); designer.SetDataSource("BlblGWCSGRZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("BlblGWCSGRDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)); designer.SetDataSource("BlblGWCSGRZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs)); TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs); TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs); TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs); } rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("公务舱 JS/ES")); if (rightBindData != null) { //公务舱 + 小套房 JSES designer.SetDataSource("BlblGWCJSESDRCB", rightBindData.cb); designer.SetDataSource("BtxtGWCJSESRS", rightBindData.rs); designer.SetDataSource("BlblGWCJSESZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("BlblGWCJSESDRBJ", rightBindData.bj); designer.SetDataSource("BlblGWCJSESZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("BlblGWCJSESDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)); designer.SetDataSource("BlblGWCJSESZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs)); TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs); TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs); TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs); } rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("公务舱 SUITE")); if (rightBindData != null) { //公务舱 + 小套房 JSES designer.SetDataSource("BlblGWCSUITEDRCB", rightBindData.cb); designer.SetDataSource("BtxtGWCSUITERS", rightBindData.rs); designer.SetDataSource("BlblGWCSUITEZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("BlblGWCSUITEDRBJ", rightBindData.bj); designer.SetDataSource("BlblGWCSUITEZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("BlblGWCSUITEDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)); designer.SetDataSource("BlblGWCSUITEZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs)); TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs); TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs); TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs); } rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("经济舱 SUITE")); if (rightBindData != null) { //经济舱 + 大套房 designer.SetDataSource("BlblJJCSUITEDRCB", rightBindData.cb); designer.SetDataSource("BtxtJJCSUITERS", rightBindData.rs); designer.SetDataSource("BlblJJCSUITEZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("BlblJJCSUITEDRBJ", rightBindData.bj); designer.SetDataSource("BlblJJCSUITEZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs)); designer.SetDataSource("BlblJJCSUITEDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)); designer.SetDataSource("BlblJJCSUITEZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs)); TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs); TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs); TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs); } #endregion #region 标题 designer.SetDataSource("CostBDRCB", "单人成本"); designer.SetDataSource("CostBRS", "人数"); designer.SetDataSource("CostBXS", "系数"); designer.SetDataSource("CostBZCB", "总成本"); designer.SetDataSource("CostBDRBJ", "单人报价"); designer.SetDataSource("CostBZBJ", "总报价"); designer.SetDataSource("CostBDRLR", "单人利润"); designer.SetDataSource("CostBZLR", "总利润"); designer.SetDataSource("CostBDRCBOM", "单人成本"); designer.SetDataSource("CostBRSOM", "人数"); designer.SetDataSource("CostBZCBOM", "总成本"); designer.SetDataSource("CostBDRBJOM", "单人报价"); designer.SetDataSource("CostBZBJOM", "总报价"); designer.SetDataSource("CostBDRLROM", "单人利润"); designer.SetDataSource("CostBZLROM", "总利润"); #endregion } #endregion designer.SetDataSource("TzZCB2", TzZCB2); designer.SetDataSource("TzZBJ2", TzZBJ2); designer.SetDataSource("TzZLR2", TzZLR2); string[] dataSourceKeys = new string[] { "VF", "TGS", "TGOF", "TGM", "TGA", "TGTF", "TGEF", "CFM", "CFOF", "B", "L", "D", "TBR", "SGR", "JSES", "Suite", "TV", "1L", "IF", "EF", "BRF", "TE", "TGT", "DRVT", "PC", "TLF", "ECT" }; foreach (var item in dataSourceKeys) { var find = dto.titleModel.FirstOrDefault(x => x.label.Replace(" ", "").Replace("/", "") == item); if (find != null) { designer.SetDataSource(item, find.text); } else { designer.SetDataSource(item, 0); } } designer.SetDataSource(dt); //根据数据源处理生成报表内容 designer.Process(); designer.Workbook.Worksheets[0].Name = "清单"; Worksheet sheet = designer.Workbook.Worksheets[0]; foreach (var Rowindex in hideRowsList) { ws.Cells.HideRows(Rowindex, 2); } byte[] bytes = null; string strFileName = di.TeamName + "-团组-成本.xls"; using (MemoryStream stream = new MemoryStream()) { designer.Workbook.Save(stream, Aspose.Cells.SaveFormat.Xlsx); bytes = stream.ToArray(); } return Ok(JsonView(true, "", new { Data = bytes, strFileName, })); } /// /// 导出客户报表 /// /// [HttpPost] public async Task ExportClientWordFile(ExportClientWordFileDto dto) { var jw = JsonView(false); if (dto.Diid == 0) { return Ok(JsonView(false, "请传递团组id")); } var deleInfo = await _groupRepository.PostGroupInfo(new GroupInfoDto { Id = dto.Diid, PortType = 1 }); if (deleInfo.Code != 0) { return Ok(JsonView(false, "团组信息查询失败!")); } var di = deleInfo.Data as DelegationInfoWebView; if (di == null) { return Ok(JsonView(false, "团组信息查询失败!")); } //文件名 //string strFileName = di.TeamName + "-团组-客户报价.doc"; //获取模板 string tmppath = (AppSettingsHelper.Get("WordBasePath") + "Template/团组-客户报价.doc"); //载入模板 Document doc = new Document(tmppath); Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc); Dictionary DickeyValue = new Dictionary(); DickeyValue.Add("DickeyValue", di.TeamName); //团组名 var ParameterList = _GroupCostParameterRepository.GetGroupCostParameterListByDiid(dto.Diid); var AParameter = ParameterList.Find(x => x.CostType == "A"); var BParameter = ParameterList.Find(x => x.CostType == "B"); if (AParameter == null) { return Ok(JsonView(false, "系数不存在!")); } string CarGuides, TzNumber, CarGuides1, Meal, SubsidizedMeals, NightRepair, AttractionsTickets, MiscellaneousFees, ATip, TzHotelDesc, Offcial, PettyCash, Visa, TrainTicket, TicketPrice , TzAirDesc, TzZCost; CarGuides = TzNumber = CarGuides1 = Meal = SubsidizedMeals = NightRepair = AttractionsTickets = MiscellaneousFees = ATip = TzHotelDesc = Offcial = PettyCash = Visa = TrainTicket = TicketPrice = TzAirDesc = TzZCost = string.Empty; TzNumber = AParameter.CostTypenumber.ToString(); CarGuides = "RMB " + (AParameter.DJCB * AParameter.DJXS).ToString("#0.00"); CarGuides1 = dto.CarGuides1; Meal = dto.Meal; SubsidizedMeals = dto.SubsidizedMeals; NightRepair = dto.NightRepair; AttractionsTickets = dto.AttractionsTickets; MiscellaneousFees = dto.MiscellaneousFees; ATip = dto.ATip; TzHotelDesc = ""; Offcial = "RMB " + (AParameter.GWCB * AParameter.GWXS).ToString("#0.00"); PettyCash = "RMB " + (AParameter.LYJCB * AParameter.LYJXS).ToString("#0.00"); Visa = "RMB " + (AParameter.VisaCB * AParameter.VisaXS + AParameter.HSCB * AParameter.HSXS + AParameter.BXCB * AParameter.BXXS).ToString("#0.00"); TrainTicket = "RMB " + (AParameter.HCPCB * AParameter.HCPXS).ToString("#0.00"); TicketPrice = "RMB " + (AParameter.CPCB * AParameter.CPXS).ToString("#0.00"); TzAirDesc = ""; TzZCost = dto.TzZCost; var TzHotelDescArr = new string[] { "SGR", "JSES", "SUITE", "TBR" }; var TzAirDescArr = new string[] { "经济舱", "公务舱" }; var index = 1; var AinfoArr = dto.leftInfo.Find(x => x.Type == "A"); foreach (var item in TzHotelDescArr) { if (AinfoArr != null) { var Ainfo = AinfoArr.leftinfoNumber.Find(x => x.title.Contains(item)); if (Ainfo != null) { if (int.Parse(Ainfo.rs) <= 0) { continue; } var hotelText = string.Empty; switch (item) { case "SGR": hotelText = "单人间"; break; case "JSES": hotelText = "小套房"; break; case "SUITE": hotelText = "套房"; break; case "TBR": hotelText = "双人间"; break; } if (item != "TBR") { TzHotelDesc += "(" + index + ".) " + hotelText + " " + Ainfo.rs + "间 共" + Ainfo.rs + " " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs)).ToString("#0.00") + "/人........共RMB " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs) * decimal.Parse(Ainfo.rs)).ToString("#0.00") + "\n"; } else { TzHotelDesc += "(" + index + ".) " + hotelText + " " + (int.Parse(Ainfo.rs) / 2) + "间 共" + Ainfo.rs + " " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs)).ToString("#0.00") + "/人........共RMB " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs) * decimal.Parse(Ainfo.rs)).ToString("#0.00") + "\n"; } index++; } } } index = 1; foreach (var item in TzAirDescArr) { if (AinfoArr != null) { var Ainfo = AinfoArr.leftinfoNumber.Find(x => x.title.Contains(item)); if (Ainfo != null) { if (int.Parse(Ainfo.rs) <= 0) { continue; } TzAirDesc += "(" + index + ".) " + item + " " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs)).ToString("#0.00") + "/人 共" + Ainfo.rs + " ........小计RMB " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs) * decimal.Parse(Ainfo.rs)).ToString("#0.00") + "\n"; index++; } } } if (dto.costType == "B") { if (BParameter == null) { return Ok(JsonView(false, "B段系数不存在!")); } CarGuides = CarGuides.Insert(0, "A段 ") + " B段 RMB" + (BParameter.DJCB * BParameter.DJXS).ToString("#0.00"); Offcial = Offcial.Insert(0, "A段 ") + " B段 RMB " + (BParameter.GWCB * BParameter.GWXS).ToString("#0.00"); PettyCash = PettyCash.Insert(0, "A段 ") + " B段 RMB " + (BParameter.LYJCB * BParameter.LYJXS).ToString("#0.00"); Visa = Visa.Insert(0, "A段 ") + " B段 RMB " + (BParameter.VisaCB * BParameter.VisaXS + BParameter.HSCB * BParameter.HSXS + BParameter.BXCB * BParameter.BXXS).ToString("#0.00"); TrainTicket = TrainTicket.Insert(0, "A段 ") + " B段 RMB " + (BParameter.HCPCB * BParameter.HCPXS).ToString("#0.00"); TicketPrice = TicketPrice.Insert(0, "A段 ") + " B段 RMB " + (BParameter.CPCB * BParameter.CPXS).ToString("#0.00"); AinfoArr = dto.leftInfo.Find(x => x.Type == "B"); foreach (var item in TzHotelDescArr) { if (AinfoArr != null) { TzHotelDesc += "B段信息 \r\n"; var Ainfo = AinfoArr.leftinfoNumber.Find(x => x.title.Contains(item)); if (Ainfo != null) { if (int.Parse(Ainfo.rs) <= 0) { continue; } var hotelText = string.Empty; switch (item) { case "SGR": hotelText = "单人间"; break; case "JSES": hotelText = "小套房"; break; case "SUITE": hotelText = "套房"; break; case "TBR": hotelText = "双人间"; break; } if (item != "TBR") { TzHotelDesc += "(" + index + ".) " + hotelText + " " + Ainfo.rs + "间 共" + Ainfo.rs + " " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs)).ToString("#0.00") + "/人........共RMB " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs) * decimal.Parse(Ainfo.rs)).ToString("#0.00") + "\n"; } else { TzHotelDesc += "(" + index + ".) " + hotelText + " " + (int.Parse(Ainfo.rs) / 2) + "间 共" + Ainfo.rs + " " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs)).ToString("#0.00") + "/人........共RMB " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs) * decimal.Parse(Ainfo.rs)).ToString("#0.00") + "\n"; } index++; } TzHotelDesc = TzHotelDesc.Insert(0, "A段信息 \r\n"); } } index = 1; foreach (var item in TzAirDescArr) { if (AinfoArr != null) { var Ainfo = AinfoArr.leftinfoNumber.Find(x => x.title.Contains(item)); if (Ainfo != null) { if (int.Parse(Ainfo.rs) <= 0) { continue; } TzAirDesc += "(" + index + ".) " + item + " " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs)).ToString("#0.00") + "/人 共" + Ainfo.rs + " ........小计RMB " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs) * decimal.Parse(Ainfo.rs)).ToString("#0.00") + "\n"; index++; } } } } Visa = Visa.Insert(0, "签证及保险(含核酸检测): "); DickeyValue.Add("TzNumber", TzNumber); //团组人数 DickeyValue.Add("CarGuides", CarGuides); //地接单人报价 DickeyValue.Add("CarGuides1", CarGuides1); // 地接 - 车导费 DickeyValue.Add("Meal", Meal); // 地接 - 餐费 DickeyValue.Add("SubsidizedMeals", SubsidizedMeals);// 地接 - 餐补 DickeyValue.Add("NightRepair", NightRepair); // 地接 - 宿补 DickeyValue.Add("AttractionsTickets", AttractionsTickets); // 地接 - 景点 DickeyValue.Add("MiscellaneousFees", MiscellaneousFees); // 地接 - 杂费 DickeyValue.Add("ATip", ATip); // 地接 - 小费 DickeyValue.Add("TzHotelDesc", TzHotelDesc); //酒店 DickeyValue.Add("Offcial", Offcial); // 公务单人报价 DickeyValue.Add("PettyCash", PettyCash); // 零用金单人报价 DickeyValue.Add("Visa", Visa); // 签证单人报价 DickeyValue.Add("TrainTicket", TrainTicket); //火车票 DickeyValue.Add("TicketPrice", TicketPrice); //船票 DickeyValue.Add("TzAirDesc", TzAirDesc); //机票 DickeyValue.Add("TzZCost", TzZCost); foreach (var key in DickeyValue.Keys) { if (doc.Range.Bookmarks[key] != null) { Bookmark mark = doc.Range.Bookmarks[key]; mark.Text = DickeyValue[key]; } } byte[] bytes = null; string strFileName = di.TeamName + "-客户报价.doc"; using (MemoryStream stream = new MemoryStream()) { doc.Save(stream, Aspose.Words.SaveFormat.Doc); bytes = stream.ToArray(); } return Ok(JsonView(true, "", new { Data = bytes, strFileName, })); } /// /// 团组成本 各模块(酒店,地接,机票)成本提示 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostGroupCostModulePrompt(GroupCostModulePromptDto dto) { try { #region 参数验证 if (dto.DiId < 0) { return Ok(JsonView(false, "请传入有效的DiId参数!")); } List cTableIds = new List() { 76 ,//酒店预订 77 ,//行程 79 ,//车/导游地接 80 ,//签证 81 ,//邀请/公务活 82 ,//团组客户保险 85 ,//机票预订 98 ,//其他款项 285 ,//收款退还 751 ,//酒店早餐 1015 // 超支费用 }; if (dto.CTable < 0 && !cTableIds.Contains(dto.CTable)) { return Ok(JsonView(false, "请传入有效的CTable参数!")); } #endregion //Grp_GroupCostParameter 预算表 Grp_GroupCost 详细费用列表 var _GroupCostParameters = _usersRep._sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.DiId == dto.DiId).ToList(); if (_GroupCostParameters.Count <= 0) { return Ok(JsonView(false, "暂无该团组成本信息!", new List())); } if (_GroupCostParameters[0].IsShare == 0) { return Ok(JsonView(false, "该团组成本未完成!", new List())); } var _GroupCosts = _usersRep._sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.Diid == dto.DiId).ToList(); //处理date为空问题 if (_GroupCosts.Count > 0) { for (int i = 0; i < _GroupCosts.Count; i++) { if (string.IsNullOrEmpty(_GroupCosts[i].Date)) { if (i > 0) { _GroupCosts[i].Date = _GroupCosts[i - 1].Date; } } } } GroupCostModulePromptView _view = new GroupCostModulePromptView(); List _ModulePromptInfos = new List(); //机票存储多段 var currDatas = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.STid == 66).ToList(); string currCode = ""; #region currCode 验证 bool isInt = int.TryParse(_GroupCostParameters[0].Currency, out int intCurrency); if (isInt) { var currData = currDatas.Find(it => it.Id == intCurrency); if (currData != null) { currCode = currData.Name; } } else { currCode = _GroupCostParameters[0].Currency.Trim(); } #endregion //op,酒店单段模式存储 GroupCostModulePromptInfo _ModulePromptInfo = new GroupCostModulePromptInfo() { CurrencyCode = currCode, Rate = _GroupCostParameters[0].Rate, CostType = _GroupCostParameters[0].CostType, CostTypeStartTime = Convert.ToDateTime(_GroupCostParameters[0].CostTypeStartTime).ToString("yyyy-MM-dd"), CostTypeEndTime = Convert.ToDateTime(_GroupCostParameters[0].CostTypeendTime).ToString("yyyy-MM-dd"), CostTypeNumber = _GroupCostParameters[0].CostTypenumber }; List _ModuleSubPromptInfo = new List(); // 存储CTbale != 85 的动态数据 if (_GroupCostParameters.Count == 2) { _ModulePromptInfo.CostTypeEndTime = Convert.ToDateTime(_GroupCostParameters[1].CostTypeendTime).ToString("yyyy-MM-dd"); } foreach (var item in _GroupCostParameters) { decimal _rate = 1; decimal _rate1 = item.Rate; decimal _scale = 0.95M; #region 处理地接价格比例 总经理 国交部经理 主管 不下调 其他人 下调 5% var userInfo = _usersRep._sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.Id == dto.UserId).First(); if (userInfo != null) { if (userInfo.DepId == 1 || userInfo.DepId == 7) { if (userInfo.JobPostId == 1 || userInfo.JobPostId == 22 || userInfo.JobPostId == 32) { _scale = 1.00M; } } } #endregion GroupCostModulePromptInfo modulePromptInfo = new GroupCostModulePromptInfo() { CurrencyCode = currCode, Rate = _rate1, CostType = item.CostType, CostTypeStartTime = Convert.ToDateTime(item.CostTypeStartTime).ToString("yyyy-MM-dd"), CostTypeEndTime = Convert.ToDateTime(item.CostTypeendTime).ToString("yyyy-MM-dd"), CostTypeNumber = item.CostTypenumber }; if (_GroupCostParameters.Count > 1) { modulePromptInfo.CostTypeNumber = item.CostTypenumber; } else { modulePromptInfo.CostTypeNumber = item.LYJRS; } if (dto.CTable == 79)// { modulePromptInfo.IndividualCost = item.DJCB / modulePromptInfo.CostTypeNumber; modulePromptInfo.TotalCost = item.DJCB; } List costTypes = new List() { "A", "B" }; List _GroupCostsTypeData = new List(); var _GroupCostsDuplicates = _GroupCostParameters.GroupBy(x => x.CostType).Select(y => y.FirstOrDefault()); if (_GroupCostsDuplicates.Count() == 1) { _GroupCostsTypeData = _GroupCosts; } else { _GroupCostsTypeData = _GroupCosts.Where(it => Convert.ToDateTime(it.Date) >= Convert.ToDateTime(item.CostTypeStartTime) && Convert.ToDateTime(it.Date) <= Convert.ToDateTime(item.CostTypeendTime)).ToList(); } /* * 76 酒店预订 * 77 行程 * 79 车/导游地接 * 80 签证 * 81 邀请/公务活动 * 82 团组客户保险 * 85 机票预订 * 98 其他款项 * 285 收款退还 * 751 酒店早餐 * 1015 超支费用 */ switch (dto.CTable) { case 76: // 酒店预订 _ModuleSubPromptInfo.AddRange( _GroupCostsTypeData.Select(it => new { it.DAY, it.Date, it.ACCON, it.ITIN, it.SGR, it.TBR, it.JS_ES, it.Suite }) ); break; case 79: // 车/导游地接 _ModuleSubPromptInfo.AddRange( _GroupCostsTypeData.Select(it => new { Date = it.Date, //日期 CarFee = (it.CarCost + it.CFM + it.CFOF) * _rate * _scale, //车费用 GuideFee = (it.TGS + it.TGOF + it.TGM + it.TGA + it.TGTF + it.TGEF) * _rate * _scale, //导游费用 MealFee = (it.B + it.L + it.D) * _rate * _scale, //餐食费 TicketFee = it.EF * _rate * _scale, //门票费 TipFee = (it.TGTips + it.DRVTips) * _rate * _scale, //小费 AirportTransferFee = 0.00M, DrinksSnacksFruitFee = it.B_R_F * _rate * _scale, //饮料零食水果 TravelSupplies = it.TE * _rate * _scale, //出行物资 LeadersFee = it.TLF * _rate * _scale, //领队费 CarFee1 = it.CarCost * _rate * _scale, CarType = it.CarType, //车型 SpentCash = it.PC * _rate * _scale, //零用金 }) ); break; case 85: // 机票 List datas = new List(); datas.Add( new { AirType = "经济舱", AirNum = item.JJCRS, AirDRCB = item.JJCCB, AirZCB = (item.JJCRS * item.JJCCB) } ); datas.Add( new { AirType = "公务舱", AirNum = item.GWCRS, AirDRCB = item.GWCCB, AirZCB = (item.GWCRS * item.GWCCB) } ); modulePromptInfo.Data = datas; _ModulePromptInfos.Add(modulePromptInfo); break; default: break; } } if (dto.CTable != 85) { _ModulePromptInfo.Data = _ModuleSubPromptInfo; _ModulePromptInfos.Add(_ModulePromptInfo); } _view.ModulePromptInfos = _ModulePromptInfos; return Ok(JsonView(true, "操作成功!", _view)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } #endregion #region 酒店预定 保留 /// /// 酒店预订页面初始化绑定 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task HotelReservationsInitialize(HotelReservationsDto dto) { try { Result groupData = await _hotelPriceRep.HotelReservationsInitialize(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 根据团组Id查询酒店费用列表 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task HotelReservationsByDiId(HotelReservationsByDiIdDto dto) { try { Result groupData = await _hotelPriceRep.HotelReservationsByDiId(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 根据酒店费用Id查询酒店费用详细 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task HotelReservationsById(HotelReservationsByIdDto dto) { try { Result groupData = await _hotelPriceRep.HotelReservationsById(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 计算酒店付款总金额 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task HotelConversionAmounts(HotelReservationsCNYDto dto) { try { Result groupData = await _hotelPriceRep.HotelConversionAmounts(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 酒店费用操作(Status:1.新增,2.修改) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task OpHotelReservations(OpHotelReservationsData dto) { try { Result groupData = await _hotelPriceRep.OpHotelReservations(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 文件上传 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task UploadHotel(IFormFile file) { try { if (file != null) { var fileDir = AppSettingsHelper.Get("GrpFileBasePath"); //文件名称 string projectFileName = file.FileName; //上传的文件的路径 string filePath = ""; if (!Directory.Exists(fileDir)) { Directory.CreateDirectory(fileDir); } //上传的文件的路径 filePath = fileDir + $@"\酒店费用录入相关文件\{projectFileName}"; using (FileStream fs = System.IO.File.Create(filePath)) { file.CopyTo(fs); fs.Flush(); } return Ok(JsonView(true, "上传成功!", projectFileName)); } else { return Ok(JsonView(false, "上传失败!")); } } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 删除指定文件 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task DelFileHotel(DelFileDto dto) { try { string filePath = ""; var fileDir = AppSettingsHelper.Get("GrpFileBasePath"); // 返回与指定虚拟路径相对应的物理路径即绝对路径 //int id = 0; filePath = fileDir + "/酒店费用录入相关文件/" + dto.fileName; // 删除该文件 try { System.IO.File.Delete(filePath); var result = await _sqlSugar.Updateable().Where(a => a.Id == dto.Id && a.IsDel == 0).SetColumns(a => new Grp_HotelReservations() { Attachment = "", }).ExecuteCommandAsync(); if (result != 0) { return Ok(JsonView(true, "成功!")); } else { return Ok(JsonView(false, "失败!")); } } catch (Exception) { var result = await _sqlSugar.Updateable().Where(a => a.Id == dto.Id && a.IsDel == 0).SetColumns(a => new Grp_HotelReservations() { Attachment = "", }).ExecuteCommandAsync(); if (result != 0) { return Ok(JsonView(true, "成功!")); } else { return Ok(JsonView(false, "失败!")); } throw; } } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 生成VOUCHER /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task HotelGenerate(HotelReservationsByIdDto dto) { Grp_HotelReservations h = _sqlSugar.Queryable().First(a => a.Id == dto.Id && a.IsDel == 0); //判断数据是否完整 if (h != null) { if (!string.IsNullOrEmpty(h.DetermineNo)) { string strFileName = "HotelStatement/"; Grp_DelegationInfo dele = _sqlSugar.Queryable().First(a => a.Id == h.DiId && a.IsDel == 0); if (dele != null) strFileName += dele.TourCode; //载入模板 string sss = AppSettingsHelper.Get("WordBasePath") + "Template/酒店预订模板.doc"; Document doc = new Document(sss); DocumentBuilder builder = new DocumentBuilder(doc); try { #region 替换Word模板书签内容 //这里可以创建个DataTable循环添加书签的值,这里提示一下就不多做修改了 //入住卷预定号码 if (doc.Range.Bookmarks["VNO"] != null) { Bookmark mark = doc.Range.Bookmarks["VNO"]; mark.Text = h.CheckNumber; } //酒店时间 if (doc.Range.Bookmarks["Date"] != null) { Bookmark mark = doc.Range.Bookmarks["Date"]; mark.Text = Convert.ToDateTime(h.CreateTime).ToString("yyyy-MM-dd"); } //团号 if (doc.Range.Bookmarks["TNo"] != null) { Bookmark mark = doc.Range.Bookmarks["TNo"]; mark.Text = dele.TourCode; } //预定号码 if (doc.Range.Bookmarks["BookingId"] != null) { Bookmark mark = doc.Range.Bookmarks["BookingId"]; mark.Text = h.ReservationsNo; } if (doc.Range.Bookmarks["HotelConfirmNo"] != null) { Bookmark mark = doc.Range.Bookmarks["HotelConfirmNo"]; mark.Text = h.DetermineNo; } //酒店城市 if (doc.Range.Bookmarks["City"] != null) { Bookmark mark = doc.Range.Bookmarks["City"]; mark.Text = h.City; } //酒店名称 if (doc.Range.Bookmarks["HName"] != null) { Bookmark mark = doc.Range.Bookmarks["HName"]; mark.Text = h.HotelName; } //酒店地址 if (doc.Range.Bookmarks["Address"] != null) { Bookmark mark = doc.Range.Bookmarks["Address"]; mark.Text = h.HotelAddress; } //酒店电话 if (doc.Range.Bookmarks["Tel"] != null) { Bookmark mark = doc.Range.Bookmarks["Tel"]; mark.Text = h.HotelTel; } //酒店传真 if (doc.Range.Bookmarks["Fax"] != null) { Bookmark mark = doc.Range.Bookmarks["Fax"]; if (!string.IsNullOrWhiteSpace(h.HotelFax)) { mark.Text = h.HotelFax; } } //入住时间 if (doc.Range.Bookmarks["CIn"] != null) { DateTime dtCheckIn = Convert.ToDateTime(h.CheckInDate); Bookmark mark = doc.Range.Bookmarks["CIn"]; mark.Text = dtCheckIn.Day + " " + dtCheckIn.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckIn.Year; } //退房时间 if (doc.Range.Bookmarks["COut"] != null) { DateTime dtCheckOut = Convert.ToDateTime(h.CheckOutDate); Bookmark mark = doc.Range.Bookmarks["COut"]; mark.Text = dtCheckOut.Day + " " + dtCheckOut.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckOut.Year; } //客户名称 if (doc.Range.Bookmarks["GName"] != null) { Bookmark mark = doc.Range.Bookmarks["GName"]; mark.Text = h.GuestName; } //房间介绍 if (doc.Range.Bookmarks["ROOM"] != null) { Bookmark mark = doc.Range.Bookmarks["ROOM"]; mark.Text = h.RoomExplanation; } //报价描述 if (doc.Range.Bookmarks["NOTE"] != null) { Bookmark mark = doc.Range.Bookmarks["NOTE"]; Sys_SetData ss = _sqlSugar.Queryable().First(a => a.Id == h.ReservationsWebsite); if (ss != null) mark.Text = ss.Name; } //入住时间 if (doc.Range.Bookmarks["CheckIn"] != null) { DateTime dtCheckIn = Convert.ToDateTime(h.CheckInDate); Bookmark mark = doc.Range.Bookmarks["CheckIn"]; mark.Text = dtCheckIn.Day + " " + dtCheckIn.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckIn.Year + " "; } //退房时间 if (doc.Range.Bookmarks["CheckOut"] != null) { DateTime dtCheckOut = Convert.ToDateTime(h.CheckOutDate); Bookmark mark = doc.Range.Bookmarks["CheckOut"]; mark.Text = " " + dtCheckOut.Day + " " + dtCheckOut.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckOut.Year; } //日期 if (doc.Range.Bookmarks["DT"] != null) { Bookmark mark = doc.Range.Bookmarks["DT"]; mark.Text = Convert.ToDateTime(h.CreateTime).ToString("yyyy-MM-dd"); } //名称 if (doc.Range.Bookmarks["VName"] != null) { Bookmark mark = doc.Range.Bookmarks["VName"]; mark.Text = h.HotelName; } //号码 if (doc.Range.Bookmarks["VOUCHERNO"] != null) { Bookmark mark = doc.Range.Bookmarks["VOUCHERNO"]; mark.Text = h.CheckNumber; } #endregion //string fileName = "HotelStatement/" + diName + "机票费用报表" + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx"; strFileName += "VOUCHER.doc"; var fileDir = AppSettingsHelper.Get("WordBasePath") + strFileName; doc.Save(fileDir); string Url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/" + strFileName; return Ok(JsonView(true, "成功!", Url)); } catch (Exception ex) { throw; } } else { return Ok(JsonView(false, "酒店确定号码未填写,无法生成Voucher!")); } } else { return Ok(JsonView(false, "酒店确定号码未填写,无法生成Voucher!")); } } /// /// 导出确认单 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task ConfirmWord(HotelReservationsByIdDto dto) { //团组信息 Grp_DelegationInfo di = _sqlSugar.Queryable().First(a => a.Id == dto.Id); //酒店数据 List listhoteldata = _sqlSugar.Queryable().Where(a => a.DiId == dto.Id && a.IsDel == 0).ToList(); //利datatable存储 DataTable dt = new DataTable(); dt.Columns.Add("CheckInDate", typeof(string)); dt.Columns.Add("City", typeof(string)); dt.Columns.Add("Hotel", typeof(string)); dt.Columns.Add("Room", typeof(string)); for (int i = 0; i < listhoteldata.Count; i++) { DateTime dayStart = Convert.ToDateTime(listhoteldata[i].CheckInDate); DateTime dayEnd = Convert.ToDateTime(listhoteldata[i].CheckOutDate); while (dayStart < dayEnd) { string temp = ""; DataRow row = dt.NewRow(); row["CheckInDate"] = dayStart.ToString("yyyy-MM-dd"); row["City"] = listhoteldata[i].City; row["Hotel"] = listhoteldata[i].HotelName; if (listhoteldata[i].SingleRoomCount > 0) { temp = listhoteldata[i].SingleRoomCount + "个单间" + "\r\n"; } if (listhoteldata[i].DoubleRoomCount > 0) { temp = temp + listhoteldata[i].DoubleRoomCount + "个表间" + "\r\n"; } if (listhoteldata[i].SuiteRoomCount > 0) { temp = temp + listhoteldata[i].SuiteRoomCount + "个套房" + "\r\n"; } if (listhoteldata[i].OtherRoomCount > 0) { temp = temp + listhoteldata[i].OtherRoomCount + "个其他房型" + "\r\n"; } row["Room"] = temp; dt.Rows.Add(row); dayStart = dayStart.AddDays(1); } } Dictionary dic = new Dictionary(); dic.Add("Dele", di.TeamName); dic.Add("City", di.VisitCountry); //模板路径 string tempPath = AppSettingsHelper.Get("WordBasePath") + "Template/酒店用房确认单-模板.doc"; //载入模板 Aspose.Words.Document doc = new Aspose.Words.Document(tempPath); DocumentBuilder builder = new DocumentBuilder(doc); foreach (var key in dic.Keys) { builder.MoveToBookmark(key); builder.Write(dic[key]); } //获取word里所有表格 NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true); //获取所填表格的序数 Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table; var rowStart = tableOne.Rows[0]; //获取第1行 try { //循环赋值 for (int i = 0; i < dt.Rows.Count; i++) { builder.MoveToCell(0, i + 1, 0, 0); builder.Write(dt.Rows[i]["CheckInDate"].ToString()); builder.MoveToCell(0, i + 1, 1, 0); builder.Write(dt.Rows[i]["City"].ToString()); builder.MoveToCell(0, i + 1, 2, 0); builder.Write(dt.Rows[i]["Hotel"].ToString()); builder.MoveToCell(0, i + 1, 3, 0); builder.Write(dt.Rows[i]["Room"].ToString()); } } catch { } //删除多余行 while (tableOne.Rows.Count > dt.Rows.Count + 1) { tableOne.Rows.RemoveAt(dt.Rows.Count + 1); } string strFileName = di.TeamName + "酒店确认单.doc"; try { doc.Save(AppSettingsHelper.Get("WordBasePath") + "HotelStatement/" + strFileName); string Url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/HotelStatement/" + strFileName; return Ok(JsonView(true, "成功", Url)); } catch (Exception) { return Ok(JsonView(false, "当前文档已打开,请先关闭!")); throw; } } /// /// 酒店费用删除 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task DelHotelPrice(DelBaseDto dto) { try { var res = await _hotelPriceRep.SoftDeleteByIdAsync(dto.Id.ToString(), dto.DeleteUserId); if (!res) { return Ok(JsonView(false, "删除失败")); } var resultC = await _sqlSugar.Updateable().Where(a => a.CId == dto.Id && a.IsDel == 0 && a.CTable == 76).SetColumns(a => new Grp_CreditCardPayment() { IsDel = 1, DeleteUserId = dto.DeleteUserId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }).ExecuteCommandAsync(); return Ok(JsonView(true, "删除成功!")); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } #endregion #region 酒店预订 新 雷怡 2023-12-28 17:45 /// /// 酒店预订 /// 酒店费用列表 根据团组Id查询 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostHotelReservationsItemsByDiId(HotelReservationItemDto _dto) { try { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空")); if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空")); #region 团组操作权限验证 76 酒店预定模块 var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76); if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg)); #endregion PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!")); #endregion #endregion Result _view = await _hotelPriceRep._ItemsByDiId(_dto.PortType, _dto.DiId); if (_view.Code != 0) { return Ok(JsonView(false, _view.Msg)); } return Ok(JsonView(true, _view.Msg, _view.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 酒店预订 /// 基础数据 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostHotelReservationsBasicsDataInit(HotelReservationBasicsDataInitDto _dto) { try { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空")); if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空")); PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!")); #endregion #region 团组操作权限验证 76 酒店预定模块 var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76); if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg)); #endregion #endregion Result data = await _hotelPriceRep._BasicsDataInit(_dto.PortType, _dto.DiId); if (data.Code != 0) { return Ok(JsonView(false, data.Msg)); } return Ok(JsonView(true, data.Msg, data.Data)); } catch (Exception ex) { return Ok(JsonView(false, "Catch:" + ex.Message)); } } /// /// 酒店预订 /// 创建 入住卷号码 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostHotelReservationsCreateCheckVolumeNo(HotelReservationBasicsDataInitDto _dto) { try { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空")); if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空")); PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!")); #endregion #region 团组操作权限验证 76 酒店预定模块 var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76); if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg)); #endregion #endregion Result data = await _hotelPriceRep._CreateCheckVolumeNo(_dto.DiId); if (data.Code != 0) { return Ok(JsonView(false, data.Msg)); } return Ok(JsonView(true, data.Msg, data.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 酒店预订 /// 详情 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostHotelReservationsDetails(HotelReservationsDetailsDto _dto) { try { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空")); if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空")); #region 团组操作权限验证 76 酒店预定模块 var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76); if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg)); #endregion PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!")); #endregion #endregion Result data = await _hotelPriceRep._Details(_dto.PortType, _dto.Id); if (data.Code != 0) { return Ok(JsonView(false, data.Msg)); } return Ok(JsonView(true, data.Msg, data.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 酒店预订 /// Add Or Edit /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostHotelReservationsAddOrEdit(HotelReservationsAddOrEditDto _dto) { try { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空")); if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空")); #region 团组操作权限验证 76 酒店预定模块 var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76); if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg)); #endregion PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (_dto.Id == 0) // Add if (pageFunAuthView.AddAuth == 0) return Ok(JsonView(false, "您没有添加权限!")); else if (_dto.Id > 0) // Edit if (pageFunAuthView.EditAuth == 0) return Ok(JsonView(false, "您没有编辑权限!")); else return Ok(JsonView(false, "请输入正确的数据Id!")); #endregion #endregion Result data = await _hotelPriceRep._AddOrEdit(_dto); if (data.Code != 0) { return Ok(JsonView(false, data.Msg)); } return Ok(JsonView(true, data.Msg, data.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 酒店预订 /// Del /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostHotelReservationsDel(HotelReservationsDelDto _dto) { try { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空")); if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空")); #region 团组操作权限验证 76 酒店预定模块 var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76); if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg)); #endregion PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (pageFunAuthView.DeleteAuth == 0) return Ok(JsonView(false, "您没有删除权限!")); #endregion #endregion Result data = await _hotelPriceRep._Del(_dto.Id, _dto.UserId); if (data.Code != 0) { return Ok(JsonView(false, data.Msg)); } return Ok(JsonView(true, data.Msg, data.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 酒店预订 /// 生成VOUCHER /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostHotelReservationsCreateVoucher(HotelReservationsCreateVoucherDto _dto) { try { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空")); if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空")); #region 团组操作权限验证 76 酒店预定模块 var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76); if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg)); #endregion PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (pageFunAuthView.FilesDownloadAuth == 0) return Ok(JsonView(false, "您没有文件下载权限!")); #endregion #endregion Grp_HotelReservations hr = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.Id == _dto.Id).FirstAsync(); //判断数据是否完整 if (hr != null) { if (!string.IsNullOrEmpty(hr.DetermineNo)) { string strFileName = "HotelStatement/"; Grp_DelegationInfo dele = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.Id == _dto.DiId).FirstAsync(); if (dele != null) strFileName += dele.TourCode; //载入模板 string sss = AppSettingsHelper.Get("WordBasePath") + "Template/酒店预订模板.doc"; Document doc = new Document(sss); DocumentBuilder builder = new DocumentBuilder(doc); #region 替换Word模板书签内容 //这里可以创建个DataTable循环添加书签的值,这里提示一下就不多做修改了 //入住卷预定号码 if (doc.Range.Bookmarks["VNO"] != null) { Bookmark mark = doc.Range.Bookmarks["VNO"]; mark.Text = hr.CheckNumber; } //酒店时间 if (doc.Range.Bookmarks["Date"] != null) { Bookmark mark = doc.Range.Bookmarks["Date"]; mark.Text = Convert.ToDateTime(hr.CreateTime).ToString("yyyy-MM-dd"); } //团号 if (doc.Range.Bookmarks["TNo"] != null) { Bookmark mark = doc.Range.Bookmarks["TNo"]; mark.Text = dele.TourCode; } //预定号码 if (doc.Range.Bookmarks["BookingId"] != null) { Bookmark mark = doc.Range.Bookmarks["BookingId"]; mark.Text = hr.ReservationsNo; } if (doc.Range.Bookmarks["HotelConfirmNo"] != null) { Bookmark mark = doc.Range.Bookmarks["HotelConfirmNo"]; mark.Text = hr.DetermineNo; } //酒店城市 if (doc.Range.Bookmarks["City"] != null) { Bookmark mark = doc.Range.Bookmarks["City"]; mark.Text = hr.City; } //酒店名称 if (doc.Range.Bookmarks["HName"] != null) { Bookmark mark = doc.Range.Bookmarks["HName"]; mark.Text = hr.HotelName; } //酒店地址 if (doc.Range.Bookmarks["Address"] != null) { Bookmark mark = doc.Range.Bookmarks["Address"]; mark.Text = hr.HotelAddress; } //酒店电话 if (doc.Range.Bookmarks["Tel"] != null) { Bookmark mark = doc.Range.Bookmarks["Tel"]; mark.Text = hr.HotelTel; } //酒店传真 if (doc.Range.Bookmarks["Fax"] != null) { Bookmark mark = doc.Range.Bookmarks["Fax"]; if (!string.IsNullOrWhiteSpace(hr.HotelFax)) { mark.Text = hr.HotelFax; } } //入住时间 if (doc.Range.Bookmarks["CIn"] != null) { DateTime dtCheckIn = Convert.ToDateTime(hr.CheckInDate); Bookmark mark = doc.Range.Bookmarks["CIn"]; mark.Text = dtCheckIn.Day + " " + dtCheckIn.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckIn.Year; } //退房时间 if (doc.Range.Bookmarks["COut"] != null) { DateTime dtCheckOut = Convert.ToDateTime(hr.CheckOutDate); Bookmark mark = doc.Range.Bookmarks["COut"]; mark.Text = dtCheckOut.Day + " " + dtCheckOut.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckOut.Year; } //客户名称 if (doc.Range.Bookmarks["GName"] != null) { string guestName = ""; string[] clients = new string[] { }; if (hr.GuestName.Contains(",")) { clients = hr.GuestName.Split(","); } else { clients = new string[] { hr.GuestName }; } List clientIds_int = new List(); if (clients.Length > 0) { foreach (var item in clients) { if (item.IsNumeric()) { clientIds_int.Add(int.Parse(item)); } } } if (clientIds_int.Count > 0) { var _clientDatas = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && clientIds_int.Contains(it.Id)).ToList(); foreach (var client in _clientDatas) { //男 if (client.Sex == 0) guestName += $"Mr."; //女 else if (client.Sex == 1) guestName += $"Ms."; if (!String.IsNullOrEmpty(client.FirstName + client.LastName)) { guestName += $"{string.Join("", client.FirstName.GetTotalPingYin()).ToUpper()} {string.Join("", client.LastName.GetTotalPingYin()).ToUpper()},"; } //guestName += $"{client.Pinyin},"; } if (guestName.Length > 0) { guestName = guestName.Substring(0, guestName.Length - 1); } } else { guestName = hr.GuestName; } Bookmark mark = doc.Range.Bookmarks["GName"]; mark.Text = guestName; } //房间介绍 if (doc.Range.Bookmarks["ROOM"] != null) { Bookmark mark = doc.Range.Bookmarks["ROOM"]; mark.Text = hr.RoomExplanation; } //报价描述 if (doc.Range.Bookmarks["NOTE"] != null) { Bookmark mark = doc.Range.Bookmarks["NOTE"]; Sys_SetData ss = _sqlSugar.Queryable().First(a => a.Id == hr.ReservationsWebsite); if (ss != null) mark.Text = ss.Name; } //入住时间 if (doc.Range.Bookmarks["CheckIn"] != null) { DateTime dtCheckIn = Convert.ToDateTime(hr.CheckInDate); Bookmark mark = doc.Range.Bookmarks["CheckIn"]; mark.Text = dtCheckIn.Day + " " + dtCheckIn.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckIn.Year + " "; } //退房时间 if (doc.Range.Bookmarks["CheckOut"] != null) { DateTime dtCheckOut = Convert.ToDateTime(hr.CheckOutDate); Bookmark mark = doc.Range.Bookmarks["CheckOut"]; mark.Text = " " + dtCheckOut.Day + " " + dtCheckOut.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckOut.Year; } //日期 if (doc.Range.Bookmarks["DT"] != null) { Bookmark mark = doc.Range.Bookmarks["DT"]; mark.Text = Convert.ToDateTime(hr.CreateTime).ToString("yyyy-MM-dd"); } //名称 if (doc.Range.Bookmarks["VName"] != null) { Bookmark mark = doc.Range.Bookmarks["VName"]; mark.Text = hr.HotelName; } //号码 if (doc.Range.Bookmarks["VOUCHERNO"] != null) { Bookmark mark = doc.Range.Bookmarks["VOUCHERNO"]; mark.Text = hr.CheckNumber; } #endregion strFileName += "VOUCHER.doc"; var fileDir = AppSettingsHelper.Get("WordBasePath") + strFileName; doc.Save(fileDir); string Url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/" + strFileName; return Ok(JsonView(true, "操作成功!", Url)); } else { return Ok(JsonView(false, "酒店确定号码未填写,无法生成Voucher!")); } } else { return Ok(JsonView(false, "该条数据已删除或不存在!")); } } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 酒店预订 /// 确认单 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostHotelReservationsConfirmationSlip(HotelReservationsConfirmationSlipDto _dto) { try { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空")); if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空")); #region 团组操作权限验证 76 酒店预定模块 var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76); if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg)); #endregion PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (pageFunAuthView.FilesDownloadAuth == 0) return Ok(JsonView(false, "您没有文件下载权限!")); #endregion #endregion //团组信息 Grp_DelegationInfo di = _sqlSugar.Queryable().First(a => a.Id == _dto.DiId); //酒店数据 List listhoteldata = await _sqlSugar.Queryable().Where(a => a.DiId == _dto.DiId && a.IsDel == 0).ToListAsync(); if (listhoteldata.Count < 0) { return Ok(JsonView(false, "当前团组暂无酒店预订信息!")); } //利datatable存储 DataTable dt = new DataTable(); dt.Columns.Add("CheckInDate", typeof(string)); dt.Columns.Add("City", typeof(string)); dt.Columns.Add("Hotel", typeof(string)); dt.Columns.Add("Room", typeof(string)); for (int i = 0; i < listhoteldata.Count; i++) { DateTime dayStart = Convert.ToDateTime(listhoteldata[i].CheckInDate); DateTime dayEnd = Convert.ToDateTime(listhoteldata[i].CheckOutDate); while (dayStart < dayEnd) { string temp = ""; DataRow row = dt.NewRow(); row["CheckInDate"] = dayStart.ToString("yyyy-MM-dd"); row["City"] = listhoteldata[i].City; row["Hotel"] = listhoteldata[i].HotelName; if (listhoteldata[i].SingleRoomCount > 0) { temp = listhoteldata[i].SingleRoomCount + "个单间" + "\r\n"; } if (listhoteldata[i].DoubleRoomCount > 0) { temp = temp + listhoteldata[i].DoubleRoomCount + "个标间" + "\r\n"; } if (listhoteldata[i].SuiteRoomCount > 0) { temp = temp + listhoteldata[i].SuiteRoomCount + "个套房" + "\r\n"; } if (listhoteldata[i].OtherRoomCount > 0) { temp = temp + listhoteldata[i].OtherRoomCount + "个其他房型" + "\r\n"; } row["Room"] = temp; dt.Rows.Add(row); dayStart = dayStart.AddDays(1); } } Dictionary dic = new Dictionary(); dic.Add("Dele", di.TeamName); dic.Add("City", di.VisitCountry); //模板路径 string tempPath = AppSettingsHelper.Get("WordBasePath") + "Template/酒店用房确认单-模板.doc"; //载入模板 Aspose.Words.Document doc = new Aspose.Words.Document(tempPath); DocumentBuilder builder = new DocumentBuilder(doc); foreach (var key in dic.Keys) { builder.MoveToBookmark(key); builder.Write(dic[key]); } //获取word里所有表格 NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true); //获取所填表格的序数 Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table; var rowStart = tableOne.Rows[0]; //获取第1行 //循环赋值 for (int i = 0; i < dt.Rows.Count; i++) { builder.MoveToCell(0, i + 1, 0, 0); builder.Write(dt.Rows[i]["CheckInDate"].ToString()); builder.MoveToCell(0, i + 1, 1, 0); builder.Write(dt.Rows[i]["City"].ToString()); builder.MoveToCell(0, i + 1, 2, 0); builder.Write(dt.Rows[i]["Hotel"].ToString()); builder.MoveToCell(0, i + 1, 3, 0); builder.Write(dt.Rows[i]["Room"].ToString()); } //删除多余行 while (tableOne.Rows.Count > dt.Rows.Count + 1) { tableOne.Rows.RemoveAt(dt.Rows.Count + 1); } string strFileName = di.TeamName + "酒店确认单.doc"; doc.Save(AppSettingsHelper.Get("WordBasePath") + "HotelStatement/" + strFileName); string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/HotelStatement/" + strFileName; return Ok(JsonView(true, "成功", url)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } #endregion #region 团组状态 /// /// 团组状态列表 Page /// /// 团组列表请求dto /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostGroupStatusPageList(GroupStatusListDto dto) { if (dto == null) return Ok(JsonView(false, "请输入搜索条件!")); if (dto.PortType == 1 || dto.PortType == 2) // web/Android { string sqlWhere = string.Empty; if (dto.IsSure == 0) //未完成 { sqlWhere += string.Format(@" And IsSure = 0"); } else if (dto.IsSure == 1) //已完成 { sqlWhere += string.Format(@" And IsSure = 1"); } if (!string.IsNullOrEmpty(dto.SearchCriteria)) { string tj = dto.SearchCriteria; sqlWhere += string.Format(@"And (ssd.Name Like '%{0}%' Or TeamName Like '%{1}%' Or ClientName Like '%{2}%' Or ClientName Like '%{3}%' Or su.CnName Like '%{4}%')", tj, tj, tj, tj, tj); } string sql = string.Format(@"Select Row_Number,Id,SalesQuoteNo,TourCode,TeamTypeId, TeamType, TeamLevId,TeamLev,TeamName,ClientName,ClientUnit, VisitDate,VisitDays,VisitPNumber,JietuanOperator,IsSure,CreateTime From ( Select row_number() over(order by gdi.CreateTime Desc) as Row_Number, gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType, ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit, VisitDate,VisitDays,VisitPNumber,su.CnName JietuanOperator,IsSure,gdi.CreateTime From Grp_DelegationInfo gdi Inner Join Sys_SetData ssd On gdi.TeamDid = ssd.Id Inner Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id Left Join Sys_Users su On gdi.JietuanOperator = su.Id Where gdi.IsDel = 0 {0} ) temp ", sqlWhere); RefAsync total = 0;//REF和OUT不支持异步,想要真的异步这是最优解 var _DelegationList = await _sqlSugar.SqlQueryable(sql).ToPageListAsync(dto.PageIndex, dto.PageSize, total);//ToPageAsync return Ok(JsonView(true, "查询成功!", _DelegationList, total)); } else { return Ok(JsonView(false, "查询失败")); } } /// /// 团组状态 /// 设置操作完成 /// /// 团组列表请求dto /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostGroupStatusSetOperationComplete(GroupStatusSetOperationCompleteDto dto) { if (dto == null) return Ok(JsonView(false, "请输入搜索条件!")); Grp_DelegationInfo _DelegationInfo = new Grp_DelegationInfo() { Id = dto.Id, IsSure = 1 }; var result = await _sqlSugar.Updateable(_DelegationInfo) .UpdateColumns(it => new { it.IsSure }) .WhereColumns(it => new { it.Id }) .ExecuteCommandAsync(); if (result > 0) { return Ok(JsonView(true, "操作完成!")); } return Ok(JsonView(false, "操作失败!")); } #endregion #region 保险费用录入 /// /// 根据团组Id查询保险费用列表 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task CustomersByDiId(CustomersByDiIdDto dto) { try { Result groupData = await _customersRep.CustomersByDiId(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 根据保险费用Id查询保险费用详细 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task CustomersById(CustomersByIdDto dto) { try { Result groupData = await _customersRep.CustomersById(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 保险费用录入页面初始化绑定 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task CustomersInitialize(CustomersInitializeDto dto) { try { Result groupData = await _customersRep.CustomersInitialize(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 保险费用操作(Status:1.新增,2.修改) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task OpCustomers(OpCustomersDto dto) { try { Result groupData = await _customersRep.OpCustomers(dto); if (groupData.Code != 0) { return Ok(JsonView(false, groupData.Msg)); } return Ok(JsonView(true, groupData.Msg, groupData.Data)); } catch (Exception ex) { return Ok(JsonView(false, ex.Message)); } } /// /// 保险文件上传 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task UploadCus(IFormFile file) { try { if (file != null) { var fileDir = AppSettingsHelper.Get("GrpFileBasePath"); //文件名称 string projectFileName = file.FileName; //上传的文件的路径 string filePath = ""; if (!Directory.Exists(fileDir)) { Directory.CreateDirectory(fileDir); } //上传的文件的路径 filePath = fileDir + $@"\保险费用文件上传\{projectFileName}"; using (FileStream fs = System.IO.File.Create(filePath)) { file.CopyTo(fs); fs.Flush(); } return Ok(JsonView(true, "上传成功!", projectFileName)); } else { return Ok(JsonView(false, "上传失败!")); } } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 保险删除指定文件 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task DelFileCus(DelFileDto dto) { try { string filePath = ""; var fileDir = AppSettingsHelper.Get("GrpFileBasePath"); // 返回与指定虚拟路径相对应的物理路径即绝对路径 //int id = 0; filePath = fileDir + "/保险费用文件上传/" + dto.fileName; // 删除该文件 try { System.IO.File.Delete(filePath); var result = await _sqlSugar.Updateable().Where(a => a.Id == dto.Id && a.IsDel == 0 && a.Attachment == dto.fileName).SetColumns(a => new Grp_Customers() { Attachment = "", }).ExecuteCommandAsync(); if (result != 0) { return Ok(JsonView(true, "成功!")); } else { return Ok(JsonView(false, "失败!")); } } catch (Exception) { var result = await _sqlSugar.Updateable().Where(a => a.Id == dto.Id && a.IsDel == 0 && a.Attachment == dto.fileName).SetColumns(a => new Grp_Customers() { Attachment = "", }).ExecuteCommandAsync(); if (result != 0) { return Ok(JsonView(true, "成功!")); } else { return Ok(JsonView(false, "失败!")); } } } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } /// /// 保险费用操作(删除) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task DelCustomers(DelBaseDto dto) { try { var res = await _customersRep.SoftDeleteByIdAsync(dto.Id.ToString(), dto.DeleteUserId); if (!res) { return Ok(JsonView(false, "删除失败")); } var resultC = await _sqlSugar.Updateable().Where(a => a.CId == dto.Id && a.IsDel == 0 && a.CTable == 82).SetColumns(a => new Grp_CreditCardPayment() { IsDel = 1, DeleteUserId = dto.DeleteUserId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }).ExecuteCommandAsync(); return Ok(JsonView(true, "删除成功!")); } catch (Exception ex) { return Ok(JsonView(false, "程序错误!")); throw; } } #endregion #region 接团客户名单 PageId 104 /// /// 接团客户名单 /// 迁移数据(慎用!) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostTourClientListChange() { try { _sqlSugar.ChangeDatabase(DBEnum.OA2014DB); //var groupClinetData1 string sql = string.Format($"Select * From DeleClient Where Isdel = 0"); var oldOAClientList = await _sqlSugar.SqlQueryable(sql).Where(it => it.Isdel == 0).ToListAsync(); int updateCount = 0; if (oldOAClientList.Count > 0) { _sqlSugar.ChangeDatabase(DBEnum.OA2023DB); _sqlSugar.BeginTran(); var clientComInfos = _sqlSugar.Queryable().Where(it => it.IsDel == 0).ToList(); var clientInfos = _sqlSugar.Queryable().Where(it => it.IsDel == 0).ToList(); foreach (var item in oldOAClientList) { int comId = 0; string format = "yyyy-MM-dd HH:mm:ss"; string data11 = "1990-01-01 00:00"; var data1 = IsValidDate(item.OPdate, format); if (data1) data11 = item.OPdate; //客户公司验证 if (!string.IsNullOrEmpty(item.Company)) { var clientComInfo = clientComInfos.Where(it => it.CompanyFullName.Equals(item.Company)).FirstOrDefault(); if (clientComInfo == null) // add { var addInfo = new Crm_CustomerCompany() { CompanyAbbreviation = "", CompanyFullName = item.Company, Address = "", PostCodes = "", LastedOpUserId = item.OPer, LastedOpDt = Convert.ToDateTime(data11), CreateUserId = item.OPer, CreateTime = Convert.ToDateTime(data11), IsDel = 0 }; var comId1 = _sqlSugar.Insertable(addInfo).ExecuteReturnIdentity(); if (comId1 > 0) comId = comId1; } else comId = clientComInfo.Id; } //客户人员验证 int clientId = 0; string name = item.LastName + item.Name; if (!string.IsNullOrEmpty(name)) { var clientInfo = clientInfos.Where(it => (it.LastName + it.FirstName).Equals(name)).FirstOrDefault(); if (clientInfo == null) { DateTime? dateTime = null; var isDt = DateTime.TryParse(item.Birthday, out DateTime birthDayDt); if (isDt) dateTime = birthDayDt; var addInfo1 = new Crm_DeleClient() { CrmCompanyId = comId, DiId = -1, LastName = item.LastName, FirstName = item.Name, OldName = "", Pinyin = item.Pinyin, Sex = item.Sex == "男" ? 0 : item.Sex == "女" ? 1 : -1, Marriage = 0, Phone = item.Phone, Job = item.Job, BirthDay = dateTime }; var clientId1 = _sqlSugar.Insertable(addInfo1).ExecuteReturnIdentity(); if (clientId1 > 0) clientId = clientId1; } else clientId = clientInfo.Id; } if (clientId < 1) { continue; } int airType = 0; if (item.AirType == "超经舱") airType = 459; else if (item.AirType == "公务舱") airType = 458; else if (item.AirType == "经济舱") airType = 460; else if (item.AirType == "其他") airType = 565; else if (item.AirType == "头等舱") airType = 457; var _TourClientListEntity = new Grp_TourClientList() { DiId = item.Diid, ClientId = clientId, CreateUserId = item.OPer, CreateTime = Convert.ToDateTime(data11), Remark = item.Remark, IsDel = item.Isdel, ShippingSpaceTypeId = airType, ShippingSpaceSpecialNeeds = item.AirRemark, HotelSpecialNeeds = item.RoomType }; var _TourClientList = _sqlSugar.Insertable(_TourClientListEntity).ExecuteCommand(); if (_TourClientList > 0) { updateCount++; } } _sqlSugar.CommitTran(); } return Ok(JsonView(true, $"更新条数:{updateCount}条")); } catch (Exception ex) { _sqlSugar.RollbackTran(); return Ok(JsonView(false, ex.Message)); } return Ok(JsonView(true)); } private bool IsValidDate(string dateString, string format) { DateTime dateValue; bool valid = DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue); return valid; } /// /// 接团客户名单 /// 根据团组Id查询List /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostTourClientListByDiId(TourClientListByDiIdDto _dto) { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId")); if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId if (_dto.DiId < 1) return Ok(JsonView(false, "请传入有效的DiId!")); PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!")); #endregion #endregion var viewData = await _tourClientListRep._ItemByDiId(_dto.PortType, _dto.DiId); if (viewData.Code != 0) { return Ok(JsonView(false, viewData.Msg)); } return Ok(JsonView(viewData.Data)); } /// /// 接团客户名单 /// 基础数据 Init /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostTourClientListBasicDataInit(TourClientListBasicDataInitDto _dto) { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数")); if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!")); #endregion #endregion var viewData = await _tourClientListRep._BasicDataInit(_dto.PortType); if (viewData.Code != 0) { return Ok(JsonView(false, viewData.Msg)); } return Ok(JsonView(viewData.Data)); } /// /// 接团客户名单 /// 根据 Id查询 Details /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostTourClientListDetails(TourClientListDetailsDto _dto) { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数")); if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId if (_dto.Id < 1) return Ok(JsonView(false, "请传入有效的Id参数!")); PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!")); #endregion #endregion var viewData = await _tourClientListRep._Details(_dto.PortType, _dto.Id); if (viewData.Code != 0) { return Ok(JsonView(false, viewData.Msg)); } return Ok(JsonView(viewData.Data)); } /// /// 接团客户名单 /// Add Or Edit /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostTourClientListAddOrEdit(TourClientListAddOrEditDto _dto) { #region 参数验证 if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数")); if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId if (_dto.Id < 0) return Ok(JsonView(false, "请传入有效的Id参数!")); PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase(); #region 页面操作权限验证 pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId); if (_dto.Id == 0) //添加 { if (pageFunAuthView.AddAuth == 0) return Ok(JsonView(false, "您没有添加权限!")); } else if (_dto.Id >= 0) //修改 { if (pageFunAuthView.EditAuth == 0) return Ok(JsonView(false, "您没有编辑权限!")); } #endregion #endregion var viewData = await _tourClientListRep._AddOrEdit(_dto); if (viewData.Code != 0) { return Ok(JsonView(false, viewData.Msg)); } return Ok(JsonView(true)); } /// /// 接团客户名单 /// AddMultiple(添加多个) /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task 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)); } /// /// 接团客户名单 /// Del /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task 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(true)); } /// /// 接团客户名单 /// 文件下载 客户名单 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task 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 DcList = await _sqlSugar.SqlQueryable(clientSql).ToListAsync(); if (DcList.Count < 0) return Ok(JsonView(false, "该团未录入客户名单!")); //载入模板 string tempPath = AppSettingsHelper.Get("WordBasePath") + "Template/dwon_团组人员列表模板.doc"; if (_dto.Language == 1) { tempPath = AppSettingsHelper.Get("WordBasePath") + "Template/EN_Down_团组人员列表模板.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行 if (_dto.Language == 0) { //循环赋值 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); } } else if (_dto.Language == 1) { List listPEC = _setDataRep.Query(s => s.IsDel == 0).ToList(); List listCEC = _setDataRep.Query(s => s.IsDel == 0).ToList(); //循环赋值 for (int i = 0; i < DcList.Count; i++) { string PY_Last = DcList[i].Pinyin.Split('/')[0]; string PY_First = DcList[i].Pinyin.Split('/')[1]; string PYName = PY_First + " " + PY_Last; builder.MoveToCell(0, i + 1, 0, 0); builder.Write(PYName); string sex = DcList[i].Sex == 0 ? "Male" : DcList[i].Sex == 1 ? "Female" : ""; builder.MoveToCell(0, i + 1, 1, 0); builder.Write(sex); DateTime birthDt; bool b_birth = DateTime.TryParse(DcList[i].BirthDay, out birthDt); string birthday = b_birth ? birthDt.ToString("yyyy-MM-dd") : ""; builder.MoveToCell(0, i + 1, 2, 0); builder.Write(birthday); string company = ""; try { if (!string.IsNullOrEmpty(DcList[i].CompanyFullName.ToString())) { //查询对照表 Res_CompanyEnglishComparison tempCec = listCEC.FirstOrDefault(s => s.zhName.Contains(DcList[i].CompanyFullName.ToString().Trim())); if (tempCec != null) { company = tempCec.enName; } //翻译 else { company = await YouDaoApiTools.GetOCR_ReTrans(DcList[i].CompanyFullName.ToString().Trim()); } } } catch (Exception) { } builder.MoveToCell(0, i + 1, 3, 0); builder.Write(company); string job = ""; try { if (!string.IsNullOrEmpty(DcList[i].Job.ToString())) { //查询对照表 Res_PositionEnglishComparison tempPec = listPEC.FirstOrDefault(s => s.zhName == DcList[i].Job.ToString().Trim()); if (tempPec != null) { job = tempPec.enName; } //翻译 else { job = await YouDaoApiTools.GetOCR_ReTrans(DcList[i].Job.ToString().Trim()); } } } catch (Exception) { } builder.MoveToCell(0, i + 1, 4, 0); builder.Write(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") + "TourClientList/" + fileName; doc.Save(fileDir); string Url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/TourClientList/" + fileName; return Ok(JsonView(true, "操作成功!", Url)); } #endregion #region 团组倒推表 /// /// 倒推表基础数据 /// Init /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostInvertedListInit() { var viewData = await _invertedListRep._Init(); if (viewData.Code != 0) { return Ok(JsonView(false, viewData.Msg)); } return Ok(JsonView(viewData.Data)); } /// /// 倒推表 /// Info /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostInvertedListInfo(InvertedListCreateDto dto) { var viewData = await _invertedListRep._Info(dto.PortType, dto.DiId); if (viewData.Code != 0) { return Ok(JsonView(false, viewData.Msg)); } return Ok(JsonView(viewData.Data)); } /// /// 倒推表 /// Create /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostInvertedListCreate(InvertedListCreateDto dto) { var viewData = await _invertedListRep._Create(dto.PortType, dto.DiId); if (viewData.Code != 0) { return Ok(JsonView(false, viewData.Msg)); } return Ok(JsonView(viewData.Data)); } /// /// 倒推表 /// Update /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostInvertedListUpdate(InvertedListUpdateDto dto) { var viewData = await _invertedListRep._Update(dto); if (viewData.Code != 0) { return Ok(JsonView(false, viewData.Msg)); } return Ok(JsonView(viewData.Data)); } /// /// 倒推表 /// File Download /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostInvertedListFileDownload(InvertedListFileDownloadDto dto) { var info2 = await _invertedListRep._Info(1, dto.DiId); if (info2.Code != 0) { return Ok(JsonView(false, "倒推表数据未生成,请先生成倒退表数据!")); } var info1 = info2.Data as InvertedListInfoView; var info = await _invertedListRep._sqlSugar.Queryable().Where(it => it.Id == dto.DiId).FirstAsync(); string teamName = ""; if (info != null) teamName = info.TeamName; //载入模板 Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/倒退表模板20200617.doc"); DocumentBuilder builder = new DocumentBuilder(doc); //利用键值对存放数据 Dictionary dic = new Dictionary(); dic.Add("TeamName", teamName); dic.Add("StartTime", info1.AirportdDropOffDt.ConvertToDatetime()); //开始时间 dic.Add("BPtime", info1.ApprovalDataDt.ConvertToDatetime()); dic.Add("BPRemark", info1.ApprovalDataRemark); dic.Add("SQtime", info1.ApprovalDt.ConvertToDatetime()); dic.Add("SQRemark", info1.ApprovalRemark); dic.Add("CPJtime", info1.IssueApprovalDt.ConvertToDatetime()); dic.Add("CPJRemark", info1.IssueApprovalRemark); //dic.Add("HZtime", info1.ApplyPassportDt.ConvertToDatetime()); //dic.Add("HZRemark", info1.ApplyPassportRemark); dic.Add("QZtime", info1.VisaInformationDt.ConvertToDatetime()); dic.Add("QZRemark", info1.VisaInformationRemark); dic.Add("SQQZtime", info1.SendVisaDt.ConvertToDatetime()); dic.Add("SQQZRemark", info1.SendVisaRemark); dic.Add("CQtime", info1.IssueVisaDt.ConvertToDatetime()); dic.Add("CQRemark", info1.IssueVisaRemark); dic.Add("XQHtime", info1.PreTripMeetingDt.ConvertToDatetime()); dic.Add("XQHRemark", info1.PreTripMeetingRemark); dic.Add("SJtime", info1.AirportdDropOffDt.ConvertToDatetime()); dic.Add("SJRemark", info1.AirportdDropOffRemark); #region 填充word模板书签内容 foreach (var key in dic.Keys) { builder.MoveToBookmark(key); builder.Write(dic[key]); } #endregion var fileDir = AppSettingsHelper.Get("WordBasePath"); string fileName = $"{teamName}团出行准备流程表.doc"; string filePath = fileDir + $@"InvertedList/{fileName}"; doc.Save(filePath); string Url = $@"{AppSettingsHelper.Get("WordBaseUrl")}Office/Word/InvertedList/{fileName}"; return Ok(JsonView(true, "操作成功!", Url)); } #endregion #region 三公签证费用(签证费、代办费) /// /// 三公签证费用(签证费、代办费) /// List /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostVisaFeeList(VisaFeeListDto _dto) { var _view = await _visaFeeInfoRep._List(_dto.PortType, _dto.DiId); if (_view.Code != 0) { return Ok(JsonView(false, _view.Msg)); } return Ok(JsonView(true, "操作成功!", _view.Data)); } /// /// 三公签证费用(签证费、代办费) /// Add Or Update /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task PostVisaFeeAddAndUpdate(VisaFeeAddAndUpdateDto _dto) { var _view = await _visaFeeInfoRep._AddAndUpdate(_dto); if (_view.Code != 0) { return Ok(JsonView(false, _view.Msg)); } return Ok(JsonView(true, _view.Msg)); } #endregion // /// // /// // /// // /// // /// // [HttpPost] // [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] // public async Task Test_DataChange(PostTourClientListDownloadFile _dto) // { // _airTicketResRep.ChangeDataBase(DBEnum.OA2014DB); // string sql = string.Format(@" Select * From Visa With(Nolock) "); // List list_visa = _airTicketResRep._sqlSugar.SqlQueryable(sql).ToList(); // _airTicketResRep.ChangeDataBase(DBEnum.OA2023DB); // Dictionary dic_psg = new Dictionary(); // dic_psg.Add("客人", 974); // dic_psg.Add("司机", 975); // dic_psg.Add("导游", 976); // dic_psg.Add("公司内部人员", 977); // dic_psg.Add("司机/导游/公司内部人员", 978); // foreach (var item in list_visa) // { // Grp_VisaInfo temp = new Grp_VisaInfo(); // temp.Id = item.Id; // temp.DIId = item.DIId; // temp.VisaClient = item.VisaClient; // temp.VisaPrice = Convert.ToDecimal(item.VisaPrice); // temp.VisaCurrency = item.VisaCurrency; // temp.IsThird = item.IsThird; // if (dic_psg.ContainsKey(item.PassengerType)) // { // temp.PassengerType = dic_psg[item.PassengerType]; // } // else { // temp.PassengerType = -1; // } // temp.VisaNumber = item.VisaNumber; // temp.VisaFreeNumber = item.VisaFreeNumber; // temp.CreateUserId = item.Operators; // DateTime dt_ct; // bool b_ct = DateTime.TryParse(item.OperatorsDate, out dt_ct); // if (b_ct) // { // temp.CreateTime = dt_ct; // } // else // { // temp.CreateTime = DateTime.Now; // } // temp.DeleteTime = ""; // temp.DeleteUserId = 0; // temp.Remark = item.Remark; // if (string.IsNullOrEmpty(temp.Remark)) { // temp.Remark = ""; // } // temp.IsDel = item.IsDel; // temp.VisaDescription = item.VisaAttachment; // string sqlInsert = string.Format(@" INSERT INTO [dbo].[Grp_VisaInfo] //([Id] // ,[DIId] // ,[VisaClient] // ,[VisaPrice] // ,[VisaCurrency] // ,[IsThird] // ,[PassengerType] // ,[VisaNumber] // ,[VisaFreeNumber] // ,[CreateUserId] // ,[CreateTime] // ,[DeleteTime] // ,[DeleteUserId] // ,[Remark] // ,[IsDel] // ,[visaDescription]) // VALUES // ({0},{1},'{2}',{3},{4} //,{5},{6},{7},{8},{9} //,'{10}','{11}',{12},'{13}',{14},'{15}') ",temp.Id,temp.DIId,temp.VisaClient,temp.VisaPrice,temp.VisaCurrency, //temp.IsThird,temp.PassengerType,temp.VisaNumber,temp.VisaNumber,temp.CreateUserId, //temp.CreateTime, temp.DeleteTime, temp.DeleteUserId, temp.Remark,temp.IsDel,temp.VisaDescription //); // await _airTicketResRep.ExecuteCommandAsync(sqlInsert); // } // return Ok(JsonView(true, "操作成功!")); // } /// /// 123132123 /// /// /// [HttpPost] [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)] public async Task Test_DataChange(PostTourClientListDownloadFile _dto) { _airTicketResRep.ChangeDataBase(DBEnum.OA2014DB); string sql = string.Format(@" Select * From Visa With(Nolock) "); List list_visa = _airTicketResRep._sqlSugar.SqlQueryable(sql).ToList(); _airTicketResRep.ChangeDataBase(DBEnum.OA2023DB); foreach (var item in list_visa) { var result = await _grpScheduleRep._sqlSugar.Updateable() .SetColumns(it => it.CreateUserId == item.Operator) .Where(s => s.Id == item.Id) //.UpdateColumns(s => new { s.Duty, s.ExpectBeginDt, s.ExpectEndDt, s.JobContent, s.Remark, s.StepStatus }) .ExecuteCommandAsync(); } return Ok(JsonView(true, "操作成功!")); } } }