Commit b903aaf0 authored by liudong1993's avatar liudong1993

1 教育财务课时费调整

parent 12e0beeb
using Edu.Common.Enum.WeChat;
using System;
using VT.FW.DB;
namespace Edu.Model.Entity.WeChat
{
/// <summary>
/// 企业微信客户线索规则实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_WeChat_CustomerClueRule
{
/// <summary>
/// Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 可放弃部分客户的查询类型 1并且 2或者
/// </summary>
public int RuleSelectType { get; set; }
/// <summary>
/// 限制内容 json格式
/// </summary>
public string RuleSelectValue { get; set; }
/// <summary>
/// 是否默认 1是 2否
/// </summary>
public int IsDefault { get; set; }
/// <summary>
/// 部门ids
/// </summary>
public string DeptIds { get; set; }
/// <summary>
/// 员工ids
/// </summary>
public string EmpIds { get; set; }
/// <summary>
/// 分配方式 1依次轮流 2随机分配
/// </summary>
public int RuleAllotWay { get; set; }
/// <summary>
/// 排序 越小的 优先级越高
/// </summary>
public int Sort { get; set; }
/// <summary>
/// 删除状态
/// </summary>
public int Status { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 创建人
/// </summary>
public int CreateBy { get; set; }
/// <summary>
/// 创建日期
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 修改人
/// </summary>
public int UpdateBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
}
}
using Edu.Common.Enum.WeChat;
using System;
using VT.FW.DB;
namespace Edu.Model.Entity.WeChat
{
/// <summary>
/// 企业微信客户操作实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_WeChat_CustomerConfig
{
/// <summary>
/// Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 员工领取公海客户时需审核 1是 2否
/// </summary>
public int IsPublicAudit { get; set; }
/// <summary>
/// 可以领取的部门ids 不限-1
/// </summary>
public string PublicGetDept { get; set; }
/// <summary>
/// 放弃到公海类型 1全部客户 2部分客户
/// </summary>
public int AbandonType { get; set; }
/// <summary>
/// 可放弃标签ids (暂时启用, 看看筛选项情况)
/// </summary>
public string LableIds { get; set; }
/// <summary>
/// 可放弃客户阶段ids (暂时启用, 看看筛选项情况)
/// </summary>
public string StageIds { get; set; }
/// <summary>
/// 可放弃到公海的部门 -1不限
/// </summary>
public string AbandonDept { get; set; }
/// <summary>
/// 放弃后是否需要审核 1是 2否
/// </summary>
public int AbandonAudit { get; set; }
/// <summary>
/// 放弃的原因 直接List<string>
/// </summary>
public string AbandonReason { get; set; }
/// <summary>
/// 允许申请成为协作人部门 -1不限 0未开启
/// </summary>
public string ApplyForTeamDept { get; set; }
/// <summary>
/// 允许添加协作人部门 -1不限 0未开启
/// </summary>
public string AddTeamDept { get; set; }
/// <summary>
/// 允许转移客户的部门 -1不限 0未开启
/// </summary>
public string TransferCustomerDept { get; set; }
/// <summary>
/// 删除状态
/// </summary>
public int Status { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 创建人
/// </summary>
public int CreateBy { get; set; }
/// <summary>
/// 创建日期
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 修改人
/// </summary>
public int UpdateBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 线索类型 1手动分配 2自动分配
/// </summary>
public int ClueType { get; set; }
/// <summary>
/// 线索手动分配方式 1依次轮流 2随机分配
/// </summary>
public int ClueAllotWay { get; set; }
/// <summary>
/// 可放弃部分客户的查询类型 1并且 2或者
/// </summary>
public int AbandonSelectType { get; set; }
/// <summary>
/// 限制内容 json格式 List<CustomerCommissionSelectModel>
/// </summary>
public string AbandonSelectValue { get; set; }
/// <summary>
/// 可以领取的人员ids 不限-1
/// </summary>
public string PublicGetEmp { get; set; }
/// <summary>
/// 可放弃到公海的人员 -1不限
/// </summary>
public string AbandonEmp { get; set; }
/// <summary>
/// 允许申请成为协作人人员 -1不限
/// </summary>
public string ApplyForTeamEmp { get; set; }
/// <summary>
/// 允许添加协作人人员 -1不限
/// </summary>
public string AddTeamEmp { get; set; }
/// <summary>
/// 允许转移客户的人员 -1不限
/// </summary>
public string TransferCustomerEmp { get; set; }
}
}
......@@ -167,5 +167,30 @@ namespace Edu.Model.Entity.WeChat
/// 微信客户来源
/// </summary>
public int WeChatAddWay { get; set; }
/// <summary>
/// 客户状态 1正常客户 2线索 3公海
/// </summary>
public int CustomerState { get; set; }
/// <summary>
/// 线索状态 1未处理 2待回访 3无效线索 4已转客户
/// </summary>
public int ClueState { get; set; }
/// <summary>
/// 转客户时间 ClueState=4
/// </summary>
public DateTime? TurnCustomerTime { get; set; }
/// <summary>
/// 分配状态 1待分配 2已分配
/// </summary>
public int AllotState { get; set; }
/// <summary>
/// 分配客户时间
/// </summary>
public DateTime? AllotCustomerTime { get; set; }
}
}
......@@ -120,6 +120,11 @@ namespace Edu.Model.ViewModel.Grade
/// </summary>
public string ClassNo { get; set; }
/// <summary>
/// 校区
/// </summary>
public string SName { get; set; }
/// <summary>
/// 班级类型
/// </summary>
......
......@@ -37,6 +37,11 @@ namespace Edu.Model.ViewModel.Sell
/// </summary>
public string ClassName { get; set; }
/// <summary>
/// 校区
/// </summary>
public string SName { get; set; }
/// <summary>
/// 班级编号
/// </summary>
......
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Common.Enum.Sale;
using Edu.Model.Entity.WeChat;
using Edu.Model.Public;
namespace Edu.Model.ViewModel.WeChat
{
/// <summary>
/// 企业微信客户操作扩展类
/// </summary>
public class RB_WeChat_CustomerConfig_ViewModel : RB_WeChat_CustomerConfig
{
/// <summary>
/// 可以领取的部门
/// </summary>
public List<User.RB_Department_ViewModel> PublicGetDeptList { get; set; }
/// <summary>
/// 可放弃到公海的部门
/// </summary>
public List<User.RB_Department_ViewModel> AbandonDeptList { get; set; }
/// <summary>
/// 允许申请成为协作人部门
/// </summary>
public List<User.RB_Department_ViewModel> ApplyForTeamDeptList { get; set; }
/// <summary>
/// 允许添加协作人部门
/// </summary>
public List<User.RB_Department_ViewModel> AddTeamDeptList { get; set; }
/// <summary>
/// 允许转移客户的部门
/// </summary>
public List<User.RB_Department_ViewModel> TransferCustomerDeptList { get; set; }
/// <summary>
/// 可以领取的人员
/// </summary>
public List<User.Employee_ViewModel> PublicGetEmpList { get; set; }
/// <summary>
/// 可放弃到公海的人员
/// </summary>
public List<User.Employee_ViewModel> AbandonEmpList { get; set; }
/// <summary>
/// 允许申请成为协作人人员
/// </summary>
public List<User.Employee_ViewModel> ApplyForTeamEmpList { get; set; }
/// <summary>
/// 允许添加协作人人员
/// </summary>
public List<User.Employee_ViewModel> AddTeamEmpList { get; set; }
/// <summary>
/// 允许转移客户的人员
/// </summary>
public List<User.Employee_ViewModel> TransferCustomerEmpList { get; set; }
/// <summary>
/// 放弃原因
/// </summary>
public List<string> AbandonReasonList { get; set; }
/// <summary>
/// 阶段
/// </summary>
public List<RB_WeChat_CustomerStage_ViewModel> StageList { get; set; }
/// <summary>
/// 标签
/// </summary>
public List<RB_WeChat_Lable_ViewModel> LableList { get; set; }
/// <summary>
/// 部分客户筛选列表
/// </summary>
public List<CustomerCommissionSelectModel> AbandonKHSelect { get; set; }
}
/// <summary>
/// 字段Model 用于客户筛选
/// </summary>
public class CustomerCommissionSelectModel
{
/// <summary>
/// 标识
/// </summary>
public int Id { get; set; }
/// <summary>
/// 字段名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 类型 1包含 2等于 3日期 4日期范围 5数值
/// </summary>
public int Type { get; set; }
/// <summary>
/// 方向 1包含所有/等于/等于 2包含任意/不等于/大于 3不包含/为空/大于等于 4为空/不为空/小于 5不为空/模糊/小于等于 对应 type的1/2/5
/// </summary>
public int Direction { get; set; }
/// <summary>
/// 开始值
/// </summary>
public string StartValue { get; set; }
/// <summary>
/// 结束值
/// </summary>
public string EndValue { get; set; }
/// <summary>
/// 自定义字段 1是 2标签 3客户阶段
/// </summary>
public int IsCustom { get; set; }
}
}
......@@ -101,6 +101,10 @@ namespace Edu.Module.Course
/// </summary>
private readonly RB_GroupRepository groupRepository = new RB_GroupRepository();
/// <summary>
/// 校区
/// </summary>
private readonly RB_SchoolRepository schoolRepository = new RB_SchoolRepository();
/// <summary>
/// 账户
/// </summary>
private readonly RB_AccountRepository accountRepository = new RB_AccountRepository();
......@@ -596,7 +600,7 @@ namespace Edu.Module.Course
Group_Id = dmodel.Group_Id,
Id = 0,
Money = ksNum * unitPrice,
School_Id = dmodel.School_Id,
School_Id = item.School_Id,
Status = 0,
TeacherId = item.TeacherId,
Type = item.TeacherId == item.Teacher_Id ? 1 : 2,
......@@ -1891,10 +1895,18 @@ namespace Edu.Module.Course
var model = teaching_BonusRepository.GetEntity<RB_Teaching_Bonus_ViewModel>(periodId);
if (model == null) { return "周期不存在"; }
List<int> EmpIdList = new List<int>();
List<string> EmpTIdList = new List<string>();
if (!string.IsNullOrEmpty(model.EmpIds))
{
if (model.Id >= 40)
{
EmpTIdList = JsonHelper.DeserializeObject<List<string>>(model.EmpIds);
}
else
{
EmpIdList = JsonHelper.DeserializeObject<List<int>>("[" + model.EmpIds + "]");
}
}
string bonusIds = periodId.ToString();
......@@ -1904,22 +1916,35 @@ namespace Edu.Module.Course
string teacherIds = model.TeacherIds;
var tlist = teacherRepository.GetTeacherListRepository(new RB_Teacher_ViewModel() { Group_Id = userInfo.Group_Id, QTIds = teacherIds, IsQLeave = 1 });
string[] teacherIdArr = model.TeacherIds.Split(",");
List<object> RList = new List<object>();
//查询所有校区
var schoolList = dlist.Select(x => x.School_Id).Distinct().ToList();
if (!schoolList.Any()) { return RList; }
var slist = schoolRepository.GetSchoolListRepository(new RB_School_ViewModel() { Group_Id = userInfo.Group_Id, QSIds = string.Join(",", schoolList) });
foreach (var sitem in slist)
{
string[] teacherIdArr = model.TeacherIds.Split(",");
foreach (var qitem in teacherIdArr)
{
int teacherId = Convert.ToInt32(qitem);
string teacherName = tlist.Where(x => x.TId == teacherId).FirstOrDefault()?.TeacherName ?? "";
//教师累计奖励金额
decimal money = dlist.Where(x => x.TeacherId == teacherId).Sum(x => x.Money);
decimal money = dlist.Where(x => x.TeacherId == teacherId && x.School_Id == sitem.SId).Sum(x => x.Money);
if (money > 0)
{
RList.Add(new
{
TSId = sitem.SId + "-" + teacherId,
SchoolId = sitem.SId,
SchoolName = sitem.SName,
TeacherId = teacherId,
TeacherName = teacherName,
Money = money,
IsGiveOut = EmpIdList.Contains(teacherId) ? 1 : 2
IsGiveOut = model.Id >= 40 ? (EmpTIdList.Contains(sitem.SId + "-" + teacherId) ? 1 : 2) : (EmpIdList.Contains(teacherId) ? 1 : 2)
});
}
}
}
return RList;
}
......@@ -1936,10 +1961,32 @@ namespace Edu.Module.Course
if (model == null) { return "周期不存在"; }
if (model.Group_Id != userInfo.Group_Id) { return "集团不正确"; }
List<int> EmpIdList = new List<int>();
List<string> EmpTIdList = new List<string>();
if (!string.IsNullOrEmpty(model.EmpIds))
{
if (model.Id >= 40)
{
EmpTIdList = JsonHelper.DeserializeObject<List<string>>(model.EmpIds);
}
else
{
EmpIdList = JsonHelper.DeserializeObject<List<int>>("[" + model.EmpIds + "]");
}
}
if (model.Id >= 40)
{
List<string> NewIdList = JsonHelper.DeserializeObject<List<string>>(empIds);
foreach (var item in NewIdList)
{
if (EmpTIdList.Contains(item))
{
return "用户ID" + item + "已发放了提成,无法重复发放";
}
}
EmpTIdList.AddRange(NewIdList);
}
else
{
List<int> NewIdList = JsonHelper.DeserializeObject<List<int>>("[" + empIds + "]");
foreach (var item in NewIdList)
{
......@@ -1949,7 +1996,11 @@ namespace Edu.Module.Course
}
}
EmpIdList.AddRange(NewIdList);
}
string empids2 = string.Join(",", EmpIdList);
if (model.Id >= 40) {
empids2 = JsonHelper.Serialize(EmpTIdList);
}
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Teaching_Bonus_ViewModel.EmpIds),empids2}
};
......
......@@ -3453,7 +3453,8 @@ namespace Edu.Module.Finance
UnitPrice = unitPrice,
Money = KSMoney,
BaseHoursEnabled = item.BaseHoursEnabled,
EnableTime = item.EnableTime
EnableTime = item.EnableTime,
SName = item.SName
});
}
......@@ -3569,7 +3570,8 @@ namespace Edu.Module.Finance
UnitPrice = unitPrice,
Money = KSMoney,
BaseHoursEnabled = item.BaseHoursEnabled,
EnableTime = item.EnableTime
EnableTime = item.EnableTime,
SName = item.SName
});
}
......@@ -3632,6 +3634,7 @@ namespace Edu.Module.Finance
{
new ExcelColumn(value: item.Date.ToString("yyyy-MM-dd")){ },
new ExcelColumn(value: item.TimeBucket){ },
new ExcelColumn(value: item.SName){ },
new ExcelColumn(value: item.ClassNo){ },
new ExcelColumn(value: item.ClassName){ },
new ExcelColumn(value: item.CourseName){ },
......@@ -3663,6 +3666,7 @@ namespace Edu.Module.Finance
new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ },
new ExcelColumn(value: TKSNum.ToString("#0.00")){ },
new ExcelColumn(value: TDKNum.ToString("#0.00")){ },
new ExcelColumn(value: THours.ToString("#0.00")){ },
......
......@@ -56,6 +56,10 @@ namespace Edu.Module.QYWeChat
/// </summary>
private readonly RB_WeChat_LableRepository weChat_LableRepository = new RB_WeChat_LableRepository();
/// <summary>
/// 客户操作
/// </summary>
private readonly RB_WeChat_CustomerConfigRepository weChat_CustomerConfigRepository = new RB_WeChat_CustomerConfigRepository();
/// <summary>
/// 部门
/// </summary>
private RB_DepartmentRepository departmentRepository = new RB_DepartmentRepository();
......@@ -567,6 +571,161 @@ namespace Edu.Module.QYWeChat
#endregion
#region 客户操作
/// <summary>
/// 获取客户操作配置
/// </summary>
/// <param name="groupId"></param>
/// <returns></returns>
public RB_WeChat_CustomerConfig_ViewModel GetCustomerConfig(int groupId)
{
var model = weChat_CustomerConfigRepository.GetList(new RB_WeChat_CustomerConfig_ViewModel() { Group_Id = groupId }).FirstOrDefault();
if (model != null) {
model.PublicGetDeptList = new List<RB_Department_ViewModel>();
//查询部门的一些
if (!string.IsNullOrEmpty(model.PublicGetDept) && model.PublicGetDept != "-1")
{
model.PublicGetDeptList = departmentRepository.GetDepartmentListRepository(new RB_Department_ViewModel() { Group_Id = groupId, QDeptIds = model.PublicGetDept });
}
model.AbandonDeptList = new List<RB_Department_ViewModel>();
//查询部门的一些
if (!string.IsNullOrEmpty(model.AbandonDept) && model.AbandonDept != "-1")
{
model.AbandonDeptList = departmentRepository.GetDepartmentListRepository(new RB_Department_ViewModel() { Group_Id = groupId, QDeptIds = model.AbandonDept });
}
model.ApplyForTeamDeptList = new List<RB_Department_ViewModel>();
//查询部门的一些
if (!string.IsNullOrEmpty(model.ApplyForTeamDept) && model.ApplyForTeamDept != "-1")
{
model.ApplyForTeamDeptList = departmentRepository.GetDepartmentListRepository(new RB_Department_ViewModel() { Group_Id = groupId, QDeptIds = model.ApplyForTeamDept });
}
model.AddTeamDeptList = new List<RB_Department_ViewModel>();
//查询部门的一些
if (!string.IsNullOrEmpty(model.AddTeamDept) && model.AddTeamDept != "-1")
{
model.AddTeamDeptList = departmentRepository.GetDepartmentListRepository(new RB_Department_ViewModel() { Group_Id = groupId, QDeptIds = model.AddTeamDept });
}
model.TransferCustomerDeptList = new List<RB_Department_ViewModel>();
//查询部门的一些
if (!string.IsNullOrEmpty(model.TransferCustomerDept) && model.TransferCustomerDept != "-1")
{
model.TransferCustomerDeptList = departmentRepository.GetDepartmentListRepository(new RB_Department_ViewModel() { Group_Id = groupId, QDeptIds = model.TransferCustomerDept });
}
model.AbandonReasonList = new List<string>();
if (!string.IsNullOrEmpty(model.AbandonReason)) {
model.AbandonReasonList = JsonHelper.DeserializeObject<List<string>>(model.AbandonReason);
}
model.LableList = new List<RB_WeChat_Lable_ViewModel>();
//查询标签
if (!string.IsNullOrEmpty(model.LableIds)) {
model.LableList = weChat_LableRepository.GetList(new RB_WeChat_Lable_ViewModel() { Group_Id = groupId, LableIds = model.LableIds });
}
model.StageList = new List<RB_WeChat_CustomerStage_ViewModel>();
//查询阶段
if (!string.IsNullOrEmpty(model.StageIds)) {
model.StageList = weChat_CustomerStageRepository.GetList(new RB_WeChat_CustomerStage_ViewModel() { Group_Id = groupId, StageIds = model.StageIds });
}
//查询部分客户 筛选条件
model.AbandonKHSelect = new List<CustomerCommissionSelectModel>();
if (!string.IsNullOrEmpty(model.AbandonSelectValue))
{
model.AbandonKHSelect = JsonHelper.DeserializeObject<List<CustomerCommissionSelectModel>>(model.AbandonSelectValue);
}
//查询人员
model.PublicGetEmpList = new List<Employee_ViewModel>();
if (!string.IsNullOrEmpty(model.PublicGetEmp) && model.PublicGetEmp != "-1")
{
model.PublicGetEmpList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Group_Id = groupId, QIds = model.PublicGetEmp });
}
model.AbandonEmpList = new List<Employee_ViewModel>();
if (!string.IsNullOrEmpty(model.AbandonEmp) && model.AbandonEmp != "-1")
{
model.AbandonEmpList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Group_Id = groupId, QIds = model.AbandonEmp });
}
model.ApplyForTeamEmpList = new List<Employee_ViewModel>();
if (!string.IsNullOrEmpty(model.ApplyForTeamEmp) && model.ApplyForTeamEmp != "-1")
{
model.ApplyForTeamEmpList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Group_Id = groupId, QIds = model.ApplyForTeamEmp });
}
model.AddTeamEmpList = new List<Employee_ViewModel>();
if (!string.IsNullOrEmpty(model.AddTeamEmp) && model.AddTeamEmp != "-1")
{
model.AddTeamEmpList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Group_Id = groupId, QIds = model.AddTeamEmp });
}
model.TransferCustomerEmpList = new List<Employee_ViewModel>();
if (!string.IsNullOrEmpty(model.TransferCustomerEmp) && model.TransferCustomerEmp != "-1")
{
model.TransferCustomerEmpList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Group_Id = groupId, QIds = model.TransferCustomerEmp });
}
}
return model;
}
/// <summary>
/// 保存客户操作
/// </summary>
/// <param name="demodel"></param>
/// <returns></returns>
public string SetCustomerConfig(RB_WeChat_CustomerConfig_ViewModel demodel) {
if (demodel.Id > 0)
{
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_WeChat_CustomerConfig_ViewModel.IsPublicAudit), demodel.IsPublicAudit},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.PublicGetDept), demodel.PublicGetDept},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.AbandonType), demodel.AbandonType},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.LableIds), demodel.LableIds},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.StageIds), demodel.StageIds},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.AbandonDept), demodel.AbandonDept},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.AbandonAudit), demodel.AbandonAudit},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.AbandonReason), demodel.AbandonReason},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.ApplyForTeamDept), demodel.ApplyForTeamDept},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.AddTeamDept), demodel.AddTeamDept},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.TransferCustomerDept), demodel.TransferCustomerDept},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.UpdateBy), demodel.UpdateBy},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.UpdateTime), demodel.UpdateTime},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.AbandonSelectType), demodel.AbandonSelectType},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.AbandonSelectValue), demodel.AbandonSelectValue},
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_WeChat_CustomerConfig_ViewModel.Id),
FiledValue = demodel.Id,
OperatorEnum =OperatorEnum.Equal
}
};
bool flag = weChat_CustomerConfigRepository.Update(keyValues, wheres);
return flag ? "" : "出错了,请联系管理员";
}
else {
bool flag = weChat_CustomerConfigRepository.Insert(demodel) > 0;
return flag ? "" : "出错了,请联系管理员";
}
}
/// <summary>
/// 获取放弃公海原因列表
/// </summary>
/// <param name="group_Id"></param>
/// <returns></returns>
public List<string> GetCustomerConfigAbandonReason(int group_Id)
{
List<string> RList = new List<string>();
var model = weChat_CustomerConfigRepository.GetList(new RB_WeChat_CustomerConfig_ViewModel() { Group_Id = group_Id }).FirstOrDefault();
if (model != null)
{
if (!string.IsNullOrEmpty(model.AbandonReason)) {
RList = JsonHelper.DeserializeObject<List<string>>(model.AbandonReason);
}
}
return RList;
}
#endregion
#region 客户管理
/// <summary>
/// 获取客户分页列表
......@@ -778,11 +937,16 @@ namespace Edu.Module.QYWeChat
/// <returns></returns>
public string SetCustomerInfo(int customerId, int type, int customId, string value, UserInfo userInfo)
{
string Description = "", Remark = "";
var cmodel = weChat_CustomerInfoRepository.GetEntity(customerId);
if (cmodel == null || cmodel.Group_Id != userInfo.Group_Id) { return "客户不存在"; }
Dictionary<string, object> keyValues = new Dictionary<string, object>() { };
if (type == 1)
{
Description = "编辑了客户的信息: “客户阶段”";
string oldName = weChat_CustomerStageRepository.GetEntity(cmodel.StageId)?.Name ?? "";
string newName = weChat_CustomerStageRepository.GetEntity(Convert.ToInt32(value))?.Name ?? "";
Remark = $"由“{oldName}” 修改为 “{newName}”";
//1客户阶段
keyValues.Add(nameof(RB_WeChat_CustomerInfo_ViewModel.StageId), Convert.ToInt32(value));
}
......@@ -809,12 +973,16 @@ namespace Edu.Module.QYWeChat
{
//修改
var fmodel = FiledValueList.Where(x => x.Id == customId).FirstOrDefault();
Description = $"编辑了客户的信息: “{custModel.Name}”";
Remark = $"由“{fmodel.Value}” 修改为 “{value}”";
fmodel.Value = value;
}
else
{
//新增
FiledValueList.Add(new CustomerFiledContentModel() { Id = customId, Value = value });
Description = $"添加了客户的信息:";
Remark = $"“{custModel.Name}: {value}”";
}
Dictionary<string, string> CustomContentKV = new Dictionary<string, string>();
foreach (var qitem in FiledValueList)
......@@ -824,12 +992,7 @@ namespace Edu.Module.QYWeChat
keyValues.Add(nameof(RB_WeChat_CustomerInfo_ViewModel.CustomContent), JsonHelper.Serialize(CustomContentKV));
}
else if (type == 3) {
var oldLable = cmodel.LableIds;
var newLable = value;
//对比 那些需要删除 那些新增
//企业微信接口更新OK之后
return "请调用单独接口";
}
else
{
......@@ -843,6 +1006,26 @@ namespace Edu.Module.QYWeChat
},
};
bool flag = weChat_CustomerInfoRepository.Update(keyValues, wheres);
if (flag) {
//记录日志
weChat_CustomerTripRepository.Insert(new Model.Entity.WeChat.RB_WeChat_CustomerTrip()
{
Id = 0,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
CustomerId = customerId,
Description = Description,
EmpId = 0,
Files = "",
Group_Id = userInfo.Group_Id,
Images = "",
Remark = Remark,
Status = 0,
Type = Common.Enum.WeChat.CustomerTripTypeEnum.Operate,
UpdateBy = userInfo.Id,
UpdateTime = DateTime.Now
});
}
return flag ? "" : "出错了,请联系管理员";
}
......@@ -1081,7 +1264,8 @@ namespace Edu.Module.QYWeChat
CustomerMobile = CustomerMobile,
Remark = "",
WeChatAddWay = item.follow_info.add_way,
AddWay = Common.Enum.WeChat.CustomerAddWayEnum.Friend
AddWay = Common.Enum.WeChat.CustomerAddWayEnum.Friend,
CustomerState = 1
});
}
else {
......@@ -1322,7 +1506,8 @@ namespace Edu.Module.QYWeChat
CustomerMobile = CustomerMobile,
Remark = "",
WeChatAddWay = follow_user.add_way,
AddWay = Common.Enum.WeChat.CustomerAddWayEnum.Friend
AddWay = Common.Enum.WeChat.CustomerAddWayEnum.Friend,
CustomerState =1
});
}
}
......@@ -1392,6 +1577,7 @@ namespace Edu.Module.QYWeChat
var AddLable = SetLable.Where(x => !NowLable.Contains(x)).ToList();
if (AddLable.Any()) {
var LabelAddList = labelList.Where(x => AddLable.Contains(x.Id)).Select(x => x.WXLableId).Distinct().ToList();
string labelName = string.Join(",", labelList.Where(x => AddLable.Contains(x.Id)).Select(x => x.Name));
#region 给客户打标签
if (LabelAddList.Any())
{
......@@ -1400,6 +1586,26 @@ namespace Edu.Module.QYWeChat
{
LogHelper.Write("批量设置客户标签失败:" + lmsg.errmsg);
}
else {
//记录日志
weChat_CustomerTripRepository.Insert(new Model.Entity.WeChat.RB_WeChat_CustomerTrip()
{
Id = 0,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
CustomerId = item.Id,
Description = "更新了标签:",
EmpId = 0,
Files = "",
Group_Id = userInfo.Group_Id,
Images = "",
Remark = "批量设置标签为:" + labelName,
Status = 0,
Type = Common.Enum.WeChat.CustomerTripTypeEnum.Operate,
UpdateBy = userInfo.Id,
UpdateTime = DateTime.Now
});
}
}
#endregion
}
......@@ -1438,6 +1644,7 @@ namespace Edu.Module.QYWeChat
{
var LabelAddList = labelList.Where(x => AddLable.Contains(x.Id)).Select(x => x.WXLableId).Distinct().ToList();
var LabelDelList = labelList.Where(x => DelLable.Contains(x.Id)).Select(x => x.WXLableId).Distinct().ToList();// ----
string labelName = string.Join(",", labelList.Where(x => SetLable.Contains(x.Id)).Select(x => x.Name));
#region 给客户打标签
if (LabelAddList.Any())
{
......@@ -1446,11 +1653,196 @@ namespace Edu.Module.QYWeChat
{
LogHelper.Write("设置客户标签失败:" + lmsg.errmsg);
}
else {
//记录日志
weChat_CustomerTripRepository.Insert(new Model.Entity.WeChat.RB_WeChat_CustomerTrip()
{
Id = 0,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
CustomerId = customerId,
Description = "更新了标签:",
EmpId = 0,
Files = "",
Group_Id = userInfo.Group_Id,
Images = "",
Remark = "设置标签为:" + labelName,
Status = 0,
Type = Common.Enum.WeChat.CustomerTripTypeEnum.Operate,
UpdateBy = userInfo.Id,
UpdateTime = DateTime.Now
});
}
}
#endregion
}
return "";
}
/// <summary>
/// 客户转移 (在职、离职)
/// </summary>
/// <param name="customerIds"></param>
/// <param name="empId"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public string SetCustomerTransfer(string customerIds, int empId, UserInfo userInfo)
{
//暂时先不做 有离职列表转移 + 在职所有转移;
var newEmpModel = accountRepository.GetEmployeeInfo(empId);
var list = weChat_CustomerInfoRepository.GetList(new RB_WeChat_CustomerInfo_ViewModel() { Group_Id = userInfo.Group_Id, Q_CustomerIds = customerIds });
if (list.Any()) {
//先验证只支持离职转交吧, 在职有限制 三个月两次
string empIds = string.Join(",", list.Select(x => x.EmpId).Distinct());
var emlist = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Group_Id = userInfo.Group_Id, QIds = empIds });
if (emlist.Where(x => x.LeaveStatus != Common.Enum.User.LeaveStatusEnum.Departure).Any()) {
//有非离职的
}
}
return "暂时不做";
}
/// <summary>
/// 放弃客户至公海
/// </summary>
/// <param name="customerIds"></param>
/// <param name="reason"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public string SetCustomerAbandon(string customerIds, string reason, UserInfo userInfo)
{
var list = weChat_CustomerInfoRepository.GetList(new RB_WeChat_CustomerInfo_ViewModel() { Group_Id = userInfo.Group_Id, Q_CustomerIds = customerIds });
foreach (var item in list)
{
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_WeChat_CustomerInfo_ViewModel.IsPublic), 1},
{ nameof(RB_WeChat_CustomerInfo_ViewModel.UpdateBy), userInfo.Id},
{ nameof(RB_WeChat_CustomerInfo_ViewModel.UpdateTime), DateTime.Now},
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_WeChat_CustomerInfo_ViewModel.Id),
FiledValue= item.Id,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = weChat_CustomerInfoRepository.Update(keyValues, wheres);
if (flag) {
weChat_CustomerTripRepository.Insert(new Model.Entity.WeChat.RB_WeChat_CustomerTrip()
{
Id = 0,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
CustomerId = item.Id,
Description = "放弃客户至公海",
EmpId = 0,
Files = "",
Group_Id = userInfo.Group_Id,
Images = "",
Remark = reason,
Status = 0,
Type = Common.Enum.WeChat.CustomerTripTypeEnum.Record,
UpdateBy = userInfo.Id,
UpdateTime = DateTime.Now
});
}
}
return "";
}
/// <summary>
/// 删除客户
/// </summary>
/// <param name="customerIds"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public string DelCustomerInfo(string customerIds, UserInfo userInfo)
{
var list = weChat_CustomerInfoRepository.GetList(new RB_WeChat_CustomerInfo_ViewModel() { Group_Id = userInfo.Group_Id, Q_CustomerIds = customerIds });
foreach (var item in list) {
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_WeChat_CustomerInfo_ViewModel.Status), 1},
{ nameof(RB_WeChat_CustomerInfo_ViewModel.UpdateBy), userInfo.Id},
{ nameof(RB_WeChat_CustomerInfo_ViewModel.UpdateTime), DateTime.Now},
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_WeChat_CustomerInfo_ViewModel.Id),
FiledValue= item.Id,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = weChat_CustomerInfoRepository.Update(keyValues, wheres);
if (flag) {
weChat_CustomerTripRepository.Insert(new Model.Entity.WeChat.RB_WeChat_CustomerTrip()
{
Id = 0,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
CustomerId = item.Id,
Description = "删除客户",
EmpId = 0,
Files = "",
Group_Id = userInfo.Group_Id,
Images = "",
Remark = "",
Status = 0,
Type = Common.Enum.WeChat.CustomerTripTypeEnum.Operate,
UpdateBy = userInfo.Id,
UpdateTime = DateTime.Now
});
}
}
return "";
}
#endregion
#region 客户线索
/// <summary>
/// 获取线索规则配置
/// </summary>
/// <param name="group_Id"></param>
/// <returns></returns>
public RB_WeChat_CustomerConfig_ViewModel GetCustomerClueRule(int group_Id)
{
return weChat_CustomerConfigRepository.GetList(new RB_WeChat_CustomerConfig_ViewModel() { Group_Id = group_Id }).FirstOrDefault();
}
/// <summary>
/// 保存客户线索规则配置
/// </summary>
/// <param name="clueType"></param>
/// <param name="clueAllotWay"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public string SetCustomerClueRuleConfig(int clueType, int clueAllotWay, UserInfo userInfo)
{
var model = weChat_CustomerConfigRepository.GetList(new RB_WeChat_CustomerConfig_ViewModel() { Group_Id = userInfo.Group_Id }).FirstOrDefault();
if (model != null)
{
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_WeChat_CustomerConfig_ViewModel.ClueType), clueType},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.ClueAllotWay), clueAllotWay},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.UpdateBy), userInfo.Id},
{ nameof(RB_WeChat_CustomerConfig_ViewModel.UpdateTime), DateTime.Now},
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_WeChat_CustomerConfig_ViewModel.Id),
FiledValue = model.Id,
OperatorEnum =OperatorEnum.Equal
}
};
bool flag = weChat_CustomerConfigRepository.Update(keyValues, wheres);
return flag ? "" : "出错了,请联系管理员";
}
else {
return "未初始化客户配置";
}
}
#endregion
}
}
......@@ -439,7 +439,7 @@ GROUP BY tt.TeacherId,tt.OrderGuestId
}
if (schoolId >= 0)
{
where += $@" and t2.School_Id ={schoolId}";
where += $@" and c.School_Id ={schoolId}";
}
if (classId > 0)
{
......@@ -447,11 +447,12 @@ GROUP BY tt.TeacherId,tt.OrderGuestId
}
string sql = $@"
SELECT p.TeacherId,t2.TeacherName,t2.BaseHourFee,t2.BaseHoursEnabled,t2.EnableTime,c.ClassName,co.CourseName,p.ClassId,c.ClassType,c.ClassNo,c.ClassHourMinute,c.CouseId,p.ClassDate,p.ClassTimeId,t.StartTime as StartDate,t.EndTime as EndDate,Max(p.CurrentDeductionHours) as CurrentDeductionHours FROM rb_class_check p
SELECT p.TeacherId,t2.TeacherName,t2.BaseHourFee,t2.BaseHoursEnabled,t2.EnableTime,c.ClassName,co.CourseName,p.ClassId,c.ClassType,c.ClassNo,s.SName,c.ClassHourMinute,c.CouseId,p.ClassDate,p.ClassTimeId,t.StartTime as StartDate,t.EndTime as EndDate,Max(p.CurrentDeductionHours) as CurrentDeductionHours FROM rb_class_check p
INNER JOIN rb_class_time t on p.ClassTimeId = t.ClassTimeId
LEFT JOIN rb_teacher t2 on p.TeacherId = t2.TId
LEFT JOIN rb_class c on p.ClassId = c.ClassId
LEFT JOIN rb_course co on c.CouseId = co.CourseId
left join rb_school s on s.SId = c.School_Id
WHERE p.`Status`=0 and p.Group_Id ={group_Id} {where} and p.ClassDate >= '{startMonth}' and p.ClassDate <='{endMonth} 23:59:59'
GROUP BY p.TeacherId,p.ClassId,p.ClassTimeId
ORDER BY p.ClassDate ASC
......@@ -478,7 +479,7 @@ ORDER BY p.ClassDate ASC
}
if (schoolId >= 0)
{
where += $@" and t2.School_Id ={schoolId}";
where += $@" and c.School_Id ={schoolId}";
}
if (classId > 0)
{
......@@ -486,11 +487,12 @@ ORDER BY p.ClassDate ASC
}
string sql = $@"
SELECT p.TeacherId,t2.TeacherName,t2.BaseHourFee,t2.BaseHoursEnabled,t2.EnableTime,c.ClassName,co.CourseName,p.ClassId,c.ClassType,c.ClassNo,c.ClassHourMinute,c.CouseId,p.ClassDate,p.ClassTimeId,t.StartTime as StartDate,t.EndTime as EndDate,Max(p.CurrentDeductionHours) as CurrentDeductionHours FROM rb_class_check p
SELECT p.TeacherId,t2.TeacherName,t2.BaseHourFee,t2.BaseHoursEnabled,t2.EnableTime,c.ClassName,co.CourseName,p.ClassId,s.SName,c.ClassType,c.ClassNo,c.ClassHourMinute,c.CouseId,p.ClassDate,p.ClassTimeId,t.StartTime as StartDate,t.EndTime as EndDate,Max(p.CurrentDeductionHours) as CurrentDeductionHours FROM rb_class_check p
INNER JOIN rb_class_time t on p.ClassTimeId = t.ClassTimeId
LEFT JOIN rb_teacher t2 on p.TeacherId = t2.TId
LEFT JOIN rb_class c on p.ClassId = c.ClassId
LEFT JOIN rb_course co on c.CouseId = co.CourseId
left join rb_school s on s.SId = c.School_Id
WHERE p.`Status`=0 and p.Group_Id ={group_Id} {where} and p.ClassDate >= '{startMonth}' and p.ClassDate <='{endMonth} 23:59:59'
GROUP BY p.TeacherId,p.ClassId,p.ClassTimeId
ORDER BY p.ClassDate ASC
......@@ -523,7 +525,7 @@ ORDER BY p.ClassDate ASC
}
if (schoolId >= 0)
{
where += $@" and t2.School_Id ={schoolId}";
where += $@" and c.School_Id ={schoolId}";
}
if (classId > 0)
{
......@@ -598,7 +600,7 @@ ORDER BY tt.ClassDate ASC
}
if (schoolId >= 0)
{
where += $@" and t2.School_Id ={schoolId}";
where += $@" and c.School_Id ={schoolId}";
}
if (classId > 0)
{
......
......@@ -126,7 +126,7 @@ where {where} order by bd.Date asc";
{
where += $@" and b.{nameof(RB_Teaching_BonusDetail.Group_Id)} ={demodel.Group_Id}";
}
if (demodel.School_Id > 0)
if (demodel.School_Id >= 0)
{
where += $@" and b.{nameof(RB_Teaching_BonusDetail.School_Id)} ={demodel.School_Id}";
}
......@@ -155,9 +155,10 @@ where {where} order by bd.Date asc";
where += $@" and b.{nameof(RB_Teaching_BonusDetail.Type)} ={demodel.Type}";
}
string sql = $@" select b.*,t.TeacherName,c.ClassName,c.ClassNo from RB_Teaching_BonusDetail b
string sql = $@" select b.*,t.TeacherName,c.ClassName,c.ClassNo,s.SName from RB_Teaching_BonusDetail b
left join rb_teacher t on b.TeacherId = t.TId
left join rb_class c on b.ClassId = c.ClassId
left join rb_school s on b.School_Id = s.SId
where {where} order by b.TeacherId asc,b.Date asc";
return Get<RB_Teaching_BonusDetail_ViewModel>(sql).ToList();
}
......@@ -175,7 +176,7 @@ where {where} order by b.TeacherId asc,b.Date asc";
{
where += $@" and b.{nameof(RB_Teaching_BonusDetail.Group_Id)} ={demodel.Group_Id}";
}
if (demodel.School_Id > 0)
if (demodel.School_Id >= 0)
{
where += $@" and b.{nameof(RB_Teaching_BonusDetail.School_Id)} ={demodel.School_Id}";
}
......@@ -204,15 +205,16 @@ where {where} order by b.TeacherId asc,b.Date asc";
where += $@" and b.{nameof(RB_Teaching_BonusDetail.Type)} ={demodel.Type}";
}
string sql = $@" select b.TeacherId,t.TeacherName,b.UnitPrice,
string sql = $@" select b.TeacherId,t.TeacherName,b.UnitPrice,s.SId,s.SName,
SUM(CASE WHEN b.Type =1 THEN b.CourseHour ELSE 0 END) AS CourseHour,
SUM(CASE WHEN b.Type =2 THEN b.CourseHour ELSE 0 END) AS DCourseHour,
SUM(b.DeductionHour) AS DeductionHour,
SUM(b.Money) AS Money
from RB_Teaching_BonusDetail b
left join rb_teacher t on b.TeacherId = t.TId
left join rb_school s on b.School_Id = s.SId
where {where}
GROUP BY b.TeacherId,t.TeacherName,b.UnitPrice
GROUP BY b.TeacherId,t.TeacherName,b.UnitPrice,s.SId
";
return Get<RB_Teaching_BonusDetail_ViewModel>(sql).ToList();
}
......
using Edu.Common.Enum;
using Edu.Model.Entity.WeChat;
using Edu.Model.ViewModel.WeChat;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VT.FW.DB;
using VT.FW.DB.Dapper;
namespace Edu.Repository.WeChat
{
/// <summary>
/// 企业微信客户操作仓储层
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_WeChat_CustomerConfigRepository : BaseRepository<RB_WeChat_CustomerConfig>
{
/// <summary>
/// 获取列表
/// </summary>
/// <param name="demodel"></param>
/// <returns></returns>
public List<RB_WeChat_CustomerConfig_ViewModel> GetList(RB_WeChat_CustomerConfig_ViewModel demodel)
{
DynamicParameters parameters = new DynamicParameters();
string where = $@" 1=1 and r.{nameof(RB_WeChat_CustomerConfig_ViewModel.Status)} =0";
if (demodel.Group_Id > 0)
{
where += $@" and r.{nameof(RB_WeChat_CustomerConfig_ViewModel.Group_Id)} ={demodel.Group_Id}";
}
string sql = $@"
SELECT * From RB_WeChat_CustomerConfig r
WHERE {where}
ORDER BY r.Id DESC ";
return Get<RB_WeChat_CustomerConfig_ViewModel>(sql, parameters).ToList();
}
}
}
......@@ -42,6 +42,18 @@ namespace Edu.Repository.WeChat
{
where += $@" and r.{nameof(RB_WeChat_CustomerInfo_ViewModel.FriendState)} ={demodel.FriendState}";
}
if (demodel.CustomerState > 0)
{
where += $@" and r.{nameof(RB_WeChat_CustomerInfo_ViewModel.CustomerState)} ={demodel.CustomerState}";
}
if (demodel.ClueState > 0)
{
where += $@" and r.{nameof(RB_WeChat_CustomerInfo_ViewModel.ClueState)} ={demodel.ClueState}";
}
if (demodel.AllotState > 0)
{
where += $@" and r.{nameof(RB_WeChat_CustomerInfo_ViewModel.AllotState)} ={demodel.AllotState}";
}
if (demodel.StageId > 0)
{
where += $@" and r.{nameof(RB_WeChat_CustomerInfo_ViewModel.StageId)} ={demodel.StageId}";
......@@ -243,23 +255,25 @@ namespace Edu.Repository.WeChat
where += ")";
break;
case 3://日期
List<string> vList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(item.StartValue);
string vstr = "'" + string.Join("','", vList) + "'";
if (item.IsCustom == 1)
{
where += $@" r.CustomContent -> '$.{item.Name}' ='{item.StartValue}' ";
where += $@" r.CustomContent -> '$.{item.Name}' in({vstr}) ";
}
else
{
where += $@" r.{item.Name} ='{item.StartValue}' ";
where += $@" r.{item.Name} in({vstr}) ";
}
break;
case 4://日期范围
if (item.IsCustom == 1)
{
where += $@" r.CustomContent -> '$.{item.Name}' >='{item.StartValue}' and r.CustomContent -> '$.{item.Name}' <='{item.EndValue}' ";
where += $@" r.CustomContent -> '$.{item.Name}' >='{item.StartValue}' and r.CustomContent -> '$.{item.Name}' <='{item.EndValue} 23:59:59' ";
}
else
{
where += $@" r.{item.Name} >='{item.StartValue}' and r.{item.Name} <='{item.EndValue}' ";
where += $@" r.{item.Name} >='{item.StartValue}' and r.{item.Name} <='{item.EndValue} 23:59:59' ";
}
break;
case 5://数值
......@@ -381,6 +395,10 @@ ORDER BY {orderByStr} ";
{
where += $@" and r.{nameof(RB_WeChat_CustomerInfo_ViewModel.IsPublic)} ={demodel.IsPublic}";
}
if (demodel.CustomerState > 0)
{
where += $@" and r.{nameof(RB_WeChat_CustomerInfo_ViewModel.CustomerState)} ={demodel.CustomerState}";
}
if (demodel.StageId > 0)
{
where += $@" and r.{nameof(RB_WeChat_CustomerInfo_ViewModel.StageId)} ={demodel.StageId}";
......
......@@ -266,6 +266,7 @@ namespace Edu.WebApi.Controllers.Course
Date = x.Date.ToString("yyyyMMdd"),
x.TeacherId,
x.TeacherName,
x.SName,
x.ClassId,
x.ClassName,
x.ClassNo,
......@@ -276,15 +277,19 @@ namespace Edu.WebApi.Controllers.Course
x.CheckInNum,
x.Money
}),
Statistics = slit.Select(x => new
{
x.TeacherId,
x.TeacherName,
x.UnitPrice,
x.CourseHour,
x.DCourseHour,
x.DeductionHour,
x.Money
Statistics = slit.GroupBy(x => x.SName).Select(x => new
{
x.Key,
TeacherList = x.Select(y => new
{
y.TeacherId,
y.TeacherName,
y.UnitPrice,
y.CourseHour,
y.DCourseHour,
y.DeductionHour,
y.Money
})
})
});
}
......@@ -311,6 +316,7 @@ namespace Edu.WebApi.Controllers.Course
ExcelRows = new List<ExcelColumn>(30) {
new ExcelColumn(value: "日期") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "老师") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "校区") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "班号") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "班级") { CellWidth = 25, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "类型") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
......@@ -335,6 +341,7 @@ namespace Edu.WebApi.Controllers.Course
ExcelRows = new List<ExcelColumn>(30) {
new ExcelColumn(value: item.Date.ToString("yyyyMMdd")){ },
new ExcelColumn(value: item.TeacherName){ },
new ExcelColumn(value: item.SName){ },
new ExcelColumn(value: item.ClassNo){ },
new ExcelColumn(value: item.ClassName){ },
new ExcelColumn(value: item.Type==1?"带班":"代课"){ },
......@@ -367,6 +374,7 @@ namespace Edu.WebApi.Controllers.Course
datarows = new ExcelDataSource()
{
ExcelRows = new List<ExcelColumn>(30) {
new ExcelColumn(value: "校区"){ },
new ExcelColumn(value: "老师"){ },
new ExcelColumn(value: "基础课时"){ },
new ExcelColumn(value: "带班课时"){ },
......@@ -385,6 +393,7 @@ namespace Edu.WebApi.Controllers.Course
datarows = new ExcelDataSource()
{
ExcelRows = new List<ExcelColumn>(30) {
new ExcelColumn(value: item.SName){ },
new ExcelColumn(value: item.TeacherName){ },
new ExcelColumn(value: item.DeductionHour.ToString()){ },
new ExcelColumn(value: item.CourseHour.ToString()){ },
......
......@@ -1649,6 +1649,7 @@ namespace Edu.WebApi.Controllers.Finance
x.TimeBucket,
x.TeacherId,
x.TeacherName,
x.SName,
x.ClassId,
x.ClassName,
x.ClassNo,
......@@ -1678,6 +1679,7 @@ namespace Edu.WebApi.Controllers.Finance
ExcelRows = new List<ExcelColumn>(30) {
new ExcelColumn(value:"上课日期"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"上课时间段"){CellWidth=20,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"校区"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"班级编号"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"班级"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"课程"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
......
......@@ -397,6 +397,129 @@ namespace Edu.WebApi.Controllers.QYWeChat
#endregion
#region 客户操作
/// <summary>
/// 获取客户操作配置
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetCustomerConfig() {
var userInfo = base.UserInfo;
var model = customerModule.GetCustomerConfig(userInfo.Group_Id);
return ApiResult.Success("", new
{
model?.IsPublicAudit,
model?.PublicGetDept,
model?.AbandonType,
model?.LableIds,
model?.StageIds,
model?.AbandonDept,
model?.AbandonAudit,
model?.AbandonReason,
model?.ApplyForTeamDept,
model?.AddTeamDept,
model?.TransferCustomerDept,
PublicGetDeptList = model?.PublicGetDeptList?.Select(x=>new {
x.DeptId,
x.DeptName
}),
AbandonDeptList = model?.AbandonDeptList?.Select(x => new {
x.DeptId,
x.DeptName
}),
ApplyForTeamDeptList = model?.ApplyForTeamDeptList?.Select(x => new {
x.DeptId,
x.DeptName
}),
AddTeamDeptList = model?.AddTeamDeptList?.Select(x => new {
x.DeptId,
x.DeptName
}),
TransferCustomerDeptList = model?.TransferCustomerDeptList?.Select(x => new {
x.DeptId,
x.DeptName
}),
model?.AbandonReasonList,
model?.LableList,
model?.StageList,
model?.AbandonSelectType,
model?.AbandonKHSelect,
PublicGetEmpList = model?.PublicGetEmpList?.Select(x => new
{
x.Id,
x.EmployeeName
}),
AbandonEmpList = model?.AbandonEmpList?.Select(x => new
{
x.Id,
x.EmployeeName
}),
ApplyForTeamEmpList = model?.ApplyForTeamEmpList?.Select(x => new
{
x.Id,
x.EmployeeName
}),
AddTeamEmpList = model?.AddTeamEmpList?.Select(x => new
{
x.Id,
x.EmployeeName
}),
TransferCustomerEmpList = model?.TransferCustomerEmpList?.Select(x => new
{
x.Id,
x.EmployeeName
})
});
}
/// <summary>
/// 保存客户操作配置
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetCustomerConfig() {
var userInfo = base.UserInfo;
RB_WeChat_CustomerConfig_ViewModel demdoel = JsonHelper.DeserializeObject<RB_WeChat_CustomerConfig_ViewModel>(base.RequestParm.Msg.ToString());
if (demdoel.AbandonType == 2) {
if (demdoel.AbandonKHSelect == null || !demdoel.AbandonKHSelect.Any())
{
return ApiResult.ParamIsNull("请选择部分客户筛选条件");
}
demdoel.AbandonSelectValue = JsonHelper.Serialize(demdoel.AbandonKHSelect);
}
demdoel.Group_Id = userInfo.Group_Id;
demdoel.Status = 0;
demdoel.CreateBy = userInfo.Id;
demdoel.CreateTime = DateTime.Now;
demdoel.UpdateBy = userInfo.Id;
demdoel.UpdateTime = DateTime.Now;
string msg = customerModule.SetCustomerConfig(demdoel);
if (msg == "")
{
return ApiResult.Success();
}
else {
return ApiResult.Failed();
}
}
/// <summary>
/// 获取放弃进入公海原因
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetCustomerConfigAbandonReason() {
var userInfo = base.UserInfo;
var list = customerModule.GetCustomerConfigAbandonReason(userInfo.Group_Id);
return ApiResult.Success("", list);
}
#endregion
#region 客户管理
/// <summary>
......@@ -409,6 +532,7 @@ namespace Edu.WebApi.Controllers.QYWeChat
ResultPageModel pmodel = JsonHelper.DeserializeObject<ResultPageModel>(base.RequestParm.Msg.ToString());
RB_WeChat_CustomerInfo_ViewModel demodel = JsonHelper.DeserializeObject<RB_WeChat_CustomerInfo_ViewModel>(base.RequestParm.Msg.ToString());
demodel.Group_Id = userInfo.Group_Id;
demodel.CustomerState = 1;//客户列表
var list = customerModule.GetCustomerInfoPageList(pmodel.PageIndex, pmodel.PageSize, out long count, demodel);
pmodel.Count = Convert.ToInt32(count);
......@@ -535,70 +659,6 @@ namespace Edu.WebApi.Controllers.QYWeChat
}
}
/// <summary>
/// 批量设置客户标签
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetCustomerLabelBatch() {
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(base.RequestParm.Msg.ToString());
string CustomerIds = parms.GetStringValue("CustomerIds");//客户ids 英文逗号分隔
string LableIds = parms.GetStringValue("LableIds");//标签ids
if (string.IsNullOrEmpty(CustomerIds)) {
return ApiResult.ParamIsNull("请传递客户ID");
}
if (string.IsNullOrEmpty(LableIds)) {
return ApiResult.ParamIsNull("请传递标签ID");
}
string msg = customerModule.SetCustomerLabelBatch(CustomerIds, LableIds, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else {
return ApiResult.Failed(msg);
}
}
/// <summary>
/// 单客户标签设置
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetCustomerLabelSingle()
{
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(base.RequestParm.Msg.ToString());
int CustomerId = parms.GetInt("CustomerId", 0);//客户id
string LableIds = parms.GetStringValue("LableIds");//标签ids
if (CustomerId <= 0)
{
return ApiResult.ParamIsNull("请传递客户ID");
}
if (string.IsNullOrEmpty(LableIds))
{
return ApiResult.ParamIsNull("请传递标签ID");
}
string msg = customerModule.SetCustomerLabelSingle(CustomerId, LableIds, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
//修改客户企业标签(批量处理)
//批量转移 放弃 导出 删除
/// <summary>
/// 获取客户旅程分页列表
/// </summary>
......@@ -731,6 +791,258 @@ namespace Edu.WebApi.Controllers.QYWeChat
}
}
/// <summary>
/// 批量设置客户标签
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetCustomerLabelBatch()
{
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(base.RequestParm.Msg.ToString());
string CustomerIds = parms.GetStringValue("CustomerIds");//客户ids 英文逗号分隔
string LableIds = parms.GetStringValue("LableIds");//标签ids
if (string.IsNullOrEmpty(CustomerIds))
{
return ApiResult.ParamIsNull("请传递客户ID");
}
if (string.IsNullOrEmpty(LableIds))
{
return ApiResult.ParamIsNull("请传递标签ID");
}
string msg = customerModule.SetCustomerLabelBatch(CustomerIds, LableIds, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
/// <summary>
/// 单客户标签设置
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetCustomerLabelSingle()
{
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(base.RequestParm.Msg.ToString());
int CustomerId = parms.GetInt("CustomerId", 0);//客户id
string LableIds = parms.GetStringValue("LableIds");//标签ids
if (CustomerId <= 0)
{
return ApiResult.ParamIsNull("请传递客户ID");
}
if (string.IsNullOrEmpty(LableIds))
{
return ApiResult.ParamIsNull("请传递标签ID");
}
string msg = customerModule.SetCustomerLabelSingle(CustomerId, LableIds, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
/// <summary>
/// 客户转移(在职,离职)
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetCustomerTransfer() {
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(base.RequestParm.Msg.ToString());
string CustomerIds = parms.GetStringValue("CustomerIds");//客户ids
int EmpId = parms.GetInt("EmpId", 0);//转入销售的id
if (string.IsNullOrEmpty(CustomerIds))
{
return ApiResult.ParamIsNull("请传递客户ID");
}
if (EmpId <= 0) {
return ApiResult.ParamIsNull("请现在转移销售");
}
string msg = customerModule.SetCustomerTransfer(CustomerIds, EmpId, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else {
return ApiResult.Failed(msg);
}
}
/// <summary>
/// 客户放弃(放弃至公海)
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetCustomerAbandon() {
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(base.RequestParm.Msg.ToString());
string CustomerIds = parms.GetStringValue("CustomerIds");//客户ids
string Reason = parms.GetStringValue("Reason");//放弃原因
if (string.IsNullOrEmpty(CustomerIds))
{
return ApiResult.ParamIsNull("请传递客户ID");
}
if (string.IsNullOrEmpty(Reason))
{
return ApiResult.ParamIsNull("请选择放弃原因");
}
string msg = customerModule.SetCustomerAbandon(CustomerIds, Reason, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
/// <summary>
/// 删除客户
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult DelCustomerInfo()
{
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(base.RequestParm.Msg.ToString());
string CustomerIds = parms.GetStringValue("CustomerIds");//客户ids
if (string.IsNullOrEmpty(CustomerIds))
{
return ApiResult.ParamIsNull("请传递客户ID");
}
string msg = customerModule.DelCustomerInfo(CustomerIds, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
//修改客户企业标签(批量处理)
//批量转移 放弃 导出 删除
#endregion
#region 客户线索
#region 线索分配规则
/// <summary>
/// 获取线索规则配置
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetCustomerClueRuleConfig() {
var userInfo = base.UserInfo;
var model = customerModule.GetCustomerClueRule(userInfo.Group_Id);
return ApiResult.Success("", new
{
model?.Id,
model?.ClueType,
model?.ClueAllotWay
});
}
/// <summary>
/// 保存线索规则配置
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetCustomerClueRuleConfig() {
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(base.RequestParm.Msg.ToString());
int ClueType = parms.GetInt("ClueType", 1);//线索类型 1手动分配 2自动分配
int ClueAllotWay = parms.GetInt("ClueAllotWay", 1);//线索手动分配方式 1依次轮流 2随机分配
if (ClueType <= 0) {
return ApiResult.ParamIsNull();
}
if (ClueAllotWay <= 0) {
return ApiResult.ParamIsNull();
}
string msg = customerModule.SetCustomerClueRuleConfig(ClueType, ClueAllotWay, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else {
return ApiResult.Failed(msg);
}
}
#endregion
/// <summary>
/// 获取客户线索分页列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetCustomerCluePageList() {
var userInfo = base.UserInfo;
ResultPageModel pmodel = JsonHelper.DeserializeObject<ResultPageModel>(base.RequestParm.Msg.ToString());
RB_WeChat_CustomerInfo_ViewModel demodel = JsonHelper.DeserializeObject<RB_WeChat_CustomerInfo_ViewModel>(base.RequestParm.Msg.ToString());
demodel.Group_Id = userInfo.Group_Id;
demodel.CustomerState = 2;
var list = customerModule.GetCustomerInfoPageList(pmodel.PageIndex, pmodel.PageSize, out long count, demodel);
pmodel.Count = Convert.ToInt32(count);
pmodel.PageData = list.Select(x => new
{
x.Id,
x.EmpId,
x.EmpName,
x.WorkEmpId,
x.WorkEmpName,
x.ExternalUserId,
x.CustomerName,
x.WeChatName,
x.WeChatPhoto,
x.CorpName,
x.CorpFullName,
x.CustomerType,
x.StageId,
x.StageName,
x.LableIds,
LableList = x.LableList?.Select(z => new
{
z.Id,
z.Name
}),
x.Source,
x.CustomContent,
x.CustomFiledList,
x.FriendState,
LastFollowUpTime = x.LastFollowUpTime.HasValue ? x.LastFollowUpTime.Value.ToString("yyyy-MM-dd HH:mm") : "",
CreateTime = x.CreateTime.ToString("yyyy-MM-dd HH:mm")
});
return ApiResult.Success("", pmodel);
}
#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