using Common; using MySql.Data.MySqlClient; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Linq; using WX.CRM.Common; using WX.CRM.Common.Layui; using WX.CRM.Model.crmModel; using WX.CRM.Model.Entity; using WX.CRM.Model.Enum; using WX.CRM.Model.Ww; namespace WX.CRM.DAL.Ww { public class wwUserinfoExinfo { public string thumb_avatar { get; set; } public string avatar { get; set; } } public class Ww_huser_Dal { public List GeExtUsertList(string corpid, string name, ref Pager pager) { List corp = new List(); try { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); List parameters = new List(); string sql = @"select sql_calc_found_rows userid,corpid,ctime,name,avatar,unionid from ww_extuser where 1=1"; if (!string.IsNullOrEmpty(corpid)) { sql += " and corpid in(" + corpid + ")"; } if (!string.IsNullOrEmpty(name)) { sql += " and ( name like @name or exinfo like @name )"; parameters.Add(new MySqlParameter() { DbType = DbType.String, Value = string.Format("%{0}%", name), ParameterName = "name" }); } sql += " order by ctime desc limit @pageIndex,@pageSize;select found_rows() scc; "; parameters.Add(new MySqlParameter() { DbType = DbType.Int32, Value = pager.rows * (pager.page - 1), ParameterName = "pageIndex" }); parameters.Add(new MySqlParameter() { DbType = DbType.Int32, Value = pager.rows, ParameterName = "pageSize" }); DataSet table = helper.ExecuteDataTable(sql, parameters.ToArray()); foreach (DataRow item in table.Tables[0].Rows) { Ww_Extuser model = new Ww_Extuser(); model.avatar = item["avatar"].ToString(); model.corpid = item["corpid"].ToString(); model.ctime = Convert.ToDateTime(item["ctime"]); model.name = item["name"].ToString(); model.userid = item["userid"].ToString(); model.unionid = item["unionid"].ToString(); corp.Add(model); } pager.totalRows = Convert.ToInt32(table.Tables[1].Rows[0]["scc"]); } catch (Exception e) { throw; } return corp; } public List Corp_Get() { List corp = new List(); try { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); List parameters = new List(); DataTable table = helper.ExecuteDataTable("select corpid,corpname,companycode,deptid from ww_corp", parameters.ToArray()).Tables[0]; foreach (DataRow item in table.Rows) { Ww_Corp model = new Ww_Corp(); model.corpid = item["corpid"].ToString(); model.corpname = item["corpname"].ToString(); model.companycode = item["companycode"].ToString(); model.deptid = item["deptid"].ToString(); corp.Add(model); } } catch (Exception e) { throw; } return corp; } public Ww_hhuser HHuser_Get(string userid) { Ww_hhuser model = null; try { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); List parameters = new List() { new MySqlParameter() { DbType = DbType.String, Value = userid, ParameterName = "userid" } }; DataTable table = helper.ExecuteDataTable("select userid,corpid,uname,exinfo,lmsgtime,deptid,fmsgtime,lastupdate,alias,mobile,email from ww_hhuser where userid=@userid;", parameters.ToArray()).Tables[0]; foreach (DataRow item in table.Rows) { model = new Ww_hhuser(); model.corpid = item["corpid"].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.uname = item["uname"].ToString(); model.userid = item["userid"].ToString(); } } catch (Exception e) { throw; } return model; } public Ww_hhuser HHuser_Get(string userid, string corpid) { Ww_hhuser model = null; try { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); List parameters = new List() { new MySqlParameter() { DbType = DbType.String, Value = userid, ParameterName = "userid" } , new MySqlParameter() { DbType = DbType.String, Value = corpid, ParameterName = "corpid" } }; DataTable table = helper.ExecuteDataTable("select userid,corpid,uname,exinfo,lmsgtime,deptid,fmsgtime,lastupdate,alias,mobile,email from ww_hhuser where userid=@userid and corpid=@corpid;", parameters.ToArray()).Tables[0]; foreach (DataRow item in table.Rows) { model = new Ww_hhuser(); model.corpid = item["corpid"].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.uname = item["uname"].ToString(); model.userid = item["userid"].ToString(); } } catch (Exception e) { throw; } return model; } public Ww_Extuser ExtUserGet(string userid) { Ww_Extuser model = null; try { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); List parameters = new List() { new MySqlParameter() { DbType = DbType.String, Value = userid, ParameterName = "userid" } }; DataTable table = helper.ExecuteDataTable(@" SELECT userid, corpid, ctime, lastupdate, errnums, name, avatar, remoteid, exinfo, unionid FROM ww_extuser where userid = @userid", parameters.ToArray()).Tables[0]; foreach (DataRow item in table.Rows) { model = new Ww_Extuser(); model.userid = item["userid"].ToString(); model.corpid = item["corpid"].ToString(); model.name = item["name"].ToString(); model.avatar = item["avatar"].ToString(); if (item["ctime"] != DBNull.Value) model.ctime = Convert.ToDateTime(item["ctime"]); model.exinfo = item["exinfo"].ToString(); model.unionid = item["unionid"].ToString(); if (item["lastupdate"] != DBNull.Value) model.lastupdate = Convert.ToDateTime(item["lastupdate"]); } } catch (Exception e) { throw; } return model; } public List WorkListGet(string nickname, string unionid, string remark, IList kfid = null) { List corp = new List(); try { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); List parameters = new List(); string sql = @"select distinct a.* from ww_extuser a inner join ww_user_extuser b on a.corpid=b.corpid and a.userid=b.extuserid where 1=1"; if (kfid != null && kfid.Count() > 0) { sql += " and b.userid in ('" + string.Join("','", kfid) + "')"; } if (!string.IsNullOrEmpty(nickname)) { sql += " and a.name = @nickname"; parameters.Add(new MySqlParameter() { DbType = DbType.String, Value = nickname, ParameterName = "nickname" }); } if (!string.IsNullOrEmpty(unionid)) { sql += " and (a.unionid = @unionid or a.userid=@unionid)"; parameters.Add(new MySqlParameter() { DbType = DbType.String, Value = unionid, ParameterName = "unionid" }); } if (!string.IsNullOrEmpty(remark)) { sql += " and b.remark like @remark"; parameters.Add(new MySqlParameter() { DbType = DbType.String, Value = string.Format("%{0}%", remark), ParameterName = "remark" }); } DataSet table = helper.ExecuteDataTable(sql, parameters.ToArray()); foreach (DataRow item in table.Tables[0].Rows) { Ww_Extuser model = new Ww_Extuser(); model.avatar = item["avatar"].ToString(); model.corpid = item["corpid"].ToString(); model.ctime = Convert.ToDateTime(item["ctime"]); model.name = item["name"].ToString(); model.userid = item["userid"].ToString(); model.unionid = item["unionid"].ToString(); corp.Add(model); } } catch (Exception e) { throw; } return corp; } /// /// 根据工号获取企业微信账号列表 /// /// /// public List WorkListGetByEid(decimal Eid, string name) { List hhuserList = new List(); using (var db = new crmContext()) { var list = db.WW_HHUSER_EID.Where(m => m.EID == Eid); MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); List parameters = new List(); string sql = ""; int i = 0; foreach (var item in list) { i++; if (i == 1) sql += $@"select a.corpid,a.deptid,b.corpname,a.exinfo ,a.uname,a.userid,a.lmsgtime,a.mobile,a.email from ww_hhuser a join ww_corp b on a.corpid = b.corpid where a.userid=@userid{i} and a.corpid=@corpid{i} "; else sql += $@"union select a.corpid,a.deptid,b.corpname,a.exinfo ,a.uname,a.userid,a.lmsgtime,a.mobile,a.email from ww_hhuser a join ww_corp b on a.corpid = b.corpid where a.userid=@userid{i} and a.corpid=@corpid{i} "; if (!string.IsNullOrEmpty(name)) { sql += " and (a.uname like @name or a.mobile like @name or a.userid like @name) "; } parameters.Add(new MySqlParameter() { ParameterName = $"userid{i}", Value = item.USERID }); parameters.Add(new MySqlParameter() { ParameterName = $"corpid{i}", Value = item.CORPID }); } if (!string.IsNullOrEmpty(name)) { parameters.Add(new MySqlParameter() { ParameterName = $"name", Value = $"%{name}%" }); } if (string.IsNullOrWhiteSpace(sql)) return hhuserList; 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(); try { var json = JsonConvert.DeserializeObject(item["exinfo"].ToString()); if (json != null) { model.thumb_avatar = json.thumb_avatar ?? json.avatar; } } catch (Exception e) { } model.exinfo = ""; hhuserList.Add(model);//加了组织结构过滤条件 } } return hhuserList; } /// /// 获取企业微信成员列表 /// /// /// /// /// public List WorList_Get(ref Laypage page, Ww_IndexQueryModel dto, List ALLdeptIDS, List ALLgidS) { List corp = new List(); List ls = new List();//企业微信 和 员工绑定关系 List myuserIdList = new List(); try { bool isShowAll = true; bool beside = false; using (var db = new crmContext()) { var queryData = db.WW_HHUSER_EID.AsQueryable(); if (!string.IsNullOrWhiteSpace(dto.fiterUser)) { var userfilter = dto.fiterUser.Split(';').ToList(); queryData = queryData.Where(m => userfilter.Contains(m.USERID)); } if (dto.assignStatus > -1) { isShowAll = false; queryData = queryData.Where(m => m.ASSIGNSTATUS == dto.assignStatus); if (dto.assignStatus == 0) { beside = true; //没有数据绑定 } } if (dto.Status > -1) { isShowAll = false; queryData = queryData.Where(m => m.STATUS == dto.Status); } if (!string.IsNullOrWhiteSpace(dto.txt_userId) || dto.seid.HasValue) { isShowAll = false; if (!string.IsNullOrWhiteSpace(dto.txt_userId)) { var userfilter = dto.txt_userId.Split(',').Select(n => Convert.ToDecimal(n)).ToList(); queryData = queryData.Where(m => userfilter.Contains(m.INNERUSERID)); } if (dto.seid.HasValue) queryData = queryData.Where(m => m.EID == dto.seid.Value); } if (dto.bindStatus != 2 && !string.IsNullOrEmpty(dto.txt_groupIds)) { isShowAll = false; 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 (dto.bindStatus != 2 && !string.IsNullOrEmpty(dto.txt_deptId)) { isShowAll = false; var depts = OperationUtil.ConvertToDecimal(dto.txt_deptId.Split(',')); 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); } else if (dto.txt_companyId.HasValue) { isShowAll = false; 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 join m in db.BAS_SALESDEPARTMENT on g.SALEDEPTID equals m.SALEDEPTID where m.COMPANYID == dto.txt_companyId.Value select a); } if (dto.bindStatus.HasValue) { isShowAll = false; switch (dto.bindStatus) { case 1: queryData = queryData.Where(n => n.EID > 0); break; case 2: beside = true; queryData = queryData.Where(n => n.EID > 0 || n.DEPTID > 0); break; case 3: queryData = queryData.Where(n => (n.EID == null || n.EID == 0) && n.DEPTID > 0); break; } } ls = queryData.ToList(); } MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); List parameters = new List(); var relFiler = "ctime >= CURDATE()"; if (dto.xstime.HasValue) { relFiler = $" ctime >= '{dto.xstime.Value.ToString("yyyy-MM-dd")}'"; } if (dto.xetime.HasValue) { if (relFiler == null) { relFiler = $" ctime < '{dto.xetime.Value.AddDays(1).ToString("yyyy-MM-dd")}'"; } else { relFiler += $" and ctime < '{dto.xetime.Value.AddDays(1).ToString("yyyy-MM-dd")}'"; } } var deptSql = @"select deptid,corpid,deptname,parentid from ww_dept where 1=1"; var cropFilter = ""; if (!string.IsNullOrEmpty(dto.corp)) { cropFilter = $"{string.Join(",", dto.corp.Split(',').Select(n => $"'{n}'"))}"; deptSql += $" and corpid in ( {cropFilter} )"; } var wxDeptList = helper.QueryEntitys(deptSql); string sql = $@"select a.corpid,a.deptid,b.corpname,'' exinfo ,a.uname,a.userid,a.lmsgtime,a.mobile,a.email,c.deptname,d.newAdd 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 left join ( select userId,sum(numbers) newAdd from ww_user_extuser_temp where {relFiler} group by userId) d on a.userid = d.userId where 1=1 "; string where = ""; if (!string.IsNullOrEmpty(dto.name)) { where += " and (a.uname like @uname or a.userid 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.corp)) { where += $" and a.corpid in ({cropFilter}) and a.deptid is not null"; } List deptidsnew = new List(); string alldeptSql = "select deptid,corpid from ww_dept"; if (!string.IsNullOrEmpty(dto.deptid)) { var sqlWhere = ""; var deptFilter = dto.deptid.Split(';').ToList(); var alldeptCorp = dto.corp.Split(',').ToList(); foreach (var item in deptFilter) { var deptStr = item.Split('_').LastOrDefault(); int[] ids = Newtonsoft.Json.JsonConvert.DeserializeObject(deptStr); var corpiditem = item.Split('_').FirstOrDefault(); alldeptCorp = alldeptCorp.Where(n => n != corpiditem).ToList(); var itemdeptArray = GetAllCildDept(helper, ids, corpiditem); if (!string.IsNullOrWhiteSpace(sqlWhere)) { sqlWhere += $" or"; } else { sqlWhere += $" where "; } sqlWhere += $" (corpid = '{corpiditem}' and deptid in ({string.Join($",", itemdeptArray)})) "; } if (alldeptCorp.Count > 0) { alldeptCorp = alldeptCorp.Select(n => $"'{n}'").ToList(); if (!string.IsNullOrWhiteSpace(sqlWhere)) { sqlWhere += $"or"; } else { sqlWhere += $"where "; } sqlWhere += $" (corpid in ({string.Join(",", alldeptCorp)}))"; } alldeptSql += sqlWhere; } else { if (!string.IsNullOrEmpty(dto.corp)) { alldeptSql = $"select deptid,corpid from ww_dept where corpid in ({cropFilter}) "; } } var selfDepts = helper.QueryEntitys(alldeptSql); deptidsnew = selfDepts.ToList(); //sql += where + " order by a.lmsgtime desc limit @page,@limit;";//查询列表 sql += where + " order by a.lmsgtime desc";//查询列表 //parameters.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "page", Value = page.page }); //parameters.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "limit", Value = page.limit }); 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(); if (item["newAdd"] != DBNull.Value) model.newAdd = Convert.ToInt32(item["newAdd"]); if (item["deptid"] != DBNull.Value) { model.isMyController = deptidsnew.Where(n => n.Corpid == model.corpid).Select(n => n.Deptid).Contains(model.deptid.Value) ? 1 : 2; } 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.Status = huid.STATUS.HasValue ? Convert.ToInt32(huid.STATUS) : 1; model.errorcode = huid.ERRORCODE.HasValue ? Convert.ToInt32(huid.ERRORCODE) : (int?)null; } model.assignStatusName = EnumHelper.GetEnumDescription((AssignstatusEnum)model.assignStatus); model.StatusName = EnumHelper.GetEnumDescription((WeworkStatusEnum)model.Status); if (isShowAll) { corp.Add(model);//如果显示全部,就全部显示 continue; } if (beside && huid == null) //未绑定 { corp.Add(model); } else if (!beside && huid != null) { corp.Add(model);//加了组织结构过滤条件 } } if (dto.orderType == 2) { corp = corp.OrderByDescending(n => n.isMyController).ToList(); } else { corp = corp.OrderBy(n => n.isMyController).ToList(); } if (!string.IsNullOrWhiteSpace(page.order)) { if (page.order == "asc") corp = corp.OrderBy(x => x.newAdd).ToList(); else if (page.order == "desc") corp = corp.OrderByDescending(x => x.newAdd).ToList(); } page.count = corp.Count; corp = corp.Skip((page.page - 1) * page.limit).Take(page.limit).ToList();//重新分页 var deptidList = corp.Where(n => n.deptid != null).Select(n => $"{n.deptid}_{n.corpid}").ToList(); var deptDic = BuildDeptName(wxDeptList.Distinct().ToList(), deptidList); foreach (var item in corp) { var deptStr = $"{item.deptid}_{item.corpid}"; if (item.deptid == null) { continue; } if (deptDic.ContainsKey(deptStr)) { item.deptname = deptDic.FirstOrDefault(n => n.Key == deptStr).Value; } } //匹配员工企业号的客户信息 //使用分页后的结果查询 //减少需赛选的数据量 //20220218 var showIds = corp.Select(m => m.userid); var relSql = $"select userId,count(1) extUser from ww_user_extuser where userid in ('{string.Join("','", showIds)}') group by userId;"; var userExtuserSet = helper.ExecuteDataTable(relSql); // var userExtuserDic = helper.ExecuteDataDictionary(relSql); foreach (DataRow item in userExtuserSet.Tables[0].Rows) { var userId = item["userId"].ToString(); var corpItem = corp.FirstOrDefault(m => m.userid == userId); if (corpItem != null) { //更新 客户总数与 今日新增 corpItem.myExtuser = Convert.ToInt32(item["extUser"].ToString()); //corpItem.newAdd = Convert.ToInt32(item["newAdd"].ToString()); } } } catch (Exception e) { throw; } return corp; } public List MyWeUser_Get(ref Laypage page, MyWeUserDto myWeUserDto, List ALLdeptIDS, List ALLgidS) { List res = new List(); using (var db = new crmContext()) { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); var queryData = db.RES_CUSTOMERQW_EID.AsQueryable(); 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(',')); queryData = (from a in queryData join b in db.BAS_INNERUSERGROUP on a.INNERUSERID equals b.INNERUSERID where ALLdeptIDS.Contains(b.DEPTID.Value) || ALLgidS.Contains(b.GID.Value) select a); } var customerQuery = db.RES_CUSTOMERQW.AsQueryable(); // if (!string.IsNullOrWhiteSpace(myWeUserDto.corp)) { customerQuery = customerQuery.Where(n => n.APPID == myWeUserDto.corp); } if (!string.IsNullOrWhiteSpace(myWeUserDto.resid)) { customerQuery = customerQuery.Where(n => n.RESID == myWeUserDto.resid); } //来源 todo if (myWeUserDto.addway.HasValue) { customerQuery = customerQuery.Where(n => n.SCENETYPE == myWeUserDto.addway); } if (!string.IsNullOrWhiteSpace(myWeUserDto.activeName)) { customerQuery = customerQuery.Where(n => n.SCENE == myWeUserDto.activeName); } if (myWeUserDto.xstime.HasValue) { customerQuery = customerQuery.Where(n => n.CREATETIME >= myWeUserDto.xstime); } if (myWeUserDto.xetime.HasValue) { var endtime = myWeUserDto.xetime.Value.AddDays(1); customerQuery = customerQuery.Where(n => n.CREATETIME < endtime); } //昵称 if (!string.IsNullOrWhiteSpace(myWeUserDto.name)) { var nameSql = @"select a.userid,a.unionid,a.name,a.avatar,a.corpid,b.corpname from ww_extuser a left join ww_corp b on a.corpid = b.corpid where a.name = @name and a.userid is not null and a.unionid is not null and a.name is not null"; List nameparameters = new List(); nameparameters.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "name", Value = myWeUserDto.name.Trim() }); var set = helper.QueryEntitys(nameSql, nameparameters.ToArray()); var resIdFilter = set.Select(n => n.unionid).Union(set.Select(n => n.userid)).ToList(); customerQuery = customerQuery.Where(n => resIdFilter.Contains(n.RESID)); } var customerQw = from n in customerQuery join e in queryData on n.APPUSERID equals e.APPUSERID join b in db.BAS_INNERUSERGROUP on e.INNERUSERID equals b.INNERUSERID join c in db.BAS_SALESDEPARTMENT on b.DEPTID equals c.SALEDEPTID join u in db.BAS_INNERUSER on e.INNERUSERID equals u.PKID select new { APPID = n.APPID, RESID = n.RESID, CREATETIME = n.CREATETIME, SCENETYPENAME = n.SCENETYPENAME, SCENENAME = n.SCENETYPENAME, deptName = c.DEPTNAME, uname = u.UNAME, eid = e.EID, CTIME = n.CTIME, APPUSERID = n.APPUSERID }; //var w = customerQw.ToList(); page.count = customerQw.Count(); if (page.count == 0) { return res; } customerQw = customerQw.OrderByDescending(n => n.CTIME); var list = customerQw.Skip((page.page - 1) * page.limit).Take(page.limit).ToList();//重新分页 var unionList = string.Join(",", list.Select(n => "'" + n.RESID + "'").ToList()); var corpSql = @"select corpid,corpname from ww_corp "; List corpsqlparams = new List(); var cropList = helper.QueryEntitys(corpSql, corpsqlparams.ToArray()); var sql = @"select userid,unionid,name,avatar,corpid from ww_extuser where userid in (" + unionList + ") or unionid in (" + unionList + ")"; List sqlparams = new List(); //sqlparams.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "fiter", Value = unionList }); var weList = helper.QueryEntitys(sql, sqlparams.ToArray()); foreach (var item in list) { var dbItem = cropList.FirstOrDefault(n => n.corpid == item.APPID); var detail = weList.FirstOrDefault(n => n.unionid == item.RESID || n.userid == item.RESID); My_hhuserModel my_HhuserModel = new My_hhuserModel { company = dbItem?.corpname, unionid = item.APPID, resId = item.RESID, avatar = detail == null ? "" : detail.avatar, name = detail == null ? "" : detail.name, createTime = item.CREATETIME, addway = item.SCENETYPENAME, activeName = item.SCENENAME, deptName = item.deptName, //deptInfo == null? "":deptInfo.deptName, userName = item.uname + $"-({item.eid})" // deptInfo ==null? "" :deptInfo.uname +$"-({deptInfo.eid})" }; res.Add(my_HhuserModel); } } return res; } private Dictionary BuildDeptName(List deptList, List listId) { listId = listId.Distinct().ToList(); Dictionary result = new Dictionary(); foreach (var id in listId) { var res = BuildDeptName(id, deptList, ""); result.Add(id, res.Trim('/')); } return result; } public string BuildDeptName(string id, List deptList, string name) { var deptid = id.Split('_').FirstOrDefault(); var corpid = id.Split('_').LastOrDefault(); var dept = deptList.FirstOrDefault(n => n.deptid.ToString() == deptid && n.corpid == corpid); if (dept != null) { name = $"{dept.deptname}/{name}"; return BuildDeptName($"{dept.parentid}_{corpid}", deptList, name); } return name; } #region 查找所有子部门 /// /// 找出配置里面所有的部门ID /// /// /// public Dictionary> GetAllCorpDept(string companycode) { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); List list = Corp_Get(); Dictionary> dic = new Dictionary>(); if (!string.IsNullOrEmpty(companycode)) { string companycodeFormat = string.Format("[{0}]", companycode); list = list.Where(m => m.companycode.Contains(companycodeFormat)).ToList(); foreach (var item in list) { int[] deptid = new int[] { }; if (!string.IsNullOrEmpty(item.deptid)) { JObject obj = (JObject)Newtonsoft.Json.Linq.JObject.Parse(item.deptid); deptid = JsonConvert.DeserializeObject(obj[companycode].ToString()); } dic.Add(item.corpid, GetAllCildDept(helper, deptid, item.corpid).ToList()); } } return dic; } public int[] GetAllCildDept(MySqlDbHelper helper, int[] deptids, string corpid) { if (deptids.Count() == 0 || string.IsNullOrEmpty(corpid)) { return deptids; } Dictionary dicdptlist = new Dictionary(); foreach (var item in deptids) { if (!dicdptlist.ContainsKey(item)) dicdptlist.Add(item, item); } foreach (var item in deptids) { GetChildDept(helper, dicdptlist, corpid, item); } return dicdptlist.Select(m => m.Key).ToArray(); } public void GetChildDept(MySqlDbHelper helper, Dictionary dplist, string corpid, int id) { //List deptlist = _crmContext.Ww_Dept.Where(m => m.parentid == id && m.corpid == corpid).ToList(); string sql = "select * from ww_dept where parentid=@parentid and corpid=@corpid "; List parameters = new List() { new MySqlParameter() { DbType = DbType.String, ParameterName = "parentid", Value = id }, new MySqlParameter() { DbType = DbType.String, ParameterName = "corpid", Value = corpid } }; //DataSet set = MySqlDbHelper.ExecuteDataTable(helper.GetConnecionString(MySqlDbHelper.DatabaseType.MysqlQWConn), CommandType.Text, sql, parameters.ToArray()); DataSet set = helper.ExecuteDataTable(sql, parameters.ToArray()); if (set != null && set.Tables.Count > 0 && set.Tables[0].Rows.Count > 0) { foreach (DataRow dp in set.Tables[0].Rows) { if (dp["deptid"] != DBNull.Value) { int deptid = Convert.ToInt32(dp["deptid"]); if (!dplist.ContainsKey(deptid)) { dplist.Add(deptid, deptid); GetChildDept(helper, dplist, corpid, deptid); } } } } } #endregion 查找所有子部门 public List GetKeyWordAll(bool showAll = false) { List list = new List(); try { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); string sql = "select keyword,ctime,status from hg_keyword where status=1 order by ctime desc"; if (showAll == true) sql = "select keyword,ctime,status from hg_keyword order by ctime desc"; DataTable tab = helper.ExecuteDataTable(sql).Tables[0]; foreach (DataRow item in tab.Rows) { Hg_KeyWord model = new Hg_KeyWord(); model.keyword = item["keyword"].ToString(); model.status = Convert.ToInt32(item["status"]); model.ctime = Convert.ToDateTime(item["ctime"]); list.Add(model); } return list; } catch (Exception e) { LogHelper.Error(e.ToString()); throw; } } /// /// 修改关键字 /// /// /// public bool UpdateKeyWord(Hg_KeyWordAllModel model, ref string message) { bool result = false; try { model.keywords = model.keywords.Replace(";", ";").Replace("\n\r", "").Replace("\r", "").Replace("\n", ""); List corp = Corp_Get();//企业微信号列表 List keys = GetKeyWordAll(true);//所有的关键词 List manconfig = GetMainConfig();//当前主线程执行顺序 List keylist2 = model.keywords.Split(';').ToList(); List keylist = new List(); foreach (var item in keylist2) { if (!string.IsNullOrEmpty(item)) keylist.Add(item); } MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); string addmessage = ""; string delmessage = ""; string pici = DateTime.Now.ToString("yyyyMMddHHmmssfff"); foreach (string item1 in keylist) { string item = item1.Trim(); if (string.IsNullOrEmpty(item)) continue; Hg_KeyWord word = keys.FirstOrDefault(m => m.keyword == item); if (word == null)//如果没有数据,则新增 { addmessage += string.Format("{0};", item); helper.ExecuteNonQuery("insert into hg_keyword(keyword,status)values(@keyword, 1);", new MySqlParameter() { DbType = DbType.String, ParameterName = "keyword", Value = item });//插入数据 foreach (var co in corp) { var en = manconfig.FirstOrDefault(m => m.corpid == co.corpid); if (en == null || en.seq == 0)//如果主线程都没有执行,就不用新增 补充数据指令了 { continue; } else { //插入待执行表, 最大值为当前执行的位置 helper.ExecuteNonQuery("insert into hg_make_up(corpid,keyword,seq,maxseq,status,pici)values(@corpid,@keyword, 0,@maxseq,90,@pici);", new MySqlParameter() { DbType = DbType.String, ParameterName = "corpid", Value = en.corpid }, new MySqlParameter() { DbType = DbType.String, ParameterName = "keyword", Value = item }, new MySqlParameter() { DbType = DbType.Int32, ParameterName = "maxseq", Value = en.seq }, new MySqlParameter() { DbType = DbType.String, ParameterName = "pici", Value = pici } );//有记录则插入补充记录 } } } else { if (word.status == 0)//有数据,切已经被删除了,则修改会正常状态 { addmessage += string.Format("{0};", item); helper.ExecuteNonQuery("update hg_keyword set status=1 where keyword=@keyword;", new MySqlParameter() { DbType = DbType.String, ParameterName = "keyword", Value = item });//插入数据 foreach (var co in corp) { var en = manconfig.FirstOrDefault(m => m.corpid == co.corpid); if (en == null || en.seq == 0)//如果主线程都没有执行,就不用新增 补充数据指令了 { continue; } else { //插入待执行表, 最大值为当前执行的位置 helper.ExecuteNonQuery("insert into hg_make_up(corpid,keyword,seq,maxseq,status,pici)values(@corpid,@keyword, 0,@maxseq,90,@pici);", new MySqlParameter() { DbType = DbType.String, ParameterName = "corpid", Value = en.corpid }, new MySqlParameter() { DbType = DbType.String, ParameterName = "keyword", Value = item }, new MySqlParameter() { DbType = DbType.Int32, ParameterName = "maxseq", Value = en.seq }, new MySqlParameter() { DbType = DbType.String, ParameterName = "pici", Value = pici } );//有记录则插入补充记录 } } } } } var delkeyword = keys.Where(m => !keylist.Contains(m.keyword)).ToList(); foreach (var item in delkeyword) { delmessage += string.Format("{0};", item.keyword); helper.ExecuteNonQuery("update hg_keyword set status=0 where keyword=@keyword;", new MySqlParameter() { DbType = DbType.String, ParameterName = "keyword", Value = item.keyword });//将关键字 修改成 helper.ExecuteNonQuery("update hg_make_up set status=120 where keyword=@keyword and status=90;", new MySqlParameter() { DbType = DbType.String, ParameterName = "keyword", Value = item.keyword });//修改成取消状态 } if (!string.IsNullOrEmpty(addmessage)) { message += "新增关键字:“" + addmessage + "”\n"; } if (!string.IsNullOrEmpty(delmessage)) { message += "删除关键字:“" + delmessage + "”\n"; } if (string.IsNullOrEmpty(message)) { message = "无变动!"; } result = true; } catch (Exception e) { message = "系统错误!"; LogHelper.Error(e.ToString()); } return result; } public List GetMainConfig() { List list = new List(); try { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); DataTable tab = helper.ExecuteDataTable("select corpid,tablename,seq from hg_man_config").Tables[0]; foreach (DataRow item in tab.Rows) { Hg_Man_Config model = new Hg_Man_Config(); model.corpid = item["corpid"].ToString(); model.tablename = item["tablename"].ToString(); model.seq = Convert.ToInt32(item["seq"]); list.Add(model); } return list; } catch (Exception e) { LogHelper.Error(e.ToString()); throw; } } public bool SetKeyWords(string keywords, ref ValidationErrors erro) { bool result = false; try { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); DataTable tab = helper.ExecuteDataTable("select count(*)count from bas_parameter where parakey='WeiXin_IllegalKewords'").Tables[0]; if (Convert.ToInt32(tab.Rows[0]["count"]) == 0) { helper.ExecuteNonQuery("insert into bas_parameter (parakey,paravalue,remark) values('WeiXin_IllegalKewords',@paravalue,'关键词配置')", new MySqlParameter() { DbType = DbType.String, ParameterName = "paravalue", Value = keywords }); } else { helper.ExecuteNonQuery("update bas_parameter set paravalue=@paravalue where parakey='WeiXin_IllegalKewords' ", new MySqlParameter() { DbType = DbType.String, ParameterName = "paravalue", Value = keywords }); } result = true; } catch (Exception e) { LogHelper.Error(e.ToString()); erro.Add(e.ToString()); } return result; } 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) { List list = new List(); try { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); string sql = "select SQL_CALC_FOUND_ROWS id,seq,msgid,msgtype,action,fromer,tolist,roomid,ext,content,nfile,msgtime,ctime,hgstatus,hgtime,issend,kehuname,cusname,corpid from hg_message x where 1=1 "; List para = new List(); if (!string.IsNullOrEmpty(userNames))//客服ID { sql += " and fromer in(" + userNames + ")"; } if (msgstime.HasValue)//消息开始时间 { sql += " and msgtime>=@msgstime"; para.Add(new MySqlParameter() { ParameterName = "@msgstime", MySqlDbType = MySqlDbType.DateTime, Value = msgstime.Value }); } if (msgetime.HasValue)//消息结束时间 { msgetime = msgetime.Value.AddDays(1);//加一天 sql += " and msgtime<@msgetime"; para.Add(new MySqlParameter() { ParameterName = "@msgetime", MySqlDbType = MySqlDbType.DateTime, Value = msgetime.Value }); } if (stime.HasValue)//系统操作开始时间 { sql += " and ctime>=@stime"; para.Add(new MySqlParameter() { ParameterName = "@stime", MySqlDbType = MySqlDbType.DateTime, Value = stime.Value }); } if (etime.HasValue)//系统操作结束时间 { etime = etime.Value.AddDays(1);//加一天 sql += " and ctime<@etime"; para.Add(new MySqlParameter() { ParameterName = "@etime", MySqlDbType = MySqlDbType.DateTime, Value = etime.Value }); } if (!string.IsNullOrEmpty(kefid))//客服ID { sql += " and fromer=@fromer"; para.Add(new MySqlParameter() { ParameterName = "@fromer", MySqlDbType = MySqlDbType.String, Value = kefid }); } if (!string.IsNullOrEmpty(userid))//客户ID { sql += " and tolist=@userid"; para.Add(new MySqlParameter() { ParameterName = "@userid", MySqlDbType = MySqlDbType.String, Value = userid }); } if (status.HasValue) { sql += " and hgstatus=@hgstatus"; para.Add(new MySqlParameter() { ParameterName = "@hgstatus", MySqlDbType = MySqlDbType.String, Value = status.Value }); } if (!string.IsNullOrEmpty(keyword))//关键词 { sql += " and exists(select 1 from hg_message_word a where a.msgid=x.msgid and a.keyword in(" + keyword + "))"; } if (!string.IsNullOrEmpty(pager.sort) && !string.IsNullOrEmpty(pager.order) && pager.sort != "null" && pager.order != "null") { sql += string.Format(" order by {0} {1}", pager.sort, pager.order);//排序 } sql += " limit @pagestart,@endpage ; "; para.Add(new MySqlParameter() { ParameterName = "@pagestart", MySqlDbType = MySqlDbType.Int32, Value = ((pager.page - 1) * pager.rows) }); para.Add(new MySqlParameter() { ParameterName = "@endpage", MySqlDbType = MySqlDbType.Int32, Value = pager.rows }); sql += " SELECT FOUND_ROWS() rowcount;";//查询总行数 DataSet tab = helper.ExecuteDataTable(sql, para.ToArray()); pager.totalRows = Convert.ToInt32(tab.Tables[1].Rows[0]["rowcount"]); //序列化为字符串 string t = JsonConvert.SerializeObject(tab.Tables[0]); //反序列化为对象 list = JsonConvert.DeserializeObject>(t);//将数据进行转换 } catch (Exception e) { LogHelper.Error(e.ToString()); } return list; } /// /// 将合规信息修改成已读 /// /// /// public bool Read(string msgid) { bool isok = false; try { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); string sql = "update hg_message set hgstatus=200,hgtime=now() where msgid=@msgid"; int x = helper.ExecuteNonQuery(sql, new MySqlParameter() { ParameterName = "@msgid", Value = msgid, DbType = DbType.String }); isok = x > 0;//执行是否成功 } catch (Exception e) { LogHelper.Error(e.ToString()); } return isok; } /// /// 已经违规 /// /// /// public bool Violations(string msgid) { bool isok = false; try { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); string sql = "update hg_message set hgstatus=500,hgtime=now() where msgid=@msgid"; int x = helper.ExecuteNonQuery(sql, new MySqlParameter() { ParameterName = "@msgid", Value = msgid, DbType = DbType.String }); isok = x > 0;//执行是否成功 } catch (Exception e) { LogHelper.Error(e.ToString()); } return isok; } /// /// 获取单条数据 /// /// /// public Hg_MessageModel GetMsgById(string msgid) { Hg_MessageModel model = null; try { MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); string sql = "select id,seq,msgid,msgtype,action,fromer,tolist,roomid,ext,content,nfile,msgtime,ctime,hgstatus,hgtime,issend,kehuname,cusname,corpid from hg_message where msgid=@msgid"; DataSet tab = helper.ExecuteDataTable(sql, new MySqlParameter() { ParameterName = "@msgid", MySqlDbType = MySqlDbType.String, Value = msgid }); if (tab.Tables[0].Rows.Count == 0) return model; string t = JsonConvert.SerializeObject(tab.Tables[0]); model = JsonConvert.DeserializeObject>(t).FirstOrDefault();//将数据进行转换 } catch (Exception e) { LogHelper.Error(e.ToString()); } return model; } public List GetMsgWordList(params string[] msgids) { List list = new List(); try { if (msgids == null || msgids.Length == 0) return list; MySqlDbHelper helper = new MySqlDbHelper("MysqlQWConn"); string msgid = string.Format("'{0}'", string.Join("','", msgids)); string sql = "select msgid,keyword from hg_message_word where msgid in(" + msgid + ")"; DataSet tab = helper.ExecuteDataTable(sql); string t = JsonConvert.SerializeObject(tab.Tables[0]); list = JsonConvert.DeserializeObject>(t);//将数据进行转换 } catch (Exception e) { LogHelper.Error(e.ToString()); } return list; } public Ww_Extuser GetExtUserByUnionId(string unionid) { var list = new List(); try { var helper = new MySqlDbHelper("MysqlQWConn"); var parameters = new List(); parameters.Add(new MySqlParameter() { ParameterName = "@unionid", MySqlDbType = MySqlDbType.String, Value = unionid }); //DataTable table = helper.ExecuteDataTable("select * from ww_extuser where exinfo like '%" + unionid + "%'", parameters.ToArray()).Tables[0]; DataTable table = helper.ExecuteDataTable("select * from ww_extuser where unionid = @unionid", parameters.ToArray()).Tables[0]; foreach (DataRow item in table.Rows) { var model = new Ww_Extuser { userid = item["userid"].ToString(), corpid = item["corpid"].ToString(), name = item["name"].ToString(), avatar = item["avatar"].ToString() }; list.Add(model); } } catch (Exception e) { throw; } return list.FirstOrDefault(); } public List GetUserExtUserByUserId(string userid) { var list = new List(); try { var helper = new MySqlDbHelper("MysqlQWConn"); var parameters = new List(); parameters.Add(new MySqlParameter() { ParameterName = "@userid", MySqlDbType = MySqlDbType.String, Value = userid }); DataTable table = helper.ExecuteDataTable("select * from ww_user_extuser where extuserid = @userid", parameters.ToArray()).Tables[0]; foreach (DataRow item in table.Rows) { var model = new Ww_User_Extuser { userid = item["userid"].ToString(), corpid = item["corpid"].ToString(), extuserid = item["extuserid"].ToString() }; list.Add(model); } } catch (Exception e) { throw; } return list; } } }