培训记录 人员 添加附件 (试卷)

线下考核 判断 添加 考核结果 必填
This commit is contained in:
wyw 2026-02-06 13:38:48 +08:00
parent c1dfe00a50
commit 424e057af4
8 changed files with 138182 additions and 1 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,74 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
namespace APT.Data.Migrations.Migrations
{
public partial class wyw2026020501 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "T_SE_TRAIN_RECORD_USER_FILE",
columns: table => new
{
ID = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
RECORD_USER_ID = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
IMG_FILE_ID = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
IS_DELETED = table.Column<bool>(type: "bit", nullable: false),
ORG_ID = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
ENTITY_ORG_TPYE = table.Column<int>(type: "int", nullable: false),
FORM_ID = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
FLOW_STATUS = table.Column<int>(type: "int", nullable: false),
FLOW_SEND_STATUS = table.Column<int>(type: "int", nullable: false),
FLOW_ID = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
CREATE_TIME = table.Column<DateTime>(type: "datetime2", nullable: true),
MODIFY_TIME = table.Column<DateTime>(type: "datetime2", nullable: true),
CREATER_ID = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
MODIFIER_ID = table.Column<Guid>(type: "uniqueidentifier", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_T_SE_TRAIN_RECORD_USER_FILE", x => x.ID);
table.ForeignKey(
name: "FK_T_SE_TRAIN_RECORD_USER_FILE_T_FM_ORGANIZATION_ORG_ID",
column: x => x.ORG_ID,
principalTable: "T_FM_ORGANIZATION",
principalColumn: "ID",
onDelete: ReferentialAction.Restrict);
table.ForeignKey(
name: "FK_T_SE_TRAIN_RECORD_USER_FILE_T_PF_IMG_FILE_IMG_FILE_ID",
column: x => x.IMG_FILE_ID,
principalTable: "T_PF_IMG_FILE",
principalColumn: "ID",
onDelete: ReferentialAction.Restrict);
table.ForeignKey(
name: "FK_T_SE_TRAIN_RECORD_USER_FILE_T_SE_TRAIN_RECORD_USER_RECORD_USER_ID",
column: x => x.RECORD_USER_ID,
principalTable: "T_SE_TRAIN_RECORD_USER",
principalColumn: "ID",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateIndex(
name: "IX_T_SE_TRAIN_RECORD_USER_FILE_IMG_FILE_ID",
table: "T_SE_TRAIN_RECORD_USER_FILE",
column: "IMG_FILE_ID");
migrationBuilder.CreateIndex(
name: "IX_T_SE_TRAIN_RECORD_USER_FILE_ORG_ID",
table: "T_SE_TRAIN_RECORD_USER_FILE",
column: "ORG_ID");
migrationBuilder.CreateIndex(
name: "IX_T_SE_TRAIN_RECORD_USER_FILE_RECORD_USER_ID",
table: "T_SE_TRAIN_RECORD_USER_FILE",
column: "RECORD_USER_ID");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "T_SE_TRAIN_RECORD_USER_FILE");
}
}
}

View File

@ -75703,6 +75703,63 @@ namespace APT.Data.Migrations.Migrations
b.ToTable("T_SE_TRAIN_RECORD_USER"); b.ToTable("T_SE_TRAIN_RECORD_USER");
}); });
modelBuilder.Entity("APT.MS.Domain.Entities.SE.T_SE_TRAIN_RECORD_USER_FILE", b =>
{
b.Property<Guid>("ID")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("CREATER_ID")
.HasColumnType("uniqueidentifier");
b.Property<DateTime?>("CREATE_TIME")
.HasColumnType("datetime2");
b.Property<int>("ENTITY_ORG_TPYE")
.HasColumnType("int");
b.Property<Guid?>("FLOW_ID")
.HasColumnType("uniqueidentifier");
b.Property<int>("FLOW_SEND_STATUS")
.HasColumnType("int");
b.Property<int>("FLOW_STATUS")
.HasColumnType("int");
b.Property<Guid?>("FORM_ID")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("IMG_FILE_ID")
.HasColumnType("uniqueidentifier");
b.Property<bool>("IS_DELETED")
.HasColumnType("bit");
b.Property<Guid?>("MODIFIER_ID")
.HasColumnType("uniqueidentifier");
b.Property<DateTime?>("MODIFY_TIME")
.HasColumnType("datetime2");
b.Property<Guid?>("ORG_ID")
.IsRequired()
.HasColumnType("uniqueidentifier");
b.Property<Guid>("RECORD_USER_ID")
.HasColumnType("uniqueidentifier");
b.HasKey("ID");
b.HasIndex("IMG_FILE_ID");
b.HasIndex("ORG_ID");
b.HasIndex("RECORD_USER_ID");
b.ToTable("T_SE_TRAIN_RECORD_USER_FILE");
});
modelBuilder.Entity("APT.MS.Domain.Entities.SE.T_SE_TRAIN_SURVEY", b => modelBuilder.Entity("APT.MS.Domain.Entities.SE.T_SE_TRAIN_SURVEY", b =>
{ {
b.Property<Guid>("ID") b.Property<Guid>("ID")
@ -125590,6 +125647,33 @@ namespace APT.Data.Migrations.Migrations
b.Navigation("Nav_User"); b.Navigation("Nav_User");
}); });
modelBuilder.Entity("APT.MS.Domain.Entities.SE.T_SE_TRAIN_RECORD_USER_FILE", b =>
{
b.HasOne("APT.BaseData.Domain.Entities.T_PF_IMG_FILE", "Nav_ImgFile")
.WithMany()
.HasForeignKey("IMG_FILE_ID")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.HasOne("APT.Infrastructure.Core.T_FM_ORGANIZATION", "Nav_Org")
.WithMany()
.HasForeignKey("ORG_ID")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.HasOne("APT.MS.Domain.Entities.SE.T_SE_TRAIN_RECORD_USER", "Nav_RecordUser")
.WithMany("Nav_Files")
.HasForeignKey("RECORD_USER_ID")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("Nav_ImgFile");
b.Navigation("Nav_Org");
b.Navigation("Nav_RecordUser");
});
modelBuilder.Entity("APT.MS.Domain.Entities.SE.T_SE_TRAIN_SURVEY", b => modelBuilder.Entity("APT.MS.Domain.Entities.SE.T_SE_TRAIN_SURVEY", b =>
{ {
b.HasOne("APT.BaseData.Domain.Entities.FM.T_FM_DEPARTMENT", "Nav_LaunchDepartment") b.HasOne("APT.BaseData.Domain.Entities.FM.T_FM_DEPARTMENT", "Nav_LaunchDepartment")
@ -136942,6 +137026,11 @@ namespace APT.Data.Migrations.Migrations
b.Navigation("Nav_ListPaper"); b.Navigation("Nav_ListPaper");
}); });
modelBuilder.Entity("APT.MS.Domain.Entities.SE.T_SE_TRAIN_RECORD_USER", b =>
{
b.Navigation("Nav_Files");
});
modelBuilder.Entity("APT.MS.Domain.Entities.SE.T_SE_TRAIN_SURVEY", b => modelBuilder.Entity("APT.MS.Domain.Entities.SE.T_SE_TRAIN_SURVEY", b =>
{ {
b.Navigation("Nav_Demands"); b.Navigation("Nav_Demands");

View File

@ -10652,6 +10652,17 @@ builder.HasOne(t => t.Nav_User).WithMany().HasForeignKey(t => t.USER_ID).OnDelet
builder.Property(t => t.DEPARTMENT_NAME).HasMaxLength(50); builder.Property(t => t.DEPARTMENT_NAME).HasMaxLength(50);
builder.Property(t => t.POST_NAME).HasMaxLength(50); builder.Property(t => t.POST_NAME).HasMaxLength(50);
} }
}
#endregion
#region TrainRecordUserFile
public partial class SETrainRecordUserFileMap :APTEntityBaseMap<T_SE_TRAIN_RECORD_USER_FILE>
{
public override void Configure(EntityTypeBuilder<T_SE_TRAIN_RECORD_USER_FILE> builder)
{
base.Configure(builder);
builder.HasOne(t => t.Nav_RecordUser).WithMany(t=>t.Nav_Files).HasForeignKey(t => t.RECORD_USER_ID).OnDelete(DeleteBehavior.Restrict);
builder.HasOne(t => t.Nav_ImgFile).WithMany().HasForeignKey(t => t.IMG_FILE_ID).OnDelete(DeleteBehavior.Restrict);
}
} }
#endregion #endregion
#region TrainingEffectEvaluation #region TrainingEffectEvaluation

View File

@ -3,6 +3,7 @@ using APT.BaseData.Domain.Enums;
using APT.Infrastructure.Core; using APT.Infrastructure.Core;
using APT.MS.Domain.Enums; using APT.MS.Domain.Enums;
using System; using System;
using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
namespace APT.MS.Domain.Entities.SE namespace APT.MS.Domain.Entities.SE
{ {
@ -90,5 +91,11 @@ namespace APT.MS.Domain.Entities.SE
[FormFieldQuery] [FormFieldQuery]
[EnumName("FMEnableStatusEnum")] [EnumName("FMEnableStatusEnum")]
public FMEnableStatusEnum ENABLE_STATUS { get; set; } public FMEnableStatusEnum ENABLE_STATUS { get; set; }
/// <summary>
/// 附件
/// </summary>
[Description("附件")]
public ICollection<T_SE_TRAIN_RECORD_USER_FILE> Nav_Files { get; set; }
} }
} }

View File

@ -0,0 +1,41 @@
using APT.BaseData.Domain.Entities;
using APT.BaseData.Domain.Entities.FM;
using APT.BaseData.Domain.Enums;
using APT.Infrastructure.Core;
using APT.MS.Domain.Enums;
using System;
using System.ComponentModel;
namespace APT.MS.Domain.Entities.SE
{
/// <summary>
/// 培训记录参与人员考卷附件
/// </summary>
[Description("培训记录参与人员附件")]
public class T_SE_TRAIN_RECORD_USER_FILE : MesEntityBase
{
/// <summary>
/// 培训记录
/// </summary>
[Description("培训记录")]
[DataFieldForeignKey("Nav_RecordUser", "Nav_Files")]
public Guid RECORD_USER_ID { get; set; }
/// <summary>
/// 导航: 培训记录
/// </summary>
[Description("导航: 培训记录")]
public T_SE_TRAIN_RECORD_USER Nav_RecordUser { get; set; }
/// <summary>
/// 文件ID
/// </summary>
[Description("文件ID")]
[DataFieldForeignKey("Nav_ImgFile")]
public Guid IMG_FILE_ID { get; set; }
/// <summary>
/// 导航属性:文件
/// </summary>
[Description("导航属性:文件")]
public T_PF_IMG_FILE Nav_ImgFile { get; set; }
}
}

View File

@ -43,6 +43,13 @@ namespace APT.SC.WebApi.Controllers.Api.SE
{ {
var joinUsers = entity.Nav_Users.Where(t => t.USER_ID != Guid.Empty); var joinUsers = entity.Nav_Users.Where(t => t.USER_ID != Guid.Empty);
List<T_SE_TRAIN_RECORD_USER_FILE> listFiles = new List<T_SE_TRAIN_RECORD_USER_FILE>();
foreach (var item in joinUsers)
{
if (item.IS_DELETED)
item.Nav_Files.ForEach(e => e.IS_DELETED = true);
listFiles.AddRange(item.Nav_Files);
}
var files = entity.Nav_Files; var files = entity.Nav_Files;
List<T_FM_NOTIFICATION_TASK> sendNotice = null; List<T_FM_NOTIFICATION_TASK> sendNotice = null;
T_FM_NOTIFICATION_TASK finishNotice = null; T_FM_NOTIFICATION_TASK finishNotice = null;
@ -202,7 +209,22 @@ namespace APT.SC.WebApi.Controllers.Api.SE
// currJoinUser.OK = true; // currJoinUser.OK = true;
//} //}
sendNotice = NotificationTaskService.InsertUserNoticeTaskModels(allSendTitles, allSendDataIds, entity.ORG_ID, allSendUserIds, allSendUserNames, DateTime.Now, DateTime.Now.AddHours(12), 1, "SE017_SHOWPRINT"); sendNotice = NotificationTaskService.InsertUserNoticeTaskModels(allSendTitles, allSendDataIds, entity.ORG_ID, allSendUserIds, allSendUserNames, DateTime.Now, DateTime.Now.AddHours(12), 1, "SE017_SHOWPRINT");
if (data.Nav_Notify.CHECKTYPE == PlanCheckType.InOffLine)
{
//必须要有考核结果
int index = 1;
foreach (var item in joinUsers)
{
if (item.IS_DELETED)
continue;
if (!item.EXAMINATION_RESULTS.HasValue)
throw new Exception("行" + index + " 请完善考核结果!");
index++;
}
}
} }
entity.Nav_Notify = null; entity.Nav_Notify = null;
joinUsers.ForEach(m => m.Nav_User = null); joinUsers.ForEach(m => m.Nav_User = null);
entity.Nav_Users = null; entity.Nav_Users = null;
@ -217,7 +239,9 @@ namespace APT.SC.WebApi.Controllers.Api.SE
if (finishNotice != null) if (finishNotice != null)
UpdateEntityNoCommit(finishNotice); UpdateEntityNoCommit(finishNotice);
if (sendNotice != null && sendNotice.Any()) if (sendNotice != null && sendNotice.Any())
BantchAddEntityNoCommit(sendNotice); BantchSaveEntityNoCommit(sendNotice);
if (listFiles != null && listFiles.Any())
BantchSaveEntityNoCommit(listFiles);
}); });
return true; return true;

View File

@ -53511,6 +53511,111 @@ using APT.MS.Domain.Entities.HM;
return WitEntity(null, filter); return WitEntity(null, filter);
} }
}
#endregion
#region TrainRecordUserFile-
/// <summary>
/// 培训记录参与人员附件
/// </summary>
[Route("api/SE/TrainRecordUserFile")]
public partial class TrainRecordUserFileController : AuthorizeApiController<T_SE_TRAIN_RECORD_USER_FILE>
{
/// <summary>
/// 查询所有数据
/// </summary>
/// <param name="filter">过滤实体</param>
/// <returns></returns>
[HttpPost, Route("Entities")]
public JsonActionResult<IEnumerable<T_SE_TRAIN_RECORD_USER_FILE>> Entities([FromBody]KeywordFilter filter)
{
return WitEntities(null, filter);
}
/// <summary>
/// 排序查询所有数据
/// </summary>
/// <param name="filter">过滤实体</param>
/// <returns></returns>
[HttpPost, Route("OrderEntities")]
public JsonActionResult<IEnumerable<T_SE_TRAIN_RECORD_USER_FILE>> OrderEntities([FromBody]KeywordFilter filter)
{
return WitOrderEntities(null, filter);
}
/// <summary>
/// 分页查询数据
/// </summary>
/// <param name="pageFilter">分页过滤实体</param>
/// <returns></returns>
[HttpPost, Route("Paged")]
public PagedActionResult<T_SE_TRAIN_RECORD_USER_FILE> Paged([FromBody]KeywordPageFilter pageFilter)
{
return WitPaged(null, pageFilter);
}
/// <summary>
/// 排序分页查询数据
/// </summary>
/// <param name="pageFilter">分页过滤实体</param>
/// <returns></returns>
[HttpPost, Route("OrderPaged")]
public PagedActionResult<T_SE_TRAIN_RECORD_USER_FILE> OrderPaged([FromBody]KeywordPageFilter pageFilter)
{
return WitOrderPaged(null, pageFilter);
}
/// <summary>
/// 根据主键删除数据
/// </summary>
/// <param name="id">主键ID</param>
/// <returns></returns>
[HttpGet, Route("Delete")]
public JsonActionResult<bool> Delete(string id)
{
return WitRealDelete(id);
}
/// <summary>
/// 更新或新增数据
/// </summary>
/// <param name="entity">对象实体</param>
/// <returns></returns>
[HttpPost, Route("Update")]
public JsonActionResult<bool> Update([FromBody]T_SE_TRAIN_RECORD_USER_FILE entity)
{
return WitUpdate(entity);
}
/// <summary>
/// 批量更新
/// </summary>
/// <param name="entity">对象实体</param>
/// <returns></returns>
[HttpPost, Route("BatchUpdate")]
public JsonActionResult<bool> BatchUpdate([FromBody] BatchUpdateModel<T_SE_TRAIN_RECORD_USER_FILE> entity)
{
return WitBantchUpdate(entity?.Data);
}
/// <summary>
/// 批量删除数据
/// </summary>
/// <param name="ids">id字符串id用逗号分隔</param>
/// <returns></returns>
[HttpGet, Route("BatchDelete")]
public JsonActionResult<bool> BatchDelete(string ids)
{
return WitRealBatchDelete(ids);
}
/// <summary>
/// 获得单条实体数据
/// </summary>
/// <param name="filter">过滤实体</param>
/// <returns></returns>
[HttpPost, Route("Get")]
public JsonActionResult<T_SE_TRAIN_RECORD_USER_FILE> Get([FromBody] KeywordFilter filter)
{
return WitEntity(null, filter);
}
} }
#endregion #endregion
#region TrainingEffectEvaluation- #region TrainingEffectEvaluation-