合并冲突
continuous-integration/drone/push Build is failing Details

Uat_IRC_Net8
hang 2026-05-06 14:31:53 +08:00
commit 9ad1bbdd7d
9 changed files with 22506 additions and 9 deletions

View File

@ -54,6 +54,11 @@ public class SegmentationAddOrEdit
public Guid VisitTaskId { get; set; }
/// <summary>
/// 文件大小,单位字节
/// </summary>
public long FileSize { get; set; } = 0;
}
public class SegmentationQuery:PageInput
@ -77,7 +82,30 @@ public class SegmentationQuery:PageInput
public Guid? TrialId { get; set; }
public Guid? VisitTaskId { get; set; }
}
}
public class SegmentationVersionView
{
public Guid Id { get; set; }
public Guid SegmentationId { get; set; }
public int Version { get; set; }
public string SegmentationJson { get; set; }
public string SEGUrl { get; set; }
public long FileSize { get; set; }
public DateTime CreateTime { get; set; }
public string CreateUserName { get; set; }
}
public class SegmentationVersionQuery : PageInput
{
public Guid SegmentationId { get; set; }
}
public class RestoreSegmentationVersionInDto
{
public Guid SegmentationId { get; set; }
public Guid VersionId { get; set; }
}

View File

@ -33,6 +33,7 @@ public class SegmentationService(IRepository<Segmentation> _segmentationReposito
IRepository<Segment> _segmentRepository,
IRepository<ReadingQuestionTrial> _readingQuestionTrialRepository,
IRepository<ReadingTableQuestionTrial> _readingTableQuestionTrialRepository,
IRepository<SegmentationVersion> _segmentationVersionRepository,
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer): BaseService, ISegmentationService
{
@ -69,17 +70,87 @@ public class SegmentationService(IRepository<Segmentation> _segmentationReposito
/// <param name="addOrEditSegmentation"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> AddOrUpdateSegmentation(SegmentationAddOrEdit addOrEditSegmentation)
{
public async Task<IResponseOutput> AddOrUpdateSegmentation(SegmentationAddOrEdit addOrEditSegmentation)
{
if (addOrEditSegmentation.Id != null)
{
await SaveSegmentationVersionAsync(addOrEditSegmentation.Id.Value);
}
var entity = await _segmentationRepository.InsertOrUpdateAsync(addOrEditSegmentation, true);
var entity = await _segmentationRepository.InsertOrUpdateAsync(addOrEditSegmentation, true);
return ResponseOutput.Ok(entity.Id.ToString());
}
}
/// <summary>
/// 添加新版本
/// </summary>
/// <param name="segmentationId"></param>
/// <returns></returns>
private async Task SaveSegmentationVersionAsync(Guid segmentationId)
{
var data = await _segmentationRepository.FirstOrDefaultNoTrackingAsync(x => x.Id == segmentationId);
// 如果是新增或修改,记录一条版本信息
var maxVersion = await _segmentationVersionRepository
.Where(x => x.SegmentationId == data.Id)
.OrderByDescending(x => x.Version)
.Select(x => x.Version)
.FirstOrDefaultAsync();
var newVersion = maxVersion + 1;
var versionEntity = new SegmentationVersion
{
SegmentationId = data.Id,
Version = newVersion,
SegmentationJson = data.SegmentationJson,
SEGUrl = data.SEGUrl,
FileSize = data.FileSize,
};
await _segmentationVersionRepository.AddAsync(versionEntity);
await _segmentationRepository.SaveChangesAsync();
}
/// <summary>
/// 获取分割组历史版本
/// </summary>
/// <param name="inQuery"></param>
/// <returns></returns>
[HttpPost]
public async Task<PageOutput<SegmentationVersionView>> GetSegmentationVersionList(SegmentationVersionQuery inQuery)
{
var versionQueryable = _segmentationVersionRepository
.Where(x => x.SegmentationId == inQuery.SegmentationId)
.ProjectTo<SegmentationVersionView>(_mapper.ConfigurationProvider);
var defalutSortArray = new string[] { nameof(SegmentationVersion.Version) + " desc" };
var pageList = await versionQueryable.ToPagedListAsync(inQuery, defalutSortArray);
return pageList;
}
/// <summary>
/// 恢复分割组历史版本
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> RestoreSegmentationVersion(RestoreSegmentationVersionInDto inDto)
{
var version = await _segmentationVersionRepository.Where(x => x.Id == inDto.VersionId && x.SegmentationId == inDto.SegmentationId).FirstNotNullAsync();
var segmentation = await _segmentationRepository.Where(x => x.Id == inDto.SegmentationId).FirstNotNullAsync();
await _segmentationRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.SegmentationId, t => new Segmentation
{
SegmentationJson = version.SegmentationJson,
SEGUrl = version.SEGUrl,
FileSize = version.FileSize,
});
await _segmentationRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}
/// <summary>
/// 删除分割组

View File

@ -1,4 +1,4 @@
using AutoMapper;
using AutoMapper;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Application.ViewModel;
@ -25,6 +25,8 @@ namespace IRaCIS.Core.Application.Service
CreateMap<Segmentation, SegmentationView>();
CreateMap<Segmentation, SegmentationAddOrEdit>().ReverseMap();
CreateMap<SegmentationVersion, SegmentationVersionView>();
// 在此处拷贝automapper 映射
CreateMap<SegmentBinding, SegmentBindingView>()

View File

@ -60,6 +60,11 @@ public class Segmentation : BaseFullDeleteAuditEntity
[MaxLength]
public string SEGUrl { get; set; } = string.Empty;
/// <summary>
/// 文件大小,单位字节
/// </summary>
public long FileSize { get; set; } = 0;
/// <summary>
/// 是否保存
/// </summary>

View File

@ -0,0 +1,44 @@
namespace IRaCIS.Core.Domain.Models;
[Comment("分割文件版本")]
[Table("SegmentationVersion")]
public class SegmentationVersion : BaseAddAuditEntity
{
#region 导航属性
[JsonIgnore]
[ForeignKey("SegmentationId")]
public Segmentation Segmentation { get; set; }
#endregion
/// <summary>
/// 分割分组Id
/// </summary>
public Guid SegmentationId { get; set; }
/// <summary>
/// 版本号默认为1每次更新分割分组时版本号加1
/// </summary>
public int Version { get; set; } = 1;
/// <summary>
/// 分组的Json
/// </summary>
[MaxLength]
public string SegmentationJson { get; set; }
/// <summary>
/// SEG文件的URL地址
/// </summary>
[MaxLength]
public string SEGUrl { get; set; } = string.Empty;
/// <summary>
/// 文件大小,单位字节
/// </summary>
public long FileSize { get; set; } = 0;
}

View File

@ -371,6 +371,8 @@ public class IRaCISDBContext : DbContext
public virtual DbSet<ReadingUserConfig> ReadingUserConfig { get; set; }
public virtual DbSet<Segmentation> Segmentation { get; set; }
public virtual DbSet<SegmentationVersion> SegmentationVersion { get; set; }
public virtual DbSet<Segment> Segment { get; set; }
public virtual DbSet<SegmentBinding> SegmentBinding { get; set; }

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,72 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class SegmentationVersion : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<long>(
name: "FileSize",
table: "Segmentation",
type: "bigint",
nullable: false,
defaultValue: 0L);
migrationBuilder.CreateTable(
name: "SegmentationVersion",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
SegmentationId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
Version = table.Column<int>(type: "int", nullable: false),
SegmentationJson = table.Column<string>(type: "nvarchar(max)", nullable: false),
SEGUrl = table.Column<string>(type: "nvarchar(max)", nullable: false),
FileSize = table.Column<long>(type: "bigint", nullable: false),
CreateUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
CreateTime = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_SegmentationVersion", x => x.Id)
.Annotation("SqlServer:Clustered", false);
},
comment: "分割文件版本");
migrationBuilder.CreateIndex(
name: "IX_SegmentationVersion_CreateTime",
table: "SegmentationVersion",
column: "CreateTime")
.Annotation("SqlServer:Clustered", true);
migrationBuilder.AddForeignKey(
name: "FK_Segmentation_VisitTask_VisitTaskId",
table: "Segmentation",
column: "VisitTaskId",
principalTable: "VisitTask",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Segmentation_VisitTask_VisitTaskId",
table: "Segmentation");
migrationBuilder.DropTable(
name: "SegmentationVersion");
migrationBuilder.DropColumn(
name: "FileSize",
table: "Segmentation");
}
}
}

View File

@ -9493,6 +9493,9 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Property<DateTime?>("DeletedTime")
.HasColumnType("datetime2");
b.Property<long>("FileSize")
.HasColumnType("bigint");
b.Property<bool>("IsDeleted")
.HasColumnType("bit");
@ -9550,6 +9553,48 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
});
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.SegmentationVersion", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreateTime")
.HasColumnType("datetime2");
b.Property<Guid>("CreateUserId")
.HasColumnType("uniqueidentifier");
b.Property<long>("FileSize")
.HasColumnType("bigint");
b.Property<string>("SEGUrl")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid>("SegmentationId")
.HasColumnType("uniqueidentifier");
b.Property<string>("SegmentationJson")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Version")
.HasColumnType("int");
b.HasKey("Id");
SqlServerKeyBuilderExtensions.IsClustered(b.HasKey("Id"), false);
b.HasIndex("CreateTime");
SqlServerIndexBuilderExtensions.IsClustered(b.HasIndex("CreateTime"));
b.ToTable("SegmentationVersion", t =>
{
t.HasComment("分割文件版本");
});
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.ShortcutKey", b =>
{
b.Property<Guid>("Id")
@ -19264,6 +19309,25 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Navigation("VisitTask");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.SegmentationVersion", b =>
{
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")
.WithMany()
.HasForeignKey("CreateUserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.Segmentation", "Segmentation")
.WithMany()
.HasForeignKey("SegmentationId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("CreateUserRole");
b.Navigation("Segmentation");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.ShortcutKey", b =>
{
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")