|
|
@@ -10907,10 +10907,21 @@ FROM
|
|
|
var clientNameList = GetSimplClientList(_dto.DiId);
|
|
|
|
|
|
#region 费用清单
|
|
|
+ // 传入审核状态
|
|
|
+ int auditStatus = _dto.AuditStatus;
|
|
|
+ // 审核通过 包含 手动审核通过、自动审核通过
|
|
|
+ int approvedStatus = 1;
|
|
|
+ // 全部状态 包含 审核通过、审核不通过、待审核
|
|
|
+ int allStatus = -1;
|
|
|
+ // 审核通过的审核类型Id列表(IsAuditGM字段值列表)
|
|
|
+ var approvedAuditIds = new List<int>() { 1, 3 };
|
|
|
+
|
|
|
var exp = Expressionable.Create<Grp_CreditCardPayment>();
|
|
|
- exp.AndIF(_dto.AuditStatus != -1, it => it.IsAuditGM == _dto.AuditStatus);
|
|
|
exp.AndIF(_dto.Label != -1, it => it.CTable == _dto.Label);
|
|
|
|
|
|
+ if (auditStatus == approvedStatus) exp.And(it => approvedAuditIds.Contains(it.IsAuditGM));
|
|
|
+ else if (auditStatus != allStatus) exp.And(it => it.IsAuditGM == auditStatus);
|
|
|
+
|
|
|
var entityList = _groupRepository.Query<Grp_CreditCardPayment>(s => s.DIId == _dto.DiId && s.IsDel == 0 && s.CreateUserId > 0).Where(exp.ToExpression()).ToList();
|
|
|
|
|
|
var detailList = new List<Grp_CreditCardPaymentDetailView>();
|
|
|
@@ -11155,8 +11166,6 @@ FROM
|
|
|
checkOut = Convert.ToDateTime(hotelReservations.CheckOutDate);
|
|
|
int hotel_days = (int)(checkOut - checkIn).TotalDays;
|
|
|
|
|
|
-
|
|
|
-
|
|
|
string roomFeeStr = "", roomFeestr1 = "";
|
|
|
|
|
|
//是否比较房型价格
|
|
|
@@ -11784,6 +11793,13 @@ FROM
|
|
|
_view.TotalStr4 = $"{auditedFundsStr[..^1]}<br/>{unAuditedFundsStr[..^1]}";
|
|
|
//_view.TotalStr5 = unAuditedFundsStr.Substring(0, unAuditedFundsStr.Length - 1);
|
|
|
|
|
|
+ // 单独处理手机端费用项合计
|
|
|
+ if (_dto.PortType == 3)
|
|
|
+ {
|
|
|
+ var result = await GetExpenseAuditOverviewCore(_dto.DiId, _dto.AuditStatus);
|
|
|
+ _view.Overview = result.Where(x => x.FeeTypeId == _dto.Label).FirstOrDefault();
|
|
|
+ }
|
|
|
+
|
|
|
var _view1 = new
|
|
|
{
|
|
|
PageFuncAuth = pageFunAuthView,
|
|
|
@@ -11802,138 +11818,149 @@ FROM
|
|
|
/// <summary>
|
|
|
/// 获取团组费用审核 总览信息
|
|
|
/// </summary>
|
|
|
- /// <param name="_dto"></param>
|
|
|
+ /// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost]
|
|
|
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
- public async Task<IActionResult> GetExpenseAuditOverview(ExpenseAuditOverviewDto _dto)
|
|
|
+ public async Task<IActionResult> GetExpenseAuditOverview(ExpenseAuditOverviewDto 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为空"));
|
|
|
-
|
|
|
- #region 页面操作权限验证
|
|
|
- var pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
|
|
|
+ #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为空"));
|
|
|
|
|
|
- if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限"));
|
|
|
- #endregion
|
|
|
+ #region 页面操作权限验证
|
|
|
+ var pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(dto.UserId, dto.PageId);
|
|
|
|
|
|
- #endregion
|
|
|
+ if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限"));
|
|
|
+ #endregion
|
|
|
|
|
|
- // 设置包含项、排序
|
|
|
- var setDataTypeIds = new List<int>()
|
|
|
- {
|
|
|
- 80, 85, 76, 79, 81, 82, 98, 285, 1015
|
|
|
- };
|
|
|
+ #endregion
|
|
|
|
|
|
- // 初始化费用类型
|
|
|
- var view = await _sqlSugar.Queryable<Sys_SetData>()
|
|
|
- .Where(x => x.STid == 16 && x.IsDel == 0 && setDataTypeIds.Contains(x.Id))
|
|
|
- .Select(x => new ExpenseAuditOverview()
|
|
|
- {
|
|
|
- FeeTypeId = x.Id,
|
|
|
- FeeTypeName = x.Name,
|
|
|
- })
|
|
|
- .ToListAsync();
|
|
|
+ var view = await GetExpenseAuditOverviewCore(dto.DiId, dto.AuditStatus);
|
|
|
|
|
|
- // 创建顺序映射字典
|
|
|
- var orderMap = new Dictionary<int, int>();
|
|
|
- for (int i = 0; i < setDataTypeIds.Count; i++)
|
|
|
+ // 返回单项
|
|
|
+ if (dto.FeeType != -1)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(new
|
|
|
{
|
|
|
- orderMap[setDataTypeIds[i]] = i;
|
|
|
- }
|
|
|
+ pageFuncAuth = pageFunAuthView,
|
|
|
+ overview = view.Where(x => x.FeeTypeId == dto.FeeType).FirstOrDefault()
|
|
|
+ }));
|
|
|
+ }
|
|
|
|
|
|
- // 按指定顺序排序(使用字典映射)
|
|
|
- view = view
|
|
|
- .OrderBy(x => orderMap.ContainsKey(x.FeeTypeId) ? orderMap[x.FeeTypeId] : int.MaxValue)
|
|
|
- .ThenBy(x => x.FeeTypeId)
|
|
|
- .ToList();
|
|
|
+ // 返回多项
|
|
|
+ return Ok(JsonView(new
|
|
|
+ {
|
|
|
+ pageFuncAuth = pageFunAuthView,
|
|
|
+ overview = view
|
|
|
+ }));
|
|
|
+ }
|
|
|
|
|
|
- // 审核集合 0 未审核 1已通过 2未通过 3 自动审核
|
|
|
- var auditStatus = new List<int>();
|
|
|
- if (_dto.AuditStatus == 0) auditStatus.Add(0); // 待审核
|
|
|
- else if (_dto.AuditStatus == 1) auditStatus.AddRange(new List<int> { 1, 3 }); // 已审核
|
|
|
- else if (_dto.AuditStatus == 2) auditStatus.Add(2); // 未通过
|
|
|
-
|
|
|
- var cardPayments = await _sqlSugar.Queryable<Grp_CreditCardPayment>()
|
|
|
- .LeftJoin<Sys_SetData>((x, y) => x.PaymentCurrency == y.Id)
|
|
|
- .Where((x, y) => x.IsDel == 0 && x.DIId == _dto.DiId)
|
|
|
- .WhereIF(auditStatus.Any(), (x, y) => auditStatus.Contains(x.IsAuditGM))
|
|
|
- .Select((x, y) => new {
|
|
|
- x.Id,
|
|
|
- x.DIId,
|
|
|
- x.CId,
|
|
|
- x.CTable,
|
|
|
- x.PayMoney,
|
|
|
- x.PaymentCurrency,
|
|
|
- PayCurrencyName = y.Name,
|
|
|
- x.DayRate,
|
|
|
- x.PayPercentage,
|
|
|
- x.IsAuditGM,
|
|
|
- })
|
|
|
- .ToListAsync();
|
|
|
+ /// <summary>
|
|
|
+ /// 获取费用审核总览
|
|
|
+ /// </summary>
|
|
|
+ private async Task<List<ExpenseAuditOverview>> GetExpenseAuditOverviewCore(int diId, int auditStatus)
|
|
|
+ {
|
|
|
+ // 设置包含项、排序
|
|
|
+ var setDataTypeIds = new List<int> { 80, 85, 76, 79, 81, 82, 98, 285, 1015 };
|
|
|
|
|
|
- foreach (var item in view)
|
|
|
+ // 初始化费用类型
|
|
|
+ var view = await _sqlSugar.Queryable<Sys_SetData>()
|
|
|
+ .Where(x => x.STid == 16 && x.IsDel == 0 && setDataTypeIds.Contains(x.Id))
|
|
|
+ .Select(x => new ExpenseAuditOverview()
|
|
|
{
|
|
|
- var currTypeDatas = cardPayments.Where(x => x.CTable == item.FeeTypeId).ToList();
|
|
|
+ FeeTypeId = x.Id,
|
|
|
+ FeeTypeName = x.Name,
|
|
|
+ })
|
|
|
+ .ToListAsync();
|
|
|
|
|
|
- if (!currTypeDatas.Any()) continue;
|
|
|
+ // 创建顺序映射字典
|
|
|
+ var orderMap = setDataTypeIds.Select((id, index) => new { id, index })
|
|
|
+ .ToDictionary(x => x.id, x => x.index);
|
|
|
|
|
|
- item.TotalRecords = currTypeDatas.Count;
|
|
|
- item.PendingCount = currTypeDatas.Count(x => x.IsAuditGM == 0);
|
|
|
+ // 按指定顺序排序
|
|
|
+ view = view
|
|
|
+ .OrderBy(x => orderMap.ContainsKey(x.FeeTypeId) ? orderMap[x.FeeTypeId] : int.MaxValue)
|
|
|
+ .ThenBy(x => x.FeeTypeId)
|
|
|
+ .ToList();
|
|
|
|
|
|
- item.TotalPayableAmounts = currTypeDatas.GroupBy(x => x.PayCurrencyName)
|
|
|
- .Select(g => new AuditOverviewFeeInfo()
|
|
|
- {
|
|
|
- Amount = g.Sum(x => x.PayMoney),
|
|
|
- Currency = g.Key
|
|
|
- })
|
|
|
- .ToList();
|
|
|
+ // 审核状态处理
|
|
|
+ var auditStatusList = new List<int>();
|
|
|
+ if (auditStatus == 0) auditStatusList.Add(0);
|
|
|
+ else if (auditStatus == 1) auditStatusList.AddRange(new List<int> { 1, 3 });
|
|
|
+ else if (auditStatus == 2) auditStatusList.Add(2);
|
|
|
+
|
|
|
+ // 查询信用卡支付记录
|
|
|
+ var cardPayments = await _sqlSugar.Queryable<Grp_CreditCardPayment>()
|
|
|
+ .LeftJoin<Sys_SetData>((x, y) => x.PaymentCurrency == y.Id)
|
|
|
+ .Where((x, y) => x.IsDel == 0 && x.DIId == diId)
|
|
|
+ .WhereIF(auditStatusList.Any(), (x, y) => auditStatusList.Contains(x.IsAuditGM))
|
|
|
+ .Select((x, y) => new
|
|
|
+ {
|
|
|
+ x.Id,
|
|
|
+ x.DIId,
|
|
|
+ x.CId,
|
|
|
+ x.CTable,
|
|
|
+ x.PayMoney,
|
|
|
+ x.PaymentCurrency,
|
|
|
+ PayCurrencyName = y.Name,
|
|
|
+ x.DayRate,
|
|
|
+ x.PayPercentage,
|
|
|
+ x.IsAuditGM,
|
|
|
+ })
|
|
|
+ .ToListAsync();
|
|
|
|
|
|
- item.RemainingBalanceAmounts = currTypeDatas.Where(x => x.IsAuditGM == 0)
|
|
|
- .GroupBy(x => x.PayCurrencyName)
|
|
|
- .Select(g => new AuditOverviewFeeInfo()
|
|
|
- {
|
|
|
- Amount = g.Sum(x => x.PayMoney * (x.PayPercentage / 100)),
|
|
|
- Currency = g.Key
|
|
|
- })
|
|
|
- .ToList();
|
|
|
+ // 计算各项金额
|
|
|
+ foreach (var item in view)
|
|
|
+ {
|
|
|
+ var currTypeDatas = cardPayments.Where(x => x.CTable == item.FeeTypeId).ToList();
|
|
|
+ if (!currTypeDatas.Any()) continue;
|
|
|
|
|
|
- item.ApprovedExpenseAmounts = currTypeDatas.Where(x => x.IsAuditGM == 1 || x.IsAuditGM == 3)
|
|
|
- .GroupBy(x => x.PayCurrencyName)
|
|
|
- .Select(g => new AuditOverviewFeeInfo()
|
|
|
- {
|
|
|
- Amount = g.Sum(x => x.PayMoney * (x.PayPercentage / 100)),
|
|
|
- Currency = g.Key
|
|
|
- })
|
|
|
- .ToList();
|
|
|
+ item.TotalRecords = currTypeDatas.Count;
|
|
|
+ item.PendingCount = currTypeDatas.Count(x => x.IsAuditGM == 0);
|
|
|
|
|
|
- item.PendingExpenseAmounts = currTypeDatas.Where(x => x.IsAuditGM == 0)
|
|
|
- .GroupBy(x => x.PayCurrencyName)
|
|
|
- .Select(g => new AuditOverviewFeeInfo()
|
|
|
- {
|
|
|
- Amount = g.Sum(x => x.PayMoney * (x.PayPercentage / 100)),
|
|
|
- Currency = g.Key
|
|
|
- })
|
|
|
- .ToList();
|
|
|
- }
|
|
|
+ item.TotalPayableAmounts = currTypeDatas
|
|
|
+ .GroupBy(x => x.PayCurrencyName)
|
|
|
+ .Select(g => new AuditOverviewFeeInfo()
|
|
|
+ {
|
|
|
+ Amount = g.Sum(x => x.PayMoney),
|
|
|
+ Currency = g.Key
|
|
|
+ })
|
|
|
+ .ToList();
|
|
|
|
|
|
- var res = new
|
|
|
- {
|
|
|
- PageFuncAuth = pageFunAuthView,
|
|
|
- Overview = view
|
|
|
- };
|
|
|
+ item.RemainingBalanceAmounts = currTypeDatas
|
|
|
+ .Where(x => x.IsAuditGM == 0)
|
|
|
+ .GroupBy(x => x.PayCurrencyName)
|
|
|
+ .Select(g => new AuditOverviewFeeInfo()
|
|
|
+ {
|
|
|
+ Amount = g.Sum(x => x.PayMoney * (x.PayPercentage / 100)),
|
|
|
+ Currency = g.Key
|
|
|
+ })
|
|
|
+ .ToList();
|
|
|
|
|
|
- return Ok(JsonView(res));
|
|
|
- }
|
|
|
- catch (Exception ex)
|
|
|
- {
|
|
|
+ item.ApprovedExpenseAmounts = currTypeDatas
|
|
|
+ .Where(x => x.IsAuditGM == 1 || x.IsAuditGM == 3)
|
|
|
+ .GroupBy(x => x.PayCurrencyName)
|
|
|
+ .Select(g => new AuditOverviewFeeInfo()
|
|
|
+ {
|
|
|
+ Amount = g.Sum(x => x.PayMoney * (x.PayPercentage / 100)),
|
|
|
+ Currency = g.Key
|
|
|
+ })
|
|
|
+ .ToList();
|
|
|
|
|
|
- return Ok(JsonView(false, ex.Message));
|
|
|
+ item.PendingExpenseAmounts = currTypeDatas
|
|
|
+ .Where(x => x.IsAuditGM == 0)
|
|
|
+ .GroupBy(x => x.PayCurrencyName)
|
|
|
+ .Select(g => new AuditOverviewFeeInfo()
|
|
|
+ {
|
|
|
+ Amount = g.Sum(x => x.PayMoney * (x.PayPercentage / 100)),
|
|
|
+ Currency = g.Key
|
|
|
+ })
|
|
|
+ .ToList();
|
|
|
}
|
|
|
+
|
|
|
+ return view;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -11968,6 +11995,7 @@ FROM
|
|
|
var creditCurrencyDatas = _grpScheduleRep._sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0 && it.STid == 66).ToList();
|
|
|
var groupDatas = _grpScheduleRep._sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0).ToList();
|
|
|
|
|
|
+ var feeTypeId = creditDatas.Select(it => it.CTable).FirstOrDefault();
|
|
|
var msgDatas = new List<dynamic>();
|
|
|
var dic_ccp_user = new Dictionary<int, int>() { };
|
|
|
foreach (var item in idList)
|
|
|
@@ -12045,30 +12073,33 @@ FROM
|
|
|
if (rst == 0)
|
|
|
{
|
|
|
_groupRepository.CommitTran();
|
|
|
- foreach (var item in msgDatas)
|
|
|
- {
|
|
|
- //发送消息
|
|
|
- GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.GroupExpenseAudit, item.MsgTitle, item.MsgContent, new List<int>() { item.UserId }, item.DiId);
|
|
|
- }
|
|
|
|
|
|
#region 应用推送
|
|
|
- try
|
|
|
+ _ = Task.Run(async () =>
|
|
|
{
|
|
|
- foreach (var ccpId in dic_ccp_user.Keys)
|
|
|
+ try
|
|
|
{
|
|
|
- var templist = new List<string>() { dic_ccp_user[ccpId].ToString() };
|
|
|
- await AppNoticeLibrary.SendUserMsg_GroupStatus_AuditFee(ccpId, templist, QiyeWeChatEnum.CaiWuChat);
|
|
|
+ foreach (var item in msgDatas)
|
|
|
+ {
|
|
|
+ //发送消息
|
|
|
+ GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.GroupExpenseAudit, item.MsgTitle, item.MsgContent, new List<int>() { item.UserId }, item.DiId);
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach (var ccpId in dic_ccp_user.Keys)
|
|
|
+ {
|
|
|
+ var templist = new List<string>() { dic_ccp_user[ccpId].ToString() };
|
|
|
+ await AppNoticeLibrary.SendUserMsg_GroupStatus_AuditFee(ccpId, templist, QiyeWeChatEnum.CaiWuChat);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- catch (Exception)
|
|
|
- {
|
|
|
- }
|
|
|
+ catch (Exception)
|
|
|
+ {
|
|
|
+ }
|
|
|
+ });
|
|
|
#endregion
|
|
|
|
|
|
-
|
|
|
return Ok(JsonView(true, "操作成功!"));
|
|
|
}
|
|
|
-
|
|
|
+ _groupRepository.RollbackTran();
|
|
|
return Ok(JsonView(false, "操作失败!"));
|
|
|
}
|
|
|
|
|
|
@@ -12116,19 +12147,12 @@ FROM
|
|
|
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
public async Task<IActionResult> 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)
|
|
|
+ Result groupData = await _airTicketResRep.AirTicketResSelect(dto);
|
|
|
+ if (groupData.Code != 0)
|
|
|
{
|
|
|
- return Ok(JsonView(false, ex.Message));
|
|
|
+ return Ok(JsonView(false, groupData.Msg));
|
|
|
}
|
|
|
+ return Ok(JsonView(true, groupData.Msg, groupData.Data));
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -12140,20 +12164,12 @@ FROM
|
|
|
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
public async Task<IActionResult> 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)
|
|
|
+ Result groupData = await _airTicketResRep.AirTicketResList(dto);
|
|
|
+ if (groupData.Code != 0)
|
|
|
{
|
|
|
- return Ok(JsonView(false, ex.Message));
|
|
|
- throw;
|
|
|
+ return Ok(JsonView(false, groupData.Msg));
|
|
|
}
|
|
|
+ return Ok(JsonView(true, groupData.Msg, groupData.Data));
|
|
|
}
|
|
|
|
|
|
/// <summary>
|