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
c23a3c6b
Commit
c23a3c6b
authored
Oct 09, 2024
by
黄奎
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增班级类型
parent
e80a6c6f
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
288 additions
and
144 deletions
+288
-144
CourseClassTypeEnum.cs
Edu.Common/Enum/Course/CourseClassTypeEnum.cs
+1
-5
StudentNumTypeEnum.cs
Edu.Common/Enum/Course/StudentNumTypeEnum.cs
+24
-0
RB_Class.cs
Edu.Model/Entity/Grade/RB_Class.cs
+5
-0
ClassModule.cs
Edu.Module.Course/ClassModule.cs
+2
-1
RB_ClassRepository.cs
Edu.Repository/Grade/RB_ClassRepository.cs
+2
-1
RB_Class_CheckRepository.cs
Edu.Repository/Grade/RB_Class_CheckRepository.cs
+165
-133
RB_Class_TypeRepository.cs
Edu.Repository/Grade/RB_Class_TypeRepository.cs
+0
-3
ClassController.cs
Edu.WebApi/Controllers/Course/ClassController.cs
+89
-1
No files found.
Edu.Common/Enum/Course/CourseClassTypeEnum.cs
View file @
c23a3c6b
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
Edu.Common.Plugin
;
using
Edu.Common.Plugin
;
namespace
Edu.Common.Enum.Course
{
public
enum
CourseClassTypeEnum
{
/// <summary>
/// 一对一外教
/// </summary>
...
...
Edu.Common/Enum/Course/StudentNumTypeEnum.cs
View file @
c23a3c6b
...
...
@@ -18,4 +18,28 @@ namespace Edu.Common.Enum.Course
[
EnumField
(
"多人"
)]
OneToMany
=
2
}
/// <summary>
/// 班级分类
/// </summary>
public
enum
ClassCategoryEnum
{
/// <summary>
/// 常规
/// </summary>
[
EnumField
(
"常规"
)]
Normal
=
1
,
/// <summary>
/// 宣讲
/// </summary>
[
EnumField
(
"宣讲"
)]
Lecture
=
2
,
/// <summary>
/// 日语角
/// </summary>
[
EnumField
(
"日语角"
)]
JapaneseCorner
=
3
,
}
}
Edu.Model/Entity/Grade/RB_Class.cs
View file @
c23a3c6b
...
...
@@ -234,5 +234,10 @@ namespace Edu.Model.Entity.Grade
/// 滚动开班月份
/// </summary>
public
string
ScrollMonth
{
get
;
set
;
}
/// <summary>
/// 班级分类
/// </summary>
public
ClassCategoryEnum
ClassCategory
{
get
;
set
;
}
}
}
Edu.Module.Course/ClassModule.cs
View file @
c23a3c6b
...
...
@@ -406,7 +406,7 @@ namespace Edu.Module.Course
/// <param name="rowsCount">总条数</param>
/// <param name="query">查询条件</param>
/// <returns></returns>
public
List
<
RB_Class_Log_ViewModel
>
GetClassLogPageList
Repository
(
int
pageIndex
,
int
pageSize
,
out
long
rowsCount
,
RB_Class_Log_ViewModel
query
)
public
List
<
RB_Class_Log_ViewModel
>
GetClassLogPageList
Module
(
int
pageIndex
,
int
pageSize
,
out
long
rowsCount
,
RB_Class_Log_ViewModel
query
)
{
return
classLogRepository
.
GetClassLogPageListRepository
(
pageIndex
,
pageSize
,
out
rowsCount
,
query
);
}
...
...
@@ -457,6 +457,7 @@ namespace Edu.Module.Course
{
nameof
(
RB_Class_ViewModel
.
CourseClassType
),
model
.
CourseClassType
},
{
nameof
(
RB_Class_ViewModel
.
StudentNumType
),
model
.
StudentNumType
},
{
nameof
(
RB_Class_ViewModel
.
ClassHourMinute
),
model
.
ClassHourMinute
},
{
nameof
(
RB_Class_ViewModel
.
ClassCategory
),
model
.
ClassCategory
},
};
if
(
oldModel
.
OpenTime
!=
model
.
OpenTime
||
oldModel
.
ClassType
!=
model
.
ClassType
||
string
.
IsNullOrEmpty
(
oldModel
.
ClassNo
))
{
...
...
Edu.Repository/Grade/RB_ClassRepository.cs
View file @
c23a3c6b
...
...
@@ -383,7 +383,8 @@ WHERE 1=1
"
);
builder
.
AppendFormat
(
" AND A.{0}={1} "
,
nameof
(
RB_Class_ViewModel
.
Status
),
0
);
builder
.
AppendFormat
(
" AND A.{0} in(1,2) "
,
nameof
(
RB_Class_ViewModel
.
ClassStatus
));
builder
.
AppendFormat
(
" AND B.Saleplat<>'' AND B.SaleState=1 AND B.Status=0 "
);
//显示的课程
builder
.
AppendFormat
(
" AND B.SaleState=1 AND B.Status=0 "
);
if
(
query
!=
null
)
{
if
(
query
.
Group_Id
>
0
)
...
...
Edu.Repository/Grade/RB_Class_CheckRepository.cs
View file @
c23a3c6b
using
Edu.Common.Enum.System
;
using
Edu.Common.Plugin
;
using
Edu.Model.CacheModel
;
using
Edu.Model.Entity.Grade
;
using
Edu.Model.ViewModel.Course
;
using
Edu.Model.ViewModel.Grade
;
using
Edu.Model.ViewModel.Scroll
;
using
Edu.Model.ViewModel.Sell
;
using
Edu.Model.ViewModel.User
;
using
Microsoft.Extensions.Logging
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
...
...
@@ -966,7 +968,7 @@ WHERE 1=1 AND A.Status=0 {1} ", builderMakeUp.ToString(), builderWhere.ToString
List
<
RB_Employee_Extend
>
empList
=
new
List
<
RB_Employee_Extend
>();
if
(
list
!=
null
&&
list
.
Count
>
0
)
{
string
orderGuestIds
=
string
.
Join
(
","
,
list
.
Select
(
qitem
=>
qitem
.
OrderGuestId
).
Distinct
());
string
orderGuestIds
=
string
.
Join
(
","
,
list
.
Where
(
qitem
=>
qitem
.
OrderGuestId
>
0
).
Select
(
qitem
=>
qitem
.
OrderGuestId
).
Distinct
());
if
(!
string
.
IsNullOrEmpty
(
orderGuestIds
))
{
guestList
=
GetOrderGuestListRepository
(
orderGuestIds
);
...
...
@@ -999,7 +1001,7 @@ WHERE 1=1 AND A.Status=0 {1} ", builderMakeUp.ToString(), builderWhere.ToString
classList
=
GetClassListRepository
(
classIds
);
}
}
string
classLogStr
=
""
;
foreach
(
var
item
in
list
)
{
var
guestModel
=
guestList
?.
FirstOrDefault
(
qitem
=>
qitem
.
Id
==
item
.
OrderGuestId
)
??
new
RB_Order_Guest_Extend
();
...
...
@@ -1025,6 +1027,10 @@ WHERE 1=1 AND A.Status=0 {1} ", builderMakeUp.ToString(), builderWhere.ToString
}
else
{
if
(!
string
.
IsNullOrEmpty
(
guestModel
?.
GuestName
??
""
))
{
classLogStr
+=
string
.
Format
(
",新增{0}签到"
,
guestModel
?.
GuestName
??
""
);
}
item
.
AttendanceMethod
=
Common
.
Enum
.
User
.
AttendanceMethodEnum
.
Offline
;
item
.
CheckRemark
=
"班课签到"
;
item
.
IsCalcTeacFee
=
1
;
...
...
@@ -1042,62 +1048,35 @@ WHERE 1=1 AND A.Status=0 {1} ", builderMakeUp.ToString(), builderWhere.ToString
}
if
(
flag
)
{
//更新学员完成课时
var
completeHours
=
guestOldFinishHours
+
currentDeductionHours
;
Dictionary
<
string
,
object
>
orderFileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Order_Guest_ViewModel
.
CompleteHours
),
completeHours
}
};
var
orderModel
=
orderList
?.
FirstOrDefault
(
qitem
=>
qitem
.
OrderId
==
guestModel
.
OrderId
);
string
LogContent
=
""
;
var
shenyuHours
=
guestModel
.
TotalHours
-
completeHours
;
var
classModel
=
classList
?.
FirstOrDefault
(
qitem
=>
qitem
.
ClassId
==
guestModel
.
ClassId
);
var
sellerInfo
=
empList
?.
FirstOrDefault
(
qitem
=>
qitem
.
EmployeeId
==
orderModel
.
EnterID
);
if
(
shenyuHours
>
0
&&
shenyuHours
<=
12
)
string
LogContent
=
""
;
var
orderModel
=
orderList
?.
FirstOrDefault
(
qitem
=>
qitem
.
OrderId
==
guestModel
.
OrderId
);
if
(
orderModel
!=
null
&&
orderModel
.
OrderId
>
0
&&
guestModel
!=
null
&&
guestModel
.
Id
>
0
)
{
var
shengyuMoney
=
orderModel
.
PreferPrice
-
orderModel
.
Income
+
orderModel
.
Refund
-
orderModel
.
PlatformTax
-
orderModel
.
DiscountMoney
-
orderModel
.
LessPrice
;
#
region
即将结课提醒
(
销售端
)
//更新学员完成课时
Dictionary
<
string
,
object
>
orderFileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Order_Guest_ViewModel
.
CompleteHours
),
completeHours
}
};
var
classModel
=
classList
?.
FirstOrDefault
(
qitem
=>
qitem
.
ClassId
==
guestModel
.
ClassId
);
var
sellerInfo
=
empList
?.
FirstOrDefault
(
qitem
=>
qitem
.
EmployeeId
==
orderModel
.
EnterID
);
if
(
s
ellerInfo
!=
null
&&
!
string
.
IsNullOrEmpty
(
sellerInfo
?.
WorkUserId
??
""
)
)
if
(
s
henyuHours
>
0
&&
shenyuHours
<=
12
)
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var
path
=
$"/sale/myOrder?OrderId=
{
guestModel
.
OrderId
}
"
;
path
=
HttpUtility
.
UrlEncode
(
path
);
var
shengyuMoney
=
orderModel
.
PreferPrice
-
orderModel
.
Income
+
orderModel
.
Refund
-
orderModel
.
PlatformTax
-
orderModel
.
DiscountMoney
-
orderModel
.
LessPrice
;
string
markdownContent
=
$"`结课预警` 学员即将结课通知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>剩余课时:<font color='warning'>
{
shenyuHours
}
</font>\n>是否续班:<font color='
{(
orderModel
.
RenewOrderId
>
0
?
"info"
:
"warning"
)}
'>
{(
orderModel
.
RenewOrderId
>
0
?
"已续班("
+
orderModel
.
RenewOrderId
+
")"
:
"未续班"
)}
</font>\n>关联单号:
{
guestModel
.
OrderId
}
\n>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
Common
.
Config
.
ErpUrl
}
/autologin?loginId=
{
orderModel
.
EnterID
}
&target=
{
path
}
)"
;
Common
.
Message
.
PushMessageModel
modelWork
=
new
Common
.
Message
.
PushMessageModel
()
{
CategoryId
=
PushMessageCategoryEnum
.
SalePeople
,
Content
=
markdownContent
,
CoverImg
=
""
,
CreateByName
=
"系统"
,
JumpUrl
=
""
,
WorkMsgType
=
"markdown"
,
SendTime
=
DateTime
.
Now
,
SendType
=
0
,
Title
=
"学员即将结课通知"
,
Platform
=
5
,
ReceiveId
=
sellerInfo
?.
WorkUserId
};
pushList
.
Add
(
modelWork
);
}
#
endregion
#
region
即将结课提醒
(
管理端
)
var
queryNotifyManager
=
GetWorkUserIdByDictRepository
(
"Push_EndClass"
);
if
(
queryNotifyManager
!=
null
&&
queryNotifyManager
.
Count
>
0
)
{
queryNotifyManager
.
ForEach
(
x
=>
#
region
即将结课提醒
(
销售端
)
if
(
sellerInfo
!=
null
&&
!
string
.
IsNullOrEmpty
(
sellerInfo
?.
WorkUserId
??
""
))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var
path
=
$"/sale/
orderStatistics
?OrderId=
{
guestModel
.
OrderId
}
"
;
var
path
=
$"/sale/
myOrder
?OrderId=
{
guestModel
.
OrderId
}
"
;
path
=
HttpUtility
.
UrlEncode
(
path
);
string
markdownContent
=
$"`结课预警` 学员即将结课通知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>剩余课时:<font color='warning'>
{
shenyuHours
}
</font>\n>是否续班:<font color='
{(
orderModel
.
RenewOrderId
>
0
?
"info"
:
"warning"
)}
'>
{(
orderModel
.
RenewOrderId
>
0
?
"已续班("
+
orderModel
.
RenewOrderId
+
")"
:
"未续班"
)}
</font>\n>关联单号:
{
guestModel
.
OrderId
}
(
{
sellerInfo
?.
EmName
??
""
}
)\n>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
Common
.
Config
.
ErpUrl
}
/autologin?loginId=
{
x
.
Id
}
&target=
{
path
}
)"
;
string
markdownContent
=
$"`结课预警` 学员即将结课通知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>剩余课时:<font color='warning'>
{
shenyuHours
}
</font>\n>是否续班:<font color='
{(
orderModel
.
RenewOrderId
>
0
?
"info"
:
"warning"
)}
'>
{(
orderModel
.
RenewOrderId
>
0
?
"已续班("
+
orderModel
.
RenewOrderId
+
")"
:
"未续班"
)}
</font>\n>关联单号:
{
guestModel
.
OrderId
}
\n>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
Common
.
Config
.
ErpUrl
}
/autologin?loginId=
{
orderModel
.
EnterID
}
&target=
{
path
}
)"
;
Common
.
Message
.
PushMessageModel
modelWork
=
new
Common
.
Message
.
PushMessageModel
()
{
CategoryId
=
PushMessageCategoryEnum
.
SalePeople
,
...
...
@@ -1110,52 +1089,52 @@ WHERE 1=1 AND A.Status=0 {1} ", builderMakeUp.ToString(), builderWhere.ToString
SendType
=
0
,
Title
=
"学员即将结课通知"
,
Platform
=
5
,
ReceiveId
=
x
.
WorkUserId
ReceiveId
=
sellerInfo
?
.
WorkUserId
};
pushList
.
Add
(
modelWork
);
});
}
#
endregion
}
else
if
(
shenyuHours
<=
0
)
{
var
shengyuMoney
=
orderModel
.
PreferPrice
-
orderModel
.
Income
+
orderModel
.
Refund
-
orderModel
.
PlatformTax
-
orderModel
.
DiscountMoney
-
orderModel
.
LessPrice
;
#
region
即将结课提醒
(
销售端
)
if
(
sellerInfo
!=
null
&&
!
string
.
IsNullOrEmpty
(
sellerInfo
?.
WorkUserId
??
""
))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var
path
=
$"/sale/myOrder?OrderId=
{
guestModel
.
OrderId
}
"
;
path
=
HttpUtility
.
UrlEncode
(
path
);
string
markdownContent
=
$"`结课通知` 学员已结课通知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>剩余课时:<font color='warning'>
{
shenyuHours
}
</font>\n>是否续班:<font color='
{(
orderModel
.
RenewOrderId
>
0
?
"info"
:
"warning"
)}
'>
{(
orderModel
.
RenewOrderId
>
0
?
"已续班("
+
orderModel
.
RenewOrderId
+
")"
:
"未续班"
)}
</font>\n>关联单号:
{
guestModel
.
OrderId
}
\n>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
Common
.
Config
.
ErpUrl
}
/autologin?loginId=
{
orderModel
.
EnterID
}
&target=
{
path
}
)"
;
Common
.
Message
.
PushMessageModel
modelWork
=
new
Common
.
Message
.
PushMessageModel
()
}
#
endregion
#
region
即将结课提醒
(
管理端
)
var
queryNotifyManager
=
GetWorkUserIdByDictRepository
(
"Push_EndClass"
);
if
(
queryNotifyManager
!=
null
&&
queryNotifyManager
.
Count
>
0
)
{
CategoryId
=
PushMessageCategoryEnum
.
SalePeople
,
Content
=
markdownContent
,
CoverImg
=
""
,
CreateByName
=
"系统"
,
JumpUrl
=
""
,
WorkMsgType
=
"markdown"
,
SendTime
=
DateTime
.
Now
,
SendType
=
0
,
Title
=
"学员已结课通知"
,
Platform
=
5
,
ReceiveId
=
sellerInfo
?.
WorkUserId
??
""
};
pushList
.
Add
(
modelWork
);
queryNotifyManager
.
ForEach
(
x
=>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var
path
=
$"/sale/orderStatistics?OrderId=
{
guestModel
.
OrderId
}
"
;
path
=
HttpUtility
.
UrlEncode
(
path
);
string
markdownContent
=
$"`结课预警` 学员即将结课通知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>剩余课时:<font color='warning'>
{
shenyuHours
}
</font>\n>是否续班:<font color='
{(
orderModel
.
RenewOrderId
>
0
?
"info"
:
"warning"
)}
'>
{(
orderModel
.
RenewOrderId
>
0
?
"已续班("
+
orderModel
.
RenewOrderId
+
")"
:
"未续班"
)}
</font>\n>关联单号:
{
guestModel
.
OrderId
}
(
{
sellerInfo
?.
EmName
??
""
}
)\n>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
Common
.
Config
.
ErpUrl
}
/autologin?loginId=
{
x
.
Id
}
&target=
{
path
}
)"
;
Common
.
Message
.
PushMessageModel
modelWork
=
new
Common
.
Message
.
PushMessageModel
()
{
CategoryId
=
PushMessageCategoryEnum
.
SalePeople
,
Content
=
markdownContent
,
CoverImg
=
""
,
CreateByName
=
"系统"
,
JumpUrl
=
""
,
WorkMsgType
=
"markdown"
,
SendTime
=
DateTime
.
Now
,
SendType
=
0
,
Title
=
"学员即将结课通知"
,
Platform
=
5
,
ReceiveId
=
x
.
WorkUserId
};
pushList
.
Add
(
modelWork
);
});
}
#
endregion
}
#
endregion
#
region
即将结课提醒
(
销售端
)
var
queryNotifyManager
=
GetWorkUserIdByDictRepository
(
"Push_EndClass"
);
if
(
queryNotifyManager
!=
null
&&
queryNotifyManager
.
Count
>
0
)
else
if
(
shenyuHours
<=
0
)
{
queryNotifyManager
.
ForEach
(
x
=>
var
shengyuMoney
=
orderModel
.
PreferPrice
-
orderModel
.
Income
+
orderModel
.
Refund
-
orderModel
.
PlatformTax
-
orderModel
.
DiscountMoney
-
orderModel
.
LessPrice
;
#
region
即将结课提醒
(
销售端
)
if
(
sellerInfo
!=
null
&&
!
string
.
IsNullOrEmpty
(
sellerInfo
?.
WorkUserId
??
""
))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var
path
=
$"/sale/
orderStatistics
?OrderId=
{
guestModel
.
OrderId
}
"
;
var
path
=
$"/sale/
myOrder
?OrderId=
{
guestModel
.
OrderId
}
"
;
path
=
HttpUtility
.
UrlEncode
(
path
);
string
markdownContent
=
$"`结课通知` 学员已结课通知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>剩余课时:<font color='warning'>
{
shenyuHours
}
</font>\n>是否续班:<font color='
{(
orderModel
.
RenewOrderId
>
0
?
"info"
:
"warning"
)}
'>
{(
orderModel
.
RenewOrderId
>
0
?
"已续班("
+
orderModel
.
RenewOrderId
+
")"
:
"未续班"
)}
</font>\n>关联单号:
{
guestModel
.
OrderId
}
(
{
sellerInfo
?.
EmName
??
""
}
)\n>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
Common
.
Config
.
ErpUrl
}
/autologin?loginId=
{
x
.
Id
}
&target=
{
path
}
)"
;
string
markdownContent
=
$"`结课通知` 学员已结课通知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>剩余课时:<font color='warning'>
{
shenyuHours
}
</font>\n>是否续班:<font color='
{(
orderModel
.
RenewOrderId
>
0
?
"info"
:
"warning"
)}
'>
{(
orderModel
.
RenewOrderId
>
0
?
"已续班("
+
orderModel
.
RenewOrderId
+
")"
:
"未续班"
)}
</font>\n>关联单号:
{
guestModel
.
OrderId
}
\n>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
Common
.
Config
.
ErpUrl
}
/autologin?loginId=
{
orderModel
.
EnterID
}
&target=
{
path
}
)"
;
Common
.
Message
.
PushMessageModel
modelWork
=
new
Common
.
Message
.
PushMessageModel
()
{
CategoryId
=
PushMessageCategoryEnum
.
SalePeople
,
...
...
@@ -1168,68 +1147,95 @@ WHERE 1=1 AND A.Status=0 {1} ", builderMakeUp.ToString(), builderWhere.ToString
SendType
=
0
,
Title
=
"学员已结课通知"
,
Platform
=
5
,
ReceiveId
=
x
.
WorkUserId
ReceiveId
=
sellerInfo
?.
WorkUserId
??
""
};
pushList
.
Add
(
modelWork
);
});
}
#
endregion
}
}
#
endregion
if
(
item
.
CheckStatus
==
1
)
{
#
region
通知缺勤信息
#
region
即将结课提醒
(
销售端
)
var
queryNotifyManager
=
GetWorkUserIdByDictRepository
(
"Push_EndClass"
);
if
(
queryNotifyManager
!=
null
&&
queryNotifyManager
.
Count
>
0
)
{
queryNotifyManager
.
ForEach
(
x
=>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var
path
=
$"/sale/orderStatistics?OrderId=
{
guestModel
.
OrderId
}
"
;
path
=
HttpUtility
.
UrlEncode
(
path
);
string
markdownContent
=
$"`结课通知` 学员已结课通知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>剩余课时:<font color='warning'>
{
shenyuHours
}
</font>\n>是否续班:<font color='
{(
orderModel
.
RenewOrderId
>
0
?
"info"
:
"warning"
)}
'>
{(
orderModel
.
RenewOrderId
>
0
?
"已续班("
+
orderModel
.
RenewOrderId
+
")"
:
"未续班"
)}
</font>\n>关联单号:
{
guestModel
.
OrderId
}
(
{
sellerInfo
?.
EmName
??
""
}
)\n>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
Common
.
Config
.
ErpUrl
}
/autologin?loginId=
{
x
.
Id
}
&target=
{
path
}
)"
;
Common
.
Message
.
PushMessageModel
modelWork
=
new
Common
.
Message
.
PushMessageModel
()
{
CategoryId
=
PushMessageCategoryEnum
.
SalePeople
,
Content
=
markdownContent
,
CoverImg
=
""
,
CreateByName
=
"系统"
,
JumpUrl
=
""
,
WorkMsgType
=
"markdown"
,
SendTime
=
DateTime
.
Now
,
SendType
=
0
,
Title
=
"学员已结课通知"
,
Platform
=
5
,
ReceiveId
=
x
.
WorkUserId
};
pushList
.
Add
(
modelWork
);
});
}
#
endregion
}
var
queryNotifyManager
=
GetWorkUserIdByDictRepository
(
"Push_Absence"
);
if
(
queryNotifyManager
!=
null
&&
queryNotifyManager
.
Count
>
0
)
if
(
item
.
CheckStatus
==
1
)
{
queryNotifyManager
.
ForEach
(
x
=>
#
region
通知缺勤信息
var
queryNotifyManager
=
GetWorkUserIdByDictRepository
(
"Push_Absence"
);
if
(
queryNotifyManager
!=
null
&&
queryNotifyManager
.
Count
>
0
)
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var
path
=
$"/stuMan/studentManage?OrderId=
{
guestModel
.
OrderId
}
"
;
path
=
HttpUtility
.
UrlEncode
(
path
);
string
markdownContent
=
$"`缺勤通知` 学员缺勤信息告知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>缺勤时间:<font color='warning'>
{
Common
.
ConvertHelper
.
FormatDate
(
item
.
ClassDate
)}
</font>\n>关联单号:
{
guestModel
.
OrderId
}
\n>班级名称:<font>
{
classModel
?.
ClassName
??
""
}
</font>\n>请点击:[查看详情](
{
Common
.
Config
.
ErpUrl
}
/autologin?loginId=
{
x
.
Id
}
&target=
{
path
}
)"
;
Common
.
Message
.
PushMessageModel
modelWork
=
new
Common
.
Message
.
PushMessageModel
()
queryNotifyManager
.
ForEach
(
x
=>
{
CategoryId
=
PushMessageCategoryEnum
.
SalePeople
,
Content
=
markdownContent
,
CoverImg
=
""
,
CreateByName
=
"系统"
,
JumpUrl
=
""
,
WorkMsgType
=
"markdown"
,
SendTime
=
DateTime
.
Now
,
SendType
=
0
,
Title
=
"学员缺勤通知"
,
Platform
=
5
,
ReceiveId
=
x
.
WorkUserId
};
pushList
.
Add
(
modelWork
);
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var
path
=
$"/stuMan/studentManage?OrderId=
{
guestModel
.
OrderId
}
"
;
path
=
HttpUtility
.
UrlEncode
(
path
);
string
markdownContent
=
$"`缺勤通知` 学员缺勤信息告知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>缺勤时间:<font color='warning'>
{
Common
.
ConvertHelper
.
FormatDate
(
item
.
ClassDate
)}
</font>\n>关联单号:
{
guestModel
.
OrderId
}
\n>班级名称:<font>
{
classModel
?.
ClassName
??
""
}
</font>\n>请点击:[查看详情](
{
Common
.
Config
.
ErpUrl
}
/autologin?loginId=
{
x
.
Id
}
&target=
{
path
}
)"
;
Common
.
Message
.
PushMessageModel
modelWork
=
new
Common
.
Message
.
PushMessageModel
()
{
CategoryId
=
PushMessageCategoryEnum
.
SalePeople
,
Content
=
markdownContent
,
CoverImg
=
""
,
CreateByName
=
"系统"
,
JumpUrl
=
""
,
WorkMsgType
=
"markdown"
,
SendTime
=
DateTime
.
Now
,
SendType
=
0
,
Title
=
"学员缺勤通知"
,
Platform
=
5
,
ReceiveId
=
x
.
WorkUserId
};
pushList
.
Add
(
modelWork
);
});
}
});
}
#
endregion
}
DynamicParameters
guestParamters
=
new
DynamicParameters
();
string
guestSql
=
"UPDATE RB_Order_Guest SET "
;
int
guestIndex
=
0
;
foreach
(
var
gItem
in
orderFileds
)
{
if
(
guestIndex
>
0
)
#
endregion
}
DynamicParameters
guestParamters
=
new
DynamicParameters
();
string
guestSql
=
"UPDATE RB_Order_Guest SET "
;
int
guestIndex
=
0
;
foreach
(
var
gItem
in
orderFileds
)
{
guestSql
+=
","
;
if
(
guestIndex
>
0
)
{
guestSql
+=
","
;
}
guestSql
+=
string
.
Format
(
"{0}=@{0} "
,
gItem
.
Key
);
guestParamters
.
Add
(
string
.
Format
(
"@{0}"
,
gItem
.
Key
),
gItem
.
Value
);
guestIndex
++;
}
guestSql
+=
string
.
Format
(
"{0}=@{0} "
,
gItem
.
Key
);
guestParamters
.
Add
(
string
.
Format
(
"@{0}"
,
gItem
.
Key
),
gItem
.
Value
);
guestIndex
++;
}
guestSql
+=
string
.
Format
(
" WHERE 1=1 AND Id=@Id "
);
guestParamters
.
Add
(
"@Id"
,
item
.
OrderGuestId
);
flag
=
base
.
Execute
(
guestSql
,
guestParamters
)
>
0
;
guestSql
+=
string
.
Format
(
" WHERE 1=1 AND Id=@Id "
);
guestParamters
.
Add
(
"@Id"
,
item
.
OrderGuestId
);
flag
=
base
.
Execute
(
guestSql
,
guestParamters
)
>
0
;
}
if
(
flag
&&
!
string
.
IsNullOrEmpty
(
LogContent
))
{
AddUserChangeLogRepository
(
new
Model
.
Entity
.
Log
.
RB_User_ChangeLog
()
...
...
@@ -1335,6 +1341,20 @@ WHERE 1=1 AND A.Status=0 {1} ", builderMakeUp.ToString(), builderWhere.ToString
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
}
if
(
flag
&&
!
string
.
IsNullOrEmpty
(
classLogStr
))
{
AddClassLogRepository
(
new
Model
.
Entity
.
Log
.
RB_Class_Log
()
{
LogType
=
Common
.
Enum
.
Course
.
ClassLogTypeEnum
.
Class
,
LogContent
=
classLogStr
,
ClassId
=
list
.
FirstOrDefault
().
ClassId
,
CreateBy
=
list
.
FirstOrDefault
().
CreateBy
,
CreateTime
=
DateTime
.
Now
,
Group_Id
=
list
.
FirstOrDefault
().
Group_Id
,
School_Id
=
list
.
FirstOrDefault
().
School_Id
,
});
}
return
flag
;
}
...
...
@@ -1530,6 +1550,18 @@ WHERE 1=1 AND A.Status=0 {1} ", builderMakeUp.ToString(), builderWhere.ToString
return
flag
;
}
/// <summary>
/// 添加班级日志
/// </summary>
/// <param name="model"></param>
private
void
AddClassLogRepository
(
Model
.
Entity
.
Log
.
RB_Class_Log
model
)
{
string
sql
=
" INSERT INTO RB_Class_Log(LogType,LogContent,ClassId,CreateBy,CreateTime,Group_Id,School_Id) "
;
sql
+=
" VALUES(@LogType,@LogContent,@ClassId,@CreateBy,@CreateTime,@Group_Id,@School_Id) "
;
base
.
Execute
(
sql
,
model
);
}
/// <summary>
/// 新增日志
/// </summary>
...
...
Edu.Repository/Grade/RB_Class_TypeRepository.cs
View file @
c23a3c6b
using
Edu.Common.Enum
;
using
Edu.Model.Entity.Course
;
using
Edu.Model.Entity.Grade
;
using
Edu.Model.ViewModel.Course
;
using
Edu.Model.ViewModel.Grade
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
...
...
Edu.WebApi/Controllers/Course/ClassController.cs
View file @
c23a3c6b
...
...
@@ -22,6 +22,7 @@ using Microsoft.AspNetCore.Cors;
using
Microsoft.AspNetCore.Mvc
;
using
Newtonsoft.Json
;
using
Newtonsoft.Json.Linq
;
using
Spire.Pdf.Exporting.XPS.Schema
;
namespace
Edu.WebApi.Controllers.Course
{
...
...
@@ -102,6 +103,8 @@ namespace Edu.WebApi.Controllers.Course
item
.
TotalPlanNum
,
item
.
CourseSubject
,
item
.
CourseSubjectName
,
item
.
ClassCategory
,
ClassCategoryName
=
item
.
ClassCategory
.
ToName
(),
});
}
pageModel
.
Count
=
rowsCount
;
...
...
@@ -244,6 +247,7 @@ namespace Edu.WebApi.Controllers.Course
CourseClassType
=
(
CourseClassTypeEnum
)
base
.
ParmJObj
.
GetInt
(
"CourseClassType"
),
StudentNumType
=
(
StudentNumTypeEnum
)
base
.
ParmJObj
.
GetInt
(
"StudentNumType"
),
ClassHourMinute
=
base
.
ParmJObj
.
GetInt
(
"ClassHourMinute"
),
ClassCategory
=(
ClassCategoryEnum
)
base
.
ParmJObj
.
GetInt
(
"ClassCategory"
),
};
extModel
.
ClassDateList
=
Common
.
Plugin
.
JsonHelper
.
DeserializeObject
<
List
<
string
>>(
base
.
ParmJObj
.
GetStringValue
(
"ClassDateList"
));
...
...
@@ -672,6 +676,7 @@ namespace Edu.WebApi.Controllers.Course
ClassDateList
=
extModel
?.
ClassDateList
??
new
List
<
string
>(),
TotalPlanNum
=
extModel
?.
TotalPlanNum
??
0
,
UsePlanNum
=
extModel
?.
UsePlanNum
??
0
,
ClassCategory
=
extModel
?.
ClassCategory
??
0
,
};
return
ApiResult
.
Success
(
data
:
obj
);
}
...
...
@@ -1296,6 +1301,70 @@ namespace Edu.WebApi.Controllers.Course
return
result
?
ApiResult
.
Success
(
message
:
"check_success"
)
:
ApiResult
.
Failed
(
"签到失败"
);
}
/// <summary>
/// 讲座和日语角签到
/// </summary>
/// <returns></returns>
[
HttpPost
]
public
ApiResult
AddClassCheckOtherType
()
{
int
ClassId
=
base
.
ParmJObj
.
GetInt
(
"ClassId"
);
int
ClassPlanId
=
base
.
ParmJObj
.
GetInt
(
"ClassPlanId"
);
int
ClassTimeId
=
base
.
ParmJObj
.
GetInt
(
"ClassTimeId"
);
if
(
ClassId
<=
0
||
ClassPlanId
<=
0
||
ClassTimeId
<=
0
)
{
return
ApiResult
.
ParamIsNull
(
message
:
"参数不能为空!"
);
}
var
userInfo
=
base
.
UserInfo
;
var
planModel
=
classModule
.
GetClassPlanListModule
(
new
RB_Class_Plan_ViewModel
()
{
ClassPlanId
=
ClassPlanId
}).
FirstOrDefault
();
//判断当天是否有已签到数据
var
checkLogList
=
classModule
.
GetClassCheckList
(
new
RB_Class_Check_ViewModel
{
Group_Id
=
userInfo
.
Group_Id
,
ClassId
=
ClassId
,
ClassTimeId
=
ClassTimeId
,
StartDate
=
planModel
.
ClassDate
.
ToString
(
"yyyy-MM-dd HH:mm:ss"
),
EndDate
=
planModel
.
ClassDate
.
ToString
(
"yyyy-MM-dd HH:mm:ss"
),
});
var
classTime
=
classModule
.
GetClassTimeListModule
(
new
RB_Class_Time_ViewModel
()
{
ClassId
=
ClassId
,
ClassPlanId
=
ClassPlanId
,
ClassTimeId
=
ClassTimeId
})?.
FirstOrDefault
();
List
<
RB_Class_Check_ViewModel
>
list
=
new
List
<
RB_Class_Check_ViewModel
>();
list
.
Add
(
new
RB_Class_Check_ViewModel
()
{
CheckStatus
=
0
,
ClassDate
=
planModel
.
ClassDate
,
ClassRoomId
=
planModel
.
ClassRoomId
,
OrderGuestId
=
0
,
School_Id
=
0
,
StudyNum
=
(
classTime
?.
TimeMinute
??
0
),
TeacherId
=
planModel
.
TeacherId
,
ClassId
=
ClassId
,
ClassTimeId
=
ClassTimeId
,
StuId
=
0
});
foreach
(
var
item
in
list
)
{
var
signModel
=
checkLogList
?.
Where
(
qitem
=>
qitem
.
ClassDate
.
ToString
(
"yyyy-MM-dd"
)
==
item
.
ClassDate
.
ToString
(
"yyyy-MM-dd"
)
&&
qitem
.
ClassId
==
item
.
ClassId
&&
qitem
.
ClassTimeId
==
item
.
ClassTimeId
)?.
FirstOrDefault
();
if
(
signModel
!=
null
&&
signModel
.
ClassCheckId
>
0
)
{
item
.
ClassCheckId
=
signModel
.
ClassCheckId
;
item
.
Group_Id
=
signModel
.
Group_Id
;
item
.
CreateTime
=
signModel
.
CreateTime
;
item
.
CreateBy
=
userInfo
.
Id
;
item
.
Status
=
0
;
}
else
{
item
.
Group_Id
=
userInfo
.
Group_Id
;
item
.
CreateTime
=
System
.
DateTime
.
Now
;
item
.
CreateBy
=
userInfo
.
Id
;
item
.
Status
=
0
;
}
}
bool
result
=
classModule
.
AddClassCheckModule
(
list
).
Result
;
return
result
?
ApiResult
.
Success
()
:
ApiResult
.
Failed
(
"签到失败"
);
}
///// <summary>
///// 视频转码回调
///// </summary>
...
...
@@ -1502,7 +1571,7 @@ namespace Edu.WebApi.Controllers.Course
ClassId
=
base
.
ParmJObj
.
GetInt
(
"ClassId"
),
};
query
.
Group_Id
=
base
.
UserInfo
.
Group_Id
;
var
list
=
classModule
.
GetClassLogPageList
Repository
(
pageModel
.
PageIndex
,
pageModel
.
PageSize
,
out
long
rowsCount
,
query
);
var
list
=
classModule
.
GetClassLogPageList
Module
(
pageModel
.
PageIndex
,
pageModel
.
PageSize
,
out
long
rowsCount
,
query
);
foreach
(
var
item
in
list
)
{
if
(
item
.
CreateBy
>
0
)
...
...
@@ -1555,6 +1624,25 @@ namespace Edu.WebApi.Controllers.Course
}
return
ApiResult
.
Success
(
data
:
list
.
OrderBy
(
qitem
=>
qitem
.
Id
));
}
/// <summary>
/// 获取班级分类枚举列表
/// </summary>
/// <returns></returns>
[
HttpPost
]
public
ApiResult
GetClassCategoryList
()
{
var
list
=
Common
.
Plugin
.
EnumHelper
.
EnumToList
(
typeof
(
ClassCategoryEnum
));
if
(
list
!=
null
)
{
list
.
Insert
(
0
,
new
EnumItem
()
{
Id
=
0
,
Name
=
"不限"
});
}
return
ApiResult
.
Success
(
data
:
list
.
OrderBy
(
qitem
=>
qitem
.
Id
));
}
#
endregion
#
region
老师教案
...
...
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