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