using Common; using MySql.Data.MySqlClient; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Mvc; using WX.CRM.BLL.Application.UserComBox; using WX.CRM.BLL.Base; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.Common.Layui; using WX.CRM.DAL; using WX.CRM.DAL.Ww; using WX.CRM.IBLL.Ww; using WX.CRM.Model.crmModel; using WX.CRM.Model.DTO; using WX.CRM.Model.Entity; using WX.CRM.Model.Enum; using WX.CRM.Model.Ww; namespace WX.CRM.BLL.Ww { public class Ww_huser_BL : IWw_huser { private Ww_huser_Dal _dal = new Ww_huser_Dal(); private WW_HHUSER_EID_ACT_BL _hhUserAct = new WW_HHUSER_EID_ACT_BL(); private CACHE_BL cache_BL = new CACHE_BL(); private BAS_BUSSINESSLINE_BL line_bl = new BAS_BUSSINESSLINE_BL(); public List Corp_Get() { return new Ww_huser_Dal().Corp_Get(); } public List Corp_GetByCompanyCode(string companycode) { List selectlist = new List(); var cropList = new Ww_huser_Dal().Corp_Get(); if (!string.IsNullOrEmpty(companycode)) { string companycodeFormat = string.Format("[{0}]", companycode); cropList = cropList.Where(m => m.companycode.Contains(companycodeFormat)).ToList(); } foreach (var item in cropList) { selectlist.Add(new Ww_CorpSelectItem { name = item.corpname, value = item.corpid }); } return selectlist; } /// /// 外部联系人单个获取 /// /// /// public Ww_Extuser ExtUserGet(string userid) { return new Ww_huser_Dal().ExtUserGet(userid); } /// /// 根据工号获取企业微信账号列表 /// /// /// public List WorkListGetByEid(decimal Eid, string name) { return new Ww_huser_Dal().WorkListGetByEid(Eid, name); } public List WorkListGetByNickName(string nickname, IList kfid = null) { return new Ww_huser_Dal().WorkListGet(nickname, "", "", kfid); } public List WorkListGetByUnionId(string unionid) { return new Ww_huser_Dal().WorkListGet("", unionid, ""); } public List WorkListGetByRemark(string remark, IList kfid = null) { return new Ww_huser_Dal().WorkListGet("", "", remark, kfid); } public Ww_hhuser HHuser_Get(string userid) { return new Ww_huser_Dal().HHuser_Get(userid); } public Ww_hhuser HHuser_Get(string userid, string corpid) { return new Ww_huser_Dal().HHuser_Get(userid, corpid); } /// /// 获取企业微信成员列表 /// /// /// /// /// public List WorList_Get(ref Laypage page, Ww_IndexQueryModel dto) { List ALLdeptIDS = new List(); List ALLgidS = new List(); if (!string.IsNullOrEmpty(dto.txt_deptId)) { var depts = OperationUtil.ConvertToDecimal(dto.txt_deptId.Split(',')); UserServices userservices = new UserServices(cache_BL); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid ALLdeptIDS.AddRange(deptIDS); ALLgidS.AddRange(gidS); } } return new Ww_huser_Dal().WorList_Get(ref page, dto, ALLdeptIDS, ALLgidS); } public List MyWeUser_Get(ref Laypage page, MyWeUserDto myWeUserDto) { List ALLdeptIDS = new List(); List ALLgidS = new List(); if (!string.IsNullOrEmpty(myWeUserDto.txt_deptId)) { var depts = OperationUtil.ConvertToDecimal(myWeUserDto.txt_deptId.Split(',')); UserServices userservices = new UserServices(cache_BL); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid ALLdeptIDS.AddRange(deptIDS); ALLgidS.AddRange(gidS); } } return new Ww_huser_Dal().MyWeUser_Get(ref page, myWeUserDto, ALLdeptIDS, ALLgidS); } public List WorList_GetByName(ref Laypage page, MyWeUserDto dto) { /*List ALLdeptIDS = new List(); List ALLgidS = new List(); if (!string.IsNullOrEmpty(dto.txt_deptId)) { var depts = OperationUtil.ConvertToDecimal(dto.txt_deptId.Split(',')); UserServices userservices = new UserServices(cache_BL); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid ALLdeptIDS.AddRange(deptIDS); ALLgidS.AddRange(gidS); } }*/ var corpList = Corp_Get(); List corpSeftList = new List(); List deptFilter = new List(); List corpFilter = new List(); string filter = ""; var busineeLine = line_bl.GetBusinessLineByRoot(dto.txt_userId.Value); MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); if (busineeLine.Count > 0) { foreach (var line in busineeLine) { string companycodeFormat = string.Format("[{0}]", line.COMPANYCODE); var item = corpList.Where(m => m.companycode.Contains(companycodeFormat)).ToList(); foreach (var obj in item) { if (!string.IsNullOrEmpty(obj.deptid)) { JObject deptList = (JObject)Newtonsoft.Json.Linq.JObject.Parse(obj.deptid); var companyDept = deptList[line.COMPANYCODE].ToString(); if (!string.IsNullOrWhiteSpace(companyDept)) { int[] deptids = Newtonsoft.Json.JsonConvert.DeserializeObject(companyDept); var childDept = new Ww_huser_Dal().GetAllCildDept(helper, deptids, obj.corpid); if (childDept.Count() > 0) { if (filter == "") { filter += $" and ((a.corpid = '{obj.corpid}' and a.deptid in ({string.Join(",", childDept)}))"; } else { filter += $" or (a.corpid = '{obj.corpid}' and a.deptid in ({string.Join(",", childDept)}))"; } } } } else { corpFilter.Add(obj.corpid); } } } if (corpFilter.Count > 0) { if (filter == "") { filter += $" and ((a.corpid in ({string.Join(",", corpFilter.Select(n => $"'{n}'"))}))"; } else { filter += $" or (a.corpid in ({string.Join(",", corpFilter.Select(n => $"'{n}'"))}))"; } } } List corp = new List(); List parameters = new List(); string sql = @"select a.corpid,a.deptid,b.corpname,'' exinfo ,a.uname,a.userid,a.lmsgtime,a.mobile,a.email,c.deptname from ww_hhuser a join ww_corp b on a.corpid = b.corpid left join ww_dept c on a.deptid=c.deptid and a.corpid=c.corpid where 1=1"; string where = ""; if (!string.IsNullOrWhiteSpace(filter)) { where += $" {filter})"; } List ls = new List();//企业微信 和 员工绑定关系 using (var db = new crmContext()) { var queryData = db.WW_HHUSER_EID.AsQueryable(); /*if (!string.IsNullOrEmpty(dto.txt_deptId)) { queryData = queryData.Where(n => ALLdeptIDS.Contains(n.DEPTID.Value)); var useridFilter = queryData.Select(n => "'" + n.USERID + "'").ToList(); if (useridFilter.Count > 0) { where += $" and (a.userid in ({string.Join(",", useridFilter)}))"; } }*/ if (!string.IsNullOrEmpty(dto.name)) { where += " and (a.uname like @uname or a.mobile like @uname)"; parameters.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "uname", Value = string.Format("%{0}%", dto.name) }); } if (!string.IsNullOrEmpty(dto.id)) { queryData = queryData.Where(n => n.USERID == dto.id); where += " and (a.userid like @uname)"; parameters.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "uname", Value = string.Format("%{0}%", dto.id) }); } ls = queryData.ToList(); } sql += where + " order by a.lmsgtime desc limit 0,100";//查询列表 var set = helper.ExecuteDataTable(sql, parameters.ToArray()); List orderCorp = new List(); foreach (DataRow item in set.Tables[0].Rows) { Ww_hhuserModel model = new Ww_hhuserModel(); model.corpid = item["corpid"].ToString(); model.corpname = item["corpname"].ToString(); if (item["deptid"] != DBNull.Value) model.deptid = Convert.ToInt32(item["deptid"]); model.exinfo = item["exinfo"].ToString(); if (item["lmsgtime"] != DBNull.Value) model.lmsgtime = Convert.ToDateTime(item["lmsgtime"]); model.userid = item["userid"].ToString(); model.uname = item["uname"].ToString(); model.mobile = item["mobile"].ToString(); model.email = item["email"].ToString(); model.deptname = item["deptname"].ToString(); WW_HHUSER_EID huid = ls.FirstOrDefault(m => m.USERID == model.userid && m.CORPID == model.corpid); if (huid != null) { model.eid = huid.EID; model.assignStatus = huid.ASSIGNSTATUS.HasValue ? Convert.ToInt32(huid.ASSIGNSTATUS) : 0; model.assignStatusName = EnumHelper.GetEnumDescription((AssignstatusEnum)model.assignStatus); model.errorcode = huid.ERRORCODE.HasValue ? Convert.ToInt32(huid.ERRORCODE) : (int?)null; } corp.Add(model);//如果显示全部,就全部显示 } return corp; } /// /// 选择企微流转资源 /// /// /// /// public List WxResourceList_GetByName(ref Laypage page, MyWeUserDto dto) { List corp = new List(); List ALLdeptIDS = new List(); List ALLgidS = new List(); if (!string.IsNullOrEmpty(dto.txt_deptId)) { var depts = OperationUtil.ConvertToDecimal(dto.txt_deptId.Split(',')); UserServices userservices = new UserServices(cache_BL); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid ALLdeptIDS.AddRange(deptIDS); ALLgidS.AddRange(gidS); } } using (var db = new crmContext()) { //1005730 不排除无工号的员工,然后排除非本事业线的员工 //var queryData = db.WW_HHUSER_EID.Where(n => n.EID.HasValue && n.EID > 0).AsQueryable(); var queryData = db.WW_HHUSER_EID.AsQueryable(); if (!string.IsNullOrWhiteSpace(dto.corp)) { queryData = queryData.Where(n => n.CORPID == dto.corp); } if (!string.IsNullOrEmpty(dto.txt_groupIds)) { var _groupids = OperationUtil.ConvertToDecimal(dto.txt_groupIds.Split(',')); queryData = (from a in queryData join b in db.BAS_INNERUSERGROUP on a.INNERUSERID equals b.INNERUSERID where _groupids.Contains(b.GID.Value) select a); } else if (!string.IsNullOrEmpty(dto.txt_deptId)) { queryData = (from a in queryData join b in db.BAS_INNERUSERGROUP on a.INNERUSERID equals b.INNERUSERID //join g in db.BAS_INNERGROUP on b.GID equals g.GID where ALLdeptIDS.Contains(b.DEPTID.Value) || ALLgidS.Contains(b.GID.Value) select a); } if (!string.IsNullOrEmpty(dto.name)) { decimal userEid = -1; Decimal.TryParse(dto.name, out userEid); var user = db.BAS_INNERUSER.FirstOrDefault(n => n.EID == userEid || n.UNAME.Contains(dto.name)); queryData = queryData.Where(n => n.INNERUSERID == user.PKID); } if (!string.IsNullOrWhiteSpace(dto.id)) { queryData = queryData.Where(n => n.USERID == dto.id); } page.count = queryData.Count(); queryData = queryData.OrderBy(n => n.CTIME); var data = queryData.Skip((page.page - 1) * page.limit).Take(page.limit).ToList();//重新分页 if (data.Count > 0) { var userpkids = data.Select(s => s.INNERUSERID).ToList(); var userList = db.BAS_INNERUSER.Where(n => userpkids.Contains(n.PKID)).ToList(); var userids = data.Select(n => $"'{n.USERID}'"); MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); string sql = @"select a.corpid,a.deptid,b.corpname,'' exinfo ,a.uname,a.userid,a.lmsgtime,a.mobile,a.email,c.deptname from ww_hhuser a join ww_corp b on a.corpid = b.corpid left join ww_dept c on a.deptid=c.deptid and a.corpid=c.corpid where 1=1"; string where = ""; List parameters = new List(); if (!string.IsNullOrEmpty(dto.corp)) { where += " and a.corpid = @corp "; parameters.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "corp", Value = string.Format("{0}", dto.corp) }); } if (!string.IsNullOrEmpty(dto.mobile)) { where += " and (a.mobile like @mobile)"; parameters.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "mobile", Value = string.Format("%{0}%", dto.mobile) }); } else if (userids.Count() > 0) { where += $" and a.userid in ({string.Join(",", userids)})"; //parameters.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "userids", Value = string.Format("{0}", string.Join(",",userids)) }); } sql += where; var set = helper.ExecuteDataTable(sql, parameters.ToArray()); List orderCorp = new List(); foreach (DataRow item in set.Tables[0].Rows) { Ww_hhuserModel model = new Ww_hhuserModel(); model.corpid = item["corpid"].ToString(); model.corpname = item["corpname"].ToString(); if (item["deptid"] != DBNull.Value) model.deptid = Convert.ToInt32(item["deptid"]); model.exinfo = item["exinfo"].ToString(); if (item["lmsgtime"] != DBNull.Value) model.lmsgtime = Convert.ToDateTime(item["lmsgtime"]); model.userid = item["userid"].ToString(); model.uname = item["uname"].ToString(); model.mobile = item["mobile"].ToString(); model.email = item["email"].ToString(); model.deptname = item["deptname"].ToString(); WW_HHUSER_EID huid = data.FirstOrDefault(m => m.USERID == model.userid && m.CORPID == model.corpid); if (!string.IsNullOrEmpty(dto.mobile)) { huid = db.WW_HHUSER_EID.FirstOrDefault(m => m.USERID == model.userid && m.CORPID == model.corpid); } //1005730 不排除无工号的员工,然后排除非本事业线的员工 //if (huid != null && huid.EID >0) if (huid != null) { var user = userList.FirstOrDefault(n => n.PKID == huid.INNERUSERID); model.eid = huid.EID; model.ename = user?.UNAME; model.eidAndName = $"{model.eid}-{model.ename}";//工号姓名 model.assignStatus = huid.ASSIGNSTATUS.HasValue ? Convert.ToInt32(huid.ASSIGNSTATUS) : 0; model.assignStatusName = EnumHelper.GetEnumDescription((AssignstatusEnum)model.assignStatus); model.errorcode = huid.ERRORCODE.HasValue ? Convert.ToInt32(huid.ERRORCODE) : (int?)null; corp.Add(model);//如果显示全部,就全部显示 } } } } return corp; } public List SelfWorList_Get(ref Laypage page, MyWeUserDto myWeUserDto) { List res = new List(); using (var db = new crmContext()) { var queryData = db.WW_HHUSER_EID.AsQueryable(); queryData = queryData.Where(n => n.INNERUSERID != 0 || n.DEPTID.HasValue); if (myWeUserDto.txt_userId.HasValue) { queryData = queryData.Where(m => m.INNERUSERID == myWeUserDto.txt_userId); } if (!string.IsNullOrEmpty(myWeUserDto.txt_groupIds)) { var _groupids = OperationUtil.ConvertToDecimal(myWeUserDto.txt_groupIds.Split(',')); queryData = (from a in queryData join b in db.BAS_INNERUSERGROUP on a.INNERUSERID equals b.INNERUSERID where _groupids.Contains(b.GID.Value) select a); } else if (!string.IsNullOrEmpty(myWeUserDto.txt_deptId)) { var depts = OperationUtil.ConvertToDecimal(myWeUserDto.txt_deptId.Split(',')); List ALLdeptIDS = new List(); List ALLgidS = new List(); UserServices userservices = new UserServices(cache_BL); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid ALLdeptIDS.AddRange(deptIDS); ALLgidS.AddRange(gidS); } queryData = queryData.Where(n => ALLdeptIDS.Contains(n.DEPTID.Value)); } MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); if (!string.IsNullOrEmpty(myWeUserDto.name)) { var nameSql = "select userid,corpid from ww_hhuser a where (a.uname like @uname or a.userid like @uname or a.mobile like @uname)"; List parameters = new List(); parameters.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "uname", Value = string.Format("%{0}%", myWeUserDto.name) }); var set = helper.QueryEntitys(nameSql, parameters.ToArray()); var useridFilter = set.Select(m => m.userid).ToList(); queryData = queryData.Where(n => useridFilter.Contains(n.USERID)); } queryData = queryData.OrderByDescending(n => n.CTIME); page.count = queryData.Count(); var data = queryData.Skip((page.page - 1) * page.limit).Take(page.limit).ToList();//重新分页 if (data.Count == 0) { return res; } //var userfilter = data.Select(n => n.INNERUSERID).ToList(); var userList = cache_BL.GetUserList(); var deptList = cache_BL.GetList_SalesDepartMent(); var corpFilter = string.Join(",", data.Select(n => $"'{n.CORPID}'").Distinct().ToList()); string sql = $@"select a.corpid,b.corpname,a.uname, a.userid,a.lmsgtime,a.mobile,a.email from ww_hhuser a join ww_corp b on a.corpid = b.corpid where 1=1 and b.corpid in ({corpFilter})"; var dbList = helper.QueryEntitys(sql); foreach (var item in data) { SelfWw_hhuserModel model = new SelfWw_hhuserModel(); var dbItem = dbList.FirstOrDefault(n => n.userid == item.USERID); var user = userList.FirstOrDefault(n => n.PKID == item.INNERUSERID); var dept = deptList.FirstOrDefault(n => n.SALEDEPTID == item.DEPTID); if (dbItem != null) { dbItem.bindTime = item.CTIME; dbItem.assignStatus = item.ASSIGNSTATUS.HasValue ? Convert.ToInt32(item.ASSIGNSTATUS) : 0; dbItem.assignStatusName = EnumHelper.GetEnumDescription((AssignstatusEnum)dbItem.assignStatus); dbItem.eid = item.EID; if (user != null) { dbItem.eidAndName = $"{user.UNAME}-{item.EID}"; } if (dept != null) { dbItem.eidAndName += $"({dept.DEPTNAME})"; } res.Add(dbItem); } } } return res; } public Dictionary> GetAllCorpDept(string companycode) { return new Ww_huser_Dal().GetAllCorpDept(companycode); } public List GeExtUsertList(string corpid, string name, ref Pager pager) { return new Ww_huser_Dal().GeExtUsertList(corpid, name, ref pager); } public WW_HHUSER_EID GetModel(string userid, string corp) { using (var db = new crmContext()) { return db.WW_HHUSER_EID.FirstOrDefault(m => m.CORPID == corp && m.USERID == userid); } } /// /// 根据客服ID /// /// /// public List GetUserList(params decimal[] userid) { using (var db = new crmContext()) { return db.WW_HHUSER_EID.Where(m => userid.Contains(m.INNERUSERID)).ToList(); } } /// /// 根据客服的企微ID /// /// /// public List GetUserListByQWUserId(params string[] userid) { using (var db = new crmContext()) { if (userid == null || userid.Length == 0) return new List(); return db.WW_HHUSER_EID.Where(m => userid.Contains(m.USERID)).ToList(); } } /// /// 设置工号 /// /// /// /// /// /// public bool SetEid(decimal eid, string userid, string corp, decimal? status, ref ValidationErrors erro, bool isCms = false) { bool isok = false; try { using (var db = new crmContext()) { var model = db.WW_HHUSER_EID.FirstOrDefault(m => m.CORPID == corp && m.USERID == userid); var user = db.BAS_INNERUSER.FirstOrDefault(m => m.EID == eid && m.ISDISMISS == 0); if (user == null) { if (user == null || user.ISDISMISS == 1) { erro.Add("员工已离职,无法进行推广!"); return false; } } var userGroup = db.BAS_INNERUSERGROUP.FirstOrDefault(m => m.INNERUSERID == user.PKID); if (model == null) { model = new WW_HHUSER_EID() { CORPID = corp, EID = eid, USERID = userid, INNERUSERID = user.PKID, DEPTID = userGroup?.DEPTID, CTIME = DateTime.Now }; if (status.HasValue) { model.ASSIGNSTATUS = status; } db.WW_HHUSER_EID.Add(model); } else { model.EID = eid; model.INNERUSERID = user.PKID; model.CTIME = DateTime.Now; model.DEPTID = userGroup == null ? model.DEPTID : userGroup?.DEPTID; if (status.HasValue) { model.ASSIGNSTATUS = status; } } ///来自cms的不进行同步 if (!isCms) { db.WW_HHUSER_EID_ACT.Add(new WW_HHUSER_EID_ACT(new SEQUENCES_BL().Seq_base_get(Model.Enum.PKIDType.LargeTable), model.CORPID, model.USERID, Convert.ToInt32(model.EID), status, "addOrupdate")); } db.SaveChanges(); isok = true; } } catch (Exception e) { LogHelper.Error(e.ToString()); erro.Add(e.ToString()); } return isok; } public bool BatchChangeEid(decimal eid, string data, ref ValidationErrors erro) { bool isok = false; try { using (var db = new crmContext()) { var user = db.BAS_INNERUSER.FirstOrDefault(m => m.EID == eid); if (user == null || user.ISDISMISS == 1) { erro.Add("员工已离职,无法进行转绑!"); return false; } var userLine = line_bl.GetBusinessLineByRoot(user.PKID); var userGroup = db.BAS_INNERUSERGROUP.FirstOrDefault(m => m.INNERUSERID == user.PKID); var list = data.Split(';').Where(n => !string.IsNullOrWhiteSpace(n)).ToList(); List failIds = new List(); foreach (var item in list) { var corp = item.Split(':').FirstOrDefault(); var userid = item.Split(':').LastOrDefault(); var model = db.WW_HHUSER_EID.FirstOrDefault(m => m.CORPID == corp && m.USERID == userid); if (model != null) { List oldLine = new List(); if (model.INNERUSERID != 0) { oldLine = line_bl.GetBusinessLineByRoot(model.INNERUSERID); } else if (model.DEPTID.HasValue) { oldLine = line_bl.GetBusineeLineByDeptId(model.DEPTID.Value); } if (oldLine.Count > 0 && userLine.Intersect(oldLine).Count() <= 0) { failIds.Add(model.USERID); continue; } model.EID = eid; model.INNERUSERID = user.PKID; model.DEPTID = userGroup == null ? model.DEPTID : userGroup?.DEPTID; model.CTIME = DateTime.Now; db.WW_HHUSER_EID_ACT.Add(new WW_HHUSER_EID_ACT(new SEQUENCES_BL().Seq_base_get(Model.Enum.PKIDType.LargeTable), model.CORPID, model.USERID, Convert.ToInt32(model.EID), 0, "changeEid")); } } db.SaveChanges(); isok = true; if (failIds.Count > 0) { erro.Add($"【{string.Join(",", failIds)}不能跨事业部绑定】"); if (failIds.Count == list.Count) { isok = false; } } } } catch (Exception e) { LogHelper.Error(e.ToString()); erro.Add(e.ToString()); } return isok; } /// /// /// /// /// /// 0 解绑 1绑定 /// public bool ClearEid(List list, decimal userId, ref ValidationErrors error) { var hasChange = false; using (var db = new crmContext()) { try { List failIds = new List(); var user = db.BAS_INNERUSER.FirstOrDefault(n => n.PKID == userId); var eid = user == null ? 0 : user.EID; var userGroup = db.BAS_INNERUSERGROUP.FirstOrDefault(n => n.INNERUSERID == userId); var useridFilter = list.Select(n => n.userid).ToList(); var dbList = db.WW_HHUSER_EID.Where(n => useridFilter.Contains(n.USERID)).ToList(); foreach (var obj in list) { var item = dbList.FirstOrDefault(n => n.USERID == obj.userid && n.CORPID == obj.corpid); if (item != null && item.EID > 0 && item.EID != eid && eid > 0) { failIds.Add(item.USERID); continue; } hasChange = true; if (item != null) { item.EID = eid; item.INNERUSERID = userId; item.DEPTID = userGroup == null ? item.DEPTID : userGroup.DEPTID; } else { WW_HHUSER_EID newModel = new WW_HHUSER_EID() { CORPID = obj.corpid, EID = eid, USERID = obj.userid, INNERUSERID = userId, DEPTID = userGroup?.DEPTID, CTIME = DateTime.Now }; db.WW_HHUSER_EID.Add(newModel); } db.WW_HHUSER_EID_ACT.Add(new WW_HHUSER_EID_ACT(new SEQUENCES_BL().Seq_base_get(Model.Enum.PKIDType.LargeTable), obj.corpid, obj.userid, eid, 0, "changeEid")); } db.SaveChanges(); if (failIds.Count > 0) { error.Add($"{string.Join(",", failIds)}需要解绑后才能操作"); } } catch (Exception ex) { LogHelper.Error($"解绑失败{ex.Message}"); return false; } } return hasChange; } /// /// 批量设置推广状态 /// /// public bool BatchUpdateStatus(Ww_BatchStatus postData, ref ValidationErrors erro) { try { using (var db = new crmContext()) { var filter = postData.Data.Trim(';').Split(';').ToList(); foreach (var f in filter) { var cropid = f.Split(':').FirstOrDefault(); var userid = f.Split(':').LastOrDefault(); var model = db.WW_HHUSER_EID.FirstOrDefault(m => m.CORPID == cropid && m.USERID == userid); /* var user = db.BAS_INNERUSER.FirstOrDefault(m => m.EID == eid); if (postData.AssignStatus != 0) { if (user == null || user.ISDISMISS == 1) { erro.Add("员工已离职,无法进行推广!"); return false; } }*/ if (model == null) { model = new WW_HHUSER_EID() { CORPID = cropid, EID = 0, USERID = userid, CTIME = DateTime.Now, ASSIGNSTATUS = postData.AssignStatus }; db.WW_HHUSER_EID.Add(model); } else { model.CTIME = DateTime.Now; model.ASSIGNSTATUS = postData.AssignStatus; } db.WW_HHUSER_EID_ACT.Add(new WW_HHUSER_EID_ACT(new SEQUENCES_BL().Seq_base_get(Model.Enum.PKIDType.LargeTable), model.CORPID, model.USERID, Convert.ToInt32(model.EID), postData.AssignStatus, "addOrupdate")); db.SaveChanges(); } } return true; } catch (Exception ex) { LogHelper.Error(ex); return false; } } public bool SetAssignStatus(AssignStatusDto dto) { try { using (var db = new crmContext()) { var model = db.WW_HHUSER_EID.FirstOrDefault(m => m.CORPID == dto.appid && m.USERID == dto.userid); if (model != null) { //model.ASSIGNSTATUS = dto.assignstatusstatus; model.STATUS = dto.status; model.ERRORCODE = dto.errcode; model.CTIME = DateTime.Now; //把通知记录删掉 var notice = db.WW_HHUSER_EID_NOTICE.Where(n => n.USERID == dto.userid).FirstOrDefault(); if (notice != null) { db.WW_HHUSER_EID_NOTICE.Remove(notice); } db.SaveChanges(); return true; } else { LogHelper.Info("不能找到数据:" + dto.ToJson()); } } return true; } catch (Exception ex) { LogHelper.Error(ex); return false; } } /// /// 获取企业合规的关键词 /// /// public List GetKeyWordAll() { return new Ww_huser_Dal().GetKeyWordAll(); } /// /// 修改关键字 /// /// /// public bool UpdateKeyWord(Hg_KeyWordAllModel model, ref string message) { return new Ww_huser_Dal().UpdateKeyWord(model, ref message); } public bool SetKeyWords(string keywords, ref ValidationErrors erro) { return new Ww_huser_Dal().SetKeyWords(keywords, ref erro); } public List GetHg_Message(ref Pager pager, string userNames, DateTime? msgstime, DateTime? msgetime, DateTime? stime, DateTime? etime, string keyword, string kefid, string userid, int? status) { return new Ww_huser_Dal().GetHg_Message(ref pager, userNames, msgstime, msgetime, stime, etime, keyword, kefid, userid, status); } /// /// 将合规信息修改成已读 /// /// /// public bool Read(string msgid) { return new Ww_huser_Dal().Read(msgid); } /// /// 根据msgid获取 违规关键字 /// /// /// public List GetMsgWordList(params string[] msgids) { return new Ww_huser_Dal().GetMsgWordList(msgids); } /// /// 已经违规 /// /// /// public bool Violations(string msgid) { return new Ww_huser_Dal().Violations(msgid); } /// /// 获取单条数据 /// /// /// public Hg_MessageModel GetMsgById(string msgid) { return new Ww_huser_Dal().GetMsgById(msgid); } public Ww_Extuser GetExtUserByUnionId(string unionid) { return _dal.GetExtUserByUnionId(unionid); } public List GetUserExtUserByUserId(string userid) { return _dal.GetUserExtUserByUserId(userid); } private static bool islock = false; private static object noticeLock = new object(); /// /// 3 为删除 4 为暂停 /// /// /// public List GetWxStatusNotice(int type) { List res = new List(); string cacheKey = $"cache_GetQiWeList{type}"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); if (islock) { //被锁了返回 return res; } lock (noticeLock) { if (islock) { LogHelper.Info($"【{type}】was innerlocked "); return res; } islock = true; using (var db = new crmContext()) { var nowTime = DateTime.Now.Date; var roleName = cache_BL.GetValue_Parameter("Sys_QiWeNoticeUser"); if (string.IsNullOrWhiteSpace(roleName)) { return res; } //取缓存 var roleList = cache_BL.GetList_Role(); var userRoleList = cache_BL.GetUserRole(); //根据角色来找 var noticeList = from n in db.WW_HHUSER_EID join b in db.WW_HHUSER_EID_NOTICE on n.USERID equals b.USERID into bs where n.CTIME > nowTime && n.STATUS == type from ur in bs.DefaultIfEmpty() select new { USERID = n.USERID, EID = ur.INNERUSERID }; var notices = noticeList.ToList(); var roleFilter = roleName.Split(',').ToList(); var roleUser = from n in roleList join b in userRoleList on n.ROLEID equals b.ROLEID where roleFilter.Contains(n.RNAME) select b.INNERUSERID; //通知群体 var userList = roleUser.ToList(); foreach (var user in userList) { foreach (var task in notices) { if (!task.EID.HasValue) { res.Add(new Ww_NoticeModel { InnerUserId = user, UserId = task.USERID, }); } } } CacheHelper.Set(cacheKey, res, DateTime.Now.AddSeconds(120), true); } islock = false; } return res; } public void UpdateWxStatusNotice(string filter, decimal userId, int? type) { var userList = filter.Split(';').ToList(); using (var db = new crmContext()) { try { userList = userList.Distinct().ToList(); foreach (var item in userList) { var exitModel = db.WW_HHUSER_EID_NOTICE.FirstOrDefault(n => n.USERID == item && n.INNERUSERID == userId && n.NOTICETYPE == type); if (exitModel != null) { continue; } WW_HHUSER_EID_NOTICE newItem = new WW_HHUSER_EID_NOTICE { USERID = item, INNERUSERID = userId, CTIME = DateTime.Now, NOTICETYPE = type }; db.WW_HHUSER_EID_NOTICE.Add(newItem); } db.SaveChanges(); } catch (Exception ex) { LogHelper.Error($"刷新企微通知失败{ex.Message}"); } } } } }