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
7602e62f
Commit
7602e62f
authored
Aug 29, 2024
by
黄奎
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
页面修改
parent
8cf5020d
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
857 additions
and
1396 deletions
+857
-1396
RB_Employee_Extend.cs
Edu.Model/ViewModel/User/RB_Employee_Extend.cs
+5
-0
ClassModule.cs
Edu.Module.Course/ClassModule.cs
+6
-626
OrderModule.cs
Edu.Module.Course/OrderModule.cs
+51
-51
ScrollClassModule.cs
Edu.Module.Course/ScrollClassModule.cs
+6
-4
OrderChangeModule.cs
Edu.Module.EduTask/OrderChangeModule.cs
+131
-131
RB_Student_LeaveRepository.cs
Edu.Repository/EduTask/RB_Student_LeaveRepository.cs
+1
-533
RB_Class_CheckRepository.cs
Edu.Repository/Grade/RB_Class_CheckRepository.cs
+653
-0
AppletCenterController.cs
Edu.WebApi/Controllers/Applet/AppletCenterController.cs
+1
-1
ClassController.cs
Edu.WebApi/Controllers/Course/ClassController.cs
+3
-50
No files found.
Edu.Model/ViewModel/User/RB_Employee_Extend.cs
View file @
7602e62f
...
...
@@ -128,6 +128,11 @@ namespace Edu.Model.ViewModel.User
/// </summary>
public
int
SumScore
{
get
;
set
;
}
/// <summary>
/// 绑定的企业微信
/// </summary>
public
string
WorkUserId
{
get
;
set
;
}
}
/// <summary>
/// 年假天数
...
...
Edu.Module.Course/ClassModule.cs
View file @
7602e62f
...
...
@@ -2093,478 +2093,12 @@ namespace Edu.Module.Course
/// <returns></returns>
public
virtual
async
Task
<
bool
>
AddClassCheckModule
(
List
<
RB_Class_Check_ViewModel
>
list
)
{
//基础课时分钟数
var
BasicMinutes
=
0
;
BasicMinutes
=
class_ConfigRepository
.
GetClassMinutesRepository
(
list
[
0
].
ClassId
);
var
timeModel
=
class_TimeRepository
.
GetClassTimeListRepository
(
new
RB_Class_Time_ViewModel
()
{
ClassTimeId
=
list
[
0
].
ClassTimeId
})?.
FirstOrDefault
();
//写日志
bool
flag
=
true
;
foreach
(
var
item
in
list
)
{
if
(
flag
)
{
var
guestModel
=
order_GuestRepository
.
GetEntity
(
item
.
OrderGuestId
);
item
.
CurrentDeductionHours
=
timeModel
?.
TimeHour
??
0
;
decimal
currentDeductionHours
=
item
.
CurrentDeductionHours
;
if
(
item
.
CheckStatus
==
2
)
{
currentDeductionHours
=
0
;
}
if
(
item
.
ClassCheckId
>
0
)
{
Dictionary
<
string
,
object
>
fileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Class_Check_ViewModel
.
CheckStatus
),
item
.
CheckStatus
},
{
nameof
(
RB_Class_Check_ViewModel
.
StudyNum
),
item
.
StudyNum
},
{
nameof
(
RB_Class_Check_ViewModel
.
CurrentDeductionHours
),
currentDeductionHours
},
};
List
<
WhereHelper
>
wheres
=
new
List
<
WhereHelper
>()
{
new
WhereHelper
(
nameof
(
RB_Class_Check_ViewModel
.
ClassCheckId
),
item
.
ClassCheckId
)
};
flag
=
classCheckRepository
.
Update
(
fileds
,
wheres
);
}
else
{
item
.
CurrentDeductionHours
=
currentDeductionHours
;
item
.
MakeUpStatus
=
1
;
var
newId
=
classCheckRepository
.
Insert
(
item
);
item
.
ClassCheckId
=
newId
;
flag
=
newId
>
0
;
}
var
oldModel
=
classCheckRepository
.
GetGuestFinishMinutesRepository
(
item
.
OrderGuestId
.
ToString
(),
ClassCheckId
:
item
.
ClassCheckId
)?.
FirstOrDefault
();
if
(
flag
)
{
//更新学员完成课时
var
completeHours
=
(
oldModel
?.
FinishClassHours
??
0
)
+
currentDeductionHours
;
Dictionary
<
string
,
object
>
orderFileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Order_Guest_ViewModel
.
CompleteHours
),
completeHours
}
};
var
orderModel
=
orderRepository
.
GetEntity
(
guestModel
.
OrderId
);
string
LogContent
=
""
;
var
shenyuHours
=
guestModel
.
ValidClassHours
-
completeHours
;
//已上课时>=有效课时,如果是,修改学员状态为停课,并且备注“有效课时消耗完毕,系统自动停课”
if
(
completeHours
>
guestModel
.
ValidClassHours
)
{
if
(
Common
.
Config
.
NoCheckOrderList
.
Count
>
0
&&
Common
.
Config
.
NoCheckOrderList
.
Contains
(
guestModel
.
OrderId
))
{
orderFileds
.
Add
(
nameof
(
RB_Order_Guest_ViewModel
.
GuestState
),
(
int
)
GuestStateEnum
.
Normal
);
}
else
{
orderFileds
.
Add
(
nameof
(
RB_Order_Guest_ViewModel
.
GuestState
),
(
int
)
GuestStateEnum
.
StopClasses
);
}
orderFileds
.
Add
(
nameof
(
RB_Order_Guest_ViewModel
.
ChangeEffectTime
),
System
.
DateTime
.
Now
);
orderFileds
.
Add
(
nameof
(
RB_Order_Guest_ViewModel
.
DropOutRemark
),
"有效课时消耗完毕,系统自动停课"
);
LogContent
=
guestModel
.
GuestName
+
"有效课时消耗完毕,系统自动停课!"
;
var
shengyuMoney
=
orderModel
.
PreferPrice
-
orderModel
.
Income
+
orderModel
.
Refund
-
orderModel
.
PlatformTax
-
orderModel
.
DiscountMoney
-
orderModel
.
LessPrice
;
var
classModel
=
classRepository
.
GetEntity
<
RB_Class_ViewModel
>(
guestModel
.
ClassId
);
var
sellerInfo
=
UserReidsCache
.
GetUserLoginInfo
(
orderModel
.
EnterID
);
#
region
欠费提醒(销售)
var
queryTargetWorkId
=
accountRepository
.
GetWorkUserIdRepository
(
orderModel
.
EnterID
);
if
(!
string
.
IsNullOrEmpty
(
queryTargetWorkId
)
&&
sellerInfo
!=
null
)
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var
path
=
$"/sale/myOrder?OrderId=
{
guestModel
.
OrderId
}
"
;
path
=
HttpUtility
.
UrlEncode
(
path
);
string
markdownContent
=
$"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>当前状态:<font color='warning'>停课</font>\n>关联单号:
{
guestModel
.
OrderId
}
\n>\n>待收金额:<font color='warning'>¥
{
shengyuMoney
:
0.00
}
</font>\n>停课理由:费用不足,系统自动触发停课限制\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
=
queryTargetWorkId
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
}
#
endregion
#
region
欠费提醒(管理者)
var
queryNotifyManager
=
accountRepository
.
GetWorkUserIdByDictRepository
(
"Push_Arrears"
);
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'>停课</font>\n>关联单号:
{
guestModel
.
OrderId
}
(
{
sellerInfo
.
AccountName
}
)\n>\n>待收金额:<font color='warning'>¥
{
shengyuMoney
:
0.00
}
</font>\n>停课理由:费用不足,系统自动触发停课限制\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
});
}
#
endregion
}
else
if
(
guestModel
.
TotalHours
>
guestModel
.
ValidClassHours
&&
shenyuHours
<
12
)
{
var
shengyuMoney
=
orderModel
.
PreferPrice
-
orderModel
.
Income
+
orderModel
.
Refund
-
orderModel
.
PlatformTax
-
orderModel
.
DiscountMoney
-
orderModel
.
LessPrice
;
var
classModel
=
classRepository
.
GetEntity
<
RB_Class_ViewModel
>(
guestModel
.
ClassId
);
var
sellerInfo
=
UserReidsCache
.
GetUserLoginInfo
(
orderModel
.
CreateBy
);
#
region
即将欠费提醒(销售)
var
queryTargetWorkId
=
accountRepository
.
GetWorkUserIdRepository
(
orderModel
.
CreateBy
);
if
(!
string
.
IsNullOrEmpty
(
queryTargetWorkId
)
&&
sellerInfo
!=
null
)
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
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>关联单号:
{
guestModel
.
OrderId
}
\n>\n>待收金额:<font color='warning'>¥
{
shengyuMoney
:
0.00
}
</font>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
=
queryTargetWorkId
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
}
#
endregion
#
region
即将欠费提醒(管理者)
var
queryNotifyManager
=
accountRepository
.
GetWorkUserIdByDictRepository
(
"Push_Arrears"
);
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>关联单号:
{
guestModel
.
OrderId
}
(
{
sellerInfo
.
AccountName
}
)\n>\n>待收金额:<font color='warning'>¥
{
shengyuMoney
:
0.00
}
</font>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
});
}
#
endregion
}
else
if
(
guestModel
.
TotalHours
==
guestModel
.
ValidClassHours
&&
shenyuHours
<
12
&&
shenyuHours
>
0
)
{
var
shengyuMoney
=
orderModel
.
PreferPrice
-
orderModel
.
Income
+
orderModel
.
Refund
-
orderModel
.
PlatformTax
-
orderModel
.
DiscountMoney
-
orderModel
.
LessPrice
;
var
classModel
=
classRepository
.
GetEntity
<
RB_Class_ViewModel
>(
guestModel
.
ClassId
);
var
sellerInfo
=
UserReidsCache
.
GetUserLoginInfo
(
orderModel
.
EnterID
);
#
region
即将结课提醒
(
销售端
)
var
queryTargetWorkId
=
accountRepository
.
GetWorkUserIdRepository
(
orderModel
.
EnterID
);
if
(!
string
.
IsNullOrEmpty
(
queryTargetWorkId
)
&&
sellerInfo
!=
null
)
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
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>请点击:[查看详情](
{
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
=
queryTargetWorkId
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
}
#
endregion
#
region
即将结课提醒
(
管理端
)
var
queryNotifyManager
=
accountRepository
.
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
.
AccountName
}
)\n>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
});
}
#
endregion
}
else
if
(
guestModel
.
TotalHours
==
guestModel
.
ValidClassHours
&&
shenyuHours
==
0
)
{
var
shengyuMoney
=
orderModel
.
PreferPrice
-
orderModel
.
Income
+
orderModel
.
Refund
-
orderModel
.
PlatformTax
-
orderModel
.
DiscountMoney
-
orderModel
.
LessPrice
;
var
classModel
=
classRepository
.
GetEntity
<
RB_Class_ViewModel
>(
guestModel
.
ClassId
);
var
sellerInfo
=
UserReidsCache
.
GetUserLoginInfo
(
orderModel
.
EnterID
);
#
region
即将结课提醒
(
销售端
)
var
queryTargetWorkId
=
accountRepository
.
GetWorkUserIdRepository
(
orderModel
.
EnterID
);
if
(!
string
.
IsNullOrEmpty
(
queryTargetWorkId
)
&&
sellerInfo
!=
null
)
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
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>请点击:[查看详情](
{
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
=
queryTargetWorkId
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
}
#
endregion
#
region
即将结课提醒
(
销售端
)
var
queryNotifyManager
=
accountRepository
.
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
.
AccountName
}
)\n>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
});
}
#
endregion
}
if
(
item
.
CheckStatus
==
1
)
{
#
region
通知缺勤信息
var
param
=
new
RB_Class_Plan_ViewModel
()
{
ClassTimeId
=
item
.
ClassTimeId
};
var
planModel
=
class_PlanRepository
.
GetClassPlanListExtRepository
(
param
).
FirstOrDefault
();
var
queryNotifyManager
=
accountRepository
.
GetWorkUserIdByDictRepository
(
"Push_Absence"
);
if
(
queryNotifyManager
!=
null
&&
queryNotifyManager
.
Count
>
0
)
{
queryNotifyManager
.
ForEach
(
x
=>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var
path
=
$"/stuMan/studentManage?OrderId=
{
guestModel
.
OrderId
}
"
;
path
=
HttpUtility
.
UrlEncode
(
path
);
string
markdownContent
=
$"`缺勤通知` 学员缺勤信息告知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>缺勤时间:<font color='warning'>
{
planModel
.
ClassDate
}
(
{
planModel
.
StartTime
}
-
{
planModel
.
EndTime
}
)</font>\n>关联单号:
{
guestModel
.
OrderId
}
\n>班级名称:<font>
{
planModel
.
ClassName
}
</font>\n>带班老师:<font>
{
planModel
.
TeacherName
}
</font>\n>请点击:[查看详情](
{
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
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
});
}
#
endregion
}
flag
=
order_GuestRepository
.
Update
(
orderFileds
,
new
WhereHelper
(
nameof
(
RB_Order_Guest_ViewModel
.
Id
),
item
.
OrderGuestId
));
if
(
flag
&&
!
string
.
IsNullOrEmpty
(
LogContent
))
{
user_ChangeLogRepository
.
Insert
(
new
Model
.
Entity
.
Log
.
RB_User_ChangeLog
()
{
Id
=
0
,
Type
=
3
,
CreateBy
=
item
.
CreateBy
,
CreateTime
=
DateTime
.
Now
,
Group_Id
=
item
.
Group_Id
,
LogContent
=
LogContent
,
School_Id
=
item
.
School_Id
,
SourceId
=
guestModel
.
Id
});
}
//缺勤和请假
if
(
item
.
CheckStatus
==
1
||
item
.
CheckStatus
==
2
)
{
flag
=
CalcGuestHoursModule
(
guestModel
,
item
);
}
#
region
B2B
同业推送
if
(
orderModel
!=
null
&&
orderModel
.
CustomerId
>
0
)
{
//最后5个课时做处理
if
(
completeHours
>
guestModel
.
ValidClassHours
)
{
//已停课
b2B_StudentNoticeRepository
.
Insert
(
new
Model
.
Entity
.
Log
.
RB_B2B_StudentNotice
()
{
Id
=
0
,
Type
=
3
,
StudentId
=
guestModel
.
Id
,
CustomerId
=
orderModel
.
CustomerId
,
Title
=
"停课通知"
,
Content
=
"学员"
+
guestModel
.
GuestName
+
" 有效课时消耗完毕,已自动停课,关联单号:"
+
guestModel
.
OrderId
+
"!"
,
IsLook
=
2
,
Status
=
0
,
CreateBy
=
item
.
CreateBy
,
CreateTime
=
DateTime
.
Now
,
Group_Id
=
item
.
Group_Id
,
UpdateTime
=
DateTime
.
Now
});
}
else
if
(
guestModel
.
TotalHours
>
guestModel
.
ValidClassHours
&&
shenyuHours
<=
5
)
{
//即将欠费
b2B_StudentNoticeRepository
.
Insert
(
new
Model
.
Entity
.
Log
.
RB_B2B_StudentNotice
()
{
Id
=
0
,
Type
=
1
,
StudentId
=
guestModel
.
Id
,
CustomerId
=
orderModel
.
CustomerId
,
Title
=
"欠费预警"
,
Content
=
"学员"
+
guestModel
.
GuestName
+
" 即将欠费,剩余课时"
+
shenyuHours
+
",关联单号:"
+
guestModel
.
OrderId
+
"!"
,
IsLook
=
2
,
Status
=
0
,
CreateBy
=
item
.
CreateBy
,
CreateTime
=
DateTime
.
Now
,
Group_Id
=
item
.
Group_Id
,
UpdateTime
=
DateTime
.
Now
});
}
else
if
(
guestModel
.
TotalHours
==
guestModel
.
ValidClassHours
&&
shenyuHours
<=
5
&&
shenyuHours
>=
0
)
{
//即将结课
b2B_StudentNoticeRepository
.
Insert
(
new
Model
.
Entity
.
Log
.
RB_B2B_StudentNotice
()
{
Id
=
0
,
Type
=
2
,
StudentId
=
guestModel
.
Id
,
CustomerId
=
orderModel
.
CustomerId
,
Title
=
"结课预警"
,
Content
=
"学员"
+
guestModel
.
GuestName
+
" 即将结课,剩余课时"
+
shenyuHours
+
",关联单号:"
+
guestModel
.
OrderId
+
"!"
,
IsLook
=
2
,
Status
=
0
,
CreateBy
=
item
.
CreateBy
,
CreateTime
=
DateTime
.
Now
,
Group_Id
=
item
.
Group_Id
,
UpdateTime
=
DateTime
.
Now
});
}
else
if
(
guestModel
.
TotalHours
==
guestModel
.
ValidClassHours
&&
shenyuHours
==
0
)
{
//已经结课
b2B_StudentNoticeRepository
.
Insert
(
new
Model
.
Entity
.
Log
.
RB_B2B_StudentNotice
()
{
Id
=
0
,
Type
=
4
,
StudentId
=
guestModel
.
Id
,
CustomerId
=
orderModel
.
CustomerId
,
Title
=
"结课通知"
,
Content
=
"学员"
+
guestModel
.
GuestName
+
" 已结课,关联单号:"
+
guestModel
.
OrderId
+
"!"
,
IsLook
=
2
,
Status
=
0
,
CreateBy
=
item
.
CreateBy
,
CreateTime
=
DateTime
.
Now
,
Group_Id
=
item
.
Group_Id
,
UpdateTime
=
DateTime
.
Now
});
}
}
#
endregion
}
}
}
if
(
MessageCenterHub
.
GlobalContext
!=
null
)
{
//通知教室端签到更新
await
MessageCenterHub
.
GlobalContext
.
Clients
.
All
.
SendAsync
(
"UpdateCheckin"
,
"666"
);
}
bool
flag
=
classCheckRepository
.
StudentCheckRepository
(
list
,
1
);
//if (MessageCenterHub.GlobalContext != null)
//{
// //通知教室端签到更新
// await MessageCenterHub.GlobalContext.Clients.All.SendAsync("UpdateCheckin", "666");
//}
return
flag
;
}
...
...
@@ -2586,160 +2120,6 @@ namespace Edu.Module.Course
return
false
;
}
/// <summary>
/// 初始化缺勤数据
/// </summary>
/// <returns></returns>
public
bool
InitDataModule
()
{
bool
flag
=
true
;
var
list
=
GetClassCheckListRepository
(
new
RB_Class_Check_ViewModel
());
var
tempList
=
list
?.
Where
(
qitem
=>
qitem
.
CheckStatus
>
0
)?.
ToList
();
foreach
(
var
item
in
tempList
)
{
if
(
item
.
ClassId
>
5
)
{
var
guestModel
=
order_GuestRepository
.
GetEntity
(
item
.
OrderGuestId
);
flag
=
CalcGuestHoursModule
(
guestModel
,
item
);
}
}
return
flag
;
}
/// <summary>
/// 计算学员缺课课时
/// </summary>
/// <param name="guestModel"></param>
/// <param name="checkModel"></param>
/// <returns></returns>
public
bool
CalcGuestHoursModule
(
RB_Order_Guest
guestModel
,
RB_Class_Check_ViewModel
checkModel
)
{
bool
flag
=
true
;
if
(
guestModel
.
GuestState
==
GuestStateEnum
.
Normal
)
{
decimal
NoFinishHours
=
0
;
//获取以前所有签到列表【倒叙】
var
checkList
=
classCheckRepository
.
GetClassCheckListRepository
(
new
RB_Class_Check_ViewModel
()
{
ClassId
=
checkModel
.
ClassId
,
OrderGuestId
=
checkModel
.
OrderGuestId
,
EndDate
=
Common
.
ConvertHelper
.
FormatDate
(
checkModel
.
ClassDate
)
}).
OrderByDescending
(
qitem
=>
qitem
.
ClassDate
).
ToList
();
for
(
var
i
=
0
;
i
<
checkList
.
Count
;
i
++)
{
if
((
checkList
[
i
].
CheckStatus
==
1
)
&&
(
checkList
[
i
].
MakeUpStatus
==
3
||
checkList
[
i
].
MakeUpStatus
==
4
||
checkList
[
i
].
MakeUpStatus
==
1
))
{
NoFinishHours
+=
checkList
[
i
].
CurrentDeductionHours
;
}
else
{
break
;
}
}
Dictionary
<
string
,
object
>
fileds
=
new
Dictionary
<
string
,
object
>();
Dictionary
<
string
,
object
>
checkFileds
=
new
Dictionary
<
string
,
object
>();
//缺勤课时超过12课时更新学员状态为【停课】
if
(
NoFinishHours
>=
Common
.
Config
.
AbsentHours
)
{
fileds
.
Add
(
nameof
(
RB_Order_Guest_ViewModel
.
GuestState
),
(
int
)
GuestStateEnum
.
StopClasses
);
checkFileds
.
Add
(
nameof
(
RB_Class_Check_ViewModel
.
IsAbsentHours
),
1
);
checkFileds
.
Add
(
nameof
(
RB_Class_Check_ViewModel
.
MakeUpStatus
),
4
);
var
orderModel
=
orderRepository
.
GetEntity
(
guestModel
.
OrderId
);
var
shengyuMoney
=
orderModel
.
PreferPrice
-
orderModel
.
Income
+
orderModel
.
Refund
-
orderModel
.
PlatformTax
-
orderModel
.
DiscountMoney
-
orderModel
.
LessPrice
;
var
classModel
=
classRepository
.
GetEntity
<
RB_Class_ViewModel
>(
guestModel
.
ClassId
);
var
sellerInfo
=
UserReidsCache
.
GetUserLoginInfo
(
orderModel
.
EnterID
);
#
region
欠费提醒(销售)
var
queryTargetWorkId
=
accountRepository
.
GetWorkUserIdRepository
(
orderModel
.
EnterID
);
if
(!
string
.
IsNullOrEmpty
(
queryTargetWorkId
))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var
path
=
$"/sale/myOrder?OrderId=
{
guestModel
.
OrderId
}
"
;
path
=
HttpUtility
.
UrlEncode
(
path
);
string
markdownContent
=
$"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>当前状态:<font color='warning'>停课</font>\n>关联单号:
{
guestModel
.
OrderId
}
\n>\n>待收金额:<font color='warning'>¥
{
shengyuMoney
:
0.00
}
</font>\n>停课理由:连续缺课超过
{
Config
.
AbsentHours
}
课时,系统自动停课\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
=
queryTargetWorkId
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
}
#
endregion
#
region
欠费提醒(管理者)
var
queryNotifyManager
=
accountRepository
.
GetWorkUserIdByDictRepository
(
"Push_Arrears"
);
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'>停课</font>\n>关联单号:
{
guestModel
.
OrderId
}
(
{
sellerInfo
.
AccountName
}
)\n>\n>待收金额:<font color='warning'>¥
{
shengyuMoney
:
0.00
}
</font>\n>停课理由:连续缺课超过
{
Config
.
AbsentHours
}
课时,系统自动停课\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
});
}
#
endregion
}
if
(
fileds
!=
null
&&
fileds
.
Count
>
0
&&
checkFileds
!=
null
&&
checkFileds
.
Count
>
0
)
{
List
<
WhereHelper
>
wheres
=
new
List
<
WhereHelper
>()
{
new
WhereHelper
(
nameof
(
RB_Order_Guest_ViewModel
.
Id
),
guestModel
.
Id
),
};
flag
=
order_GuestRepository
.
Update
(
fileds
,
wheres
);
List
<
WhereHelper
>
checkWheres
=
new
List
<
WhereHelper
>()
{
new
WhereHelper
(
nameof
(
RB_Class_Check_ViewModel
.
ClassCheckId
),
checkModel
.
ClassCheckId
),
};
flag
=
classCheckRepository
.
Update
(
checkFileds
,
checkWheres
);
}
if
(
flag
&&
checkModel
.
CheckStatus
==
1
&&
checkModel
.
IsUpdateMakeUp
!=
1
)
{
//请假的 因为不扣课时, 无法进补课
flag
=
student_MakeupRepository
.
SetStudentMakeUpRepository
(
new
RB_Student_Makeup
()
{
Id
=
0
,
ClassCheckId
=
checkModel
.
ClassCheckId
,
ClassDate
=
checkModel
.
ClassDate
,
ClassId
=
checkModel
.
ClassId
,
CreateBy
=
checkModel
.
CreateBy
,
CreateTime
=
checkModel
.
CreateTime
,
Group_Id
=
checkModel
.
Group_Id
,
MakeUpStatus
=
1
,
OrderGuestId
=
checkModel
.
OrderGuestId
});
}
}
return
flag
;
}
/// <summary>
/// 设置修改学员补课状态
...
...
Edu.Module.Course/OrderModule.cs
View file @
7602e62f
...
...
@@ -4889,57 +4889,57 @@ namespace Edu.Module.Course
public
bool
UpdateGuestStateModule
()
{
bool
flag
=
false
;
var
list
=
order_GuestRepository
.
UpdateGuestStateRepository
();
if
(
list
!=
null
&&
list
.
Count
>
0
)
{
string
guestIds
=
string
.
Join
(
","
,
list
.
Select
(
qitem
=>
qitem
.
Id
));
var
checkList
=
class_CheckRepository
.
GetClassCheckList
(
new
RB_Class_Check_ViewModel
()
{
QOrderGuestIds
=
guestIds
});
int
index
=
1
;
foreach
(
var
item
in
list
)
{
var
guestCheckList
=
checkList
.
Where
(
qitem
=>
qitem
.
OrderGuestId
==
item
.
Id
);
var
totalHours
=
guestCheckList
?.
Sum
(
qitem
=>
qitem
.
CurrentDeductionHours
)
??
0
;
if
(
item
.
TotalHours
!=
totalHours
)
{
decimal
shengyu
=
item
.
TotalHours
-
totalHours
;
var
lastCheck
=
guestCheckList
.
OrderByDescending
(
qitem
=>
qitem
.
ClassDate
).
FirstOrDefault
();
DateTime
classDate
=
DateTime
.
Now
;
if
(
lastCheck
!=
null
&&
!
string
.
IsNullOrEmpty
(
Common
.
ConvertHelper
.
FormatDate
(
lastCheck
?.
ClassDate
)))
{
classDate
=
lastCheck
.
ClassDate
.
AddDays
(
1
);
}
var
checkModel
=
new
RB_Class_Check
()
{
ClassCheckId
=
0
,
ClassId
=
0
,
ClassDate
=
classDate
,
Status
=
0
,
ClassRoomId
=
0
,
Group_Id
=
lastCheck
?.
Group_Id
??
100000
,
School_Id
=
0
,
TeacherId
=
0
,
OrderGuestId
=
item
.
Id
,
CheckStatus
=
0
,
CreateBy
=
0
,
StudyNum
=
Convert
.
ToInt32
(
shengyu
)
*
45
,
MakeUpStatus
=
1
,
CurrentDeductionHours
=
shengyu
,
IsAbsentHours
=
0
,
ClassTimeId
=
0
,
};
checkModel
.
CreateTime
=
checkModel
.
ClassDate
;
class_CheckRepository
.
Insert
(
checkModel
);
}
Dictionary
<
string
,
object
>
fileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Order_Guest
.
CompleteHours
),
item
.
TotalHours
},
{
nameof
(
RB_Order_Guest
.
GuestState
),
(
int
)
GuestStateEnum
.
Graduate
},
};
flag
=
order_GuestRepository
.
Update
(
fileds
,
new
WhereHelper
(
nameof
(
RB_Order_Guest
.
Id
),
item
.
Id
));
Console
.
WriteLine
(
string
.
Format
(
"已完成 {0}/{1} "
,
index
,
list
.
Count
));
index
++;
}
}
//
var list = order_GuestRepository.UpdateGuestStateRepository();
//
if (list != null && list.Count > 0)
//
{
//
string guestIds = string.Join(",", list.Select(qitem => qitem.Id));
//
var checkList = class_CheckRepository.GetClassCheckList(new RB_Class_Check_ViewModel() { QOrderGuestIds = guestIds });
//
int index = 1;
//
foreach (var item in list)
//
{
//
var guestCheckList = checkList.Where(qitem => qitem.OrderGuestId == item.Id);
//
var totalHours = guestCheckList?.Sum(qitem => qitem.CurrentDeductionHours) ?? 0;
//
if (item.TotalHours != totalHours)
//
{
//
decimal shengyu = item.TotalHours - totalHours;
//
var lastCheck = guestCheckList.OrderByDescending(qitem => qitem.ClassDate).FirstOrDefault();
//
DateTime classDate = DateTime.Now;
//
if (lastCheck != null && !string.IsNullOrEmpty(Common.ConvertHelper.FormatDate(lastCheck?.ClassDate)))
//
{
//
classDate = lastCheck.ClassDate.AddDays(1);
//
}
//
var checkModel = new RB_Class_Check()
//
{
//
ClassCheckId = 0,
//
ClassId = 0,
//
ClassDate = classDate,
//
Status = 0,
//
ClassRoomId = 0,
//
Group_Id = lastCheck?.Group_Id ?? 100000,
//
School_Id = 0,
//
TeacherId = 0,
//
OrderGuestId = item.Id,
//
CheckStatus = 0,
//
CreateBy = 0,
//
StudyNum = Convert.ToInt32(shengyu) * 45,
//
MakeUpStatus = 1,
//
CurrentDeductionHours = shengyu,
//
IsAbsentHours = 0,
//
ClassTimeId = 0,
//
};
//
checkModel.CreateTime = checkModel.ClassDate;
//
class_CheckRepository.Insert(checkModel);
//
}
//
Dictionary<string, object> fileds = new Dictionary<string, object>()
//
{
//
{nameof(RB_Order_Guest.CompleteHours),item.TotalHours },
//
{nameof(RB_Order_Guest.GuestState), (int)GuestStateEnum.Graduate},
//
};
//
flag = order_GuestRepository.Update(fileds, new WhereHelper(nameof(RB_Order_Guest.Id), item.Id));
//
Console.WriteLine(string.Format("已完成 {0}/{1} ", index, list.Count));
//
index++;
//
}
//
}
return
flag
;
}
}
...
...
Edu.Module.Course/ScrollClassModule.cs
View file @
7602e62f
...
...
@@ -2863,7 +2863,8 @@ namespace Edu.Module.Course
if
(
gmodel
!=
null
&&
gmodel
.
CourseChapterNo
<
demodel
.
ChapterNo
)
{
//ld 2022-03-08 修改为学员上课最大课时
Dictionary
<
string
,
object
>
keyValues1
=
new
Dictionary
<
string
,
object
>()
{
Dictionary
<
string
,
object
>
keyValues1
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Order_Guest_ViewModel
.
CourseChapterNo
),
demodel
.
ChapterNo
},
{
nameof
(
RB_Order_Guest_ViewModel
.
CompleteHours
),
demodel
.
ChapterNo
*
clist
.
Sum
(
x
=>
x
.
ClassHours
)}
};
...
...
@@ -2872,7 +2873,8 @@ namespace Edu.Module.Course
//章节已上完了 修改为 毕业
keyValues1
.
Add
(
nameof
(
Model
.
ViewModel
.
Sell
.
RB_Order_Guest_ViewModel
.
GuestState
),
Common
.
Enum
.
Course
.
GuestStateEnum
.
Graduate
);
}
List
<
WhereHelper
>
wheres1
=
new
List
<
WhereHelper
>()
{
List
<
WhereHelper
>
wheres1
=
new
List
<
WhereHelper
>()
{
new
WhereHelper
(){
FiledName
=
nameof
(
Model
.
ViewModel
.
Sell
.
RB_Order_Guest_ViewModel
.
Id
),
FiledValue
=
gmodel
.
Id
,
...
...
Edu.Module.EduTask/OrderChangeModule.cs
View file @
7602e62f
...
...
@@ -943,147 +943,147 @@ namespace Edu.Module.EduTask
{
bool
flag
=
false
;
message
=
""
;
var
order
=
orderRepository
.
GetEntity
(
OrderId
);
if
(
order
==
null
)
{
message
=
"未找到此订单"
;
return
false
;
}
if
(
order
.
FirstOrderId
<=
0
)
{
message
=
"当前订单不是转班/分拆订单不能回归原班!"
;
return
false
;
}
var
oldOrder
=
orderRepository
.
GetEntity
(
order
.
FirstOrderId
);
if
(
oldOrder
==
null
)
{
message
=
"原订单不是转班/分拆订单不能回归原班!"
;
return
false
;
}
var
orderguestList
=
guestRepository
.
GetOrderGuestListRepository
(
new
RB_Order_Guest_ViewModel
()
{
OrderIds
=
OrderId
+
","
+
order
.
FirstOrderId
});
var
oldGuest
=
orderguestList
.
Where
(
qitem
=>
qitem
.
OrderId
==
oldOrder
.
OrderId
)?.
FirstOrDefault
()??
new
RB_Order_Guest_ViewModel
();
var
guest
=
orderguestList
.
Where
(
qitem
=>
qitem
.
OrderId
==
order
.
OrderId
)?.
FirstOrDefault
()
??
new
RB_Order_Guest_ViewModel
();
var
classList
=
classRepository
.
GetClassListRepository
(
new
RB_Class_ViewModel
()
{
Q_ClassIds
=
oldOrder
.
ClassId
+
","
+
order
.
ClassId
});
//
var order = orderRepository.GetEntity(OrderId);
//
if (order == null)
//
{
//
message = "未找到此订单";
//
return false;
//
}
//
if (order.FirstOrderId <= 0)
//
{
//
message = "当前订单不是转班/分拆订单不能回归原班!";
//
return false;
//
}
//
var oldOrder = orderRepository.GetEntity(order.FirstOrderId);
//
if (oldOrder == null)
//
{
//
message = "原订单不是转班/分拆订单不能回归原班!";
//
return false;
//
}
//
var orderguestList = guestRepository.GetOrderGuestListRepository(new RB_Order_Guest_ViewModel() {
//
OrderIds = OrderId + "," + order.FirstOrderId
//
});
//
var oldGuest = orderguestList.Where(qitem=>qitem.OrderId==oldOrder.OrderId)?.FirstOrDefault()??new RB_Order_Guest_ViewModel ();
//
var guest = orderguestList.Where(qitem => qitem.OrderId == order.OrderId)?.FirstOrDefault() ?? new RB_Order_Guest_ViewModel();
//
var classList = classRepository.GetClassListRepository(new RB_Class_ViewModel()
//
{
//
Q_ClassIds = oldOrder.ClassId + "," + order.ClassId
//
});
var
oldContract
=
education_ContractRepository
.
GetList
(
new
RB_Education_Contract_ViewModel
()
{
OrderId
=
oldOrder
.
OrderId
,
GuestId
=
oldGuest
.
Id
,
Status
=-
1
,
}).
Where
(
qitem
=>
qitem
.
Status
==
0
||
qitem
.
Status
==
1
||
qitem
.
Status
==
2
)?.
FirstOrDefault
();
//
var oldContract = education_ContractRepository.GetList(new RB_Education_Contract_ViewModel()
//
{
//
OrderId = oldOrder.OrderId,
//
GuestId = oldGuest.Id,
//
Status=-1,
//
}).Where(qitem => qitem.Status == 0 || qitem.Status == 1 || qitem.Status == 2)?.FirstOrDefault();
var
newContract
=
education_ContractRepository
.
GetList
(
new
RB_Education_Contract_ViewModel
()
{
OrderId
=
order
.
OrderId
,
GuestId
=
guest
.
Id
,
Status
=-
1
,
}).
Where
(
qitem
=>
qitem
.
Status
==
0
||
qitem
.
Status
==
1
||
qitem
.
Status
==
2
)?.
FirstOrDefault
();
//
var newContract = education_ContractRepository.GetList(new RB_Education_Contract_ViewModel()
//
{
//
OrderId = order.OrderId,
//
GuestId = guest.Id,
//
Status=-1,
//
}).Where(qitem => qitem.Status == 0 || qitem.Status == 1 || qitem.Status == 2)?.FirstOrDefault();
var
oldClassModel
=
classList
?.
Where
(
qitem
=>
qitem
.
ClassId
==
oldOrder
.
ClassId
)?.
FirstOrDefault
()
??
new
RB_Class_ViewModel
();
var
newClassModel
=
classList
?.
Where
(
qitem
=>
qitem
.
ClassId
==
order
.
ClassId
)?.
FirstOrDefault
()
??
new
RB_Class_ViewModel
();
//原业务员
var
userInfo
=
UserReidsCache
.
GetUserLoginInfo
(
oldOrder
.
EnterID
);
if
(
guest
.
TotalHours
!=
guest
.
CompleteHours
)
{
//生成收支相抵单据
//剩余课时
var
surplus
=
guest
.
TotalHours
-
guest
.
CompleteHours
;
var
refundMoney
=
Math
.
Round
(
order
.
PreferPrice
/
guest
.
TotalHours
*
surplus
,
2
);
//
var oldClassModel = classList?.Where(qitem => qitem.ClassId == oldOrder.ClassId)?.FirstOrDefault() ?? new RB_Class_ViewModel();
//
var newClassModel = classList?.Where(qitem => qitem.ClassId == order.ClassId)?.FirstOrDefault() ?? new RB_Class_ViewModel();
//
//
原业务员
//
var userInfo = UserReidsCache.GetUserLoginInfo(oldOrder.EnterID);
//
if (guest.TotalHours != guest.CompleteHours)
//
{
//
//生成收支相抵单据
//
//剩余课时
//
var surplus = guest.TotalHours - guest.CompleteHours;
//
var refundMoney = Math.Round(order.PreferPrice/ guest.TotalHours * surplus, 2);
#
region
更新学员课时
//更新老订单学员课时
Dictionary
<
string
,
object
>
oldGuestFileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Order_Guest_Extend
.
TotalHours
),
oldGuest
.
TotalHours
+
surplus
}
};
flag
=
guestRepository
.
Update
(
oldGuestFileds
,
new
WhereHelper
(
nameof
(
RB_Order_Guest_Extend
.
Id
),
oldGuest
.
Id
));
//
#region 更新学员课时
//
//更新老订单学员课时
//
Dictionary<string, object> oldGuestFileds = new Dictionary<string, object>()
//
{
//
{nameof(RB_Order_Guest_Extend.TotalHours),oldGuest.TotalHours+surplus }
//
};
//
flag= guestRepository.Update(oldGuestFileds, new WhereHelper(nameof(RB_Order_Guest_Extend.Id), oldGuest.Id));
//更新新订单学员课时
Dictionary
<
string
,
object
>
newGuestFileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Order_Guest_Extend
.
TotalHours
),
guest
.
CompleteHours
},
{
nameof
(
RB_Order_Guest_Extend
.
GuestState
),(
int
)
GuestStateEnum
.
Graduate
}
};
flag
=
guestRepository
.
Update
(
newGuestFileds
,
new
WhereHelper
(
nameof
(
RB_Order_Guest_Extend
.
Id
),
guest
.
Id
));
#
endregion
//
//更新新订单学员课时
//
Dictionary<string, object> newGuestFileds = new Dictionary<string, object>()
//
{
//
{nameof(RB_Order_Guest_Extend.TotalHours),guest.CompleteHours },
//
{nameof(RB_Order_Guest_Extend.GuestState),(int)GuestStateEnum.Graduate}
//
};
//
flag = guestRepository.Update(newGuestFileds, new WhereHelper(nameof(RB_Order_Guest_Extend.Id), guest.Id));
//
#endregion
#
region
更新订单应收
Dictionary
<
string
,
object
>
oldOrderFileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Order
.
PreferPrice
),
oldOrder
.
PreferPrice
+
refundMoney
}
};
//更新原订单应收
flag
=
orderRepository
.
Update
(
oldOrderFileds
,
new
WhereHelper
(
nameof
(
RB_Order
.
OrderId
),
oldOrder
.
OrderId
));
//
#region 更新订单应收
//
Dictionary<string, object> oldOrderFileds = new Dictionary<string, object>()
//
{
//
{nameof(RB_Order.PreferPrice),oldOrder.PreferPrice+refundMoney}
//
};
//
//更新原订单应收
//
flag = orderRepository.Update(oldOrderFileds, new WhereHelper(nameof(RB_Order.OrderId), oldOrder.OrderId));
Dictionary
<
string
,
object
>
newOrderFileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Order
.
PreferPrice
),
order
.
PreferPrice
-
refundMoney
},
{
nameof
(
RB_Order
.
IsBackClass
),
1
}
};
//更新新订单应收
flag
=
orderRepository
.
Update
(
newOrderFileds
,
new
WhereHelper
(
nameof
(
RB_Order
.
OrderId
),
order
.
OrderId
));
#
endregion
//
Dictionary<string, object> newOrderFileds = new Dictionary<string, object>()
//
{
//
{nameof(RB_Order.PreferPrice),order.PreferPrice-refundMoney},
//
{nameof(RB_Order.IsBackClass),1}
//
};
//
//更新新订单应收
//
flag = orderRepository.Update(newOrderFileds, new WhereHelper(nameof(RB_Order.OrderId), order.OrderId));
//
#endregion
#
region
更新合同课时和应收
Dictionary
<
string
,
object
>
oldContractFileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Education_Contract
.
FirstClassHours
),
guest
.
CompleteHours
},
{
nameof
(
RB_Education_Contract
.
FirstCourseFee
),
order
.
PreferPrice
-
refundMoney
},
{
nameof
(
RB_Education_Contract
.
FirstMoney
),
order
.
PreferPrice
-
refundMoney
},
{
nameof
(
RB_Education_Contract
.
Money
),
order
.
PreferPrice
-
refundMoney
},
{
nameof
(
RB_Education_Contract
.
CNYCaps
),
StringHelper
.
MoneyToUpper
((
order
.
PreferPrice
-
refundMoney
).
ToString
())
}
};
flag
=
education_ContractRepository
.
Update
(
oldContractFileds
,
new
WhereHelper
(
nameof
(
RB_Education_Contract
.
Id
),
oldContract
.
Id
));
Dictionary
<
string
,
object
>
newContractFileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Education_Contract
.
FirstClassHours
),
oldGuest
.
TotalHours
+
surplus
},
{
nameof
(
RB_Education_Contract
.
FirstCourseFee
),
oldOrder
.
PreferPrice
+
refundMoney
},
{
nameof
(
RB_Education_Contract
.
FirstMoney
),
oldOrder
.
PreferPrice
+
refundMoney
},
{
nameof
(
RB_Education_Contract
.
Money
),
oldOrder
.
PreferPrice
+
refundMoney
},
{
nameof
(
RB_Education_Contract
.
CNYCaps
),
StringHelper
.
MoneyToUpper
((
oldOrder
.
PreferPrice
+
refundMoney
).
ToString
())
}
};
flag
=
education_ContractRepository
.
Update
(
newContractFileds
,
new
WhereHelper
(
nameof
(
RB_Education_Contract
.
Id
),
newContract
.
Id
));
#
endregion
//
#region 更新合同课时和应收
//
Dictionary<string, object> oldContractFileds = new Dictionary<string, object>()
//
{
//
{nameof(RB_Education_Contract.FirstClassHours),guest.CompleteHours},
//
{nameof(RB_Education_Contract.FirstCourseFee),order.PreferPrice-refundMoney },
//
{nameof(RB_Education_Contract.FirstMoney),order.PreferPrice-refundMoney },
//
{nameof(RB_Education_Contract.Money), order.PreferPrice-refundMoney},
//
{nameof(RB_Education_Contract.CNYCaps), StringHelper.MoneyToUpper((order.PreferPrice-refundMoney).ToString()) }
//
};
//
flag = education_ContractRepository.Update(oldContractFileds, new WhereHelper(nameof(RB_Education_Contract.Id), oldContract.Id));
//
Dictionary<string, object> newContractFileds = new Dictionary<string, object>()
//
{
//
{nameof(RB_Education_Contract.FirstClassHours), oldGuest.TotalHours+surplus},
//
{nameof(RB_Education_Contract.FirstCourseFee),oldOrder.PreferPrice+refundMoney },
//
{nameof(RB_Education_Contract.FirstMoney),oldOrder.PreferPrice+refundMoney },
//
{nameof(RB_Education_Contract.Money), oldOrder.PreferPrice+refundMoney},
//
{nameof(RB_Education_Contract.CNYCaps), StringHelper.MoneyToUpper((oldOrder.PreferPrice+refundMoney).ToString()) }
//
};
//
flag = education_ContractRepository.Update(newContractFileds, new WhereHelper(nameof(RB_Education_Contract.Id), newContract.Id));
//
#endregion
var
outlay
=
new
OrderChangeFinace
()
{
ChangeType
=
2
,
ClassId
=
order
.
ClassId
,
GuestId
=
guest
.
Id
,
OrderId
=
order
.
OrderId
,
GuestName
=
guest
.
GuestName
,
InCome
=
refundMoney
,
ClassName
=
newClassModel
.
ClassName
,
Class_School_Id
=
newClassModel
.
School_Id
,
ReFinanceId
=
0
,
SName
=
newClassModel
.
SchoolName
,
UserInfo
=
userInfo
};
//生成支出财务单据
var
RelevanceFrId
=
CreateExpenditure
(
outlay
,
out
string
msg2
);
//
var outlay = new OrderChangeFinace()
//
{
//
ChangeType = 2,
//
ClassId = order.ClassId,
//
GuestId = guest.Id,
//
OrderId = order.OrderId,
//
GuestName = guest.GuestName,
//
InCome = refundMoney,
//
ClassName = newClassModel.ClassName,
//
Class_School_Id = newClassModel.School_Id,
//
ReFinanceId = 0,
//
SName = newClassModel.SchoolName,
//
UserInfo = userInfo
//
};
//
//生成支出财务单据
//
var RelevanceFrId = CreateExpenditure(outlay, out string msg2);
var
income
=
new
OrderChangeFinace
()
{
ChangeType
=
2
,
ClassId
=
oldOrder
.
ClassId
,
GuestId
=
guest
.
Id
,
OrderId
=
oldOrder
.
OrderId
,
GuestName
=
guest
.
GuestName
,
InCome
=
refundMoney
,
ClassName
=
oldClassModel
.
ClassName
,
Class_School_Id
=
oldClassModel
.
School_Id
,
ReFinanceId
=
RelevanceFrId
,
SName
=
oldClassModel
.
SchoolName
,
UserInfo
=
userInfo
};
//生成收入财务单据
CreateInCome
(
income
,
out
string
msg
);
}
//
var income = new OrderChangeFinace()
//
{
//
ChangeType = 2,
//
ClassId = oldOrder.ClassId,
//
GuestId = guest.Id,
//
OrderId = oldOrder.OrderId,
//
GuestName = guest.GuestName,
//
InCome = refundMoney,
//
ClassName = oldClassModel.ClassName,
//
Class_School_Id = oldClassModel.School_Id,
//
ReFinanceId = RelevanceFrId,
//
SName = oldClassModel.SchoolName,
//
UserInfo = userInfo
//
};
//
//生成收入财务单据
//
CreateInCome(income, out string msg);
//
}
return
flag
;
}
}
...
...
Edu.Repository/EduTask/RB_Student_LeaveRepository.cs
View file @
7602e62f
...
...
@@ -196,542 +196,10 @@ namespace Edu.Repository.EduTask
}
if
(
classCheckList
!=
null
&&
classCheckList
.
Any
())
{
var
orderModel
=
orderRepository
.
GetEntity
(
orderGuestList
.
FirstOrDefault
().
OrderId
);
var
classModel
=
classRepository
.
GetEntity
<
RB_Class_ViewModel
>(
model
.
ClassId
);
var
sellerInfo
=
accountRepository
.
GetAccountListExtRepository
(
new
Model
.
ViewModel
.
User
.
RB_Account_ViewModel
{
Id
=
orderModel
.
EnterID
,
Group_Id
=
model
.
Group_Id
}).
FirstOrDefault
();
//UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
flag
=
AddClassCheckModule
(
classCheckList
,
timeList
,
orderGuestList
,
orderModel
,
classModel
,
sellerInfo
);
//flag = classCheckRepository.StudentCheckRepository(classCheckList,1);
}
}
return
flag
;
}
/// <summary>
/// 新增签到
/// </summary>
/// <param name="Ids"></param>
/// <param name="DropOutRemark"></param>
/// <returns></returns>
public
virtual
bool
AddClassCheckModule
(
List
<
RB_Class_Check_ViewModel
>
list
,
List
<
RB_Class_Time_ViewModel
>
timeList
,
List
<
RB_Order_Guest_ViewModel
>
orderGuestList
,
RB_Order
orderModel
,
RB_Class_ViewModel
classModel
,
Model
.
ViewModel
.
User
.
RB_Account_ViewModel
sellerInfo
)
{
//写日志
bool
flag
=
true
;
foreach
(
var
item
in
list
)
{
//基础课时分钟数
var
BasicMinutes
=
0
;
BasicMinutes
=
class_ConfigRepository
.
GetClassMinutesRepository
(
item
.
ClassId
);
var
timeModel
=
timeList
.
Where
(
x
=>
x
.
ClassTimeId
==
item
.
ClassTimeId
).
FirstOrDefault
();
if
(
flag
)
{
var
guestModel
=
orderGuestList
.
Where
(
x
=>
x
.
Id
==
item
.
OrderGuestId
).
FirstOrDefault
();
item
.
CurrentDeductionHours
=
timeModel
?.
TimeHour
??
0
;
decimal
currentDeductionHours
=
item
.
CurrentDeductionHours
;
if
(
item
.
CheckStatus
==
2
)
{
currentDeductionHours
=
0
;
}
if
(
item
.
ClassCheckId
>
0
)
{
Dictionary
<
string
,
object
>
fileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Class_Check_ViewModel
.
CheckStatus
),
item
.
CheckStatus
},
{
nameof
(
RB_Class_Check_ViewModel
.
StudyNum
),
item
.
StudyNum
},
{
nameof
(
RB_Class_Check_ViewModel
.
CurrentDeductionHours
),
currentDeductionHours
},
};
List
<
WhereHelper
>
wheres
=
new
List
<
WhereHelper
>()
{
new
WhereHelper
(
nameof
(
RB_Class_Check_ViewModel
.
ClassCheckId
),
item
.
ClassCheckId
)
};
flag
=
classCheckRepository
.
Update
(
fileds
,
wheres
);
}
else
{
item
.
CurrentDeductionHours
=
currentDeductionHours
;
item
.
MakeUpStatus
=
1
;
var
newId
=
classCheckRepository
.
Insert
(
item
);
item
.
ClassCheckId
=
newId
;
flag
=
newId
>
0
;
}
var
oldModel
=
classCheckRepository
.
GetGuestFinishMinutesRepository
(
item
.
OrderGuestId
.
ToString
(),
ClassCheckId
:
item
.
ClassCheckId
)?.
FirstOrDefault
();
if
(
flag
)
{
//更新学员完成课时
var
completeHours
=
(
oldModel
?.
FinishClassHours
??
0
)
+
currentDeductionHours
;
Dictionary
<
string
,
object
>
orderFileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Order_Guest_ViewModel
.
CompleteHours
),
completeHours
}
};
string
LogContent
=
""
;
var
shenyuHours
=
guestModel
.
ValidClassHours
-
completeHours
;
//已上课时>=有效课时,如果是,修改学员状态为停课,并且备注“有效课时消耗完毕,系统自动停课”
if
(
completeHours
>
guestModel
.
ValidClassHours
)
{
orderFileds
.
Add
(
nameof
(
RB_Order_Guest_ViewModel
.
GuestState
),(
int
)
GuestStateEnum
.
StopClasses
);
orderFileds
.
Add
(
nameof
(
RB_Order_Guest_ViewModel
.
ChangeEffectTime
),
DateTime
.
Now
);
orderFileds
.
Add
(
nameof
(
RB_Order_Guest_ViewModel
.
DropOutRemark
),
"有效课时消耗完毕,系统自动停课"
);
LogContent
=
guestModel
.
GuestName
+
"有效课时消耗完毕,系统自动停课!"
;
// var orderModel = orderRepository.GetEntity(guestModel.OrderId);
var
shengyuMoney
=
orderModel
.
PreferPrice
-
orderModel
.
Income
+
orderModel
.
Refund
-
orderModel
.
PlatformTax
-
orderModel
.
DiscountMoney
-
orderModel
.
LessPrice
;
// var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
// var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
#
region
欠费提醒(销售)
var
queryTargetWorkId
=
accountRepository
.
GetWorkUserIdRepository
(
orderModel
.
EnterID
);
if
(!
string
.
IsNullOrEmpty
(
queryTargetWorkId
))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var
path
=
$"/sale/myOrder?OrderId=
{
guestModel
.
OrderId
}
"
;
path
=
HttpUtility
.
UrlEncode
(
path
);
string
markdownContent
=
$"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>当前状态:<font color='warning'>停课</font>\n>关联单号:
{
guestModel
.
OrderId
}
\n>\n>待收金额:<font color='warning'>¥
{
shengyuMoney
.
ToString
(
"0.00"
)}
</font>\n>停课理由:费用不足,系统自动触发停课限制\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
=
queryTargetWorkId
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
}
#
endregion
#
region
欠费提醒(管理者)
var
queryNotifyManager
=
accountRepository
.
GetWorkUserIdByDictRepository
(
"Push_Arrears"
);
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'>停课</font>\n>关联单号:
{
guestModel
.
OrderId
}
(
{
sellerInfo
.
AccountName
}
)\n>\n>待收金额:<font color='warning'>¥
{
shengyuMoney
.
ToString
(
"0.00"
)}
</font>\n>停课理由:费用不足,系统自动触发停课限制\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
});
}
#
endregion
}
else
if
(
guestModel
.
TotalHours
>
guestModel
.
ValidClassHours
&&
shenyuHours
<
12
)
{
// var orderModel = orderRepository.GetEntity(guestModel.OrderId);
var
shengyuMoney
=
orderModel
.
PreferPrice
-
orderModel
.
Income
+
orderModel
.
Refund
-
orderModel
.
PlatformTax
-
orderModel
.
DiscountMoney
-
orderModel
.
LessPrice
;
// var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
// var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
#
region
即将欠费提醒(销售)
var
queryTargetWorkId
=
accountRepository
.
GetWorkUserIdRepository
(
orderModel
.
EnterID
);
if
(!
string
.
IsNullOrEmpty
(
queryTargetWorkId
))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
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>关联单号:
{
guestModel
.
OrderId
}
\n>\n>待收金额:<font color='warning'>¥
{
shengyuMoney
.
ToString
(
"0.00"
)}
</font>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
=
queryTargetWorkId
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
}
#
endregion
#
region
即将欠费提醒(管理者)
var
queryNotifyManager
=
accountRepository
.
GetWorkUserIdByDictRepository
(
"Push_Arrears"
);
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>关联单号:
{
guestModel
.
OrderId
}
(
{
sellerInfo
.
AccountName
}
)\n>\n>待收金额:<font color='warning'>¥
{
shengyuMoney
.
ToString
(
"0.00"
)}
</font>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
});
}
#
endregion
}
else
if
(
guestModel
.
TotalHours
==
guestModel
.
ValidClassHours
&&
shenyuHours
<
12
&&
shenyuHours
>
0
)
{
// var orderModel = orderRepository.GetEntity(guestModel.OrderId);
var
shengyuMoney
=
orderModel
.
PreferPrice
-
orderModel
.
Income
+
orderModel
.
Refund
-
orderModel
.
PlatformTax
-
orderModel
.
DiscountMoney
-
orderModel
.
LessPrice
;
// var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
// var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
#
region
即将结课提醒
(
销售端
)
var
queryTargetWorkId
=
accountRepository
.
GetWorkUserIdRepository
(
orderModel
.
EnterID
);
if
(!
string
.
IsNullOrEmpty
(
queryTargetWorkId
))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
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>请点击:[查看详情](
{
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
=
queryTargetWorkId
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
}
#
endregion
#
region
即将结课提醒
(
管理端
)
var
queryNotifyManager
=
accountRepository
.
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
.
AccountName
}
)\n>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
});
}
#
endregion
}
else
if
(
guestModel
.
TotalHours
==
guestModel
.
ValidClassHours
&&
shenyuHours
==
0
)
{
// var orderModel = orderRepository.GetEntity(guestModel.OrderId);
var
shengyuMoney
=
orderModel
.
PreferPrice
-
orderModel
.
Income
+
orderModel
.
Refund
-
orderModel
.
PlatformTax
-
orderModel
.
DiscountMoney
-
orderModel
.
LessPrice
;
// var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
// var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
#
region
即将结课提醒
(
销售端
)
var
queryTargetWorkId
=
accountRepository
.
GetWorkUserIdRepository
(
orderModel
.
EnterID
);
if
(!
string
.
IsNullOrEmpty
(
queryTargetWorkId
))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
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>请点击:[查看详情](
{
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
=
queryTargetWorkId
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
}
#
endregion
#
region
即将结课提醒
(
销售端
)
var
queryNotifyManager
=
accountRepository
.
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
.
AccountName
}
)\n>\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
});
}
#
endregion
}
if
(
item
.
CheckStatus
==
1
)
{
#
region
通知缺勤信息
var
param
=
new
RB_Class_Plan_ViewModel
()
{
ClassTimeId
=
item
.
ClassTimeId
};
var
planModel
=
class_PlanRepository
.
GetClassPlanListExtRepository
(
param
).
FirstOrDefault
();
var
queryNotifyManager
=
accountRepository
.
GetWorkUserIdByDictRepository
(
"Push_Absence"
);
if
(
queryNotifyManager
!=
null
&&
queryNotifyManager
.
Count
>
0
)
{
queryNotifyManager
.
ForEach
(
x
=>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var
path
=
$"/stuMan/studentManage?OrderId=
{
guestModel
.
OrderId
}
"
;
path
=
HttpUtility
.
UrlEncode
(
path
);
string
markdownContent
=
$"`缺勤通知` 学员缺勤信息告知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>缺勤时间:<font color='warning'>
{
planModel
.
ClassDate
}
(
{
planModel
.
StartTime
}
-
{
planModel
.
EndTime
}
)</font>\n>关联单号:
{
guestModel
.
OrderId
}
\n>班级名称:<font>
{
planModel
.
ClassName
}
</font>\n>带班老师:<font>
{
planModel
.
TeacherName
}
</font>\n>请点击:[查看详情](
{
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
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
});
}
#
endregion
}
flag
=
order_GuestRepository
.
Update
(
orderFileds
,
new
WhereHelper
(
nameof
(
RB_Order_Guest_ViewModel
.
Id
),
item
.
OrderGuestId
));
if
(
flag
&&
!
string
.
IsNullOrEmpty
(
LogContent
))
{
user_ChangeLogRepository
.
Insert
(
new
Model
.
Entity
.
Log
.
RB_User_ChangeLog
()
{
Id
=
0
,
Type
=
3
,
CreateBy
=
item
.
CreateBy
,
CreateTime
=
DateTime
.
Now
,
Group_Id
=
item
.
Group_Id
,
LogContent
=
LogContent
,
School_Id
=
item
.
School_Id
,
SourceId
=
guestModel
.
Id
});
}
//缺勤和请假
if
(
item
.
CheckStatus
==
1
||
item
.
CheckStatus
==
2
)
{
flag
=
CalcGuestHoursModule
(
guestModel
,
item
,
orderModel
,
classModel
,
sellerInfo
);
}
}
}
}
return
flag
;
}
/// <summary>
/// 计算学员缺课课时
/// </summary>
/// <param name="guestModel"></param>
/// <param name="checkModel"></param>
/// <returns></returns>
public
bool
CalcGuestHoursModule
(
RB_Order_Guest
guestModel
,
RB_Class_Check_ViewModel
checkModel
,
RB_Order
orderModel
,
RB_Class_ViewModel
classModel
,
Model
.
ViewModel
.
User
.
RB_Account_ViewModel
sellerInfo
)
{
bool
flag
=
true
;
if
(
guestModel
.
GuestState
==
GuestStateEnum
.
Normal
)
{
decimal
NoFinishHours
=
0
;
//获取以前所有签到列表【倒叙】
var
checkList
=
classCheckRepository
.
GetClassCheckListRepository
(
new
RB_Class_Check_ViewModel
()
{
ClassId
=
checkModel
.
ClassId
,
OrderGuestId
=
checkModel
.
OrderGuestId
,
EndDate
=
Common
.
ConvertHelper
.
FormatDate
(
checkModel
.
ClassDate
)
}).
OrderByDescending
(
qitem
=>
qitem
.
ClassDate
).
ToList
();
for
(
var
i
=
0
;
i
<
checkList
.
Count
;
i
++)
{
if
((
checkList
[
i
].
CheckStatus
==
1
)
&&
(
checkList
[
i
].
MakeUpStatus
==
3
||
checkList
[
i
].
MakeUpStatus
==
4
||
checkList
[
i
].
MakeUpStatus
==
1
))
{
NoFinishHours
+=
checkList
[
i
].
CurrentDeductionHours
;
}
else
{
break
;
}
}
Dictionary
<
string
,
object
>
fileds
=
new
Dictionary
<
string
,
object
>();
Dictionary
<
string
,
object
>
checkFileds
=
new
Dictionary
<
string
,
object
>();
//缺勤课时超过12课时更新学员状态为【停课】
if
(
NoFinishHours
>=
Common
.
Config
.
AbsentHours
)
{
fileds
.
Add
(
nameof
(
RB_Order_Guest_ViewModel
.
GuestState
),
(
int
)
GuestStateEnum
.
StopClasses
);
checkFileds
.
Add
(
nameof
(
RB_Class_Check_ViewModel
.
IsAbsentHours
),
1
);
checkFileds
.
Add
(
nameof
(
RB_Class_Check_ViewModel
.
MakeUpStatus
),
4
);
var
shengyuMoney
=
orderModel
.
PreferPrice
-
orderModel
.
Income
+
orderModel
.
Refund
-
orderModel
.
PlatformTax
-
orderModel
.
DiscountMoney
-
orderModel
.
LessPrice
;
#
region
欠费提醒(销售)
var
queryTargetWorkId
=
accountRepository
.
GetWorkUserIdRepository
(
orderModel
.
EnterID
);
if
(!
string
.
IsNullOrEmpty
(
queryTargetWorkId
))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var
path
=
$"/sale/myOrder?OrderId=
{
guestModel
.
OrderId
}
"
;
path
=
HttpUtility
.
UrlEncode
(
path
);
string
markdownContent
=
$"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:
{
guestModel
.
GuestName
}
(
{
guestModel
.
Mobile
}
)\n>当前状态:<font color='warning'>停课</font>\n>关联单号:
{
guestModel
.
OrderId
}
\n>\n>待收金额:<font color='warning'>¥
{
shengyuMoney
.
ToString
(
"0.00"
)}
</font>\n>停课理由:连续缺课超过
{
Config
.
AbsentHours
}
课时,系统自动停课\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
=
queryTargetWorkId
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
}
#
endregion
#
region
欠费提醒(管理者)
var
queryNotifyManager
=
accountRepository
.
GetWorkUserIdByDictRepository
(
"Push_Arrears"
);
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'>停课</font>\n>关联单号:
{
guestModel
.
OrderId
}
(
{
sellerInfo
.
AccountName
}
)\n>\n>待收金额:<font color='warning'>¥
{
shengyuMoney
.
ToString
(
"0.00"
)}
</font>\n>停课理由:连续缺课超过
{
Config
.
AbsentHours
}
课时,系统自动停课\n>班级名称:<font>
{
classModel
.
ClassName
}
</font>\n>请点击:[查看详情](
{
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
};
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>()
{
modelWork
};
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
});
}
#
endregion
}
if
(
fileds
!=
null
&&
fileds
.
Count
>
0
&&
checkFileds
!=
null
&&
checkFileds
.
Count
>
0
)
{
List
<
WhereHelper
>
wheres
=
new
List
<
WhereHelper
>()
{
new
WhereHelper
(
nameof
(
RB_Order_Guest_ViewModel
.
Id
),
guestModel
.
Id
),
};
flag
=
order_GuestRepository
.
Update
(
fileds
,
wheres
);
List
<
WhereHelper
>
checkWheres
=
new
List
<
WhereHelper
>()
{
new
WhereHelper
(
nameof
(
RB_Class_Check_ViewModel
.
ClassCheckId
),
checkModel
.
ClassCheckId
),
};
flag
=
classCheckRepository
.
Update
(
checkFileds
,
checkWheres
);
}
if
(
flag
&&
checkModel
.
CheckStatus
==
1
&&
checkModel
.
IsUpdateMakeUp
!=
1
)
{
//请假的 因为不扣课时, 无法进补课
flag
=
student_MakeupRepository
.
SetStudentMakeUpRepository
(
new
RB_Student_Makeup
()
{
Id
=
0
,
ClassCheckId
=
checkModel
.
ClassCheckId
,
ClassDate
=
checkModel
.
ClassDate
,
ClassId
=
checkModel
.
ClassId
,
CreateBy
=
checkModel
.
CreateBy
,
CreateTime
=
checkModel
.
CreateTime
,
Group_Id
=
checkModel
.
Group_Id
,
MakeUpStatus
=
1
,
OrderGuestId
=
checkModel
.
OrderGuestId
});
}
}
return
flag
;
}
}
}
Edu.Repository/Grade/RB_Class_CheckRepository.cs
View file @
7602e62f
...
...
@@ -2,10 +2,21 @@
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
Edu.Common.Enum.Course
;
using
Edu.Common.Enum.System
;
using
System.Web
;
using
Edu.Model.Entity.Grade
;
using
Edu.Model.ViewModel.Course
;
using
Edu.Model.ViewModel.Grade
;
using
Edu.Model.ViewModel.Sell
;
using
Spire.Pdf.Exporting.XPS.Schema
;
using
VT.FW.DB
;
using
VT.FW.DB.Dapper
;
using
Edu.Model.Entity.Sell
;
using
Edu.Model.Entity.User
;
using
Edu.Model.ViewModel.User
;
using
Org.BouncyCastle.Bcpg.OpenPgp
;
using
Castle.Core.Internal
;
namespace
Edu.Repository.Grade
{
...
...
@@ -214,6 +225,8 @@ WHERE A.`Status`=0 ");
return
Get
<
GuestFinishMinute_ViewModel
>(
builder
.
ToString
()).
ToList
();
}
/// <summary>
/// 班级签到完成学习分钟数
/// </summary>
...
...
@@ -929,5 +942,645 @@ WHERE 1=1 AND A.Status=0 {1} ", builderMakeUp.ToString(), builderWhere.ToString
}
#
endregion
/// <summary>
/// 学员签到
/// </summary>
/// <param name="list">学员信息</param>
/// <param name="CheckType">1-班课,2-约课</param>
/// <returns></returns>
public
bool
StudentCheckRepository
(
List
<
RB_Class_Check_ViewModel
>
list
,
int
CheckType
)
{
bool
flag
=
false
;
List
<
RB_Order_Guest_Extend
>
guestList
=
new
List
<
RB_Order_Guest_Extend
>();
List
<
RB_Order_ViewModel
>
orderList
=
new
List
<
RB_Order_ViewModel
>();
List
<
RB_Class_Time_ViewModel
>
classTimeList
=
new
List
<
RB_Class_Time_ViewModel
>();
List
<
Common
.
Message
.
PushMessageModel
>
pushList
=
new
List
<
Common
.
Message
.
PushMessageModel
>();
List
<
RB_Class_Check_ViewModel
>
oldCheckList
=
new
List
<
RB_Class_Check_ViewModel
>();
List
<
RB_Class_ViewModel
>
classList
=
new
List
<
RB_Class_ViewModel
>();
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
());
if
(!
string
.
IsNullOrEmpty
(
orderGuestIds
))
{
guestList
=
GetOrderGuestListRepository
(
orderGuestIds
);
oldCheckList
=
GetClassCheckList
(
new
RB_Class_Check_ViewModel
()
{
QOrderGuestIds
=
orderGuestIds
});
}
if
(
guestList
!=
null
&&
guestList
.
Count
>
0
)
{
string
orderIds
=
string
.
Join
(
","
,
guestList
.
Select
(
qitem
=>
qitem
.
OrderId
).
Distinct
());
if
(!
string
.
IsNullOrEmpty
(
orderIds
))
{
orderList
=
GetOrderListRepository
(
orderIds
);
}
}
if
(
orderList
!=
null
&&
orderList
.
Count
>
0
)
{
string
enterIDs
=
string
.
Join
(
","
,
orderList
.
Select
(
qitem
=>
qitem
.
EnterID
).
Distinct
());
if
(!
string
.
IsNullOrEmpty
(
enterIDs
))
{
empList
=
GetEmployeeListRepository
(
enterIDs
);
}
}
string
classTimeIds
=
string
.
Join
(
","
,
list
.
Select
(
qitem
=>
qitem
.
ClassTimeId
).
Distinct
());
if
(!
string
.
IsNullOrEmpty
(
classTimeIds
))
{
classTimeList
=
GetClassTimeListRepository
(
classTimeIds
);
}
string
classIds
=
string
.
Join
(
","
,
list
.
Select
(
qitem
=>
qitem
.
ClassId
).
Distinct
());
if
(!
string
.
IsNullOrEmpty
(
classIds
))
{
classList
=
GetClassListRepository
(
classIds
);
}
}
foreach
(
var
item
in
list
)
{
var
guestModel
=
guestList
?.
FirstOrDefault
(
qitem
=>
qitem
.
Id
==
item
.
OrderGuestId
)
??
new
RB_Order_Guest_Extend
();
item
.
CurrentDeductionHours
=
classTimeList
?.
FirstOrDefault
(
qitem
=>
qitem
.
ClassTimeId
==
item
.
ClassTimeId
)?.
TimeHour
??
2
;
decimal
currentDeductionHours
=
item
.
CurrentDeductionHours
;
//if (item.CheckStatus == 2)
//{
// currentDeductionHours = 0;
//}
if
(
item
.
ClassCheckId
>
0
)
{
Dictionary
<
string
,
object
>
fileds
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Class_Check_ViewModel
.
CheckStatus
),
item
.
CheckStatus
},
{
nameof
(
RB_Class_Check_ViewModel
.
StudyNum
),
item
.
StudyNum
},
{
nameof
(
RB_Class_Check_ViewModel
.
CurrentDeductionHours
),
currentDeductionHours
},
};
List
<
WhereHelper
>
wheres
=
new
List
<
WhereHelper
>()
{
new
WhereHelper
(
nameof
(
RB_Class_Check_ViewModel
.
ClassCheckId
),
item
.
ClassCheckId
)
};
flag
=
base
.
Update
(
fileds
,
wheres
);
}
else
{
item
.
CurrentDeductionHours
=
currentDeductionHours
;
item
.
MakeUpStatus
=
1
;
var
newId
=
base
.
Insert
(
item
);
item
.
ClassCheckId
=
newId
;
flag
=
newId
>
0
;
}
var
guestOldCheckList
=
oldCheckList
?.
Where
(
qitem
=>
qitem
.
OrderGuestId
==
item
.
OrderGuestId
&&
qitem
.
ClassTimeId
!=
item
.
ClassTimeId
)?.
ToList
()
??
new
List
<
RB_Class_Check_ViewModel
>();
decimal
guestOldFinishHours
=
0
;
if
(
guestOldCheckList
!=
null
&&
guestOldCheckList
.
Count
>
0
)
{
guestOldFinishHours
=
guestOldCheckList
.
Sum
(
qitem
=>
qitem
.
CurrentDeductionHours
);
}
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
)
{
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
()
{
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
=>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
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
}
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
()
{
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
=>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
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
}
if
(
item
.
CheckStatus
==
1
)
{
#
region
通知缺勤信息
var
queryNotifyManager
=
GetWorkUserIdByDictRepository
(
"Push_Absence"
);
if
(
queryNotifyManager
!=
null
&&
queryNotifyManager
.
Count
>
0
)
{
queryNotifyManager
.
ForEach
(
x
=>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
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
)
{
guestSql
+=
","
;
}
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
;
if
(
flag
&&
!
string
.
IsNullOrEmpty
(
LogContent
))
{
AddUserChangeLogRepository
(
new
Model
.
Entity
.
Log
.
RB_User_ChangeLog
()
{
Id
=
0
,
Type
=
3
,
CreateBy
=
item
.
CreateBy
,
CreateTime
=
DateTime
.
Now
,
Group_Id
=
item
.
Group_Id
,
LogContent
=
LogContent
,
School_Id
=
item
.
School_Id
,
SourceId
=
guestModel
.
Id
});
}
//缺勤和请假
if
(
item
.
CheckStatus
==
1
||
item
.
CheckStatus
==
2
)
{
flag
=
CalcGuestHoursRepository
(
guestModel
,
item
);
}
#
region
B2B
同业推送
if
(
orderModel
!=
null
&&
orderModel
.
CustomerId
>
0
)
{
//最后5个课时做处理
if
(
completeHours
>
guestModel
.
ValidClassHours
)
{
//已停课
AddStudentNoticeRepository
(
new
Model
.
Entity
.
Log
.
RB_B2B_StudentNotice
()
{
Id
=
0
,
Type
=
3
,
StudentId
=
guestModel
.
Id
,
CustomerId
=
orderModel
.
CustomerId
,
Title
=
"停课通知"
,
Content
=
"学员"
+
guestModel
.
GuestName
+
" 有效课时消耗完毕,已自动停课,关联单号:"
+
guestModel
.
OrderId
+
"!"
,
IsLook
=
2
,
Status
=
0
,
CreateBy
=
item
.
CreateBy
,
CreateTime
=
DateTime
.
Now
,
Group_Id
=
item
.
Group_Id
,
UpdateTime
=
DateTime
.
Now
});
}
else
if
(
guestModel
.
TotalHours
>
guestModel
.
ValidClassHours
&&
shenyuHours
<=
5
)
{
//即将欠费
AddStudentNoticeRepository
(
new
Model
.
Entity
.
Log
.
RB_B2B_StudentNotice
()
{
Id
=
0
,
Type
=
1
,
StudentId
=
guestModel
.
Id
,
CustomerId
=
orderModel
.
CustomerId
,
Title
=
"欠费预警"
,
Content
=
"学员"
+
guestModel
.
GuestName
+
" 即将欠费,剩余课时"
+
shenyuHours
+
",关联单号:"
+
guestModel
.
OrderId
+
"!"
,
IsLook
=
2
,
Status
=
0
,
CreateBy
=
item
.
CreateBy
,
CreateTime
=
DateTime
.
Now
,
Group_Id
=
item
.
Group_Id
,
UpdateTime
=
DateTime
.
Now
});
}
else
if
(
guestModel
.
TotalHours
==
guestModel
.
ValidClassHours
&&
shenyuHours
<=
5
&&
shenyuHours
>=
0
)
{
//即将结课
AddStudentNoticeRepository
(
new
Model
.
Entity
.
Log
.
RB_B2B_StudentNotice
()
{
Id
=
0
,
Type
=
2
,
StudentId
=
guestModel
.
Id
,
CustomerId
=
orderModel
.
CustomerId
,
Title
=
"结课预警"
,
Content
=
"学员"
+
guestModel
.
GuestName
+
" 即将结课,剩余课时"
+
shenyuHours
+
",关联单号:"
+
guestModel
.
OrderId
+
"!"
,
IsLook
=
2
,
Status
=
0
,
CreateBy
=
item
.
CreateBy
,
CreateTime
=
DateTime
.
Now
,
Group_Id
=
item
.
Group_Id
,
UpdateTime
=
DateTime
.
Now
});
}
else
if
(
guestModel
.
TotalHours
==
guestModel
.
ValidClassHours
&&
shenyuHours
==
0
)
{
//已经结课
AddStudentNoticeRepository
(
new
Model
.
Entity
.
Log
.
RB_B2B_StudentNotice
()
{
Id
=
0
,
Type
=
4
,
StudentId
=
guestModel
.
Id
,
CustomerId
=
orderModel
.
CustomerId
,
Title
=
"结课通知"
,
Content
=
"学员"
+
guestModel
.
GuestName
+
" 已结课,关联单号:"
+
guestModel
.
OrderId
+
"!"
,
IsLook
=
2
,
Status
=
0
,
CreateBy
=
item
.
CreateBy
,
CreateTime
=
DateTime
.
Now
,
Group_Id
=
item
.
Group_Id
,
UpdateTime
=
DateTime
.
Now
});
}
}
#
endregion
}
}
if
(
pushList
!=
null
&&
pushList
.
Count
>
0
)
{
new
Common
.
Message
.
MessageHelper
().
SendMessage
(
pushList
);
}
return
flag
;
}
/// <summary>
/// 新增日志
/// </summary>
/// <param name="model"></param>
private
void
AddUserChangeLogRepository
(
Model
.
Entity
.
Log
.
RB_User_ChangeLog
model
)
{
string
sql
=
" INSERT INTO RB_User_ChangeLog(Type,CreateBy,CreateTime,Group_Id,LogContent,School_Id,SourceId) "
;
sql
+=
" VALUES(@Type,@CreateBy,@CreateTime,@Group_Id,@LogContent,@School_Id,@SourceId) "
;
base
.
Execute
(
sql
,
model
);
}
/// <summary>
/// 新增学生消息通知
/// </summary>
/// <param name="model"></param>
private
void
AddStudentNoticeRepository
(
Model
.
Entity
.
Log
.
RB_B2B_StudentNotice
model
)
{
string
sql
=
" INSERT INTO RB_B2B_StudentNotice(Type,StudentId,CustomerId,Title,Content,IsLook,Status,CreateBy,CreateTime,Group_Id,UpdateTime) "
;
sql
+=
" VALUES(@Type,@StudentId,@CustomerId,@Title,@Content,@IsLook,@Status,@CreateBy,@CreateTime,@Group_Id,@UpdateTime) "
;
base
.
Execute
(
sql
,
model
);
}
/// <summary>
/// 计算学员缺课课时
/// </summary>
/// <param name="guestModel"></param>
/// <param name="checkModel"></param>
/// <returns></returns>
public
bool
CalcGuestHoursRepository
(
RB_Order_Guest
guestModel
,
RB_Class_Check_ViewModel
checkModel
)
{
bool
flag
=
true
;
//if (guestModel.GuestState == GuestStateEnum.Normal)
//{
// decimal NoFinishHours = 0;
// //获取以前所有签到列表【倒叙】
// var checkList = GetClassCheckListRepository(new RB_Class_Check_ViewModel()
// {
// ClassId = checkModel.ClassId,
// OrderGuestId = checkModel.OrderGuestId,
// EndDate = Common.ConvertHelper.FormatDate(checkModel.ClassDate)
// }).OrderByDescending(qitem => qitem.ClassDate).ToList();
// for (var i = 0; i < checkList.Count; i++)
// {
// if ((checkList[i].CheckStatus == 1) && (checkList[i].MakeUpStatus == 3 || checkList[i].MakeUpStatus == 4 || checkList[i].MakeUpStatus == 1))
// {
// NoFinishHours += checkList[i].CurrentDeductionHours;
// }
// else
// {
// break;
// }
// }
// Dictionary<string, object> fileds = new Dictionary<string, object>();
// Dictionary<string, object> checkFileds = new Dictionary<string, object>();
// //缺勤课时超过12课时更新学员状态为【停课】
// if (NoFinishHours >= Common.Config.AbsentHours)
// {
// fileds.Add(nameof(RB_Order_Guest_ViewModel.GuestState), (int)GuestStateEnum.StopClasses);
// checkFileds.Add(nameof(RB_Class_Check_ViewModel.IsAbsentHours), 1);
// checkFileds.Add(nameof(RB_Class_Check_ViewModel.MakeUpStatus), 4);
// var orderModel = orderRepository.GetEntity(guestModel.OrderId);
// var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
// var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
// var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
// #region 欠费提醒(销售)
// var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(orderModel.EnterID);
// if (!string.IsNullOrEmpty(queryTargetWorkId))
// {
// // 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
// var path = $"/sale/myOrder?OrderId={guestModel.OrderId}";
// path = HttpUtility.UrlEncode(path);
// string markdownContent = $"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>当前状态:<font color='warning'>停课</font>\n>关联单号:{guestModel.OrderId}\n>\n>待收金额:<font color='warning'>¥{shengyuMoney:0.00}</font>\n>停课理由:连续缺课超过{Config.AbsentHours}课时,系统自动停课\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({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 = queryTargetWorkId
// };
// List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
// new Common.Message.MessageHelper().SendMessage(pushList);
// }
// #endregion
// #region 欠费提醒(管理者)
// var queryNotifyManager = GetWorkUserIdByDictRepository("Push_Arrears");
// 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'>停课</font>\n>关联单号:{guestModel.OrderId}({sellerInfo.AccountName})\n>\n>待收金额:<font color='warning'>¥{shengyuMoney:0.00}</font>\n>停课理由:连续缺课超过{Common.Config.AbsentHours}课时,系统自动停课\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
// };
// List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
// new Common.Message.MessageHelper().SendMessage(pushList);
// });
// }
// #endregion
// }
// if (fileds != null && fileds.Count > 0 && checkFileds != null && checkFileds.Count > 0)
// {
// List<WhereHelper> wheres = new List<WhereHelper>()
// {
// new WhereHelper (nameof(RB_Order_Guest_ViewModel.Id),guestModel.Id),
// };
// flag = order_GuestRepository.Update(fileds, wheres);
// List<WhereHelper> checkWheres = new List<WhereHelper>()
// {
// new WhereHelper (nameof(RB_Class_Check_ViewModel.ClassCheckId),checkModel.ClassCheckId),
// };
// flag = classCheckRepository.Update(checkFileds, checkWheres);
// }
// if (flag && checkModel.CheckStatus == 1 && checkModel.IsUpdateMakeUp != 1)
// {
// //请假的 因为不扣课时, 无法进补课
// flag = student_MakeupRepository.SetStudentMakeUpRepository(new RB_Student_Makeup()
// {
// Id = 0,
// ClassCheckId = checkModel.ClassCheckId,
// ClassDate = checkModel.ClassDate,
// ClassId = checkModel.ClassId,
// CreateBy = checkModel.CreateBy,
// CreateTime = checkModel.CreateTime,
// Group_Id = checkModel.Group_Id,
// MakeUpStatus = 1,
// OrderGuestId = checkModel.OrderGuestId
// });
// }
//}
return
flag
;
}
/// <summary>
/// 根据订单编号获取订单列表
/// </summary>
/// <param name="OrderIds"></param>
/// <returns></returns>
public
List
<
RB_Order_ViewModel
>
GetOrderListRepository
(
string
OrderIds
)
{
StringBuilder
builder
=
new
StringBuilder
();
builder
.
AppendFormat
(
@"
SELECT A.*
FROM RB_Order AS A
WHERE 1=1 AND A.OrderId IN({0})
"
,
OrderIds
);
return
base
.
Get
<
RB_Order_ViewModel
>(
builder
.
ToString
()).
ToList
();
}
/// <summary>
/// 获取学员列表
/// </summary>
/// <param name="GuestIds"></param>
/// <returns></returns>
public
List
<
RB_Order_Guest_Extend
>
GetOrderGuestListRepository
(
string
GuestIds
)
{
StringBuilder
builder
=
new
StringBuilder
();
builder
.
AppendFormat
(
@"
SELECT A.*
FROM rb_order_guest AS A
WHERE 1=1 AND A.Id IN({0})
"
,
GuestIds
);
return
base
.
Get
<
RB_Order_Guest_Extend
>(
builder
.
ToString
()).
ToList
();
}
/// <summary>
/// 获取上课时段
/// </summary>
/// <param name="ClassTimeIds"></param>
/// <returns></returns>
public
List
<
RB_Class_Time_ViewModel
>
GetClassTimeListRepository
(
string
ClassTimeIds
)
{
StringBuilder
builder
=
new
StringBuilder
();
builder
.
AppendFormat
(
@"
SELECT A.*
FROM RB_Class_Time AS A
WHERE 1=1 AND A.ClassTimeId IN({0})
"
,
ClassTimeIds
);
return
Get
<
RB_Class_Time_ViewModel
>(
builder
.
ToString
()).
ToList
();
}
/// <summary>
/// 获取班级列表
/// </summary>
/// <param name="ClassIds"></param>
/// <returns></returns>
public
List
<
RB_Class_ViewModel
>
GetClassListRepository
(
string
ClassIds
)
{
StringBuilder
builder
=
new
StringBuilder
();
builder
.
AppendFormat
(
@"
SELECT A.*
FROM RB_Class AS A
WHERE 1=1 AND A.ClassId IN({0})
"
,
ClassIds
);
return
Get
<
RB_Class_ViewModel
>(
builder
.
ToString
()).
ToList
();
}
/// <summary>
/// 获取指定人员的企业微信ID
/// </summary>
/// <param name="id">教师编号</param>
/// <returns></returns>
public
List
<
RB_Employee_Extend
>
GetEmployeeListRepository
(
string
Ids
)
{
string
sql
=
$"SELECT EmployeeId,EmName,WorkUserId FROM RB_Employee WHERE EmployeeId IN(
{
Ids
}
)"
;
return
base
.
Get
<
RB_Employee_Extend
>(
sql
).
ToList
();
}
/// <summary>
/// 获取指定DictKey的推送人员信息
/// </summary>
/// <param name="departmentIds"></param>
/// <returns></returns>
public
List
<
RB_Account_ViewModel
>
GetWorkUserIdByDictRepository
(
string
dictKey
)
{
string
sql
=
$"SELECT Id,WorkUserId FROM rb_account a where EXISTS(select DictKey from rb_dictvalue where DictKey='
{
dictKey
}
' and FIND_IN_SET(a.Id,Content)>0) and WorkUserId is not null"
;
return
Get
<
RB_Account_ViewModel
>(
sql
).
ToList
();
}
}
}
Edu.WebApi/Controllers/Applet/AppletCenterController.cs
View file @
7602e62f
...
...
@@ -122,7 +122,7 @@ namespace Edu.WebApi.Controllers.Applet
{
State
=
1
,
TotalHours
=
guestModel
?.
TotalHours
??
0
,
CompleteHours
=
CompleteHours
,
CompleteHours
,
MakeUpHours
=
guestModel
?.
MakeUpHours
??
0
,
AbsenceNum
=
guestModel
?.
AbsenceNum
??
0
,
LeaveNum
=
guestModel
?.
LeaveNum
??
0
,
...
...
Edu.WebApi/Controllers/Course/ClassController.cs
View file @
7602e62f
...
...
@@ -58,7 +58,9 @@ namespace Edu.WebApi.Controllers.Course
CourseName
=
base
.
ParmJObj
.
GetStringValue
(
"CourseName"
),
ClassNo
=
base
.
ParmJObj
.
GetStringValue
(
"ClassNo"
),
CourseSubject
=
base
.
ParmJObj
.
GetInt
(
"CourseSubject"
),
ClassScrollType
=
base
.
ParmJObj
.
GetInt
(
"ClassScrollType"
,
1
)
ClassScrollType
=
base
.
ParmJObj
.
GetInt
(
"ClassScrollType"
,
1
),
StartTime
=
base
.
ParmJObj
.
GetStringValue
(
"StartTime"
),
EndTime
=
base
.
ParmJObj
.
GetStringValue
(
"EndTime"
),
};
query
.
Group_Id
=
base
.
UserInfo
.
Group_Id
;
List
<
object
>
result
=
new
List
<
object
>();
...
...
@@ -581,16 +583,6 @@ namespace Edu.WebApi.Controllers.Course
return
ApiResult
.
Success
(
data
:
data
);
}
/// <summary>
/// 初始化数据
/// </summary>
/// <returns></returns>
[
HttpPost
]
public
ApiResult
InitData
()
{
bool
flag
=
classModule
.
InitDataModule
();
return
flag
?
ApiResult
.
Success
()
:
ApiResult
.
Failed
();
}
/// <summary>
/// 修改班级状态
...
...
@@ -1244,27 +1236,6 @@ namespace Edu.WebApi.Controllers.Course
EndDate
=
list
.
FirstOrDefault
().
ClassDate
.
ToString
(
"yyyy-MM-dd HH:mm:ss"
),
ClassTimeId
=
list
.
FirstOrDefault
().
ClassTimeId
,
});
#
region
验证是否存在学员编号
if
(
list
.
Count
==
1
)
{
if
(
list
[
0
].
OrderGuestId
==
0
)
{
var
guestId
=
classModule
.
GetStudentOrderGuestIdByClassTimeIDModule
(
list
[
0
].
StuId
,
list
[
0
].
ClassTimeId
);
if
(
guestId
==
0
)
{
return
ApiResult
.
ParamIsNull
(
message
:
"当前课程不是你的上课内容,请联系前台"
);
}
else
{
list
[
0
].
OrderGuestId
=
guestId
;
}
}
if
(
checkLogList
.
Where
(
x
=>
x
.
OrderGuestId
==
list
[
0
].
OrderGuestId
&&
x
.
CheckStatus
==
list
[
0
].
CheckStatus
).
Any
())
{
return
ApiResult
.
Success
(
message
:
"check_repeat"
);
}
}
#
endregion
if
(
list
==
null
||
!
list
.
Any
())
{
...
...
@@ -1284,23 +1255,6 @@ namespace Edu.WebApi.Controllers.Course
}
#
endregion
//获取班级的学员信息
var
orderGuestList
=
classModule
.
GetOrderGuestListModule
(
new
RB_Order_Guest_ViewModel
{
Group_Id
=
groupId
,
ClassId
=
list
.
FirstOrDefault
().
ClassId
,
QEffectStatus
=
1
});
//判断今天有课没有
var
planList
=
classModule
.
GetClassPlanEntityModule
(
new
RB_Class_Plan_ViewModel
{
Group_Id
=
groupId
,
ClassId
=
list
.
FirstOrDefault
().
ClassId
,
QClassDateStr
=
Common
.
ConvertHelper
.
FormatDate
(
list
.
FirstOrDefault
().
ClassDate
),
});
if
(
planList
==
null
||
!
planList
.
Any
())
{
return
ApiResult
.
Failed
(
"今日无课程,无须签到"
);
}
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
.
OrderGuestId
==
item
.
OrderGuestId
)?.
FirstOrDefault
();
...
...
@@ -1311,7 +1265,6 @@ namespace Edu.WebApi.Controllers.Course
item
.
CreateTime
=
signModel
.
CreateTime
;
item
.
CreateBy
=
Uid
;
item
.
Status
=
0
;
#
region
验证缺席
补课是否已处理
if
(
signModel
.
CheckStatus
==
1
&&
item
.
CheckStatus
!=
1
)
{
...
...
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