Explorar o código

AI 公务信息
关键字 -> 国家选项 新增 中国香港、中国澳门 数据

Lyyyi hai 5 días
pai
achega
4237c46a37

+ 4 - 4
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -13357,14 +13357,14 @@ FROM
         /// del
         /// </summary>
         /// <returns></returns>
-        [HttpGet("/api/Groups/airTicket/del")]
+        [HttpPost("/api/Groups/airTicket/del")]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> GetAirTicketCostInfo([FromBody]DelBaseDto dto)
         {
-            if (dto.DeleteUserId < 1) return Ok(JsonView(false, "用户ID无效"));
-            if (dto.Id < 1) return Ok(JsonView(false, "ID无效"));
+            if (dto.DeleteUserId < 1) return Ok(JsonView(false, "参数错误:用户ID不能为空"));
+            if (dto.Id < 1) return Ok(JsonView(false, "参数错误:记录ID不能为空"));
 
-            return Ok(await _airTicketResRep.SoftDelAsync(dto.DeleteUserId, dto.Id));
+            return Ok(await _airTicketResRep.DeleteByIdAsync(dto.DeleteUserId, dto.Id));
         }
 
         #endregion

+ 20 - 1
OASystem/OASystem.Api/OAMethodLib/GeneralMethod.cs

@@ -2042,11 +2042,30 @@ PascalCase,禁止新增字段:
         /// <returns></returns>
         public static async Task<List<string>> InvitationAICountryName()
         {
-            return await _sqlSugar.Queryable<Sys_Countries>()
+            var counties = await _sqlSugar.Queryable<Sys_Countries>()
                 .Where(x => x.IsDel == 0)
                 .Select(x => x.Name_CN)
                 .Distinct()
                 .ToListAsync();
+
+            // 处理特殊城市 如 香港、澳门 等,统一为国家级别
+            var targetCities = new List<string> { "澳门", "香港" };
+
+            var cities = await _sqlSugar.Queryable<Sys_Cities>()
+                .LeftJoin<Sys_Countries>((city, country) => city.CountriesId == country.Id)
+                .Where(city => city.IsDel == 0 && targetCities.Contains(city.Name_CN))
+                .Select((city, country) => country.Name_CN + "(" + city.Name_CN + ")")
+                .ToListAsync();
+
+            // 合并
+            var result = counties.Union(cities).ToList();
+
+            // 自定义排序:中国相关优先,其他按拼音排序
+            var customOrder = result.OrderBy(x => !x.Contains("中国"))  // 包含"中国"的排前面
+                                    .ThenBy(x => x)                     // 再按字母排序
+                                    .ToList();
+
+            return customOrder; 
         }
 
         #endregion

+ 2 - 0
OASystem/OASystem.Domain/Dtos/DtoBase.cs

@@ -44,10 +44,12 @@ namespace OASystem.Domain.Dtos
         /// <summary>
         /// 删除的数据Id
         /// </summary>
+        [Required(ErrorMessage = "记录ID不能为空")]
         public int Id { get; set; }
         /// <summary>
         /// 删除者Id
         /// </summary>
+        [Required(ErrorMessage = "用户ID不能为空")]
         public int DeleteUserId { get; set; }
     }
 

+ 105 - 17
OASystem/OASystem.Infrastructure/Repositories/Groups/AirTicketResRepository.cs

@@ -2003,44 +2003,132 @@ public class AirTicketResRepository : BaseRepository<Grp_AirTicketReservations,
     #endregion
 
     /// <summary>
-    /// 单条删除 2026版
+    /// 按ID删除机票记录 2026版
+    /// 验证费用状态和退票记录
     /// </summary>
-    /// <param name="userId"></param>
-    /// <param name="id"></param>
+    /// <param name="userId">操作用户ID</param>
+    /// <param name="airTicketId">机票记录ID</param>
     /// <returns></returns>
-    public async Task<JsonView> SoftDelAsync(int userId, int id)
+    public async Task<JsonView> DeleteByIdAsync(int userId, int airTicketId)
     {
         BeginTran();
         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();
-                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();
-            if (ccp_res < 1)
+
+            if (airUpdateCount < 1)
             {
                 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();
-            return JsonView.Success("删除成功!");
 
+            var recordTypeName = airTicket.RecordType == 0 ? "正常记录" : "退票记录";
+            return JsonView.Success($"删除成功!已删除{recordTypeName},ID:{airTicketId}");
         }
         catch (Exception ex)
         {
             RollbackTran();
-            return JsonView.Fail("删除失败!Error:" + ex.Message);
+            return JsonView.Fail($"删除失败:{ex.Message}");
         }
     }