Commit 04bc5f8f authored by liudong1993's avatar liudong1993

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

parents f90464e3 38ee00de
......@@ -17,10 +17,15 @@ namespace Edu.Model.Entity.Bonus
/// </summary>
public int Id { get; set; }
/// <summary>
/// 关联方案编号
/// </summary>
public int PlanId { get; set; }
/// <summary>
/// 类型(1-市场人员,2-课程顾问)
/// </summary>
public int RewardType { get; set; }
public int PlanType { get; set; }
/// <summary>
/// 年份
......@@ -52,15 +57,17 @@ namespace Edu.Model.Entity.Bonus
/// </summary>
public decimal CurOrderMoney { get; set; }
/// <summary>
/// 抵扣人数
/// 待抵扣金额
/// </summary>
public int DeductionNum { get; set; }
public decimal DeductionMoney { get; set; }
/// <summary>
/// 抵扣金额
/// 已完成抵扣金额
/// </summary>
public decimal DeductionMoney { get; set; }
public decimal FinishDeductionMoney { get; set; }
/// <summary>
/// 创建人
......@@ -96,5 +103,30 @@ namespace Edu.Model.Entity.Bonus
/// 是否达成本月目标(1-是)
/// </summary>
public int IsReach { get; set; }
/// <summary>
/// 基本工资
/// </summary>
public decimal BasicSalary { get; set; }
/// <summary>
/// 开单奖金
/// </summary>
public decimal OpenBonus { get; set; }
/// <summary>
/// 工龄工资
/// </summary>
public decimal WorkAgeSalary { get; set; }
/// <summary>
/// 每5条线索奖金
/// </summary>
public decimal ClueNumSalary { get; set; }
/// <summary>
/// 以前月份的冲抵金额
/// </summary>
public decimal BeforeMoney { get; set; }
}
}
......@@ -14,5 +14,10 @@ namespace Edu.Model.ViewModel.Bonus
/// 人头奖励详情列表
/// </summary>
public List<RB_Personnel_BonusDetail_Extend> DetailList { get; set; }
/// <summary>
/// 是否查询未平账
/// </summary>
public int IsNoBalance { get; set; }
}
}
......@@ -211,5 +211,6 @@ namespace Edu.Model.ViewModel.User
/// 用户角色(1-市场人员,2-课程顾问)
/// </summary>
public UserRoleEnum UserRole { get; set; }
}
}
......@@ -254,5 +254,10 @@ namespace Edu.Model.ViewModel.User
/// 客户需求名称
/// </summary>
public string StuNeedsName { get; set; }
/// <summary>
/// 线索条数
/// </summary>
public int ClueCount { get; set; }
}
}
\ No newline at end of file
......@@ -9,6 +9,7 @@ using Edu.Model.Entity.Bonus;
using Edu.Model.ViewModel.Bonus;
using Edu.Common.Plugin;
using VT.FW.DB;
using Edu.Repository.User;
namespace Edu.Module.Course
{
......@@ -47,26 +48,30 @@ namespace Edu.Module.Course
/// </summary>
private readonly RB_OrderRepository orderRepository = new RB_OrderRepository();
/// <summary>
/// 学员仓储层对象
/// </summary>
private readonly RB_StudentRepository studentRepository = new RB_StudentRepository();
/// <summary>
/// 生成业绩
/// </summary>
public void CreateEmployeeBonusModule(int GroupId,string startDate="")
public void CreateEmployeeBonusModule(int GroupId,string sDate="")
{
DateTime d1 = DateTime.Now;
if (!string.IsNullOrEmpty(startDate))
if (!string.IsNullOrEmpty(sDate))
{
var tempDate = Convert.ToDateTime(startDate);
var tempDate = Convert.ToDateTime(sDate);
d1 = new DateTime(tempDate.Year, tempDate.Month, 1);
}
else
{
d1 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
}
string startDate = Common.ConvertHelper.FormatDate(d1);
DateTime endTime = d1.AddMonths(1).AddDays(-1);
int CurrentYear = endTime.Year;
int CurrentMonth = endTime.Month;
string endDate = Common.ConvertHelper.FormatDate(endTime);
//人头配置列表
var planList = bonus_PlanRepository.GetBounsPlanListRepository(new RB_Bonus_PlanExtend()
{
......@@ -78,71 +83,115 @@ namespace Edu.Module.Course
var saleList = Common.ConvertHelper.StringToList(item.SaleIds);
foreach (var saleId in saleList)
{
CalcPersionBonusModule(item, GroupId, endDate, saleId, CurrentYear, CurrentMonth);
CalcPersionBonusModule(item, GroupId, startDate, endDate, saleId);
}
}
}
/// <summary>
/// 计算人员业绩
/// 订单退款变更
/// </summary>
/// <param name="item"></param>
/// <param name="GroupId"></param>
/// <param name="endDate"></param>
/// <param name="saleId"></param>
/// <param name="CurrentYear"></param>
/// <param name="CurrentMonth"></param>
/// <param name="isCalcReduce">true-计算抵扣,false-不计算</param>
private void CalcPersionBonusModule(RB_Bonus_PlanExtend item, int GroupId, string endDate, int saleId,int CurrentYear, int CurrentMonth, bool isCalcReduce = false)
public void ChangeEmployeeBonusModule(int orderId)
{
//待冲抵金额
decimal deductionMoney = 0;
var orderModel = orderRepository.GetEntity(orderId);
if (orderModel != null)
{
var orderList = GetSaleOrderList(item, GroupId, endDate, saleId, out List<RB_Order_ViewModel> allOrderList);
var curNum = orderList?.Where(qitem => qitem.Year == CurrentYear && qitem.Month == CurrentMonth)?.Sum(qitem => qitem.GuestNum) ?? 0;
var curOrderMoney = orderList?.Where(qitem => qitem.Year == CurrentYear && qitem.Month == CurrentMonth)?.Sum(qitem => qitem.OrderMoney) ?? 0;
int DeductionNum = 0;
decimal DeductionMoney = 0;
//查询销售已发放的奖励
var saleBonusList = personnel_BonusRepository.GetPersonnelBonusListRepository(new RB_Personnel_Bonus_Extend()
{
EmployeeId = saleId,
RewardType=item.PlanType,
EmployeeId = orderModel.EnterID,
YearNum=orderModel.CreateTime.Year,
MonthNum=orderModel.CreateTime.Month,
});
if (saleBonusList != null && saleBonusList.Count > 0)
{
//人头配置列表
var planList = bonus_PlanRepository.GetBounsPlanListRepository(new RB_Bonus_PlanExtend()
{
Group_Id = orderModel.Group_Id
}, isGetDetail: true);
//计算抵扣
foreach (var bItem in saleBonusList)
foreach (var sItem in saleBonusList)
{
//查询此月份的订单列表
var curMonthOrderList = allOrderList?.Where(qitem => qitem.CreateTime.Year == bItem.YearNum && qitem.CreateTime.Month == bItem.MonthNum)?.ToList();
foreach (var dItem in bItem.DetailList)
var planModel = planList?.Where(qitem => qitem.Id == sItem.PlanId)?.FirstOrDefault();
foreach (var dItem in sItem.DetailList)
{
Dictionary<string, object> detailFileds = new Dictionary<string, object>();
detailFileds.Clear();
var tempCurMonthOrder = curMonthOrderList?.FirstOrDefault(qitem => qitem.OrderId == dItem.OrderId);
var tempCurMonthOrder = orderModel;
if (dItem.OrderState != (tempCurMonthOrder?.OrderState))
{
var newMoney = tempCurMonthOrder.Income - tempCurMonthOrder.Refund - tempCurMonthOrder.PlatformTax;
dItem.OrderGuestNum = 0;
dItem.OrderMoney = newMoney;
detailFileds.Add(nameof(RB_Personnel_BonusDetail_Extend.OrderGuestNum), 0);
detailFileds.Add(nameof(RB_Personnel_BonusDetail_Extend.OrderMoney), newMoney);
string _log1 = $"订单号【{dItem.OrderId}】的订单状态由:{dItem.OrderState.ToName()}=>{tempCurMonthOrder?.OrderState.ToName()}" +
$"订单人数由:{dItem.OrderGuestNum}=>0,订单金额由:{dItem.OrderMoney}=>{newMoney}"
;
personnel_BonusLogRepository.AddPersonnelBonusLogRepository(bItem.Id, 1, dItem.OrderId, _log1);
personnel_BonusLogRepository.AddPersonnelBonusLogRepository(sItem.Id, 1, dItem.OrderId, _log1);
}
if (detailFileds != null && detailFileds.Count > 0)
{
personnel_BonusDetailRepository.Update(detailFileds, new WhereHelper(nameof(RB_Personnel_BonusDetail_Extend.Id), dItem.Id));
}
}
var sumNum = sItem?.DetailList?.Sum(qitem => qitem.OrderGuestNum) ?? 0;
var sumOrderMoney = sItem?.DetailList?.Sum(qitem => qitem.OrderMoney);
var curRewardMoney = GetStepAwardAmount(planModel, sumNum);
deductionMoney = sItem.CurRewardMoney - curRewardMoney;
//修改已发放
string _bonusLog = $"订单号变更: 由:{sItem.CurGuestNum}=>{sumNum},订单完成金额由:{sItem.CurOrderMoney}=>{sumOrderMoney}"
+ $"奖励金额由:{sItem.CurRewardMoney}=>{curRewardMoney}"
;
Dictionary<string, object> bonusFileds = new Dictionary<string, object>()
{
{nameof(RB_Personnel_Bonus.CurGuestNum),sumNum },
{nameof(RB_Personnel_Bonus.CurOrderMoney),sumOrderMoney },
{nameof(RB_Personnel_Bonus.DeductionMoney),deductionMoney },
{nameof(RB_Personnel_Bonus.IsReach),(sumOrderMoney>planModel.MonthGoalMoney?1:0) },
};
personnel_BonusRepository.Update(bonusFileds, new WhereHelper(nameof(RB_Personnel_Bonus.Id), sItem.Id));
personnel_BonusLogRepository.AddPersonnelBonusLogRepository(sItem.Id, 1, 0, _bonusLog);
}
}
}
}
/// <summary>
/// 计算人员业绩
/// </summary>
/// <param name="item"></param>
/// <param name="GroupId"></param>
/// <param name="endDate"></param>
/// <param name="saleId"></param>
private void CalcPersionBonusModule(RB_Bonus_PlanExtend item, int GroupId,string startDate,string endDate, int saleId)
{
var orderList = GetSaleOrderList(item, GroupId, endDate, saleId, out List<RB_Order_ViewModel> allOrderList);
var curNum = orderList?.Sum(qitem => qitem.GuestNum) ?? 0;
var curOrderMoney = orderList?.Sum(qitem => qitem.OrderMoney) ?? 0;
//查询未平账的人员
var saleBonusList = personnel_BonusRepository.GetPersonnelBonusListRepository(new RB_Personnel_Bonus_Extend()
{
EmployeeId = saleId,
PlanType=item.PlanType,
IsNoBalance=1,
});
var chaE = saleBonusList?.Sum(qitem => qitem.DeductionMoney - qitem.FinishDeductionMoney) ?? 0;
decimal DeductionMoney = 0;
var stuModel= studentRepository.GetStudentStaticRepository(saleId.ToString(), startDate, endDate)?.FirstOrDefault();
//新增当月的人头奖励
var pModel = new RB_Personnel_Bonus()
{
Id = 0,
RewardType = item.PlanType,
YearNum = CurrentYear,
MonthNum = CurrentMonth,
PlanId = item.Id,
PlanType = item.PlanType,
YearNum = Convert.ToDateTime(startDate).Year,
MonthNum = Convert.ToDateTime(startDate).Month,
EmployeeId = saleId,
CurGuestNum = curNum,
CurOrderMoney = curOrderMoney,
......@@ -152,14 +201,30 @@ namespace Edu.Module.Course
CreateTime = DateTime.Now,
UpdateBy = 1,
UpdateTime = DateTime.Now,
DeductionNum= DeductionNum,
DeductionMoney= DeductionMoney,
DeductionMoney = DeductionMoney,
BasicSalary = item.BasicSalary,
OpenBonus = curNum > 0 ? item.OpenBonus : 0,
WorkAgeSalary = item.WorkAgeSalary,
ClueNumSalary = stuModel?.ClueCount > 5 ? item.ClueNumSalary : 0
};
pModel.IsReach = pModel.CurOrderMoney > item.MonthGoalMoney ? 1 : 0;
var totalMoney = (pModel.BasicSalary + pModel.OpenBonus + pModel.WorkAgeSalary + pModel.ClueNumSalary);
if (totalMoney >= chaE)
{
pModel.BeforeMoney = chaE;
}
else
{
pModel.BeforeMoney = totalMoney;
}
//写抵扣记录表信息
if (pModel.BeforeMoney > 0)
{
}
var newId = personnel_BonusRepository.Insert(pModel);
pModel.Id = newId;
foreach (var oItem in allOrderList.Where(qitem=>qitem.CreateTime.Year==CurrentYear&&qitem.CreateTime.Month==CurrentMonth))
foreach (var oItem in allOrderList)
{
var detailModel = new RB_Personnel_BonusDetail()
{
......@@ -211,7 +276,7 @@ namespace Edu.Module.Course
{
List<PersionOrderItem> list = new List<PersionOrderItem>();
//所有当前人员订单列表
orderList = orderRepository.GetAllBonusOrderListRepository(GroupId, endDate, SaleId);
orderList = orderRepository.GetAllBonusOrderListRepository(GroupId, endDate, item.PlanType, SaleId);
//适用课程
if (!string.IsNullOrEmpty(item.UseCourseIds))
{
......
using Edu.Cache.User;
using Edu.Common.Enum;
using Edu.Common.Enum.Customer;
using Edu.Common.Plugin;
using Edu.Model.CacheModel;
using Edu.Model.ViewModel.Customer;
......@@ -146,6 +147,9 @@ namespace Edu.Module.Customer
else
{
model.CustomerState = Common.Enum.Customer.CustomerStateEnum.Normal;
model.ApproveState = 1;
model.ApproveId = 1;
model.ApproveTime = DateTime.Now;
model.Password = Common.DES.Encrypt(Common.Config.DefaultPwd);
var newId = customerRepository.Insert(model);
model.CustomerId = newId;
......@@ -216,6 +220,7 @@ namespace Edu.Module.Customer
{nameof(RB_Customer_Extend.ApproveContent),model.ApproveContent},
{nameof(RB_Customer_Extend.ApproveId),model.ApproveId},
{nameof(RB_Customer_Extend.ApproveTime),model.ApproveTime},
{nameof(RB_Customer_Extend.CustomerState),(int)CustomerStateEnum.Normal},
};
var flag = customerRepository.Update(fileds, new WhereHelper(nameof(RB_Customer_Extend.CustomerId), model.CustomerId));
return flag;
......
......@@ -85,9 +85,13 @@ WHERE 1=1
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Personnel_Bonus_Extend.EmployeeId), query.EmployeeId);
}
if (query.RewardType > 0)
if (query.PlanType > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Personnel_Bonus_Extend.RewardType), query.RewardType);
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Personnel_Bonus_Extend.PlanType), query.PlanType);
}
if (query.IsNoBalance == 1)
{
builder.AppendFormat(" AND A.DeductionMoney<>A.FinishDeductionMoney ");
}
}
var list= Get<RB_Personnel_Bonus_Extend>(builder.ToString()).ToList();
......
......@@ -1182,7 +1182,7 @@ group by o.OrderId
/// <param name="group_Id">集团编号</param>
/// <param name="eDate">结束日期</param>
/// <returns></returns>
public List<RB_Order_ViewModel> GetAllBonusOrderListRepository(int group_Id, string eDate,int SaleId)
public List<RB_Order_ViewModel> GetAllBonusOrderListRepository(int group_Id, string eDate,int PlanType,int SaleId)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
......@@ -1193,6 +1193,7 @@ WHERE 1=1
builder.AppendFormat(" AND o.OrderState IN({0},{1}) ", (int)OrderStateEnum.Normal, (int)OrderStateEnum.DropOut);
builder.AppendFormat(" AND o.{0}={1} ", nameof(RB_Order_ViewModel.OrderType), (int)OrderTypeEnum.CourseOrder);
builder.AppendFormat(" AND o.CreateTime >= '2021-11-01' ");
builder.AppendFormat(" AND o.OrderId NOT IN(SELECT B.OrderId FROM rb_personnel_bonus AS A INNER JOIN rb_personnel_bonusdetail AS B ON A.Id=B.BonusId WHERE A.PlanType={0} AND A.EmployeeId ={1}) ", PlanType, SaleId);
//帐平
builder.AppendFormat(" AND o.PreferPrice = (o.Income - o.Refund + o.DiscountMoney + o.PlatformTax) ");
if (group_Id > 0)
......
......@@ -469,7 +469,7 @@ FROM
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT ar.AccountRemark,A.Id,A.Account,A.AccountId,A.WorkUserId,A.Group_Id,A.School_Id,A.EmployeeName,A.UserIcon,A.IDCard,A.Sex,A.Education,A.EntryTime,A.Address,A.BirthDate
SELECT ar.AccountRemark,A.Id,A.Account,A.Password,A.AccountId,A.WorkUserId,A.Group_Id,A.School_Id,A.EmployeeName,A.UserIcon,A.IDCard,A.Sex,A.Education,A.EntryTime,A.Address,A.BirthDate
,A.LeaveStatus,A.LeaveTime,A.EmployeeTel,A.AccountType,A.Email,A.BaseHourFee,A.BaseHoursEnabled,A.EnableTime,IFNULL(A.DirectSupervisor,0) AS DirectSupervisor
,IFNULL(G.GroupName,'') AS GroupName,IFNULL(s.SName,'') AS SchoolName
,IFNULL(d.DeptId,0) AS Dept_Id,IFNULL(d.DeptName,'') AS DeptName,IFNULL(p.PostId,0) AS Post_Id, IFNULL(p.PostName,'') AS PostName
......
......@@ -715,5 +715,22 @@ WHERE 1=1
}
return Get<RB_Student_ViewModel>(builder.ToString(), parameters)?.FirstOrDefault();
}
/// <summary>
/// 线索统计
/// </summary>
/// <returns></returns>
public List<RB_Student_ViewModel> GetStudentStaticRepository(string createByIds,string startDate,string endDate)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT CreateBy,Count(1) AS ClueCount
FROM RB_Student
WHERE Status=0 AND CreateBy IN({0}) and CreateTime>='{1}' and CreateTime<='{2} 23:59:59'
", createByIds, startDate, endDate);
var list = Get<RB_Student_ViewModel>(builder.ToString()).ToList();
return list;
}
}
}
\ No newline at end of file
......@@ -34,6 +34,11 @@ namespace Edu.WebApi.Controllers.Third
/// </summary>
private readonly SellAchievementsModule sellAchievementsModule = new SellAchievementsModule();
/// <summary>
/// 员工人头奖励处理类
/// </summary>
private readonly EmployeeBonusModule employeeBonusModule = new EmployeeBonusModule();
/// <summary>
/// 根部部门层级获取部门主管
/// </summary>
......@@ -162,6 +167,7 @@ namespace Edu.WebApi.Controllers.Third
if (Refund > 0) {
//是退款 检验订单是否会影响 业绩提成
System.Threading.Tasks.Task.Run(() => sellAchievementsModule.ValidataAchievements(OrderId));
System.Threading.Tasks.Task.Run(() => employeeBonusModule.ChangeEmployeeBonusModule(OrderId));
}
return ApiResult.Success();
}
......
......@@ -64,6 +64,17 @@ namespace Edu.WebApi.Controllers.User
return ApiResult.Success();
}
[HttpGet]
[HttpPost]
[AllowAnonymous]
public ApiResult ChenageOrder()
{
var OrderId = base.ParmJObj.GetInt("OrderId");
employeeBonusModule.ChangeEmployeeBonusModule(OrderId);
return ApiResult.Success();
}
/// <summary>
/// 用户登录
/// </summary>
......
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