|
@@ -2003,44 +2003,132 @@ public class AirTicketResRepository : BaseRepository<Grp_AirTicketReservations,
|
|
|
#endregion
|
|
#endregion
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
|
- /// 单条删除 2026版
|
|
|
|
|
|
|
+ /// 按ID删除机票记录 2026版
|
|
|
|
|
+ /// 验证费用状态和退票记录
|
|
|
/// </summary>
|
|
/// </summary>
|
|
|
- /// <param name="userId"></param>
|
|
|
|
|
- /// <param name="id"></param>
|
|
|
|
|
|
|
+ /// <param name="userId">操作用户ID</param>
|
|
|
|
|
+ /// <param name="airTicketId">机票记录ID</param>
|
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
|
- public async Task<JsonView> SoftDelAsync(int userId, int id)
|
|
|
|
|
|
|
+ public async Task<JsonView> DeleteByIdAsync(int userId, int airTicketId)
|
|
|
{
|
|
{
|
|
|
BeginTran();
|
|
BeginTran();
|
|
|
try
|
|
try
|
|
|
{
|
|
{
|
|
|
- var ar_res = await SoftDeleteByIdAsync<Grp_AirTicketReservations>(id.ToString(), userId);
|
|
|
|
|
- if (!ar_res)
|
|
|
|
|
- {
|
|
|
|
|
|
|
+ // 1. 查询机票记录
|
|
|
|
|
+ var airTicket = await _sqlSugar.Queryable<Grp_AirTicketReservations>()
|
|
|
|
|
+ .Where(x => x.Id == airTicketId && x.IsDel == 0)
|
|
|
|
|
+ .FirstAsync();
|
|
|
|
|
|
|
|
|
|
+ if (airTicket == null)
|
|
|
|
|
+ {
|
|
|
RollbackTran();
|
|
RollbackTran();
|
|
|
- return JsonView.Fail("删除失败!");
|
|
|
|
|
|
|
+ return JsonView.Fail("机票费用记录不存在或已被删除!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 验证费用状态
|
|
|
|
|
+ var cardPayment = await _sqlSugar.Queryable<Grp_CreditCardPayment>()
|
|
|
|
|
+ .Where(x => x.CId == airTicketId && x.CTable == 85 && x.IsDel == 0)
|
|
|
|
|
+ .FirstAsync();
|
|
|
|
|
+
|
|
|
|
|
+ if (cardPayment != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (cardPayment.IsAuditGM == 1)
|
|
|
|
|
+ {
|
|
|
|
|
+ RollbackTran();
|
|
|
|
|
+ return JsonView.Fail($"删除失败:当前费用已审核,不可删除!(记录ID:{airTicketId})");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (cardPayment.IsAuditGM == 3)
|
|
|
|
|
+ {
|
|
|
|
|
+ RollbackTran();
|
|
|
|
|
+ return JsonView.Fail($"删除失败:当前费用已自动审核,不可删除!(记录ID:{airTicketId})");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (cardPayment.IsPay == 1)
|
|
|
|
|
+ {
|
|
|
|
|
+ RollbackTran();
|
|
|
|
|
+ return JsonView.Fail($"删除失败:当前费用已付款,不可删除!(记录ID:{airTicketId})");
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- var ccp_res = await _sqlSugar.Updateable<Grp_CreditCardPayment>()
|
|
|
|
|
- .SetColumns(x => x.IsDel == 1)
|
|
|
|
|
- .SetColumns(x => x.DeleteUserId == userId)
|
|
|
|
|
- .SetColumns(x => x.DeleteTime == DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))
|
|
|
|
|
- .Where(a => a.CId == id && a.CTable == 85)
|
|
|
|
|
|
|
+ // 3. 验证退票记录关联
|
|
|
|
|
+ if (airTicket.RecordType == 0) // 正常记录
|
|
|
|
|
+ {
|
|
|
|
|
+ // 检查是否有退票记录关联
|
|
|
|
|
+ var refundRecords = await _sqlSugar.Queryable<Grp_AirTicketReservations>()
|
|
|
|
|
+ .Where(x => x.OriginalReservationId == airTicketId
|
|
|
|
|
+ && x.RecordType == 1
|
|
|
|
|
+ && x.IsDel == 0)
|
|
|
|
|
+ .ToListAsync();
|
|
|
|
|
+
|
|
|
|
|
+ if (refundRecords.Any())
|
|
|
|
|
+ {
|
|
|
|
|
+ var refundIds = string.Join(",", refundRecords.Select(x => x.Id));
|
|
|
|
|
+ var refundNames = string.Join(",", refundRecords.Select(x => x.ClientName));
|
|
|
|
|
+ RollbackTran();
|
|
|
|
|
+ return JsonView.Fail($"删除失败:该记录存在关联的退票记录!请先删除以下退票记录ID:[{refundIds}],关联人员:[{refundNames}]");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (airTicket.RecordType == 1) // 退票记录
|
|
|
|
|
+ {
|
|
|
|
|
+ // 检查关联的正常机票是否存在
|
|
|
|
|
+ if (airTicket.OriginalReservationId > 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ var normalTicket = await _sqlSugar.Queryable<Grp_AirTicketReservations>()
|
|
|
|
|
+ .Where(x => x.Id == airTicket.OriginalReservationId && x.IsDel == 0)
|
|
|
|
|
+ .FirstAsync();
|
|
|
|
|
+
|
|
|
|
|
+ if (normalTicket == null)
|
|
|
|
|
+ {
|
|
|
|
|
+ RollbackTran();
|
|
|
|
|
+ return JsonView.Fail($"删除失败:退票记录关联的正常机票不存在或已被删除!(关联ID:{airTicket.OriginalReservationId})");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 执行软删除
|
|
|
|
|
+ // 4.1 软删除机票记录
|
|
|
|
|
+ airTicket.IsDel = 1;
|
|
|
|
|
+ airTicket.DeleteUserId = userId;
|
|
|
|
|
+ airTicket.DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
+
|
|
|
|
|
+ var airUpdateCount = await _sqlSugar.Updateable(airTicket)
|
|
|
|
|
+ .UpdateColumns(x => new { x.IsDel, x.DeleteUserId, x.DeleteTime })
|
|
|
|
|
+ .Where(x => x.Id == airTicketId)
|
|
|
.ExecuteCommandAsync();
|
|
.ExecuteCommandAsync();
|
|
|
- if (ccp_res < 1)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if (airUpdateCount < 1)
|
|
|
{
|
|
{
|
|
|
RollbackTran();
|
|
RollbackTran();
|
|
|
- return JsonView.Fail("删除失败!");
|
|
|
|
|
|
|
+ return JsonView.Fail("删除失败:机票记录删除失败!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 4.2 软删除对应的费用记录
|
|
|
|
|
+ if (cardPayment != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ cardPayment.IsDel = 1;
|
|
|
|
|
+ cardPayment.DeleteUserId = userId;
|
|
|
|
|
+ cardPayment.DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
+
|
|
|
|
|
+ var cardUpdateCount = await _sqlSugar.Updateable(cardPayment)
|
|
|
|
|
+ .UpdateColumns(x => new { x.IsDel, x.DeleteUserId, x.DeleteTime })
|
|
|
|
|
+ .Where(x => x.Id == cardPayment.Id)
|
|
|
|
|
+ .ExecuteCommandAsync();
|
|
|
|
|
+
|
|
|
|
|
+ if (cardUpdateCount < 1)
|
|
|
|
|
+ {
|
|
|
|
|
+ RollbackTran();
|
|
|
|
|
+ return JsonView.Fail("删除失败:费用记录删除失败!");
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
CommitTran();
|
|
CommitTran();
|
|
|
- return JsonView.Success("删除成功!");
|
|
|
|
|
|
|
|
|
|
|
|
+ var recordTypeName = airTicket.RecordType == 0 ? "正常记录" : "退票记录";
|
|
|
|
|
+ return JsonView.Success($"删除成功!已删除{recordTypeName},ID:{airTicketId}");
|
|
|
}
|
|
}
|
|
|
catch (Exception ex)
|
|
catch (Exception ex)
|
|
|
{
|
|
{
|
|
|
RollbackTran();
|
|
RollbackTran();
|
|
|
- return JsonView.Fail("删除失败!Error:" + ex.Message);
|
|
|
|
|
|
|
+ return JsonView.Fail($"删除失败:{ex.Message}");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|