253 lines
11 KiB
C#
253 lines
11 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using WX.CRM.BLL.Base;
|
||
using WX.CRM.Common;
|
||
using WX.CRM.IBLL.Res;
|
||
using WX.CRM.Model.Entity;
|
||
using WX.CRM.Model.MAP;
|
||
|
||
namespace WX.CRM.BLL.Res
|
||
{
|
||
public class RES_SALESGROUP_DETAIL_BL : IRES_SALESGROUP_DETAIL_Q, IRES_SALESGROUP_DETAIL
|
||
{
|
||
/// <summary>
|
||
/// 获取分组员工明细列表
|
||
/// </summary>
|
||
/// <param name="groupId"></param>
|
||
/// <returns></returns>
|
||
public List<RES_SALESGROUP_DETAIL_Extend> GetRES_SALESGROUP_DETAIL_List(decimal groupId, string strategy)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var x = from a in db.RES_SALESGROUP_DETAIL
|
||
//join b in db.BAS_INNERUSER on a.INNERUSERID equals b.PKID
|
||
where a.GROUPID == groupId
|
||
&& a.STRATEGY == strategy
|
||
select new RES_SALESGROUP_DETAIL_Extend()
|
||
{
|
||
GROUPID = a.GROUPID,
|
||
INNERUSERID = a.INNERUSERID,
|
||
RESNUM = a.RESNUM,
|
||
EID = a.EID,
|
||
UserName = a.UNAME,
|
||
RESRATE = a.RESRATE,
|
||
GID = a.GID,
|
||
GNAME = a.GNAME,
|
||
GROUPRATIO = a.GROUPRATIO,
|
||
GROUPTYPE = a.GROUPTYPE,
|
||
USERTYPE = a.USERTYPE,
|
||
ACTTYPE = a.ACTTYPE,
|
||
STRATEGY = a.STRATEGY
|
||
};
|
||
|
||
return x.ToList();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
///
|
||
/// </summary>
|
||
/// <param name="errors"></param>
|
||
/// <param name="groupId"></param>
|
||
/// <param name="UserIds">1257266195-1205676517-服务号测试-1013-0 gid-uid-uname-eid-ratio</param>
|
||
/// <param name="groups"></param>
|
||
/// <param name="usertype">0:自动平均分配,1:按比例分配</param>
|
||
/// <param name="grouptype">0:虚拟组(自定义组),1:跟组织结构相同</param>
|
||
/// <param name="act">group:按组分配,组成员就不需要手动设置;user:按员工分配,组成员需要手工设置</param>
|
||
/// <returns></returns>
|
||
public bool SaveSalesGroupDetial(ref ValidationErrors errors, decimal groupId, string UserIds, string groups, int usertype, int grouptype, string acttype, string ratetype, string strategy)
|
||
{
|
||
try
|
||
{
|
||
var groupList = new List<tempGroup>();
|
||
decimal groupRatio = 0;
|
||
if (grouptype == 1 && !string.IsNullOrEmpty(groups))
|
||
{
|
||
foreach (var item in groups.Split(','))
|
||
{
|
||
var arr = item.Split('-');
|
||
var gid = decimal.Parse(arr[0].ToString());
|
||
var gname = arr[1].ToString();
|
||
var groupratio = decimal.Parse(arr[2].ToString());
|
||
groupList.Add(new tempGroup(gid, gname, groupratio));
|
||
}
|
||
|
||
groupRatio = groupList.Sum(p => p.GROUPRATIO);
|
||
|
||
if (ratetype == "rate")
|
||
{
|
||
if (groupRatio != 100)
|
||
{
|
||
errors.Add("组分配比例不是100%");
|
||
}
|
||
}
|
||
}
|
||
|
||
var users = new List<string>();
|
||
if (!string.IsNullOrEmpty(UserIds) && acttype == "user")
|
||
{
|
||
foreach (var item in UserIds.Split(','))
|
||
{
|
||
if (string.IsNullOrEmpty(item))
|
||
continue;
|
||
users.Add(item);
|
||
}
|
||
|
||
//usertype = 0,系统自动平均分配,比例这个值是0
|
||
if (usertype == 1)
|
||
{
|
||
if (grouptype == 1)
|
||
{
|
||
decimal rate = 0;
|
||
foreach (var item in users)
|
||
{
|
||
var subItem = item.Split('-');
|
||
rate += decimal.Parse(subItem[4].ToString());
|
||
}
|
||
if (ratetype == "rate")
|
||
{
|
||
if (rate != groupList.Count * 100)
|
||
{
|
||
errors.Add("分配比例不是100%");
|
||
return false;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (rate != groupRatio)
|
||
{
|
||
errors.Add("分配数量不正确");
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
decimal rate = 0;
|
||
foreach (var item in users)
|
||
{
|
||
var subItem = item.Split('-');
|
||
rate += decimal.Parse(subItem[4].ToString());
|
||
}
|
||
if (rate != 100)
|
||
{
|
||
errors.Add("分配比例不是100%");
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
using (var db = new crmContext())
|
||
{
|
||
var list = db.RES_SALESGROUP_DETAIL.Where(p => p.GROUPID == groupId && p.STRATEGY == strategy);
|
||
db.RES_SALESGROUP_DETAIL.RemoveRange(list);
|
||
|
||
if (users.Any())
|
||
{
|
||
foreach (var item in users)
|
||
{
|
||
//gid-uid-uname-eid-ratio
|
||
var subItem = item.Split('-');
|
||
var r = decimal.Parse(subItem[4].ToString());
|
||
if (ratetype == "rate")
|
||
{
|
||
r = r / 100;
|
||
}
|
||
var model = new RES_SALESGROUP_DETAIL()
|
||
{
|
||
PKID = new SEQUENCES_BL().Seq_base_get(),
|
||
GROUPID = groupId,
|
||
INNERUSERID = decimal.Parse(subItem[1].ToString()),
|
||
RESNUM = 0,
|
||
RESRATE = r,
|
||
EID = decimal.Parse(subItem[3].ToString()),
|
||
UNAME = subItem[2].ToString(),
|
||
GROUPTYPE = grouptype,
|
||
USERTYPE = usertype,
|
||
ACTTYPE = acttype,
|
||
RATETYPE = ratetype,
|
||
STRATEGY = strategy
|
||
};
|
||
if (grouptype == 1)
|
||
{
|
||
var gid = decimal.Parse(subItem[0].ToString());
|
||
var groupInfo = groupList.FirstOrDefault(p => p.GID == gid);
|
||
if (groupInfo == null)
|
||
{
|
||
errors.Add("找不到分组数据!");
|
||
throw new Exception("找不到分组数据!");
|
||
}
|
||
model.GID = groupInfo.GID;
|
||
model.GNAME = groupInfo.GNAME;
|
||
model.GROUPRATIO = groupInfo.GROUPRATIO;
|
||
if (ratetype == "rate")
|
||
{
|
||
model.GROUPRATIO = model.GROUPRATIO / 100;
|
||
}
|
||
}
|
||
db.RES_SALESGROUP_DETAIL.Add(model);
|
||
|
||
//var rateModel = new RES_SALESGROUP_RATE() { GROUPID = groupId, INNERUSERID = decimal.Parse(subItem[1].ToString()), RESRATE = r, EXETIME = DateTime.Now, UTIME = DateTime.Now };
|
||
//db.RES_SALESGROUP_RATE.Add(rateModel);
|
||
}
|
||
}
|
||
if (groupList.Any() && !users.Any())
|
||
{
|
||
foreach (var item in groupList)
|
||
{
|
||
var model = new RES_SALESGROUP_DETAIL()
|
||
{
|
||
PKID = new SEQUENCES_BL().Seq_base_get(),
|
||
GROUPID = groupId,
|
||
INNERUSERID = 0,
|
||
RESNUM = 0,
|
||
RESRATE = 0,
|
||
EID = 0,
|
||
UNAME = null,
|
||
GROUPTYPE = grouptype,
|
||
USERTYPE = usertype,
|
||
GID = item.GID,
|
||
GNAME = item.GNAME,
|
||
//GROUPRATIO = item.GROUPRATIO / 100,
|
||
ACTTYPE = acttype,
|
||
RATETYPE = ratetype,
|
||
STRATEGY = strategy
|
||
};
|
||
if (ratetype == "rate")
|
||
{
|
||
model.GROUPRATIO = model.GROUPRATIO / 100;
|
||
}
|
||
db.RES_SALESGROUP_DETAIL.Add(model);
|
||
}
|
||
}
|
||
|
||
db.SaveChanges();
|
||
return true;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
errors.Add(ex.Message);
|
||
LogHelper.Error(ex.ToString());
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public class tempGroup
|
||
{
|
||
public tempGroup(decimal gID, string gNAME, decimal gROUPRATIO)
|
||
{
|
||
GID = gID;
|
||
GNAME = gNAME;
|
||
GROUPRATIO = gROUPRATIO;
|
||
}
|
||
|
||
public decimal GID { get; set; }
|
||
public string GNAME { get; set; }
|
||
public decimal GROUPRATIO { get; set; }
|
||
}
|
||
}
|
||
}
|