|
|
@@ -28,6 +28,7 @@ using OASystem.Domain.Dtos.CRM;
|
|
|
using OASystem.Domain.Dtos.FileDto;
|
|
|
using OASystem.Domain.Dtos.Financial;
|
|
|
using OASystem.Domain.Dtos.Groups;
|
|
|
+using OASystem.Domain.Dtos.System;
|
|
|
using OASystem.Domain.Entities.Customer;
|
|
|
using OASystem.Domain.Entities.Financial;
|
|
|
using OASystem.Domain.Entities.Groups;
|
|
|
@@ -349,7 +350,8 @@ namespace OASystem.API.Controllers
|
|
|
* 获取今天时间往前推5天查询团组c表里有没有费用
|
|
|
*/
|
|
|
var today_startDate = DateTime.Now.Date.AddDays(-daysAgo);
|
|
|
- var today_endDate = DateTime.Now.Date.AddDays(-daysAgo).AddDays(1).AddSeconds(-1);
|
|
|
+ //var today_endDate = DateTime.Now.Date.AddDays(-daysAgo).AddDays(1).AddSeconds(-1);
|
|
|
+ var today_endDate = DateTime.Now.Date.AddDays(1).AddSeconds(-1);
|
|
|
|
|
|
var groupNames = await _sqlSugar.Queryable<Grp_DelegationInfo>()
|
|
|
.Where(di => di.IsDel == 0)
|
|
|
@@ -365,6 +367,7 @@ namespace OASystem.API.Controllers
|
|
|
// 新增条件:不在确认记录表中(排除已确认的团组)
|
|
|
.Where(di => !SqlFunc.Subqueryable<Grp_FeeEntryAcknowledge>()
|
|
|
.Where(ack => ack.GroupId == di.Id && ack.IsDel == 0 && ack.UserId == currUserId)
|
|
|
+ .Where(ack => feeTypeIds.Contains(ack.FeeTypeId))
|
|
|
.Where(ack => ack.IsAcknowledged == AcknowledgeStatusEnum.Acknowledged) // 只排除已确认的记录
|
|
|
.Any())
|
|
|
.Select(di => new
|
|
|
@@ -386,7 +389,7 @@ namespace OASystem.API.Controllers
|
|
|
|
|
|
/// <summary>
|
|
|
/// 提示用户录入团组费用信息
|
|
|
- /// 已知晓确认操作记录(添加)
|
|
|
+ /// 已知晓确认操作记录(添加) 批量
|
|
|
/// </summary>
|
|
|
/// <param name="dto">请求体</param>
|
|
|
/// <returns></returns>
|
|
|
@@ -396,37 +399,26 @@ namespace OASystem.API.Controllers
|
|
|
{
|
|
|
// 1. 参数验证
|
|
|
if (dto?.GroupIds == null || !dto.GroupIds.Any())
|
|
|
- {
|
|
|
return Ok(JsonView(false, "请选择需要确认的团组!"));
|
|
|
- }
|
|
|
|
|
|
if (dto.GroupIds.Count > 100)
|
|
|
- {
|
|
|
return Ok(JsonView(false, "一次性确认团组数量不能超过100个!"));
|
|
|
- }
|
|
|
|
|
|
if (dto.CurrUserId <= 0)
|
|
|
- {
|
|
|
return Ok(JsonView(false, "用户ID无效!"));
|
|
|
- }
|
|
|
|
|
|
- //2. 验证用户存在性
|
|
|
+ // 2. 验证用户存在性
|
|
|
var userInfo = await _sqlSugar.Queryable<Sys_Users>()
|
|
|
.Where(x => x.Id == dto.CurrUserId && x.IsDel == 0)
|
|
|
.Select(x => new { x.Id, x.JobPostId, x.CnName })
|
|
|
.FirstAsync();
|
|
|
|
|
|
if (userInfo == null)
|
|
|
- {
|
|
|
return Ok(JsonView(false, "用户不存在或已被禁用!"));
|
|
|
- }
|
|
|
|
|
|
// 3. 获取费用类型
|
|
|
- var feeTypeIds = new List<int>() { };
|
|
|
- if (_dataInit.TryGetValue(userInfo.JobPostId, out var values))
|
|
|
- {
|
|
|
- feeTypeIds = values;
|
|
|
- }
|
|
|
+ if (!_dataInit.TryGetValue(userInfo.JobPostId, out var feeTypeIds) || feeTypeIds?.Count == 0)
|
|
|
+ return Ok(JsonView(false, "当前用户岗位无对应的费用类型配置!"));
|
|
|
|
|
|
// 4. 验证团组存在性
|
|
|
var validGroupIds = await _sqlSugar.Queryable<Grp_DelegationInfo>()
|
|
|
@@ -435,31 +427,56 @@ namespace OASystem.API.Controllers
|
|
|
.ToListAsync();
|
|
|
|
|
|
if (!validGroupIds.Any())
|
|
|
- {
|
|
|
return Ok(JsonView(false, "未找到有效的团组信息!"));
|
|
|
+
|
|
|
+ // 5. 检查团组费用表中是否存在对应费用类型的数据
|
|
|
+ var existingFeeRecords = await _sqlSugar.Queryable<Grp_CreditCardPayment>()
|
|
|
+ .Where(x => validGroupIds.Contains(x.DIId) && x.IsDel == 0)
|
|
|
+ .Where(x => feeTypeIds.Contains(x.CTable))
|
|
|
+ .Select(x => new { GroupId = x.DIId, FeeTypeId = x.CTable })
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ if (existingFeeRecords.Count > 0)
|
|
|
+ {
|
|
|
+ // 找出有问题的团组和费用类型
|
|
|
+ var problematicGroups = existingFeeRecords
|
|
|
+ .GroupBy(x => x.GroupId)
|
|
|
+ .Select(g => new
|
|
|
+ {
|
|
|
+ GroupId = g.Key,
|
|
|
+ FeeTypeIds = string.Join(",", g.Select(x => x.FeeTypeId).Distinct())
|
|
|
+ })
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var errorMessage = $"以下团组的费用表中已存在费用数据,不可添加确认记录:";
|
|
|
+ foreach (var group in problematicGroups)
|
|
|
+ {
|
|
|
+ errorMessage += $"\n团组 {group.GroupId} - 费用类型ID: [{group.FeeTypeIds}]";
|
|
|
+ }
|
|
|
+
|
|
|
+ return Ok(JsonView(false, errorMessage));
|
|
|
}
|
|
|
|
|
|
- // 5. 检查是否已存在确认记录(避免重复确认)
|
|
|
- var existingRecords = await _sqlSugar.Queryable<Grp_FeeEntryAcknowledge>()
|
|
|
- .Where(x => validGroupIds.Contains(x.GroupId) &&
|
|
|
- x.UserId == dto.CurrUserId &&
|
|
|
- x.IsDel == 0)
|
|
|
+ // 6. 检查是否已存在确认记录(避免重复确认)
|
|
|
+ var existingAcknowledgeRecords = await _sqlSugar.Queryable<Grp_FeeEntryAcknowledge>()
|
|
|
+ .Where(x => x.UserId == dto.CurrUserId && x.IsDel == 0)
|
|
|
+ .Where(x => validGroupIds.Contains(x.GroupId))
|
|
|
+ .Where(x => feeTypeIds.Contains(x.FeeTypeId))
|
|
|
.Select(x => new { x.GroupId, x.FeeTypeId })
|
|
|
.ToListAsync();
|
|
|
|
|
|
- // 6. 准备插入数据(过滤已存在的记录)
|
|
|
- var infos = new List<Grp_FeeEntryAcknowledge>();
|
|
|
+ // 7. 准备插入数据(过滤已存在的记录)
|
|
|
+ var recordsToInsert = new List<Grp_FeeEntryAcknowledge>();
|
|
|
|
|
|
foreach (var groupId in validGroupIds)
|
|
|
{
|
|
|
- // 为每个费用类型创建确认记录
|
|
|
foreach (var feeTypeId in feeTypeIds)
|
|
|
{
|
|
|
// 检查是否已存在相同记录
|
|
|
- var exists = existingRecords.Any(x => x.GroupId == groupId && x.FeeTypeId == feeTypeId);
|
|
|
+ var exists = existingAcknowledgeRecords.Any(x => x.GroupId == groupId && x.FeeTypeId == feeTypeId);
|
|
|
if (!exists)
|
|
|
{
|
|
|
- infos.Add(new Grp_FeeEntryAcknowledge()
|
|
|
+ recordsToInsert.Add(new Grp_FeeEntryAcknowledge()
|
|
|
{
|
|
|
GroupId = groupId,
|
|
|
UserId = dto.CurrUserId,
|
|
|
@@ -469,23 +486,126 @@ namespace OASystem.API.Controllers
|
|
|
AcknowledgeTime = DateTime.Now,
|
|
|
AcknowledgeType = Domain.Enums.AcknowledgeTypeEnum.WebConfirm,
|
|
|
CreateUserId = 4, // 系统创建
|
|
|
+ CreateTime = DateTime.Now
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (!infos.Any())
|
|
|
- {
|
|
|
+ if (!recordsToInsert.Any())
|
|
|
return Ok(JsonView(true, "所选团组已确认,无需重复操作!"));
|
|
|
+
|
|
|
+ // 8. 批量插入数据
|
|
|
+ var successCount = await _sqlSugar.Insertable(recordsToInsert).ExecuteCommandAsync();
|
|
|
+ if (successCount <= 0)
|
|
|
+ return Ok(JsonView(false, "操作失败,未能保存确认记录!"));
|
|
|
+
|
|
|
+ // 9. 记录操作日志
|
|
|
+ _logger.LogInformation("用户 {UserName}(ID:{UserId}) 批量确认了 {GroupCount} 个团组的费用类型,共添加 {RecordCount} 条确认记录",
|
|
|
+ userInfo.CnName, dto.CurrUserId, validGroupIds.Count, successCount);
|
|
|
+
|
|
|
+ // 10. 操作成功 返回成功视图
|
|
|
+ var result = await GetGroupNamesByUserId(dto.CurrUserId,dto.DaysAgo);
|
|
|
+
|
|
|
+ if (result is OkObjectResult okObjectResult)
|
|
|
+ {
|
|
|
+ return Ok(okObjectResult.Value);
|
|
|
}
|
|
|
|
|
|
- // 7. 批量插入数据
|
|
|
- var successCount = await _sqlSugar.Insertable(infos).ExecuteCommandAsync();
|
|
|
- if (successCount < 1)
|
|
|
+ //return Ok(result);
|
|
|
+ return Ok(JsonView(true, $"操作成功!共为 {validGroupIds.Count} 个团组添加了 {successCount} 条确认记录"));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 提示用户录入团组费用信息
|
|
|
+ /// 已知晓确认操作记录(添加) 单个
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto">请求体</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> FeeEntryAcknowledgeSingleCreate(FeeEntryAcknowledgeSingleDto dto)
|
|
|
+ {
|
|
|
+ // 1. 参数验证
|
|
|
+ if (dto.GroupId <= 0)
|
|
|
+ return Ok(JsonView(false, "请选择有效的团组ID!"));
|
|
|
+
|
|
|
+ if (dto.CurrUserId <= 0)
|
|
|
+ return Ok(JsonView(false, "用户ID无效!"));
|
|
|
+
|
|
|
+ // 2. 验证用户存在性
|
|
|
+ var userInfo = await _sqlSugar.Queryable<Sys_Users>()
|
|
|
+ .Where(x => x.Id == dto.CurrUserId && x.IsDel == 0)
|
|
|
+ .Select(x => new { x.Id, x.JobPostId, x.CnName })
|
|
|
+ .FirstAsync();
|
|
|
+
|
|
|
+ if (userInfo == null)
|
|
|
+ return Ok(JsonView(false, "用户不存在或已被禁用!"));
|
|
|
+
|
|
|
+ // 3. 获取费用类型
|
|
|
+ if (!_dataInit.TryGetValue(userInfo.JobPostId, out var feeTypeIds) || feeTypeIds?.Count == 0)
|
|
|
+ return Ok(JsonView(false, "当前用户岗位无对应的费用类型配置!"));
|
|
|
+
|
|
|
+ // 4. 验证团组存在性
|
|
|
+ var groupExists = await _sqlSugar.Queryable<Grp_DelegationInfo>()
|
|
|
+ .AnyAsync(x => x.Id == dto.GroupId && x.IsDel == 0);
|
|
|
+
|
|
|
+ if (!groupExists)
|
|
|
+ return Ok(JsonView(false, "未找到有效的团组信息!"));
|
|
|
+
|
|
|
+ // 5. 检查团组费用表中是否存在对应费用类型的数据
|
|
|
+ var existingFeeRecords = await _sqlSugar.Queryable<Grp_CreditCardPayment>()
|
|
|
+ .Where(x => x.DIId == dto.GroupId && x.IsDel == 0)
|
|
|
+ .Where(x => feeTypeIds.Contains(x.CTable))
|
|
|
+ .Select(x => new { x.CTable })
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ if (existingFeeRecords.Count > 0)
|
|
|
{
|
|
|
- return Ok(JsonView(false, $"操作失败!"));
|
|
|
+ var existingFeeTypeNames = existingFeeRecords.Select(x => x.CTable).Distinct().ToList();
|
|
|
+ return Ok(JsonView(false, $"团组费用表中已存在费用类型ID [{string.Join(",", existingFeeTypeNames)}] 的数据,不可添加确认无费用记录!"));
|
|
|
}
|
|
|
|
|
|
+ // 6. 检查已存在的确认记录
|
|
|
+ var existingAcknowledgeRecords = await _sqlSugar.Queryable<Grp_FeeEntryAcknowledge>()
|
|
|
+ .Where(x => x.UserId == dto.CurrUserId && x.IsDel == 0)
|
|
|
+ .Where(x => x.GroupId == dto.GroupId)
|
|
|
+ .Where(x => feeTypeIds.Contains(x.FeeTypeId))
|
|
|
+ .Select(x => new { x.FeeTypeId })
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var existingAcknowledgeFeeTypeIds = existingAcknowledgeRecords.Select(x => x.FeeTypeId).ToHashSet();
|
|
|
+
|
|
|
+ // 7. 准备插入数据(过滤已存在的记录)
|
|
|
+ var recordsToInsert = feeTypeIds
|
|
|
+ .Where(feeTypeId => !existingAcknowledgeFeeTypeIds.Contains(feeTypeId))
|
|
|
+ .Select(feeTypeId => new Grp_FeeEntryAcknowledge
|
|
|
+ {
|
|
|
+ GroupId = dto.GroupId,
|
|
|
+ UserId = dto.CurrUserId,
|
|
|
+ JobPostId = userInfo.JobPostId,
|
|
|
+ FeeTypeId = feeTypeId,
|
|
|
+ IsAcknowledged = Domain.Enums.AcknowledgeStatusEnum.Acknowledged,
|
|
|
+ AcknowledgeTime = DateTime.Now,
|
|
|
+ AcknowledgeType = Domain.Enums.AcknowledgeTypeEnum.WebConfirm,
|
|
|
+ CreateUserId = 4, // 系统创建
|
|
|
+ CreateTime = DateTime.Now
|
|
|
+ })
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ if (recordsToInsert.Count == 0)
|
|
|
+ return Ok(JsonView(true, "所选团组已确认,无需重复操作!"));
|
|
|
+
|
|
|
+ // 8. 批量插入数据
|
|
|
+ var successCount = await _sqlSugar.Insertable(recordsToInsert).ExecuteCommandAsync();
|
|
|
+
|
|
|
+ if (successCount <= 0)
|
|
|
+ return Ok(JsonView(false, "操作失败,未能保存确认记录!"));
|
|
|
+
|
|
|
+ // 9. 记录操作日志(可选)
|
|
|
+ _logger.LogInformation("用户 {UserName}(ID:{UserId}) 确认了团组 {GroupId} 的费用类型",
|
|
|
+ userInfo.CnName, dto.CurrUserId, dto.GroupId);
|
|
|
+
|
|
|
return Ok(JsonView(true, $"操作成功!"));
|
|
|
}
|
|
|
|
|
|
@@ -1057,108 +1177,167 @@ namespace OASystem.API.Controllers
|
|
|
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
public async Task<IActionResult> PostGroupPageList(GroupPageListDto dto)
|
|
|
{
|
|
|
- #region 参数验证
|
|
|
- if (dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));
|
|
|
- if (dto.PageId < 1) return Ok(JsonView(false, "页面Id为空"));
|
|
|
+ #region 参数验证
|
|
|
+ if (dto.UserId < 1)
|
|
|
+ return Ok(JsonView(false, "员工Id为空"));
|
|
|
+ if (dto.PageId < 1)
|
|
|
+ return Ok(JsonView(false, "页面Id为空"));
|
|
|
|
|
|
#region 页面操作权限验证
|
|
|
var pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(dto.UserId, dto.PageId);
|
|
|
-
|
|
|
- if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限"));
|
|
|
+ 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);
|
|
|
- }
|
|
|
-
|
|
|
- if (int.TryParse(dto.Rank, out int rankId))
|
|
|
- {
|
|
|
- if (rankId > 0) sqlWhere += string.Format("And gdi.TeamLevSId = {0}", rankId);
|
|
|
- }
|
|
|
|
|
|
- string sqlWhere1 = string.Empty;
|
|
|
- if (!string.IsNullOrEmpty(dto.Department) && !dto.Department.Equals("全部"))
|
|
|
- {
|
|
|
- sqlWhere1 = string.Format("Where Department = '{0}'", dto.Department);
|
|
|
- }
|
|
|
+ //if (dto.PortType != 1 && dto.PortType != 2) // web/Android
|
|
|
+ // return Ok(JsonView(false, "不支持的端口类型"));
|
|
|
|
|
|
- string sql = string.Format(@"Select Row_Number,Id,SalesQuoteNo,TourCode,TeamTypeId, TeamType,Department,
|
|
|
- TeamLevId,TeamLev,TeamName,ClientName,ClientUnit,
|
|
|
- VisitDate,VisitDays,VisitPNumber,JietuanOperatorId,
|
|
|
- JietuanOperator,IsSure,CreateTime,IsBid,Step
|
|
|
- From (
|
|
|
- Select row_number() over(order by gdi.VisitStartDate Desc) as Row_Number,
|
|
|
- CASE WHEN gdi.JietuanOperator = 4 OR gdi.JietuanOperator = 21 THEN '国交部'
|
|
|
- ELSE (Select DepName FROM OA2023DB.dbo.Sys_Department WHERE Id = su.DepId) END AS 'Department',
|
|
|
- gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,gdi.Step,
|
|
|
- ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,
|
|
|
- VisitDate,VisitDays,VisitPNumber,JietuanOperator JietuanOperatorId,
|
|
|
- su.CnName JietuanOperator,IsSure,gdi.CreateTime,gdi.IsBid
|
|
|
- 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 {1}", sqlWhere, sqlWhere1);
|
|
|
+ // 构建查询条件
|
|
|
+ var sqlWhereBuilder = new StringBuilder(" WHERE gdi.IsDel = 0");
|
|
|
+ var parameters = new List<SugarParameter>();
|
|
|
|
|
|
- RefAsync<int> total = 0;//REF和OUT不支持异步,想要真的异步这是最优解
|
|
|
- var _DelegationList = await _sqlSugar.SqlQueryable<DelegationListView>(sql).ToPageListAsync(dto.PageIndex, dto.PageSize, total);//ToPageAsync
|
|
|
+ // 完成状态筛选
|
|
|
+ if (dto.IsSure == 0 || dto.IsSure == 1)
|
|
|
+ {
|
|
|
+ sqlWhereBuilder.Append(" AND gdi.IsSure = @IsSure");
|
|
|
+ parameters.Add(new SugarParameter("@IsSure", dto.IsSure));
|
|
|
+ }
|
|
|
|
|
|
- //处理 团组模块实际操作人
|
|
|
- _DelegationList.ForEach(async x =>
|
|
|
- {
|
|
|
+ // 搜索条件
|
|
|
+ if (!string.IsNullOrWhiteSpace(dto.SearchCriteria))
|
|
|
+ {
|
|
|
+ var searchParam = $"%{dto.SearchCriteria.Trim()}%";
|
|
|
+ sqlWhereBuilder.Append(@"
|
|
|
+ AND (ssd.Name LIKE @SearchCriteria
|
|
|
+ OR gdi.TeamName LIKE @SearchCriteria
|
|
|
+ OR gdi.ClientName LIKE @SearchCriteria
|
|
|
+ OR su.CnName LIKE @SearchCriteria)");
|
|
|
+ parameters.Add(new SugarParameter("@SearchCriteria", searchParam));
|
|
|
+ }
|
|
|
|
|
|
- var operators = GeneralMethod.GetGroupModuleOperators(x.Id);
|
|
|
- var operatorNames = new StringBuilder();
|
|
|
- //operatorNames.AppendLine("各模块实际操作人:");
|
|
|
- if (operators.Any())
|
|
|
- {
|
|
|
- operators.ForEach(y =>
|
|
|
- {
|
|
|
+ // 等级筛选
|
|
|
+ if (int.TryParse(dto.Rank, out int rankId) && rankId > 0)
|
|
|
+ {
|
|
|
+ sqlWhereBuilder.Append(" AND gdi.TeamLevSId = @RankId");
|
|
|
+ parameters.Add(new SugarParameter("@RankId", rankId));
|
|
|
+ }
|
|
|
|
|
|
- string label = string.Empty;
|
|
|
- if (y.OperationUsers.Any())
|
|
|
- {
|
|
|
- var users = y.OperationUsers.Select(x => x.UserName).ToList();
|
|
|
- label = string.Join('、', users);
|
|
|
- }
|
|
|
- else label = "暂未指定";
|
|
|
+ // 部门筛选
|
|
|
+ var departmentWhere = string.Empty;
|
|
|
+ if (!string.IsNullOrWhiteSpace(dto.Department) && !dto.Department.Equals("全部"))
|
|
|
+ {
|
|
|
+ departmentWhere = " WHERE Department = @Department";
|
|
|
+ parameters.Add(new SugarParameter("@Department", dto.Department));
|
|
|
+ }
|
|
|
|
|
|
- operatorNames.AppendLine($"{y.CTableName}:{label}");
|
|
|
- operatorNames.AppendLine();
|
|
|
- });
|
|
|
- }
|
|
|
+ // 构建SQL查询
|
|
|
+ string sql = $@"
|
|
|
+ SELECT Row_Number, Id, SalesQuoteNo, TourCode, TeamTypeId, TeamType, Department,
|
|
|
+ TeamLevId, TeamLev, TeamName, ClientName, ClientUnit,
|
|
|
+ VisitDate, VisitDays, VisitPNumber, JietuanOperatorId,
|
|
|
+ JietuanOperator, IsSure, CreateTime, IsBid, Step
|
|
|
+ FROM (
|
|
|
+ SELECT ROW_NUMBER() OVER(ORDER BY gdi.VisitStartDate DESC) AS Row_Number,
|
|
|
+ CASE
|
|
|
+ WHEN gdi.JietuanOperator IN (4, 21) THEN '国交部'
|
|
|
+ ELSE (SELECT DepName FROM OA2023DB.dbo.Sys_Department WHERE Id = su.DepId)
|
|
|
+ END AS 'Department',
|
|
|
+ gdi.Id, SalesQuoteNo, TourCode, ssd.Id AS TeamTypeId, ssd.Name AS TeamType, gdi.Step,
|
|
|
+ ssd1.Id AS TeamLevId, ssd1.Name AS TeamLev, TeamName, ClientName, ClientUnit,
|
|
|
+ VisitDate, VisitDays, VisitPNumber, JietuanOperator AS JietuanOperatorId,
|
|
|
+ su.CnName AS JietuanOperator, IsSure, gdi.CreateTime, gdi.IsBid
|
|
|
+ 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
|
|
|
+ {sqlWhereBuilder}
|
|
|
+ ) temp {departmentWhere}";
|
|
|
|
|
|
- x.OperatorLabel = operatorNames.ToString().TrimEnd('\n', '\r');
|
|
|
- });
|
|
|
+ // 执行分页查询
|
|
|
+ RefAsync<int> total = 0;
|
|
|
+ var delegationList = await _sqlSugar.SqlQueryable<DelegationListView>(sql)
|
|
|
+ .AddParameters(parameters)
|
|
|
+ .ToPageListAsync(dto.PageIndex, dto.PageSize, total);
|
|
|
|
|
|
- var _view = new
|
|
|
+ if (!delegationList.Any())
|
|
|
+ {
|
|
|
+ var emptyView = new
|
|
|
{
|
|
|
PageFuncAuth = pageFunAuthView,
|
|
|
- Data = _DelegationList
|
|
|
+ Data = delegationList
|
|
|
};
|
|
|
- return Ok(JsonView(true, "查询成功!", _view, total));
|
|
|
+ return Ok(JsonView(true, "查询成功,暂无数据", emptyView, total));
|
|
|
}
|
|
|
- else
|
|
|
+
|
|
|
+ // 批量处理团组模块实际操作人和背景颜色设置
|
|
|
+ await ProcessDelegationListData(delegationList);
|
|
|
+
|
|
|
+ var resultView = new
|
|
|
{
|
|
|
- return Ok(JsonView(false, "查询失败"));
|
|
|
- }
|
|
|
+ PageFuncAuth = pageFunAuthView,
|
|
|
+ Data = delegationList
|
|
|
+ };
|
|
|
+
|
|
|
+ return Ok(JsonView(true, "查询成功!", resultView, total));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 批量处理团组数据
|
|
|
+ /// </summary>
|
|
|
+ private async Task ProcessDelegationListData(List<DelegationListView> delegationList)
|
|
|
+ {
|
|
|
+ var groupIds = delegationList.Select(x => x.Id).ToList();
|
|
|
+
|
|
|
+ // 批量查询信用卡支付记录
|
|
|
+ var creditCardPayments = await _sqlSugar.Queryable<Grp_CreditCardPayment>()
|
|
|
+ .Where(y => groupIds.Contains(y.DIId) && y.IsDel == 0)
|
|
|
+ .Select(y => y.DIId)
|
|
|
+ .Distinct()
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ // 批量查询费用确认记录
|
|
|
+ var feeAcknowledgements = await _sqlSugar.Queryable<Grp_FeeEntryAcknowledge>()
|
|
|
+ .Where(y => groupIds.Contains(y.GroupId) && y.IsDel == 0)
|
|
|
+ .Where(y => y.IsAcknowledged == AcknowledgeStatusEnum.Acknowledged)
|
|
|
+ .Select(y => y.GroupId)
|
|
|
+ .Distinct()
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var creditCardPaymentSet = creditCardPayments.ToHashSet();
|
|
|
+ var feeAcknowledgementSet = feeAcknowledgements.ToHashSet();
|
|
|
+
|
|
|
+ // 并行处理每个团组
|
|
|
+ var tasks = delegationList.Select(async x =>
|
|
|
+ {
|
|
|
+ // 处理团组模块实际操作人
|
|
|
+ var operators = GeneralMethod.GetGroupModuleOperators(x.Id);
|
|
|
+ var operatorNames = new StringBuilder();
|
|
|
+
|
|
|
+ if (operators.Any())
|
|
|
+ {
|
|
|
+ foreach (var operatorInfo in operators)
|
|
|
+ {
|
|
|
+ string label = operatorInfo.OperationUsers.Any()
|
|
|
+ ? string.Join('、', operatorInfo.OperationUsers.Select(u => u.UserName))
|
|
|
+ : "暂未指定";
|
|
|
+
|
|
|
+ operatorNames.AppendLine($"{operatorInfo.CTableName}:{label}");
|
|
|
+ operatorNames.AppendLine();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ x.OperatorLabel = operatorNames.ToString().TrimEnd('\n', '\r');
|
|
|
+
|
|
|
+ // 设置背景颜色为红色
|
|
|
+ // C表没数据并且没点提醒确认按钮(无成本费用按钮)的团组该行显示红色
|
|
|
+ bool hasCreditCardPayment = creditCardPaymentSet.Contains(x.Id);
|
|
|
+ bool hasFeeAcknowledgement = feeAcknowledgementSet.Contains(x.Id);
|
|
|
+
|
|
|
+ x.UseRedBackground = !hasCreditCardPayment && !hasFeeAcknowledgement;
|
|
|
+ });
|
|
|
+
|
|
|
+ await Task.WhenAll(tasks);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -8872,46 +9051,55 @@ FROM
|
|
|
dic.Add("Row1Str", row1);
|
|
|
}
|
|
|
|
|
|
- string airTotalStr = string.Empty,
|
|
|
- airPriceStr = string.Empty;
|
|
|
+ var airTotalStr = new StringBuilder();
|
|
|
+ var airPriceStr = new StringBuilder();
|
|
|
//经济舱
|
|
|
if (_EnterExitCosts.SumJJC == 1)
|
|
|
{
|
|
|
- airTotalStr += $"{_EnterExitCosts.OutsideJJPay:#0.00}元/人(经济舱)";
|
|
|
- airPriceStr += $"{_EnterExitCosts.AirJJ:#0.00}元/人(经济舱)";
|
|
|
+ airTotalStr.Append($"{_EnterExitCosts.OutsideJJPay:#0.00}元/人(经济舱)");
|
|
|
+ airPriceStr.Append($"{_EnterExitCosts.AirJJ:#0.00}元/人(经济舱)");
|
|
|
}
|
|
|
//公务舱
|
|
|
if (_EnterExitCosts.SumGWC == 1)
|
|
|
{
|
|
|
- airTotalStr += $" {_EnterExitCosts.OutsideGWPay:#0.00} 元/人(公务舱)";
|
|
|
- airPriceStr += $" {_EnterExitCosts.AirGW:#0.00} 元/人(公务舱)";
|
|
|
+ airTotalStr.Append($"{_EnterExitCosts.OutsideGWPay:#0.00} 元/人(公务舱)");
|
|
|
+ airPriceStr.Append($"{_EnterExitCosts.AirGW:#0.00} 元/人(公务舱)");
|
|
|
}
|
|
|
//头等舱
|
|
|
if (_EnterExitCosts.SumTDC == 1)
|
|
|
{
|
|
|
- airTotalStr += $" {_EnterExitCosts.OutsideTDPay:#0.00} 元/人(头等舱)";
|
|
|
- airPriceStr += $" {_EnterExitCosts.AirTD:#0.00} 元/人(头等舱)";
|
|
|
+ airTotalStr.Append($"{_EnterExitCosts.OutsideTDPay:#0.00} 元/人(头等舱)");
|
|
|
+ airPriceStr.Append($"{_EnterExitCosts.AirTD:#0.00} 元/人(头等舱)");
|
|
|
}
|
|
|
|
|
|
+ //描述
|
|
|
+ var remarkLable = new StringBuilder();
|
|
|
+ //第二项描述
|
|
|
+ remarkLable.Append("备注:");
|
|
|
+ if (!string.IsNullOrEmpty(_EnterExitCosts.TwoItemRemark)) remarkLable.Append( _EnterExitCosts.TwoItemRemark);
|
|
|
+
|
|
|
//汇率描述
|
|
|
- string rateStr = "";
|
|
|
if (peiceItemCurrencyInfos.Any())
|
|
|
{
|
|
|
- rateStr = "\r\n汇率描述:";
|
|
|
+ remarkLable.AppendLine();
|
|
|
+ remarkLable.Append("汇率描述:");
|
|
|
foreach (var item in peiceItemCurrencyInfos)
|
|
|
{
|
|
|
- rateStr += $"{item.CurrencyName}({item.CurrencyCode}):{item.Rate:#0.0000} ";
|
|
|
+ remarkLable.Append($"{item.CurrencyName}({item.CurrencyCode}):{item.Rate:#0.0000} ");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- string twoItemRemark = "备注:";
|
|
|
- if (!string.IsNullOrEmpty(_EnterExitCosts.TwoItemRemark)) twoItemRemark += _EnterExitCosts.TwoItemRemark;
|
|
|
- if (!string.IsNullOrEmpty(rateStr)) twoItemRemark += rateStr;
|
|
|
+ //城市交通费 处理
|
|
|
+ var cityTrafficLabel = new StringBuilder()
|
|
|
+ .AppendFormat(" 经济舱:{0:#0.00} 元/人", _EnterExitCosts.CityTranffic)
|
|
|
+ .AppendFormat(" 公务舱:{0:#0.00} 元/人", _EnterExitCosts.CityTranffic1)
|
|
|
+ .AppendFormat(" 头等舱:{0:#0.00} 元/人", _EnterExitCosts.CityTranffic2)
|
|
|
+ .ToString();
|
|
|
|
|
|
- dic.Add("AirTotalStr", airTotalStr);
|
|
|
- dic.Add("AirPriceStr", airPriceStr);
|
|
|
- dic.Add("CityTranffic", _EnterExitCosts.CityTranffic.ToString("#0.00"));
|
|
|
- dic.Add("TwoItemRemark", twoItemRemark);
|
|
|
+ dic.Add("AirTotalStr", airTotalStr.ToString());
|
|
|
+ dic.Add("AirPriceStr", airPriceStr.ToString());
|
|
|
+ dic.Add("CityTranffic", cityTrafficLabel);
|
|
|
+ dic.Add("TwoItemRemark", remarkLable.ToString());
|
|
|
|
|
|
NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);
|
|
|
Aspose.Words.Tables.Table table1 = allTables[0] as Aspose.Words.Tables.Table;
|
|
|
@@ -9412,7 +9600,13 @@ FROM
|
|
|
table1.Rows.RemoveAt(i - 1);
|
|
|
}
|
|
|
|
|
|
- dic.Add("CityTranffic", _EnterExitCosts.CityTranffic.ToString("#0.00"));
|
|
|
+ var cityTrafficLabel = new StringBuilder()
|
|
|
+ .AppendFormat(" 经济舱:{0:#0.00} 元", _EnterExitCosts.CityTranffic)
|
|
|
+ .AppendFormat(" 公务舱:{0:#0.00} 元", _EnterExitCosts.CityTranffic1)
|
|
|
+ .AppendFormat(" 头等舱:{0:#0.00} ", _EnterExitCosts.CityTranffic2)
|
|
|
+ .ToString();
|
|
|
+
|
|
|
+ dic.Add("CityTranffic", cityTrafficLabel);
|
|
|
|
|
|
string otherFeeStr = "";
|
|
|
if (_EnterExitCosts.Visa > 0) otherFeeStr += $"签证费:{_EnterExitCosts.Visa:#0.00} 元,";
|
|
|
@@ -9428,7 +9622,6 @@ FROM
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
-
|
|
|
if (otherFeeStr.Length > 0)
|
|
|
{
|
|
|
otherFeeStr = otherFeeStr.Substring(0, otherFeeStr.Length - 1);
|
|
|
@@ -9644,8 +9837,17 @@ FROM
|
|
|
|
|
|
designer.SetDataSource("dac1totalPrice", dac1totalPrice.ToString("#0.00"));
|
|
|
designer.SetDataSource("dac2totalPrice", dac2totalPrice);
|
|
|
- designer.SetDataSource("cityTranffic", @$"其中:国外城市间机票费: {_EnterExitCosts.CityTranffic:#0.00} 元");
|
|
|
- designer.SetDataSource("sumCityTranffic", @$"{_EnterExitCosts.CityTranffic:#0.00} ");
|
|
|
+
|
|
|
+ var cityTrafficLabel = new StringBuilder()
|
|
|
+ .AppendFormat(" 其中:国外城市间")
|
|
|
+ .AppendFormat(" 经济舱费:{0:#0.00} 元、", _EnterExitCosts.CityTranffic)
|
|
|
+ .AppendFormat(" 公务舱费:{0:#0.00} 元、", _EnterExitCosts.CityTranffic1)
|
|
|
+ .AppendFormat(" 头等舱费:{0:#0.00} 元", _EnterExitCosts.CityTranffic2)
|
|
|
+ .ToString();
|
|
|
+
|
|
|
+ //decimal cityTraffic =_EnterExitCosts.CityTranffic + _EnterExitCosts.CityTranffic1 + _EnterExitCosts.CityTranffic2;
|
|
|
+ designer.SetDataSource("cityTranffic", cityTrafficLabel);
|
|
|
+ // designer.SetDataSource("sumCityTranffic", @$"{cityTraffic:#0.00} ");
|
|
|
|
|
|
string cell4Str1 = string.Empty;
|
|
|
if (_EnterExitCosts.SumJJC == 1) cell4Str1 += $"经济舱:{_EnterExitCosts.AirJJ:#0.00} 元/人;";
|
|
|
@@ -9859,14 +10061,20 @@ FROM
|
|
|
|
|
|
decimal hotelFeeTotal = dac1.Sum(it => it.SubTotal);//住宿费
|
|
|
dic.Add("HotelFeeTotal", hotelFeeTotal.ToString("#0.00"));
|
|
|
+
|
|
|
decimal mealsFeeTotal = dac2.Sum(it => it.SubTotal);//伙食费
|
|
|
dic.Add("MealsFeeTotal", mealsFeeTotal.ToString("#0.00"));
|
|
|
+
|
|
|
decimal miscellaneousFeeTotal = dac3.Sum(it => it.SubTotal);//公杂费
|
|
|
dic.Add("MiscellaneousFeeTotal", miscellaneousFeeTotal.ToString("#0.00"));
|
|
|
+
|
|
|
decimal trainingFeeTotal = dac4.Sum(it => it.SubTotal);//培训费
|
|
|
dic.Add("TrainingFeeTotal", trainingFeeTotal.ToString("#0.00"));
|
|
|
- decimal cityTranfficFeeToatal = _EnterExitCosts.CityTranffic; //城市区间交通费
|
|
|
- dic.Add("CityTranfficFeeToatal", cityTranfficFeeToatal.ToString("#0.00"));//
|
|
|
+
|
|
|
+ //decimal cityTranfficFeeToatal = _EnterExitCosts.CityTranffic; //城市区间交通费
|
|
|
+ decimal cityTranfficFeeToatal = 0.00M;
|
|
|
+ //dic.Add("CityTranfficFeeToatal", cityTranfficFeeToatal.ToString("#0.00"));
|
|
|
+
|
|
|
//其他费用
|
|
|
decimal otherFeeTotal = _EnterExitCosts.Visa + _EnterExitCosts.Safe + _EnterExitCosts.Ticket + _EnterExitCosts.YiMiao + _EnterExitCosts.HeSuan + _EnterExitCosts.Service + dac5.Sum(x => x.SubTotal);
|
|
|
dic.Add("OtherFeeTotal", otherFeeTotal.ToString("#0.00"));
|
|
|
@@ -9874,8 +10082,8 @@ FROM
|
|
|
//其他费用合计
|
|
|
decimal _otherFeeTotal = hotelFeeTotal + mealsFeeTotal + miscellaneousFeeTotal + trainingFeeTotal + cityTranfficFeeToatal + otherFeeTotal;
|
|
|
|
|
|
- decimal _jjcFeeToatal = _EnterExitCosts.AirJJ + _otherFeeTotal; //经济舱
|
|
|
- decimal _gwcFeeToatal = _EnterExitCosts.AirGW + _otherFeeTotal; //公务舱
|
|
|
+ decimal _jjcFeeToatal = _EnterExitCosts.OutsideJJPay + _otherFeeTotal; //经济舱
|
|
|
+ decimal _gwcFeeToatal = _EnterExitCosts.OutsideGWPay + _otherFeeTotal; //公务舱
|
|
|
|
|
|
//公务舱合计
|
|
|
|
|
|
@@ -9885,18 +10093,18 @@ FROM
|
|
|
//string allPriceJJ = "";
|
|
|
if (_EnterExitCosts.SumJJC == 1 && _EnterExitCosts.SumGWC == 0)
|
|
|
{
|
|
|
- dic.Add("AirFeeTotal", _EnterExitCosts.AirJJ.ToString("#0.00"));
|
|
|
+ dic.Add("AirFeeTotal", _EnterExitCosts.OutsideJJPay.ToString("#0.00"));
|
|
|
dic.Add("FeeTotal", _jjcFeeToatal.ToString("#0.00"));
|
|
|
}
|
|
|
if (_EnterExitCosts.SumGWC == 1 && _EnterExitCosts.SumJJC == 0)
|
|
|
{
|
|
|
- dic.Add("AirFeeTotal", _EnterExitCosts.AirGW.ToString("#0.00"));
|
|
|
+ dic.Add("AirFeeTotal", _EnterExitCosts.OutsideGWPay.ToString("#0.00"));
|
|
|
dic.Add("FeeTotal", _gwcFeeToatal.ToString("#0.00"));
|
|
|
}
|
|
|
|
|
|
if (_EnterExitCosts.SumJJC == 1 && _EnterExitCosts.SumGWC == 1)
|
|
|
{
|
|
|
- string airFeeTotalStr = string.Format(@$"经济舱:{_EnterExitCosts.AirJJ:#0.00} 公务舱:{_EnterExitCosts.AirGW:#0.00}");
|
|
|
+ string airFeeTotalStr = string.Format(@$"经济舱:{_EnterExitCosts.OutsideJJPay:#0.00} 公务舱:{_EnterExitCosts.OutsideGWPay:#0.00}");
|
|
|
dic.Add("AirFeeTotal", airFeeTotalStr);
|
|
|
string feeTotalStr = string.Format(@$"经济舱:{_jjcFeeToatal:#0.00} 公务舱:{_gwcFeeToatal:#0.00}");
|
|
|
dic.Add("FeeTotal", feeTotalStr);
|
|
|
@@ -10138,7 +10346,13 @@ FROM
|
|
|
// }
|
|
|
//}
|
|
|
|
|
|
- dic.Add("CityTranffic", _EnterExitCosts.CityTranffic.ToString("#0.00"));
|
|
|
+ var citytrafficLable = new StringBuilder()
|
|
|
+ .AppendFormat($"经济舱费用:{_EnterExitCosts.CityTranffic:#0.00} 元、")
|
|
|
+ .AppendFormat($"公务舱费用:{_EnterExitCosts.CityTranffic1:#0.00}元、")
|
|
|
+ .AppendFormat($"头等舱费用:{_EnterExitCosts.CityTranffic2:#0.00}")
|
|
|
+ .ToString();
|
|
|
+
|
|
|
+ dic.Add("CityTranffic", citytrafficLable);
|
|
|
|
|
|
string otherFeeStr = "";
|
|
|
if (_EnterExitCosts.Visa > 0) otherFeeStr += $"签证费:{_EnterExitCosts.Visa:#0.00}元,";
|
|
|
@@ -12616,6 +12830,8 @@ FROM
|
|
|
AirGW = eecInfo.AirGW,
|
|
|
AirTD = eecInfo.AirTD,
|
|
|
CityTranffic = eecInfo.CityTranffic,
|
|
|
+ CityTranffic1 = eecInfo.CityTranffic1,
|
|
|
+ CityTranffic2 = eecInfo.CityTranffic2,
|
|
|
TwoItemRemark = eecInfo.TwoItemRemark
|
|
|
};
|
|
|
return Ok(JsonView(twoData));
|
|
|
@@ -13229,6 +13445,8 @@ FROM
|
|
|
info.AirGW = dto.AirGW;
|
|
|
info.AirTD = dto.AirTD;
|
|
|
info.CityTranffic = dto.CityTranffic;
|
|
|
+ info.CityTranffic1 = dto.CityTranffic1;
|
|
|
+ info.CityTranffic2 = dto.CityTranffic2;
|
|
|
info.TwoItemRemark = dto.TwoItemRemark;
|
|
|
info.SumJJC = dto.ChoiceTwoJJ;
|
|
|
info.SumGWC = dto.ChoiceTwoGW;
|
|
|
@@ -13266,6 +13484,8 @@ FROM
|
|
|
x.AirGW,
|
|
|
x.AirTD,
|
|
|
x.CityTranffic,
|
|
|
+ x.CityTranffic1,
|
|
|
+ x.CityTranffic2,
|
|
|
x.TwoItemRemark,
|
|
|
x.LastUpdateTime,
|
|
|
x.LastUpdateUserId
|
|
|
@@ -13276,8 +13496,8 @@ FROM
|
|
|
}
|
|
|
|
|
|
jjcItemTotal = info.AirJJ + info.CityTranffic;
|
|
|
- gwcItemTotal = info.AirGW + info.CityTranffic;
|
|
|
- tdcItemTotal = info.AirTD + info.CityTranffic;
|
|
|
+ gwcItemTotal = info.AirGW + info.CityTranffic1;
|
|
|
+ tdcItemTotal = info.AirTD + info.CityTranffic2;
|
|
|
|
|
|
//消息通知
|
|
|
//await EnterExitCostMobileOpNotice(dto.DiId, id, dto.CurrUserId);
|
|
|
@@ -15145,7 +15365,6 @@ FROM
|
|
|
eecRates.Insert(0, new CurrencyInfo() { CurrencyCode = "CNY", CurrencyName = "人民币", Rate = 1.00000M });
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//处理团组人数
|
|
|
int pplNum = 1;
|
|
|
if (groupInfo != null) pplNum = groupInfo.VisitPNumber;
|
|
|
@@ -15210,7 +15429,7 @@ FROM
|
|
|
{
|
|
|
ItemId = 1354,
|
|
|
Index = intTravelIndex,
|
|
|
- FeeName = "城市间交通费用",
|
|
|
+ FeeName = "城市间交通费用(经济舱)",
|
|
|
UnitPrice = infoView.CityTranffic,
|
|
|
Currency = "CNY",
|
|
|
Quantity = 1,
|
|
|
@@ -15219,6 +15438,32 @@ FROM
|
|
|
Remark = "",
|
|
|
});
|
|
|
|
|
|
+ intTravelCosts.Add(new QuoteSubItemInfo
|
|
|
+ {
|
|
|
+ ItemId = 1354,
|
|
|
+ Index = intTravelIndex,
|
|
|
+ FeeName = "城市间交通费用(公务舱)",
|
|
|
+ UnitPrice = infoView.CityTranffic1,
|
|
|
+ Currency = "CNY",
|
|
|
+ Quantity = 1,
|
|
|
+ PplNum = pplNum,
|
|
|
+ TotalAmt = infoView.CityTranffic1 * pplNum,
|
|
|
+ Remark = "",
|
|
|
+ });
|
|
|
+
|
|
|
+ intTravelCosts.Add(new QuoteSubItemInfo
|
|
|
+ {
|
|
|
+ ItemId = 1354,
|
|
|
+ Index = intTravelIndex,
|
|
|
+ FeeName = "城市间交通费用(头等舱)",
|
|
|
+ UnitPrice = infoView.CityTranffic2,
|
|
|
+ Currency = "CNY",
|
|
|
+ Quantity = 1,
|
|
|
+ PplNum = pplNum,
|
|
|
+ TotalAmt = infoView.CityTranffic2 * pplNum,
|
|
|
+ Remark = "",
|
|
|
+ });
|
|
|
+
|
|
|
views.AddRange(intTravelCosts);
|
|
|
#endregion
|
|
|
|
|
|
@@ -15456,7 +15701,6 @@ FROM
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
return Ok(JsonView(result));
|
|
|
}
|
|
|
|