Commit d4b48d86 authored by 黄奎's avatar 黄奎

Merge branch 'master' of http://gitlab.oytour.com/Kui2/education

parents 6bd40f2f c1d93321
......@@ -47,5 +47,10 @@ namespace Edu.Common.Enum.Course
/// </summary>
[EnumField("甲鹤小程序")]
MallApplet = 8,
/// <summary>
/// 教育同行B2B报名
/// </summary>
[EnumField("教育同行B2B")]
EduB2BClient = 9,
}
}
......@@ -30,6 +30,8 @@ namespace Edu.Education
new QuarzHelper().RevenueReportTimer().GetAwaiter().GetResult();
new QuarzHelper().WeXinMediumTimer().GetAwaiter().GetResult();//企业微信定时上传文件 2021-08-09
new QuarzHelper().WeXinChannelTimer().GetAwaiter().GetResult();//企业微信定时渠道码更新 2021-08-20
//new QuarzHelper().EduB2BOrderCancelTimer().GetAwaiter().GetResult();//教育同业订单超时取消
//new QuarzHelper().EduB2BOrderCommissionTimer().GetAwaiter().GetResult();//教育同业订单返佣
new QuarzHelper().CheckPerparingTimer().GetAwaiter().GetResult();
}
......
......@@ -243,6 +243,72 @@ namespace Edu.Education.Helper
await scheduler.ScheduleJob(job, trigger);
}
/// <summary>
/// 教育同业B2B订单超时取消
/// </summary>
/// <returns></returns>
public async Task EduB2BOrderCancelTimer()
{
string CronExpression2 = "0 */1 * * * ?";//每1分钟执行的一次
NameValueCollection props = new NameValueCollection
{
{ "quartz.serializer.type", "binary" }
};
StdSchedulerFactory factory = new StdSchedulerFactory(props);
IScheduler scheduler = await factory.GetScheduler();
await scheduler.Start();
IJobDetail job = JobBuilder.Create<EduB2BOrderCancel>()
.WithIdentity("job8", "group8")
.Build();
//ITrigger trigger = TriggerBuilder.Create()
// .WithIdentity("trigger7", "group7")
// .StartNow()
// .WithSimpleSchedule(x => x
// .WithIntervalInHours(1)
// .RepeatForever())
// .Build();
ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
.WithIdentity("trigger8", "group8")
.WithCronSchedule(CronExpression2)
.Build();
await scheduler.ScheduleJob(job, trigger);
}
/// <summary>
/// 教育同业B2B订单佣金发放
/// </summary>
/// <returns></returns>
public async Task EduB2BOrderCommissionTimer()
{
string CronExpression2 = "0 1 0 25 * ?";//每月25号 凌晨12.1分执行
NameValueCollection props = new NameValueCollection
{
{ "quartz.serializer.type", "binary" }
};
StdSchedulerFactory factory = new StdSchedulerFactory(props);
IScheduler scheduler = await factory.GetScheduler();
await scheduler.Start();
IJobDetail job = JobBuilder.Create<EduB2BOrderCommission>()
.WithIdentity("job9", "group9")
.Build();
//ITrigger trigger = TriggerBuilder.Create()
// .WithIdentity("trigger7", "group7")
// .StartNow()
// .WithSimpleSchedule(x => x
// .WithIntervalInHours(1)
// .RepeatForever())
// .Build();
ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
.WithIdentity("trigger9", "group9")
.WithCronSchedule(CronExpression2)
.Build();
await scheduler.ScheduleJob(job, trigger);
}
}
......@@ -506,6 +572,58 @@ namespace Edu.Education.Helper
}
}
/// <summary>
/// 教育同业B2B订单超时取消
/// </summary>
public class EduB2BOrderCancel : IJob
{
/// <summary>
/// 这里是作业调度每次定时执行方法
/// </summary>
/// <param name="context"></param>
public Task Execute(IJobExecutionContext context)
{
try
{
LogHelper.Write("开始执行教育同业订单超时取消....");
EduB2BOrderModule EduB2BOrderModule = new EduB2BOrderModule();
EduB2BOrderModule.SetEduB2BOrderCancel();
LogHelper.Write("教育同业订单超时取消更新结束");
}
catch (Exception ex)
{
LogHelper.Write(ex, "EduB2BOrderCancel");
}
return null;
}
}
/// <summary>
/// 教育同业B2B订单佣金发放
/// </summary>
public class EduB2BOrderCommission : IJob
{
/// <summary>
/// 这里是作业调度每次定时执行方法
/// </summary>
/// <param name="context"></param>
public Task Execute(IJobExecutionContext context)
{
try
{
LogHelper.Write("开始执行教育同业订单返佣....");
EduB2BOrderModule EduB2BOrderModule = new EduB2BOrderModule();
EduB2BOrderModule.SetEduB2BOrderCommission();
LogHelper.Write("教育同业订单返佣更新结束");
}
catch (Exception ex)
{
LogHelper.Write(ex, "EduB2BOrderCommission");
}
return null;
}
}
public class UpdageHistoryOrderCommissionHelper
{
......
......@@ -97,6 +97,16 @@ namespace Edu.Model.Entity.Customer
/// </summary>
public decimal Client_Balance { get; set; }
/// <summary>
/// 累计佣金
/// </summary>
public decimal TotalCommission { get; set; }
/// <summary>
/// 可提现佣金
/// </summary>
public decimal CommissionWithdrawal { get; set; }
/// <summary>
/// 账号
/// </summary>
......
......@@ -73,5 +73,10 @@ namespace Edu.Model.ViewModel.Customer
/// 状态(1-正式客户,2-非正式客户,3-未通过客户,4-黑名单客户)
/// </summary>
public int QCustomerState { get; set; }
/// <summary>
/// 同业Ids
/// </summary>
public string CustomerIds { get; set; }
}
}
......@@ -2369,7 +2369,7 @@ namespace Edu.Module.Course
b2B_StudentNoticeRepository.Insert(new Model.Entity.Log.RB_B2B_StudentNotice()
{
Id = 0,
Type = 3,
Type = 1,
StudentId = guestModel.Id,
CustomerId = 1,
Title = "欠费预警",
......@@ -2388,7 +2388,7 @@ namespace Edu.Module.Course
b2B_StudentNoticeRepository.Insert(new Model.Entity.Log.RB_B2B_StudentNotice()
{
Id = 0,
Type = 3,
Type = 2,
StudentId = guestModel.Id,
CustomerId = 1,
Title = "结课预警",
......@@ -2407,7 +2407,7 @@ namespace Edu.Module.Course
b2B_StudentNoticeRepository.Insert(new Model.Entity.Log.RB_B2B_StudentNotice()
{
Id = 0,
Type = 3,
Type = 4,
StudentId = guestModel.Id,
CustomerId = 1,
Title = "结课通知",
......
using System;
using System.Collections.Generic;
using System.Linq;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.Customer;
using Edu.Model.ViewModel.Sell;
using Edu.Repository.Customer;
using Edu.Repository.Log;
using Edu.Repository.Sell;
using Edu.Repository.User;
using VT.FW.DB;
namespace Edu.Module.Course
{
/// <summary>
/// 教育同业订单处理类
/// </summary>
public class EduB2BOrderModule
{
/// <summary>
/// 订单
/// </summary>
private readonly RB_OrderRepository orderRepository = new RB_OrderRepository();
/// <summary>
/// 用户日志
/// </summary>
private readonly RB_User_ChangeLogRepository changeLogRepository = new RB_User_ChangeLogRepository();
/// <summary>
/// 同业
/// </summary>
private readonly RB_CustomerRepository customerRepository = new RB_CustomerRepository();
/// <summary>
/// 同业返佣
/// </summary>
private readonly RB_Customer_BalanceDetailRepository customer_BalanceDetailRepository = new RB_Customer_BalanceDetailRepository();
/// <summary>
/// 集团
/// </summary>
private readonly RB_GroupRepository groupRepository = new RB_GroupRepository();
/// <summary>
/// 更新教育同业订单超时取消
/// </summary>
/// <returns></returns>
public bool SetEduB2BOrderCancel() {
var glist = groupRepository.GetGroupListRepository(new Model.ViewModel.User.RB_Group_ViewModel() { });
foreach (var group in glist) {
int GroupId = group.GId;
//查询此集团下所有超时未付款的教育同业订单
var olist = orderRepository.GetEduB2BTimeoutOrderList(GroupId);
foreach (var item in olist) {
//取消订单
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Order_ViewModel.OrderState), Common.Enum.Course.OrderStateEnum.Cancel}
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_Order_ViewModel.OrderId),
FiledValue = item.OrderId,
OperatorEnum =OperatorEnum.Equal
}
};
bool flag = orderRepository.Update(keyValues, wheres);
if (flag)
{
//记录日志
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 2,
CreateBy = 0,
CreateTime = DateTime.Now,
Group_Id = GroupId,
LogContent = $"同业付款超时自动取消订单【{item.OrderId}】",
School_Id = 0,
SourceId = item.OrderId
});
}
}
}
return true;
}
/// <summary>
/// 更新教育同业订单返佣
/// </summary>
/// <returns></returns>
public bool SetEduB2BOrderCommission()
{
if (DateTime.Now.Day != 25) { return false; }
var glist = groupRepository.GetGroupListRepository(new Model.ViewModel.User.RB_Group_ViewModel() { });
var trans = customerRepository.DbTransaction;
try
{
foreach (var group in glist)
{
int GroupId = group.GId;
string dateStr = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM") + "-01").AddDays(-1).ToString("yyyy-MM-dd");
//获取可发放返佣的订单+返佣列表
var blist = customer_BalanceDetailRepository.GetEduB2BOrderCanSendCommissionList(GroupId, dateStr);
if (blist.Any())
{
var clist = customerRepository.GetCustomerListRepository(new RB_Customer_Extend() { Group_Id = GroupId, CustomerIds = string.Join(",", blist.Select(x => x.CustomerId).Distinct()) });
var olist = orderRepository.GetEduB2BOrderCanSendCommissionList(GroupId, dateStr);
//查询所有的同业
foreach (var item in olist.OrderBy(x => x.OrderId))
{
var bclist = blist.Where(x => x.OrderId == item.OrderId).ToList();
if (bclist.Any())
{
foreach (var qitem in bclist.OrderBy(x => x.Id))
{
var cmodel = clist.Where(x => x.CustomerId == qitem.CustomerId).FirstOrDefault();
cmodel.TotalCommission += qitem.Money;
cmodel.CommissionWithdrawal += qitem.Money;
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Customer_BalanceDetail_ViewModel.BalanceState), 1},
{ nameof(RB_Customer_BalanceDetail_ViewModel.AccountMoney), cmodel.CommissionWithdrawal },
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_Customer_BalanceDetail_ViewModel.Id),
FiledValue = qitem.Id,
OperatorEnum =OperatorEnum.Equal
}
};
customer_BalanceDetailRepository.Update(keyValues, wheres, trans);
}
}
}
//更新所有的同业佣金
foreach (var item in clist)
{
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Customer_Extend.TotalCommission), item.TotalCommission},
{ nameof(RB_Customer_Extend.CommissionWithdrawal), item.CommissionWithdrawal},
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_Customer_Extend.CustomerId),
FiledValue = item.CustomerId,
OperatorEnum =OperatorEnum.Equal
}
};
customerRepository.Update(keyValues, wheres, trans);
}
}
}
customerRepository.DBSession.Commit();
return true;
}
catch (Exception ex)
{
customerRepository.DBSession.Rollback();
LogHelper.Write(ex, "SetEduB2BOrderCommission 定时更新 更新教育同业订单返佣");
return false;
}
}
}
}
......@@ -70,5 +70,66 @@ WHERE 1=1
}
return GetPage<RB_Customer_Extend>(pageIndex, pageSize, out rowsCount, builder.ToString(), parameters).ToList();
}
/// <summary>
/// 获取客户列表..
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="rowsCount"></param>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Customer_Extend> GetCustomerListRepository(RB_Customer_Extend query)
{
var parameters = new DynamicParameters();
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*
FROM RB_Customer AS A
WHERE 1=1
");
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Customer_Extend.Status), (int)DateStateEnum.Normal);
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Customer_Extend.Group_Id), query.Group_Id);
}
if (!string.IsNullOrEmpty(query.CustomerName))
{
builder.AppendFormat(" AND A.{0} LIKE @CustomerName ", nameof(RB_Customer_Extend.CustomerName));
parameters.Add("CustomerName", "%" + query.CustomerName.Trim() + "%");
}
if (!string.IsNullOrEmpty(query.ContactNumber))
{
builder.AppendFormat(" AND A.{0} LIKE @ContactNumber ", nameof(RB_Customer_Extend.ContactNumber));
parameters.Add("ContactNumber", "%" + query.ContactNumber.Trim() + "%");
}
if (query.ApproveState > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Customer_Extend.ApproveState), query.ApproveState);
}
if (query.QCustomerState > 0)
{
switch (query.QCustomerState)
{
//正式客户
case 1: builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Customer_Extend.CustomerState), (int)CustomerStateEnum.Normal); break;
//正式客户
case 2: builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Customer_Extend.CustomerState), (int)CustomerStateEnum.NotActivation); break;
//未通过客户
case 3: builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Customer_Extend.ApproveState), 2); break;
//黑名单
case 4: builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Customer_Extend.CustomerState), (int)CustomerStateEnum.Disable); break;
}
}
if (!string.IsNullOrEmpty(query.CustomerIds))
{
builder.AppendFormat(" AND A.{0} in({1}) ", nameof(RB_Customer_Extend.CustomerId), query.CustomerIds);
}
}
return Get<RB_Customer_Extend>(builder.ToString(), parameters).ToList();
}
}
}
......@@ -54,5 +54,19 @@ WHERE 1=1
}
return GetPage<RB_Customer_BalanceDetail_ViewModel>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList();
}
/// <summary>
/// 获取可发放返佣的列表
/// </summary>
/// <param name="groupId"></param>
/// <param name="dateStr"></param>
/// <returns></returns>
public List<RB_Customer_BalanceDetail_ViewModel> GetEduB2BOrderCanSendCommissionList(int groupId, string dateStr)
{
string sql = $@"SELECT b.* FROM rb_order o
INNER JOIN rb_customer_balancedetail b on o.OrderId = b.OrderId
WHERE o.Group_Id ={groupId} and o.OrderState =1 and o.OrderSource =9 and o.PayState =1 and b.RebateType =1 and b.BalanceType =1 and b.BalanceState =2 and o.PayDate <='{dateStr} 23:59:59' ";
return Get<RB_Customer_BalanceDetail_ViewModel>(sql).ToList();
}
}
}
......@@ -1089,5 +1089,34 @@ ORDER BY {orderBy}
}
#endregion
#region 教育同业
/// <summary>
/// 获取教育同业付款超时订单
/// </summary>
/// <param name="groupId"></param>
/// <returns></returns>
public List<RB_Order_ViewModel> GetEduB2BTimeoutOrderList(int groupId)
{
string sql = $@"SELECT * FROM rb_order WHERE Group_Id ={groupId} and OrderState =1 and OrderSource =9 and IFNULL(PayState,0) <>1 and CreateTime <'{DateTime.Now.AddMinutes(-30).ToString("yyyy-MM-dd HH:mm:ss")}'";
return Get<RB_Order_ViewModel>(sql).ToList();
}
/// <summary>
/// 获取教育同业可返佣订单列表
/// </summary>
/// <param name="groupId"></param>
/// <returns></returns>
public List<RB_Order_ViewModel> GetEduB2BOrderCanSendCommissionList(int groupId, string dateStr)
{
string sql = $@"SELECT o.* FROM rb_order o
INNER JOIN rb_customer_balancedetail b on o.OrderId = b.OrderId
WHERE o.Group_Id ={groupId} and o.OrderState =1 and o.OrderSource =9 and o.PayState =1 and b.RebateType =1 and b.BalanceType =1 and b.BalanceState =2 and o.PayDate <='{dateStr} 23:59:59'
GROUP BY o.OrderId";
return Get<RB_Order_ViewModel>(sql).ToList();
}
#endregion
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment