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; } } } }