子公司从总部定期同步法律法规信息

This commit is contained in:
wyw 2026-03-20 11:17:43 +08:00
parent 25054ec6f2
commit 78f03f78c3
3 changed files with 339 additions and 55 deletions

View File

@ -3,12 +3,14 @@ using APT.BaseData.Domain.IServices.BD;
using APT.BaseData.Domain.IServices.BS; using APT.BaseData.Domain.IServices.BS;
using APT.BaseData.Domain.IServices.EX; using APT.BaseData.Domain.IServices.EX;
using APT.BaseData.Domain.IServices.FM; using APT.BaseData.Domain.IServices.FM;
using APT.BaseData.Domain.IServices.OP;
using APT.BaseData.Domain.IServices.Platform; using APT.BaseData.Domain.IServices.Platform;
using APT.BaseData.Services.DomainServices; using APT.BaseData.Services.DomainServices;
using APT.BaseData.Services.Services.BD; using APT.BaseData.Services.Services.BD;
using APT.BaseData.Services.Services.BS; using APT.BaseData.Services.Services.BS;
using APT.BaseData.Services.Services.EX; using APT.BaseData.Services.Services.EX;
using APT.BaseData.Services.Services.FM; using APT.BaseData.Services.Services.FM;
using APT.BaseData.Services.Services.OP;
using APT.BaseData.Services.Services.Platform; using APT.BaseData.Services.Services.Platform;
using APT.BaseData.Services.Sys; using APT.BaseData.Services.Sys;
using Autofac; using Autofac;
@ -59,6 +61,7 @@ namespace APT.RB.WebApi.App_Start
builder.RegisterType<FMSyncLogDetailService>().As<IFMSyncLogDetailService>().InstancePerLifetimeScope(); builder.RegisterType<FMSyncLogDetailService>().As<IFMSyncLogDetailService>().InstancePerLifetimeScope();
builder.RegisterType<FMNoticeService>().As<IFMNoticeService>().InstancePerLifetimeScope(); builder.RegisterType<FMNoticeService>().As<IFMNoticeService>().InstancePerLifetimeScope();
builder.RegisterType<BSOperateLogService>().As<IBSOperateLogService>().InstancePerLifetimeScope(); builder.RegisterType<BSOperateLogService>().As<IBSOperateLogService>().InstancePerLifetimeScope();
builder.RegisterType<OPTenantDBConnService>().As<IOPTenantDBConnService>().InstancePerLifetimeScope();
} }
} }
} }

View File

@ -4,10 +4,13 @@ using APT.BaseData.Domain.Enums;
using APT.BaseData.Domain.Enums.PF; using APT.BaseData.Domain.Enums.PF;
using APT.BaseData.Domain.IServices; using APT.BaseData.Domain.IServices;
using APT.BaseData.Domain.IServices.FM; using APT.BaseData.Domain.IServices.FM;
using APT.BaseData.Domain.IServices.OP;
using APT.Infrastructure.Core; using APT.Infrastructure.Core;
using APT.Migrations;
using APT.MS.Domain.Entities.AE; using APT.MS.Domain.Entities.AE;
using APT.MS.Domain.Entities.BS; using APT.MS.Domain.Entities.BS;
using APT.MS.Domain.Entities.HM; using APT.MS.Domain.Entities.HM;
using APT.MS.Domain.Entities.LR;
using APT.MS.Domain.Entities.PF; using APT.MS.Domain.Entities.PF;
using APT.MS.Domain.Entities.SC; using APT.MS.Domain.Entities.SC;
using APT.MS.Domain.Entities.TL; using APT.MS.Domain.Entities.TL;
@ -35,13 +38,15 @@ namespace APT.PP.WebApi.Controllers.Api.PP
IPFSysLogService SysLogService { get; set; } IPFSysLogService SysLogService { get; set; }
ISCMTMeetingService SCMTMeetingService { get; set; } ISCMTMeetingService SCMTMeetingService { get; set; }
IFMSyncLogDetailService SyncLogDetailService { get; set; } IFMSyncLogDetailService SyncLogDetailService { get; set; }
public SCController(IFMNotificationTaskService notificationTaskService, IPFSysLogService sysLogService, IFMUserService userService, ISCMTMeetingService scMTMeetingService, IFMSyncLogDetailService syncLogDetailService) IOPTenantDBConnService OPTenantDBConnService { get; set; }
public SCController(IFMNotificationTaskService notificationTaskService, IPFSysLogService sysLogService, IFMUserService userService, ISCMTMeetingService scMTMeetingService, IFMSyncLogDetailService syncLogDetailService, IOPTenantDBConnService oPTenantDBConnService)
{ {
NotificationTaskService = notificationTaskService; NotificationTaskService = notificationTaskService;
UserService = userService; UserService = userService;
SysLogService = sysLogService; SysLogService = sysLogService;
SCMTMeetingService = scMTMeetingService; SCMTMeetingService = scMTMeetingService;
SyncLogDetailService = syncLogDetailService; SyncLogDetailService = syncLogDetailService;
OPTenantDBConnService = oPTenantDBConnService;
} }
/// <summary> /// <summary>
@ -2215,5 +2220,275 @@ namespace APT.PP.WebApi.Controllers.Api.PP
//} //}
#region
/// <summary>
/// 法律法规库 从集团同步信息
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
[HttpPost, Route("LawSyncToSub")]
public JsonActionResult<bool> LawSyncToSub([FromBody] KeywordFilter filter)
{
return SafeExecute<bool>(() =>
{
#region listSync
Guid GuiDHead = new Guid(FilePathHead.JY.GetDescription());
IEnumerable<T_LR_LAW> listSync = null;
var task = GetEntity<T_FM_SYNC_TASK>(filter.Keyword);
DateTime dtMin = DateTime.Now;
if (!string.IsNullOrEmpty(filter.Parameter1))
{
try
{
dtMin = Convert.ToDateTime(filter.Parameter1);
}
catch
{
dtMin = DateTime.Now;
}
}
if (task.SYNC_UNIT.HasValue)//秒 = 0, //分 = 1, //时 = 2, //天 = 3,
{
switch (task.SYNC_UNIT)
{
case 0:
dtMin = dtMin.AddSeconds(-1 * task.PERIODIC_TIME);
break;
case 1:
dtMin = dtMin.AddMinutes(-1 * task.PERIODIC_TIME);
break;
case 2:
dtMin = dtMin.AddHours(-1 * task.PERIODIC_TIME);
break;
case 3:
dtMin = dtMin.AddDays(-1 * task.PERIODIC_TIME);
break;
default:
break;
}
}
string strConn = OPTenantDBConnService.GetConnByORGID(GuiDHead);
try
{
using (var context = new MigrationContext(strConn))
{
listSync = context.GetEntities<T_LR_LAW>(e => e.CREATE_TIME >= dtMin || e.CREATE_TIME >= dtMin, null, new string[] { "Nav_LawType", "Nav_LawVersion.Nav_Files.Nav_ImgFile.Nav_File" });
}
}
catch { }
if (listSync == null || listSync.Count() < 1)
return true;
#endregion
Guid AdminID = new Guid("11111111-1111-1111-1111-111111111111");
Guid? OrgID = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId;
DateTime dtNow = DateTime.Now.Date;
#region LR/LRLaw SyncToLocal
var listLawID = listSync.Select(e => e.ID);
T_LR_LAW_VERSION modelVersion = null;
IEnumerable<T_LR_LAW_VERSION> listLawVersionData = GetEntities<T_LR_LAW_VERSION>(e => listLawID.Contains(e.LAW_ID), null, null).ToList(); //判断修改 主要是 状态
/////数据组装和查验
List<T_LR_LAW_TYPE> Nav_LawType = new List<T_LR_LAW_TYPE>();
List<T_LR_LAW_VERSION> Nav_LawVersion = new List<T_LR_LAW_VERSION>();
List<T_LR_LAW_VERSION_FILE> Nav_Files = new List<T_LR_LAW_VERSION_FILE>();
List<T_PF_IMG_FILE> Nav_ImgFile = new List<T_PF_IMG_FILE>();
List<T_PF_FILE> Nav_File = new List<T_PF_FILE>();
#region
foreach (var item in listSync)
{
if (!Nav_LawType.Contains(item.Nav_LawType))
Nav_LawType.Add(item.Nav_LawType);
if (item.Nav_LawVersion != null && item.Nav_LawVersion.Count() > 0)
Nav_LawVersion.AddRange(item.Nav_LawVersion);
}
foreach (var item in Nav_LawVersion)
{
if (item.Nav_Files != null && item.Nav_Files.Count() > 0)
Nav_Files.AddRange(item.Nav_Files);
}
foreach (var item in Nav_Files)
{
if (item.Nav_ImgFile != null)
Nav_ImgFile.Add(item.Nav_ImgFile);
}
foreach (var item in Nav_ImgFile)
{
if (item.Nav_File != null)
Nav_File.Add(item.Nav_File);
}
#endregion
#region
if (listLawVersionData != null && listLawVersionData.Count() > 0)
{
//数据库查询 没有的拉进来
foreach (var item in listLawVersionData)
{
modelVersion = Nav_LawVersion.FirstOrDefault(e => e.ID == item.ID);
if (modelVersion != null)
continue;
Nav_LawVersion.Add(item);
}
}
#endregion
#region CREATE_TIME MODIFY_TIME MODIFIER_ID
if (Nav_LawVersion != null && Nav_LawVersion.Any())
{
var listVersionOK = Nav_LawVersion.Where(e => e.VERSION_STATUS == BSLawStatusEnum.).OrderBy(e => e.LAW_ID).ThenByDescending(e => e.ENTER_TIME).ToList();
if (listVersionOK != null && listVersionOK.Count > 0)
{
for (int i = 1; i < listVersionOK.Count; i++)
{
if (listVersionOK[i].LAW_ID == listVersionOK[i - 1].LAW_ID)
{
listVersionOK[i].VERSION_STATUS = BSLawStatusEnum.;
}
}
}
}
if (listSync != null && listSync.Count() > 0)
{
foreach (var item in listSync)
{
item.Nav_LawType = null;
item.Nav_LawVersion = null;
item.Nav_User = null;
if (item.ORG_ID == GuiDHead)
{
item.ORG_ID = OrgID;
item.CREATER_ID = AdminID;
item.CREATE_TIME = dtNow;
item.USER_ID = AdminID;
}
item.MODIFY_TIME = dtNow;
item.MODIFIER_ID = AdminID;
}
}
if (Nav_LawType != null && Nav_LawType.Count() > 0)
{
foreach (var item in Nav_LawType)
{
if (item.ORG_ID == GuiDHead)
{
item.ORG_ID = OrgID;
item.CREATER_ID = AdminID;
item.CREATE_TIME = dtNow;
}
item.MODIFY_TIME = dtNow;
item.MODIFIER_ID = AdminID;
}
}
if (Nav_LawVersion != null && Nav_LawVersion.Count() > 0)
{
foreach (var item in Nav_LawVersion)
{
item.Nav_Files = null;
if (item.ORG_ID == GuiDHead)
{
item.ORG_ID = OrgID;
item.CREATER_ID = AdminID;
item.CREATE_TIME = dtNow;
}
item.MODIFY_TIME = dtNow;
item.MODIFIER_ID = AdminID;
}
}
if (Nav_Files != null && Nav_Files.Count() > 0)
{
foreach (var item in Nav_Files)
{
item.Nav_ImgFile = null;
if (item.ORG_ID == GuiDHead)
{
item.ORG_ID = OrgID;
item.CREATER_ID = AdminID;
item.CREATE_TIME = dtNow;
}
item.MODIFY_TIME = dtNow;
item.MODIFIER_ID = AdminID;
}
}
if (Nav_ImgFile != null && Nav_ImgFile.Count() > 0)
{
foreach (var item in Nav_ImgFile)
{
if (item.ORG_ID == GuiDHead)
{
item.ORG_ID = OrgID;
item.CREATER_ID = AdminID;
item.CREATE_TIME = dtNow;
}
item.MODIFY_TIME = dtNow;
item.MODIFIER_ID = AdminID;
}
}
if (Nav_File != null && Nav_File.Count() > 0)
{
foreach (var item in Nav_File)
{
if (item.ORG_ID == GuiDHead)
{
item.ORG_ID = OrgID;
item.CREATER_ID = AdminID;
item.CREATE_TIME = dtNow;
}
item.MODIFY_TIME = dtNow;
item.MODIFIER_ID = AdminID;
}
}
#endregion
#region
UnifiedCommit(() =>
{
if (listSync != null && listSync.Any())
BantchSaveEntityNoCommit(listSync);
if (Nav_LawType != null && Nav_LawType.Any())
BantchSaveEntityNoCommit(Nav_LawType);
if (Nav_LawVersion != null && Nav_LawVersion.Any())
BantchSaveEntityNoCommit(Nav_LawVersion);
if (Nav_Files != null && Nav_Files.Any())
BantchSaveEntityNoCommit(Nav_Files);
if (Nav_ImgFile != null && Nav_ImgFile.Any())
BantchSaveEntityNoCommit(Nav_ImgFile);
if (Nav_File != null && Nav_File.Any())
BantchSaveEntityNoCommit(Nav_File);
});
#endregion
#endregion
return true;
});
}
#endregion
} }
} }

View File

@ -151,6 +151,8 @@ namespace APT.LR.WebApi.Controllers.Api
} }
} }
entity.MODIFY_TIME = DateTime.Now;//作为数据同步的判断标记符
UnifiedCommit(() => UnifiedCommit(() =>
{ {
UpdateEntityNoCommit(entity); UpdateEntityNoCommit(entity);
@ -376,78 +378,82 @@ namespace APT.LR.WebApi.Controllers.Api
return SafeGetPagedData(delegate (PagedActionResult<T_LR_LAW> result) return SafeGetPagedData(delegate (PagedActionResult<T_LR_LAW> result)
{ {
string strConn = OPTenantDBConnService.GetConnByORGID(new Guid(FilePathHead.JY.GetDescription())); string strConn = OPTenantDBConnService.GetConnByORGID(new Guid(FilePathHead.JY.GetDescription()));
using (var context = new MigrationContext(strConn)) try
{ {
Expression<Func<T_LR_LAW, bool>> expression = e => !e.IS_DELETED; using (var context = new MigrationContext(strConn))
if (pageFilter.FilterGroup != null && pageFilter.FilterGroup.Rules != null && pageFilter.FilterGroup.Rules.Count() > 0)
{ {
foreach (var item in pageFilter.FilterGroup.Rules) Expression<Func<T_LR_LAW, bool>> expression = e => !e.IS_DELETED;
if (pageFilter.FilterGroup != null && pageFilter.FilterGroup.Rules != null && pageFilter.FilterGroup.Rules.Count() > 0)
{ {
if (item.Field == "NAME") foreach (var item in pageFilter.FilterGroup.Rules)
{ {
expression = expression.And(e => e.NAME.Contains(item.Value.ToString())); if (item.Field == "NAME")
}
else if (item.Field == "LAW_STATUS" && item.Value != null)
{
try
{ {
BSLawStatusEnum LAW_STATUS = (BSLawStatusEnum)Convert.ToInt32(item.Value.ToString()); expression = expression.And(e => e.NAME.Contains(item.Value.ToString()));
expression = expression.And(e => e.LAW_STATUS == LAW_STATUS);
} }
catch { } else if (item.Field == "LAW_STATUS" && item.Value != null)
}
}
}
if (pageFilter.FilterGroup != null && pageFilter.FilterGroup.Groups != null && pageFilter.FilterGroup.Groups.Count() > 0)
{
foreach (var item in pageFilter.FilterGroup.Groups)
{
DateTime? UPDATE_TIMES = null;
DateTime? UPDATE_TIMEE = null;
if (item.Rules != null && item.Rules.Any() && item.Rules.Count() > 0)
{
foreach (var itemR in item.Rules)
{ {
if (itemR.Field == "UPDATE_TIME" && itemR.Operate == FilterOperate.GreaterThanOrEqual) try
{ {
UPDATE_TIMES = Convert.ToDateTime(itemR.Value.ToString()); BSLawStatusEnum LAW_STATUS = (BSLawStatusEnum)Convert.ToInt32(item.Value.ToString());
} expression = expression.And(e => e.LAW_STATUS == LAW_STATUS);
else if (itemR.Field == "UPDATE_TIME" && itemR.Operate == FilterOperate.LessThanOrEqual)
{
UPDATE_TIMEE = Convert.ToDateTime(itemR.Value.ToString());
} }
catch { }
} }
} }
if (UPDATE_TIMES != null) }
if (pageFilter.FilterGroup != null && pageFilter.FilterGroup.Groups != null && pageFilter.FilterGroup.Groups.Count() > 0)
{
foreach (var item in pageFilter.FilterGroup.Groups)
{ {
expression = expression.And(e => e.UPDATE_TIME >= UPDATE_TIMES); DateTime? UPDATE_TIMES = null;
} DateTime? UPDATE_TIMEE = null;
if (UPDATE_TIMEE != null) if (item.Rules != null && item.Rules.Any() && item.Rules.Count() > 0)
{ {
expression = expression.And(e => e.UPDATE_TIME <= UPDATE_TIMEE); foreach (var itemR in item.Rules)
{
if (itemR.Field == "UPDATE_TIME" && itemR.Operate == FilterOperate.GreaterThanOrEqual)
{
UPDATE_TIMES = Convert.ToDateTime(itemR.Value.ToString());
}
else if (itemR.Field == "UPDATE_TIME" && itemR.Operate == FilterOperate.LessThanOrEqual)
{
UPDATE_TIMEE = Convert.ToDateTime(itemR.Value.ToString());
}
}
}
if (UPDATE_TIMES != null)
{
expression = expression.And(e => e.UPDATE_TIME >= UPDATE_TIMES);
}
if (UPDATE_TIMEE != null)
{
expression = expression.And(e => e.UPDATE_TIME <= UPDATE_TIMEE);
}
} }
} }
} Dictionary<string, DbOrder> orders = new Dictionary<string, DbOrder>();
Dictionary<string, DbOrder> orders = new Dictionary<string, DbOrder>(); orders.Add("CREATE_TIME", DbOrder.DESC);
orders.Add("CREATE_TIME", DbOrder.DESC); PagedResultDto<T_LR_LAW> data = context.GetOrderPageEntities(expression, orders, null, pageFilter.Limit, pageFilter.Start, pageFilter.Include.ToArray());
PagedResultDto<T_LR_LAW> data = context.GetOrderPageEntities(expression, orders, null, pageFilter.Limit, pageFilter.Start, pageFilter.Include.ToArray()); result.TotalCount = data.TotalCount;
result.TotalCount = data.TotalCount; result.Data = data.Items;
result.Data = data.Items; List<Guid> ListLawID = null;
List<Guid> ListLawID = null; if (result.TotalCount > 0)
if (result.TotalCount > 0) {
{ ListLawID = result.Data.Select(e => e.TYPE_ID).ToList();
ListLawID = result.Data.Select(e => e.TYPE_ID).ToList(); var listLawType = context.GetEntities<T_LR_LAW_TYPE>(e => ListLawID.Contains(e.ID), null, null);
var listLawType = context.GetEntities<T_LR_LAW_TYPE>(e => ListLawID.Contains(e.ID), null, null);
ListLawID = result.Data.Select(e => e.ID).ToList(); ListLawID = result.Data.Select(e => e.ID).ToList();
var listVersion = context.GetEntities<T_LR_LAW_VERSION>(e => ListLawID.Contains(e.LAW_ID), null, "Nav_Files.Nav_ImgFile.Nav_File"); var listVersion = context.GetEntities<T_LR_LAW_VERSION>(e => ListLawID.Contains(e.LAW_ID), null, "Nav_Files.Nav_ImgFile.Nav_File");
foreach (var item in result.Data) foreach (var item in result.Data)
{ {
item.Nav_LawType = listLawType.FirstOrDefault(e => e.ID == item.TYPE_ID); item.Nav_LawType = listLawType.FirstOrDefault(e => e.ID == item.TYPE_ID);
item.Nav_LawVersion = listVersion.Where(e => e.LAW_ID == item.ID).ToList(); item.Nav_LawVersion = listVersion.Where(e => e.LAW_ID == item.ID).ToList();
}
} }
} }
} }
catch { }
}); });
} }