Browse Source

修改批量方法信息

master
赵鹏 3 weeks ago
parent
commit
e18c82f784
  1. 13
      ReZero/SuperAPI/Application/App.cs
  2. 63
      ReZero/SuperAPI/MethodGeneratorAPI/MethodGeneratorAPI.cs
  3. 6
      SuperAPI/Controllers/StdObjectMappingController.cs
  4. 12
      SuperAPI/Program.cs
  5. 1538
      SuperAPI/wwwroot/rezero/default_ui/add_filed.html
  6. 2
      medical.jzyb.entity/STD/STD_METHOD_CONFIG.cs
  7. 2
      medical.jzyb.entity/STD/STD_OBJECT_ASSEMBLY.cs
  8. 77
      medical.jzyb.entity/STD/STD_OBJECT_MAPPING.cs
  9. 42
      medical.transfomer.business/std_object_mapping_business.cs

13
ReZero/SuperAPI/Application/App.cs

@ -95,6 +95,19 @@ namespace ReZero.SuperAPI
{
ReZero.DependencyInjection.DependencyResolver.GetLogger().LogInformation(UtilMethods.GetNativeSql(s, p));
};
// 添加Oracle批量操作配置
if (zeroDatabaseInfo.DbType == DbType.Oracle)
{
db.Aop.OnError = (ex) =>
{
if (ex.Message.Contains("bulkcopy no support identity"))
{
ReZero.DependencyInjection.DependencyResolver.GetLogger().LogWarning("Oracle批量操作遇到identity问题,使用单条插入模式");
}
};
db.Ado.CommandTimeOut = 120; // 增加超时时间
}
});
}
/// <summary>

63
ReZero/SuperAPI/MethodGeneratorAPI/MethodGeneratorAPI.cs

@ -173,7 +173,19 @@ namespace ReZero.SuperAPI
var type = argsTypes![index];
if (IsObject(value, type))
{
value = JsonConvert.DeserializeObject(value + "", type);
try
{
var valueStr = value?.ToString();
if (!string.IsNullOrEmpty(valueStr))
{
value = JsonConvert.DeserializeObject(valueStr, type);
}
}
catch (JsonException ex)
{
throw new Exception(TextHandler.GetCommonText(p.Name + "JSON解析错误: " + ex.Message,
p.Name + " JSON parsing error: " + ex.Message));
}
}
}
try
@ -181,9 +193,10 @@ namespace ReZero.SuperAPI
value = ConvetEmptyValue(p.ParameterType, value);
value = UtilMethods.ChangeType2(value, p.ParameterType);
}
catch (Exception)
catch (Exception ex)
{
throw new Exception(TextHandler.GetCommonText(p.Name+"参数类型不匹配 "+value, p.Name + " Parameter type does not match " + value));
throw new Exception(TextHandler.GetCommonText(p.Name + "参数类型不匹配 " + value + ", 错误: " + ex.Message,
p.Name + " Parameter type does not match " + value + ", Error: " + ex.Message));
}
parameters[p.Position] = value!;
index++;
@ -198,6 +211,36 @@ namespace ReZero.SuperAPI
value = null;
}
// 处理JSON数组或对象
var strValue = value?.ToString()?.Trim();
if (strValue != null)
{
if ((type.IsArray || type.FullName.StartsWith("System.Collections.Generic.List")) &&
strValue.StartsWith("[") && strValue.EndsWith("]"))
{
try
{
return JsonConvert.DeserializeObject(strValue, type);
}
catch
{
// 保持原始值
}
}
else if (!type.FullName.StartsWith("System.") &&
strValue.StartsWith("{") && strValue.EndsWith("}"))
{
try
{
return JsonConvert.DeserializeObject(strValue, type);
}
catch
{
// 保持原始值
}
}
}
return value;
}
private static async Task<object> GetTask(Task task)
@ -209,7 +252,19 @@ namespace ReZero.SuperAPI
}
private static bool IsObject(object? value, Type type)
{
return (type.IsArray || type.FullName.StartsWith("System.Collections.Generic.List")) && value != null;
if ((type.IsArray || type.FullName.StartsWith("System.Collections.Generic.List")) && value != null)
{
return true;
}
// 检查值是否为JSON数组字符串
var valueStr = value?.ToString()?.Trim();
if (valueStr != null && valueStr.StartsWith("[") && valueStr.EndsWith("]"))
{
return true;
}
return false;
}
}
}

6
SuperAPI/Controllers/StdObjectMappingController.cs

@ -10,12 +10,12 @@ namespace medical.insu.transfomer.Controllers
public class StdObjectMappingController
{
[DI]
public std_object_mapping_business _StdObjectMappingBusiness { get; set; }
public std_object_mapping_business? std_object_mapping_business { get; set; }
[ApiMethod("批量插入映射关系")]
public int insertList([FromBody]List<STD_OBJECT_MAPPING> list)
public int insertList(List<STD_OBJECT_MAPPING> list)
{
return _StdObjectMappingBusiness.ListInsert(list);
return std_object_mapping_business!.ListInsert(list);
}
}
}

12
SuperAPI/Program.cs

@ -19,7 +19,7 @@ builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
//注册db: 这个不写代码可以不注册
//注册db: 这个不写代码可以不注册
builder.Services.AddScoped<ISqlSugarClient>(it =>
{
var config = ApiConfiguration.GetJsonValue<ReZeroJson>("ReZero");
@ -33,21 +33,21 @@ builder.Services.AddScoped<ISqlSugarClient>(it =>
//builder.Services.AddCors();
//注册ReZero.Api
//注册ReZero.Api
builder.Services.AddReZeroServices(api =>
{
//有重载可换json文件
//有重载可换json文件
var apiObj = SuperAPIOptions.GetOptions();
//IOC业务等所有需要的所有集程集
//IOC业务等所有需要的所有集程集
var assemblyList = Assembly.GetExecutingAssembly()
.GetAllDependentAssemblies(it => it.Contains("medical.insu.transfomer"))
.GetAllDependentAssemblies(it => it.Contains("medical.insu.transfomer") || it.Contains("medical.transfomer"))
.ToArray();
apiObj!.DependencyInjectionOptions = new DependencyInjectionOptions(assemblyList);
//启用超级API
//启用超级API
api.EnableSuperApi(apiObj);
});

1538
SuperAPI/wwwroot/rezero/default_ui/add_filed.html

File diff suppressed because it is too large Load Diff

2
medical.jzyb.entity/STD/STD_METHOD_CONFIG.cs

@ -19,7 +19,7 @@ namespace medical.transfomer.entity
/// 默认值:
///</summary>
[SugarColumn(ColumnName="METHOD_ID" ,IsPrimaryKey = true) ]
public string METHOD_ID { get; set; } = null!;
public string? METHOD_ID { get; set; } = null!;
/// <summary>
/// 备 注:方法名称(需符合医保规范)

2
medical.jzyb.entity/STD/STD_OBJECT_ASSEMBLY.cs

@ -60,7 +60,7 @@ namespace medical.transfomer.entity
/// 默认值:
///</summary>
[SugarColumn(ColumnName="ID" ,IsPrimaryKey = true,IsIdentity = true) ]
public decimal ID { get; set; }
public decimal? ID { get; set; }
}

77
medical.jzyb.entity/STD/STD_OBJECT_MAPPING.cs

@ -13,89 +13,96 @@ namespace medical.transfomer.entity
{
/// <summary>
/// 备 注:主键
/// 默认值:
///</summary>
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)]
public decimal? ID { get; set; }
/// <summary>
/// 备 注:本地系统名称(如姓名 年龄)
/// 默认值:
///</summary>
[SugarColumn(ColumnName="SYSTEM_NAME" ) ]
public string? SYSTEM_NAME { get; set; }
[SugarColumn(ColumnName = "SYSTEM_NAME")]
public string? SYSTEM_NAME { get; set; }
/// <summary>
/// 备 注:系统字段名(如name age)
/// 备 注:本地系统字段名(如name age)
/// 默认值:
///</summary>
[SugarColumn(ColumnName="SYSTEM_FIELD" ) ]
public string? SYSTEM_FIELD { get; set; }
[SugarColumn(ColumnName = "SYSTEM_FIELD")]
public string? SYSTEM_FIELD { get; set; }
/// <summary>
/// 备 注:医保接口字段名
/// 备 注:对接系统名称
/// 默认值:
///</summary>
[SugarColumn(ColumnName="INTERFACE_NAME" ) ]
public string? INTERFACE_NAME { get; set; }
[SugarColumn(ColumnName = "INTERFACE_NAME")]
public string? INTERFACE_NAME { get; set; }
/// <summary>
/// 备 注:医保字段名(需符合国标)
/// 备 注:对接系统字段名
/// 默认值:
///</summary>
[SugarColumn(ColumnName="INTERFACE_FIELD" ) ]
public string? INTERFACE_FIELD { get; set; }
[SugarColumn(ColumnName = "INTERFACE_FIELD")]
public string? INTERFACE_FIELD { get; set; }
/// <summary>
/// 备 注:所属对象名(外键)
/// 备 注:对接系统表中文名
/// 默认值:
///</summary>
[SugarColumn(ColumnName="OBJECT_TABLE_NAME" ) ]
public string? OBJECT_TABLE_NAME { get; set; }
[SugarColumn(ColumnName = "OBJECT_TABLE_CNNAME")]
public string? OBJECT_TABLE_CNNAME { get; set; }
/// <summary>
/// 备 注:所属对象存储表中文名
/// 备 注:本地系统表中文名
/// 默认值:
///</summary>
[SugarColumn(ColumnName="OBJECT_TABLE_CNNAME" ) ]
public string? OBJECT_TABLE_CNNAME { get; set; }
[SugarColumn(ColumnName = "SYSTEM_TABLE_CNNAME")]
public string? SYSTEM_TABLE_CNNAME { get; set; }
/// <summary>
/// 备 注:系统表中文名
/// 备 注:本地系统表英文名
/// 默认值:
///</summary>
[SugarColumn(ColumnName="SYSTEM_TABLE_CNNAME" ) ]
public string? SYSTEM_TABLE_CNNAME { get; set; }
[SugarColumn(ColumnName = "SYSTEM_TABLE_NAME")]
public string? SYSTEM_TABLE_NAME { get; set; }
/// <summary>
/// 备 注:系统表英文名
/// 备 注:本地系统字段类型
/// 默认值:
///</summary>
[SugarColumn(ColumnName="SYSTEM_TABLE_NAME" ) ]
public string? SYSTEM_TABLE_NAME { get; set; }
[SugarColumn(ColumnName = "SYSTEM_FIELD_TYPE")]
public string? SYSTEM_FIELD_TYPE { get; set; }
/// <summary>
/// 备 注:系统字段类型
/// 备 注:本地系统字典名称
/// 默认值:
///</summary>
[SugarColumn(ColumnName="SYSTEM_FIELD_TYPE" ) ]
public decimal? SYSTEM_FIELD_TYPE { get; set; }
[SugarColumn(ColumnName = "SYSTEM_DICT_NAME")]
public string? SYSTEM_DICT_NAME { get; set; }
/// <summary>
/// 备 注:系统字典名称
/// 备 注:对接系统字段类型
/// 默认值:
///</summary>
[SugarColumn(ColumnName="SYSTEM_DICT_NAME" ) ]
public string? SYSTEM_DICT_NAME { get; set; }
[SugarColumn(ColumnName = "OBJECT_FIELD_TYPE")]
public string? OBJECT_FIELD_TYPE { get; set; }
/// <summary>
/// 备 注:对接字段类型
/// 备 注:对接系统字典名称
/// 默认值:
///</summary>
[SugarColumn(ColumnName="OBJECT_FIELD_TYPE" ) ]
public decimal? OBJECT_FIELD_TYPE { get; set; }
[SugarColumn(ColumnName = "OBJECT_DICT_NAME")]
public string? OBJECT_DICT_NAME { get; set; }
/// <summary>
/// 备 注:对接字典名称
/// 备 注:对接系统表英文名
/// 默认值:
///</summary>
[SugarColumn(ColumnName="OBJECT_DICT_NAME" ) ]
public string? OBJECT_DICT_NAME { get; set; }
[SugarColumn(ColumnName = "OBJECT_TABLE_NAME")]
public string? OBJECT_TABLE_NAME { get; set; }
}

42
medical.transfomer.business/std_object_mapping_business.cs

@ -1,5 +1,7 @@
using medical.transfomer.entity;
using DocumentFormat.OpenXml.Drawing.Charts;
using medical.transfomer.entity;
using ReZero.DependencyInjection;
using ReZero.SuperAPI;
using SqlSugar;
using System;
using System.Collections.Generic;
@ -11,17 +13,45 @@ namespace medical.transfomer.business
{
public class std_object_mapping_business : IScopeContract
{
//属性注入
[DI]
public ISqlSugarClient? db { get; set; }
public ISqlSugarClient? db = ZeroDb.Db;
public Task<object> ExecuteAction(DataModel dataModel)
{
throw new NotImplementedException();
}
// 批量插入信息
public int ListInsert(List<STD_OBJECT_MAPPING> list)
{
var result = new List<STD_OBJECT_MAPPING>();
try
{
db!.Ado.BeginTran();
// 完全避免批量插入语法,改用循环逐条插入
int result = 0;
foreach (var item in list)
{
// 不要设置ID为null,而是完全忽略ID列
result += db!.Insertable(item)
.IgnoreColumns(it => new { it.ID }) // 完全忽略ID列,让Oracle生成
.ExecuteCommand();
}
return db.Insertable<STD_OBJECT_MAPPING>(list).ExecuteCommand();
db!.Ado.CommitTran();
return result;
}
catch (Exception ex)
{
db!.Ado.RollbackTran();
// 记录错误详情以便调试
Console.WriteLine($"Oracle插入错误: {ex.Message}");
if (ex.InnerException != null)
Console.WriteLine($"内部错误: {ex.InnerException.Message}");
throw;
}
}
}
}

Loading…
Cancel
Save