344 lines
20 KiB
C#
344 lines
20 KiB
C#
using Ewide.Core;
|
|
using Ewide.Nbzs.Entity;
|
|
using Ewide.Nbzs.Entity.Extends;
|
|
using Furion;
|
|
using Furion.DataEncryption;
|
|
using Furion.JsonSerialization;
|
|
using Furion.TaskScheduler;
|
|
using Microsoft.Extensions.Caching.Distributed;
|
|
using Microsoft.Extensions.Hosting;
|
|
using Microsoft.Extensions.Logging;
|
|
using SqlSugar;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Ewide.Nbzs.BackWorkerService
|
|
{
|
|
public class Worker : BackgroundService
|
|
{
|
|
private readonly ILogger<Worker> _logger;
|
|
readonly SqlSugarProvider db_Product_Conn;
|
|
readonly SqlSugarProvider db_Zlb_Conn;
|
|
//private readonly IDistributedCache _cache;
|
|
private readonly ICache _cache;
|
|
//, IDistributedCache cache
|
|
public Worker(ILogger<Worker> logger)
|
|
{
|
|
_logger = logger;
|
|
db_Product_Conn = DbManage.GetConnection("Product_Conn");
|
|
db_Zlb_Conn = DbManage.GetConnection("Zlb_Conn");
|
|
//_cache = cache;
|
|
_cache = new RedisCache(Microsoft.Extensions.Options.Options.Create<CacheOptions>(new CacheOptions
|
|
{
|
|
CacheType = CacheType.RedisCache,
|
|
RedisConnectionString = App.GetConfig<string>("RedisConfig")
|
|
}));
|
|
}
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|
{
|
|
while (!stoppingToken.IsCancellationRequested)
|
|
{
|
|
ExecPushProcess();
|
|
_logger.LogInformation("已完成一次任务,Finish a Worker running at: {time}", DateTimeOffset.Now);
|
|
await Task.Delay(1 * 60 * 1000, stoppingToken);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 执行推送任务
|
|
/// </summary>
|
|
private void ExecPushProcess()
|
|
{
|
|
//取出推送任务表数据
|
|
var listPush = db_Product_Conn.Queryable<PushZlb>().Where(p => p.IsDeleted == 0).ToList();
|
|
listPush.ForEach(p =>
|
|
{
|
|
if (p.IsAutoDo == 1)
|
|
{
|
|
//_logger.LogInformation("自动创建任务:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
////自动推
|
|
//#region 自动
|
|
//SpareTime.Do(() =>
|
|
//{
|
|
// if (p.IsError == 1)
|
|
// {
|
|
// _logger.LogInformation("自动任务停止:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
// return null;
|
|
// }
|
|
// else
|
|
// return SpareTime.GetCronNextOccurrence(p.AutoDoTime);
|
|
//}, (time, count) => { Push(p, count); }
|
|
//);
|
|
//#endregion
|
|
|
|
if (p.IsError == 1)
|
|
{
|
|
//_logger.LogInformation("自动任务停止:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
}
|
|
else
|
|
{
|
|
Push(p);
|
|
}
|
|
}
|
|
else if (p.IsAutoDo == 0 && p.IsProcessed == 0)
|
|
{
|
|
//_logger.LogInformation("手动创建任务:" + DateTimeOffset.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
//手动
|
|
//SpareTime.DoOnce(1, (timer, count) => { Push(p); });
|
|
Push(p);
|
|
}
|
|
});
|
|
|
|
}
|
|
private void Push2(PushZlb pushZlb)
|
|
{
|
|
_logger.LogWarning("测试Push2");
|
|
}
|
|
|
|
private List<PushResult> Push(PushZlb pushZlbObj)
|
|
{
|
|
//测试读取接口中缓存
|
|
_logger.LogInformation("进入Push方法():Id:{Id} ,项目ID:{PrjId} at: {time}", pushZlbObj.ID, pushZlbObj.PrjId, DateTimeOffset.Now);
|
|
List<PushResult> list_result = new();
|
|
try
|
|
{
|
|
var projectId = Guid.Parse(pushZlbObj.PrjId);
|
|
var project = db_Product_Conn.Queryable<Projects>().Where(p => p.ID == projectId).First();
|
|
if (project != null)
|
|
{
|
|
#region 政策
|
|
_cache.Set($"CacheData-PoliciesRegulations", db_Zlb_Conn.Queryable<Entity.PoliciesRegulations>().ToList());
|
|
|
|
var listPoliciesRegulations = db_Product_Conn.Queryable<Entity.PoliciesRegulations>().ToList();
|
|
//_cache.SetString($"CacheData-PoliciesRegulations", JSON.Serialize(listPoliciesRegulations), new DistributedCacheEntryOptions
|
|
//{
|
|
// SlidingExpiration = TimeSpan.FromMinutes(60)
|
|
//});
|
|
//删政策
|
|
var delete_result = db_Zlb_Conn.Deleteable<Entity.PoliciesRegulations>().ExecuteCommandHasChange();
|
|
list_result.Add(new PushResult { Action = "Delete", TableName = "PoliciesRegulations", IsSuccess = delete_result });
|
|
|
|
var insert_result = db_Zlb_Conn.Insertable(listPoliciesRegulations).ExecuteCommand();
|
|
list_result.Add(new PushResult { Action = "Insert", TableName = "PoliciesRegulations", IsSuccess = insert_result > 0 });
|
|
_cache.Set($"CacheData-PoliciesRegulations", db_Zlb_Conn.Queryable<Entity.PoliciesRegulations>().ToList());
|
|
#endregion
|
|
|
|
#region 非住宅协议
|
|
_cache.Set($"CacheData-ResidentialAgreement", GetBcxyData());
|
|
//if (delete_result)
|
|
//{
|
|
//加密敏感字段
|
|
var listNonResidentialAgreement = db_Product_Conn.Queryable<NonResidentialAgreement>().Where(p => p.ProjectID == projectId).ToList();
|
|
listNonResidentialAgreement.ForEach(p =>
|
|
{
|
|
p.ExpropriatedCardNo = MD5Encryption.Encrypt(p.ExpropriatedCardNo);
|
|
p.ExpropriatedPhone = MD5Encryption.Encrypt(p.ExpropriatedPhone);
|
|
});
|
|
//_cache.SetString($"CacheData-NonResidentialAgreement-{projectId}", JSON.Serialize(listNonResidentialAgreement), new DistributedCacheEntryOptions
|
|
//{
|
|
// SlidingExpiration = TimeSpan.FromMinutes(60)
|
|
//});
|
|
|
|
//删除非住宅协议
|
|
delete_result = db_Zlb_Conn.Deleteable<NonResidentialAgreement>().Where(p => p.ProjectID == projectId).ExecuteCommandHasChange();
|
|
list_result.Add(new PushResult { Action = "Delete", TableName = "NonResidentialAgreement", IsSuccess = delete_result });
|
|
|
|
insert_result = db_Zlb_Conn.Insertable(listNonResidentialAgreement).ExecuteCommand();
|
|
list_result.Add(new PushResult { Action = "Insert", TableName = "NonResidentialAgreement", IsSuccess = insert_result > 0 });
|
|
|
|
|
|
#endregion
|
|
|
|
#region 住宅协议
|
|
|
|
//加密敏感字段
|
|
var listResidentialAgreement = db_Product_Conn.Queryable<ResidentialAgreement>().Where(p => p.ProjectID == projectId).ToList();
|
|
listResidentialAgreement.ForEach(p =>
|
|
{
|
|
p.ExpropriatedCardNo = MD5Encryption.Encrypt(p.ExpropriatedCardNo);
|
|
p.ExpropriatedPhone = MD5Encryption.Encrypt(p.ExpropriatedPhone);
|
|
});
|
|
//_cache.SetString($"CacheData-ResidentialAgreement-{projectId}", JSON.Serialize(listResidentialAgreement), new DistributedCacheEntryOptions
|
|
//{
|
|
// SlidingExpiration = TimeSpan.FromMinutes(60)
|
|
//});
|
|
//删除住宅协议
|
|
delete_result = db_Zlb_Conn.Deleteable<ResidentialAgreement>().Where(p => p.ProjectID == projectId).ExecuteCommandHasChange();
|
|
list_result.Add(new PushResult { Action = "Delete", TableName = "ResidentialAgreement", IsSuccess = delete_result });
|
|
|
|
insert_result = db_Zlb_Conn.Insertable(listResidentialAgreement).ExecuteCommand();
|
|
list_result.Add(new PushResult { Action = "Insert", TableName = "ResidentialAgreement", IsSuccess = insert_result > 0 });
|
|
|
|
_cache.Set($"CacheData-ResidentialAgreement", GetBcxyData());
|
|
#endregion
|
|
|
|
#region 非住宅评估
|
|
_cache.Set($"CacheData-InvestigateTable_Assessment", GetFHPGData());
|
|
var listNonInvestigateTable_Assessment = db_Product_Conn.Queryable<NonInvestigateTable_Assessment>().Where(p => p.ProjectId == projectId).ToList();
|
|
//_cache.SetString($"CacheData-NonInvestigateTable_Assessment-{projectId}", JSON.Serialize(listNonInvestigateTable_Assessment), new DistributedCacheEntryOptions
|
|
//{
|
|
// SlidingExpiration = TimeSpan.FromMinutes(60)
|
|
//});
|
|
//删除非住宅评估
|
|
delete_result = db_Zlb_Conn.Deleteable<NonInvestigateTable_Assessment>().Where(p => p.ProjectId == projectId).ExecuteCommandHasChange();
|
|
list_result.Add(new PushResult { Action = "Delete", TableName = "NonInvestigateTable_Assessment", IsSuccess = delete_result });
|
|
|
|
insert_result = db_Zlb_Conn.Insertable(listNonInvestigateTable_Assessment).ExecuteCommand();
|
|
list_result.Add(new PushResult { Action = "Insert", TableName = "NonInvestigateTable_Assessment", IsSuccess = insert_result > 0 });
|
|
|
|
#endregion
|
|
|
|
#region 住宅评估
|
|
var listInvestigateTable_Assessment = db_Product_Conn.Queryable<InvestigateTable_Assessment>().Where(p => p.ProjectId == projectId).ToList();
|
|
//_cache.SetString($"CacheData-InvestigateTable_Assessment-{projectId}", JSON.Serialize(listInvestigateTable_Assessment), new DistributedCacheEntryOptions
|
|
//{
|
|
// SlidingExpiration = TimeSpan.FromMinutes(60)
|
|
//});
|
|
//删除住宅评估
|
|
delete_result = db_Zlb_Conn.Deleteable<InvestigateTable_Assessment>().Where(p => p.ProjectId == projectId).ExecuteCommandHasChange();
|
|
list_result.Add(new PushResult { Action = "Delete", TableName = "InvestigateTable_Assessment", IsSuccess = delete_result });
|
|
|
|
insert_result = db_Zlb_Conn.Insertable(listInvestigateTable_Assessment).ExecuteCommand();
|
|
list_result.Add(new PushResult { Action = "Insert", TableName = "InvestigateTable_Assessment", IsSuccess = insert_result > 0 });
|
|
|
|
_cache.Set($"CacheData-InvestigateTable_Assessment", GetFHPGData());
|
|
#endregion
|
|
|
|
#region 非住宅调查表
|
|
_cache.Set($"CacheData-NonResidentialInvestigateTable", db_Zlb_Conn.Queryable<NonResidentialInvestigateTable>().Select(p => new { dcbId = p.ID, PrjId = p.ProjectId, ExpropriatedCardNo = p.PropertyRightPrsonCardNo }).ToList());
|
|
//删除非住宅调查表
|
|
delete_result = db_Zlb_Conn.Deleteable<NonResidentialInvestigateTable>().Where(p => p.ProjectId == projectId).ExecuteCommandHasChange();
|
|
list_result.Add(new PushResult { Action = "Delete", TableName = "NonResidentialInvestigateTable", IsSuccess = delete_result });
|
|
|
|
//加密敏感字段
|
|
var listNonInvestigateTable = db_Product_Conn.Queryable<NonResidentialInvestigateTable>().Where(p => p.ProjectId == projectId).ToList();
|
|
listNonInvestigateTable.ForEach(p =>
|
|
{
|
|
p.PropertyRightPrsonCardNo = MD5Encryption.Encrypt(p.PropertyRightPrsonCardNo);
|
|
p.TheLegalRepresentativePhone = MD5Encryption.Encrypt(p.TheLegalRepresentativePhone);
|
|
});
|
|
//_cache.SetString($"CacheData-NonResidentialInvestigateTable-{projectId}", JSON.Serialize(listNonInvestigateTable), new DistributedCacheEntryOptions
|
|
//{
|
|
// SlidingExpiration = TimeSpan.FromMinutes(60)
|
|
//});
|
|
insert_result = db_Zlb_Conn.Insertable(listNonInvestigateTable).ExecuteCommand();
|
|
list_result.Add(new PushResult { Action = "Insert", TableName = "NonResidentialInvestigateTable", IsSuccess = insert_result > 0 });
|
|
_cache.Set($"CacheData-NonResidentialInvestigateTable", db_Zlb_Conn.Queryable<NonResidentialInvestigateTable>().Select(p => new { dcbId = p.ID, PrjId = p.ProjectId, ExpropriatedCardNo = p.PropertyRightPrsonCardNo }).ToList());
|
|
#endregion
|
|
|
|
#region 住宅调查表
|
|
_cache.Set($"CacheData-InvestigateTable", db_Zlb_Conn.Queryable<InvestigateTable>().Select(p => new { dcbId = p.ID, PrjId = p.ProjectId, p.ExpropriatedCardNo }).ToList());
|
|
//删除住宅调查表
|
|
delete_result = db_Zlb_Conn.Deleteable<InvestigateTable>().Where(p => p.ProjectId == projectId).ExecuteCommandHasChange();
|
|
list_result.Add(new PushResult { Action = "Delete", TableName = "InvestigateTable", IsSuccess = delete_result });
|
|
|
|
//加密敏感字段
|
|
var listInvestigateTable = db_Product_Conn.Queryable<InvestigateTable>().Where(p => p.ProjectId == projectId).ToList();
|
|
listInvestigateTable.ForEach(p =>
|
|
{
|
|
p.ExpropriatedCardNo = MD5Encryption.Encrypt(p.ExpropriatedCardNo);
|
|
p.ExpropriatedPhone = MD5Encryption.Encrypt(p.ExpropriatedPhone);
|
|
});
|
|
//_cache.SetString($"CacheData-InvestigateTable-{projectId}", JSON.Serialize(listInvestigateTable), new DistributedCacheEntryOptions
|
|
//{
|
|
// SlidingExpiration = TimeSpan.FromMinutes(60)
|
|
//});
|
|
insert_result = db_Zlb_Conn.Insertable(listInvestigateTable).ExecuteCommand();
|
|
list_result.Add(new PushResult { Action = "Insert", TableName = "InvestigateTable", IsSuccess = insert_result > 0 });
|
|
_cache.Set($"CacheData-InvestigateTable", db_Zlb_Conn.Queryable<InvestigateTable>().Select(p => new { dcbId = p.ID, PrjId = p.ProjectId, p.ExpropriatedCardNo }).ToList());
|
|
#endregion
|
|
|
|
#region 项目
|
|
_cache.Set($"CacheData-Projects", GetProjectData());
|
|
var listProjects = db_Product_Conn.Queryable<Projects>().Where(p => p.ID == projectId).ToList();
|
|
//_cache.SetString($"CacheData-Projects-{projectId}", JSON.Serialize(listProjects), new DistributedCacheEntryOptions
|
|
//{
|
|
// SlidingExpiration = TimeSpan.FromMinutes(60)
|
|
//});
|
|
//删项目
|
|
delete_result = db_Zlb_Conn.Deleteable<Projects>().Where(p => p.ID == projectId).ExecuteCommandHasChange();
|
|
list_result.Add(new PushResult { Action = "Delete", TableName = "Projects", IsSuccess = delete_result });
|
|
|
|
insert_result = db_Zlb_Conn.Insertable(listProjects).ExecuteCommand();
|
|
list_result.Add(new PushResult { Action = "Insert", TableName = "Projects", IsSuccess = insert_result > 0 });
|
|
_cache.Set($"CacheData-Projects", GetProjectData());
|
|
#endregion
|
|
|
|
#region ProjectsStep
|
|
_cache.Set($"CacheData-ProjectsStep", db_Zlb_Conn.Queryable<ProjectsStep>().ToList());
|
|
var listProjectsStep = db_Product_Conn.Queryable<ProjectsStep>().Where(p => p.ProjectID == projectId).ToList();
|
|
//_cache.SetString($"CacheData-ProjectsStep-{projectId}", JSON.Serialize(listProjectsStep), new DistributedCacheEntryOptions
|
|
//{
|
|
// SlidingExpiration = TimeSpan.FromMinutes(60)
|
|
//});
|
|
//ProjectsStep
|
|
delete_result = db_Zlb_Conn.Deleteable<ProjectsStep>().Where(p => p.ProjectID == projectId).ExecuteCommandHasChange();
|
|
list_result.Add(new PushResult { Action = "Delete", TableName = "ProjectsStep", IsSuccess = delete_result });
|
|
|
|
insert_result = db_Zlb_Conn.Insertable(listProjectsStep).ExecuteCommand();
|
|
list_result.Add(new PushResult { Action = "Insert", TableName = "ProjectsStep", IsSuccess = insert_result > 0 });
|
|
|
|
_cache.Set($"CacheData-ProjectsStep", db_Zlb_Conn.Queryable<ProjectsStep>().ToList());
|
|
#endregion
|
|
|
|
}
|
|
StringBuilder push_error_reason = new();
|
|
//if (list_result.Any(r => !r.IsSuccess))
|
|
//{
|
|
// list_result.ForEach(r =>
|
|
// {
|
|
// push_error_reason.AppendFormat("{0} 表:[{1}] 结果:[{2}] [{3}]", r.Action, r.TableName, r.IsSuccess, r.FailReason);
|
|
// });
|
|
// pushZlbObj.IsProcessed = 1;
|
|
// pushZlbObj.LastProcessTime = DateTime.Now;
|
|
// pushZlbObj.ProcessCount = pushZlbObj.ProcessCount + 1;
|
|
// pushZlbObj.IsError = 1;
|
|
// pushZlbObj.ErrorReason = push_error_reason.ToString();
|
|
// db_Product_Conn.Updateable(pushZlbObj).UpdateColumns(u => new { u.IsProcessed, u.LastProcessTime, u.ProcessCount, u.IsError, u.ErrorReason }).ExecuteCommand();
|
|
//}
|
|
//else
|
|
//{
|
|
pushZlbObj.IsProcessed = 1;
|
|
pushZlbObj.LastProcessTime = DateTime.Now;
|
|
if (pushZlbObj.ProcessCount == null)
|
|
pushZlbObj.ProcessCount = 0;
|
|
pushZlbObj.ProcessCount++;
|
|
pushZlbObj.IsError = 0;
|
|
pushZlbObj.ErrorReason = push_error_reason.ToString();
|
|
db_Product_Conn.Updateable(pushZlbObj).UpdateColumns(u => new { u.IsProcessed, u.LastProcessTime, u.ProcessCount, u.IsError, u.ErrorReason }).WhereColumns(u => new { u.ID }).ExecuteCommand();
|
|
//}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex.Message + ex.StackTrace);
|
|
}
|
|
_logger.LogInformation("离开Push方法():Id:{Id} ,项目ID:{PrjId} at: {time}", pushZlbObj.ID, pushZlbObj.PrjId, DateTimeOffset.Now);
|
|
return list_result;
|
|
}
|
|
private List<H5IndexPrjModel> GetProjectData()
|
|
{
|
|
return db_Zlb_Conn.Ado.SqlQuery<H5IndexPrjModel>("select status,a.ID Prjid,a.area,a.AreaID,a.HouseAcquisitionDepartment as zsbm,a.CollectDecisionNo1 as year,(isnull(a.CollectDecisionNoHeadName,'')+'['+cast(a.CollectDecisionNo1 as varchar)+']'+ isnull(cast(a.CollectDecisionNo2 as varchar),'')+'号') zsjdh,dbo.get_current_state(a.ID) CurrentState,NAME,CreateRecordTime from Projects a ");
|
|
}
|
|
private List<Fhpgs> GetFHPGData()
|
|
{
|
|
return db_Zlb_Conn.Ado.SqlQuery<Fhpgs>("select d.id,e.ProjectId as PrjId ,d.AssessmentNo,e.HouseAddress,d.countValue,e.id dcbId,d.CreateTime,d.CreateUserName,1 type from InvestigateTable_Assessment d inner join InvestigateTable e on d.InvestigateTableId=e.ID where d.IsPublic=1 union all select d.id,e.ProjectId as PrjId ,AssessmentNo, e.HouseAddress, d.countValue,e.id dcbId,d.CreateTime,d.CreateUserName,2 type from NonInvestigateTable_Assessment d inner join NonResidentialInvestigateTable e on d.NonInvestigateTableID = e.ID where d.IsPublic=1 ;");
|
|
}
|
|
private List<Bcxy> GetBcxyData()
|
|
{
|
|
return db_Zlb_Conn.Ado.SqlQuery<Bcxy>("select d.id,isnull(d.CollectDecisionNoHeadName,'')+isnull(d.No1,'')+'-'+isnull(d.No2,'')+(case when (d.No3 is null or d.No3 = '') then '' else ('-'+d.No3) end ) XyNo,d.SwitchProductionWay,e.HouseAddress,d.SummationShouldCompensateMoney,e.ProjectId as PrjId,e.id dcbId,d.SignTime,1 type from ResidentialAgreement d inner join InvestigateTable e on d.InvestigateTableId=e.ID where d.IsInRecords = 1 union all select d.id,isnull(d.CollectDecisionNoHeadName, '') + isnull(d.No2, '') + '-' + isnull(d.No3, '') XyNo , d.SwitchProductionWay, e.HouseAddress, d.SummationShouldCompensateMoney, e.ProjectId as PrjId,e.id dcbId,d.SignTime,2 type from NonResidentialAgreement d inner join NonResidentialInvestigateTable e on d.NonInvestigateTableID = e.ID where d.IsInRecords = 1 ; ");
|
|
}
|
|
}
|
|
public class PushResult
|
|
{
|
|
public string Action { get; set; }
|
|
public bool IsSuccess { get; set; }
|
|
public string TableName { get; set; }
|
|
public string FailReason { get; set; }
|
|
}
|
|
}
|