Mini.Crm/Mini.Services/ww/ww_hhuser_Service.cs

1677 lines
74 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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_hhuser_Service : Iww_hhuser_Service
{
private readonly crmContext _crmContext;
public ww_hhuser_Service(crmContext crmContext)
{
_crmContext = crmContext;
}
/// <summary>
/// 内部群
/// </summary>
/// <param name="corpid"></param>
/// <param name="chatid"></param>
/// <returns></returns>
public Ww_RoomChat GetRoomChat(string corpid, string chatid)
{
return _crmContext.Ww_RoomChat.FirstOrDefault(m => m.corpid == corpid && m.roomid == chatid);
}
/// <summary>
/// 外部群
/// </summary>
/// <param name="corpid"></param>
/// <param name="chatid"></param>
/// <returns></returns>
public Ww_GroupChat GetWw_GroupChat(string corpid, string chatid)
{
return _crmContext.Ww_GroupChat.FirstOrDefault(m => m.corpid == corpid && m.chat_id == chatid);
}
/// <summary>
/// 内部群获取
/// </summary>
/// <returns></returns>
public List<Ww_InnerGroupModel> 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<Ww_InnerGroupModel>(ref db, ref pager1);
pager.count = pager1.totalRows;
List<Ww_InnerGroupModel> 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;
}
/// <summary>
/// 外部群获取
/// </summary>
/// <returns></returns>
public List<Ww_OuterGroupModel> 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<Ww_OuterGroupModel>(ref db, ref pager1);
pager.count = pager1.totalRows;
List<Ww_OuterGroupModel> 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;
}
/// <summary>
/// 获取企业微信成员列表
/// </summary>
/// <param name="v_name">ID</param>
/// <returns></returns>
public List<Ww_hhuserModel> 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<int[]>(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<Ww_hhuserModel>(ref db, ref pager1);
pager.count = pager1.totalRows;
return db.ToList();
}
/// <summary>
/// 朋友圈数据获取
/// </summary>
/// <param name="v_name">ID</param>
/// <returns></returns>
public List<Ww_MomentModel> Moment_Get(ref Laypage pager, string v_name, string corp)
{
List<Ww_MomentModel> list = new List<Ww_MomentModel>();
try
{
string where = "";
List<MySqlParameter> param = new List<MySqlParameter>();
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<MomentAvator>(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<MomentLocation>(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<MomentContent>(moment.text).content);//将文本解码
}
catch (Exception ex)
{
LogHelper.Error(ex.ToString());
}
}
moment.image = item["image"].ToString();
if (!string.IsNullOrEmpty(moment.image))
{
try
{
List<MomentImage> imagelist = Newtonsoft.Json.JsonConvert.DeserializeObject<List<MomentImage>>(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<MomentVideo>(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;
}
/// <summary>
/// 获取企业微信通话查询列表
/// </summary>
/// <param name="pager"></param>
/// <param name="corpid"></param>
/// <param name="stime"></param>
/// <param name="etime"></param>
/// <param name="customername"></param>
/// <param name="kefuname"></param>
/// <returns></returns>
public List<Ww_RecordModel> 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<Ww_Corp> 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<Ww_RecordModel>();
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<int[]>(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<Ww_RecordModel>(ref db, ref pager1);
pager.count = pager1.totalRows;
List<Ww_RecordModel> list = db.ToList();
foreach (var item in list)
{
item.starttimestr = item.starttime.ToUnityString(7);
item.endtimestr = item.endtime.ToUnityString(7);
}
return list;
}
/// <summary>
/// 根据客户ID获取所有关系客服
/// </summary>
/// <param name="v_name">ID</param>
/// <returns></returns>
public List<Wx_ExuserModel> Extuser_GetAllUser(string exuserids)
{
string[] extuserid = exuserids.Split(";");
var unionids = _crmContext.Ww_Extuser.Where(x => !string.IsNullOrWhiteSpace(x.unionid) && extuserid.Contains(x.userid))
.Select(x => x.unionid).Distinct().ToList();
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 unionids.Contains(a.unionid) || extuserid.Contains(a.userid)
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,
//deptid = c.deptid
};
//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)
// 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();
}
/// <summary>
/// 根据客户ID获取所有关系客服
/// </summary>
/// <param name="v_name">ID</param>
/// <returns></returns>
public List<Wx_ExuserModel> Extuser_GetAllUser(string exuserids, string companycode = null)
{
var config = _crmContext.Bas_Config.FirstOrDefault(m => m.code == "CanLookMsgGroup");
List<Sys_CanLookMsgGroup> canlookmsgList = new List<Sys_CanLookMsgGroup>();
if (config != null)
{
canlookmsgList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Sys_CanLookMsgGroup>>(config.value);
}
string[] extuserid = exuserids.Split(";");
var unionids = _crmContext.Ww_Extuser.Where(x => !string.IsNullOrWhiteSpace(x.unionid) && extuserid.Contains(x.userid))
.Select(x => x.unionid).Distinct().ToList();
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 unionids.Contains(a.unionid) || extuserid.Contains(a.userid)
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,
deptid=c.deptid
};
var extlist = db.ToList();
if (!string.IsNullOrEmpty(companycode))
{
var companys = companycode.Split(',');
var newCompanys = new List<string>();//[{"Group":"东方软件事业部","Contains":"[DNZZ][DNYY][DNRW]","Target":"DNZZ,DNYY,DNRW"}]
foreach (var company in companys)
{
string codeformat = string.Format("[{0}]", company);
var canLook = canlookmsgList.FirstOrDefault(m => m.Contains.Contains(codeformat));
if (canLook != null)
newCompanys.AddRange(canLook.Target.Split(','));
}
newCompanys.AddRange(companys);
newCompanys = newCompanys.Distinct().ToList();
Dictionary<string, string> AlldictMM = new Dictionary<string, string>();//整个企业号能看
Dictionary<string, string> miniMM = new Dictionary<string, string>();//细节到部门ID能看
foreach (var company in newCompanys)
{
string codeformat = string.Format("[{0}]", company);
List<Ww_Corp> 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[company].ToString();
int[] deptids = JsonHelper.JsonDivertToObj<int[]>(wox);
int[] newdeptids = GetAllCildDept(deptids, item.corpid);//新数据获取方式
foreach (var itdpem in newdeptids)
{
string vv = $"{item.corpid}_{itdpem}";
if (!miniMM.ContainsKey(vv))
miniMM.Add(vv, vv);
}
}
else
{
if (!AlldictMM.ContainsKey(item.corpid))
AlldictMM.Add(item.corpid, item.corpid);
}
}
}
foreach (var item in extlist)
{
if (AlldictMM.ContainsKey(item.corpid))//真个企业微信都能看
{
continue;
}
string vv = $"{item.corpid}_{item.deptid}";//只能小部门查看
if (miniMM.ContainsKey(vv))
{
continue;
}
item.isOutDept = 1;
}
}
return extlist;
}
public List<Wx_ExuserModel> Extuser_GetAllUser_check(string exuserids, string companycode = null)
{
var config = _crmContext.Bas_Config.FirstOrDefault(m => m.code == "CanLookMsgGroup");
List<Sys_CanLookMsgGroup> canlookmsgList = new List<Sys_CanLookMsgGroup>();
if (config != null)
{
canlookmsgList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Sys_CanLookMsgGroup>>(config.value);
}
string[] extuserid = exuserids.Split(";");
var unionids = _crmContext.Ww_Extuser.Where(x => !string.IsNullOrWhiteSpace(x.unionid) && extuserid.Contains(x.userid))
.Select(x => x.unionid).Distinct().ToList();
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 unionids.Contains(a.unionid) || extuserid.Contains(a.userid)
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,
deptid = c.deptid
};
var checkUser = GetHHuserEid();
var checkCorp = _crmContext.Ww_Corp.ToList();
var extlist = db.ToList();
if (!string.IsNullOrEmpty(companycode))
{
var companys = companycode.Split(',');
var newCompanys = new List<string>();//[{"Group":"东方软件事业部","Contains":"[DNZZ][DNYY][DNRW]","Target":"DNZZ,DNYY,DNRW"}]
foreach (var company in companys)
{
string codeformat = string.Format("[{0}]", company);
var canLook = canlookmsgList.FirstOrDefault(m => m.Contains.Contains(codeformat));
if (canLook != null)
newCompanys.AddRange(canLook.Target.Split(','));
}
newCompanys.AddRange(companys);
newCompanys = newCompanys.Distinct().ToList();
Dictionary<string, string> AlldictMM = new Dictionary<string, string>();//整个企业号能看
Dictionary<string, string> miniMM = new Dictionary<string, string>();//细节到部门ID能看
foreach (var company in newCompanys)
{
string codeformat = string.Format("[{0}]", company);
List<Ww_Corp> corplist = checkCorp.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[company].ToString();
int[] deptids = JsonHelper.JsonDivertToObj<int[]>(wox);
int[] newdeptids = GetAllCildDept(deptids, item.corpid);//新数据获取方式
foreach (var itdpem in newdeptids)
{
string vv = $"{item.corpid}_{itdpem}";
if (!miniMM.ContainsKey(vv))
miniMM.Add(vv, vv);
}
}
else
{
if (!AlldictMM.ContainsKey(item.corpid))
AlldictMM.Add(item.corpid, item.corpid);
}
}
}
foreach (var item in extlist)
{
if (item.corpid == "wx824b4ea054629084" && companycode == "QIND")
{
if (checkUser.Any(p => p.userid == item.userid))
{
continue;
}
}
else
{
if (AlldictMM.ContainsKey(item.corpid))//真个企业微信都能看
{
continue;
}
string vv = $"{item.corpid}_{item.deptid}";//只能小部门查看
if (miniMM.ContainsKey(vv))
{
continue;
}
}
item.isOutDept = 1;
}
}
return extlist;
}
/// <summary>
/// 获取外部联系人列表
/// </summary>
/// <param name="v_userid"></param>
/// <returns></returns>
public List<Ww_User_ExtuserModel> 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();
}
/// <summary>
/// 获取内部联系人好友列表
/// </summary>
/// <param name="v_userid"></param>
/// <param name="v_corpid"></param>
/// <returns></returns>
public List<Ww_InnerUserModel> 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<Ww_InnerUserModel> 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<thumb_avatar_Model>(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'%简单就好%'
/// <summary>
/// 查找客户
/// </summary>
/// <param name="name">电话号码,昵称,备注</param>
/// <returns></returns>
public List<Ww_FindUser_Model> Find_UserBySQL(ref Laypage pager, string name, string myphone, string companycode, string extuserid = null)
{
string connectStr = Utility.GetSettingByKey("ConnectionStrings:crmContext");//数据库链接
string sqlTXT = $@"
select
d.uname,
a.userid,
d.deptid,
a.corpid,
a.extuserid,
c.NAME,
c.exinfo,
c.avatar,
a.remark,
a.remarkmobile,
c.ctime,
d.mobile myphone
FROM
ww_user_extuser a
LEFT JOIN ww_extuser c ON `a`.`extuserid` = `c`.`userid` AND `a`.`corpid` = `c`.`corpid`
LEFT JOIN ww_hhuser d ON a.corpid = d.corpid AND a.userid = d.userid where 1=1 ";
List<MySqlParameter> parameters = new List<MySqlParameter>();
var config = _crmContext.Bas_Config.FirstOrDefault(m => m.code == "UserCenterGetUserInfoUrl");//用户中心获取用户信息接口
List<Ww_Corp> corpListA = _crmContext.Ww_Corp.ToList();
if (!string.IsNullOrEmpty(name))
{
name = name.Trim();
string mobilemd5 = Utility.GetMd5Str16(name + "-dg2022");
parameters.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "extuserid", Value = name });
parameters.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "name", Value = $"%{name}%" });
parameters.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "mobilemd5", Value = mobilemd5 });
sqlTXT += " and (a.extuserid=@extuserid or a.remark like @name or a.remarkmobile=@mobilemd5 ";
//var newResid = name;
//bool ss = Utility.ChekExtUserid(newResid);
//if (newResid.Length > 10 && Utility.ChekExtUserid(newResid))//看上去要是ID或者号码才进行远程查找
//{
// if (Utility.ChekMobile(newResid))//如果是手机号码格式那么改造成resid
// {
// newResid = ResUtil.CreateResId(newResid);//如果是号码,那么转换成号码格式
// }
// if (config != null)
// {
// try
// {
// var corpList = corpListA.Select(m => m.corpid).ToArray();
// var httpurl = config.value;//通过resid查找客户信息
// var objecb = new { mobiles = new string[] { newResid } };
// string retmss = Utility.PostAjaxData(httpurl, JsonHelper.ObjDivertToJson(objecb), Encoding.UTF8, new Dictionary<string, string>());
// var result = JsonHelper.JsonDivertToObj<SaleClusResult>(retmss);
// var alllist = result.list.Where(m => corpList.Contains(m.appid.Replace("_1", "")));
// //var onwhere = PredicateExtensionses.True<Ww_FindUser_Model>();
// var extlist = alllist.Where(m => m.appuserid.Length > 20).Select(m => m.appuserid);
// if (extlist.Count() > 0)
// sqlTXT += $" or a.extuserid in('{string.Join("','", extlist)}')";
// }
// catch (Exception e)
// {
// LogHelper.Error(e.ToString());
// };
// }
//}
if (!string.IsNullOrEmpty(extuserid))
{
var xextuserids = extuserid.Split(',');
sqlTXT += $" or a.extuserid in('{string.Join("','", xextuserids)}')";
}
sqlTXT += ") ";
}
else
{
if (!string.IsNullOrEmpty(extuserid))
{
var xextuserids = extuserid.Split(',');
sqlTXT += $" and a.extuserid in('{string.Join("','", xextuserids)}')";
}
}
if (!string.IsNullOrEmpty(myphone))
{
myphone = myphone.Trim();
sqlTXT += " and d.mobile =@myphone";
parameters.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "myphone", Value = myphone });
//db = db.Where(m => m.myphone == myphone);
}
var where = PredicateExtensionses.True<Ww_FindUser_Model>();
if (!string.IsNullOrEmpty(companycode))
{
int i = 0;
string codeformat = string.Format("[{0}]", companycode);
List<Ww_Corp> corplist = _crmContext.Ww_Corp.Where(m => m.companycode.Contains(codeformat)).ToList();
string deptSQL = "";
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<int[]>(wox);
int[] newdeptids = GetAllCildDept(deptids, item.corpid);//新数据获取方式
if (i == 0)
{
//where = where.And(m => m.corpid == item.corpid && newdeptids.Contains(m.deptid.Value));
deptSQL += $" ( d.corpid='{item.corpid}' and d.deptid in(" + string.Join(",", newdeptids) + ") ) ";
}
else
{
//where = where.Or(m => m.corpid == item.corpid && newdeptids.Contains(m.deptid.Value));
deptSQL += $" or ( d.corpid='{item.corpid}' and d.deptid in(" + string.Join(",", newdeptids) + ") ) ";
}
}
else
{
if (i == 0)
{
//where = where.And(m => m.corpid == item.corpid);
deptSQL += $" d.corpid='{item.corpid}' ";
}
else
{
//where = where.Or(m => m.corpid == item.corpid);
deptSQL += $" or d.corpid='{item.corpid}' ";
}
}
i++;
}
if (!string.IsNullOrEmpty(deptSQL))
{
sqlTXT += $" and ({deptSQL}) ";
}
}
sqlTXT += " limit 50";
var dblist = MySqlDbHelper.DataQueray(connectStr, CommandType.Text, sqlTXT, parameters.ToArray()).Tables[0].ToList<Ww_FindUser_Model>();
//Pager pager1 = new Pager() { page = pager.page, rows = pager.limit };
//PagerUtil.SetPager<Ww_FindUser_Model>(ref db, ref pager1);
//pager.count = pager1.totalRows;
////PagerUtil.SetPager<Ww_FindUser_Model>(ref db, ref pager);
//var dblist = db.ToList();
foreach (var item in dblist)
{
var cop = corpListA.FirstOrDefault(m => m.corpid == item.corpid);
if (cop != null)
item.corpname = cop.corpname;
}
return dblist;
}
/// <summary>
/// 查找客户
/// </summary>
/// <param name="name">电话号码,昵称,备注</param>
/// <returns></returns>
public List<Ww_FindUser_Model> Find_User(ref Laypage pager, string name, string myphone, string companycode)
{
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)
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<Ww_FindUser_Model>();
if (!string.IsNullOrEmpty(companycode))
{
int i = 0;
string codeformat = string.Format("[{0}]", companycode);
List<Ww_Corp> 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<int[]>(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<Ww_FindUser_Model>(ref db, ref pager1);
pager.count = pager1.totalRows;
//PagerUtil.SetPager<Ww_FindUser_Model>(ref db, ref pager);
return db.ToList();
}
public int[] GetAllCildDept(int[] deptids, string corpid)
{
Dictionary<int, int> dicdptlist = new Dictionary<int, int>();
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<int, int> dplist, string corpid, int id)
{
List<Ww_Dept> 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);
}
}
}
/// <summary>
/// 获取公司列表
/// </summary>
/// <returns></returns>
public List<Ww_Corp> Corp_Get()
{
return _crmContext.Ww_Corp.ToList();
}
/// <summary>
/// 获取群
/// </summary>
/// <param name="corp"></param>
/// <param name="roomid"></param>
/// <returns></returns>
public List<Ww_MsgRoom> GetRoom(ref Laypage pager, string corp, string name)
{
List<Ww_MsgRoom> list = new List<Ww_MsgRoom>();
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;
}
/// <summary>
/// 修改聊天群
/// </summary>
/// <param name="corp"></param>
/// <param name="roomid"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 获取单个聊天群
/// </summary>
/// <param name="corp"></param>
/// <param name="roomid"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 获取多个信息
/// </summary>
/// <param name="corp"></param>
/// <param name="roomids"></param>
/// <returns></returns>
public List<Ww_MsgRoom> GetRoomList(string corp, string roomids)
{
List<Ww_MsgRoom> roomlist = new List<Ww_MsgRoom>();
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();
}
/// <summary>
/// 获取群通过成员列表like
/// </summary>
/// <param name="corp"></param>
/// <param name="extendId">外部联系人ID</param>
/// <returns></returns>
public List<Ww_MsgRoom> GetRoomListByChengYuan(string corp, string extendId)
{
List<Ww_MsgRoom> roomlist = new List<Ww_MsgRoom>();
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();
}
/// <summary>
/// 获取群信息
/// </summary>
/// <param name="corp"></param>
/// <param name="room"></param>
/// <returns></returns>
public List<GroupUser> GetGroupUser(string corp, Ww_MsgRoom room)
{
string[] user = room.userlist.Split(',');
List<GroupUser> list = new List<GroupUser>();
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<HHuserInfo>(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;
}
/// <summary>
/// 初始化数据库
/// </summary>
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<object> GetDept(int roleid)
{
List<object> objlist = new List<object>();
List<Ww_Corp> corplsit = _crmContext.Ww_Corp.ToList();
List<Ww_Dept> deptlist = _crmContext.Ww_Dept.ToList();
List<Ww_Role_Dept> 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<object> GetChildDept(long parentid, string corpid, List<Ww_Dept> deptlist, int jibie, List<Ww_Role_Dept> roledept)
{
List<Ww_Dept> corpdept = deptlist.Where(m => m.corpid == corpid && m.parentid == parentid).ToList();
List<object> objlist = new List<object>();
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;
}
/// <summary>
/// 保存角色部门挂钩数据
/// </summary>
/// <param name="errors"></param>
/// <param name="list"></param>
/// <param name="roleid"></param>
/// <returns></returns>
public bool SaveRoleDeptID(ref ValidationErrors errors, List<Ww_Dept_Corp> list, int roleid)
{
bool result = false;
try
{
List<Ww_Dept_CorpInt> inlist = new List<Ww_Dept_CorpInt>();
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;
}
/// <summary>
/// 获取自己管理的成员列表
/// </summary>
/// <param name="v_name">ID</param>
/// <returns></returns>
public List<Ww_hhuserModel> WorList_Get_ByCompany(int type, ref Laypage pager, string v_name, string v_corpid, string eid, List<Ww_Dept_CorpInt> 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<Ww_hhuserModel>(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;
}
/// <summary>
/// 登陆员工获取所有可查看的部门ID
/// </summary>
/// <param name="roleids"></param>
/// <returns></returns>
public List<Ww_Dept_CorpInt> GetMyControlDeptId(int[] roleids)
{
Dictionary<string, Ww_Dept_CorpInt> dpt = new Dictionary<string, Ww_Dept_CorpInt>();
List<Ww_Role_Dept> controldept = _crmContext.Ww_Role_Dept.Where(m => roleids.Contains(m.roleid)).ToList();
List<Ww_Dept> 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<Ww_Dept_CorpInt> cmm = dpt.Values.Select(m => m).ToList();
return cmm;
}
private void GetChildDeptId(Dictionary<string, Ww_Dept_CorpInt> dpt, List<Ww_Dept> deptlist, int parentid, string corpid)
{
List<Ww_Dept> 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);
}
}
/// <summary>
/// 获取工号
/// </summary>
/// <param name="userid"></param>
/// <param name="corp"></param>
/// <returns></returns>
public Ww_hhuser_Eid GetHHuserEid(string userid, string corp)
{
return _crmContext.Ww_hhuser_Eid.FirstOrDefault(m => m.userid == userid && m.corpid == corp);
}
/// <summary>
/// 修改工号
/// </summary>
/// <param name="erros"></param>
/// <param name="model"></param>
/// <returns></returns>
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;
}
public List<Ww_hhuser_Eid> GetHHuserEid()
{
return _crmContext.Ww_hhuser_Eid.ToList();
}
#endregion
}
}