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
{
///
/// 获取分组员工明细列表
///
///
///
public List 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();
}
}
///
///
///
///
///
/// 1257266195-1205676517-服务号测试-1013-0 gid-uid-uname-eid-ratio
///
/// 0:自动平均分配,1:按比例分配
/// 0:虚拟组(自定义组),1:跟组织结构相同
/// group:按组分配,组成员就不需要手动设置;user:按员工分配,组成员需要手工设置
///
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();
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();
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; }
}
}
}