TG.WXCRM.V4/BLL/Ww/Ww_huser_BL.cs

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}");
}
}
}
}
}