Commit b89945db by Neo Turing

优化

parent 6650ff7c
......@@ -9,20 +9,21 @@ using Kivii.Lims.Transforms;
using Kivii.Linq;
using Kivii.Timeliness;
using Kivii.Timeliness.Extensions;
using Kivii.Lims.Extensions;
namespace Jst.Lims.Timeliness
{
public class ModelX
{
public RequestDto RequestDto { get; set; }
public ReportAssignResponse ResponseDto { get; set; }
public ReportAssignResponse ResponseDto { get; set; }
public Dictionary<string, object> Meta { get; set; }
public bool IsRequestFilter { get; set; }
public bool IsRequestFilter { get; set; }
public Injection Injection { get; set; }
}
public class Injection
{
......@@ -39,10 +40,10 @@ namespace Jst.Lims.Timeliness
{
}
public class Txxxxx
public class Txxxxx
{
public void OnExecution(IRequest req, IResponse res)
public void OnExecution(IRequest req, IResponse res)
{
var Model = new ModelX();
if (Model.IsRequestFilter)
......@@ -53,9 +54,9 @@ namespace Jst.Lims.Timeliness
ReportStatusType statusType = Model.RequestDto.StatusType;
List<Guid> reportKvids = Model.RequestDto.ReportKvids;
Dictionary<string, string> meta = Model.RequestDto.Meta;
if (statusType != ReportStatusType.CommissionAccept) { return; }
var nodeTitle = "委托受理";
var nodeType = NodeType.Begin;
if (statusType != ReportStatusType.DataEntry) { return; }
var nodeTitle = "数据录入";
var nodeType = NodeType.Node;
Model.Meta["NodeTitle"] = nodeTitle;
Model.Meta["NodeType"] = nodeType;
var connR = KiviiContext.GetOpenedDbConnection<Report>();
......@@ -74,9 +75,17 @@ namespace Jst.Lims.Timeliness
foreach (var report in reports)
{
if (report.CreateTime < DateTime.Parse("2023-11-06")) { continue; }//2023-11-06新规之前的报告就不绩效了
if (report.CreateTime < DateTime.Parse("2024-08-24")) { continue; }//2023-11-06新规之前的报告就不绩效了
DateTime? deadTime = null;
if (report.DeadDate != null) { deadTime = report.DeadDate.Value.AddDays(1).AddSeconds(-1); }
var queryWorkGroups = connR.From<ReportItem>();
queryWorkGroups.Where(o => o.ReportKvid == report.Kvid);
queryWorkGroups.GroupBy(o => o.WorkGroupName);
queryWorkGroups.Select(o => o.WorkGroupName);
var workGroupNames = connR.Select<string>(queryWorkGroups);
////////////////////////////////////验证当前报告是否有主节点和数据录入大节点///////////////////////////////////////////
var enableRequest = new TimelinessRequest();
enableRequest.InternalCode = "Lims";
enableRequest.NodeType = nodeType;
......@@ -85,7 +94,7 @@ namespace Jst.Lims.Timeliness
enableRequest.BizId = report.ReportId;
enableRequest.BizKvid = report.Kvid;
enableRequest.RelationTitle = report.SampleSourceBatchNumber;
if (!PolicyExtension.VerifyEnable(enableRequest, policy, policyNodes, conn)) { return; }
if (!PolicyExtension.VerifyEnable(enableRequest, policy, policyNodes, conn)) { continue; }
var existRequest = new Kivii.Timeliness.TimelinessRequest();
existRequest.InternalCode = "Lims";
existRequest.NodeTitle = nodeTitle;
......@@ -96,41 +105,8 @@ namespace Jst.Lims.Timeliness
existRequest.PlanFinishTime = report.DeadDate;
existRequest.RealStartTime = DateTime.Now;
var existTime = PolicyExtension.GetPreNode(existRequest, policy, policyNodes, conn);
if (existTime != null)//原本就有时效
if (existTime == null)
{
Model.Meta[report.ReportId] = existTime;
Console.WriteLine("---------------------Request:existTime--------------------------");
existRequest.NodeTitle = "任务分派";
existRequest.NodeType = NodeType.Node;
var existNext = PolicyExtension.GetPreNode(existRequest, policy, policyNodes, conn);
if (existNext != null)//没有下一个节点的时效,就要更新
{
Model.Meta[report.ReportId + "ExistNext"] = existNext;//有此Key说明existTime不要更新
Console.WriteLine("---------------------Request:existNext--------------------------");
return;
}
}
else
{
var verifyRequest = new TimelinessRequest();
verifyRequest.InternalCode = "Lims";
verifyRequest.NodeType = nodeType;
if (nodeType == NodeType.SubNode) { verifyRequest.NodeSubTitle = nodeTitle; }
else { verifyRequest.NodeTitle = nodeTitle; }
verifyRequest.BizId = report.ReportId;
verifyRequest.BizKvid = report.Kvid;
verifyRequest.RelationTitle = report.SampleSourceBatchNumber;
var verify = PolicyExtension.VerifyTimeline(verifyRequest, policy, policyNodes, conn);//验证是否超时
var addRequest = new Kivii.Timeliness.TimelinessRequest();
addRequest.InternalCode = "Lims";
addRequest.NodeType = nodeType;
if (nodeType == NodeType.SubNode) { addRequest.NodeSubTitle = nodeTitle; }
else { addRequest.NodeTitle = nodeTitle; }
addRequest.RelationTitle = report.SampleSourceBatchNumber;
addRequest.BizId = report.ReportId;
addRequest.BizKvid = report.Kvid;
addRequest.PlanFinishTime = deadTime;
addRequest.Metadata = new Dictionary<string, string>();
foreach (var prop in report.GetType().GetProperties())
{
try
......@@ -140,22 +116,106 @@ namespace Jst.Lims.Timeliness
var type = prop.GetType();
var value = prop.GetValue(report, null);
if (value == null) { continue; }
addRequest.Metadata[key] = value.ToString();
if (type == typeof(DateTime)) { addRequest.Metadata[key] = DateTime.Parse(value.ToString()).ToString("yyyy-MM-dd"); }
existRequest.Metadata[key] = value.ToString();
if (type == typeof(DateTime)) { existRequest.Metadata[key] = DateTime.Parse(value.ToString()).ToString("yyyy-MM-dd"); }
}
catch { continue; }
}
if (verify)
{
PolicyExtension.AddTimeliness(existRequest);
}
///////////////////////////////////////////////////////////////////////////////
if (meta.IsNullOrEmpty() || meta["Timeline"].IsNullOrEmpty())
var groupNames = new List<string>();
var roles = KiviiContext.CurrentMember.Kvid.GetTestRoles();
if (!roles.IsNullOrEmpty() && !workGroupNames.IsNullOrEmpty())
{
foreach (var role in roles)
{
if (workGroupNames.Contains(role))
{
err = new HttpError(System.Net.HttpStatusCode.Forbidden, "TimelineTimeout", "时效考核超时");
Console.WriteLine("---------------------groupNames:" + role + "--------------------------");
groupNames.Add(role);
}
addRequest.Summary = meta["Timeline"];
}
}
else
{
groupNames.Add(KiviiContext.CurrentMember.DepartmentName);
}
Model.Meta[report.ReportId + "groupNames"] = groupNames;
foreach (var role in groupNames)
{
//再获取当前登陆人所在组的信息
nodeTitle = role;//KiviiContext.CurrentMember.DepartmentName;
nodeType = NodeType.SubNode;
Model.Meta["NodeTitle"] = nodeTitle;
Model.Meta["NodeType"] = nodeType;
existRequest.InternalCode = "Lims";
existRequest.NodeTitle = nodeTitle;
existRequest.NodeType = nodeType;
existRequest.RelationTitle = report.SampleSourceBatchNumber;
existRequest.BizId = report.ReportId;
existRequest.BizKvid = report.Kvid;
existRequest.PlanFinishTime = report.DeadDate;
existRequest.RealStartTime = DateTime.Now;
existTime = PolicyExtension.GetPreNode(existRequest, policy, policyNodes, conn);
if (existTime != null)//原本就有时效
{
Model.Meta[report.ReportId + nodeTitle] = existTime;
}
else
{
var verifyRequest = new TimelinessRequest();
verifyRequest.InternalCode = "Lims";
verifyRequest.NodeType = nodeType;
if (nodeType == NodeType.SubNode) { verifyRequest.NodeSubTitle = nodeTitle; }
else { verifyRequest.NodeTitle = nodeTitle; }
verifyRequest.BizId = report.ReportId;
verifyRequest.BizKvid = report.Kvid;
verifyRequest.RelationTitle = report.SampleSourceBatchNumber;
var verify = PolicyExtension.VerifyTimeline(verifyRequest, policy, policyNodes, conn);//验证是否超时
Console.WriteLine("---------------------verify:" + verify + "--------------------------");
var addRequest = new Kivii.Timeliness.TimelinessRequest();
addRequest.InternalCode = "Lims";
addRequest.NodeType = nodeType;
if (nodeType == NodeType.SubNode) { addRequest.NodeSubTitle = nodeTitle; }
else { addRequest.NodeTitle = nodeTitle; }
addRequest.RelationTitle = report.SampleSourceBatchNumber;
addRequest.BizId = report.ReportId;
addRequest.BizKvid = report.Kvid;
addRequest.PlanFinishTime = deadTime;
addRequest.Metadata = new Dictionary<string, string>();
foreach (var prop in report.GetType().GetProperties())
{
try
{
var key = prop.Name;
if (key == "Metadata") { continue; }
var type = prop.GetType();
var value = prop.GetValue(report, null);
if (value == null) { continue; }
addRequest.Metadata[key] = value.ToString();
if (type == typeof(DateTime)) { addRequest.Metadata[key] = DateTime.Parse(value.ToString()).ToString("yyyy-MM-dd"); }
}
catch { continue; }
}
if (verify)
{
if (!meta.IsNullOrEmpty() && !meta["Timeline"].IsNullOrEmpty())
{
addRequest.Summary = meta["Timeline"];
}
else
{
addRequest.Summary = "当前时效节点超时";
}
}
Console.WriteLine("---------------------Request:addRequest--------------------------");
Model.Meta[report.ReportId + "Add"] = addRequest;//有此Key说明要创建时效
Model.Meta[report.ReportId + nodeTitle + "Add"] = addRequest;//有此Key说明要创建时效
}
}
}
......@@ -182,39 +242,26 @@ namespace Jst.Lims.Timeliness
foreach (var report in rtns.Results)
{
TimelinessRequest addRequest = null;
Timeline existNext = null;
Timeline exist = null;
if (Model.Meta.ContainsKey(report.ReportId + "Add"))
{
addRequest = Model.Meta[report.ReportId + "Add"] as TimelinessRequest;
}
else if (Model.Meta.ContainsKey(report.ReportId))
{
exist = Model.Meta[report.ReportId] as Timeline;
if (Model.Meta.ContainsKey(report.ReportId + "ExistNext"))
{
existNext = Model.Meta[report.ReportId + "ExistNext"] as Timeline;
}
}
if (addRequest != null)
List<string> groupNames = null;
if (Model.Meta.ContainsKey(report.ReportId + "groupNames"))
{
PolicyExtension.AddTimeliness(addRequest);
Console.WriteLine("---------------------Response:addRequest--------------------------");
groupNames = Model.Meta[report.ReportId + "groupNames"] as List<string>;
}
else if (exist != null && existNext == null)
if (!groupNames.IsNullOrEmpty())
{
var updateRequest = new TimelinessRequest();
updateRequest.OwnerKvid = KiviiContext.CurrentMember.DepartmentKvid;
updateRequest.OwnerName = KiviiContext.CurrentMember.DepartmentName;
updateRequest.OperatorKvid = KiviiContext.CurrentMember.Kvid;
updateRequest.OperatorName = KiviiContext.CurrentMember.FullName;
updateRequest.RealFinishTime = DateTime.Now;
if (exist.PlanFinishTime != null && exist.PlanFinishTime < updateRequest.RealFinishTime)
foreach (var role in groupNames)
{
updateRequest.Summary = "委托受理打回后重新下达超时";
addRequest = null;
if (Model.Meta.ContainsKey(report.ReportId + role + "Add"))
{
addRequest = Model.Meta[report.ReportId + role + "Add"] as TimelinessRequest;
}
if (addRequest != null)
{
PolicyExtension.AddTimeliness(addRequest);
Console.WriteLine("---------------------Response:addRequest--------------------------");
}
}
PolicyExtension.UpdateTimeline(exist, updateRequest);
Console.WriteLine("---------------------Response:updateRequest--------------------------");
}
else { continue; }
}
......
......@@ -32,6 +32,6 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("5.4.2024.8200")]
[assembly: AssemblyFileVersion("5.4.2024.8200")]
[assembly: AssemblyVersion("5.4.2024.9180")]
[assembly: AssemblyFileVersion("5.4.2024.9180")]
......@@ -103,8 +103,16 @@ namespace Jst.Lims.Timeliness
BeginDate = DateTime.Parse(BeginDate.ToString("yyyy-MM-dd"));
EndDate = DateTime.Parse(EndDate.ToString("yyyy-MM-dd"));
if (EndDate < BeginDate) throw new Exception("查询结束日期不可小于开始日期!");
var days = EndDate.Subtract(BeginDate).Days;
if (days > 92) throw new Exception("最多查询三个月的数据,您已超出日期范围上线!");
(EndDate.Subtract(BeginDate).Days > 31).ThrowIfTrue("时间跨度不得大于31天!");
#region 启用缓存,20分钟内查询条件相同不重复请求数据库
var cache = KiviiContext.GetCacheClient();
var cacheKey = KiviiContext.GetUrnKey($"{this.GetType().FullName}_Request_{BeginDate:G}_{EndDate:G}_{TimeFilter}_{Grouped}_{Urgent}_{PolicyNodeKvids.Join(",")}");
var cacheValue = cache.Get<RestfulQueryResponse<TimelineStatistic>>(cacheKey);
if (cacheValue != null)
{
return cacheValue;
}
#endregion
var rtns = new RestfulQueryResponse<TimelineStatistic>();
rtns.Results = new List<TimelineStatistic>();
......@@ -390,6 +398,7 @@ namespace Jst.Lims.Timeliness
}
rtns.Results = rtns.Results.OrderBy(o => o.SortId).ToList();
rtns.Total = rtns.Results.Count;
cache.Set(cacheKey, rtns, TimeSpan.FromMinutes(20));
return rtns;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment