Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
Jst.Domain.Lims.Timeliness.V4.5
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
陶然
Jst.Domain.Lims.Timeliness.V4.5
Commits
6650ff7c
Commit
6650ff7c
authored
Sep 03, 2024
by
Neo Turing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化升级
parent
e8ded374
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
235 additions
and
144 deletions
+235
-144
RestfulTimeliness.cs
Src/RestfulTimeliness.cs
+235
-144
No files found.
Src/RestfulTimeliness.cs
View file @
6650ff7c
...
@@ -40,12 +40,20 @@ namespace Jst.Lims.Timeliness
...
@@ -40,12 +40,20 @@ namespace Jst.Lims.Timeliness
public
TimeFilter
TimeFilter
{
get
;
set
;
}
//时间筛选
public
TimeFilter
TimeFilter
{
get
;
set
;
}
//时间筛选
public
decimal
ReportTotalQuantity
{
get
;
set
;
}
public
decimal
ReportQuantity
{
get
;
set
;
}
public
decimal
ReportQuantity
{
get
;
set
;
}
public
List
<
Guid
>
ReportKvids
{
get
;
set
;
}
public
List
<
Report
>
Reports
{
get
;
set
;
}
public
decimal
ReportNoTimelinesQuantity
{
get
;
set
;
}
public
List
<
Report
>
ReportNoTimelines
{
get
;
set
;
}
public
decimal
TimelinesQuantity
{
get
;
set
;
}
public
List
<
Timeline
>
Timelines
{
get
;
set
;
}
public
decimal
TimelineTimeoutsQuantity
{
get
;
set
;
}
public
List
<
Timeline
>
TimelineTimeouts
{
get
;
set
;
}
public
decimal
Quantity
{
get
;
set
;
}
public
decimal
Quantity
{
get
;
set
;
}
public
decimal
TimeoutQuantity
{
get
;
set
;
}
public
decimal
TimeoutQuantity
{
get
;
set
;
}
public
decimal
NormalQuantity
{
get
;
set
;
}
public
decimal
NormalQuantity
{
get
;
set
;
}
public
decimal
TimeFilterQuantity
{
get
;
set
;
}
public
decimal
TimeFilterQuantity
{
get
;
set
;
}
public
decimal
TimeFiltertTimeoutQuantity
{
get
;
set
;
}
public
DateTime
?
PlanStartTime
{
get
;
set
;
}
public
DateTime
?
PlanStartTime
{
get
;
set
;
}
public
DateTime
?
RealStartTime
{
get
;
set
;
}
public
DateTime
?
RealStartTime
{
get
;
set
;
}
...
@@ -61,6 +69,8 @@ namespace Jst.Lims.Timeliness
...
@@ -61,6 +69,8 @@ namespace Jst.Lims.Timeliness
public
List
<
TimelineStatistic
>
Details
{
get
;
set
;
}
public
List
<
TimelineStatistic
>
Details
{
get
;
set
;
}
}
}
[
Api
(
Description
=
"报告数据录入/报告编制时效统计"
)]
[
Api
(
Description
=
"报告数据录入/报告编制时效统计"
)]
...
@@ -102,186 +112,267 @@ namespace Jst.Lims.Timeliness
...
@@ -102,186 +112,267 @@ namespace Jst.Lims.Timeliness
var
connL
=
KiviiContext
.
GetOpenedDbConnection
<
Report
>();
var
connL
=
KiviiContext
.
GetOpenedDbConnection
<
Report
>();
var
conn
=
KiviiContext
.
GetOpenedDbConnection
<
Timeline
>();
var
conn
=
KiviiContext
.
GetOpenedDbConnection
<
Timeline
>();
var
results
=
new
List
<
TimelineStatistic
>();
List
<
ReportItem
>
reportItems
=
null
;
List
<
ReportItem
>
reportItems
=
null
;
List
<
Report
>
reports
=
null
;
List
<
Timeline
>
timelines
=
null
;
if
(
connL
.
ConnectionString
==
conn
.
ConnectionString
)
//同一个数据库下的情况 用leftjoin联合查询
if
(
connL
.
ConnectionString
==
conn
.
ConnectionString
)
//同一个数据库下的情况 用leftjoin联合查询
{
{
//connL.Close();
//connL.Close();
connL
=
conn
;
connL
=
conn
;
var
queryReport
=
conn
.
From
<
Report
>();
queryReport
.
Where
(
o
=>
o
.
DeadDate
>=
BeginDate
&&
o
.
DeadDate
<=
EndDate
);
queryReport
.
Select
(
o
=>
new
{
o
.
ReportId
,
o
.
DeadDate
,
o
.
Kvid
,
o
.
DealDate
,
o
.
PreparationDate
,
o
.
IssueDate
,
o
.
ReviewDate
,
o
.
UrgentRate
,
o
.
CreateTime
});
if
(
Urgent
!=
null
)
{
if
(
Urgent
.
Value
)
queryReport
.
And
(
o
=>
o
.
UrgentRate
>
1
);
else
queryReport
.
And
(
o
=>
o
.
UrgentRate
==
1
);
}
reports
=
conn
.
Select
(
queryReport
);
//Console.WriteLine($"---------------reports:{reports.Count}--------------------");
if
(
reports
.
IsNullOrEmpty
())
return
rtns
;
//根据条件查出所有报告的Kvid
//根据条件查出所有报告的Kvid
var
queryReportKvid
=
conn
.
From
<
Report
>();
var
queryReportKvid
=
conn
.
From
<
Report
>();
queryReportKvid
.
Select
(
o
=>
o
.
Kvid
);
queryReportKvid
.
Where
(
o
=>
o
.
DeadDate
>=
BeginDate
&&
o
.
DeadDate
<=
EndDate
);
queryReportKvid
.
Where
(
o
=>
o
.
DeadDate
>=
BeginDate
&&
o
.
DeadDate
<=
EndDate
);
if
(
Urgent
!=
null
)
{
if
(
Urgent
.
Value
)
queryReportKvid
.
And
(
o
=>
o
.
UrgentRate
>
1
);
else
queryReportKvid
.
And
(
o
=>
o
.
UrgentRate
==
1
);
}
queryReportKvid
.
Select
(
o
=>
o
.
Kvid
);
//一次性查出日期范围内的报告的项目
//一次性查出日期范围内的报告的项目
var
queryReportItem
=
conn
.
From
<
ReportItem
>();
var
queryReportItem
=
conn
.
From
<
ReportItem
>();
queryReportItem
.
Select
(
o
=>
new
{
o
.
ReportKvid
,
o
.
WorkGroupName
,
o
.
Status
,
o
.
Type
});
queryReportItem
.
Select
(
o
=>
new
{
o
.
ReportKvid
,
o
.
WorkGroupName
,
o
.
Status
,
o
.
Type
});
queryReportItem
.
Where
(
o
=>
Sql
.
In
(
o
.
ReportKvid
,
queryReportKvid
));
queryReportItem
.
Where
(
o
=>
Sql
.
In
(
o
.
ReportKvid
,
queryReportKvid
));
reportItems
=
conn
.
Select
(
queryReportItem
);
reportItems
=
conn
.
Select
(
queryReportItem
);
reportItems
=
reportItems
.
filterReportItem
();
reportItems
=
reportItems
.
filterReportItem
();
//Console.WriteLine($"---------------reportItems:{reportItems.Count}--------------------");
var
query
=
conn
.
From
<
Report
>();
query
.
LeftJoin
<
Timeline
>((
r
,
t
)
=>
r
.
Kvid
==
t
.
BizKvid
);
var
queryBizKvid
=
conn
.
From
<
Report
>();
if
(
PolicyNodeKvids
.
IsNullOrEmpty
())
query
.
Where
<
Timeline
>(
o
=>
o
.
PreKvid
==
Guid
.
Empty
&&
o
.
RootKvid
==
o
.
Kvid
);
//不指定节点,就查根节点
queryBizKvid
.
Where
(
o
=>
o
.
DeadDate
>=
BeginDate
&&
o
.
DeadDate
<=
EndDate
);
else
query
.
Where
<
Timeline
>(
o
=>
Sql
.
In
(
o
.
PolicyNodeKvid
,
PolicyNodeKvids
)
&&
o
.
PreKvid
!=
Guid
.
Empty
);
//指定节点,不能包含根节点
query
.
Where
<
Report
>(
o
=>
o
.
DeadDate
>=
BeginDate
&&
o
.
DeadDate
<=
EndDate
&&
Sql
.
In
(
o
.
TypeEx
,
"W"
,
"Z"
));
//只查看不加急并且要求完成日期在所选范围内的时效记录
query
.
And
<
Report
>(
o
=>
!
o
.
ReportId
.
ToLower
().
Contains
(
"test"
));
if
(
Urgent
!=
null
)
if
(
Urgent
!=
null
)
{
{
if
(
Urgent
.
Value
)
query
.
And
<
Report
>
(
o
=>
o
.
UrgentRate
>
1
);
if
(
Urgent
.
Value
)
query
BizKvid
.
And
(
o
=>
o
.
UrgentRate
>
1
);
else
query
.
And
<
Report
>
(
o
=>
o
.
UrgentRate
==
1
);
else
query
BizKvid
.
And
(
o
=>
o
.
UrgentRate
==
1
);
}
}
query
.
And
<
Report
>(
o
=>
(
o
.
BizType
!=
"G0"
&&
o
.
BizType
!=
"G1"
)
||
o
.
BizType
==
null
);
queryBizKvid
.
Select
(
o
=>
o
.
Kvid
);
query
.
OrderBy
<
Timeline
>(
o
=>
o
.
PolicyNodeKvid
);
var
queryTimeline
=
conn
.
From
<
Timeline
>();
query
.
ThenBy
<
Report
>(
o
=>
o
.
DeadDate
);
if
(
PolicyNodeKvids
.
IsNullOrEmpty
())
queryTimeline
.
And
<
Timeline
>(
o
=>
o
.
PreKvid
==
Guid
.
Empty
&&
o
.
RootKvid
==
o
.
Kvid
);
//不指定节点,就查根节点
query
.
Select
<
Timeline
,
Report
>((
o
,
r
)
=>
new
else
queryTimeline
.
And
<
Timeline
>(
o
=>
Sql
.
In
(
o
.
PolicyNodeKvid
,
PolicyNodeKvids
)
&&
o
.
PreKvid
!=
Guid
.
Empty
);
//指定节点,不能包含根节点
{
queryTimeline
.
And
(
o
=>
Sql
.
In
(
o
.
BizKvid
,
queryBizKvid
));
o
.
Kvid
,
timelines
=
conn
.
Select
(
queryTimeline
);
o
.
RootKvid
,
if
(
timelines
.
IsNullOrEmpty
())
return
rtns
;
o
.
ParentKvid
,
//Console.WriteLine($"---------------timelines:{timelines.Count}--------------------");
o
.
PolicyNodeKvid
,
o
.
OperatorName
,
o
.
OwnerKvid
,
o
.
OwnerName
,
r
.
ReportId
,
ReportKvid
=
r
.
Kvid
,
o
.
Title
,
o
.
PlanStartTime
,
o
.
RealStartTime
,
o
.
PlanFinishTime
,
o
.
RealFinishTime
,
o
.
Summary
,
o
.
Remark
,
ReportDealDate
=
r
.
DealDate
,
ReportDeadDate
=
r
.
DeadDate
,
ReportPreparationDate
=
r
.
PreparationDate
,
ReportReviewDate
=
r
.
ReviewDate
,
ReportIssueDate
=
r
.
IssueDate
,
ReportUrgentRate
=
r
.
UrgentRate
});
results
=
conn
.
Select
<
TimelineStatistic
>(
query
);
}
}
if
(
Grouped
)
if
(
PolicyNodeKvids
.
IsNullOrEmpty
())
//不按照节点Group统计,按照整个报告的时效进行统计
{
{
if
(
PolicyNodeKvids
.
IsNullOrEmpty
())
//不按照节点Group统计,按照整个报告的时效进行统计
var
group
=
reports
.
GroupBy
(
o
=>
o
.
DeadDate
);
//Console.WriteLine($"---------------group:{group.Count()}--------------------");
foreach
(
var
kv
in
group
)
{
{
var
group
=
results
.
GroupBy
(
o
=>
o
.
ReportDeadDate
)
;
DateTime
?
filterTime
=
null
;
foreach
(
var
kv
in
group
)
switch
(
TimeFilter
)
{
{
DateTime
?
filterTime
=
null
;
case
TimeFilter
.
Unsupported
:
switch
(
TimeFilter
)
filterTime
=
null
;
{
break
;
case
TimeFilter
.
Unsupported
:
case
TimeFilter
.
TwoPM
:
filterTime
=
null
;
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 14:00:00"
));
break
;
break
;
case
TimeFilter
.
TwoPM
:
case
TimeFilter
.
ThreePM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 14:00:00"
));
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 15:00:00"
));
break
;
break
;
case
TimeFilter
.
ThreePM
:
case
TimeFilter
.
FourPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 15:00:00"
));
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 16:00:00"
));
break
;
break
;
case
TimeFilter
.
FourPM
:
case
TimeFilter
.
FourHalfPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 16:00:00"
));
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 16:30:00"
));
break
;
break
;
case
TimeFilter
.
FourHalfPM
:
case
TimeFilter
.
FiveHalfPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 16:30:00"
));
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 17:30:00"
));
break
;
break
;
case
TimeFilter
.
FiveHalfPM
:
case
TimeFilter
.
SixPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 17:30:00"
));
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 18:00:00"
));
break
;
break
;
case
TimeFilter
.
SixPM
:
default
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 18:00:00"
));
filterTime
=
null
;
break
;
break
;
default
:
}
filterTime
=
null
;
var
currentReports
=
kv
.
ToList
();
break
;
var
currentTimelines
=
timelines
.
Where
(
o
=>
Sql
.
In
(
o
.
BizKvid
,
currentReports
.
ConvertAll
(
p
=>
p
.
Kvid
))).
ToList
();
}
var
total
=
new
TimelineStatistic
();
var
total
=
new
TimelineStatistic
();
total
.
ReportDeadDate
=
kv
.
Key
;
total
.
ReportDeadDate
=
kv
.
Key
;
//total.ReportQuantity = currentReports.Count();
total
.
Quantity
=
kv
.
Count
();
total
.
Quantity
=
currentTimelines
.
IsNullOrEmpty
()
?
0
:
currentTimelines
.
Count
();
total
.
TimeFilter
=
TimeFilter
;
total
.
TimeFilter
=
TimeFilter
;
total
.
Details
=
new
List
<
TimelineStatistic
>();
total
.
Details
=
new
List
<
TimelineStatistic
>();
foreach
(
var
item
in
kv
)
if
(
currentTimelines
.
IsNullOrEmpty
())
{
total
.
ReportNoTimelines
=
currentReports
;
}
else
{
foreach
(
var
report
in
kv
)
{
{
var
realFinishTime
=
item
.
RealFinishTime
;
var
item
=
currentTimelines
.
FirstOrDefault
(
o
=>
o
.
BizKvid
==
report
.
Kvid
);
if
(
realFinishTime
==
null
)
realFinishTime
=
DateTime
.
Now
;
if
(
item
==
null
)
if
(
item
.
PlanFinishTime
!=
item
.
ReportDeadDate
.
Value
.
AddDays
(
1
).
AddSeconds
(-
1
))
item
.
PlanFinishTime
=
item
.
ReportDeadDate
.
Value
.
AddDays
(
1
).
AddSeconds
(-
1
);
{
if
(
item
.
PlanFinishTime
!=
null
&&
realFinishTime
>
item
.
PlanFinishTime
)
total
.
TimeoutQuantity
++;
if
(
total
.
ReportNoTimelines
==
null
)
total
.
ReportNoTimelines
=
new
List
<
Report
>();
else
total
.
NormalQuantity
++;
total
.
ReportNoTimelines
.
Add
(
report
);
if
(
filterTime
!=
null
&&
item
.
RealFinishTime
!=
null
&&
item
.
RealFinishTime
<=
filterTime
)
total
.
TimeFilterQuantity
++;
}
else
item
.
TimeoutQuantity
=
1
;
else
{
if
(
total
.
Reports
==
null
)
total
.
Reports
=
new
List
<
Report
>();
total
.
Reports
.
Add
(
report
);
if
(
total
.
Timelines
==
null
)
total
.
Timelines
=
new
List
<
Timeline
>();
if
(
total
.
TimelineTimeouts
==
null
)
total
.
TimelineTimeouts
=
new
List
<
Timeline
>();
var
realFinishTime
=
item
.
RealFinishTime
;
if
(
realFinishTime
==
null
)
realFinishTime
=
DateTime
.
Now
;
if
(
item
.
PlanFinishTime
!=
report
.
DeadDate
.
Value
.
AddDays
(
1
).
AddSeconds
(-
1
))
item
.
PlanFinishTime
=
report
.
DeadDate
.
Value
.
AddDays
(
1
).
AddSeconds
(-
1
);
if
(
item
.
PlanFinishTime
!=
null
&&
realFinishTime
>
item
.
PlanFinishTime
)
total
.
TimelineTimeouts
.
Add
(
item
);
else
total
.
Timelines
.
Add
(
item
);
//if (filterTime != null && item.RealFinishTime != null && item.RealFinishTime <= filterTime) total.TimeFilterQuantity++;
//else item.TimeoutQuantity = 1;
}
}
}
total
.
Details
=
kv
.
ToList
();
rtns
.
Results
.
Add
(
total
);
}
}
rtns
.
Results
.
Add
(
total
);
}
}
else
//按照节点Group
}
else
//按照节点Group
{
List
<
Report
>
results
=
new
List
<
Report
>();
if
(
reportItems
.
IsNullOrEmpty
())
return
rtns
;
var
groupReportItem
=
reportItems
.
GroupBy
(
o
=>
o
.
WorkGroupName
);
//Console.WriteLine($"---------------groupReportItem:{groupReportItem.Count()}--------------------");
foreach
(
var
kv
in
groupReportItem
)
{
{
var
group
=
results
.
GroupBy
(
o
=>
new
{
o
.
PolicyNodeKvid
,
o
.
ReportDeadDate
,
o
.
Title
});
var
repItems
=
kv
.
ToList
();
foreach
(
var
kv
in
group
)
var
repKvids
=
repItems
.
ConvertAll
(
o
=>
o
.
ReportKvid
).
Distinct
().
ToList
();
//Console.WriteLine($"---------------repKvids:{repKvids.Count()}--------------------");
var
currentReports
=
reports
.
Where
(
o
=>
repKvids
.
Contains
(
o
.
Kvid
)).
ToList
();
//Console.WriteLine($"---------------currentReports:{kv.Key}:{currentReports.Count()}--------------------");
foreach
(
var
item
in
currentReports
)
{
{
var
reportGp
=
new
Report
();
reportGp
.
PopulateWith
(
item
);
reportGp
.
DeadDate
=
DateTime
.
Parse
(
item
.
DeadDate
.
Value
.
ToString
(
"yyyy-MM-dd"
));
reportGp
.
Category
=
kv
.
Key
;
results
.
Add
(
reportGp
);
}
}
//Console.WriteLine($"---------------results:{results.Count()}--------------------");
DateTime
?
filterTime
=
null
;
var
titles
=
timelines
.
ConvertAll
(
x
=>
x
.
Title
).
Distinct
().
ToList
();
switch
(
TimeFilter
)
var
group
=
results
.
GroupBy
(
o
=>
new
{
o
.
DeadDate
,
o
.
Category
});
{
//Console.WriteLine($"---------------group:{group.Count()}--------------------");
case
TimeFilter
.
Unsupported
:
foreach
(
var
kv
in
group
)
filterTime
=
null
;
{
break
;
case
TimeFilter
.
TwoPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
ReportDeadDate
.
Value
.
ToString
(
"yyyy-MM-dd 14:00:00"
));
break
;
case
TimeFilter
.
ThreePM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
ReportDeadDate
.
Value
.
ToString
(
"yyyy-MM-dd 15:00:00"
));
break
;
case
TimeFilter
.
FourPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
ReportDeadDate
.
Value
.
ToString
(
"yyyy-MM-dd 16:00:00"
));
break
;
case
TimeFilter
.
FourHalfPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
ReportDeadDate
.
Value
.
ToString
(
"yyyy-MM-dd 16:30:00"
));
break
;
case
TimeFilter
.
FiveHalfPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
ReportDeadDate
.
Value
.
ToString
(
"yyyy-MM-dd 17:30:00"
));
break
;
case
TimeFilter
.
SixPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
ReportDeadDate
.
Value
.
ToString
(
"yyyy-MM-dd 18:00:00"
));
break
;
default
:
filterTime
=
null
;
break
;
}
var
currtReportItems
=
reportItems
.
Where
(
o
=>
o
.
WorkGroupName
==
kv
.
Key
.
Title
).
ToList
();
DateTime
?
filterTime
=
null
;
//根据检验组分组统计
switch
(
TimeFilter
)
var
reportCount
=
currtReportItems
.
ConvertAll
(
o
=>
o
.
ReportKvid
).
Distinct
().
Count
();
{
var
reportkvids
=
currtReportItems
.
ConvertAll
(
o
=>
o
.
ReportKvid
).
Distinct
().
ToList
();
case
TimeFilter
.
Unsupported
:
var
total
=
new
TimelineStatistic
();
filterTime
=
null
;
total
.
PolicyNodeKvid
=
kv
.
Key
.
PolicyNodeKvid
;
break
;
total
.
ReportDeadDate
=
kv
.
Key
.
ReportDeadDate
;
case
TimeFilter
.
TwoPM
:
total
.
Title
=
kv
.
Key
.
Title
;
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
DeadDate
.
Value
.
ToString
(
"yyyy-MM-dd 14:00:00"
));
total
.
ReportQuantity
=
reportCount
;
break
;
total
.
ReportKvids
=
reportkvids
;
case
TimeFilter
.
ThreePM
:
total
.
Quantity
=
kv
.
Count
();
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
DeadDate
.
Value
.
ToString
(
"yyyy-MM-dd 15:00:00"
));
total
.
TimeFilter
=
TimeFilter
;
break
;
total
.
Details
=
new
List
<
TimelineStatistic
>();
case
TimeFilter
.
FourPM
:
foreach
(
var
item
in
kv
)
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
DeadDate
.
Value
.
ToString
(
"yyyy-MM-dd 16:00:00"
));
break
;
case
TimeFilter
.
FourHalfPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
DeadDate
.
Value
.
ToString
(
"yyyy-MM-dd 16:30:00"
));
break
;
case
TimeFilter
.
FiveHalfPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
DeadDate
.
Value
.
ToString
(
"yyyy-MM-dd 17:30:00"
));
break
;
case
TimeFilter
.
SixPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
DeadDate
.
Value
.
ToString
(
"yyyy-MM-dd 18:00:00"
));
break
;
default
:
filterTime
=
null
;
break
;
}
var
currentReports
=
kv
.
ToList
();
//Console.WriteLine($"---------------currentReports:{kv.Key.DeadDate.Value.ToString("yyyy-MM-dd")} {kv.Key.Category}: {currentReports.Count()}--------------------");
var
reportKvids
=
currentReports
.
ConvertAll
(
o
=>
o
.
Kvid
);
var
currtReportItems
=
reportItems
.
Where
(
o
=>
o
.
WorkGroupName
==
kv
.
Key
.
Category
).
ToList
();
//根据检验组分组统计
var
reportCount
=
currtReportItems
.
ConvertAll
(
o
=>
o
.
ReportKvid
).
Where
(
o
=>
reportKvids
.
Contains
(
o
)).
Distinct
().
Count
();
var
reportkvids
=
currtReportItems
.
ConvertAll
(
o
=>
o
.
ReportKvid
).
Where
(
o
=>
reportKvids
.
Contains
(
o
)).
Distinct
().
ToList
();
var
currentTimelines
=
timelines
.
Where
(
o
=>
Sql
.
In
(
o
.
BizKvid
,
reportKvids
)
&&
o
.
Title
==
kv
.
Key
.
Category
).
ToList
();
var
total
=
new
TimelineStatistic
();
total
.
ReportDeadDate
=
kv
.
Key
.
DeadDate
;
total
.
Title
=
kv
.
Key
.
Category
;
total
.
ReportTotalQuantity
=
currentReports
.
Count
();
total
.
Quantity
=
currentTimelines
.
IsNullOrEmpty
()
?
0
:
currentTimelines
.
Count
();
total
.
TimeFilter
=
TimeFilter
;
total
.
Details
=
new
List
<
TimelineStatistic
>();
total
.
Reports
=
new
List
<
Report
>();
total
.
Timelines
=
new
List
<
Timeline
>();
total
.
TimelineTimeouts
=
new
List
<
Timeline
>();
total
.
ReportNoTimelines
=
new
List
<
Report
>();
if
(
currentTimelines
.
IsNullOrEmpty
())
{
//Console.WriteLine($"---------------currentTimelines:IsNullOrEmpty--------------------");
total
.
ReportNoTimelines
.
AddRange
(
currentReports
);
}
else
{
//Console.WriteLine($"---------------currentTimelines:{currentTimelines.Count()}--------------------");
foreach
(
var
report
in
kv
)
{
{
var
realFinishTime
=
item
.
RealFinishTime
;
//Console.WriteLine($"---------------report:{report.ReportId}--------------------");
if
(
realFinishTime
==
null
)
realFinishTime
=
DateTime
.
Now
;
var
item
=
currentTimelines
.
FirstOrDefault
(
o
=>
o
.
BizKvid
==
report
.
Kvid
&&
o
.
Title
==
report
.
Category
);
//if (item.PlanFinishTime != item.ReportDeadDate.Value.AddDays(1).AddSeconds(-1)) item.PlanFinishTime = item.ReportDeadDate.Value.AddDays(1).AddSeconds(-1);
if
(
item
==
null
)
if
(
item
.
PlanFinishTime
!=
null
&&
realFinishTime
>
item
.
PlanFinishTime
)
total
.
TimeoutQuantity
++;
{
else
total
.
NormalQuantity
++;
//Console.WriteLine($"---------------item:null--------------------");
if
(
filterTime
!=
null
&&
item
.
RealFinishTime
!=
null
&&
item
.
RealFinishTime
<=
filterTime
)
total
.
TimeFilterQuantity
++;
total
.
ReportNoTimelines
.
Add
(
report
);
else
item
.
TimeoutQuantity
=
1
;
}
else
{
//Console.WriteLine($"---------------item:{item.BizId} {item.Title}--------------------");
total
.
Reports
.
Add
(
report
);
var
realFinishTime
=
item
.
RealFinishTime
;
if
(
realFinishTime
==
null
)
realFinishTime
=
DateTime
.
Now
;
if
(
filterTime
==
null
)
{
if
(
item
.
PlanFinishTime
!=
report
.
DeadDate
.
Value
.
AddDays
(
1
).
AddSeconds
(-
1
))
item
.
PlanFinishTime
=
report
.
DeadDate
.
Value
.
AddDays
(
1
).
AddSeconds
(-
1
);
if
(
item
.
PlanFinishTime
!=
null
&&
realFinishTime
>
item
.
PlanFinishTime
)
total
.
TimelineTimeouts
.
Add
(
item
);
else
total
.
Timelines
.
Add
(
item
);
}
else
{
if
(
realFinishTime
<=
filterTime
)
total
.
Timelines
.
Add
(
item
);
else
total
.
TimelineTimeouts
.
Add
(
item
);
}
}
}
}
total
.
Details
=
kv
.
ToList
();
rtns
.
Results
.
Add
(
total
);
}
}
total
.
ReportQuantity
=
total
.
Reports
.
Count
;
total
.
TimelinesQuantity
=
total
.
Timelines
.
Count
;
total
.
TimelineTimeoutsQuantity
=
total
.
TimelineTimeouts
.
Count
;
total
.
ReportNoTimelinesQuantity
=
total
.
ReportNoTimelines
.
Count
;
if
(
titles
.
Contains
(
total
.
Title
))
rtns
.
Results
.
Add
(
total
);
}
}
}
}
else
rtns
.
Results
=
results
;
//按照指定顺序排序
//按照指定顺序排序
foreach
(
var
rtn
in
rtns
.
Results
)
foreach
(
var
rtn
in
rtns
.
Results
)
{
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment