using Mini.Common; using Mini.Model; using Mini.Model.CrmModel; using Mini.Model.Entity; using Mini.Model.ViewModel; using MySql.Data.MySqlClient; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Linq.Expressions; using System.Text; namespace Mini.Services.ww { public class ww_QDhhuser_Service : Iww_QDhhuser_Service { private readonly crmContext _crmContext; public ww_QDhhuser_Service(crmContext crmContext) { _crmContext = crmContext; } /// /// 内部群 /// /// /// /// public Ww_RoomChat GetRoomChat(string corpid, string chatid) { return _crmContext.Ww_RoomChat.FirstOrDefault(m => m.corpid == corpid && m.roomid == chatid); } /// /// 外部群 /// /// /// /// public Ww_GroupChat GetWw_GroupChat(string corpid, string chatid) { return _crmContext.Ww_GroupChat.FirstOrDefault(m => m.corpid == corpid && m.chat_id == chatid); } /// /// 内部群获取 /// /// public List GetInnerGroup(ref Laypage pager, string corpid, string name) { var db = from a in _crmContext.Ww_RoomChat join b in _crmContext.Ww_hhuser on new { a.creator, a.corpid } equals new { creator = b.userid, b.corpid } into jiontemp from c_tmp in jiontemp.DefaultIfEmpty() select new Ww_InnerGroupModel { corpid = a.corpid, creator = a.creator, creatorname = c_tmp.uname, ctime = a.ctime, ltimeupdate = a.ltimeupdate, membernum = a.membernum, members = a.members, notice = a.notice, roomid = a.roomid, roomname = a.roomname, room_create_time = a.room_create_time }; if (!string.IsNullOrEmpty(corpid)) { string[] corpids = corpid.Split(","); db = db.Where(m => corpids.Contains(m.corpid)); } if (!string.IsNullOrEmpty(name)) { db = db.Where(m => m.roomname.Contains(name)); } db = db.OrderByDescending(m => m.ltimeupdate); Pager pager1 = new Pager() { page = pager.page, rows = pager.limit }; PagerUtil.SetPager(ref db, ref pager1); pager.count = pager1.totalRows; List list = db.ToList(); foreach (Ww_InnerGroupModel item in list) { item.createtime = DateTimeTool.GetTimeFromLinuxShortTime(item.room_create_time).ToString("yyyy-MM-dd HH:mm:ss"); if (item.ltimeupdate.HasValue) { item.ltimeupdatestr = item.ltimeupdate.Value.ToString("yyyy-MM-dd HH:mm:ss"); } } return list; } /// /// 外部群获取 /// /// public List GetOuterGroup(ref Laypage pager, string corpid, string name) { var db = from a in _crmContext.Ww_GroupChat join b in _crmContext.Ww_hhuser on new { a.owner, a.corpid } equals new { owner = b.userid, b.corpid } into jiontemp from c_tmp in jiontemp.DefaultIfEmpty() select new Ww_OuterGroupModel { corpid = a.corpid, owner = a.owner, creatorname = c_tmp.uname, ctime = a.ctime, ltimeupdate = a.ltimeupdate, membernum = a.membernum, member_list = a.member_list, notice = a.notice, chat_id = a.chat_id, name = a.name, create_time = a.create_time }; if (!string.IsNullOrEmpty(corpid)) { string[] corpids = corpid.Split(","); db = db.Where(m => corpids.Contains(m.corpid)); } if (!string.IsNullOrEmpty(name)) { db = db.Where(m => m.name.Contains(name)); } db = db.OrderByDescending(m => m.ltimeupdate); Pager pager1 = new Pager() { page = pager.page, rows = pager.limit }; PagerUtil.SetPager(ref db, ref pager1); pager.count = pager1.totalRows; List list = db.ToList(); foreach (Ww_OuterGroupModel item in list) { item.createtime = DateTimeTool.GetTimeFromLinuxShortTime(item.create_time).ToString("yyyy-MM-dd HH:mm:ss"); if (item.ltimeupdate.HasValue) { item.ltimeupdatestr = item.ltimeupdate.Value.ToString("yyyy-MM-dd HH:mm:ss"); } } return list; } /// /// 获取企业微信成员列表 /// /// ID /// public List WorList_Get(ref Laypage pager, string v_name, string v_corpid, string v_deptid) { var db = from a in _crmContext.Ww_hhuser join b in _crmContext.Ww_Corp on a.corpid equals b.corpid join c in _crmContext.Ww_hhuser_Name on new { a.userid, a.corpid } equals new { c.userid, c.corpid } into jiontemp from c_tmp in jiontemp.DefaultIfEmpty()//左关联 select new Ww_hhuserModel() { corpid = b.corpid, deptid = a.deptid, corpname = b.corpname, exinfo = a.exinfo, uname = a.uname, userid = a.userid, lmsgtime = a.lmsgtime, remarkname = c_tmp.remarkname, alias = a.alias, email = a.email, fmsgtime = a.fmsgtime, mobile = a.mobile } ; if (!string.IsNullOrEmpty(v_name)) { db = db.Where(m => m.userid.Contains(v_name) || m.uname.Contains(v_name) || m.remarkname.Contains(v_name) || m.mobile.Contains(v_name) || m.email.Contains(v_name)); } if (!string.IsNullOrEmpty(v_corpid)) { db = db.Where(m => m.corpid == v_corpid); if (!string.IsNullOrEmpty(v_deptid)) { v_deptid = v_deptid.Trim(); int[] deptids = JsonHelper.JsonDivertToObj(v_deptid); db = db.Where(m => deptids.Contains(m.deptid.Value)); } } db = db.OrderByDescending(m => m.lmsgtime); Pager pager1 = new Pager() { page = pager.page, rows = pager.limit }; PagerUtil.SetPager(ref db, ref pager1); pager.count = pager1.totalRows; return db.ToList(); } /// /// 朋友圈数据获取 /// /// ID /// public List Moment_Get(ref Laypage pager, string v_name, string corp) { List list = new List(); try { string where = ""; List param = new List(); if (!string.IsNullOrEmpty(v_name)) { where = " and a.uname like @name or a.userid like @name or a.mobile like @name or a.email like @name "; param.Add(new MySqlParameter() { MySqlDbType = MySqlDbType.VarChar, Value = $"%{v_name}%", ParameterName = "@name" }); } string connectStr = Utility.GetSettingByKey("ConnectionStrings:crmMsgContext"); string sql = @"select a.uname,a.exinfo,mm.corpname,t.* from wework_" + corp + @".ww_moment t join ww_hhuser a on t.corpid = a.corpid and t.creator = a.userid join ww_corp mm on mm.corpid=t.corpid where 1=1 " + where + @" order by create_time desc limit " + (pager.page - 1) * pager.limit + "," + pager.limit; string countsql = "select count(*) mcount from wework_" + corp + ".ww_moment t join ww_hhuser a on t.corpid = a.corpid and t.creator = a.userid where 1=1 " + where + @" "; LogHelper.Error(sql); LogHelper.Error(countsql); DataTable countdate = MySqlDbHelper.DataQueray(connectStr, CommandType.Text, countsql, param.ToArray()).Tables[0]; int count = Convert.ToInt32(countdate.Rows[0]["mcount"]); pager.count = count; DataTable set = MySqlDbHelper.DataQueray(connectStr, CommandType.Text, sql, param.ToArray()).Tables[0]; foreach (DataRow item in set.Rows) { Ww_MomentModel moment = new Ww_MomentModel(); moment.corpname = item["corpname"].ToString(); moment.corpid = item["corpid"].ToString(); moment.create_time = Utility.ToUnityString(Utility.ConvertIntDateTime(Convert.ToDouble(item["create_time"].ToString())), 7); moment.create_type = Convert.ToInt32(item["create_type"]); moment.creator = item["creator"].ToString(); moment.exinfo = item["exinfo"].ToString(); if (!string.IsNullOrEmpty(moment.exinfo) && moment.exinfo != "-") { try { MomentAvator info = Newtonsoft.Json.JsonConvert.DeserializeObject(moment.exinfo); moment.exinfo = info.thumb_avatar ?? info.avatar;//有缩略图就取缩率图,没有就取大图 } catch (Exception ex) { LogHelper.Error(ex.ToString()); } } moment.link = item["link"].ToString(); moment.location = item["location"].ToString(); if (!string.IsNullOrEmpty(moment.location)) { try { MomentLocation info = Newtonsoft.Json.JsonConvert.DeserializeObject(moment.location); moment.location = CommpnHelpEx.FromUnicodeString(info.name); } catch (Exception ex) { LogHelper.Error(ex.ToString()); } } moment.moment_id = item["moment_id"].ToString(); moment.text = item["text"].ToString(); if (!string.IsNullOrEmpty(moment.text)) { try { moment.text = CommpnHelpEx.FromUnicodeString(Newtonsoft.Json.JsonConvert.DeserializeObject(moment.text).content);//将文本解码 } catch (Exception ex) { LogHelper.Error(ex.ToString()); } } moment.image = item["image"].ToString(); if (!string.IsNullOrEmpty(moment.image)) { try { List imagelist = Newtonsoft.Json.JsonConvert.DeserializeObject>(moment.image); foreach (var imagea in imagelist) { imagea.media_id = Utility.EncryptMD5(imagea.media_id).ToLower(); } moment.image = Newtonsoft.Json.JsonConvert.SerializeObject(imagelist);//图片列表 } catch (Exception ex) { LogHelper.Error(ex.ToString()); } } moment.video = item["video"].ToString(); if (!string.IsNullOrEmpty(moment.video)) { try { MomentVideo video = Newtonsoft.Json.JsonConvert.DeserializeObject(moment.video); video.media_id = Utility.EncryptMD5(video.media_id).ToLower(); video.thumb_media_id = Utility.EncryptMD5(video.thumb_media_id).ToLower(); moment.video = Newtonsoft.Json.JsonConvert.SerializeObject(video);//视频信息,缩量图 } catch (Exception ex) { LogHelper.Error(ex.ToString()); } } moment.uname = item["uname"].ToString(); moment.visible_type = Convert.ToInt32(item["visible_type"]); if (item["ctime"] != DBNull.Value) { try { moment.ctime = Convert.ToDateTime(item["ctime"]); moment.ctimestr = Utility.ToUnityString(moment.ctime, 7); } catch (Exception ex) { LogHelper.Error(ex.ToString()); } } list.Add(moment); } } catch (Exception e) { LogHelper.Error(e.ToString()); } return list; } public Ww_hhuser_Name GetHHuserName(string userid, string corp) { return _crmContext.Ww_hhuser_Name.FirstOrDefault(m => m.userid == userid && m.corpid == corp); } public bool UpdateHHuserName(Ww_hhuser_Name model) { bool result = true; try { var entry = _crmContext.Ww_hhuser_Name.FirstOrDefault(m => m.userid == model.userid && m.corpid == model.corpid); if (entry == null) { //throw new Exception("找不到指定的员工!"); _crmContext.Ww_hhuser_Name.Add(model); } else { entry.remarkname = model.remarkname; } _crmContext.SaveChanges(); } catch (Exception e) { result = false; LogHelper.Error(e.ToString()); } return result; } /// /// 获取企业微信通话查询列表 /// /// /// /// /// /// /// /// public List RecordList_Get(ref Laypage pager, string corpid, DateTime? stime, DateTime? etime, string customername, string kefuname, string companycode = null) { var db = from a in _crmContext.Ww_Record join b in _crmContext.Ww_Corp on a.corpid equals b.corpid join c in _crmContext.Ww_hhuser on new { a.fromer, a.corpid } equals new { fromer = c.userid, c.corpid } into jiontemp from c_tmp in jiontemp.DefaultIfEmpty()//左关联 join d in _crmContext.Ww_Extuser on a.tolist equals d.userid into jiontemp2 from dc_tmp in jiontemp2.DefaultIfEmpty()//左关联 join e in _crmContext.Ww_hhuser_Name on new { a.fromer, a.corpid } equals new { fromer = e.userid, e.corpid } into jiontemp3 from e_tmp in jiontemp3.DefaultIfEmpty()//左关联 select new Ww_RecordModel() { calltype = a.calltype, tolist = a.tolist, corpid = a.corpid, corpname = b.corpname, ctime = a.ctime, customername = dc_tmp.name, endtime = a.endtime, filename = a.filename, fromer = a.fromer, length = a.length, msgid = a.msgid, roomid = a.roomid, starttime = a.starttime, voiceid = a.voiceid, kefuname = c_tmp.uname, remarkname = e_tmp.remarkname, deptid = c_tmp.deptid } ; if (!string.IsNullOrEmpty(corpid)) { db = db.Where(m => m.corpid == corpid); } if (!string.IsNullOrEmpty(companycode)) { List nlist = Corp_Get(); string companycodeFormat = string.Format("[{0}]", companycode); nlist = nlist.Where(m => m.companycode.Contains(companycodeFormat)).ToList(); if (nlist.Count > 0) { var where = PredicateExtensionses.True(); int i = 0; foreach (Ww_Corp item in nlist) { if (!string.IsNullOrEmpty(item.deptid)) { JObject obj = (JObject)Newtonsoft.Json.Linq.JObject.Parse(item.deptid); var dept = JsonConvert.SerializeObject(obj[companycode]); var depts = JsonConvert.DeserializeObject(dept); int[] newdepts = GetAllCildDept(depts, item.corpid); if (i == 0) { where = where.And(m => m.corpid == item.corpid && newdepts.Contains(m.deptid.Value)); } else where = where.Or(m => m.corpid == item.corpid && newdepts.Contains(m.deptid.Value)); } else { if (i == 0) where = where.And(m => m.corpid == item.corpid); else where = where.Or(m => m.corpid == item.corpid); } i++; } db = db.Where(where); } } if (stime.HasValue) { db = db.Where(m => m.starttime >= stime.Value); } if (etime.HasValue) { db = db.Where(m => m.starttime <= etime.Value); } if (!string.IsNullOrEmpty(customername)) { db = db.Where(m => m.customername.Contains(customername) || m.tolist.Contains(customername)); } if (!string.IsNullOrEmpty(kefuname)) { db = db.Where(m => m.kefuname.Contains(kefuname) || m.fromer.Contains(kefuname) || m.remarkname.Contains(kefuname)); } db = db.OrderByDescending(m => m.starttime); Pager pager1 = new Pager() { page = pager.page, rows = pager.limit }; PagerUtil.SetPager(ref db, ref pager1); pager.count = pager1.totalRows; List list = db.ToList(); foreach (var item in list) { item.starttimestr = item.starttime.ToUnityString(7); item.endtimestr = item.endtime.ToUnityString(7); } return list; } /// /// 根据客户ID获取所有关系客服 /// /// ID /// public List Extuser_GetAllUser(string exuserids) { int[] qddept = { 55}; int[] newdeptids = GetAllCildDept(qddept, "wx824b4ea054629084");//新数据获取方式 string[] extuserid = exuserids.Split(";"); var db = from a in _crmContext.Ww_Extuser join f in _crmContext.Ww_Corp on a.corpid equals f.corpid join b in _crmContext.Ww_User_Extuser on new { extuserid = a.userid, a.corpid } equals new { b.extuserid, b.corpid } join c in _crmContext.Ww_hhuser on new { b.userid, b.corpid } equals new { c.userid, c.corpid } where extuserid.Contains(a.userid) where f.corpid== "ww99bf6a7c51f1ae50" ||(newdeptids.Contains(c.deptid.Value) && f.corpid== "wx824b4ea054629084") select new Wx_ExuserModel() { corpid = c.corpid, userid = c.userid, extuserid = a.userid, exinfo = a.exinfo, name = a.name, uname = c.uname, corpname = f.corpname }; return db.ToList(); } /// /// 获取外部联系人列表 /// /// /// public List Extuser_Get(string v_userid, string v_corpid) { var db = from t in _crmContext.Ww_User_Extuser join x in _crmContext.Ww_Extuser on t.extuserid equals x.userid join w in _crmContext.Ww_Corp on t.corpid equals w.corpid where t.userid == v_userid where t.corpid == v_corpid select new Ww_User_ExtuserModel { ctime = t.ctime, exinfo = x.exinfo, userid = x.userid, cname = x.name, lmsgtime = t.lmsgtime, avatar = x.avatar }; db = db.OrderByDescending(m => m.lmsgtime); return db.ToList(); } /// /// 获取内部联系人好友列表 /// /// /// /// public List InnerUser_Get(string v_userid, string v_corpid) { var db = from t in _crmContext.Ww_UserChat join x in _crmContext.Ww_DeptUser on new { inuserid = t.deptuserid, t.corpid } equals new { inuserid = x.userid, x.corpid } join c in _crmContext.Ww_hhuser on new { inuserid = t.deptuserid, t.corpid } equals new { inuserid = c.userid, c.corpid } into jiontemp from c_tmp in jiontemp.DefaultIfEmpty()//左关联 where t.userid == v_userid where t.corpid == v_corpid select new Ww_InnerUserModel { corpid = t.corpid, userid = t.userid, ctime = t.ctime, department = x.department, deptuserid = t.deptuserid, lmsgtime = t.lmsgtime, name = x.name, exinfo = c_tmp.exinfo }; List modellist = db.OrderByDescending(m => m.lmsgtime).ToList(); foreach (Ww_InnerUserModel item in modellist) { if (!string.IsNullOrEmpty(item.exinfo) && item.exinfo != "-") { thumb_avatar_Model infox = JsonHelper.JsonDivertToObj(item.exinfo); if (!string.IsNullOrEmpty(infox.thumb_avatar)) { item.avatar = infox.thumb_avatar; } else if (!string.IsNullOrEmpty(infox.avatar)) { item.avatar = infox.avatar; } } } return modellist; } //select b.corpname, a.uname, a.userid, d.name, d.exinfo from ww_hhuser a //left join ww_corp b on a.corpid= b.corpid //join ww_user_extuser c on a.userid= c.userid //join ww_extuser d on c.extuserid= d.userid //where d.exinfo like'%简单就好%' /// /// 查找客户 /// /// 电话号码,昵称,备注 /// public List Find_User(ref Laypage pager, string name, string myphone, string companycode) { int[] qddept = { 55 }; int[] newdeptids2 = GetAllCildDept(qddept, "wx824b4ea054629084");//新数据获取方式 var db = from a in _crmContext.Ww_hhuser join b in _crmContext.Ww_Corp on a.corpid equals b.corpid join c in _crmContext.Ww_User_Extuser on new { a.userid, a.corpid } equals new { c.userid, c.corpid } join d in _crmContext.Ww_Extuser on new { c.extuserid, c.corpid } equals new { extuserid = d.userid, d.corpid } where d.userid == name || d.exinfo.Contains(name) where b.corpid == "ww99bf6a7c51f1ae50" || (newdeptids2.Contains(a.deptid.Value) && b.corpid == "wx824b4ea054629084") select new Ww_FindUser_Model { corpname = b.corpname, uname = a.uname, userid = a.userid, extuserid = c.extuserid, name = d.name, exinfo = d.exinfo, ctime = d.ctime, avatar = d.avatar, deptid = a.deptid, corpid = a.corpid, myphone = a.mobile }; if (!string.IsNullOrEmpty(myphone)) { myphone = myphone.Trim(); db = db.Where(m => m.myphone == myphone); } var where = PredicateExtensionses.True(); if (!string.IsNullOrEmpty(companycode)) { int i = 0; string codeformat = string.Format("[{0}]", companycode); List corplist = _crmContext.Ww_Corp.Where(m => m.companycode.Contains(codeformat)).ToList(); foreach (Ww_Corp item in corplist) { if (!string.IsNullOrEmpty(item.deptid))//有dptid { JObject obj = (JObject)Newtonsoft.Json.Linq.JObject.Parse(item.deptid); string wox = obj[companycode].ToString(); int[] deptids = JsonHelper.JsonDivertToObj(wox); int[] newdeptids = GetAllCildDept(deptids, item.corpid);//新数据获取方式 if (i == 0) where = where.And(m => m.corpid == item.corpid && newdeptids.Contains(m.deptid.Value)); else where = where.Or(m => m.corpid == item.corpid && newdeptids.Contains(m.deptid.Value)); } else { if (i == 0) where = where.And(m => m.corpid == item.corpid); else where = where.Or(m => m.corpid == item.corpid); } i++; } } db = db.Where(where); db = db.OrderByDescending(m => m.ctime); //Pager pager = new Pager() { page = 1, rows = 50 }; Pager pager1 = new Pager() { page = pager.page, rows = pager.limit }; PagerUtil.SetPager(ref db, ref pager1); pager.count = pager1.totalRows; //PagerUtil.SetPager(ref db, ref pager); return db.ToList(); } public int[] GetAllCildDept(int[] deptids, string corpid) { Dictionary dicdptlist = new Dictionary(); foreach (var item in deptids) { if (!dicdptlist.ContainsKey(item)) dicdptlist.Add(item, item); } foreach (var item in deptids) { GetChildDept(dicdptlist, corpid, item); } return dicdptlist.Select(m => m.Key).ToArray(); } public void GetChildDept(Dictionary dplist, string corpid, int id) { List deptlist = _crmContext.Ww_Dept.Where(m => m.parentid == id && m.corpid == corpid).ToList(); foreach (var dp in deptlist) { if (!dplist.ContainsKey(dp.deptid)) { dplist.Add(dp.deptid, dp.deptid); GetChildDept(dplist, corpid, dp.deptid); } } } /// /// 获取公司列表 /// /// public List Corp_Get() { return _crmContext.Ww_Corp.ToList(); } /// /// 获取群 /// /// /// /// public List GetRoom(ref Laypage pager, string corp, string name) { List list = new List(); try { string connectStr = Utility.GetSettingByKey("ConnectionStrings:crmMsgContext"); string sql = "select roomid,ctime,roomname,membernum from wework_" + corp + ".ww_msgroom " + (string.IsNullOrEmpty(name) ? "" : "where roomname like '%" + name + "%' or roomid like'%" + name + "%'") + " order by ctime desc limit " + (pager.page - 1) * pager.limit + "," + pager.limit; string countsql = "select count(*) mcount from wework_" + corp + ".ww_msgroom " + (string.IsNullOrEmpty(name) ? "" : "where roomname like '%" + name + "%' or roomid like'%" + name + "%'") + ""; DataTable countdate = MySqlDbHelper.DataQueray(connectStr, CommandType.Text, countsql).Tables[0]; int count = Convert.ToInt32(countdate.Rows[0]["mcount"]); pager.count = count; DataTable set = MySqlDbHelper.DataQueray(connectStr, CommandType.Text, sql).Tables[0]; foreach (DataRow item in set.Rows) { Ww_MsgRoom room = new Ww_MsgRoom(); room.roomid = item["roomid"].ToString(); room.roomname = item["roomname"].ToString(); room.membernum = Convert.ToInt32(item["membernum"]); if (item["ctime"] != DBNull.Value) { room.ctime = Convert.ToDateTime(item["ctime"]); room.ctimestr = Utility.ToUnityString(room.ctime, 2); list.Add(room); } } } catch (Exception e) { LogHelper.Error(e.ToString()); } return list; } /// /// 修改聊天群 /// /// /// /// public bool UpdateRomeName(string corp, string roomid, string roomname) { bool result = true; try { string connectStr = Utility.GetSettingByKey("ConnectionStrings:crmMsgContext"); string sql = "update wework_" + corp + ".ww_msgroom set roomname=@roomname where roomid=@roomid"; MySqlParameter[] param = { new MySqlParameter() { MySqlDbType = MySqlDbType.VarChar, ParameterName = "@roomname", Value = roomname }, new MySqlParameter() { MySqlDbType = MySqlDbType.VarChar, ParameterName = "@roomid", Value = roomid } }; MySqlDbHelper.ExecuteNonQuery(connectStr, CommandType.Text, sql, param); } catch (Exception e) { result = false; LogHelper.Error(e.ToString()); } return result; } /// /// 获取单个聊天群 /// /// /// /// public Ww_MsgRoom GetRoom(string corp, string roomid) { Ww_MsgRoom room = null; try { string connectStr = Utility.GetSettingByKey("ConnectionStrings:crmMsgContext"); string sql = "select * from wework_" + corp + ".ww_msgroom where roomid=@roomid"; MySqlParameter[] param = { new MySqlParameter() { MySqlDbType = MySqlDbType.VarChar, ParameterName = "@roomid", Value = roomid } }; DataTable set = MySqlDbHelper.DataQueray(connectStr, CommandType.Text, sql, param).Tables[0]; foreach (DataRow item in set.Rows) { room = new Ww_MsgRoom(); room.roomid = set.Rows[0]["roomid"].ToString(); room.roomname = set.Rows[0]["roomname"].ToString(); room.userlist = set.Rows[0]["userlist"].ToString(); if (set.Rows[0]["ctime"] != DBNull.Value) room.ctime = Convert.ToDateTime(set.Rows[0]["ctime"]); room.corp = corp; } } catch (Exception e) { LogHelper.Error(e.ToString()); } return room; } /// /// 获取多个信息 /// /// /// /// public List GetRoomList(string corp, string roomids) { List roomlist = new List(); try { string connectStr = Utility.GetSettingByKey("ConnectionStrings:crmMsgContext"); string sql = "select roomid,roomname,ctime from wework_" + corp + ".ww_msgroom where roomid in(" + roomids + ")"; MySqlParameter[] param = { }; DataTable set = MySqlDbHelper.DataQueray(connectStr, CommandType.Text, sql, param).Tables[0]; foreach (DataRow item in set.Rows) { Ww_MsgRoom room = new Ww_MsgRoom(); room.roomid = item["roomid"].ToString(); room.roomname = item["roomname"].ToString(); //room.userlist = set.Rows[0]["userlist"].ToString(); if (item["ctime"] != DBNull.Value) room.ctime = Convert.ToDateTime(item["ctime"]); room.corp = corp; roomlist.Add(room); } } catch (Exception e) { LogHelper.Error(e.ToString()); } return roomlist.OrderByDescending(m => m.ctime).ToList(); } /// /// 获取群,通过成员列表like /// /// /// 外部联系人ID /// public List GetRoomListByChengYuan(string corp, string extendId) { List roomlist = new List(); try { string connectStr = Utility.GetSettingByKey("ConnectionStrings:crmMsgContext"); string sql = "select roomid,roomname,ctime from wework_" + corp + ".ww_msgroom where userlist like '%" + extendId + ",%'"; MySqlParameter[] param = { }; DataTable set = MySqlDbHelper.DataQueray(connectStr, CommandType.Text, sql, param).Tables[0]; foreach (DataRow item in set.Rows) { Ww_MsgRoom room = new Ww_MsgRoom(); room.roomid = item["roomid"].ToString(); room.roomname = item["roomname"].ToString(); //room.userlist = set.Rows[0]["userlist"].ToString(); if (item["ctime"] != DBNull.Value) room.ctime = Convert.ToDateTime(item["ctime"]); room.corp = corp; roomlist.Add(room); } } catch (Exception e) { LogHelper.Error(e.ToString()); } return roomlist.OrderByDescending(m => m.ctime).ToList(); } /// /// 获取群信息 /// /// /// /// public List GetGroupUser(string corp, Ww_MsgRoom room) { string[] user = room.userlist.Split(','); List list = new List(); foreach (var item in user) { if (string.IsNullOrEmpty(item)) continue; Ww_Extuser model = _crmContext.Ww_Extuser.FirstOrDefault(m => m.corpid == corp && m.userid == item);//外部联系人 if (model != null) { list.Add(new GroupUser() { avatar = model.avatar, corpid = corp, name = model.name, roomid = room.roomid, userid = model.userid }); } else { Ww_hhuser entry = _crmContext.Ww_hhuser.FirstOrDefault(m => m.corpid == corp && m.userid == item);//外部联系人 if (entry != null) { GroupUser guser = new GroupUser() { userid = entry.userid, roomid = room.roomid, corpid = corp, name = entry.uname, avatar = "" }; if (entry.exinfo != null && entry.exinfo != "-") { HHuserInfo info = JsonHelper.JsonDivertToObj(entry.exinfo); if (string.IsNullOrEmpty(info.thumb_avatar)) guser.avatar = info.thumb_avatar; else guser.avatar = info.avatar; } list.Add(guser); } else { GroupUser guser = new GroupUser() { userid = item, roomid = room.roomid, corpid = corp, name = item, avatar = "" }; list.Add(guser); } } } return list; } /// /// 初始化数据库 /// public void InitDb() { try { string createDbSql = @"CREATE TABLE IF NOT EXISTS `bas_config` ( `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '配置', `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '值', `time` datetime(0) NULL DEFAULT NULL COMMENT '时间', `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '内容' );"; string sql = @"INSERT INTO `bas_config` (code,value,time,content) select 'IsShowPhone', '0', now(), '是否显示手机号码' where not exists(select 1 from bas_config z where z.code='IsShowPhone');"; string connectStr = Utility.GetSettingByKey("ConnectionStrings:crmContext"); MySqlDbHelper.ExecuteNonQuery(connectStr, CommandType.Text, createDbSql); MySqlDbHelper.ExecuteNonQuery(connectStr, CommandType.Text, sql); string createTableSql = @"CREATE TABLE IF NOT EXISTS `ww_hhuser_name` ( `userid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `corpid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `remarkname` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `ctime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP, `utime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0), PRIMARY KEY (`userid`, `corpid`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '备注客服的名称' ROW_FORMAT = Dynamic;"; MySqlDbHelper.ExecuteNonQuery(connectStr, CommandType.Text, createTableSql); string createParameter = @"CREATE TABLE IF NOT EXISTS `bas_parameter` ( `parakey` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '参数key', `paravalue` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '参数值', `ctime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `utime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改该时间', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;"; MySqlDbHelper.ExecuteNonQuery(connectStr, CommandType.Text, createParameter); string createLoginLog = @"CREATE TABLE IF NOT EXISTS `bas_loginlog` ( `pkid` int(11) NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NULL, `eid` int(11) NULL DEFAULT NULL, `logintime` datetime(0) NOT NULL, `ip` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, PRIMARY KEY (`pkid`) USING BTREE ); "; MySqlDbHelper.ExecuteNonQuery(connectStr, CommandType.Text, createLoginLog); string createRoleDept = @"CREATE TABLE IF NOT EXISTS `ww_role_dept` ( `corpid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '企业ID', `roleid` int(11) NOT NULL COMMENT '角色ID', `deptid` int(11) NOT NULL, `deptcode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '部门编码树', `ctime` datetime(0) NULL DEFAULT NULL, PRIMARY KEY (`corpid`, `roleid`, `deptid`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; "; MySqlDbHelper.ExecuteNonQuery(connectStr, CommandType.Text, createRoleDept); string createHHusereid = @"CREATE TABLE IF NOT EXISTS `ww_hhuser_eid` ( `corpid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '企业ID', `userid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '员工ID', `ctime` datetime(0) NULL DEFAULT NULL, `eid` int(11) NULL DEFAULT NULL COMMENT '员工登陆工号', `utime` datetime(0) NULL DEFAULT NULL, PRIMARY KEY (`corpid`, `userid`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; "; MySqlDbHelper.ExecuteNonQuery(connectStr, CommandType.Text, createHHusereid); string inserRight = @" INSERT INTO bas_right(rightid, rname, sortid, ctime, createuser, groupid) SELECT 'B099', '登陆权限',0, now() ,1,10 FROM DUAL WHERE NOT EXISTS(SELECT rightid FROM bas_right WHERE rightid = 'B099'); "; MySqlDbHelper.ExecuteNonQuery(connectStr, CommandType.Text, inserRight); string inserRoleRight = @" INSERT INTO bas_rolerightresource(roleid,rightid,ctime,createuser,toolbarvalue) SELECT 1,'B099', now() ,1,0 FROM DUAL WHERE NOT EXISTS(SELECT rightid FROM bas_rolerightresource WHERE rightid = 'B099' and roleid=1); "; MySqlDbHelper.ExecuteNonQuery(connectStr, CommandType.Text, inserRoleRight); } catch (Exception s) { LogHelper.Error(s.ToString()); } } #region 我的企业微信权限控制 public List GetDept(int roleid) { List objlist = new List(); List corplsit = _crmContext.Ww_Corp.ToList(); List deptlist = _crmContext.Ww_Dept.ToList(); List roledept = _crmContext.Ww_Role_Dept.Where(m => m.roleid == roleid).ToList(); foreach (var item in corplsit) { objlist.Add(new { id = item.corpid, attributes = new { id = "" + item.deptid, type = "dept", corpid = item.corpid }, text = item.corpname, state = "open", children = GetChildDept(0, item.corpid, deptlist, 1, roledept) }); }; return objlist; } private List GetChildDept(long parentid, string corpid, List deptlist, int jibie, List roledept) { List corpdept = deptlist.Where(m => m.corpid == corpid && m.parentid == parentid).ToList(); List objlist = new List(); foreach (var item in corpdept) { string state = jibie == 2 ? "closed" : "open"; if (roledept.FirstOrDefault(m => m.corpid == item.corpid && m.deptid == item.deptid) == null) { var childlist = GetChildDept(item.deptid, item.corpid, deptlist, jibie + 1, roledept); if (childlist.Count() > 0) { objlist.Add(new { id = "" + item.deptid, attributes = new { id = "" + item.deptid, type = "dept", corpid = item.corpid }, text = item.deptname, state = state, children = childlist }); } else { objlist.Add(new { id = "" + item.deptid, attributes = new { id = "" + item.deptid, type = "dept", corpid = item.corpid }, text = item.deptname }); } } else { var childlist = GetChildDept(item.deptid, item.corpid, deptlist, jibie + 1, roledept); if (childlist.Count() > 0) { objlist.Add(new { id = "" + item.deptid, @checked = true, attributes = new { id = "" + item.deptid, type = "dept", corpid = item.corpid }, text = item.deptname, state = state, children = childlist }); } else { objlist.Add(new { id = "" + item.deptid, @checked = true, attributes = new { id = "" + item.deptid, type = "dept", corpid = item.corpid }, text = item.deptname }); } } } return objlist; } /// /// 保存角色部门挂钩数据 /// /// /// /// /// public bool SaveRoleDeptID(ref ValidationErrors errors, List list, int roleid) { bool result = false; try { List inlist = new List(); foreach (var item in list) { inlist.Add(new Ww_Dept_CorpInt() { corpid = item.corpid, id = Convert.ToInt32(item.id) }); } Ww_Role_Dept[] dellist = _crmContext.Ww_Role_Dept.Where(m => m.roleid == roleid).ToArray();//全部删除,在重新创建 _crmContext.Ww_Role_Dept.RemoveRange(dellist); _crmContext.SaveChanges(); foreach (var item in inlist) { var entry = _crmContext.Ww_Role_Dept.FirstOrDefault(m => m.roleid == roleid && m.corpid == item.corpid && m.deptid == item.id); if (entry == null) { _crmContext.Ww_Role_Dept.Add(new Ww_Role_Dept() { corpid = item.corpid, ctime = DateTime.Now, deptid = item.id, roleid = roleid }); } } _crmContext.SaveChanges(); result = true; } catch (Exception e) { LogHelper.Error(e.ToString()); errors.Add(e.ToString()); } return result; } /// /// 获取自己管理的成员列表 /// /// ID /// public List WorList_Get_ByCompany(int type, ref Laypage pager, string v_name, string v_corpid, string eid, List qwdeptcontrolList) { Ww_Dept_CorpIntNull[] qwdeptnull = qwdeptcontrolList.Select(m => new Ww_Dept_CorpIntNull() { id = m.id, corpid = m.corpid }).ToArray(); var sxx = _crmContext.Ww_hhuser.AsQueryable(); string[] corpids = qwdeptnull.GroupBy(m => m.corpid).Select(m => m.Key).ToArray(); var malge = _crmContext.Ww_hhuser.AsQueryable(); int i = 0; if (type == 1)//经理查看,是需要Id的 { if (qwdeptcontrolList.Count > 0)//没有数据过来 { //malge = malge.Where(m=> qwdeptcontrolList.Contains(new Ww_Dept_CorpInt { corpid=m.corpid,id=m.deptid.Value })); foreach (var item in corpids) { i++; int[] deptidss = qwdeptcontrolList.Where(m => m.corpid == item).Select(m => m.id).ToArray(); if (i == 1) { malge = sxx.Where(m => m.corpid == item && deptidss.Contains(m.deptid.Value)); } else { malge = malge.Union(sxx.Where(m => m.corpid == item && deptidss.Contains(m.deptid.Value))); } } } else { malge = malge.Where(m => 0 == 1); } } var db = from a in malge join b in _crmContext.Ww_Corp on a.corpid equals b.corpid join c in _crmContext.Ww_hhuser_Name on new { a.userid, a.corpid } equals new { c.userid, c.corpid } into jiontemp from c_tmp in jiontemp.DefaultIfEmpty()//左关联 join d in _crmContext.Ww_hhuser_Eid on new { a.userid, a.corpid } equals new { d.userid, d.corpid } into jiontemp2 from d in jiontemp2.DefaultIfEmpty()//左关联 join e in _crmContext.Bas_InnerUser on d.eid equals e.eid into jiontemp3 from e in jiontemp3.DefaultIfEmpty()//左关联 join f in _crmContext.Ww_Dept on new { deptid = a.deptid.Value, a.corpid } equals new { f.deptid, f.corpid } into jiontemp4 from f in jiontemp4.DefaultIfEmpty()//左关联 select new Ww_hhuserModel() { corpid = b.corpid, deptid = a.deptid, corpname = b.corpname, exinfo = a.exinfo, uname = a.uname, userid = a.userid, lmsgtime = a.lmsgtime, remarkname = c_tmp.remarkname, alias = a.alias, email = a.email, fmsgtime = a.fmsgtime, mobile = a.mobile, eid = d.eid, eidandname = e.uname, deptname = f.deptname } ; if (!string.IsNullOrEmpty(v_name)) { db = db.Where(m => m.userid.Contains(v_name) || m.uname.Contains(v_name) || m.remarkname.Contains(v_name) || (m.mobile != null && m.mobile.Contains(v_name)) || (m.email != null && m.email.Contains(v_name))); //db = db.Where(m => m.userid.Contains(v_name)); } if (!string.IsNullOrEmpty(v_corpid)) { db = db.Where(m => m.corpid == v_corpid); } if (!string.IsNullOrEmpty(eid)) { int myid = 0; if (Int32.TryParse(eid, out myid)) { db = db.Where(m => m.eid == myid); } else { db = db.Where(m => m.eidandname.Contains(eid)); } } //db = db.Where(m => qwdeptnull.Contains(new Ww_Dept_CorpIntNull() { corpid = m.corpid, id = m.deptid })); db = db.OrderByDescending(m => m.lmsgtime); Pager pager1 = new Pager() { page = pager.page, rows = pager.limit }; PagerUtil.SetPager(ref db, ref pager1); pager.count = pager1.totalRows; var data = db.ToList(); foreach (var item in data) { item.eidandname = string.Format("{0}-{1}", item.eid, item.eidandname); } return data; } /// /// 登陆员工,获取所有可查看的部门ID /// /// /// public List GetMyControlDeptId(int[] roleids) { Dictionary dpt = new Dictionary(); List controldept = _crmContext.Ww_Role_Dept.Where(m => roleids.Contains(m.roleid)).ToList(); List deptlist = _crmContext.Ww_Dept.ToList(); foreach (var item in controldept) { string dptkey = string.Format("{0}_{1}", item.corpid, item.deptid); if (!dpt.ContainsKey(dptkey)) { dpt.Add(dptkey, new Ww_Dept_CorpInt { corpid = item.corpid, id = item.deptid }); } GetChildDeptId(dpt, deptlist, item.deptid, item.corpid); } List cmm = dpt.Values.Select(m => m).ToList(); return cmm; } private void GetChildDeptId(Dictionary dpt, List deptlist, int parentid, string corpid) { List corpdept = deptlist.Where(m => m.corpid == corpid && m.parentid == parentid).ToList(); foreach (var item in corpdept) { string dptkey = string.Format("{0}_{1}", item.corpid, item.deptid); if (!dpt.ContainsKey(dptkey)) { dpt.Add(dptkey, new Ww_Dept_CorpInt { corpid = item.corpid, id = item.deptid }); } GetChildDeptId(dpt, deptlist, item.deptid, item.corpid); } } /// /// 获取工号 /// /// /// /// public Ww_hhuser_Eid GetHHuserEid(string userid, string corp) { return _crmContext.Ww_hhuser_Eid.FirstOrDefault(m => m.userid == userid && m.corpid == corp); } /// /// 修改工号 /// /// /// /// public bool UpdateHHuserEid(ref ValidationErrors erros, Ww_hhuser_Eid model) { bool result = true; try { var entry = _crmContext.Ww_hhuser_Eid.FirstOrDefault(m => m.userid == model.userid && m.corpid == model.corpid); var eidentry = _crmContext.Bas_InnerUser.FirstOrDefault(m => m.eid == model.eid); if (eidentry == null) { erros.Add("工号不正确!"); return false; } if (entry == null) { //throw new Exception("找不到指定的员工!"); model.ctime = DateTime.Now; _crmContext.Ww_hhuser_Eid.Add(model); } else { entry.utime = DateTime.Now; entry.eid = model.eid; } _crmContext.SaveChanges(); } catch (Exception e) { result = false; LogHelper.Error(e.ToString()); erros.Add(e.ToString()); } return result; } #endregion } }