Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
Education
Project
Project
Details
Activity
Releases
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
黄奎
Education
Commits
a08d9abe
Commit
a08d9abe
authored
Dec 02, 2020
by
黄奎
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://gitlab.oytour.com/Kui2/education
parents
35eee09d
fa4acefc
Hide whitespace changes
Inline
Side-by-side
Showing
32 changed files
with
2096 additions
and
132 deletions
+2096
-132
ResultCode.cs
Edu.Common/API/ResultCode.cs
+4
-0
Config.cs
Edu.Common/Config.cs
+9
-0
StoreTypeEnum.cs
Edu.Common/Enum/Public/StoreTypeEnum.cs
+6
-1
BaseTemplateTypeEnum.cs
Edu.Common/Enum/System/BaseTemplateTypeEnum.cs
+21
-0
MsgSendStatusEnum.cs
Edu.Common/Enum/System/MsgSendStatusEnum.cs
+28
-0
TechnicalTypeEnum.cs
Edu.Common/Enum/User/TechnicalTypeEnum.cs
+19
-0
MapHelper.cs
Edu.Common/Plugin/MapHelper.cs
+60
-0
RB_Msg_BaseTemplate.cs
Edu.Model/Entity/System/RB_Msg_BaseTemplate.cs
+62
-0
RB_Msg_Log.cs
Edu.Model/Entity/System/RB_Msg_Log.cs
+15
-2
RB_File_Store.cs
Edu.Model/Public/RB_File_Store.cs
+5
-1
RB_Msg_BaseTemplate_ViewModel.cs
Edu.Model/ViewModel/System/RB_Msg_BaseTemplate_ViewModel.cs
+23
-0
RB_Msg_Log_ViewModel.cs
Edu.Model/ViewModel/System/RB_Msg_Log_ViewModel.cs
+3
-0
Edu.Module.System.csproj
Edu.Module.System/Edu.Module.System.csproj
+7
-0
MsgLogModule.cs
Edu.Module.System/MsgLogModule.cs
+200
-3
AttendanceRecodModule.cs
Edu.Module.User/AttendanceRecodModule.cs
+661
-0
Edu.Module.User.deps.json
....User/bin/Release/netcoreapp3.0/Edu.Module.User.deps.json
+72
-72
RB_Msg_BaseRepository.cs
Edu.Repository/System/RB_Msg_BaseRepository.cs
+6
-6
RB_Msg_BaseTemplateRepository.cs
Edu.Repository/System/RB_Msg_BaseTemplateRepository.cs
+76
-0
RB_Msg_LogRepository.cs
Edu.Repository/System/RB_Msg_LogRepository.cs
+3
-3
Edu.ThirdCore.csproj
Edu.ThirdCore/Edu.ThirdCore.csproj
+26
-0
MessageCore.cs
Edu.ThirdCore/Message/MessageCore.cs
+257
-0
QueueHelper.cs
Edu.ThirdCore/Message/QueueHelper.cs
+40
-0
SMSService.cs
Edu.ThirdCore/Message/SMSService.cs
+85
-0
aliyun-net-sdk-core.dll
Edu.ThirdCore/lib/aliyun-net-sdk-core.dll
+0
-0
aliyun-net-sdk-dysmsapi.dll
Edu.ThirdCore/lib/aliyun-net-sdk-dysmsapi.dll
+0
-0
MsgController.cs
Edu.WebApi/Controllers/Public/MsgController.cs
+165
-3
PublicController.cs
Edu.WebApi/Controllers/Public/PublicController.cs
+10
-1
UserCenterController.cs
Edu.WebApi/Controllers/User/UserCenterController.cs
+183
-3
Edu.WebApi.csproj
Edu.WebApi/Edu.WebApi.csproj
+1
-0
Startup.cs
Edu.WebApi/Startup.cs
+6
-2
appsettings.json
Edu.WebApi/appsettings.json
+35
-34
education.sln
education.sln
+8
-1
No files found.
Edu.Common/API/ResultCode.cs
View file @
a08d9abe
...
...
@@ -40,5 +40,9 @@
/// 表单重复提交
/// </summary>
FormRepeatSubmit
=
10003
,
/// <summary>
/// 不在打卡范围
/// </summary>
NotInCardRange
=
20001
,
}
}
Edu.Common/Config.cs
View file @
a08d9abe
...
...
@@ -274,6 +274,15 @@ namespace Edu.Common
}
}
public
static
int
IsSendMsg
{
get
{
int
.
TryParse
(
ReadConfigKey
(
"IsSendMsg"
),
out
int
_isSendMsg
);
return
_isSendMsg
;
}
}
/// <summary>
/// 导出文件保存路径
/// </summary>
...
...
Edu.Common/Enum/Public/StoreTypeEnum.cs
View file @
a08d9abe
...
...
@@ -16,6 +16,11 @@ namespace Edu.Common.Enum.Public
/// 阿里云
/// </summary>
[
EnumField
(
"阿里云"
)]
Alicloud
=
2
Alicloud
=
2
,
/// <summary>
/// 系统
/// </summary>
[
EnumField
(
"系统"
)]
System
=
3
}
}
Edu.Common/Enum/System/BaseTemplateTypeEnum.cs
0 → 100644
View file @
a08d9abe
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
Edu.Common.Plugin
;
namespace
Edu.Common.Enum.System
{
public
enum
BaseTemplateTypeEnum
{
/// <summary>
/// 订单下单成功通知
/// </summary>
[
EnumField
(
"订单下单成功通知"
)]
OrderSuccess
=
1
,
/// <summary>
/// 订单下单失败通知
/// </summary>
[
EnumField
(
"订单下单失败通知"
)]
OrderFail
=
2
}
}
Edu.Common/Enum/System/MsgSendStatusEnum.cs
0 → 100644
View file @
a08d9abe
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
Edu.Common.Plugin
;
namespace
Edu.Common.Enum.System
{
public
enum
MsgSendStatusEnum
{
//发送状态1:等待回执,2:发送失败,3:发送成功。
/// <summary>
/// 等待回执
/// </summary>
[
EnumField
(
"等待回执"
)]
InReceipt
=
1
,
/// <summary>
/// 发送失败
/// </summary>
[
EnumField
(
"发送失败"
)]
Fail
=
2
,
/// <summary>
/// 发送成功
/// </summary>
[
EnumField
(
"发送成功"
)]
Success
=
3
,
}
}
Edu.Common/Enum/User/TechnicalTypeEnum.cs
0 → 100644
View file @
a08d9abe
using
Edu.Common.Plugin
;
namespace
Edu.Common.Enum.User
{
/// <summary>
/// 特殊日期打卡类型
/// </summary>
public
enum
TechnicalTypeEnum
{
/// <summary>
/// 打卡
/// </summary>
PunchCard
=
1
,
/// <summary>
/// 不打卡
/// </summary>
NoPunchCard
=
2
}
}
\ No newline at end of file
Edu.Common/Plugin/MapHelper.cs
0 → 100644
View file @
a08d9abe
using
System
;
namespace
Edu.Common.Plugin
{
/// <summary>
/// 地图帮助类
/// </summary>
public
class
MapHelper
{
//地球半径,单位米
private
const
double
EARTH_RADIUS
=
6378137
;
/// <summary>
/// 计算两点位置的距离,返回两点的距离,单位 米
/// </summary>
/// <param name="lat1">第一点纬度</param>
/// <param name="lng1">第一点经度</param>
/// <param name="lat2">第二点纬度</param>
/// <param name="lng2">第二点经度</param>
/// <returns></returns>
public
static
double
GetDistance
(
double
lat1
,
double
lng1
,
double
lat2
,
double
lng2
)
{
double
radLat1
=
Rad
(
lat1
);
double
radLng1
=
Rad
(
lng1
);
double
radLat2
=
Rad
(
lat2
);
double
radLng2
=
Rad
(
lng2
);
double
a
=
radLat1
-
radLat2
;
double
b
=
radLng1
-
radLng2
;
double
result
=
2
*
Math
.
Asin
(
Math
.
Sqrt
(
Math
.
Pow
(
Math
.
Sin
(
a
/
2
),
2
)
+
Math
.
Cos
(
radLat1
)
*
Math
.
Cos
(
radLat2
)
*
Math
.
Pow
(
Math
.
Sin
(
b
/
2
),
2
)))
*
EARTH_RADIUS
;
return
result
;
}
/// <summary>
/// 计算两个坐标点之间的距离
/// 计算两点位置的距离,返回两点的距离,单位 米
/// </summary>
/// <param name="firstPoint">第一个坐标点的(纬度,经度)</param>
/// <param name="secondPoint">第二个坐标点的(纬度,经度)</param>
/// <returns>返回两点之间的距离,单位:公里/千米</returns>
public
static
double
GetPointDistance
(
string
firstPoint
,
string
secondPoint
)
{
var
firstArray
=
firstPoint
.
Split
(
','
);
var
secondArray
=
secondPoint
.
Split
(
','
);
var
firstLatitude
=
Convert
.
ToDouble
(
firstArray
[
0
].
Trim
());
var
firstLongitude
=
Convert
.
ToDouble
(
firstArray
[
1
].
Trim
());
var
secondLatitude
=
Convert
.
ToDouble
(
secondArray
[
0
].
Trim
());
var
secondLongitude
=
Convert
.
ToDouble
(
secondArray
[
1
].
Trim
());
return
GetDistance
(
firstLatitude
,
firstLongitude
,
secondLatitude
,
secondLongitude
);
}
/// <summary>
/// 经纬度转化成弧度
/// </summary>
/// <param name="d"></param>
/// <returns></returns>
private
static
double
Rad
(
double
d
)
{
return
(
double
)
d
*
Math
.
PI
/
180d
;
}
}
}
Edu.Model/Entity/System/RB_Msg_BaseTemplate.cs
0 → 100644
View file @
a08d9abe
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
Edu.Common.Enum.Public
;
using
Edu.Common.Enum.System
;
using
VT.FW.DB
;
namespace
Edu.Model.Entity.System
{
/// <summary>
/// 短信发送记录实体表
/// </summary>
[
Serializable
]
[
DB
(
ConnectionName
=
"DefaultConnection"
)]
public
class
RB_Msg_BaseTemplate
{
public
int
ID
{
get
;
set
;
}
/// <summary>
/// 集团编号
/// </summary>
public
int
Group_Id
{
get
;
set
;
}
/// <summary>
/// 模板状态,0-正常,1-禁用
/// </summary>
public
int
TemplateStaus
{
get
;
set
;
}
public
BaseTemplateTypeEnum
BaseTemplateType
{
get
;
set
;
}
/// <summary>
/// 存储位置,1-腾讯云,2-阿里,3-其他
/// </summary>
public
StoreTypeEnum
StoreType
{
get
;
set
;
}
/// <summary>
/// 签名
/// </summary>
public
string
Sign
{
get
;
set
;
}
/// <summary>
/// 消息配置信息
/// </summary>
public
string
TemplateId
{
get
;
set
;
}
/// <summary>
/// 创建人
/// </summary>
public
int
CreateBy
{
get
;
set
;
}
/// <summary>
/// 创建时间
/// </summary>
public
DateTime
CreateDate
{
get
;
set
;
}
}
}
Edu.Model/Entity/System/RB_Msg_Log.cs
View file @
a08d9abe
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
Edu.Common.Enum.System
;
using
VT.FW.DB
;
namespace
Edu.Model.Entity.System
...
...
@@ -36,10 +37,10 @@ namespace Edu.Model.Entity.System
public
DateTime
CreateDate
{
get
;
set
;
}
/// <summary>
/// 发送状态1
-失败,2-成功
/// 发送状态1
:等待回执,2:发送失败,3:发送成功。
/// </summary>
public
int
SendStatus
{
get
;
set
;
}
public
MsgSendStatusEnum
?
SendStatus
{
get
;
set
;
}
/// <summary>
...
...
@@ -67,5 +68,17 @@ namespace Edu.Model.Entity.System
/// 接收人电话
/// </summary>
public
string
ReceiverPhone
{
get
;
set
;
}
/// <summary>
/// 存储位置,1-腾讯云,2-阿里,3-其他
/// </summary>
public
Common
.
Enum
.
Public
.
StoreTypeEnum
StoreType
{
get
;
set
;
}
/// <summary>
/// 消息配置信息
/// </summary>
public
string
MsgConfigure
{
get
;
set
;
}
}
}
Edu.Model/Public/RB_File_Store.cs
View file @
a08d9abe
...
...
@@ -56,6 +56,10 @@ namespace Edu.Model.Public
/// </summary>
public
string
CustomDomain
{
get
;
set
;
}
/// <summary>
/// 上传域名
/// </summary>
public
string
UploadDomain
{
get
;
set
;
}
/// <summary>
/// 自定义域名
...
...
@@ -65,7 +69,7 @@ namespace Edu.Model.Public
/// 自定义域名
/// </summary>
public
string
SecretId
{
get
;
set
;
}
}
}
Edu.Model/ViewModel/System/RB_Msg_BaseTemplate_ViewModel.cs
0 → 100644
View file @
a08d9abe
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
Edu.Model.Entity.System
;
namespace
Edu.Model.ViewModel.System
{
public
class
RB_Msg_BaseTemplate_ViewModel
:
RB_Msg_BaseTemplate
{
/// <summary>
/// 创建时间字符串
/// </summary>
public
string
CreateDateStr
{
get
{
return
Common
.
ConvertHelper
.
FormatTime
(
this
.
CreateDate
);
}
}
public
string
BaseTemplateTypeStr
{
get
;
set
;
}
}
}
Edu.Model/ViewModel/System/RB_Msg_Log_ViewModel.cs
View file @
a08d9abe
...
...
@@ -28,5 +28,8 @@ namespace Edu.Model.ViewModel.System
/// </summary>
public
string
EndDate
{
get
;
set
;
}
public
RB_Msg_Base_ViewModel
MsgBase
{
get
;
set
;
}
}
}
Edu.Module.System/Edu.Module.System.csproj
View file @
a08d9abe
...
...
@@ -9,6 +9,13 @@
<ProjectReference Include="..\Edu.Common\Edu.Common.csproj" />
<ProjectReference Include="..\Edu.Model\Edu.Model.csproj" />
<ProjectReference Include="..\Edu.Repository\Edu.Repository.csproj" />
<ProjectReference Include="..\Edu.ThirdCore\Edu.ThirdCore.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="aliyun-net-sdk-dysmsapi">
<HintPath>..\Edu.ThirdCore\lib\aliyun-net-sdk-dysmsapi.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
Edu.Module.System/MsgLogModule.cs
View file @
a08d9abe
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
Edu.Common.Enum
;
using
Edu.Model.Entity.System
;
using
Edu.Model.ViewModel.System
;
using
Edu.Repository.System
;
using
VT.FW.DB
;
using
Aliyun.Net.SDK.Core
;
namespace
Edu.Module.System
{
...
...
@@ -21,6 +23,11 @@ namespace Edu.Module.System
/// </summary>
private
readonly
RB_Msg_BaseRepository
msgBaseRepository
=
new
RB_Msg_BaseRepository
();
/// <summary>
/// 短信模板配置仓储层对象
/// </summary>
private
readonly
RB_Msg_BaseTemplateRepository
msgBaseTemplateRepository
=
new
RB_Msg_BaseTemplateRepository
();
#
region
短信记录
...
...
@@ -42,7 +49,7 @@ namespace Edu.Module.System
/// <summary>
/// 获取
班级
列表
/// 获取
短信配置
列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
...
...
@@ -52,7 +59,7 @@ namespace Edu.Module.System
}
/// <summary>
/// 获取
班级分页
列表
/// 获取
短信配置
列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
...
...
@@ -76,7 +83,8 @@ namespace Edu.Module.System
{
{
nameof
(
RB_Msg_Base
.
CreateDate
),
model
.
CreateDate
},
{
nameof
(
RB_Msg_Base
.
CreateBy
),
model
.
CreateBy
},
{
nameof
(
RB_Msg_Base
.
MsgConfigure
),
model
.
MsgConfigure
}
{
nameof
(
RB_Msg_Base
.
StoreType
),
model
.
StoreType
},
{
nameof
(
RB_Msg_Base
.
MsgConfigure
),
model
.
MsgConfigure
}
};
return
msgBaseRepository
.
Update
(
fileds
,
new
WhereHelper
(
nameof
(
RB_Msg_Base
.
ID
),
model
.
ID
));
}
...
...
@@ -111,5 +119,194 @@ namespace Edu.Module.System
return
msgBaseRepository
.
Update
(
fileds
,
new
WhereHelper
(
nameof
(
RB_Msg_Base
.
ID
),
ID
));
}
#
endregion
#
region
短信模板配置
/// <summary>
/// 获取短信模板配置列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public
List
<
RB_Msg_BaseTemplate_ViewModel
>
GetMsgBaseTemplateListModule
(
RB_Msg_BaseTemplate_ViewModel
query
)
{
return
msgBaseTemplateRepository
.
GetListRepository
(
query
);
}
/// <summary>
/// 获取短信模板配置分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="rowsCount"></param>
/// <param name="query"></param>
/// <returns></returns>
public
List
<
RB_Msg_BaseTemplate_ViewModel
>
GetMsgBaseTemplatePageListModule
(
int
pageIndex
,
int
pageSize
,
out
long
rowsCount
,
RB_Msg_BaseTemplate_ViewModel
query
)
{
return
msgBaseTemplateRepository
.
GetPageListRepository
(
pageIndex
,
pageSize
,
out
rowsCount
,
query
);
}
/// <summary>
/// 新增修改 短信模板配置
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public
bool
SetMsgBaseTemplateModule
(
RB_Msg_BaseTemplate_ViewModel
model
)
{
if
(
model
.
ID
>
0
)
{
Dictionary
<
string
,
object
>
fileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Msg_BaseTemplate_ViewModel
.
CreateDate
),
model
.
CreateDate
},
{
nameof
(
RB_Msg_BaseTemplate_ViewModel
.
CreateBy
),
model
.
CreateBy
},
{
nameof
(
RB_Msg_BaseTemplate_ViewModel
.
TemplateStaus
),
model
.
TemplateStaus
},
{
nameof
(
RB_Msg_BaseTemplate_ViewModel
.
TemplateId
),
model
.
TemplateId
},
{
nameof
(
RB_Msg_BaseTemplate_ViewModel
.
StoreType
),
model
.
StoreType
},
{
nameof
(
RB_Msg_BaseTemplate_ViewModel
.
Sign
),
model
.
Sign
},
{
nameof
(
RB_Msg_BaseTemplate_ViewModel
.
BaseTemplateType
),
model
.
BaseTemplateType
}
};
return
msgBaseTemplateRepository
.
Update
(
fileds
,
new
WhereHelper
(
nameof
(
RB_Msg_BaseTemplate_ViewModel
.
ID
),
model
.
ID
));
}
else
{
var
newId
=
msgBaseTemplateRepository
.
Insert
(
model
);
return
newId
>
0
;
}
}
/// <summary>
/// 根据短信模板配置编号获取短信配置详细信息
/// </summary>
/// <param name="ClassId"></param>
/// <returns></returns>
public
RB_Msg_BaseTemplate_ViewModel
GetMsgBaseTemplateModule
(
object
ClassId
)
{
return
msgBaseTemplateRepository
.
GetEntity
<
RB_Msg_BaseTemplate_ViewModel
>(
ClassId
);
}
/// <summary>
/// 删除短信模板配置
/// </summary>
/// <param name="ClassId"></param>
/// <returns></returns>
public
bool
RemoveMsgBaseTemplateModule
(
object
ID
)
{
Dictionary
<
string
,
object
>
fileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Msg_BaseTemplate_ViewModel
.
TemplateStaus
),(
int
)
DateStateEnum
.
Delete
},
};
return
msgBaseTemplateRepository
.
Update
(
fileds
,
new
WhereHelper
(
nameof
(
RB_Msg_BaseTemplate_ViewModel
.
ID
),
ID
));
}
#
endregion
#
region
发送短信统一方法
public
void
SendMsg
(
object
PhoneMessage
,
Common
.
Enum
.
System
.
BaseTemplateTypeEnum
BaseTemplateType
,
RB_Msg_Log
msgLogModel
)
{
//查询当前集团的短信基础配置
var
msgBaseList
=
msgBaseRepository
.
GetListRepository
(
new
RB_Msg_Base_Function_ViewModel
{
Group_Id
=
msgLogModel
.
Group_Id
});
//查询当前下面是否有模板
var
allMsgBaseTemplateList
=
msgBaseTemplateRepository
.
GetListRepository
(
new
RB_Msg_BaseTemplate_ViewModel
{
BaseTemplateType
=
BaseTemplateType
,
Group_Id
=
msgLogModel
.
Group_Id
}).
Where
(
x
=>
x
.
TemplateStaus
==
0
);
if
(
msgBaseList
!=
null
&&
msgBaseList
.
Any
()
&&
allMsgBaseTemplateList
!=
null
&&
allMsgBaseTemplateList
.
Any
())
{
RB_Msg_Base_Function_ViewModel
model
=
new
RB_Msg_Base_Function_ViewModel
();
// msgBaseList.OrderBy(x => x.ID).FirstOrDefault();
if
(
allMsgBaseTemplateList
.
Where
(
x
=>
x
.
BaseTemplateType
==
BaseTemplateType
).
GroupBy
(
x
=>
x
.
StoreType
).
Count
()
>
1
)
{
model
=
msgBaseList
.
OrderBy
(
x
=>
x
.
ID
).
FirstOrDefault
();
}
else
{
model
=
msgBaseList
.
Where
(
x
=>
x
.
StoreType
==
allMsgBaseTemplateList
.
FirstOrDefault
().
StoreType
).
FirstOrDefault
();
}
if
(
model
!=
null
&&
model
.
ID
>
0
)
{
if
(!
string
.
IsNullOrWhiteSpace
(
model
.
MsgConfigure
))
{
msgLogModel
.
StoreType
=
model
.
StoreType
;
msgLogModel
.
MsgConfigure
=
model
.
MsgConfigure
;
int
id
=
msgLogRepository
.
Insert
(
msgLogModel
);
model
.
MsgBase
=
Common
.
Plugin
.
JsonHelper
.
DeserializeObject
<
RB_Msg_Base_ViewModel
>(
model
.
MsgConfigure
);
var
msgBaseTemplateList
=
allMsgBaseTemplateList
.
Where
(
x
=>
x
.
BaseTemplateType
==
BaseTemplateType
);
if
(!
string
.
IsNullOrWhiteSpace
(
model
.
MsgBase
.
AccessKeyId
)
&&
!
string
.
IsNullOrWhiteSpace
(
model
.
MsgBase
.
AccessSecret
)
&&
!
string
.
IsNullOrWhiteSpace
(
model
.
MsgBase
.
Domain
)
&&
!
string
.
IsNullOrWhiteSpace
(
model
.
MsgBase
.
RegionId
))
{
if
(
msgBaseTemplateList
!=
null
&&
msgBaseTemplateList
.
Any
(
x
=>
x
.
TemplateStaus
==
0
))
{
var
msgBaseTemplateModel
=
msgBaseTemplateList
.
Where
(
x
=>
x
.
TemplateStaus
==
0
).
FirstOrDefault
();
if
(
Common
.
Config
.
IsSendMsg
==
1
)
{
ThirdCore
.
Message
.
SMSService
.
SendMsg
(
msgLogModel
.
ReceiverPhone
,
PhoneMessage
,
msgBaseTemplateModel
.
TemplateId
,
msgBaseTemplateModel
.
Sign
,
model
.
MsgBase
.
Domain
,
model
.
MsgBase
.
AccessKeyId
,
model
.
MsgBase
.
AccessSecret
,
model
.
MsgBase
.
RegionId
,
id
.
ToString
());
}
}
}
}
}
}
// ThirdCore.Message.SMSService.SendMsg("13551132417", PhoneMessage, "SMS_201722097", "印象之旅", "dysmsapi.aliyuncs.com", "LTAIwE7l9dImZSa3", "j47Ajn0d0WzUCIX8Biyj3P2r8QDltI", "cn-hangzhou");
}
/// <summary>
/// 更新消息发送状态
/// </summary>
public
void
UpdateMsgSendStatus
()
{
var
list
=
msgLogRepository
.
GetListRepository
(
new
RB_Msg_Log
{
SendStatus
=
Common
.
Enum
.
System
.
MsgSendStatusEnum
.
InReceipt
});
foreach
(
var
item
in
list
.
GroupBy
(
x
=>
new
{
x
.
ReceiverPhone
,
x
.
StoreType
,
x
.
MsgConfigure
,
CreateDate
=
x
.
CreateDate
.
ToString
(
"yyyyMMdd"
)
}))
{
if
(
item
.
Key
.
StoreType
==
Common
.
Enum
.
Public
.
StoreTypeEnum
.
Alicloud
)
{
try
{
RB_Msg_Base_ViewModel
msgBase
=
new
RB_Msg_Base_ViewModel
();
if
(!
string
.
IsNullOrWhiteSpace
(
item
.
Key
.
MsgConfigure
))
{
msgBase
=
Common
.
Plugin
.
JsonHelper
.
DeserializeObject
<
RB_Msg_Base_ViewModel
>(
item
.
Key
.
MsgConfigure
);
}
Aliyun
.
Acs
.
Dysmsapi
.
Model
.
V20170525
.
QuerySendDetailsResponse
querySendDetailsResponse
=
Edu
.
ThirdCore
.
Message
.
MessageCore
.
QuerySendDetails
(
item
.
Key
.
ReceiverPhone
,
DateTime
.
Now
.
ToString
(
"yyyyMMdd"
),
""
,
msgBase
.
Domain
,
msgBase
.
AccessKeyId
,
msgBase
.
AccessSecret
,
msgBase
.
RegionId
);
if
(
querySendDetailsResponse
.
Code
==
"OK"
)
{
if
(
querySendDetailsResponse
.
SmsSendDetailDTOs
!=
null
&&
querySendDetailsResponse
.
SmsSendDetailDTOs
.
Any
())
{
foreach
(
var
modelSmsSendDetailDTO
in
querySendDetailsResponse
.
SmsSendDetailDTOs
)
{
int
sendStatus
=
1
;
if
(
modelSmsSendDetailDTO
!=
null
&&
!
string
.
IsNullOrWhiteSpace
(
modelSmsSendDetailDTO
.
OutId
))
{
sendStatus
=
(
int
)(
modelSmsSendDetailDTO
.
SendStatus
??
1
);
}
if
(
sendStatus
>
1
)
{
Dictionary
<
string
,
object
>
fileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Msg_Log
.
SendStatus
),
sendStatus
}
};
msgLogRepository
.
Update
(
fileds
,
new
WhereHelper
(
nameof
(
RB_Msg_Log
.
ID
),
Convert
.
ToInt32
(
modelSmsSendDetailDTO
.
OutId
)));
}
}
}
}
}
catch
(
Exception
ex
)
{
}
}
}
}
#
endregion
}
}
Edu.Module.User/AttendanceRecodModule.cs
0 → 100644
View file @
a08d9abe
using
Edu.Common.API
;
using
Edu.Common.Enum.User
;
using
Edu.Common.Plugin
;
using
Edu.Model.CacheModel
;
using
Edu.Model.Entity.User
;
using
Edu.Model.Public
;
using
Edu.Model.ViewModel.User
;
using
Edu.Repository.User
;
using
Newtonsoft.Json
;
using
Newtonsoft.Json.Linq
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
VT.FW.DB
;
namespace
Edu.Module.User
{
/// <summary>
/// 考勤处理类
/// </summary>
public
class
AttendanceRecodModule
{
private
Rb_attendanceRepository
respository
=
new
Rb_attendanceRepository
();
private
Rb_attendance_wayRepository
AWrespository
=
new
Rb_attendance_wayRepository
();
private
Rb_workdaysetingRepository
WDrespository
=
new
Rb_workdaysetingRepository
();
private
Rb_technicaldatesRepository
TDrespository
=
new
Rb_technicaldatesRepository
();
private
Rb_attendance_recordRepository
attendRecordRespository
=
new
Rb_attendance_recordRepository
();
/// <summary>
/// 获取打卡信息
/// </summary>
/// <param name="empId">员工id</param>
/// <param name="RB_Department_Id">部门id</param>
/// <param name="date">打卡日期</param>
/// <returns></returns>
public
JObject
GetAttendRecod
(
int
empId
,
int
RB_Department_Id
,
string
date
)
{
if
(
Convert
.
ToDateTime
(
date
).
Date
>
DateTime
.
Now
.
Date
)
{
return
null
;
}
RB_Attendance_Extend
attendance
=
respository
.
GetAttendanceByEmpId
(
empId
);
if
(
attendance
!=
null
)
{
if
(
attendance
.
CreateTime
.
Date
>
Convert
.
ToDateTime
(
date
).
Date
)
{
return
null
;
}
}
else
{
return
null
;
}
//打卡记录信息
RB_Attendance_Record_Extend
recode
=
attendRecordRespository
.
GetAttendRecod
(
empId
,
date
);
JObject
result
=
new
JObject
();
//先查询特殊日期打卡时间
//RB_Technicaldates_Extend technical = TDrespository.GetSpecialDate(empId, RB_Department_Id, date);
var
technicalList
=
TDrespository
.
GetSpecialDateList
(
empId
,
date
);
// ld 2020-05-25调整
RB_Technicaldates_Extend
technical
=
null
;
if
(
technicalList
.
Any
())
{
if
(
technicalList
.
Where
(
x
=>
x
.
EmployeeId
>
0
).
Any
()
&&
technicalList
.
Where
(
x
=>
x
.
EmployeeId
==
empId
).
Any
())
{
technical
=
technicalList
.
Where
(
x
=>
x
.
EmployeeId
==
empId
).
FirstOrDefault
();
}
else
if
(
technicalList
.
Where
(
x
=>
x
.
RB_Department_Id
>
0
).
Any
()
&&
technicalList
.
Where
(
x
=>
x
.
RB_Department_Id
==
RB_Department_Id
).
Any
())
{
technical
=
technicalList
.
Where
(
x
=>
x
.
RB_Department_Id
==
RB_Department_Id
).
FirstOrDefault
();
}
else
{
if
(
technicalList
.
Where
(
x
=>
x
.
RB_Department_Id
==
0
&&
x
.
EmployeeId
==
0
).
Any
())
{
technical
=
technicalList
.
Where
(
x
=>
x
.
RB_Department_Id
==
0
&&
x
.
EmployeeId
==
0
).
FirstOrDefault
();
}
}
}
if
(
technical
!=
null
)
{
if
(
technical
.
Type
==
(
int
)
TechnicalTypeEnum
.
PunchCard
)
{
result
[
"onTime"
]
=
technical
.
BeOnDutyTime
;
result
[
"offTime"
]
=
technical
.
OffDutyTime
;
}
else
{
//特殊日期不打卡
return
null
;
}
}
else
{
//正常打卡日期
RB_WorkdaySeting_Extend
workDay
=
WDrespository
.
GetWorkDay
(
empId
,
StringHelper
.
GetWeek
(
Convert
.
ToDateTime
(
date
)));
if
(
workDay
!=
null
)
{
result
[
"onTime"
]
=
workDay
.
BeOnDutyTime
;
result
[
"offTime"
]
=
workDay
.
OffDutyTime
;
}
else
{
return
null
;
}
}
if
(
recode
!=
null
)
{
if
(!
string
.
IsNullOrEmpty
(
recode
.
BeOnTime
))
{
result
[
"onTime"
]
=
recode
.
BeOnTime
;
}
if
(!
string
.
IsNullOrEmpty
(
recode
.
OffTime
))
{
result
[
"offTime"
]
=
recode
.
OffTime
;
}
result
[
"id"
]
=
recode
.
Id
;
result
[
"onStatus"
]
=
(
int
)
recode
.
BeOnStatus
;
result
[
"onPunshCardTime"
]
=
recode
.
BeOnDutyTime
==
null
?
""
:
recode
.
BeOnDutyTime
.
Value
.
ToString
(
"HH:mm"
);
result
[
"onPunshCardAddress"
]
=
recode
.
BeOnVerifyAddress
;
result
[
"isLackCard"
]
=
recode
.
BeOnStatus
==
AttendanceEnum
.
QK
?
true
:
false
;
result
[
"offStatus"
]
=
(
int
)
recode
.
OffStatus
;
result
[
"offPunshCardTime"
]
=
recode
.
OffDutyTime
?.
ToString
(
"HH:mm"
);
result
[
"offPunshCardAddress"
]
=
recode
.
OffVerifyAddress
;
}
else
{
result
[
"id"
]
=
0
;
result
[
"onStatus"
]
=
0
;
result
[
"onPunshCardTime"
]
=
null
;
result
[
"onPunshCardAddress"
]
=
""
;
result
[
"isLackCard"
]
=
false
;
result
[
"offStatus"
]
=
0
;
result
[
"offPunshCardTime"
]
=
null
;
result
[
"offPunshCardAddress"
]
=
""
;
}
string
[]
tempTypeStr
=
WFTTemplateTypeEnum
.
ReissueCard
.
ToName
().
Split
(
'|'
);
result
[
"cmd"
]
=
tempTypeStr
[
3
];
//请求表单cmd
result
[
"submitCmd"
]
=
tempTypeStr
[
4
];
//提交表单cmd
return
result
;
}
/// <summary>
/// 验证是否在打卡范围
/// </summary>
/// <param name="empId">员工id</param>
/// <param name="latAndLong">经纬度(维度,经度)</param>
/// <param name="wifiMac">mac地址</param>
/// <param name="oldWifiMac">原始wifiMac</param>
/// <param name="wayList">公司考勤方式</param>
/// <returns></returns>
public
bool
VerifyPunchCard
(
int
empId
,
string
latAndLong
,
string
wifiMac
,
string
oldWifiMac
,
out
List
<
RB_Attendance_Way_Extend
>
wayList
)
{
//verifyAddress合法类型名称
//type合法类型 1 地点 2 wifi
wayList
=
AWrespository
.
GetWayByEmployeeId
(
empId
);
return
IsRange
(
empId
,
latAndLong
,
wifiMac
,
oldWifiMac
,
out
int
type
,
out
string
verifyAddress
);
}
/// <summary>
/// App考勤打卡
/// </summary>
/// <param name="empId">员工id</param>
/// <param name="RB_Department_Id">部门id</param>
/// <param name="latAndLong">经纬度(维度,经度)</param>
/// <param name="wifiMac">mac地址</param>
/// <param name="oldWifiMac">原始mac</param>
/// <param name="phoneId">手机唯一id</param>
/// <param name="address">打卡地址</param>
/// <param name="PhoneName">打卡地址</param>
/// <param name="PunchCardType">1上班,2下班</param>
/// <param name="isNotVerifyVifi">是否验证wifi</param>
/// <returns></returns>
public
string
PunchCard
(
int
empId
,
int
RB_Department_Id
,
string
latAndLong
,
string
wifiMac
,
string
oldWifiMac
,
string
phoneId
,
string
address
,
string
PhoneName
,
out
int
PunchCardType
,
bool
isNotVerifyVifi
=
false
)
{
PunchCardType
=
1
;
string
date
=
DateTime
.
Now
.
ToShortDateString
();
//打卡记录信息
RB_Attendance_Record_Extend
recode
=
attendRecordRespository
.
GetAttendRecod
(
empId
,
date
);
//根据手机标识码获取打卡记录信息
RB_Attendance_Record_Extend
phoneIdRecode
=
attendRecordRespository
.
GetAttendRecodByPhoneId
(
phoneId
,
date
);
string
onTime
=
""
;
string
offTime
=
""
;
//先查询特殊日期打卡时间
#
region
获取打卡时间
//RB_Technicaldates_Extend technical = TDrespository.GetSpecialDate(empId, RB_Department_Id, date);
var
technicalList
=
TDrespository
.
GetSpecialDateList
(
empId
,
date
);
// ld 2020-01-25 调整
RB_Technicaldates_Extend
technical
=
null
;
if
(
technicalList
.
Any
())
{
if
(
technicalList
.
Where
(
x
=>
x
.
EmployeeId
>
0
).
Any
()
&&
technicalList
.
Where
(
x
=>
x
.
EmployeeId
==
empId
).
Any
())
{
technical
=
technicalList
.
Where
(
x
=>
x
.
EmployeeId
==
empId
).
FirstOrDefault
();
}
else
if
(
technicalList
.
Where
(
x
=>
x
.
RB_Department_Id
>
0
).
Any
()
&&
technicalList
.
Where
(
x
=>
x
.
RB_Department_Id
==
RB_Department_Id
).
Any
())
{
technical
=
technicalList
.
Where
(
x
=>
x
.
RB_Department_Id
==
RB_Department_Id
).
FirstOrDefault
();
}
else
{
if
(
technicalList
.
Where
(
x
=>
x
.
RB_Department_Id
==
0
&&
x
.
EmployeeId
==
0
).
Any
())
{
technical
=
technicalList
.
Where
(
x
=>
x
.
RB_Department_Id
==
0
&&
x
.
EmployeeId
==
0
).
FirstOrDefault
();
}
}
}
if
(
technical
!=
null
)
{
if
(
technical
.
Type
==
(
int
)
TechnicalTypeEnum
.
PunchCard
)
{
onTime
=
technical
.
BeOnDutyTime
;
offTime
=
technical
.
OffDutyTime
;
}
else
{
//特殊日期不打卡
return
"ok"
;
}
}
else
{
//正常打卡日期
RB_WorkdaySeting_Extend
workDay
=
WDrespository
.
GetWorkDay
(
empId
,
StringHelper
.
GetWeek
(
Convert
.
ToDateTime
(
date
)));
if
(
workDay
!=
null
)
{
onTime
=
workDay
.
BeOnDutyTime
;
offTime
=
workDay
.
OffDutyTime
;
}
else
{
return
"今天休息,无需打卡"
;
}
}
#
endregion
#
region
验证打卡方式
//type合法类型 1 地点 2 wifi
//是否在范围
int
type
=
2
;
string
verifyAddress
=
""
;
bool
isRange
=
isNotVerifyVifi
?
isNotVerifyVifi
:
IsRange
(
empId
,
latAndLong
,
wifiMac
,
oldWifiMac
,
out
type
,
out
verifyAddress
);
if
(!
isRange
&&
string
.
IsNullOrWhiteSpace
(
latAndLong
))
{
type
=
2
;
}
#
endregion
#
region
打卡
if
(
recode
==
null
)
//上班打卡
{
if
(
phoneIdRecode
!=
null
&&
phoneIdRecode
.
EmployeeId
!=
empId
)
{
return
"一台手机一天不能为多个账号打卡"
;
}
else
{
RB_Attendance_Record
dbRecord
=
new
RB_Attendance_Record
{
EmployeeId
=
empId
,
BeOnAddress
=
address
,
BeOnDutyTime
=
DateTime
.
Now
,
BeOnType
=
type
,
BeOnVerifyAddress
=
verifyAddress
};
if
(
dbRecord
.
BeOnType
==
1
)
{
dbRecord
.
BeOnTargetAddress
=
latAndLong
;
}
else
{
dbRecord
.
BeOnTargetAddress
=
wifiMac
;
}
dbRecord
.
PhoneId
=
phoneId
;
dbRecord
.
PhoneName
=
PhoneName
;
dbRecord
.
Date
=
DateTime
.
Now
;
dbRecord
.
BeOnTime
=
onTime
;
//string punchCardTime = dbRecord.BeOnDutyTime.ToShortTimeString();
DateTime
punchCardDateTime
=
DateTime
.
Now
;
//打卡时间
DateTime
onDateTime
=
Convert
.
ToDateTime
(
onTime
);
//上班时间
if
(
isRange
)
{
if
(
punchCardDateTime
.
AddMinutes
(-
1
)
<=
onDateTime
)
{
dbRecord
.
BeOnStatus
=
AttendanceEnum
.
ZC
;
}
else
{
dbRecord
.
BeOnStatus
=
AttendanceEnum
.
CD
;
TimeSpan
timeSpan
=
punchCardDateTime
-
onDateTime
;
dbRecord
.
BeLateTime
=
(
int
)
timeSpan
.
TotalMinutes
;
//迟到分钟数
}
}
else
{
return
"不在打卡范围"
;
}
attendRecordRespository
.
Insert
(
dbRecord
);
return
"ok"
;
}
}
else
{
if
(
phoneIdRecode
!=
null
&&
phoneIdRecode
.
Id
!=
recode
.
Id
)
{
return
"一台手机一天不能为多个账号打卡"
;
}
else
{
RB_Attendance_Record
dbRecord
=
recode
.
RefMapperTo
<
RB_Attendance_Record
>();
dbRecord
.
OffAddress
=
address
;
if
(
dbRecord
.
BeOnType
==
1
)
{
dbRecord
.
OffTargetAddress
=
latAndLong
;
}
else
{
dbRecord
.
OffTargetAddress
=
wifiMac
;
}
dbRecord
.
OffDutyTime
=
DateTime
.
Now
;
dbRecord
.
OffType
=
type
;
dbRecord
.
PhoneId
=
phoneId
;
dbRecord
.
PhoneName
=
PhoneName
;
dbRecord
.
OffVerifyAddress
=
verifyAddress
;
dbRecord
.
OffTime
=
offTime
;
//string punchCardTime = dbRecord.BeOnDutyTime.ToShortTimeString();
DateTime
punchCardDateTime
=
DateTime
.
Now
;
//打卡时间
DateTime
offDateTime
=
Convert
.
ToDateTime
(
offTime
);
//下班时间
if
(
isRange
)
{
if
(
punchCardDateTime
>=
offDateTime
)
{
dbRecord
.
OffStatus
=
AttendanceEnum
.
ZC
;
PunchCardType
=
2
;
}
else
{
return
"没到下班时间,打卡失败"
;
}
}
else
{
return
"不在打卡范围"
;
}
attendRecordRespository
.
Update
(
dbRecord
);
return
"ok"
;
}
}
#
endregion
}
/// <summary>
/// 验证打卡范围
/// </summary>
/// <param name="empId"></param>
/// <param name="latAndLong"></param>
/// <param name="wifiMac"></param>
/// <param name="oldWifiMac"></param>
/// <param name="type">合法类型 1 地点 2 wifi</param>
/// <param name="verifyAddress">合法类型 名称</param>
/// <returns></returns>
private
bool
IsRange
(
int
empId
,
string
latAndLong
,
string
wifiMac
,
string
oldWifiMac
,
out
int
type
,
out
string
verifyAddress
)
{
type
=
1
;
verifyAddress
=
""
;
List
<
RB_Attendance_Way_Extend
>
wayList
=
AWrespository
.
GetWayByEmployeeId
(
empId
);
if
(
wayList
!=
null
&&
wayList
.
Count
()
>
0
)
{
if
(!
string
.
IsNullOrWhiteSpace
(
wifiMac
))
{
List
<
RB_Attendance_Way_Extend
>
wifiWay
=
wayList
.
Where
(
t
=>
t
.
Type
==
(
int
)
AttendWayTypeEnum
.
Wifi
&&
(
t
.
TargetAddress
.
ToLower
()
==
wifiMac
||
t
.
TargetAddress
.
ToLower
()
==
oldWifiMac
)).
ToList
();
if
(
wifiWay
!=
null
&&
wifiWay
.
Count
()
>
0
)
{
verifyAddress
=
wifiWay
.
FirstOrDefault
().
Name
;
type
=
2
;
return
true
;
}
}
if
(!
string
.
IsNullOrWhiteSpace
(
latAndLong
))
{
List
<
RB_Attendance_Way_Extend
>
addressList
=
wayList
.
Where
(
t
=>
t
.
Type
==
(
int
)
AttendWayTypeEnum
.
Address
).
ToList
();
if
(
addressList
!=
null
&&
addressList
.
Count
()
>
0
)
{
foreach
(
var
item
in
addressList
)
{
double
distance
=
MapHelper
.
GetPointDistance
(
item
.
TargetAddress
,
latAndLong
);
if
(
distance
<=
item
.
Scope
)
{
verifyAddress
=
item
.
Name
;
type
=
1
;
return
true
;
}
}
}
}
return
false
;
}
else
{
return
false
;
}
}
/// <summary>
/// 获取打卡信息统计
/// </summary>
/// <param name="empId">员工id</param>
/// <param name="date">获取日期(年-月-日)</param>
/// <returns></returns>
public
List
<
JObject
>
PunchCardStatistical
(
int
empId
,
string
date
)
{
//打卡记录信息
List
<
RB_Attendance_Record_Extend
>
recodeList
=
attendRecordRespository
.
PunchCardStatistical
(
empId
,
date
);
List
<
JObject
>
result
=
new
List
<
JObject
>();
#
region
出勤天数
{
JObject
attendance
=
new
JObject
{
[
"name"
]
=
$"出勤天数"
,
[
"day"
]
=
$"
{
recodeList
.
Count
}
天"
};
if
(
recodeList
.
Count
>
0
)
{
attendance
[
"color"
]
=
"black"
;
}
else
{
attendance
[
"color"
]
=
"gray"
;
}
List
<
string
>
dataList
=
new
List
<
string
>();
foreach
(
var
item
in
recodeList
)
{
dataList
.
Add
(
$"
{
item
.
Date
.
ToShortDateString
().
Replace
(
"/"
,
"-"
)}
(
{
StringHelper
.
GetWeekChar
(
item
.
Date
)}
)"
);
}
attendance
[
"dataList"
]
=
JsonConvert
.
SerializeObject
(
dataList
);
result
.
Add
(
attendance
);
}
#
endregion
#
region
休息天数
{
JObject
rest
=
new
JObject
{
[
"name"
]
=
$"休息天数"
};
DateTime
searchDate
=
Convert
.
ToDateTime
(
date
);
List
<
string
>
dataList
=
new
List
<
string
>();
if
(
DateTime
.
Now
.
ToString
(
"yyyy-MM"
)
==
searchDate
.
ToString
(
"yyyy-MM"
))
//本月
{
TimeSpan
timeSpan
=
DateTime
.
Now
-
new
DateTime
(
DateTime
.
Now
.
Year
,
DateTime
.
Now
.
Month
,
1
);
int
days
=
timeSpan
.
Days
+
1
;
rest
[
"day"
]
=
$"
{
days
-
recodeList
.
Count
()}
天"
;
rest
[
"color"
]
=
"gray"
;
for
(
int
i
=
1
;
i
<=
days
;
i
++)
{
DateTime
dt
=
new
DateTime
(
searchDate
.
Year
,
searchDate
.
Month
,
i
);
if
(
recodeList
.
Where
(
t
=>
t
.
Date
.
ToShortDateString
()
==
dt
.
ToShortDateString
()).
Count
()
==
0
)
{
dataList
.
Add
(
$"
{
dt
.
Date
.
ToShortDateString
().
Replace
(
"/"
,
"-"
)}
(
{
StringHelper
.
GetWeekChar
(
dt
.
Date
)}
)"
);
}
}
//foreach (var item in recodeList)
//{
// dataList.Add($"{item.Date.ToShortDateString().Replace("/", "-")}({StringHelper.GetWeekChar(item.Date)})");
//}
}
else
{
int
days
=
DateTime
.
DaysInMonth
(
searchDate
.
Year
,
searchDate
.
Month
);
rest
[
"day"
]
=
$"
{
days
-
recodeList
.
Count
}
天"
;
rest
[
"color"
]
=
"black"
;
for
(
int
i
=
1
;
i
<=
days
;
i
++)
{
DateTime
dt
=
new
DateTime
(
searchDate
.
Year
,
searchDate
.
Month
,
i
);
if
(
recodeList
.
Where
(
t
=>
t
.
Date
.
ToShortDateString
()
==
dt
.
ToShortDateString
()).
Count
()
==
0
)
{
dataList
.
Add
(
$"
{
dt
.
Date
.
ToShortDateString
().
Replace
(
"/"
,
"-"
)}
(
{
StringHelper
.
GetWeekChar
(
dt
.
Date
)}
)"
);
}
}
}
rest
[
"dataList"
]
=
JsonConvert
.
SerializeObject
(
dataList
);
result
.
Add
(
rest
);
}
#
endregion
#
region
迟到
{
JObject
late
=
new
JObject
{
[
"name"
]
=
$"迟到"
};
List
<
RB_Attendance_Record_Extend
>
lateRecodeList
=
recodeList
.
Where
(
t
=>
t
.
BeOnStatus
==
AttendanceEnum
.
CD
).
ToList
();
late
[
"day"
]
=
$"
{
lateRecodeList
.
Count
}
天"
;
if
(
recodeList
.
Count
>
0
)
{
late
[
"color"
]
=
"black"
;
}
else
{
late
[
"color"
]
=
"gray"
;
}
List
<
string
>
dataList
=
new
List
<
string
>();
foreach
(
var
item
in
lateRecodeList
)
{
dataList
.
Add
(
$"
{
item
.
Date
.
ToShortDateString
().
Replace
(
"/"
,
"-"
)}
(
{
StringHelper
.
GetWeekChar
(
item
.
Date
)}
)"
);
}
late
[
"dataList"
]
=
JsonConvert
.
SerializeObject
(
dataList
);
result
.
Add
(
late
);
}
#
endregion
#
region
缺卡
{
JObject
lackOfCard
=
new
JObject
{
[
"name"
]
=
$"缺卡"
};
List
<
RB_Attendance_Record_Extend
>
lackOfCardRecodeList
=
recodeList
.
Where
(
t
=>
t
.
BeOnStatus
!=
AttendanceEnum
.
QK
&&
t
.
OffStatus
==
AttendanceEnum
.
QK
).
ToList
();
lackOfCard
[
"day"
]
=
$"
{
lackOfCardRecodeList
.
Count
}
天"
;
if
(
lackOfCardRecodeList
.
Count
>
0
)
{
lackOfCard
[
"color"
]
=
"black"
;
}
else
{
lackOfCard
[
"color"
]
=
"gray"
;
}
List
<
string
>
dataList
=
new
List
<
string
>();
foreach
(
var
item
in
lackOfCardRecodeList
)
{
dataList
.
Add
(
$"
{
item
.
Date
.
ToShortDateString
().
Replace
(
"/"
,
"-"
)}
(
{
StringHelper
.
GetWeekChar
(
item
.
Date
)}
)"
);
}
lackOfCard
[
"dataList"
]
=
JsonConvert
.
SerializeObject
(
dataList
);
result
.
Add
(
lackOfCard
);
}
#
endregion
#
region
旷工
{
JObject
absenteeism
=
new
JObject
{
[
"name"
]
=
$"旷工"
};
List
<
RB_Attendance_Record_Extend
>
absenteeismRecodeList
=
recodeList
.
Where
(
t
=>
t
.
BeOnStatus
==
AttendanceEnum
.
QK
&&
t
.
OffStatus
==
AttendanceEnum
.
QK
).
ToList
();
absenteeism
[
"day"
]
=
$"
{
absenteeismRecodeList
.
Count
}
天"
;
if
(
absenteeismRecodeList
.
Count
>
0
)
{
absenteeism
[
"color"
]
=
"red"
;
}
else
{
absenteeism
[
"color"
]
=
"gray"
;
}
List
<
string
>
dataList
=
new
List
<
string
>();
foreach
(
var
item
in
absenteeismRecodeList
)
{
dataList
.
Add
(
$"
{
item
.
Date
.
ToShortDateString
().
Replace
(
"/"
,
"-"
)}
(
{
StringHelper
.
GetWeekChar
(
item
.
Date
)}
)"
);
}
absenteeism
[
"dataList"
]
=
JsonConvert
.
SerializeObject
(
dataList
);
result
.
Add
(
absenteeism
);
}
#
endregion
#
region
外勤
{
JObject
field
=
new
JObject
{
[
"name"
]
=
$"外勤"
};
List
<
RB_Attendance_Record_Extend
>
fieldRecodeList
=
recodeList
.
Where
(
t
=>
t
.
BeOnStatus
==
AttendanceEnum
.
WQ
||
t
.
OffStatus
==
AttendanceEnum
.
WQ
).
ToList
();
field
[
"day"
]
=
$"
{
fieldRecodeList
.
Count
}
天"
;
if
(
fieldRecodeList
.
Count
>
0
)
{
field
[
"color"
]
=
"black"
;
}
else
{
field
[
"color"
]
=
"gray"
;
}
List
<
string
>
dataList
=
new
List
<
string
>();
foreach
(
var
item
in
fieldRecodeList
)
{
dataList
.
Add
(
$"
{
item
.
Date
.
ToShortDateString
().
Replace
(
"/"
,
"-"
)}
(
{
StringHelper
.
GetWeekChar
(
item
.
Date
)}
)"
);
}
field
[
"dataList"
]
=
JsonConvert
.
SerializeObject
(
dataList
);
result
.
Add
(
field
);
}
#
endregion
return
result
;
}
/// <summary>
/// 获取打卡月历
/// </summary>
/// <param name="empId">员工id</param>
/// <param name="date">获取日期(年-月-日)</param>
/// <returns></returns>
public
List
<
JObject
>
PunchCardCalendar
(
int
empId
,
string
date
)
{
//打卡记录信息
List
<
RB_Attendance_Record_Extend
>
recodeList
=
attendRecordRespository
.
PunchCardStatistical
(
empId
,
date
);
List
<
JObject
>
result
=
new
List
<
JObject
>();
DateTime
searchDate
=
Convert
.
ToDateTime
(
date
);
List
<
string
>
dataList
=
new
List
<
string
>();
int
days
=
DateTime
.
DaysInMonth
(
searchDate
.
Year
,
searchDate
.
Month
);
for
(
int
i
=
1
;
i
<=
days
;
i
++)
{
DateTime
dt
=
new
DateTime
(
searchDate
.
Year
,
searchDate
.
Month
,
i
);
if
(
dt
.
Date
<
DateTime
.
Now
.
Date
)
{
JObject
data
=
new
JObject
{
[
"day"
]
=
i
};
RB_Attendance_Record_Extend
recode
=
recodeList
.
Where
(
t
=>
t
.
Date
.
ToShortDateString
()
==
dt
.
ToShortDateString
()).
FirstOrDefault
();
if
(
recode
!=
null
)
{
data
[
"id"
]
=
recode
.
Id
;
data
[
"rest"
]
=
false
;
if
(
recode
.
BeOnStatus
==
AttendanceEnum
.
ZC
&&
recode
.
OffStatus
==
AttendanceEnum
.
ZC
)
{
data
[
"stateColor"
]
=
"#09D49D"
;
//正常
}
else
if
(
recode
.
BeOnStatus
==
AttendanceEnum
.
CD
)
{
data
[
"stateColor"
]
=
"#FF7D4C"
;
//迟到
}
else
if
(
recode
.
BeOnStatus
==
AttendanceEnum
.
QK
||
recode
.
OffStatus
==
AttendanceEnum
.
QK
)
{
data
[
"stateColor"
]
=
"#FF6868"
;
//缺卡
}
else
if
(
recode
.
BeOnStatus
==
AttendanceEnum
.
WQ
||
recode
.
OffStatus
==
AttendanceEnum
.
WQ
)
{
data
[
"stateColor"
]
=
"#548DFF"
;
//外勤
}
else
if
(
recode
.
BeOnStatus
==
AttendanceEnum
.
QJ
||
recode
.
OffStatus
==
AttendanceEnum
.
QJ
)
{
data
[
"stateColor"
]
=
"#FF7D4C"
;
//请假
}
else
if
(
recode
.
BeOnStatus
==
AttendanceEnum
.
BK
||
recode
.
OffStatus
==
AttendanceEnum
.
BK
)
{
data
[
"stateColor"
]
=
"#37CCE7"
;
//补卡
}
else
{
data
[
"stateColor"
]
=
"#FF6868"
;
//异常
}
}
else
{
data
[
"rest"
]
=
true
;
data
[
"stateColor"
]
=
"#CCCCCC"
;
}
result
.
Add
(
data
);
}
else
{
break
;
}
}
return
result
;
}
}
}
Edu.Module.User/bin/Release/netcoreapp3.0/Edu.Module.User.deps.json
View file @
a08d9abe
...
...
@@ -2293,14 +2293,14 @@
"Microsoft.NETCore.Targets/1.1.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
jtuKp4+ddUpehBOlmQJNWek/tXwXLeDAGtkkrHS1Qi6nOPmaLCuvDKFaqBu2c4DGKci+JMDUk4R+6jQ8P8l1aw
=="
,
"sha512"
:
"sha512-
aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg
=="
,
"path"
:
"microsoft.netcore.targets/1.1.0"
,
"hashPath"
:
"microsoft.netcore.targets.1.1.0.nupkg.sha512"
},
"Microsoft.Win32.Primitives/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
ZthhVqE8T07PsCHMAixDJJjmbdc07VO3GW8FULO+YWr/CmTLolwJoJdXRL/z2/4FAOtCJaJ/H+TPhtH2v1oaU
A=="
,
"sha512"
:
"sha512-
9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0Uunx
A=="
,
"path"
:
"microsoft.win32.primitives/4.3.0"
,
"hashPath"
:
"microsoft.win32.primitives.4.3.0.nupkg.sha512"
},
...
...
@@ -2356,7 +2356,7 @@
"NETStandard.Library/1.6.1"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
UQNdem5WY//vGStfYv8LFMcWvNTLxUocZ9YfGg4Ps2WaDerp+HrO46tDjQX88/wZaBkwv+Xq/mqjfPeMDz6QnQ
=="
,
"sha512"
:
"sha512-
WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A
=="
,
"path"
:
"netstandard.library/1.6.1"
,
"hashPath"
:
"netstandard.library.1.6.1.nupkg.sha512"
},
...
...
@@ -2391,28 +2391,28 @@
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
uoCdP75em+GOf04ew/VTet4nr9h/uVMJkrAF9vgRXc4NV4c94R5bzL853tU/kjEfQEUn79aEzzL/ETNhLTasow
=="
,
"sha512"
:
"sha512-
HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q
=="
,
"path"
:
"runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0"
,
"hashPath"
:
"runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
h6SbWq7Fjz9udTUOzuhx1sLYBaIs9YmKpiAb17H9E0YYYIOknAusPKVGv1bExrka1WRtbnpTXpuoBfYU8zVH1w
=="
,
"sha512"
:
"sha512-
+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA
=="
,
"path"
:
"runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0"
,
"hashPath"
:
"runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-c
HH7MckuzKikSR6L6RrySZ2m2C9DDsse28va9U2bE2Op1KotonVDj8JB8qLlXC3jNrdH0SuHfZ4jsHpKuTT0i
w=="
,
"sha512"
:
"sha512-c
3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAK
w=="
,
"path"
:
"runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0"
,
"hashPath"
:
"runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.native.System/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
S+nQhAdiCsSEeAqawUDCKvQl6sO501hZaT/8V49VpKGSNJQKZh0z2pw+TRDOo9LJv8yjCWMHypHgQBTEEUmw2
w=="
,
"sha512"
:
"sha512-
c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7J
w=="
,
"path"
:
"runtime.native.system/4.3.0"
,
"hashPath"
:
"runtime.native.system.4.3.0.nupkg.sha512"
},
...
...
@@ -2426,84 +2426,84 @@
"runtime.native.System.IO.Compression/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
ubimUZNWVWNbB55MO1Ev9uq66w2jmHgx4wNCaUHUs4G6qHPyGm5b0cV+zS2ai0aS9sO1e6StzJJ98OIhVQ2Oyw
=="
,
"sha512"
:
"sha512-
INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ
=="
,
"path"
:
"runtime.native.system.io.compression/4.3.0"
,
"hashPath"
:
"runtime.native.system.io.compression.4.3.0.nupkg.sha512"
},
"runtime.native.System.Net.Http/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
iTbzUFkAYPzlBjSNi4/tv6GWiw4c3D2mYScFgPgS5BUEO7K21AYXeIU7l8KtErqYEn/+DJ5FZLDDd9xMEASN4Q
=="
,
"sha512"
:
"sha512-
ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg
=="
,
"path"
:
"runtime.native.system.net.http/4.3.0"
,
"hashPath"
:
"runtime.native.system.net.http.4.3.0.nupkg.sha512"
},
"runtime.native.System.Security.Cryptography.Apple/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
5DyXXwEyil5vfxbfszS9HVXqMrPBsvZtTe1COwiDt4hfjp/yTFbACWb4JZ2IfYP+r+mb0pwobpBLQ5aW7qUv
3Q=="
,
"sha512"
:
"sha512-
DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ
3Q=="
,
"path"
:
"runtime.native.system.security.cryptography.apple/4.3.0"
,
"hashPath"
:
"runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512"
},
"runtime.native.System.Security.Cryptography.OpenSsl/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
fFcF1RvzmvWvBqBeyLa5MX/HO5cGe2Tef6uZnUKv0LJ0MwKhXensaDd48pXDgDLrHOCH9yLg8ENb6ppmgA/Up
w=="
,
"sha512"
:
"sha512-
NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnr
w=="
,
"path"
:
"runtime.native.system.security.cryptography.openssl/4.3.0"
,
"hashPath"
:
"runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
y1X4xOQmneMsDwpkiRAzHI+PaH7eycMb1jIFU3bAb20Ks0l14ZSOx9HTHQviOtztYuLZ9shZNRJNvWVbJSIMpg
=="
,
"sha512"
:
"sha512-
b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A
=="
,
"path"
:
"runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0"
,
"hashPath"
:
"runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
vv4ZlH/xxDOrL3r5y76cdsmzlCS/yrOTs4xjGNwe1P57f0CkTQdzMz9dSHo4tWk9Eg4bA3DiVwVpVO+kqAEZQg
=="
,
"sha512"
:
"sha512-
KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ
=="
,
"path"
:
"runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0"
,
"hashPath"
:
"runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
FwiyAuPHsMyQVxhdC9NvJgnaYzEu0080It56MNVonOUX54ezZzafsjuSeRht8R4slkTDwU0laIXWuUEN7U6tTA
=="
,
"sha512"
:
"sha512-
kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ
=="
,
"path"
:
"runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0"
,
"hashPath"
:
"runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512"
},
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
wH7IrGz1YyAPIt4nJXut7EyjQ5xgs2qc23YN0OiMCoA0i2OoAXgpNAPSl0QDjXB+CeKe+ZRnhGNeKfYBX1YdLw
=="
,
"sha512"
:
"sha512-
X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g
=="
,
"path"
:
"runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0"
,
"hashPath"
:
"runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
WWabnawXg2BVm76El1mwkgzOljzAOK8YHe4AenFiKKDG8/nXs38RtInyrHcG2xNLrCLSfRwrhfS4RPAQH5E0ew
=="
,
"sha512"
:
"sha512-
nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg
=="
,
"path"
:
"runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0"
,
"hashPath"
:
"runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
rBEA8wlrj/iZvNMyz/lksEz+ps3LknjwavzCG+23vm1WwLZWYIEoQIDi10pgXzgUROHC9j2ppoownmB9YzARm
Q=="
,
"sha512"
:
"sha512-
ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLr
Q=="
,
"path"
:
"runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0"
,
"hashPath"
:
"runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
0DLUJpbpi+CthPVmOzA7bkNKwNuxvFi4V8sYsSYQuLuQbBAd462CHOrIMM29ivBeUsEvdtdAel+JZa4s9t6dFQ
=="
,
"sha512"
:
"sha512-
I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A
=="
,
"path"
:
"runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0"
,
"hashPath"
:
"runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
Tq1k9cfn9PGxTwX8QmWS9NQ9Rt4HS/r+i6SPe2R5cM9OO+RgWbRK0ExGGcZqjuqyzekHfHBYrW8sVUNvaZjw8w
=="
,
"sha512"
:
"sha512-
VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg
=="
,
"path"
:
"runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0"
,
"hashPath"
:
"runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
...
...
@@ -2566,7 +2566,7 @@
"System.AppContext/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
do9UYqgS80R3NfDLsxXgAyv0w4y003ik6KmfYBpJ5CTBQb/K8ylQfrx7WlnXwvdmxj2kti2NKPv8/8nua54/ng
=="
,
"sha512"
:
"sha512-
fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA
=="
,
"path"
:
"system.appcontext/4.3.0"
,
"hashPath"
:
"system.appcontext.4.3.0.nupkg.sha512"
},
...
...
@@ -2580,14 +2580,14 @@
"System.Collections/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
tfqWMsO3XZc72+g/jdFG2bdAErjOc/SlQBXa9+maU/TvZPu6Ew8a2HQOfLAuY8CVuqviTaeEu7ptsbxPB+8SaA
=="
,
"sha512"
:
"sha512-
3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw
=="
,
"path"
:
"system.collections/4.3.0"
,
"hashPath"
:
"system.collections.4.3.0.nupkg.sha512"
},
"System.Collections.Concurrent/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
tRgZFvPa9jMS4qRluyUvD5Ll6gJeG5vG5UHWZ7nK83dOzpCux8pRuJY2TiPvoqx/anCRNEweVl+89ieenbnHHg
=="
,
"sha512"
:
"sha512-
ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ
=="
,
"path"
:
"system.collections.concurrent/4.3.0"
,
"hashPath"
:
"system.collections.concurrent.4.3.0.nupkg.sha512"
},
...
...
@@ -2608,7 +2608,7 @@
"System.ComponentModel/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
0WhdQqaBmYmIgmgADNmjTenYep1MsRO2qgATQiGkLVjinEfRBATw+OaMUTU3FQtUDxCyl2HNz789BpBCb9NcSQ
=="
,
"sha512"
:
"sha512-
VyGn1jGRZVfxnh8EdvDCi71v3bMXrsu8aYJOwoV7SNDLVhiEqwP86pPMyRGsDsxhXAm2b3o9OIqeETfN5qfezw
=="
,
"path"
:
"system.componentmodel/4.3.0"
,
"hashPath"
:
"system.componentmodel.4.3.0.nupkg.sha512"
},
...
...
@@ -2643,7 +2643,7 @@
"System.Console/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
HyI4eNqHaD7sDyxN7eTC3MmVA34LrK86IgXY4bznqGgpJ52zrigum5ZZj0ZxD+Xbnwhix/cwgJazOstiKBP/LQ
=="
,
"sha512"
:
"sha512-
DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg
=="
,
"path"
:
"system.console/4.3.0"
,
"hashPath"
:
"system.console.4.3.0.nupkg.sha512"
},
...
...
@@ -2657,7 +2657,7 @@
"System.Diagnostics.Debug/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
3jTiSHr6dO9uSJAoUcH8Wg29Nc+cQHSmkkn9ul6a9HQhW0KboGrGLiHGCt2AXISFHK7YlGP0fzes2X6/gbpDgQ
=="
,
"sha512"
:
"sha512-
ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g
=="
,
"path"
:
"system.diagnostics.debug/4.3.0"
,
"hashPath"
:
"system.diagnostics.debug.4.3.0.nupkg.sha512"
},
...
...
@@ -2678,7 +2678,7 @@
"System.Diagnostics.Tools/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
uVam5oaDJ+lrCkzR5paF0bXKewt8/h8ZaX8xIqm48ypbpdpkp/EWM+uTegiUvraO3Fv+o3oj0cPtprJISNhXXQ
=="
,
"sha512"
:
"sha512-
UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA
=="
,
"path"
:
"system.diagnostics.tools/4.3.0"
,
"hashPath"
:
"system.diagnostics.tools.4.3.0.nupkg.sha512"
},
...
...
@@ -2692,7 +2692,7 @@
"System.Diagnostics.Tracing/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
sRRUOGLj+PCOa9xei6b4JUSg0CSxwBm+EkyNAngFW9ARE6S3D19o9Ol5SeGUr1tFSVt4vX+xdl0OSz581Ksd4Q
=="
,
"sha512"
:
"sha512-
rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw
=="
,
"path"
:
"system.diagnostics.tracing/4.3.0"
,
"hashPath"
:
"system.diagnostics.tracing.4.3.0.nupkg.sha512"
},
...
...
@@ -2706,63 +2706,63 @@
"System.Dynamic.Runtime/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
zxQXMykO4ZAptqREvoqNlbzdBz+SusbQqr8acRtXQGZ3wDyH+Mi6VFImuIyeFsPMkNLhNvk2xBzNHnY1Bi9zjQ
=="
,
"sha512"
:
"sha512-
SNVi1E/vfWUAs/WYKhE9+qlS6KqK0YVhnlT0HQtr8pMIA8YX3lwy3uPMownDwdYISBdmAF/2holEIldVp85Wag
=="
,
"path"
:
"system.dynamic.runtime/4.3.0"
,
"hashPath"
:
"system.dynamic.runtime.4.3.0.nupkg.sha512"
},
"System.Globalization/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
QsvKtsliUgA7KWLgXPibgflvlvg0r3g05jzNMwz5tvRg4ZPnRT8xtzr8CBCDdBVQs7x8qUcHvciUykA8bAo7jw
=="
,
"sha512"
:
"sha512-
kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg
=="
,
"path"
:
"system.globalization/4.3.0"
,
"hashPath"
:
"system.globalization.4.3.0.nupkg.sha512"
},
"System.Globalization.Calendars/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
AaI3lmNJGDhuQ2gvrcj1mL4mFMVNXQ+mQ4a4nMq+jiZk3tDJO6SShiteHoJ+tMAF8u4ipEF0oUHe8aL7hYiFxg
=="
,
"sha512"
:
"sha512-
GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA
=="
,
"path"
:
"system.globalization.calendars/4.3.0"
,
"hashPath"
:
"system.globalization.calendars.4.3.0.nupkg.sha512"
},
"System.Globalization.Extensions/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
YTMfoFzh5xRVINlBLjD1b5quJPh9eMpFr4xg17wSRFnVz4IxKltD084XB1curpdQlrAsYjf1wIsf+ddlQl0HnA
=="
,
"sha512"
:
"sha512-
FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ
=="
,
"path"
:
"system.globalization.extensions/4.3.0"
,
"hashPath"
:
"system.globalization.extensions.4.3.0.nupkg.sha512"
},
"System.IO/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
lHnCA1CwGlY3hbvMSgRrjGLpj6XJKvvrZ4I/0IFV+CrjPXorggUMrdjFWzWMngdWbYQMYIE3sCatHKInWtMBTQ
=="
,
"sha512"
:
"sha512-
3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg
=="
,
"path"
:
"system.io/4.3.0"
,
"hashPath"
:
"system.io.4.3.0.nupkg.sha512"
},
"System.IO.Compression/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
S2tSQT+SjN1MIbKlgqmkowPHD384bX1O1U7vbg+RDMQVLWNUqqOCADy4y/lGkLFwj6P4MfVoukR6HKm3HjmH9w
=="
,
"sha512"
:
"sha512-
YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg
=="
,
"path"
:
"system.io.compression/4.3.0"
,
"hashPath"
:
"system.io.compression.4.3.0.nupkg.sha512"
},
"System.IO.Compression.ZipFile/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
SapbBchwyGYdnkT1vtLcKSJHHtQ8r8qhsJ7NTMwK9WQijD7y73L9OTf75iGIAHS7RCZbAyBefsSvHw6RmUEjZQ
=="
,
"sha512"
:
"sha512-
G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg
=="
,
"path"
:
"system.io.compression.zipfile/4.3.0"
,
"hashPath"
:
"system.io.compression.zipfile.4.3.0.nupkg.sha512"
},
"System.IO.FileSystem/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
Uoayf21U2TOqHjRz1/nxbVvanOaOkisgy8bZLwJUPeloZLiS7TL+t2/doDWQ4Wzq1Xc5qmwtmR3GpRUgh9s5U
A=="
,
"sha512"
:
"sha512-
3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTd
A=="
,
"path"
:
"system.io.filesystem/4.3.0"
,
"hashPath"
:
"system.io.filesystem.4.3.0.nupkg.sha512"
},
"System.IO.FileSystem.Primitives/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
qCnhqnKBWOop9amxE4FdfIdhnrHk2nXp/Vbn5ea1/vGXgvA+IrqI/YRSP0TB00ajXKOrZTthyhRwmNx2YFtKNA
=="
,
"sha512"
:
"sha512-
6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw
=="
,
"path"
:
"system.io.filesystem.primitives/4.3.0"
,
"hashPath"
:
"system.io.filesystem.primitives.4.3.0.nupkg.sha512"
},
...
...
@@ -2776,14 +2776,14 @@
"System.Linq/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
/OIh4dHw7pUiq4t06EMVZOL3DhQY+1wCtjiUHZwFmm83cnpwTv6hKNtULiMP8Q26HYXOx7u3d+AY0IzYPGxOtQ
=="
,
"sha512"
:
"sha512-
5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw
=="
,
"path"
:
"system.linq/4.3.0"
,
"hashPath"
:
"system.linq.4.3.0.nupkg.sha512"
},
"System.Linq.Expressions/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
0jD/FCSXymfWCrk0UAR9Q2wmNk3VJ0f28ECpZdw2Dj56e4gYrdduDxrMZKCDu8oDJJSFGUIcuXT6cDodrd4wVQ
=="
,
"sha512"
:
"sha512-
PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg
=="
,
"path"
:
"system.linq.expressions/4.3.0"
,
"hashPath"
:
"system.linq.expressions.4.3.0.nupkg.sha512"
},
...
...
@@ -2797,7 +2797,7 @@
"System.Net.Http/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
Yp04JL85F38LQzElsET91QqJsNQm+BHOZ5PR8IHpi+yM8KBIOVc8RkZXrRYtmDw/4Pu0zxqNKupI9xNUkuZv7
A=="
,
"sha512"
:
"sha512-
sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEw
A=="
,
"path"
:
"system.net.http/4.3.0"
,
"hashPath"
:
"system.net.http.4.3.0.nupkg.sha512"
},
...
...
@@ -2811,84 +2811,84 @@
"System.Net.Primitives/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
BZYIpCiPjW/UhJ5sir6sU3qtLD/0NuAsrUS0CUubAywpuDEPwTaKrN33OJ5FVpLO8aLqfCGRJQAjWgQvZHkbqg
=="
,
"sha512"
:
"sha512-
qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA
=="
,
"path"
:
"system.net.primitives/4.3.0"
,
"hashPath"
:
"system.net.primitives.4.3.0.nupkg.sha512"
},
"System.Net.Sockets/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
JS4gfkz7iImQFscfYrIHeEGNyttsC7pjBtdpglbvVO15VrvOa1jaIEeCnopKNrI/XCJWihhbYNgdLNm5v4CFKA
=="
,
"sha512"
:
"sha512-
m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw
=="
,
"path"
:
"system.net.sockets/4.3.0"
,
"hashPath"
:
"system.net.sockets.4.3.0.nupkg.sha512"
},
"System.ObjectModel/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
eASwOXeVD6d04alRZz9htFleUhFGAm9QT9pU71FCUvew58ojSGQ91OpK753Qv0LdqeUk6Oskqs4LZHaY6OCxhw
=="
,
"sha512"
:
"sha512-
bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ
=="
,
"path"
:
"system.objectmodel/4.3.0"
,
"hashPath"
:
"system.objectmodel.4.3.0.nupkg.sha512"
},
"System.Reflection/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
/U196t6BR0QGPIodNy1kESvR1co1pW6fhtNZXyOIrers7dpk4+sHvuQjOfZq++KhcpTVZYAttknYEpLBrqn1Bw
=="
,
"sha512"
:
"sha512-
KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ
=="
,
"path"
:
"system.reflection/4.3.0"
,
"hashPath"
:
"system.reflection.4.3.0.nupkg.sha512"
},
"System.Reflection.Emit/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
GCAFZkuA/6JuYqVQIpDh1+DNdPZ9cfUY7NvAnQ0DBs3avOZVNVTRIhqZE1eIMu+Qj7sF4U+eRxW0gSfV6hQAgQ
=="
,
"sha512"
:
"sha512-
228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg
=="
,
"path"
:
"system.reflection.emit/4.3.0"
,
"hashPath"
:
"system.reflection.emit.4.3.0.nupkg.sha512"
},
"System.Reflection.Emit.ILGeneration/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
/fyzpXnU506v9HfSpaTSGSPnJWFg4b8t0nbKHNwJ5LFquvJAtND6td2Cpp+Ek1OLRuR0WxJ+YCB6ZW2GyvpBZQ
=="
,
"sha512"
:
"sha512-
59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng
=="
,
"path"
:
"system.reflection.emit.ilgeneration/4.3.0"
,
"hashPath"
:
"system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512"
},
"System.Reflection.Emit.Lightweight/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
FX/zDlUSbxIwBM3ePmXoFfeiEPXRqwtoDH12velyRYhTv41pmM3fKLWL2vceLrJ1kOZTKFjHScPz+j3arI2p7g
=="
,
"sha512"
:
"sha512-
oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA
=="
,
"path"
:
"system.reflection.emit.lightweight/4.3.0"
,
"hashPath"
:
"system.reflection.emit.lightweight.4.3.0.nupkg.sha512"
},
"System.Reflection.Extensions/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
gfClVzHQcT0eY3qSVcMI6cQxwRmjFQfIrINEpBJMA6ftlNIhO/H8/e6V78YzX+0z7Bw2VJFJP4G7oIcbO32ol
Q=="
,
"sha512"
:
"sha512-
rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQN
Q=="
,
"path"
:
"system.reflection.extensions/4.3.0"
,
"hashPath"
:
"system.reflection.extensions.4.3.0.nupkg.sha512"
},
"System.Reflection.Primitives/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
uln4id8a086oqZBDylX/0jTZQ8qkoAdTjI1ZkUieD+nJkH9qQfRxCWSNCe2W0qVyRiQZe+iKerY5T5dtOyYcX
A=="
,
"sha512"
:
"sha512-
5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlI
A=="
,
"path"
:
"system.reflection.primitives/4.3.0"
,
"hashPath"
:
"system.reflection.primitives.4.3.0.nupkg.sha512"
},
"System.Reflection.TypeExtensions/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
ER4elwccfGOYXV69hI3W3nCwMelkAtu3VSs8lhHfE0EjqW5qG8qmv9lbhCdKOEWwI4B/LlXCbsyo38nGYY1Bnw
=="
,
"sha512"
:
"sha512-
7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA
=="
,
"path"
:
"system.reflection.typeextensions/4.3.0"
,
"hashPath"
:
"system.reflection.typeextensions.4.3.0.nupkg.sha512"
},
"System.Resources.ResourceManager/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
AN3tKJp9LAOcCA9l+sm67HYGSAhMIWApcLYl6U6yuB9/7U8vybia7BhPUWvlO9D1Bojqhh7fQs4KWYoHLG+Jyw
=="
,
"sha512"
:
"sha512-
/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A
=="
,
"path"
:
"system.resources.resourcemanager/4.3.0"
,
"hashPath"
:
"system.resources.resourcemanager.4.3.0.nupkg.sha512"
},
"System.Runtime/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
R7ADy3PoW/NP1vgBNBlitlNxZm9OjzlHnPAyY0xvrcJjyh3PqrcDbRErvZwR5TRZxgMnaBT0hZRpHS4EHXzKL
w=="
,
"sha512"
:
"sha512-
JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhi
w=="
,
"path"
:
"system.runtime/4.3.0"
,
"hashPath"
:
"system.runtime.4.3.0.nupkg.sha512"
},
...
...
@@ -2902,35 +2902,35 @@
"System.Runtime.Extensions/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
KqXVl/pu190dAwqKc8fczs34LdLeNEuH69NmCTKmKoN8y1fcxapVIEtrbUVTebiyO2r66m/VP5HaPLU0ejzP6w
=="
,
"sha512"
:
"sha512-
guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g
=="
,
"path"
:
"system.runtime.extensions/4.3.0"
,
"hashPath"
:
"system.runtime.extensions.4.3.0.nupkg.sha512"
},
"System.Runtime.Handles/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
yDJvHNMQNLHqvBxK63gK5/TrEbNuaZJkBTHapyiq8FwQycDoWlHwSWPqzcpbDnNH3adqL1AV+3Crpuye5Q+QN
g=="
,
"sha512"
:
"sha512-
OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVg
g=="
,
"path"
:
"system.runtime.handles/4.3.0"
,
"hashPath"
:
"system.runtime.handles.4.3.0.nupkg.sha512"
},
"System.Runtime.InteropServices/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
HU/IH6woK1FxbYPBBvVADidlk74DZIFlXgk7VTxmsrlNjS9mq9biwgq25YgMvqRllCFtvuNEKcK6zVcMj8S/jA
=="
,
"sha512"
:
"sha512-
uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ
=="
,
"path"
:
"system.runtime.interopservices/4.3.0"
,
"hashPath"
:
"system.runtime.interopservices.4.3.0.nupkg.sha512"
},
"System.Runtime.InteropServices.RuntimeInformation/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
AwOv0R98WGNhdLNFQGvC027YvE4VUsTmDnkSAoxLUcZVrW/KSXCdeevtBdDuP8JvlSy2MoBaEkI45vdwoxYjxQ
=="
,
"sha512"
:
"sha512-
cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw
=="
,
"path"
:
"system.runtime.interopservices.runtimeinformation/4.3.0"
,
"hashPath"
:
"system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512"
},
"System.Runtime.Numerics/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
fbmlkJiM9SEw6chayUoKRdBP7DOXObYAxP7d4xuKk6PU8nClgrf4LGPo/Nd3cqXD0+Uvs5G3fxyS8vrAfRrIAg
=="
,
"sha512"
:
"sha512-
yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ
=="
,
"path"
:
"system.runtime.numerics/4.3.0"
,
"hashPath"
:
"system.runtime.numerics.4.3.0.nupkg.sha512"
},
...
...
@@ -2944,42 +2944,42 @@
"System.Security.Cryptography.Algorithms/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
NG72ASyDyPOSIimdioqz0fI9GQckfzbPvQvEQxuIQKLQ0SacMyQRLWPIre2f6i5P8bhEKO7yKX5nZ0a8dL+33w
=="
,
"sha512"
:
"sha512-
W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg
=="
,
"path"
:
"system.security.cryptography.algorithms/4.3.0"
,
"hashPath"
:
"system.security.cryptography.algorithms.4.3.0.nupkg.sha512"
},
"System.Security.Cryptography.Cng/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
eew12RoETmll8EN7kEzW7y9jZVbhD/JC5LASxkjrfPesTNQnZMZeeGwV+EY+VqKf2s15IcdI/MUiaN5b+IDueA
=="
,
"sha512"
:
"sha512-
03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g
=="
,
"path"
:
"system.security.cryptography.cng/4.3.0"
,
"hashPath"
:
"system.security.cryptography.cng.4.3.0.nupkg.sha512"
},
"System.Security.Cryptography.Csp/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
kCLk/d0VSgm6jjp4vgJUM77z/+BAUkNt5JvQxs+vQm6RZjYSmmluxWdeI30B8js9rc5ja978s6RYZwoNiJDd9g
=="
,
"sha512"
:
"sha512-
X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA
=="
,
"path"
:
"system.security.cryptography.csp/4.3.0"
,
"hashPath"
:
"system.security.cryptography.csp.4.3.0.nupkg.sha512"
},
"System.Security.Cryptography.Encoding/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
LJJnwE5qD790h2DPHhlXsmlewEmg2xZducxHhNpoWrk9rNDb71HSKMJpioCJ3hCBtQeDSCsj6uhUeipQ8KS9qA
=="
,
"sha512"
:
"sha512-
1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw
=="
,
"path"
:
"system.security.cryptography.encoding/4.3.0"
,
"hashPath"
:
"system.security.cryptography.encoding.4.3.0.nupkg.sha512"
},
"System.Security.Cryptography.OpenSsl/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
8+yrkPIQ7N9oxskjATGoYWqNyPdyXqeN08jRQfdybm2TCyObj81iz/zSytiozBSf8GDpNOfiQ4DqAT9t4zfP5g
=="
,
"sha512"
:
"sha512-
h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w
=="
,
"path"
:
"system.security.cryptography.openssl/4.3.0"
,
"hashPath"
:
"system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"System.Security.Cryptography.Primitives/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
hFqAVt9OsfH5loeAlpDj+apYs+RzUdmaI19+f2Cq78Vn1bCvVZxEzrECKJH4iD6foRCpIQCwQ/inxz8KKg7XCw
=="
,
"sha512"
:
"sha512-
7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg
=="
,
"path"
:
"system.security.cryptography.primitives/4.3.0"
,
"hashPath"
:
"system.security.cryptography.primitives.4.3.0.nupkg.sha512"
},
...
...
@@ -2993,7 +2993,7 @@
"System.Security.Cryptography.X509Certificates/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
G15jaQeTp4XU5A3TI+CiJKhji49hqjZSNbz+R0V2dY7hT6gR4zLpEASYqH3m51JTZtmRx0WhBYxbx13OaQuBFA
=="
,
"sha512"
:
"sha512-
t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw
=="
,
"path"
:
"system.security.cryptography.x509certificates/4.3.0"
,
"hashPath"
:
"system.security.cryptography.x509certificates.4.3.0.nupkg.sha512"
},
...
...
@@ -3014,7 +3014,7 @@
"System.Text.Encoding/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
9+kKiGF7iM11HWsWhHv0bJaY3DdabXRK3A0LAu4RES+F0qf/G9OK2xrzaLVOFXjykQw0V9+y5XBbsTrBgU1C5
w=="
,
"sha512"
:
"sha512-
BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZ
w=="
,
"path"
:
"system.text.encoding/4.3.0"
,
"hashPath"
:
"system.text.encoding.4.3.0.nupkg.sha512"
},
...
...
@@ -3028,7 +3028,7 @@
"System.Text.Encoding.Extensions/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
vnL/fBuhf/rHeEsYpSIx14QsU8DLXtoekPCSTeZN4RO3pVweHpnwlGN7Hgs75yY6TVtcYob7za8dufR/wG8WOA
=="
,
"sha512"
:
"sha512-
YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw
=="
,
"path"
:
"system.text.encoding.extensions/4.3.0"
,
"hashPath"
:
"system.text.encoding.extensions.4.3.0.nupkg.sha512"
},
...
...
@@ -3049,14 +3049,14 @@
"System.Text.RegularExpressions/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
Cs0QoguH5Uw4d66xuhgS/X4Tjm/Mncged1C2fGRXdhPJr9pUhbir59lm40f/RZsxQLL19efaeedWQbtpJryfAg
=="
,
"sha512"
:
"sha512-
RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA
=="
,
"path"
:
"system.text.regularexpressions/4.3.0"
,
"hashPath"
:
"system.text.regularexpressions.4.3.0.nupkg.sha512"
},
"System.Threading/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
GUdTRQI5b7tP+bxn0wb1H2urT4gVyZmAMAiAsmExO8xGfxbVYnJnaErE1Qz/K1TL/lpymoQUwgaqj8295vHK+
w=="
,
"sha512"
:
"sha512-
VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpI
w=="
,
"path"
:
"system.threading/4.3.0"
,
"hashPath"
:
"system.threading.4.3.0.nupkg.sha512"
},
...
...
@@ -3070,7 +3070,7 @@
"System.Threading.Tasks/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
KlMDBDsVbQ/dfjAKi23D1QMSDRE4SmlEXatGsgBmDXZ1dqpnLdJOe/NVyc9Dt2T6Adgo6pBJSucmn/QTj6JWd
A=="
,
"sha512"
:
"sha512-
LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXi
A=="
,
"path"
:
"system.threading.tasks/4.3.0"
,
"hashPath"
:
"system.threading.tasks.4.3.0.nupkg.sha512"
},
...
...
@@ -3098,7 +3098,7 @@
"System.Threading.Timer/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
N9AzP8dUwPxMhg2jh33pV8bOVms5HkXoTWsm/mnfRYPOy842yZkaqTFyz1qEDqneksg8qzSEA2JPnZNqIe68Kg
=="
,
"sha512"
:
"sha512-
Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ
=="
,
"path"
:
"system.threading.timer/4.3.0"
,
"hashPath"
:
"system.threading.timer.4.3.0.nupkg.sha512"
},
...
...
@@ -3112,14 +3112,14 @@
"System.Xml.ReaderWriter/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
e9D+WUChqF7SZDcRYiH+NNxXeP5eTKbbvwhnAhs4s5mLcXvGOVR7IynsDxI87hzUwihj6xMx23S4SiLLOUL7kg
=="
,
"sha512"
:
"sha512-
GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA
=="
,
"path"
:
"system.xml.readerwriter/4.3.0"
,
"hashPath"
:
"system.xml.readerwriter.4.3.0.nupkg.sha512"
},
"System.Xml.XDocument/4.3.0"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
gUE7UkiymHpxEDSWJ2oiycH43yvGk51NHzbY7Ub7ZIEFPh6oi5HjWatH4bJc2IeBQhOeRZ/akadnr0YEXH6wZA
=="
,
"sha512"
:
"sha512-
5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ
=="
,
"path"
:
"system.xml.xdocument/4.3.0"
,
"hashPath"
:
"system.xml.xdocument.4.3.0.nupkg.sha512"
},
...
...
@@ -3133,7 +3133,7 @@
"System.Xml.XPath/4.0.1"
:
{
"type"
:
"package"
,
"serviceable"
:
true
,
"sha512"
:
"sha512-
7lq2TCqxJ+6eIDZOc7HBVN6TcX4HzuO11O0wuS7XZprAMvxVCqTZQoDArlEglmo2yvTIDKtGYQ3ByIIDZx7bIQ
=="
,
"sha512"
:
"sha512-
UWd1H+1IJ9Wlq5nognZ/XJdyj8qPE4XufBUkAW59ijsCPjZkZe0MUzKKJFBr+ZWBe5Wq1u1d5f2CYgE93uH7DA
=="
,
"path"
:
"system.xml.xpath/4.0.1"
,
"hashPath"
:
"system.xml.xpath.4.0.1.nupkg.sha512"
},
...
...
Edu.Repository/System/RB_Msg_BaseRepository.cs
View file @
a08d9abe
...
...
@@ -7,7 +7,7 @@ using Edu.Model.ViewModel.System;
namespace
Edu.Repository.System
{
public
class
RB_Msg_BaseRepository
:
BaseRepository
<
RB_Msg_Base
>
public
class
RB_Msg_BaseRepository
:
BaseRepository
<
RB_Msg_Base
>
{
/// <summary>
/// 表名称
...
...
@@ -22,7 +22,7 @@ namespace Edu.Repository.System
public
List
<
RB_Msg_Base_Function_ViewModel
>
GetListRepository
(
RB_Msg_Base_Function_ViewModel
query
)
{
StringBuilder
builder
=
new
StringBuilder
();
builder
.
Append
(
$" SELECT * FROM
{
TableName
}
"
);
builder
.
Append
(
$" SELECT * FROM
{
TableName
}
where Status=0
"
);
if
(
query
!=
null
)
{
if
(
query
.
Group_Id
>
0
)
...
...
@@ -31,9 +31,9 @@ namespace Edu.Repository.System
}
if
(
query
.
StoreType
>
0
)
{
builder
.
Append
(
$" AND
{
nameof
(
RB_Msg_Base
.
StoreType
)}
=
{
query
.
StoreType
}
"
);
builder
.
Append
(
$" AND
{
nameof
(
RB_Msg_Base
.
StoreType
)}
=
{
(
int
)
query
.
StoreType
}
"
);
}
}
return
Get
<
RB_Msg_Base_Function_ViewModel
>(
builder
.
ToString
()).
ToList
();
...
...
@@ -48,7 +48,7 @@ namespace Edu.Repository.System
public
List
<
RB_Msg_Base_Function_ViewModel
>
GetPageListRepository
(
int
pageIndex
,
int
pageSize
,
out
long
rowsCount
,
RB_Msg_Base_Function_ViewModel
query
)
{
StringBuilder
builder
=
new
StringBuilder
();
builder
.
Append
(
$" SELECT * FROM
{
TableName
}
where
1=1
"
);
builder
.
Append
(
$" SELECT * FROM
{
TableName
}
where
Status=0
"
);
if
(
query
!=
null
)
{
if
(
query
.
Group_Id
>
0
)
...
...
@@ -57,7 +57,7 @@ namespace Edu.Repository.System
}
if
(
query
.
StoreType
>
0
)
{
builder
.
Append
(
$" AND
{
nameof
(
RB_Msg_Base
.
StoreType
)}
=
{
query
.
StoreType
}
"
);
builder
.
Append
(
$" AND
{
nameof
(
RB_Msg_Base
.
StoreType
)}
=
{
(
int
)
query
.
StoreType
}
"
);
}
}
...
...
Edu.Repository/System/RB_Msg_BaseTemplateRepository.cs
0 → 100644
View file @
a08d9abe
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
Edu.Model.Entity.System
;
using
Edu.Model.ViewModel.System
;
namespace
Edu.Repository.System
{
/// <summary>
/// 短信模板仓储层
/// </summary>
public
class
RB_Msg_BaseTemplateRepository
:
BaseRepository
<
RB_Msg_BaseTemplate
>
{
/// <summary>
/// 表名称
/// </summary>
public
string
TableName
{
get
{
return
nameof
(
RB_Msg_BaseTemplate
);
}
}
/// <summary>
/// 获取短信模板配置信息
/// </summary>
/// <param name="query">查询条件</param>
/// <returns></returns>
public
List
<
RB_Msg_BaseTemplate_ViewModel
>
GetListRepository
(
RB_Msg_BaseTemplate_ViewModel
query
)
{
StringBuilder
builder
=
new
StringBuilder
();
builder
.
Append
(
$" SELECT * FROM
{
TableName
}
where 1=1 "
);
if
(
query
!=
null
)
{
if
(
query
.
Group_Id
>
0
)
{
builder
.
Append
(
$" AND
{
nameof
(
RB_Msg_BaseTemplate
.
Group_Id
)}
=
{
query
.
Group_Id
}
"
);
}
if
(
query
.
StoreType
>
0
)
{
builder
.
Append
(
$" AND
{
nameof
(
RB_Msg_BaseTemplate
.
StoreType
)}
=
{(
int
)
query
.
StoreType
}
"
);
}
if
(
query
.
BaseTemplateType
>
0
)
{
builder
.
Append
(
$" AND
{
nameof
(
RB_Msg_BaseTemplate
.
BaseTemplateType
)}
=
{(
int
)
query
.
BaseTemplateType
}
"
);
}
}
return
Get
<
RB_Msg_BaseTemplate_ViewModel
>(
builder
.
ToString
()).
ToList
();
}
/// <summary>
/// 获取短信模板配置信息
/// </summary>
/// <param name="query">查询条件</param>
/// <returns></returns>
public
List
<
RB_Msg_BaseTemplate_ViewModel
>
GetPageListRepository
(
int
pageIndex
,
int
pageSize
,
out
long
rowsCount
,
RB_Msg_BaseTemplate_ViewModel
query
)
{
StringBuilder
builder
=
new
StringBuilder
();
builder
.
Append
(
$" SELECT * FROM
{
TableName
}
where 1=1 "
);
if
(
query
!=
null
)
{
if
(
query
.
Group_Id
>
0
)
{
builder
.
Append
(
$" AND
{
nameof
(
RB_Msg_BaseTemplate
.
Group_Id
)}
=
{
query
.
Group_Id
}
"
);
}
if
(
query
.
StoreType
>
0
)
{
builder
.
Append
(
$" AND
{
nameof
(
RB_Msg_BaseTemplate
.
StoreType
)}
=
{(
int
)
query
.
StoreType
}
"
);
}
if
(
query
.
BaseTemplateType
>
0
)
{
builder
.
Append
(
$" AND
{
nameof
(
RB_Msg_BaseTemplate
.
BaseTemplateType
)}
=
{(
int
)
query
.
BaseTemplateType
}
"
);
}
}
return
GetPage
<
RB_Msg_BaseTemplate_ViewModel
>(
pageIndex
,
pageSize
,
out
rowsCount
,
builder
.
ToString
()).
ToList
();
}
}
}
Edu.Repository/System/RB_Msg_LogRepository.cs
View file @
a08d9abe
...
...
@@ -21,7 +21,7 @@ namespace Edu.Repository.System
public
List
<
RB_Msg_Log
>
GetListRepository
(
RB_Msg_Log
query
)
{
StringBuilder
builder
=
new
StringBuilder
();
builder
.
Append
(
$" SELECT * FROM
{
TableName
}
"
);
builder
.
Append
(
$" SELECT * FROM
{
TableName
}
where 1=1
"
);
if
(
query
!=
null
)
{
if
(
query
.
Group_Id
>
0
)
...
...
@@ -32,7 +32,7 @@ namespace Edu.Repository.System
{
builder
.
Append
(
$" AND
{
nameof
(
RB_Msg_Log
.
School_Id
)}
=
{
query
.
School_Id
}
"
);
}
if
(
query
.
SendStatus
>
0
)
if
(
query
.
SendStatus
.
HasValue
&&
query
.
SendStatus
>
0
)
{
builder
.
Append
(
$" AND
{
nameof
(
RB_Msg_Log
.
SendStatus
)}
=
{(
int
)
query
.
SendStatus
}
"
);
}
...
...
@@ -62,7 +62,7 @@ namespace Edu.Repository.System
builder
.
Append
(
$" AND
{
nameof
(
RB_Msg_Log
.
School_Id
)}
=
{
query
.
School_Id
}
"
);
}
if
(
query
.
SendStatus
>
0
)
if
(
query
.
SendStatus
.
HasValue
&&
query
.
SendStatus
>
0
)
{
builder
.
Append
(
$" AND
{
nameof
(
RB_Msg_Log
.
SendStatus
)}
=
{(
int
)
query
.
SendStatus
}
"
);
}
...
...
Edu.ThirdCore/Edu.ThirdCore.csproj
0 → 100644
View file @
a08d9abe
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Folder Include="Oss\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Aliyun.Net.SDK.Core" Version="1.0.3" />
<PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.10.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
</ItemGroup>
<ItemGroup>
<Reference Include="aliyun-net-sdk-core">
<HintPath>lib\aliyun-net-sdk-core.dll</HintPath>
</Reference>
<Reference Include="aliyun-net-sdk-dysmsapi">
<HintPath>lib\aliyun-net-sdk-dysmsapi.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
Edu.ThirdCore/Message/MessageCore.cs
0 → 100644
View file @
a08d9abe
using
Newtonsoft.Json
;
using
Newtonsoft.Json.Linq
;
using
System
;
using
System.Threading
;
using
Aliyun.Acs.Core
;
using
Aliyun.Acs.Core.Exceptions
;
using
Aliyun.Acs.Core.Profile
;
using
Aliyun.Acs.Dysmsapi.Model.V20170525
;
namespace
Edu.ThirdCore.Message
{
/// <summary>
/// 消息发送中心
/// </summary>
public
class
MessageCore
{
private
static
bool
IsFinish
=
true
;
public
static
void
Init
()
{
while
(
QueueHelper
.
Queue
.
Count
==
0
||
!
IsFinish
)
{
Thread
.
Sleep
(
1000
);
};
IsFinish
=
false
;
string
content
=
QueueHelper
.
Queue
.
Dequeue
()
as
string
;
Run
(
content
);
Init
();
}
public
static
void
Run
(
string
content
)
{
try
{
JObject
obj
=
JObject
.
Parse
(
content
);
switch
(
obj
[
"cmd"
].
ToString
().
ToLower
())
{
case
"sms"
:
SendSMS
(
obj
);
break
;
default
:
break
;
}
}
catch
(
Exception
ex
)
{
Console
.
WriteLine
(
ex
.
Message
);
}
IsFinish
=
true
;
}
private
static
void
SendSMS
(
JObject
obj
)
{
SendSmsRequest
request
=
new
SendSmsRequest
();
try
{
String
product
=
"Dysmsapi"
;
//短信API产品名称(短信产品名固定,无需修改)
String
domain
=
obj
[
"Domain"
].
ToString
();
//短信API产品域名(接口地址固定,无需修改)
String
accessKeyId
=
obj
[
"AccessKeyId"
].
ToString
();
String
accessKeySecret
=
obj
[
"AccessKeySecret"
].
ToString
();
IClientProfile
profile
=
DefaultProfile
.
GetProfile
(
obj
[
"RegionId"
].
ToString
(),
accessKeyId
,
accessKeySecret
);
DefaultProfile
.
AddEndpoint
(
obj
[
"RegionId"
].
ToString
(),
obj
[
"RegionId"
].
ToString
(),
product
,
domain
);
IAcsClient
acsClient
=
new
DefaultAcsClient
(
profile
);
//必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
request
.
PhoneNumbers
=
obj
[
"phoneNumber"
].
ToString
();
request
.
SignName
=
obj
[
"SignName"
].
ToString
();
//aliSms["signName"].ToString();
//必填:短信模板-可在短信控制台中找到
request
.
TemplateCode
=
obj
[
"templateCode"
].
ToString
();
//可选:模板中的变量替换JSON串,如模板内容为"您的验证码为${code}"时,此处的值为
request
.
TemplateParam
=
obj
[
"templateParam"
].
ToString
();
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request
.
OutId
=
obj
[
"OutId"
].
ToString
();
//请求失败这里会抛ClientException异常
SendSmsResponse
sendSmsResponse
=
acsClient
.
GetAcsResponse
(
request
);
if
(!
sendSmsResponse
.
Code
.
Equals
(
"OK"
))
{
var
data
=
new
{
phoneNumber
=
obj
[
"phoneNumber"
].
ToString
(),
templateParam
=
obj
[
"templateParam"
].
ToString
(),
code
=
sendSmsResponse
.
Code
,
message
=
sendSmsResponse
.
Message
};
//return data;
}
var
datatst
=
new
{
phoneNumber
=
obj
[
"phoneNumber"
].
ToString
(),
templateParam
=
obj
[
"templateParam"
].
ToString
(),
code
=
sendSmsResponse
.
Code
,
message
=
sendSmsResponse
.
Message
};
//return datatst;
// Mall.Common.Plugin.LogHelper.WriteInfo(JsonConvert.SerializeObject(datatst));
}
catch
(
Aliyun
.
Acs
.
Core
.
Exceptions
.
ServerException
ex
)
{
var
data
=
new
{
phoneNumber
=
obj
[
"phoneNumber"
].
ToString
(),
templateParam
=
obj
[
"templateParam"
].
ToString
(),
code
=
"NO"
,
message
=
ex
.
ToString
()
};
// return data;
//LogHelper.Write(ex, "SendSMS1");
}
catch
(
ClientException
ex
)
{
var
data
=
new
{
phoneNumber
=
obj
[
"phoneNumber"
].
ToString
(),
templateParam
=
obj
[
"templateParam"
].
ToString
(),
code
=
"NO"
,
message
=
ex
.
ToString
()
};
// return data;
// LogHelper.Write(ex, "SendSMS2");
}
}
/// <summary>
/// java调用
/// </summary>
/// <param name="obj"></param>
public
static
string
SendSMSToJava
(
string
phoneNumber
,
string
templateCode
,
string
templateParam
,
string
SignName
,
string
Domain
,
string
AccessKeyId
,
string
AccessKeySecret
,
string
RegionId
)
{
SendSmsRequest
request
=
new
SendSmsRequest
();
try
{
//JObject aliSms = Config.AliSms;
//String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)
//String domain = "dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改)
//String accessKeyId = aliSms["accessKeyId"].ToString();
//String accessKeySecret = aliSms["accessKeySecret"].ToString();
//IClientProfile profile = DefaultProfile.GetProfile("cn-hangzhou", accessKeyId, accessKeySecret);
//DefaultProfile.AddEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
String
product
=
"Dysmsapi"
;
//短信API产品名称(短信产品名固定,无需修改)
String
domain
=
Domain
;
//短信API产品域名(接口地址固定,无需修改)
String
accessKeyId
=
AccessKeyId
;
String
accessKeySecret
=
AccessKeySecret
;
IClientProfile
profile
=
DefaultProfile
.
GetProfile
(
RegionId
,
accessKeyId
,
accessKeySecret
);
DefaultProfile
.
AddEndpoint
(
RegionId
,
RegionId
,
product
,
domain
);
IAcsClient
acsClient
=
new
DefaultAcsClient
(
profile
);
//必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
request
.
PhoneNumbers
=
phoneNumber
;
request
.
SignName
=
SignName
;
// aliSms["signName"].ToString();
//必填:短信模板-可在短信控制台中找到
request
.
TemplateCode
=
templateCode
;
//可选:模板中的变量替换JSON串,如模板内容为"您的验证码为${code}"时,此处的值为
request
.
TemplateParam
=
templateParam
;
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request
.
OutId
=
""
;
//请求失败这里会抛ClientException异常
SendSmsResponse
sendSmsResponse
=
acsClient
.
GetAcsResponse
(
request
);
if
(!
sendSmsResponse
.
Code
.
Equals
(
"OK"
))
{
var
data
=
new
{
phoneNumber
,
templateParam
,
code
=
sendSmsResponse
.
Code
,
message
=
sendSmsResponse
.
Message
};
return
""
;
}
else
{
return
sendSmsResponse
.
BizId
;
}
}
catch
(
Aliyun
.
Acs
.
Core
.
Exceptions
.
ServerException
ex
)
{
//LogHelper.Write(ex, "SendSMSToJava1");
}
catch
(
ClientException
ex
)
{
//LogHelper.Write(ex, "SendSMSToJava2");
}
return
""
;
}
/// <summary>
/// 获取短信发送状态
/// </summary>
/// <param name="phoneNumber"></param>
/// <param name="SendDate"></param>
/// <param name="BizId"></param>
/// <returns></returns>
public
static
string
SendSMSStatus
(
string
phoneNumber
,
string
SendDate
,
string
BizId
,
string
Domain
,
string
AccessKeyId
,
string
AccessKeySecret
,
string
RegionId
)
{
// JObject aliSms = Config.AliSms;
String
product
=
"Dysmsapi"
;
//短信API产品名称(短信产品名固定,无需修改)
String
domain
=
Domain
;
// "dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改)
String
accessKeyId
=
AccessKeyId
;
// aliSms["accessKeyId"].ToString();
String
accessKeySecret
=
AccessKeySecret
;
//aliSms["accessKeySecret"].ToString();
IClientProfile
profile
=
DefaultProfile
.
GetProfile
(
RegionId
,
accessKeyId
,
accessKeySecret
);
DefaultProfile
.
AddEndpoint
(
RegionId
,
RegionId
,
product
,
domain
);
IAcsClient
acsClient
=
new
DefaultAcsClient
(
profile
);
//拼接参数 返回url
string
url
=
$@"https://
{
domain
}
/?AccessKeyId=
{
accessKeyId
}
&Action=QuerySendDetails&CurrentPage=1&Format=JSON&PageSize=12&PhoneNumber=
{
phoneNumber
}
&RegionId=cn-hangzhou&SecureTransport=true&SendDate=
{
SendDate
}
&BizId=
{
BizId
}
&SignatureMethod=HMAC-SHA1&SignatureNonce=46edc0b6cc74e437aa0ba1703c71a99b&SignatureVersion=1.0&SourceIp=171.88.98.6&Timestamp=2019-09-25T02%3A12%3A35Z&Version=2017-05-25&Signature=Uvqz3E13092wPxNYUt3ytDojV50%3D"
;
return
url
;
}
/// <summary>
/// 获取短信发送状态
/// </summary>
/// <param name="phoneNumber"></param>
/// <param name="SendDate"></param>
/// <param name="BizId"></param>
/// <returns></returns>
public
static
QuerySendDetailsResponse
QuerySendDetails
(
string
phoneNumber
,
string
SendDate
,
string
BizId
,
string
Domain
,
string
AccessKeyId
,
string
AccessKeySecret
,
string
RegionId
)
{
String
product
=
"Dysmsapi"
;
//短信API产品名称(短信产品名固定,无需修改)
// 初始化acsClient,暂不支持region化
IClientProfile
profile
=
DefaultProfile
.
GetProfile
(
RegionId
,
AccessKeyId
,
AccessKeySecret
);
DefaultProfile
.
AddEndpoint
(
RegionId
,
RegionId
,
product
,
Domain
);
IAcsClient
acsClient
=
new
DefaultAcsClient
(
profile
);
// 组装请求对象
QuerySendDetailsRequest
request
=
new
QuerySendDetailsRequest
{
PhoneNumber
=
phoneNumber
,
BizId
=
BizId
,
SendDate
=
SendDate
,
PageSize
=
10
,
CurrentPage
=
1
};
QuerySendDetailsResponse
querySendDetailsResponse
=
null
;
try
{
// 请求失败这里会抛ClientException异常
querySendDetailsResponse
=
acsClient
.
GetAcsResponse
(
request
);
}
catch
(
ServerException
e
)
{
querySendDetailsResponse
=
new
QuerySendDetailsResponse
();
// LogHelper.LogException<ServerException>(e.ErrorMessage);
}
catch
(
ClientException
e
)
{
querySendDetailsResponse
=
new
QuerySendDetailsResponse
();
// LogHelper.LogException<ClientException>(e.ErrorMessage);
}
return
querySendDetailsResponse
;
}
/// <summary>
/// 获取短信状态
/// </summary>
/// <param name="phoneNumber"></param>
/// <param name="SendDate"></param>
/// <param name="BizId"></param>
/// <returns></returns>
public
static
string
SendSMSStatus2
(
string
phoneNumber
,
string
SendDate
,
string
BizId
,
string
Domain
,
string
AccessKeyId
,
string
AccessKeySecret
,
string
RegionId
)
{
//JObject aliSms = Config.AliSms;
String
product
=
"Dysmsapi"
;
//短信API产品名称(短信产品名固定,无需修改)
String
domain
=
Domain
;
//"dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改)
String
accessKeyId
=
AccessKeyId
;
//aliSms["accessKeyId"].ToString();
String
accessKeySecret
=
AccessKeySecret
;
//aliSms["accessKeySecret"].ToString();
IClientProfile
profile
=
DefaultProfile
.
GetProfile
(
RegionId
,
accessKeyId
,
accessKeySecret
);
DefaultProfile
.
AddEndpoint
(
RegionId
,
RegionId
,
product
,
domain
);
IAcsClient
acsClient
=
new
DefaultAcsClient
(
profile
);
QuerySendDetailsRequest
request
=
new
QuerySendDetailsRequest
();
request
.
CurrentPage
=
1
;
request
.
PageSize
=
12
;
request
.
PhoneNumber
=
phoneNumber
;
request
.
SendDate
=
SendDate
;
request
.
BizId
=
BizId
;
//请求失败这里会抛ClientException异常
var
robj
=
acsClient
.
DoAction
(
request
);
if
(
robj
.
Status
==
200
)
{
System
.
IO
.
Stream
stream
=
new
System
.
IO
.
MemoryStream
(
robj
.
Content
);
var
reader
=
new
System
.
IO
.
StreamReader
(
stream
,
System
.
Text
.
Encoding
.
UTF8
);
string
rrrr
=
reader
.
ReadToEnd
();
return
rrrr
;
}
return
""
;
}
}
}
Edu.ThirdCore/Message/QueueHelper.cs
0 → 100644
View file @
a08d9abe
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Threading
;
namespace
Edu.ThirdCore.Message
{
/// <summary>
/// 消息队列
/// </summary>
public
class
QueueHelper
{
/// <summary>
/// 任务队列
/// </summary>
public
static
Queue
<
string
>
Queue
=
new
Queue
<
string
>();
/// <summary>
/// 线程锁
/// </summary>
private
static
object
locker
=
new
object
();
/// <summary>
/// 添加消息到队列
/// </summary>
/// <param name="task"></param>
public
static
void
EnqueueTask
(
string
task
)
{
lock
(
locker
)
{
//同样的任务,不同时加入
IList
<
string
>
tasks
=
Queue
.
ToList
();
if
(
tasks
.
Count
(
p
=>
p
==
task
)
==
0
)
{
Queue
.
Enqueue
(
task
);
Monitor
.
PulseAll
(
locker
);
}
}
}
}
}
Edu.ThirdCore/Message/SMSService.cs
0 → 100644
View file @
a08d9abe
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
Newtonsoft.Json
;
using
Newtonsoft.Json.Linq
;
namespace
Edu.ThirdCore.Message
{
/// <summary>
/// 短信消息
/// </summary>
public
class
SMSService
{
/// <summary>
/// 发送证码
/// </summary>
/// <param name="phoneNumber">电话号码</param>
/// <param name="code">验证码</param>
public
static
void
SendCode
(
string
phoneNumber
,
string
code
,
string
templateCode
,
string
SignName
,
string
Domain
,
string
AccessKeyId
,
string
AccessKeySecret
,
string
RegionId
,
string
OutId
)
{
JObject
obj
=
new
JObject
();
obj
[
"cmd"
]
=
"sms"
;
obj
[
"phoneNumber"
]
=
phoneNumber
;
obj
[
"templateCode"
]
=
templateCode
;
obj
[
"SignName"
]
=
SignName
;
obj
[
"Domain"
]
=
Domain
;
obj
[
"AccessKeyId"
]
=
AccessKeyId
;
obj
[
"AccessKeySecret"
]
=
AccessKeySecret
;
obj
[
"RegionId"
]
=
RegionId
;
var
TemplateParam
=
new
{
code
=
code
};
obj
[
"OutId"
]
=
OutId
;
obj
[
"templateParam"
]
=
JsonConvert
.
SerializeObject
(
TemplateParam
);
QueueHelper
.
EnqueueTask
(
JsonConvert
.
SerializeObject
(
obj
));
}
/// <summary>
/// 发送短信通知
/// </summary>
/// <param name="phoneNumber"></param>
/// <param name="content"></param>
/// <param name="templateCode"></param>
public
static
void
SendMsg
(
string
phoneNumber
,
string
content
,
string
templateCode
,
string
SignName
,
string
Domain
,
string
AccessKeyId
,
string
AccessKeySecret
,
string
RegionId
,
string
OutId
)
{
JObject
obj
=
new
JObject
();
obj
[
"cmd"
]
=
"sms"
;
obj
[
"phoneNumber"
]
=
phoneNumber
;
obj
[
"templateCode"
]
=
templateCode
;
obj
[
"SignName"
]
=
SignName
;
obj
[
"Domain"
]
=
Domain
;
obj
[
"AccessKeyId"
]
=
AccessKeyId
;
obj
[
"RegionId"
]
=
RegionId
;
obj
[
"AccessKeySecret"
]
=
AccessKeySecret
;
var
TemplateParam
=
new
{
content
};
obj
[
"OutId"
]
=
OutId
;
obj
[
"templateParam"
]
=
JsonConvert
.
SerializeObject
(
TemplateParam
);
//LogHelper.WriteInfo("发送短信信息");
QueueHelper
.
EnqueueTask
(
JsonConvert
.
SerializeObject
(
obj
));
}
/// <summary>
/// 发送短信通知
/// </summary>
/// <param name="phoneNumber"></param>
/// <param name="templateParam">通知参数</param>
/// <param name="templateCode"></param>
public
static
void
SendMsg
(
string
phoneNumber
,
object
templateParam
,
string
templateCode
,
string
SignName
,
string
Domain
,
string
AccessKeyId
,
string
AccessKeySecret
,
string
RegionId
,
string
OutId
)
{
JObject
obj
=
new
JObject
();
obj
[
"cmd"
]
=
"sms"
;
obj
[
"phoneNumber"
]
=
phoneNumber
;
obj
[
"templateCode"
]
=
templateCode
;
var
TemplateParam
=
templateParam
;
obj
[
"SignName"
]
=
SignName
;
obj
[
"Domain"
]
=
Domain
;
obj
[
"RegionId"
]
=
RegionId
;
obj
[
"AccessKeyId"
]
=
AccessKeyId
;
obj
[
"AccessKeySecret"
]
=
AccessKeySecret
;
obj
[
"OutId"
]
=
OutId
;
obj
[
"templateParam"
]
=
JsonConvert
.
SerializeObject
(
TemplateParam
);
QueueHelper
.
EnqueueTask
(
JsonConvert
.
SerializeObject
(
obj
));
}
}
}
Edu.ThirdCore/lib/aliyun-net-sdk-core.dll
0 → 100644
View file @
a08d9abe
File added
Edu.ThirdCore/lib/aliyun-net-sdk-dysmsapi.dll
0 → 100644
View file @
a08d9abe
File added
Edu.WebApi/Controllers/Public/MsgController.cs
View file @
a08d9abe
...
...
@@ -28,7 +28,7 @@ namespace Edu.WebApi.Controllers.Public
/// </summary>
private
readonly
MsgLogModule
msgLogModule
=
new
MsgLogModule
();
#
region
短信记录信息
/// <summary>
/// 获取短信记录分页列表
/// </summary>
...
...
@@ -47,6 +47,18 @@ namespace Edu.WebApi.Controllers.Public
}
/// <summary>
/// 获取触发事件枚举
/// </summary>
/// <returns></returns>
[
HttpPost
]
public
ApiResult
GetMsgSendStatusEnumList
()
{
var
list
=
EnumHelper
.
EnumToList
(
typeof
(
Common
.
Enum
.
System
.
MsgSendStatusEnum
));
return
ApiResult
.
Success
(
""
,
list
);
}
#
endregion
#
region
短信配置
...
...
@@ -71,6 +83,7 @@ namespace Edu.WebApi.Controllers.Public
}
pageModel
.
Count
=
rowsCount
;
pageModel
.
PageData
=
list
;
return
ApiResult
.
Success
(
data
:
pageModel
);
}
...
...
@@ -106,13 +119,14 @@ namespace Edu.WebApi.Controllers.Public
var
model
=
new
RB_Msg_Base
();
model
.
CreateDate
=
DateTime
.
Now
;
model
.
CreateBy
=
UserInfo
.
Id
;
model
.
Group_Id
=
this
.
UserInfo
.
Group_Id
;
model
.
Group_Id
=
base
.
UserInfo
.
Group_Id
;
model
.
ID
=
extModel
.
ID
;
model
.
StoreType
=
extModel
.
StoreType
;
if
(
extModel
.
MsgBase
!=
null
)
{
model
.
MsgConfigure
=
Common
.
Plugin
.
JsonHelper
.
Serialize
(
extModel
.
MsgBase
);
}
bool
flag
=
msgLogModule
.
SetMsgBaseModule
(
extM
odel
);
bool
flag
=
msgLogModule
.
SetMsgBaseModule
(
m
odel
);
return
flag
?
ApiResult
.
Success
()
:
ApiResult
.
Failed
();
}
...
...
@@ -145,5 +159,153 @@ namespace Edu.WebApi.Controllers.Public
}
#
endregion
#
region
短信模板配置
/// <summary>
/// 获取触发事件枚举
/// </summary>
/// <returns></returns>
[
HttpPost
]
public
ApiResult
GetBaseTemplateTypeEnumList
()
{
var
list
=
EnumHelper
.
EnumToList
(
typeof
(
Common
.
Enum
.
System
.
BaseTemplateTypeEnum
));
return
ApiResult
.
Success
(
""
,
list
);
}
/// <summary>
/// 获取短信模板配置页列表
/// </summary>
/// <returns></returns>
[
HttpPost
]
public
ApiResult
GetMsgBaseTemplatePageList
()
{
var
pageModel
=
Common
.
Plugin
.
JsonHelper
.
DeserializeObject
<
ResultPageModel
>(
RequestParm
.
Msg
.
ToString
());
var
query
=
Common
.
Plugin
.
JsonHelper
.
DeserializeObject
<
RB_Msg_BaseTemplate_ViewModel
>(
RequestParm
.
Msg
.
ToString
());
query
.
Group_Id
=
base
.
UserInfo
.
Group_Id
;
var
list
=
msgLogModule
.
GetMsgBaseTemplatePageListModule
(
pageModel
.
PageIndex
,
pageModel
.
PageSize
,
out
long
rowsCount
,
query
);
foreach
(
var
item
in
list
)
{
item
.
BaseTemplateTypeStr
=
EnumHelper
.
ToName
(
item
.
BaseTemplateType
);
}
pageModel
.
Count
=
rowsCount
;
pageModel
.
PageData
=
list
;
return
ApiResult
.
Success
(
data
:
pageModel
);
}
/// <summary>
/// 获取短信模板配置列表
/// </summary>
/// <returns></returns>
[
HttpPost
]
public
ApiResult
GetMsgBaseTemplateList
()
{
var
query
=
Common
.
Plugin
.
JsonHelper
.
DeserializeObject
<
RB_Msg_BaseTemplate_ViewModel
>(
RequestParm
.
Msg
.
ToString
());
query
.
Group_Id
=
base
.
UserInfo
.
Group_Id
;
var
list
=
msgLogModule
.
GetMsgBaseTemplateModule
(
query
);
return
ApiResult
.
Success
(
data
:
list
);
}
/// <summary>
/// 添加修改短信模板配置
/// </summary>
/// <returns></returns>
[
HttpPost
]
public
ApiResult
SetMsgBaseTemplate
()
{
var
extModel
=
Common
.
Plugin
.
JsonHelper
.
DeserializeObject
<
RB_Msg_BaseTemplate_ViewModel
>(
RequestParm
.
Msg
.
ToString
());
extModel
.
CreateDate
=
DateTime
.
Now
;
extModel
.
CreateBy
=
UserInfo
.
Id
;
extModel
.
Group_Id
=
base
.
UserInfo
.
Group_Id
;
bool
flag
=
msgLogModule
.
SetMsgBaseTemplateModule
(
extModel
);
return
flag
?
ApiResult
.
Success
()
:
ApiResult
.
Failed
();
}
/// <summary>
/// 获取短信模板配置实体
/// </summary>
/// <returns></returns>
[
HttpPost
]
public
ApiResult
GetMsgBaseTemplate
()
{
var
ID
=
base
.
ParmJObj
.
GetInt
(
"ID"
,
0
);
var
extModel
=
msgLogModule
.
GetMsgBaseTemplateModule
(
ID
);
return
ApiResult
.
Success
(
data
:
extModel
);
}
/// <summary>
/// 删除短信模板配置
/// </summary>
/// <returns></returns>
[
HttpPost
]
public
ApiResult
RemoveMsgBaseTemplate
()
{
var
ClassId
=
base
.
ParmJObj
.
GetInt
(
"ID"
,
0
);
var
flag
=
msgLogModule
.
RemoveMsgBaseTemplateModule
(
ClassId
);
return
flag
?
ApiResult
.
Success
()
:
ApiResult
.
Failed
();
}
#
endregion
#
region
发短信测试
[
HttpPost
]
public
ApiResult
TestSendMsg
()
{
object
PhoneMessage
=
new
{
OrderNo
=
"1111111111111"
,
Name
=
"李三"
,
Mobile
=
"13551132418"
,
TripDate
=
"2020-11-30"
,
//item.TripSTime.Value.ToString("yyyy-MM-dd HH:mm") + " " + ((item.UseDay ?? 0) == Convert.ToDecimal(0.5) ? "半" : Convert.ToInt32(item.UseDay ?? 0).ToString()) + "日",
Address
=
"阳光新业2号楼"
,
Number
=
"李四"
};
//新增短信记录信息
var
msgLogModel
=
new
RB_Msg_Log
{
Group_Id
=
100000
,
School_Id
=
1
,
Student_Id
=
2
,
CreateDate
=
DateTime
.
Now
,
SendStatus
=
Common
.
Enum
.
System
.
MsgSendStatusEnum
.
InReceipt
,
CreateBy
=
0
,
CreateByName
=
"系统自动发送"
,
SendContent
=
"测试内容"
,
ReceiverName
=
"张学生"
,
ReceiverPhone
=
"13551132417"
};
msgLogModule
.
SendMsg
(
PhoneMessage
,
Common
.
Enum
.
System
.
BaseTemplateTypeEnum
.
OrderSuccess
,
msgLogModel
);
// ThirdCore.Message.SMSService.SendMsg("13551132417", PhoneMessage, "SMS_201722097", "印象之旅", "dysmsapi.aliyuncs.com", "LTAIwE7l9dImZSa3", "j47Ajn0d0WzUCIX8Biyj3P2r8QDltI", "cn-hangzhou");
return
ApiResult
.
Success
(
""
);
}
[
HttpPost
]
public
ApiResult
TestUpdateSendMsg
()
{
msgLogModule
.
UpdateMsgSendStatus
();
return
ApiResult
.
Success
(
""
);
}
#
endregion
}
}
Edu.WebApi/Controllers/Public/PublicController.cs
View file @
a08d9abe
...
...
@@ -366,8 +366,17 @@ namespace Edu.WebApi.Controllers.Public
[
HttpPost
]
public
ApiResult
GetStoreTypeEnumList
()
{
int
type
=
base
.
ParmJObj
.
GetInt
(
"ID"
,
0
);
var
list
=
EnumHelper
.
EnumToList
(
typeof
(
Common
.
Enum
.
Public
.
StoreTypeEnum
));
return
ApiResult
.
Success
(
""
,
list
);
if
(
type
==
1
)
{
return
ApiResult
.
Success
(
""
,
list
.
Where
(
x
=>
x
.
Id
!=
3
));
}
else
{
return
ApiResult
.
Success
(
""
,
list
);
}
}
/// <summary>
...
...
Edu.WebApi/Controllers/User/UserCenterController.cs
View file @
a08d9abe
...
...
@@ -29,17 +29,21 @@ namespace Edu.WebApi.Controllers.User
/// <summary>
/// 助教处理类对象
/// </summary>
private
readonly
NoticeModule
noticeModule
=
AOPHelper
.
CreateAOPObject
<
NoticeModule
>();
private
readonly
NoticeModule
noticeModule
=
new
NoticeModule
();
/// <summary>
/// 考勤处理类
/// </summary>
private
readonly
AttendanceModule
attendancemodule
=
new
AttendanceModule
();
/// <summary>
/// 审核处理
/// </summary>
private
readonly
WorkFlowModule
workFlowModule
=
new
WorkFlowModule
();
/// <summary>
/// 考勤记录处理类
/// </summary>
public
AttendanceRecodModule
attendRecodeModule
=
new
AttendanceRecodModule
();
#
region
公告管理
...
...
@@ -1799,5 +1803,181 @@ namespace Edu.WebApi.Controllers.User
}
#
endregion
#
region
APP
考勤
/// <summary>
/// App获取今天打卡信息
/// </summary>
/// <returns></returns>
public
ApiResult
GetAttendRecod
()
{
JObject
parm
=
JObject
.
Parse
(
RequestParm
.
Msg
.
ToString
());
UserInfo
userInfo
=
UserReidsCache
.
GetUserLoginInfo
(
RequestParm
.
Uid
);
string
date
=
JsonHelper
.
GetStringValue
(
parm
,
"date"
);
if
(
string
.
IsNullOrWhiteSpace
(
date
))
{
return
ApiResult
.
ParamIsNull
(
"日期时间为空"
);
}
JObject
result
=
new
JObject
();
JObject
recodeInfo
=
attendRecodeModule
.
GetAttendRecod
(
userInfo
.
Id
,
userInfo
.
DeptId
,
date
);
if
(
recodeInfo
==
null
)
{
result
[
"isNeedCard"
]
=
false
;
result
[
"recodeInfo"
]
=
recodeInfo
;
}
else
{
result
[
"isNeedCard"
]
=
true
;
result
[
"recodeInfo"
]
=
recodeInfo
;
}
return
ApiResult
.
Success
(
"获取成功"
,
data
:
result
);
}
/// <summary>
/// App验证是否在打卡范围
/// </summary>
/// <returns></returns>
public
ApiResult
VerifyPunchCard
()
{
JObject
parm
=
JObject
.
Parse
(
RequestParm
.
Msg
.
ToString
());
string
latAndLong
=
JsonHelper
.
GetStringValue
(
parm
,
"latAndLong"
);
string
wifiMac
=
JsonHelper
.
GetStringValue
(
parm
,
"wifiMac"
);
string
oldWifiMac
=
JsonHelper
.
GetStringValue
(
parm
,
"wifiMac"
);
string
version
=
JsonHelper
.
GetStringValue
(
parm
,
"version"
);
if
(
string
.
IsNullOrWhiteSpace
(
latAndLong
)
&&
string
.
IsNullOrWhiteSpace
(
wifiMac
))
{
return
ApiResult
.
ParamIsNull
(
"参数为空"
);
}
int
empId
=
Convert
.
ToInt32
(
RequestParm
.
Uid
);
List
<
RB_Attendance_Way_Extend
>
wayList
=
new
List
<
RB_Attendance_Way_Extend
>();
wifiMac
=
GetMdifyWifiMac
(
wifiMac
);
bool
isNotVerifyVifi
=
JudgeNotVerifyVifi
(
version
,
empId
);
bool
isRang
=
isNotVerifyVifi
?
isNotVerifyVifi
:
attendRecodeModule
.
VerifyPunchCard
(
empId
,
latAndLong
,
wifiMac
,
oldWifiMac
,
out
wayList
);
var
attendWay
=
wayList
.
Select
(
t
=>
new
{
type
=
t
.
Type
,
name
=
t
.
Name
,
address
=
t
.
Address
,
targetAddress
=
t
.
TargetAddress
,
scope
=
t
.
Scope
});
var
result
=
new
{
isLegal
=
isRang
,
attendWay
};
return
ApiResult
.
Success
(
"获取成功"
,
data
:
result
);
}
/// <summary>
/// App考勤打卡
/// </summary>
/// <returns></returns>
public
ApiResult
PunchCard
()
{
JObject
parm
=
JObject
.
Parse
(
RequestParm
.
Msg
.
ToString
());
string
latAndLong
=
JsonHelper
.
GetStringValue
(
parm
,
"latAndLong"
);
string
address
=
JsonHelper
.
GetStringValue
(
parm
,
"address"
);
string
wifiMac
=
JsonHelper
.
GetStringValue
(
parm
,
"wifiMac"
);
string
oldWifiMac
=
wifiMac
;
string
phoneId
=
JsonHelper
.
GetStringValue
(
parm
,
"phoneId"
);
string
PhoneName
=
JsonHelper
.
GetStringValue
(
parm
,
"PhoneName"
);
string
version
=
JsonHelper
.
GetStringValue
(
parm
,
"version"
);
if
(
string
.
IsNullOrWhiteSpace
(
latAndLong
)
&&
string
.
IsNullOrWhiteSpace
(
wifiMac
))
{
return
ApiResult
.
ParamIsNull
(
"参数为空"
);
}
if
(
string
.
IsNullOrWhiteSpace
(
phoneId
))
{
return
ApiResult
.
ParamIsNull
(
"手机标识码为空"
);
}
UserInfo
userInfo
=
UserReidsCache
.
GetUserLoginInfo
(
RequestParm
.
Uid
);
string
date
=
JsonHelper
.
GetStringValue
(
parm
,
"date"
);
wifiMac
=
GetMdifyWifiMac
(
wifiMac
);
LogHelper
.
WriteInfo
(
$"打卡信息:
{
JsonConvert
.
SerializeObject
(
RequestParm
)}
-->更新后的mac:
{
wifiMac
}
"
);
int
PunchCardType
;
bool
isNotVerifyVifi
=
JudgeNotVerifyVifi
(
version
,
userInfo
.
Id
);
string
result
=
attendRecodeModule
.
PunchCard
(
userInfo
.
Id
,
userInfo
.
DeptId
,
latAndLong
,
wifiMac
,
oldWifiMac
,
phoneId
,
address
,
PhoneName
,
out
PunchCardType
,
isNotVerifyVifi
);
var
resultData
=
new
{
punchCardType
=
PunchCardType
};
if
(
result
.
Equals
(
"ok"
))
{
return
ApiResult
.
Success
(
"打卡成功"
,
data
:
resultData
);
}
else
if
(
result
.
Equals
(
"不在打卡范围"
))
{
return
new
ApiResult
()
{
Code
=
(
int
)
ResultCode
.
NotInCardRange
,
Message
=
result
};
}
else
{
return
ApiResult
.
Failed
(
message
:
result
);
}
}
/// <summary>
/// 不打卡wifi版本
/// </summary>
/// <param name="version"></param>
/// <param name="EmpId"></param>
/// <returns></returns>
private
bool
JudgeNotVerifyVifi
(
string
version
,
int
EmpId
)
{
bool
isNotVerifyVifi
=
false
;
if
(!
string
.
IsNullOrWhiteSpace
(
version
))
{
string
[]
versionInfo
=
version
.
Split
(
'&'
);
if
(
versionInfo
.
Length
==
3
&&
versionInfo
[
1
].
ToLower
().
Equals
(
"ios"
)
&&
versionInfo
[
2
].
Equals
(
"1.1.8"
))
{
isNotVerifyVifi
=
true
;
}
}
return
isNotVerifyVifi
;
}
/// <summary>
/// 获取修改后wifimac
/// </summary>
/// <param name="wifiMac">原始</param>
/// <returns></returns>
private
string
GetMdifyWifiMac
(
string
wifiMac
)
{
if
(!
string
.
IsNullOrWhiteSpace
(
wifiMac
))
{
string
[]
mac
=
wifiMac
.
Split
(
':'
);
for
(
int
i
=
0
;
i
<
mac
.
Length
;
i
++)
{
if
(
mac
[
i
].
Length
==
1
)
{
mac
[
i
]
=
$"0
{
mac
[
i
]}
"
;
}
}
wifiMac
=
string
.
Join
(
":"
,
mac
).
ToLower
();
}
return
wifiMac
;
}
/// <summary>
/// App考勤打卡统计
/// </summary>
/// <returns></returns>
public
ApiResult
PunchCardStatistical
()
{
JObject
parm
=
JObject
.
Parse
(
RequestParm
.
Msg
.
ToString
());
string
date
=
JsonHelper
.
GetStringValue
(
parm
,
"date"
);
if
(
string
.
IsNullOrWhiteSpace
(
date
))
{
return
ApiResult
.
ParamIsNull
(
"日期为空"
);
}
int
empId
=
Convert
.
ToInt32
(
RequestParm
.
Uid
);
List
<
JObject
>
result
=
attendRecodeModule
.
PunchCardStatistical
(
empId
,
date
);
return
ApiResult
.
Success
(
"获取成功"
,
data
:
result
);
}
/// <summary>
/// App考勤打卡月历
/// </summary>
/// <returns></returns>
public
ApiResult
PunchCardCalendar
()
{
JObject
parm
=
JObject
.
Parse
(
RequestParm
.
Msg
.
ToString
());
string
date
=
JsonHelper
.
GetStringValue
(
parm
,
"date"
);
if
(
string
.
IsNullOrWhiteSpace
(
date
))
{
return
ApiResult
.
ParamIsNull
(
"日期为空"
);
}
int
empId
=
Convert
.
ToInt32
(
RequestParm
.
Uid
);
List
<
JObject
>
result
=
attendRecodeModule
.
PunchCardCalendar
(
empId
,
date
);
return
ApiResult
.
Success
(
"获取成功"
,
data
:
result
);
}
#
endregion
}
}
\ No newline at end of file
Edu.WebApi/Edu.WebApi.csproj
View file @
a08d9abe
...
...
@@ -31,6 +31,7 @@
<ProjectReference Include="..\Edu.Module.System\Edu.Module.System.csproj" />
<ProjectReference Include="..\Edu.Module.User\Edu.Module.User.csproj" />
<ProjectReference Include="..\Edu.Repository\Edu.Repository.csproj" />
<ProjectReference Include="..\Edu.ThirdCore\Edu.ThirdCore.csproj" />
</ItemGroup>
</Project>
Edu.WebApi/Startup.cs
View file @
a08d9abe
using
System.Collections.Generic
;
using
System.Text.Encodings.Web
;
using
System.Text.Unicode
;
using
System.Threading.Tasks
;
using
Edu.ThirdCore.Message
;
using
Microsoft.AspNetCore.Builder
;
using
Microsoft.AspNetCore.Hosting
;
using
Microsoft.AspNetCore.Http
;
...
...
@@ -50,7 +52,7 @@ namespace Edu.WebApi
};
services
.
AddCors
(
options
=>
options
.
AddPolicy
(
"AllowCors"
,
policy
=>
policy
.
AllowAnyHeader
().
AllowAnyMethod
().
AllowCredentials
().
WithOrigins
(
corsArray
.
ToArray
())));
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public
void
Configure
(
IApplicationBuilder
app
,
IWebHostEnvironment
env
,
IHostApplicationLifetime
appLifetime
)
...
...
@@ -67,7 +69,9 @@ namespace Edu.WebApi
app
.
UseCors
(
"AllowCors"
);
app
.
UseAuthorization
();
//启动信息发送
// Task.Run(() => MessageCore.Init());
Task
.
Run
(()
=>
MessageCore
.
Init
());
app
.
UseEndpoints
(
endpoints
=>
{
endpoints
.
MapControllers
();
...
...
Edu.WebApi/appsettings.json
View file @
a08d9abe
{
"ConnectionStrings"
:
{
"DefaultConnection"
:
"server=192.168.1.214;user id=reborn;password=Reborn@2018;database=reborn_edu;CharSet=utf8mb4; Convert Zero Datetime=true; "
,
"DefaultConnectionPName"
:
"MySql.Data.MySqlClient"
},
"Logging"
:
{
"LogLevel"
:
{
"Default"
:
"Information"
,
"Microsoft"
:
"Warning"
,
"Microsoft.Hosting.Lifetime"
:
"Information"
}
},
"JwtSecretKey"
:
"@VIITTOREBORN*2018"
,
"JwtExpirTime"
:
2592000
,
"AllowedHosts"
:
"*"
,
"OpenValidation"
:
"False"
,
"UploadSiteUrl"
:
"http://192.168.1.214:8120"
,
"ViewFileSiteUrl"
:
"https://viitto-1301420277.cos.ap-chengdu.myqcloud.com"
,
"Mongo"
:
"mongodb://47.96.25.130:27017"
,
"MongoDBName"
:
"Edu"
,
"RabbitMqConfig"
:
{
"HostName"
:
"47.96.25.130"
,
"VirtualHost"
:
"/"
,
"Port"
:
5672
,
"UserName"
:
"guest"
,
"Password"
:
"viitto2019"
},
"RedisSetting"
:
{
"RedisServer"
:
"47.96.23.199"
,
"RedisPort"
:
"6379"
,
"RedisPwd"
:
"Viitto2018"
},
"VirtualDirectory"
:
"WebFile"
,
//Ƿϻ
"IsOnline"
:
false
"ConnectionStrings"
:
{
"DefaultConnection"
:
"server=192.168.1.214;user id=reborn;password=Reborn@2018;database=reborn_edu;CharSet=utf8mb4; Convert Zero Datetime=true; "
,
"DefaultConnectionPName"
:
"MySql.Data.MySqlClient"
},
"Logging"
:
{
"LogLevel"
:
{
"Default"
:
"Information"
,
"Microsoft"
:
"Warning"
,
"Microsoft.Hosting.Lifetime"
:
"Information"
}
},
"JwtSecretKey"
:
"@VIITTOREBORN*2018"
,
"JwtExpirTime"
:
2592000
,
"IsSendMsg"
:
1
,
"AllowedHosts"
:
"*"
,
"OpenValidation"
:
"False"
,
"UploadSiteUrl"
:
"http://192.168.1.214:8120"
,
"ViewFileSiteUrl"
:
"https://viitto-1301420277.cos.ap-chengdu.myqcloud.com"
,
"Mongo"
:
"mongodb://47.96.25.130:27017"
,
"MongoDBName"
:
"Edu"
,
"RabbitMqConfig"
:
{
"HostName"
:
"47.96.25.130"
,
"VirtualHost"
:
"/"
,
"Port"
:
5672
,
"UserName"
:
"guest"
,
"Password"
:
"viitto2019"
},
"RedisSetting"
:
{
"RedisServer"
:
"47.96.23.199"
,
"RedisPort"
:
"6379"
,
"RedisPwd"
:
"Viitto2018"
},
"VirtualDirectory"
:
"WebFile"
,
//Ƿϻ
"IsOnline"
:
false
}
\ No newline at end of file
education.sln
View file @
a08d9abe
...
...
@@ -37,7 +37,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.User", "Edu.Modu
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.Public", "Edu.Module.Public\Edu.Module.Public.csproj", "{8E34CE2D-AAF3-481C-A5E3-5AECC8F7F1B5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Edu.Module.Log", "Edu.Module.Log\Edu.Module.Log.csproj", "{809E4C87-97F6-4DCB-9232-9C70ECEF2655}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.Log", "Edu.Module.Log\Edu.Module.Log.csproj", "{809E4C87-97F6-4DCB-9232-9C70ECEF2655}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.ThirdCore", "Edu.ThirdCore\Edu.ThirdCore.csproj", "{5F76907A-7181-4FC5-B224-52CDD5B90359}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
...
...
@@ -93,6 +95,10 @@ Global
{809E4C87-97F6-4DCB-9232-9C70ECEF2655}.Debug|Any CPU.Build.0 = Debug|Any CPU
{809E4C87-97F6-4DCB-9232-9C70ECEF2655}.Release|Any CPU.ActiveCfg = Release|Any CPU
{809E4C87-97F6-4DCB-9232-9C70ECEF2655}.Release|Any CPU.Build.0 = Release|Any CPU
{5F76907A-7181-4FC5-B224-52CDD5B90359}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5F76907A-7181-4FC5-B224-52CDD5B90359}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5F76907A-7181-4FC5-B224-52CDD5B90359}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5F76907A-7181-4FC5-B224-52CDD5B90359}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
...
...
@@ -109,6 +115,7 @@ Global
{AD259CCC-048A-4F65-A368-91B8B4A9F200} = {7AC0A4EC-3215-4FF2-96DC-DE8325ED6915}
{8E34CE2D-AAF3-481C-A5E3-5AECC8F7F1B5} = {7AC0A4EC-3215-4FF2-96DC-DE8325ED6915}
{809E4C87-97F6-4DCB-9232-9C70ECEF2655} = {7AC0A4EC-3215-4FF2-96DC-DE8325ED6915}
{5F76907A-7181-4FC5-B224-52CDD5B90359} = {52C9E4CB-A475-4232-95A3-4508B6592AC7}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8763B446-FAB1-46BF-9743-F2628533241B}
...
...
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