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;
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;
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)
{
_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;
}
#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);
}
}
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();
/*
* Label = 98 其他款项
*/
List _DecreasePayments = 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();
/*
* 98 机票预定
*/
List _AirTicketReservations = 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();
/*
* 币种信息
*/
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 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;
}
_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;
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, "程序错误!"));
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)
{
if (item.BankType == "其他")
{
item.BankNo = "--";
}
else
{
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, "程序错误!"));
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)
{
try
{
var res = await _decreasePaymentsRep.SoftDeleteByIdAsync(dto.Id.ToString(), dto.DeleteUserId);
if (!res)
{
var result = await _sqlSugar.Updateable().Where(a => a.CId == dto.Id && a.CTable == 98).SetColumns(a => new Grp_CreditCardPayment()
{
IsDel = 1,
DeleteUserId = dto.DeleteUserId,
DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
}).ExecuteCommandAsync();
return Ok(JsonView(false, "删除失败"));
}
return Ok(JsonView(true, "删除成功!"));
}
catch (Exception ex)
{
return Ok(JsonView(false, "程序错误!"));
throw;
}
}
///
/// 根据团组增减款项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;
}
}
///
/// 团组模块 - 出入境费用 - 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();
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.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(placeData.Find(it => it.Id == dac.NationalTravelFeeId)?.Country ?? "Unknown");
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(placeData.Find(it => it.Id == dac.NationalTravelFeeId)?.Country ?? "Unknown");
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";
//文件流下载
//byte[] bytes = null;
//using (MemoryStream stream = new MemoryStream())
//{
// doc.Save(stream, Aspose.Words.SaveFormat.Doc);
// bytes = stream.ToArray();
//}
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(placeData.Find(it => it.Id == dac.NationalTravelFeeId)?.Country ?? "Unknown");//城市
builder.MoveToCell(0, accommodationStartIndex, 2, 0);
string currency = _CurrDatas.Find(it => it.Id == dac.Currency)?.Name ?? "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.CurrencyCode.Equals(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 += 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(placeData.Find(it => it.Id == dac.NationalTravelFeeId)?.Country ?? "Unknown");//城市
builder.MoveToCell(0, foodandotherStartIndex, 2, 0);
string currency = _CurrDatas.Find(it => it.Id == dac.Currency)?.Name ?? "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.CurrencyCode.Equals(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 += 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"));
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(float)},
new DataColumn(){ ColumnName = "rate", DataType = typeof(decimal) },
new DataColumn(){ ColumnName = "costRMB"},
});
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(float)},
new DataColumn(){ ColumnName = "rate", DataType = typeof(decimal) },
new DataColumn(){ ColumnName = "costRMB"},
});
dtdac1.TableName = "tb1";
dtdac2.TableName = "tb2";
decimal dac1totalPrice = 0.00M, dac2totalPrice = 0.00M;
foreach (var item in dac1)
{
item.Place = placeData.Find(it => it.Id == item.NationalTravelFeeId)?.Country ?? "Unknown";
if (place.Contains(item.Place))
{
continue;
}
DataRow row = dtdac1.NewRow();
row["city"] = placeData.Find(it => it.Id == item.NationalTravelFeeId)?.Country ?? "Unknown";
string currency = _CurrDatas.Find(it => it.Id == item.Currency)?.Name ?? "Unknwon";
decimal rate = rateDatas.Find(it => it.CurrencyCode == currency)?.Rate ?? 0.00M;
row["curr"] = currency;
row["rate"] = rate;
row["criterion"] = item.Cost;
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 = placeData.Find(it => it.Id == item.NationalTravelFeeId)?.Country ?? "Unknown";
if (place.Contains(item.Place))
{
continue;
}
DataRow row = dtdac2.NewRow();
row["city"] = item.Place;
string currency = _CurrDatas.Find(it => it.Id == item.Currency)?.Name ?? "Unknwon";
decimal rate = rateDatas.Find(it => it.CurrencyCode == currency)?.Rate ?? 0.00M;
row["curr"] = currency;
row["rate"] = rate;
row["criterion"] = item.Cost;
row["number"] = 1;
row["day"] = dac2.FindAll(x => x.Place == item.Place).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);
string cell4Str = $" 4.国际旅费:经济舱:{_EnterExitCosts.OutsideJJPay.ToString("#0.00")}元,公务舱:{_EnterExitCosts.OutsaideGWPay.ToString("#0.00")}元";
string cellStr = $" 5.其他费用(签证费:{_EnterExitCosts.Visa.ToString("#0.00")}元,保险费 :{_EnterExitCosts.Safe.ToString("#0.00")}元)";
decimal s = dac1totalPrice + dac2totalPrice + _EnterExitCosts.OutsideJJPay + _EnterExitCosts.OutsaideGWPay + _EnterExitCosts.Visa + _EnterExitCosts.Safe;
string celllastStr = $" 经审核,住宿费 {dac1totalPrice.ToString("#0.00")} 元,伙食费和公杂费 {dac2totalPrice.ToString(".00")} 元,培训费 元,国际旅费 {(_EnterExitCosts.OutsideJJPay + _EnterExitCosts.OutsaideGWPay).ToString("#0.00")} 元,其他费用 {(_EnterExitCosts.Visa + _EnterExitCosts.Safe).ToString("#0.00")} 元,本次出国经费预算合计为 {s.ToString("#0.00")} 元。其中:市本级安排 。";
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.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);
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);
var Names = string.Join("、", DeleClientList.Select(x => x.Name)).TrimEnd('、');
dic.Add("Names", Names);
int accommodationStartIndex = 6;
int foodandotherStartIndex = 19;//
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;
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(placeData.Find(it => it.Id == dac.NationalTravelFeeId)?.Country ?? "Unknown");//城市
builder.MoveToCell(0, accommodationStartIndex, 2, 0);
string currency = _CurrDatas.Find(it => it.Id == dac.Currency)?.Name ?? "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.CurrencyCode == 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());
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(placeData.Find(it => it.Id == dac.NationalTravelFeeId)?.Country ?? "Unknown");//城市
builder.MoveToCell(0, foodandotherStartIndex, 2, 0);
string currency = _CurrDatas.Find(it => it.Id == dac.Currency)?.Name ?? "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.CurrencyCode == currency)?.Rate ?? 0.00M;
builder.Write(rate.ToString());//汇率
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());
//删除空行
if (dac1.Count < accommodationRows)
{
int nullRow = accommodationRows - dac1.Count;
}
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";
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));
}
}
///
/// 团组模块 - 出入境费用 - 明细表导出
///
///
[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