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. 105
      medical.jzyb.entity/STD/STD_OBJECT_MAPPING.cs
  9. 44
      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)); 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> /// <summary>

63
ReZero/SuperAPI/MethodGeneratorAPI/MethodGeneratorAPI.cs

@ -173,7 +173,19 @@ namespace ReZero.SuperAPI
var type = argsTypes![index]; var type = argsTypes![index];
if (IsObject(value, type)) 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 try
@ -181,9 +193,10 @@ namespace ReZero.SuperAPI
value = ConvetEmptyValue(p.ParameterType, value); value = ConvetEmptyValue(p.ParameterType, value);
value = UtilMethods.ChangeType2(value, p.ParameterType); 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!; parameters[p.Position] = value!;
index++; index++;
@ -197,6 +210,36 @@ namespace ReZero.SuperAPI
{ {
value = null; 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; return value;
} }
@ -209,7 +252,19 @@ namespace ReZero.SuperAPI
} }
private static bool IsObject(object? value, Type type) 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 public class StdObjectMappingController
{ {
[DI] [DI]
public std_object_mapping_business _StdObjectMappingBusiness { get; set; } public std_object_mapping_business? std_object_mapping_business { get; set; }
[ApiMethod("批量插入映射关系")] [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(); builder.Services.AddSwaggerGen();
//注册db: 这个不写代码可以不注册 //注册db: 这个不写代码可以不注册
builder.Services.AddScoped<ISqlSugarClient>(it => builder.Services.AddScoped<ISqlSugarClient>(it =>
{ {
var config = ApiConfiguration.GetJsonValue<ReZeroJson>("ReZero"); var config = ApiConfiguration.GetJsonValue<ReZeroJson>("ReZero");
@ -33,21 +33,21 @@ builder.Services.AddScoped<ISqlSugarClient>(it =>
//builder.Services.AddCors(); //builder.Services.AddCors();
//注册ReZero.Api //注册ReZero.Api
builder.Services.AddReZeroServices(api => builder.Services.AddReZeroServices(api =>
{ {
//有重载可换json文件 //有重载可换json文件
var apiObj = SuperAPIOptions.GetOptions(); var apiObj = SuperAPIOptions.GetOptions();
//IOC业务等所有需要的所有集程集 //IOC业务等所有需要的所有集程集
var assemblyList = Assembly.GetExecutingAssembly() var assemblyList = Assembly.GetExecutingAssembly()
.GetAllDependentAssemblies(it => it.Contains("medical.insu.transfomer")) .GetAllDependentAssemblies(it => it.Contains("medical.insu.transfomer") || it.Contains("medical.transfomer"))
.ToArray(); .ToArray();
apiObj!.DependencyInjectionOptions = new DependencyInjectionOptions(assemblyList); apiObj!.DependencyInjectionOptions = new DependencyInjectionOptions(assemblyList);
//启用超级API //启用超级API
api.EnableSuperApi(apiObj); 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> ///</summary>
[SugarColumn(ColumnName="METHOD_ID" ,IsPrimaryKey = true) ] [SugarColumn(ColumnName="METHOD_ID" ,IsPrimaryKey = true) ]
public string METHOD_ID { get; set; } = null!; public string? METHOD_ID { get; set; } = null!;
/// <summary> /// <summary>
/// 备 注:方法名称(需符合医保规范) /// 备 注:方法名称(需符合医保规范)

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

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

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

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

44
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.DependencyInjection;
using ReZero.SuperAPI;
using SqlSugar; using SqlSugar;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -11,17 +13,45 @@ namespace medical.transfomer.business
{ {
public class std_object_mapping_business : IScopeContract 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) public int ListInsert(List<STD_OBJECT_MAPPING> list)
{ {
var result = new List<STD_OBJECT_MAPPING>(); try
{
return db.Insertable<STD_OBJECT_MAPPING>(list).ExecuteCommand(); 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();
}
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