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
e8ded374
Commit
e8ded374
authored
Aug 20, 2024
by
Neo Turing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化
parent
65334be3
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
487 additions
and
3 deletions
+487
-3
Class1.cs
Src/Class1.cs
+232
-0
Jst.Domain.Lims.Timeliness.V4.5.csproj.user
Src/Jst.Domain.Lims.Timeliness.V4.5.csproj.user
+7
-0
AssemblyInfo.cs
Src/Properties/AssemblyInfo.cs
+2
-2
RestfulTimeliness.cs
Src/RestfulTimeliness.cs
+246
-1
No files found.
Src/Class1.cs
0 → 100644
View file @
e8ded374
using
Kivii.Timeliness.Entities
;
using
Kivii.Web
;
using
Kivii
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
Kivii.Lims.Entities
;
using
Kivii.Lims.Transforms
;
using
Kivii.Linq
;
using
Kivii.Timeliness
;
using
Kivii.Timeliness.Extensions
;
namespace
Jst.Lims.Timeliness
{
public
class
ModelX
{
public
RequestDto
RequestDto
{
get
;
set
;
}
public
ReportAssignResponse
ResponseDto
{
get
;
set
;
}
public
Dictionary
<
string
,
object
>
Meta
{
get
;
set
;
}
public
bool
IsRequestFilter
{
get
;
set
;
}
public
Injection
Injection
{
get
;
set
;
}
}
public
class
Injection
{
public
void
RunResponseFilter
()
{
}
}
public
class
RequestDto
{
public
ReportStatusType
StatusType
{
get
;
set
;
}
public
List
<
Guid
>
ReportKvids
{
get
;
set
;
}
public
Dictionary
<
string
,
string
>
Meta
{
get
;
set
;
}
}
public
class
ResponseDto
{
}
public
class
Txxxxx
{
public
void
OnExecution
(
IRequest
req
,
IResponse
res
)
{
var
Model
=
new
ModelX
();
if
(
Model
.
IsRequestFilter
)
{
HttpError
err
=
null
;
try
{
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
;
Model
.
Meta
[
"NodeTitle"
]
=
nodeTitle
;
Model
.
Meta
[
"NodeType"
]
=
nodeType
;
var
connR
=
KiviiContext
.
GetOpenedDbConnection
<
Report
>();
var
reports
=
connR
.
Select
<
Report
>(
o
=>
Sql
.
In
(
o
.
Kvid
,
reportKvids
));
if
(
reports
.
IsNullOrEmpty
())
{
return
;
}
var
conn
=
KiviiContext
.
GetOpenedDbConnection
<
Policy
>();
var
queryPolicy
=
conn
.
From
<
Policy
>();
queryPolicy
.
Where
(
o
=>
o
.
InternalCode
==
"Lims"
&&
o
.
Enabled
==
true
);
var
policys
=
conn
.
Select
(
queryPolicy
);
if
(
policys
.
IsNullOrEmpty
())
{
return
;
}
if
(
policys
.
Count
()
>
1
)
{
throw
new
Exception
(
"存在多个时效策略数据,请核查时效策略表!"
);
}
var
policy
=
policys
[
0
];
conn
.
InitEntityType
<
PolicyNode
>();
var
policyNodes
=
conn
.
Select
<
PolicyNode
>(
o
=>
o
.
PolicyKvid
==
policy
.
Kvid
);
if
(
policyNodes
.
IsNullOrEmpty
())
{
return
;
}
foreach
(
var
report
in
reports
)
{
if
(
report
.
CreateTime
<
DateTime
.
Parse
(
"2023-11-06"
))
{
continue
;
}
//2023-11-06新规之前的报告就不绩效了
DateTime
?
deadTime
=
null
;
if
(
report
.
DeadDate
!=
null
)
{
deadTime
=
report
.
DeadDate
.
Value
.
AddDays
(
1
).
AddSeconds
(-
1
);
}
var
enableRequest
=
new
TimelinessRequest
();
enableRequest
.
InternalCode
=
"Lims"
;
enableRequest
.
NodeType
=
nodeType
;
if
(
nodeType
==
NodeType
.
SubNode
)
{
enableRequest
.
NodeSubTitle
=
nodeTitle
;
}
else
{
enableRequest
.
NodeTitle
=
nodeTitle
;
}
enableRequest
.
BizId
=
report
.
ReportId
;
enableRequest
.
BizKvid
=
report
.
Kvid
;
enableRequest
.
RelationTitle
=
report
.
SampleSourceBatchNumber
;
if
(!
PolicyExtension
.
VerifyEnable
(
enableRequest
,
policy
,
policyNodes
,
conn
))
{
return
;
}
var
existRequest
=
new
Kivii
.
Timeliness
.
TimelinessRequest
();
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
;
var
existTime
=
PolicyExtension
.
GetPreNode
(
existRequest
,
policy
,
policyNodes
,
conn
);
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
{
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
())
{
err
=
new
HttpError
(
System
.
Net
.
HttpStatusCode
.
Forbidden
,
"TimelineTimeout"
,
"时效考核超时"
);
}
addRequest
.
Summary
=
meta
[
"Timeline"
];
}
Console
.
WriteLine
(
"---------------------Request:addRequest--------------------------"
);
Model
.
Meta
[
report
.
ReportId
+
"Add"
]
=
addRequest
;
//有此Key说明要创建时效
}
}
Model
.
Injection
.
RunResponseFilter
();
return
;
}
catch
{
}
finally
{
if
(
err
!=
null
)
{
throw
err
;
}
}
}
else
{
try
{
ReportAssignResponse
rtns
=
Model
.
ResponseDto
as
ReportAssignResponse
;
if
(
rtns
==
null
)
{
return
;
}
var
th
=
KiviiContext
.
NewThread
(()
=>
{
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
)
{
PolicyExtension
.
AddTimeliness
(
addRequest
);
Console
.
WriteLine
(
"---------------------Response:addRequest--------------------------"
);
}
else
if
(
exist
!=
null
&&
existNext
==
null
)
{
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
)
{
updateRequest
.
Summary
=
"委托受理打回后重新下达超时"
;
}
PolicyExtension
.
UpdateTimeline
(
exist
,
updateRequest
);
Console
.
WriteLine
(
"---------------------Response:updateRequest--------------------------"
);
}
else
{
continue
;
}
}
});
th
.
Start
();
return
;
}
catch
{
}
}
return
;
}
}
}
Src/Jst.Domain.Lims.Timeliness.V4.5.csproj.user
0 → 100644
View file @
e8ded374
<?xml version="1.0" encoding="utf-8"?>
<Project
ToolsVersion=
"Current"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<PropertyGroup>
<ProjectView>
ProjectFiles
</ProjectView>
</PropertyGroup>
</Project>
\ No newline at end of file
Src/Properties/AssemblyInfo.cs
View file @
e8ded374
...
@@ -32,6 +32,6 @@ using System.Runtime.InteropServices;
...
@@ -32,6 +32,6 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("5.4.2024.
6
200")]
[assembly: AssemblyVersion("5.4.2024.
8
200")]
[assembly: AssemblyFileVersion("5.4.2024.
6
200")]
[assembly: AssemblyFileVersion("5.4.2024.
8
200")]
Src/RestfulTimeliness.cs
View file @
e8ded374
using
Kivii
;
using
Kivii
;
using
Kivii.Lims.Entities
;
using
Kivii.Lims.Entities
;
using
Kivii.Linq
;
using
Kivii.Linq
;
using
Kivii.Lims.Extensions
;
using
Kivii.Timeliness.Entities
;
using
Kivii.Timeliness.Entities
;
using
Kivii.Web
;
using
Kivii.Web
;
using
System
;
using
System
;
...
@@ -14,6 +15,7 @@ namespace Jst.Lims.Timeliness
...
@@ -14,6 +15,7 @@ namespace Jst.Lims.Timeliness
[
Api
(
Description
=
"时效统计"
)]
[
Api
(
Description
=
"时效统计"
)]
public
class
TimelineStatistic
public
class
TimelineStatistic
{
{
public
int
SortId
{
get
;
set
;
}
public
Guid
Kvid
{
get
;
set
;
}
public
Guid
Kvid
{
get
;
set
;
}
public
Guid
PolicyNodeKvid
{
get
;
set
;
}
public
Guid
PolicyNodeKvid
{
get
;
set
;
}
...
@@ -28,15 +30,18 @@ namespace Jst.Lims.Timeliness
...
@@ -28,15 +30,18 @@ namespace Jst.Lims.Timeliness
public
Guid
OwnerKvid
{
get
;
set
;
}
//当前节点所属部门
public
Guid
OwnerKvid
{
get
;
set
;
}
//当前节点所属部门
public
string
ReportId
{
get
;
set
;
}
//报告信息
public
string
ReportId
{
get
;
set
;
}
//报告信息
public
Guid
ReportKvid
{
get
;
set
;
}
//报告信息
public
string
Title
{
get
;
set
;
}
//节点信息
public
string
Title
{
get
;
set
;
}
//节点信息
public
string
Summary
{
get
;
set
;
}
public
string
Summary
{
get
;
set
;
}
public
string
Remark
{
get
;
set
;
}
public
string
Remark
{
get
;
set
;
}
public
TimeFilter
TimeFilter
{
get
;
set
;
}
//时间筛选
public
TimeFilter
TimeFilter
{
get
;
set
;
}
//时间筛选
public
decimal
ReportQuantity
{
get
;
set
;
}
public
List
<
Guid
>
ReportKvids
{
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
;
}
...
@@ -60,6 +65,246 @@ namespace Jst.Lims.Timeliness
...
@@ -60,6 +65,246 @@ namespace Jst.Lims.Timeliness
[
Api
(
Description
=
"报告数据录入/报告编制时效统计"
)]
[
Api
(
Description
=
"报告数据录入/报告编制时效统计"
)]
[
RequiresAnyRole
(
SystemRoles
.
Everyone
)]
[
RequiresAnyRole
(
SystemRoles
.
Everyone
)]
public
class
TimelineStatisticDataEntry2
:
RestfulExecution
<
TimelineStatistic
>
{
public
List
<
Guid
>
PolicyNodeKvids
{
get
;
set
;
}
/// <summary>
/// 统计的开始日期
/// </summary>
public
DateTime
BeginDate
{
get
;
set
;
}
/// <summary>
/// 统计的结束日期
/// </summary>
public
DateTime
EndDate
{
get
;
set
;
}
public
TimeFilter
TimeFilter
{
get
;
set
;
}
public
bool
Grouped
{
get
;
set
;
}
public
bool
?
Urgent
{
get
;
set
;
}
public
override
object
OnExecution
(
IRequest
req
,
IResponse
res
)
{
int
monthDay
=
DateTime
.
DaysInMonth
(
DateTime
.
Now
.
Year
,
DateTime
.
Now
.
Month
);
if
(
BeginDate
==
DateTime
.
MinValue
)
BeginDate
=
new
DateTime
(
DateTime
.
Now
.
Year
,
DateTime
.
Now
.
Month
,
1
);
if
(
EndDate
==
DateTime
.
MinValue
)
EndDate
=
new
DateTime
(
DateTime
.
Now
.
Year
,
DateTime
.
Now
.
Month
,
monthDay
);
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
(
"最多查询三个月的数据,您已超出日期范围上线!"
);
var
rtns
=
new
RestfulQueryResponse
<
TimelineStatistic
>();
rtns
.
Results
=
new
List
<
TimelineStatistic
>();
var
connL
=
KiviiContext
.
GetOpenedDbConnection
<
Report
>();
var
conn
=
KiviiContext
.
GetOpenedDbConnection
<
Timeline
>();
var
results
=
new
List
<
TimelineStatistic
>();
List
<
ReportItem
>
reportItems
=
null
;
if
(
connL
.
ConnectionString
==
conn
.
ConnectionString
)
//同一个数据库下的情况 用leftjoin联合查询
{
//connL.Close();
connL
=
conn
;
//根据条件查出所有报告的Kvid
var
queryReportKvid
=
conn
.
From
<
Report
>();
queryReportKvid
.
Select
(
o
=>
o
.
Kvid
);
queryReportKvid
.
Where
(
o
=>
o
.
DeadDate
>=
BeginDate
&&
o
.
DeadDate
<=
EndDate
);
//一次性查出日期范围内的报告的项目
var
queryReportItem
=
conn
.
From
<
ReportItem
>();
queryReportItem
.
Select
(
o
=>
new
{
o
.
ReportKvid
,
o
.
WorkGroupName
,
o
.
Status
,
o
.
Type
});
queryReportItem
.
Where
(
o
=>
Sql
.
In
(
o
.
ReportKvid
,
queryReportKvid
));
reportItems
=
conn
.
Select
(
queryReportItem
);
reportItems
=
reportItems
.
filterReportItem
();
var
query
=
conn
.
From
<
Report
>();
query
.
LeftJoin
<
Timeline
>((
r
,
t
)
=>
r
.
Kvid
==
t
.
BizKvid
);
if
(
PolicyNodeKvids
.
IsNullOrEmpty
())
query
.
Where
<
Timeline
>(
o
=>
o
.
PreKvid
==
Guid
.
Empty
&&
o
.
RootKvid
==
o
.
Kvid
);
//不指定节点,就查根节点
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
.
Value
)
query
.
And
<
Report
>(
o
=>
o
.
UrgentRate
>
1
);
else
query
.
And
<
Report
>(
o
=>
o
.
UrgentRate
==
1
);
}
query
.
And
<
Report
>(
o
=>
(
o
.
BizType
!=
"G0"
&&
o
.
BizType
!=
"G1"
)
||
o
.
BizType
==
null
);
query
.
OrderBy
<
Timeline
>(
o
=>
o
.
PolicyNodeKvid
);
query
.
ThenBy
<
Report
>(
o
=>
o
.
DeadDate
);
query
.
Select
<
Timeline
,
Report
>((
o
,
r
)
=>
new
{
o
.
Kvid
,
o
.
RootKvid
,
o
.
ParentKvid
,
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统计,按照整个报告的时效进行统计
{
var
group
=
results
.
GroupBy
(
o
=>
o
.
ReportDeadDate
);
foreach
(
var
kv
in
group
)
{
DateTime
?
filterTime
=
null
;
switch
(
TimeFilter
)
{
case
TimeFilter
.
Unsupported
:
filterTime
=
null
;
break
;
case
TimeFilter
.
TwoPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 14:00:00"
));
break
;
case
TimeFilter
.
ThreePM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 15:00:00"
));
break
;
case
TimeFilter
.
FourPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 16:00:00"
));
break
;
case
TimeFilter
.
FourHalfPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 16:30:00"
));
break
;
case
TimeFilter
.
FiveHalfPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 17:30:00"
));
break
;
case
TimeFilter
.
SixPM
:
filterTime
=
DateTime
.
Parse
(
kv
.
Key
.
Value
.
ToString
(
"yyyy-MM-dd 18:00:00"
));
break
;
default
:
filterTime
=
null
;
break
;
}
var
total
=
new
TimelineStatistic
();
total
.
ReportDeadDate
=
kv
.
Key
;
total
.
Quantity
=
kv
.
Count
();
total
.
TimeFilter
=
TimeFilter
;
total
.
Details
=
new
List
<
TimelineStatistic
>();
foreach
(
var
item
in
kv
)
{
var
realFinishTime
=
item
.
RealFinishTime
;
if
(
realFinishTime
==
null
)
realFinishTime
=
DateTime
.
Now
;
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
++;
else
total
.
NormalQuantity
++;
if
(
filterTime
!=
null
&&
item
.
RealFinishTime
!=
null
&&
item
.
RealFinishTime
<=
filterTime
)
total
.
TimeFilterQuantity
++;
else
item
.
TimeoutQuantity
=
1
;
}
total
.
Details
=
kv
.
ToList
();
rtns
.
Results
.
Add
(
total
);
}
}
else
//按照节点Group
{
var
group
=
results
.
GroupBy
(
o
=>
new
{
o
.
PolicyNodeKvid
,
o
.
ReportDeadDate
,
o
.
Title
});
foreach
(
var
kv
in
group
)
{
DateTime
?
filterTime
=
null
;
switch
(
TimeFilter
)
{
case
TimeFilter
.
Unsupported
:
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
();
//根据检验组分组统计
var
reportCount
=
currtReportItems
.
ConvertAll
(
o
=>
o
.
ReportKvid
).
Distinct
().
Count
();
var
reportkvids
=
currtReportItems
.
ConvertAll
(
o
=>
o
.
ReportKvid
).
Distinct
().
ToList
();
var
total
=
new
TimelineStatistic
();
total
.
PolicyNodeKvid
=
kv
.
Key
.
PolicyNodeKvid
;
total
.
ReportDeadDate
=
kv
.
Key
.
ReportDeadDate
;
total
.
Title
=
kv
.
Key
.
Title
;
total
.
ReportQuantity
=
reportCount
;
total
.
ReportKvids
=
reportkvids
;
total
.
Quantity
=
kv
.
Count
();
total
.
TimeFilter
=
TimeFilter
;
total
.
Details
=
new
List
<
TimelineStatistic
>();
foreach
(
var
item
in
kv
)
{
var
realFinishTime
=
item
.
RealFinishTime
;
if
(
realFinishTime
==
null
)
realFinishTime
=
DateTime
.
Now
;
//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
++;
else
total
.
NormalQuantity
++;
if
(
filterTime
!=
null
&&
item
.
RealFinishTime
!=
null
&&
item
.
RealFinishTime
<=
filterTime
)
total
.
TimeFilterQuantity
++;
else
item
.
TimeoutQuantity
=
1
;
}
total
.
Details
=
kv
.
ToList
();
rtns
.
Results
.
Add
(
total
);
}
}
}
else
rtns
.
Results
=
results
;
//按照指定顺序排序
foreach
(
var
rtn
in
rtns
.
Results
)
{
if
(
rtn
.
Title
==
"安全组"
)
rtn
.
SortId
=
1
;
else
if
(
rtn
.
Title
==
"纤维含量组"
)
rtn
.
SortId
=
2
;
else
if
(
rtn
.
Title
==
"微生物组"
)
rtn
.
SortId
=
3
;
else
if
(
rtn
.
Title
==
"物理组"
)
rtn
.
SortId
=
4
;
else
if
(
rtn
.
Title
==
"色牢度组"
)
rtn
.
SortId
=
5
;
else
if
(
rtn
.
Title
==
"开样组"
)
rtn
.
SortId
=
6
;
else
if
(
rtn
.
Title
==
"功能组"
)
rtn
.
SortId
=
7
;
else
if
(
rtn
.
Title
==
"轻工组"
)
rtn
.
SortId
=
8
;
else
if
(
rtn
.
Title
==
"纤检组"
)
rtn
.
SortId
=
9
;
else
if
(
rtn
.
Title
==
"羽绒组"
)
rtn
.
SortId
=
10
;
else
rtn
.
SortId
=
99
;
}
rtns
.
Results
=
rtns
.
Results
.
OrderBy
(
o
=>
o
.
SortId
).
ToList
();
rtns
.
Total
=
rtns
.
Results
.
Count
;
return
rtns
;
}
}
[
Api
(
Description
=
"报告数据录入/报告编制时效统计"
)]
[
RequiresAnyRole
(
SystemRoles
.
Everyone
)]
public
class
TimelineStatisticDataEntry
:
RestfulExecution
<
TimelineStatistic
>
public
class
TimelineStatisticDataEntry
:
RestfulExecution
<
TimelineStatistic
>
{
{
public
List
<
Guid
>
PolicyNodeKvids
{
get
;
set
;
}
public
List
<
Guid
>
PolicyNodeKvids
{
get
;
set
;
}
...
...
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