Commit 6d2c0ba9 authored by liudong1993's avatar liudong1993

活动提成

parent c450e290
...@@ -19,5 +19,15 @@ namespace Mall.Model.Extend.Education ...@@ -19,5 +19,15 @@ namespace Mall.Model.Extend.Education
/// 订单ids /// 订单ids
/// </summary> /// </summary>
public string OrderIds { get; set; } public string OrderIds { get; set; }
/// <summary>
/// 电商用户ids
/// </summary>
public string DSUserIds { get; set; }
/// <summary>
/// 是否已参加过活动 1是
/// </summary>
public bool IsJoin { get; set; }
} }
} }
...@@ -2274,9 +2274,9 @@ namespace Mall.Module.Education ...@@ -2274,9 +2274,9 @@ namespace Mall.Module.Education
/// <param name="month"></param> /// <param name="month"></param>
/// <param name="userInfo"></param> /// <param name="userInfo"></param>
/// <returns></returns> /// <returns></returns>
public string SetActivityCommissionInfo(string month, UserInfo userInfo) public string SetActivityCommissionInfo(string month, int createBy, UserInfo userInfo)
{ {
int GroupId = 100000;// 暂时固定 并没有授权相关的表; int GroupId = 100000;// 暂时固定 并没有授权相关的表(跟到春姐 写死);
//首先查询该月是否已创建 //首先查询该月是否已创建
var plist = activity_PeriodsRepository.GetList(new RB_Activity_Periods_ViewModel() { Group_Id = GroupId, Periods = month }); var plist = activity_PeriodsRepository.GetList(new RB_Activity_Periods_ViewModel() { Group_Id = GroupId, Periods = month });
if (plist.Any()) if (plist.Any())
...@@ -2286,13 +2286,173 @@ namespace Mall.Module.Education ...@@ -2286,13 +2286,173 @@ namespace Mall.Module.Education
string EDate = Convert.ToDateTime(month + "-01").AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd"); string EDate = Convert.ToDateTime(month + "-01").AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd");
//查询小于等于 当前月的所有 款已平 有销售 小程序来的 未发放的订单 //查询小于等于 当前月的所有 款已平 有销售 小程序来的 未发放的订单
var orderList = education_ConsultRepository.GetActivityCanSendCommissionList(EDate, userInfo.MallBaseId); var orderList = education_ConsultRepository.GetActivityCanSendCommissionList(EDate, userInfo.MallBaseId);
if (orderList.Any()) { if (orderList.Any())
{
//查询配置信息
var configModel = activity_ConfigRepository.GetList(new RB_Activity_Config_ViewModel() { Group_Id = GroupId }).FirstOrDefault();
if (configModel == null) { return "配置不存在,请核实后再试"; }
//查询所有的用户
string userIds = string.Join(",", orderList.Select(x => x.EduUserId).Distinct());
var ulist = RB_AccountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Group_Id = GroupId, QIds = userIds });
//查询用户是否已参加过活动,参加过得 需要排除
string dsuserIds = string.Join(",", orderList.Select(x => x.UserId).Distinct());
var DSUList = activity_PeriodsDetailRepository.GetList(new RB_Activity_PeriodsDetail_ViewModel() { Group_Id = GroupId, DSUserIds = dsuserIds });
//判断当前订单里 是否有用户重复的, 有重复的 需要备注重复的 , 并且应发提成=0 (需注意的) 一个用户只能产生一次提成;
List<RB_Activity_PeriodsDetail_ViewModel> DetailList = new List<RB_Activity_PeriodsDetail_ViewModel>();
//开始写入提成记录表
foreach (var item in orderList)
{
bool IsJoin = false;
string Remark = "";
if (DSUList.Where(x => x.DSUserId == item.UserId).Any()) {
IsJoin = true;//已经参加过了
var dsModel = DSUList.Where(x => x.DSUserId == item.UserId).FirstOrDefault();
Remark = "该用户已在 " + dsModel.ActivityTime.ToString("yyyy-MM-dd") + " " + dsModel.ActivityName + " 活动中参与并已发提成";
}
decimal CommissionMoney = 0;
if (IsJoin == false) {
//计算提成金额
if (configModel.Type == 1)
{
CommissionMoney = configModel.CommissionMoney;
}
else {
//百分比 根据实收金额来计算 手续费要算
CommissionMoney = Math.Round(item.Money * configModel.CommissionMoney / 100, 2, MidpointRounding.AwayFromZero);
}
}
var umodel = ulist.Where(x => x.Id == item.EduUserId).FirstOrDefault();
DetailList.Add(new RB_Activity_PeriodsDetail_ViewModel()
{
Id = 0,
ActivityId = item.ActivityId,
ActivityName = item.ActivityName,
ActivityTime = item.StartTime.Value,
CMoney = configModel.CommissionMoney,
CType = configModel.Type,
CommissionMoney = CommissionMoney,
Depart_Id = umodel.Dept_Id,
DSUserId = item.UserId,
UserId = item.EduUserId,
DSUserName = item.LinkMan,
Group_Id = GroupId,
OrderId = item.Id,
PeriodId = 0,
Periods = item.StartTime.Value.ToString("yyyy-MM"),
Remark = Remark,
School_Id = umodel.School_Id,
IsJoin = IsJoin
});
}
//再来排除 当期重复的用户
if (DetailList.Any()) {
if (DetailList.Where(x=>x.IsJoin== false).Select(x => x.DSUserId).Distinct().Count() != DetailList.Where(x=>x.IsJoin==false).Count()) {
List<int> DsUserIdList = DetailList.Where(x => x.IsJoin == false).Select(x => x.DSUserId).Distinct().ToList();
foreach (var DsUserId in DsUserIdList) {
var dlist = DetailList.Where(x => x.DSUserId == DsUserId && x.IsJoin == false).ToList();
if (dlist.Count() > 1) {
var ddlist = dlist.OrderByDescending(x => x.CommissionMoney).ThenBy(x => x.ActivityTime).ToList();
//第一条保留提成 其他的不提成
var ddmodel = ddlist.FirstOrDefault();
int Num = 1;
foreach (var qitem in ddlist) {
if (Num > 1)
{
decimal cmoney = qitem.CommissionMoney;
qitem.Remark = "该用户当期多次参与活动,提成在 " + ddmodel.ActivityTime.ToString("yyyy-MM-dd") + " " + ddmodel.ActivityName + " 活动中,原提成金额:" + cmoney;
qitem.CommissionMoney = 0;
}
Num++;
}
}
}
}
}
#region 开始正式写入
var trans = activity_PeriodsRepository.DbTransaction;
try
{
//首先创建期数
int PeriodsId = activity_PeriodsRepository.Insert(new Model.Entity.Education.RB_Activity_Periods()
{
Id = 0,
CreateBy = createBy,
CreateTime = DateTime.Now,
Financials = "",
Group_Id = GroupId,
Name = month + "期提成",
Periods = month,
SumPrice = 0
}, trans);
if (PeriodsId > 0) {
foreach (var item in DetailList) {
item.PeriodId = PeriodsId;
activity_PeriodsDetailRepository.Insert(item, trans);
}
#region 计算累计应发
decimal SumPrice = DetailList.Sum(x => x.CommissionMoney);
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Activity_Periods_ViewModel.SumPrice),SumPrice}
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_Activity_Periods_ViewModel.Id),
FiledValue=PeriodsId,
OperatorEnum=OperatorEnum.Equal
}
};
activity_PeriodsRepository.Update(keyValues, wheres, trans);
#endregion
}
activity_PeriodsRepository.DBSession.Commit();
#region 更新订单提成
foreach (var item in DetailList) {
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Education_Consult_Extend.IsCommission),2},
{ nameof(RB_Education_Consult_Extend.CommissionPrice),item.CommissionMoney},
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_Education_Consult_Extend.Id),
FiledValue=item.OrderId,
OperatorEnum=OperatorEnum.Equal
}
};
education_ConsultRepository.Update(keyValues, wheres);
}
#endregion
}
catch (Exception ex)
{
LogHelper.Write(ex, "SetActivityCommissionInfo");
activity_PeriodsRepository.DBSession.Rollback();
return "出错了,请联系管理员";
}
#endregion
}
else {
return "当月没有可发放提成的订单";
} }
return ""; return "";
} }
/// <summary>
/// 获取活动累计的提成
/// </summary>
/// <param name="activityId"></param>
/// <param name="groupId"></param>
/// <returns></returns>
public decimal GetActivityCommission(int activityId, int groupId)
{
return activity_PeriodsDetailRepository.GetActivityCommission(activityId, groupId);
}
#endregion #endregion
} }
} }
...@@ -50,11 +50,28 @@ namespace Mall.Repository.Education ...@@ -50,11 +50,28 @@ namespace Mall.Repository.Education
{ {
where += $@" and r.{nameof(RB_Activity_PeriodsDetail_ViewModel.OrderId)} in({demodel.OrderIds})"; where += $@" and r.{nameof(RB_Activity_PeriodsDetail_ViewModel.OrderId)} in({demodel.OrderIds})";
} }
if (!string.IsNullOrEmpty(demodel.DSUserIds))
{
where += $@" and r.{nameof(RB_Activity_PeriodsDetail_ViewModel.DSUserId)} in({demodel.DSUserIds})";
}
string sql = $@" select r.* from RB_Activity_PeriodsDetail r where {where} order by r.Id asc"; string sql = $@" select r.* from RB_Activity_PeriodsDetail r where {where} order by r.Id asc";
return Get<RB_Activity_PeriodsDetail_ViewModel>(sql).ToList(); return Get<RB_Activity_PeriodsDetail_ViewModel>(sql).ToList();
} }
/// <summary>
/// 获取活动累计发放提成
/// </summary>
/// <param name="activityId"></param>
/// <param name="groupId"></param>
/// <returns></returns>
public decimal GetActivityCommission(int activityId, int groupId)
{
string sql = $@"SELECT SUM(CommissionMoney) AS CommissionMoney FROM rb_activity_periodsdetail WHERE ActivityId ={activityId} and Group_Id ={groupId}";
var obj = ExecuteScalar(sql);
return obj == null ? 0 : Convert.ToInt32(obj);
}
} }
} }
...@@ -671,7 +671,7 @@ WHERE 1=1 ...@@ -671,7 +671,7 @@ WHERE 1=1
{ {
string sql = $@"SELECT c.*,a.ActivityName,a.StartTime,a.EndTime FROM rb_education_consult c string sql = $@"SELECT c.*,a.ActivityName,a.StartTime,a.EndTime FROM rb_education_consult c
INNER JOIN rb_education_activity a on c.ActivityId = a.Id INNER JOIN rb_education_activity a on c.ActivityId = a.Id
WHERE c.`Status`=0 and a.`Status`=0 and c.MallBaseId ={mallBaseId} and a.EndTime <='{month} 23:59:59' and c.OrderStatus =1 and c.UserId >0 WHERE c.`Status`=0 and a.`Status`=0 and c.MallBaseId ={mallBaseId} and a.StartTime <='{month} 23:59:59' and a.EndTime <='{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}' and c.OrderStatus =1 and c.UserId >0 and c.EduUserId >0
and c.IsRollCall =2 and c.IsCommission <>2 and (c.Income + c.PlatformTax - c.RefundPrice) =c.Money"; and c.IsRollCall =2 and c.IsCommission <>2 and (c.Income + c.PlatformTax - c.RefundPrice) =c.Money";
return Get<RB_Education_Consult_Extend>(sql).ToList(); return Get<RB_Education_Consult_Extend>(sql).ToList();
......
...@@ -21,6 +21,7 @@ using Mall.Model.Extend.Finance; ...@@ -21,6 +21,7 @@ using Mall.Model.Extend.Finance;
using Mall.Common.Enum.Finance; using Mall.Common.Enum.Finance;
using Mall.Common; using Mall.Common;
using Mall.Common.Enum.Education; using Mall.Common.Enum.Education;
using Microsoft.AspNetCore.Authorization;
namespace Mall.WebApi.Controllers.Education namespace Mall.WebApi.Controllers.Education
{ {
...@@ -2344,6 +2345,8 @@ namespace Mall.WebApi.Controllers.Education ...@@ -2344,6 +2345,8 @@ namespace Mall.WebApi.Controllers.Education
x.CoverImg, x.CoverImg,
x.Income, x.Income,
x.RefundPrice, x.RefundPrice,
x.IsCommission,
x.CommissionPrice,
PlatformTax = x.PlatformTax,//(x.PaymentWay == OrderPaymentTypeEnum.OnlinePayment ? ((x.Status == 0 && x.OrderStatus == 1) ? (Math.Round((Convert.ToDecimal(Config.SettlementRate) / 100) * (Convert.ToDecimal(x.Money)), 2, MidpointRounding.AwayFromZero)) : 0) : x.PlatformTax), PlatformTax = x.PlatformTax,//(x.PaymentWay == OrderPaymentTypeEnum.OnlinePayment ? ((x.Status == 0 && x.OrderStatus == 1) ? (Math.Round((Convert.ToDecimal(Config.SettlementRate) / 100) * (Convert.ToDecimal(x.Money)), 2, MidpointRounding.AwayFromZero)) : 0) : x.PlatformTax),
DueInMoney = x.Money - x.Income - x.PlatformTax - x.RefundPrice, DueInMoney = x.Money - x.Income - x.PlatformTax - x.RefundPrice,
PaymentWay = x.PaymentWay.HasValue ? (int)x.PaymentWay : 0, PaymentWay = x.PaymentWay.HasValue ? (int)x.PaymentWay : 0,
...@@ -2422,6 +2425,8 @@ namespace Mall.WebApi.Controllers.Education ...@@ -2422,6 +2425,8 @@ namespace Mall.WebApi.Controllers.Education
x.OrderStatus, x.OrderStatus,
x.EduSellName, x.EduSellName,
x.EduUserId, x.EduUserId,
x.IsCommission,
x.CommissionPrice,
PaymentTime = x.PaymentTime.HasValue ? x.PaymentTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", PaymentTime = x.PaymentTime.HasValue ? x.PaymentTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : "",
CreateTime = x.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), CreateTime = x.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
x.OrderNo, x.OrderNo,
...@@ -2964,12 +2969,15 @@ namespace Mall.WebApi.Controllers.Education ...@@ -2964,12 +2969,15 @@ namespace Mall.WebApi.Controllers.Education
OtherPayActual = (financeList != null && financeList.Any()) ? financeList.Where(x => x.Type == WFTempLateClassEnum.OUT && x.ReFinanceId2 <= 0).Sum(x => x.PayMoney ?? 0) : 0; OtherPayActual = (financeList != null && financeList.Any()) ? financeList.Where(x => x.Type == WFTempLateClassEnum.OUT && x.ReFinanceId2 <= 0).Sum(x => x.PayMoney ?? 0) : 0;
//活动提成
decimal ActivityCommission = activityModule.GetActivityCommission(activityId: Id, groupId: 100000);
//利润 //利润
decimal ProfitActual = 0;//实际利润 decimal ProfitActual = 0;//实际利润
decimal ProfitNow = 0;//当前利润 decimal ProfitNow = 0;//当前利润
ProfitActual = (IncomeActual + OtherIncomeActual) - PayReceive - OtherPayReceive; ProfitActual = (IncomeActual + OtherIncomeActual) - PayReceive - OtherPayReceive - ActivityCommission;
ProfitNow = (IncomeActual + OtherIncomeActual) - PayActual - OtherPayActual; ProfitNow = (IncomeActual + OtherIncomeActual) - PayActual - OtherPayActual - ActivityCommission;
//提成 //提成
//decimal SaleCommission = (orderList != null && orderList.Any()) ? orderList.Where(x => x.IsCommissionGive == 1).Sum(x => x.CommissionMoney) : 0; ;//销售提成 //decimal SaleCommission = (orderList != null && orderList.Any()) ? orderList.Where(x => x.IsCommissionGive == 1).Sum(x => x.CommissionMoney) : 0; ;//销售提成
...@@ -3026,6 +3034,7 @@ namespace Mall.WebApi.Controllers.Education ...@@ -3026,6 +3034,7 @@ namespace Mall.WebApi.Controllers.Education
PayActual, PayActual,
ProfitActual, ProfitActual,
ProfitNow, ProfitNow,
ActivityCommission,
FiniceReciveList = recultFiniceList.Where(t => t.Type == WFTempLateClassEnum.IN && t.ReFinanceId2 > 0),//活动报名收入 FiniceReciveList = recultFiniceList.Where(t => t.Type == WFTempLateClassEnum.IN && t.ReFinanceId2 > 0),//活动报名收入
FinicePayList = recultFiniceList.Where(t => t.Type == WFTempLateClassEnum.OUT && t.ReFinanceId2 > 0),//活动报名支出 FinicePayList = recultFiniceList.Where(t => t.Type == WFTempLateClassEnum.OUT && t.ReFinanceId2 > 0),//活动报名支出
OtherFiniceReciveList = recultFiniceList.Where(t => t.Type == WFTempLateClassEnum.IN && t.ReFinanceId2 <= 0),//其他收入 OtherFiniceReciveList = recultFiniceList.Where(t => t.Type == WFTempLateClassEnum.IN && t.ReFinanceId2 <= 0),//其他收入
...@@ -3613,15 +3622,22 @@ namespace Mall.WebApi.Controllers.Education ...@@ -3613,15 +3622,22 @@ namespace Mall.WebApi.Controllers.Education
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
[AllowAnonymous]
public ApiResult SetActivityCommissionInfo() public ApiResult SetActivityCommissionInfo()
{ {
var userInfo = base.UserInfo; var userInfo = base.UserInfo;
userInfo.MallBaseId = RequestParm.MallBaseId;
JObject parms = JObject.Parse(RequestParm.msg.ToString()); JObject parms = JObject.Parse(RequestParm.msg.ToString());
string Month = parms.GetStringValue("Month");//月份 string Month = parms.GetStringValue("Month");//月份
int CreateBy = parms.GetInt("CreateBy", 0);//创建人
if (string.IsNullOrEmpty(Month)) if (string.IsNullOrEmpty(Month))
{ {
return ApiResult.ParamIsNull(); return ApiResult.ParamIsNull();
} }
if (CreateBy <= 0)
{
return ApiResult.ParamIsNull("请传递创建人");
}
try try
{ {
Month = Convert.ToDateTime(Month + "-01").ToString("yyyy-MM"); Month = Convert.ToDateTime(Month + "-01").ToString("yyyy-MM");
...@@ -3631,7 +3647,7 @@ namespace Mall.WebApi.Controllers.Education ...@@ -3631,7 +3647,7 @@ namespace Mall.WebApi.Controllers.Education
return ApiResult.Failed("日期格式有误"); return ApiResult.Failed("日期格式有误");
} }
string msg = activityModule.SetActivityCommissionInfo(Month, userInfo); string msg = activityModule.SetActivityCommissionInfo(Month, CreateBy, userInfo);
if (msg == "") if (msg == "")
{ {
return ApiResult.Success(); return ApiResult.Success();
......
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