Commit 6d2c0ba9 authored by liudong1993's avatar liudong1993

活动提成

parent c450e290
......@@ -19,5 +19,15 @@ namespace Mall.Model.Extend.Education
/// 订单ids
/// </summary>
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
/// <param name="month"></param>
/// <param name="userInfo"></param>
/// <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 });
if (plist.Any())
......@@ -2286,13 +2286,173 @@ namespace Mall.Module.Education
string EDate = Convert.ToDateTime(month + "-01").AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd");
//查询小于等于 当前月的所有 款已平 有销售 小程序来的 未发放的订单
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 "";
}
/// <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
}
}
......@@ -50,11 +50,28 @@ namespace Mall.Repository.Education
{
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";
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
{
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
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";
return Get<RB_Education_Consult_Extend>(sql).ToList();
......
......@@ -21,6 +21,7 @@ using Mall.Model.Extend.Finance;
using Mall.Common.Enum.Finance;
using Mall.Common;
using Mall.Common.Enum.Education;
using Microsoft.AspNetCore.Authorization;
namespace Mall.WebApi.Controllers.Education
{
......@@ -2344,6 +2345,8 @@ namespace Mall.WebApi.Controllers.Education
x.CoverImg,
x.Income,
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),
DueInMoney = x.Money - x.Income - x.PlatformTax - x.RefundPrice,
PaymentWay = x.PaymentWay.HasValue ? (int)x.PaymentWay : 0,
......@@ -2422,6 +2425,8 @@ namespace Mall.WebApi.Controllers.Education
x.OrderStatus,
x.EduSellName,
x.EduUserId,
x.IsCommission,
x.CommissionPrice,
PaymentTime = x.PaymentTime.HasValue ? x.PaymentTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : "",
CreateTime = x.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
x.OrderNo,
......@@ -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;
//活动提成
decimal ActivityCommission = activityModule.GetActivityCommission(activityId: Id, groupId: 100000);
//利润
decimal ProfitActual = 0;//实际利润
decimal ProfitNow = 0;//当前利润
ProfitActual = (IncomeActual + OtherIncomeActual) - PayReceive - OtherPayReceive;
ProfitNow = (IncomeActual + OtherIncomeActual) - PayActual - OtherPayActual;
ProfitActual = (IncomeActual + OtherIncomeActual) - PayReceive - OtherPayReceive - ActivityCommission;
ProfitNow = (IncomeActual + OtherIncomeActual) - PayActual - OtherPayActual - ActivityCommission;
//提成
//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
PayActual,
ProfitActual,
ProfitNow,
ActivityCommission,
FiniceReciveList = recultFiniceList.Where(t => t.Type == WFTempLateClassEnum.IN && 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),//其他收入
......@@ -3613,15 +3622,22 @@ namespace Mall.WebApi.Controllers.Education
/// </summary>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ApiResult SetActivityCommissionInfo()
{
var userInfo = base.UserInfo;
userInfo.MallBaseId = RequestParm.MallBaseId;
JObject parms = JObject.Parse(RequestParm.msg.ToString());
string Month = parms.GetStringValue("Month");//月份
int CreateBy = parms.GetInt("CreateBy", 0);//创建人
if (string.IsNullOrEmpty(Month))
{
return ApiResult.ParamIsNull();
}
if (CreateBy <= 0)
{
return ApiResult.ParamIsNull("请传递创建人");
}
try
{
Month = Convert.ToDateTime(Month + "-01").ToString("yyyy-MM");
......@@ -3631,7 +3647,7 @@ namespace Mall.WebApi.Controllers.Education
return ApiResult.Failed("日期格式有误");
}
string msg = activityModule.SetActivityCommissionInfo(Month, userInfo);
string msg = activityModule.SetActivityCommissionInfo(Month, CreateBy, userInfo);
if (msg == "")
{
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