using System; using System.Collections.Generic; using System.Data; using System.Data.OracleClient; using System.Linq; using WX.CRM.BLL.Base; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.DAL; using WX.CRM.DAL.Wx; using WX.CRM.IBLL.Wx; using WX.CRM.Model.Entity; using WX.CRM.Model.MAP; using WX.CRM.Model.QueryMap; using System.Data; using System.Data.OracleClient; using WX.CRM.BLL.Application.UserComBox; using Newtonsoft.Json; using WX.CRM.Common.Layui; using System.Text; using WX.CRM.Common.StockHelper; using System.Security.Policy; namespace WX.CRM.BLL.Wx { public class WX_WORKACCOUNT_BL : DbContextRepository, IWX_WORKACCOUNT { private WX_WORKACCOUNT_DAL wx_WorkAccount_DAL = new WX_WORKACCOUNT_DAL(); private CACHE_BL _cache_bl = new CACHE_BL(); public List GetMyWorkAccountList(decimal userId) { using (var db = new crmContext()) { var queryData = db.WX_WORKACCOUNT.AsQueryable(); queryData = queryData.Where(m => m.INNERUSERID == userId); return queryData.ToList(); } } public List GetList(ref Pager page, string userName, string alias, string conRemark, string nickName, string resID, decimal[] isValids, decimal innerUserId, string stime, string etime) { using (var db = new crmContext()) { var queryData = db.WX_WORKACCOUNT.AsQueryable(); if (!string.IsNullOrWhiteSpace(userName)) { userName = userName.Trim(); queryData = queryData.Where(m => m.USERNAME.Contains(userName)); } if (!string.IsNullOrWhiteSpace(alias)) { alias = alias.Trim(); queryData = queryData.Where(m => m.ALIAS.Contains(alias)); } if (!string.IsNullOrWhiteSpace(conRemark)) { conRemark = conRemark.Trim(); queryData = queryData.Where(m => m.CONREMARK.Contains(conRemark)); } if (!string.IsNullOrWhiteSpace(nickName)) { nickName = nickName.Trim(); queryData = queryData.Where(m => m.NICKNAME.Contains(nickName)); } if (!string.IsNullOrWhiteSpace(resID)) { resID = resID.Trim(); queryData = queryData.Where(m => m.RESID == resID); } if (isValids != null && isValids.Length > 0) { queryData = queryData.Where(m => isValids.Contains(m.ISVALID.Value)); } if (!string.IsNullOrWhiteSpace(stime)) { DateTime time1 = Convert.ToDateTime(stime); queryData = queryData.Where(m => m.CTIME >= time1); } if (!string.IsNullOrWhiteSpace(etime)) { DateTime time2 = Convert.ToDateTime(etime).AddDays(1); queryData = queryData.Where(m => m.CTIME < time2); } if (innerUserId > 0) { queryData = queryData.Where(m => m.INNERUSERID == innerUserId); } queryData = queryData.OrderByDescending(m => m.CTIME); PagerUtil.SetPager(ref queryData, ref page); return queryData.ToList(); } } public List GetList(ref Pager page, string userName, string alias, string conRemark, string nickName, string resID, decimal? groupId, decimal? userId, decimal? isValid, string stime, string etime) { using (var db = new crmContext()) { //var queryData = db.WX_WORKACCOUNT.AsQueryable(); var queryData = from n in db.WX_WORKACCOUNT join c in db.RES_CUSTOMER on n.RESID equals c.RESID select new WX_WORKACCOUNT { PKID = n.PKID, RESID = c.UMID, USERNAME = n.USERNAME, ALIAS = n.ALIAS, CONREMARK = n.CONREMARK, DOMAINLIST = n.DOMAINLIST, NICKNAME = n.NICKNAME, PYINITIAL = n.PYINITIAL, QUANPIN = n.QUANPIN, SHOWHEAD = n.SHOWHEAD, TYPE = n.TYPE, WEIBOFLAG = n.WEIBOFLAG, WEIBONICKNAME = n.WEIBONICKNAME, CONREMARKPYFULL = n.CONREMARKPYFULL, CONREMARKPYSHORT = n.CONREMARKPYSHORT, LVBUFF = n.LVBUFF, VERFYFLAG = n.VERFYFLAG, ENCRYPTUSERNAME = n.ENCRYPTUSERNAME, CHATROOMFLAG = n.CHATROOMFLAG, DELETEFLAG = n.DELETEFLAG, CONTACTLABELIDS = n.CONTACTLABELIDS, CTIME = n.CTIME, QRCODEURL = n.QRCODEURL, INNERUSERID = n.INNERUSERID, ISVALID = n.ISVALID, PAUSEENDTIME = n.PAUSEENDTIME, QUANTITY = n.QUANTITY, ISFENGHAO = n.ISFENGHAO, FENGHAOTIME = n.FENGHAOTIME, }; if (!string.IsNullOrWhiteSpace(userName)) { userName = userName.Trim(); queryData = queryData.Where(m => m.USERNAME.Contains(userName)); } if (!string.IsNullOrWhiteSpace(alias)) { alias = alias.Trim(); queryData = queryData.Where(m => m.ALIAS.Contains(alias)); } if (!string.IsNullOrWhiteSpace(conRemark)) { conRemark = conRemark.Trim(); queryData = queryData.Where(m => m.CONREMARK.Contains(conRemark)); } if (!string.IsNullOrWhiteSpace(nickName)) { nickName = nickName.Trim(); queryData = queryData.Where(m => m.NICKNAME.Contains(nickName)); } if (!string.IsNullOrWhiteSpace(resID)) { resID = resID.Trim(); queryData = queryData.Where(m => m.RESID == resID); } if (!string.IsNullOrWhiteSpace(stime)) { DateTime time1 = Convert.ToDateTime(stime); queryData = queryData.Where(m => m.CTIME >= time1); } if (!string.IsNullOrWhiteSpace(etime)) { DateTime time2 = Convert.ToDateTime(etime).AddDays(1); queryData = queryData.Where(m => m.CTIME < time2); } if (isValid.HasValue) { queryData = queryData.Where(m => m.ISVALID == isValid); } //只要userid选中了,就按userid查询 if (userId.HasValue && userId.Value > 0) { queryData = queryData.Where(m => m.INNERUSERID == userId); } //当选择了组,然后userid没选中的话,按用户组查询 else if (groupId.HasValue && groupId.Value > 0) { decimal g = groupId.Value; var returnData = (from a in queryData join b in db.BAS_INNERUSERGROUP on a.INNERUSERID equals b.INNERUSERID where b.GID == g select a); queryData = returnData; } queryData = queryData.OrderByDescending(m => m.CTIME); PagerUtil.SetPager(ref queryData, ref page); return queryData.ToList(); } } public List GetAll(string[] userNames, string alias, string conRemark, string nickName, string resID, string groupId, decimal? userId, decimal? isValid, string stime, string etime, int isDismiss) { using (var db = new crmContext()) { var queryData = from a in db.WX_WORKACCOUNT join b in db.BAS_INNERUSERGROUP on a.INNERUSERID equals b.INNERUSERID into tmp1 from ab in tmp1.DefaultIfEmpty() join c in db.BAS_INNERUSER on a.INNERUSERID equals c.PKID into tmp2 from ac in tmp2.DefaultIfEmpty() join d in db.WX_ALIVE on a.USERNAME equals d.USERNAME into jiontemp from d in jiontemp.DefaultIfEmpty() //where c.ISDISMISS==0//临时添加 select new WxWorkAccountView() { WxWorkaccount = a, GroupId = ab.GID, ISDISMISS = ac.ISDISMISS, VERSION = d.VERSION }; if (isDismiss > -1) { queryData = queryData.Where(m => m.ISDISMISS == isDismiss); } if (userNames != null && userNames.Length > 0) { queryData = queryData.Where(m => userNames.Contains(m.WxWorkaccount.USERNAME)); } if (!string.IsNullOrWhiteSpace(alias)) { alias = alias.Trim(); queryData = queryData.Where(m => m.WxWorkaccount.ALIAS.Contains(alias)); } if (!string.IsNullOrWhiteSpace(conRemark)) { conRemark = conRemark.Trim(); queryData = queryData.Where(m => m.WxWorkaccount.CONREMARK.Contains(conRemark)); } if (!string.IsNullOrWhiteSpace(nickName)) { nickName = nickName.Trim(); queryData = queryData.Where(m => m.WxWorkaccount.NICKNAME.Contains(nickName)); } if (!string.IsNullOrWhiteSpace(resID)) { resID = resID.Trim(); queryData = queryData.Where(m => m.WxWorkaccount.RESID == resID); } if (!string.IsNullOrWhiteSpace(stime)) { DateTime time1 = Convert.ToDateTime(stime); queryData = queryData.Where(m => m.WxWorkaccount.CTIME >= time1); } if (!string.IsNullOrWhiteSpace(etime)) { DateTime time2 = Convert.ToDateTime(etime).AddDays(1); queryData = queryData.Where(m => m.WxWorkaccount.CTIME < time2); } if (isValid.HasValue) { queryData = queryData.Where(m => m.WxWorkaccount.ISVALID == isValid); } //只要userid选中了,就按userid查询 if (userId.HasValue && userId.Value > 0) { queryData = queryData.Where(m => m.WxWorkaccount.INNERUSERID == userId); } //当选择了组,然后userid没选中的话,按用户组查询 else if (!string.IsNullOrWhiteSpace(groupId)) { //decimal g = groupId.Value; var _groupids = OperationUtil.ConvertToDecimal(groupId.Split(',')); List groupList = new List(); if (_groupids != null) { foreach (var g in _groupids) { groupList.Add(g); } } if (groupList != null) { var returnData = (from a in queryData join b in db.BAS_INNERUSERGROUP on a.WxWorkaccount.INNERUSERID equals b.INNERUSERID where groupList.Contains(b.GID) select a); queryData = returnData; } } queryData = queryData.OrderByDescending(m => m.GroupId).ThenBy(m => m.WxWorkaccount.INNERUSERID); return queryData.ToList(); } } public bool Update(ref ValidationErrors errors, string alias, string resID, string qrCodeUrl, decimal innerUserId, decimal? quantity, out decimal workAccountPkId) { try { using (crmContext db = new crmContext()) { var model = db.WX_WORKACCOUNT.FirstOrDefault(m => m.ALIAS == alias); if (model != null) { model.RESID = resID; model.QRCODEURL = qrCodeUrl; model.INNERUSERID = innerUserId; model.QUANTITY = quantity; workAccountPkId = model.PKID; return db.SaveChanges().GetResult(); } else { model = new WX_WORKACCOUNT(); model.PKID = new SEQUENCES_BL().Seq_base_get(); model.ALIAS = alias; model.RESID = resID; model.QRCODEURL = qrCodeUrl; model.INNERUSERID = innerUserId; model.CTIME = DateTime.Now; model.QUANTITY = quantity; db.WX_WORKACCOUNT.Add(model); workAccountPkId = model.PKID; return db.SaveChanges().GetResult(); } } } catch (Exception ex) { workAccountPkId = 0; errors.Add(ex.Message); return false; } } public bool WxUserBindToInnerUser(decimal innerUserId, decimal workAccountPkId, string alias, string startDate, DateTime ctime, out string errmsg) { return wx_WorkAccount_DAL.WxUserBindToInnerUser(innerUserId, workAccountPkId, alias, startDate, ctime, out errmsg); } public List GetAliveList(decimal?[] isValids) { using (var db = new crmContext()) { var queryData = db.WX_WORKACCOUNT.AsQueryable(); if (isValids != null && isValids.Length > 0) { queryData = queryData.Where(m => isValids.Contains(m.ISVALID)); } else { queryData = queryData.Where(m => m.ISVALID != 0); } var returnData = from a in queryData join b in db.WX_ALIVE on a.USERNAME equals b.USERNAME into jiontemp from b in jiontemp.DefaultIfEmpty() join c in db.WX_WORKACCOUNT_INIT on a.ALIAS equals c.ALIAS into jiontemp2 from c in jiontemp2.DefaultIfEmpty() join d in db.BAS_GROUPLEADER on a.INNERUSERID equals d.INNERUSERID into jiontemp3 from d in jiontemp3.DefaultIfEmpty() select new WX_WORKACCOUNT_ALIVE() { UserName = a.USERNAME, Alias = a.ALIAS, NickName = a.NICKNAME, LastTime = b.LASTTIME, InnerUserId = a.INNERUSERID, Version = b.VERSION, Uin = b.UIN, IsValid = a.ISVALID, AuditMemo = c.AUDITMEMO, LeaderType = d.LEADERTYPE, Quantity = a.QUANTITY, ISFENGHAO = a.ISFENGHAO, FENGHAOTIME = a.FENGHAOTIME }; List list = new List(); foreach (var item in returnData) { if (item.LastTime.HasValue && DateTime.Now.AddMinutes(-10) < item.LastTime) { item.OnLine = 1; } list.Add(item); } return list.OrderByDescending(m => m.OnLine).OrderByDescending(m => m.LastTime).ToList(); } } public List Get24HoursNoWeixinFriendAliveList(List weixinList) { using (var db = new crmContext()) { var queryData = db.WX_WORKACCOUNT.AsQueryable(); queryData = queryData.Where(m => weixinList.Contains(m.ALIAS)); var returnData = from a in queryData join b in db.WX_ALIVE on a.USERNAME equals b.USERNAME into jiontemp from b in jiontemp.DefaultIfEmpty() join c in db.WX_WORKACCOUNT_INIT on a.ALIAS equals c.ALIAS into jiontemp2 from c in jiontemp2.DefaultIfEmpty() join d in db.BAS_GROUPLEADER on a.INNERUSERID equals d.INNERUSERID into jiontemp3 from d in jiontemp3.DefaultIfEmpty() select new WX_WORKACCOUNT_ALIVE() { UserName = a.USERNAME, Alias = a.ALIAS, NickName = a.NICKNAME, LastTime = b.LASTTIME, InnerUserId = a.INNERUSERID, Version = b.VERSION, Uin = b.UIN, IsValid = a.ISVALID, AuditMemo = c.AUDITMEMO, LeaderType = d.LEADERTYPE, Quantity = a.QUANTITY, ISFENGHAO = a.ISFENGHAO, FENGHAOTIME = a.FENGHAOTIME }; List list = new List(); foreach (var item in returnData) { if (item.LastTime.HasValue && DateTime.Now.AddMinutes(-10) < item.LastTime) { item.OnLine = 1; } list.Add(item); } return list.OrderByDescending(m => m.OnLine).OrderByDescending(m => m.LastTime).ToList(); } } /// /// 通过工作微信获取 /// /// /// public List GetRcontactList(string workusername, string column, string sort) { return new WX_WORKACCOUNT_DAL().GetRcontactByWorkAccount(workusername, column, sort); } /// /// 通过工作微信获取 /// /// /// public List GetGroupsByWorkAccount(string workusername, string column, string sort) { return new WX_WORKACCOUNT_DAL().GetGroupsByWorkAccount(workusername, column, sort); } public WX_WORKACCOUNT GetWorAccount(string worusername) { using (var db = new crmContext()) { return db.WX_WORKACCOUNT.FirstOrDefault(m => m.USERNAME == worusername); } } public bool EveryDayManualPauseHandle(out string errmsg) { return wx_WorkAccount_DAL.EveryDayManualPauseHandle(out errmsg); } public bool EveryDaySystemPauseHandle(out string errmsg) { return wx_WorkAccount_DAL.EveryDaySystemPauseHandle(out errmsg); } public List GetWxResourceReport(QueryUserComboDto usercomboDto, DateTime sTime, DateTime eTime, decimal curMonth, decimal? resType, DateTime? cjTime1, DateTime? cjTime2) { if (!string.IsNullOrWhiteSpace(usercomboDto.deptId)) { UserServices userservices = new UserServices(); List deptIDS = new List(); List gidS = new List(); userservices.GetAllDeptIDOrGidByDeptStr(usercomboDto.deptId, ref deptIDS, ref gidS);//获取所有的组别和gid usercomboDto.deptId = string.Join(",", deptIDS); } return wx_WorkAccount_DAL.GetWxResourceReport(usercomboDto, sTime, eTime, curMonth, resType, cjTime1, cjTime2); } public List GetOrderResourceReport(DateTime sTime, DateTime eTime) { return wx_WorkAccount_DAL.GetOrderResourceReport(sTime, eTime); } public DataTable UpdateAliasFengHao(string v_alias, int v_isFenghao) { return wx_WorkAccount_DAL.UpdateAliasFengHao(v_alias, v_isFenghao); } public WxResourceDay GetWxResourceDay(DateTime sTime, DateTime eTime) { return wx_WorkAccount_DAL.GetWxResourceDay(sTime, eTime); } public void GenWxResourceCount() { wx_WorkAccount_DAL.GenWxResourceCount(); } public DataTable GetWorkAccountBindByInnerUserId(decimal innerUserId) { var ds = wx_WorkAccount_DAL.GetWorkAccountBindByInnerUserId(innerUserId); if (ds != null && ds.Tables[0].Rows.Count > 0) { return ds.Tables[0]; } return new DataTable(); } public List Get24HoursNoWeixinFriend() { return wx_WorkAccount_DAL.Get24HoursNoWeixinFriend(); } public int GetWeiXinPauseTime(string alias) { return wx_WorkAccount_DAL.GetWeiXinPauseTime(alias); } public List GetWorkAccountAllList(int isDismiss, decimal? groupId) { using (var db = new crmContext()) { var queryData = from a in db.WX_WORKACCOUNT join b in db.BAS_INNERUSERGROUP on a.INNERUSERID equals b.INNERUSERID into tmp1 from ab in tmp1.DefaultIfEmpty() join c in db.BAS_INNERUSER on a.INNERUSERID equals c.PKID into tmp2 from ac in tmp2.DefaultIfEmpty() join d in db.WX_ALIVE on a.USERNAME equals d.USERNAME into jiontemp from d in jiontemp.DefaultIfEmpty() join e in db.WX_WORKACCOUNT_INIT on a.ALIAS equals e.ALIAS into jiontemp2 from e in jiontemp2.DefaultIfEmpty() where a.ISVALID == 2 select new WxWorkAccountView() { WxWorkaccount = a, GroupId = ab.GID, ISDISMISS = ac.ISDISMISS, VERSION = d.VERSION, LASTTIME = d.LASTTIME, MOBILE = e.MOBILE, Uin = d.UIN }; if (isDismiss > -1) { queryData = queryData.Where(m => m.ISDISMISS == isDismiss); } //当选择了组 if (groupId.HasValue && groupId.Value > 0) { decimal g = groupId.Value; var returnData = (from a in queryData join b in db.BAS_INNERUSERGROUP on a.WxWorkaccount.INNERUSERID equals b.INNERUSERID where b.GID == g select a); queryData = returnData; } List list = new List(); foreach (var item in queryData) { if (item.LASTTIME.HasValue && DateTime.Now.AddMinutes(-10) < item.LASTTIME) { item.OnLine = 1; } list.Add(item); } //queryData = queryData.OrderByDescending(m => m.GroupId).ThenBy(m => m.WxWorkaccount.INNERUSERID); return list.OrderByDescending(m => m.OnLine).OrderByDescending(m => m.LASTTIME).ToList(); } } public List GetUserWorkStatistics(Pager pager, List userId, DateTime Stime, DateTime Etime, bool hideQuit) { OracleConnection conn = new OracleConnection(OracleHelper.AYCRMConn); List result = new List(); if (conn.State == ConnectionState.Closed) conn.Open(); try { using (OracleTransaction trans = conn.BeginTransaction()) { var p = new List { new OracleParameter{ ParameterName="start_date", OracleType = OracleType.VarChar,Value=Stime.ToString("yyyy-MM-dd") }, new OracleParameter{ ParameterName="end_date", OracleType = OracleType.VarChar, Value=Etime.ToString("yyyy-MM-dd") }, new OracleParameter{ParameterName="results",OracleType=OracleType.Cursor,Direction = ParameterDirection.Output} }; var ds = OracleHelper.DataQueray(trans, CommandType.StoredProcedure, "DongSanDataReport", p.ToArray()); trans.Commit(); if (null != ds && ds.Tables[0].Rows.Count > 0) { var dataRows = ds.Tables[0].ToList(); var list = dataRows.Where(m => userId.Contains(m.PKID)).AsQueryable(); if (hideQuit) { list = list.Where(m => m.ISDISMISS == 0); } result = list.ToList(); //PagerUtil.SetPager(ref list, ref pager);//分页 } else { return new List(); } } #region 加微统计 var url = Utility.GetSettingByKey("rzapi"); //获取 统计数据 var fullApi = $"{url}/Api/EarlyWarning/ExternalUserTotal"; Dictionary param = new Dictionary(); param.Add("dateFrom", Stime.ToString("yyyy-MM-dd HH:mm:ss")); param.Add("dateTo", Etime.ToString("yyyy-MM-dd HH:mm:ss")); param.Add("eids", result.Select(m => Convert.ToInt32(m.EID))); var dataJson = Utility.PostAjaxData(fullApi, JsonConvert.SerializeObject(param), System.Text.Encoding.UTF8); var queData = JsonConvert.DeserializeObject>>(dataJson); var totalGup = queData.Data.ToDictionary(m => m.eid, n => n.total);//加微数 var unionGup = queData.Data.ToDictionary(m => m.eid, n => n.eidrepeattypenew);//工号去重 var amountGup = queData.Data.ToDictionary(m => m.eid, n => n.eidrepeattype1deptnew);//部门去重 foreach (var item in result) { var eid = Convert.ToInt32(item.EID); item.WX_AMOUNT = 0; item.WX_AMOUNT_UNIONID = 0; item.WX_AMOUNT_DISTINCT = 0; if (totalGup.ContainsKey(eid)) { item.WX_AMOUNT = totalGup[eid] ?? 0; } if (unionGup.ContainsKey(eid)) { item.WX_AMOUNT_UNIONID = unionGup[eid] ?? 0; } if (amountGup.ContainsKey(eid)) { item.WX_AMOUNT_DISTINCT = amountGup[eid] ?? 0; } if (item.TOTAL_AMOUNT > 0) { item.WX_RATE = Math.Round(item.WX_AMOUNT / item.TOTAL_AMOUNT * 100, 2); item.WX_RATE_DISTINCT = Math.Round(item.WX_AMOUNT_DISTINCT / item.TOTAL_AMOUNT * 100, 2); item.WX_RATE_UNIONID = Math.Round(item.WX_AMOUNT_UNIONID / item.TOTAL_AMOUNT * 100, 2); } } #endregion 加微统计 #region 旧版加微统计 //MySqlDbHelper mySqlhelper = new MySqlDbHelper("MysqlQWConn"); //using (var db = new crmContext()) //{ // //用户userid与 eid 对应关系 // var eid2innerId = db.Database.SqlQuery("select corpid,eid,Userid from ww_hhuser_eid"); // //本部门 所有数据 // var allextuser = mySqlhelper.QueryEntitys($@"select * from ww_user_extuser where // CONCAT(corpid,userid) in ('{string.Join("','", eid2innerId.Select(m => m.CORPID + m.USERID))}')"); // //代码提取最早的一条数据 // #region 加微数 // var allUser_extuser = allextuser // .Where(m => m.Ctime >= Stime && m.Ctime <= Etime.AddDays(1).AddSeconds(-1))//时间筛选 // .GroupBy(m => m.CORPID + m.USERID); //时间分组 // //匹配eid // var gup = eid2innerId.Join(allUser_extuser, m => m.CORPID + m.USERID, n => n.Key, (m, n) => // { // return new // { // eid = m.EID, // count = n.Count() // }; // }).GroupBy(m => m.eid).ToDictionary(m => m.Key.ToString(), n => n.Sum(i => i.count)); // #endregion // #region 去重加微数 // var trueExtuser = new List(); // //去重 // var extuser_gup_dis = allextuser.GroupBy(m => m.Extuserid); // foreach (var item in extuser_gup_dis) // { // var first = item.ToList().OrderBy(m => m.Ctime).First();//获取最早添加好友的记录 // trueExtuser.Add(first); // } // //统计 时间范围内 去重后加微数 // var allUser_extuser_dis = trueExtuser // .Where(m=>m.Ctime>= Stime && m.Ctime<=Etime.AddDays(1).AddSeconds(-1))//时间筛选 // .GroupBy(m => m.CORPID + m.USERID).Select(i => // new WW_USER_EXTUSERID() // { // CORPID = i.First().CORPID, // USERID = i.First().USERID, // Count = i.Count() // }); // //匹配eid // var gup_dis = eid2innerId.Join(allUser_extuser_dis, m => m.CORPID + m.USERID, n => n.CORPID + n.USERID, (m, n) => // { // return new // { // eid = m.EID, // count = n.Count // }; // }).GroupBy(m => m.eid).ToDictionary(m => m.Key.ToString(), n => n.Sum(i => i.count)); // #endregion // foreach (var item in result) // { // item.WX_RATE = 0; // item.WX_AMOUNT = 0; // item.WX_AMOUNT_DISTINCT = 0; // if (gup.ContainsKey(item.EID.ToString())) // { // item.WX_AMOUNT = gup[item.EID.ToString()]; // } // if (gup_dis.ContainsKey(item.EID.ToString())) // { // item.WX_AMOUNT_DISTINCT = gup_dis[item.EID.ToString()]; // } // if (item.TOTAL_AMOUNT > 0) // { // item.WX_RATE = Math.Round(item.WX_AMOUNT / item.TOTAL_AMOUNT * 100, 2); // item.WX_RATE_DISTINCT = Math.Round(item.WX_AMOUNT_DISTINCT / item.TOTAL_AMOUNT * 100, 2); // } // } //} #endregion 旧版加微统计 } catch (Exception ex) { throw ex; } finally { conn.Close(); } #region 排序 //排序 if (pager.order == "desc") { switch (pager.sort) { case "total_amount": result = result.OrderByDescending(c => c.TOTAL_AMOUNT).ToList(); break; case "reg_amount": result = result.OrderByDescending(c => c.REG_AMOUNT).ToList(); break; case "reg_f_amount": result = result.OrderByDescending(c => c.REG_F_AMOUNT).ToList(); break; case "act_amount": result = result.OrderByDescending(c => c.ACT_AMOUNT).ToList(); break; case "other_amount": result = result.OrderByDescending(c => c.OTHER_AMOUNT).ToList(); break; case "wx_amount": result = result.OrderByDescending(c => c.WX_AMOUNT).ToList(); break; case "explain_amount": result = result.OrderByDescending(c => c.EXPLAIN_AMOUNT).ToList(); break; case "explain_rate": result = result.OrderByDescending(c => c.EXPLAIN_RATE).ToList(); break; case "open_amount": result = result.OrderByDescending(c => c.OPEN_AMOUNT).ToList(); break; case "deal_amount": result = result.OrderByDescending(c => c.DEAL_AMOUNT).ToList(); break; case "deal_rate": result = result.OrderByDescending(c => c.DEAL_RATE).ToList(); break; default: result = result.OrderByDescending(c => c.TOTAL_AMOUNT).ToList(); break; } } else { switch (pager.sort) { case "total_amount": result = result.OrderBy(c => c.TOTAL_AMOUNT).ToList(); break; case "reg_amount": result = result.OrderBy(c => c.REG_AMOUNT).ToList(); break; case "reg_f_amount": result = result.OrderBy(c => c.REG_F_AMOUNT).ToList(); break; case "act_amount": result = result.OrderBy(c => c.ACT_AMOUNT).ToList(); break; case "other_amount": result = result.OrderBy(c => c.OTHER_AMOUNT).ToList(); break; case "wx_amount": result = result.OrderBy(c => c.WX_AMOUNT).ToList(); break; case "explain_amount": result = result.OrderBy(c => c.EXPLAIN_AMOUNT).ToList(); break; case "explain_rate": result = result.OrderBy(c => c.EXPLAIN_RATE).ToList(); break; case "open_amount": result = result.OrderBy(c => c.OPEN_AMOUNT).ToList(); break; case "deal_amount": result = result.OrderBy(c => c.DEAL_AMOUNT).ToList(); break; case "deal_rate": result = result.OrderBy(c => c.DEAL_RATE).ToList(); break; default: result = result.OrderBy(c => c.TOTAL_AMOUNT).ToList(); break; } } #endregion 排序 return result; } public List GetMediareport(Pager pager, List userId, string deptid, string uname, string eid, DateTime Stime, DateTime Etime, bool hideQuit) { List reslut = new List(); try { List mediareportList = new List(); var url = Utility.GetSettingByKey("CmsApi"); using (var db = new crmContext()) { //获取 统计数据 var fullApi = $"{url}/Read/QueryMediareport3.html"; var dataJson = Utility.GetData(fullApi, $"&deptid={deptid}&starttime={Stime.ToString("yyyy-MM-dd")}&endtime={Etime.ToString("yyyy-MM-dd")}", System.Text.Encoding.Unicode); var queData = JsonConvert.DeserializeObject>>(dataJson); if (queData.s) { mediareportList = queData.d; } reslut = (from iu in db.BAS_INNERUSER join iug in db.BAS_INNERUSERGROUP on iu.PKID equals iug.INNERUSERID join ig in db.BAS_INNERGROUP on iug.GID equals ig.GID where userId.Contains(iu.PKID) && (!hideQuit || (hideQuit && iu.ISDISMISS == 0)) //过滤前端组选择 select new UserWorkReport3View() { UNAME = iu.UNAME, EID = iu.EID, GID = ig.GID, GNAME = ig.GNAME }).ToList(); //合并数据 var medGup = mediareportList.Where(m => m.eid != null).GroupBy(m => m.eid).ToDictionary(m => m.Key, n => n.ToList()); //过滤一下 reslut = reslut.Where(m => (string.IsNullOrEmpty(uname) || m.UNAME.Contains(uname)) && (string.IsNullOrEmpty(eid) || m.EID.ToString() == eid)).ToList(); //加微数:total - addway202 //取关数:unsubscribe - unsubscribeaddway202 //加微去重(部门去重):repeattype + repeattype100 + repeattype150 //PC注册人数:dgeeregsdept //APP注册人数: appregsdept //成交人数:totaluv //当月成交人数:totaluv_m0 foreach (var item in reslut) { if (medGup.ContainsKey(item.EID)) { var medList = medGup[item.EID]; item.WX_TOTAL = medList.Sum(m => (m.total ?? 0) - (m.addway202 ?? 0));//加微 item.WX_TOTAL_RE_DEP = medList.Sum(m => (m.repeattype ?? 0) + (m.repeattype100 ?? 0) + (m.repeattype150 ?? 0));//部门去重 item.DEL_TOTAL = medList.Sum(m => (m.unsubscribe ?? 0) - (m.unsubscribeaddway202 ?? 0));//取关 item.REG_TOTAL_PC = medList.Sum(m => m.dgeeregsdept ?? 0);//PC注册 item.REG_TOTAL_APP = medList.Sum(m => m.appregsdept ?? 0);//APP注册 item.DEAL_TOTAL = medList.Sum(m => m.totaluv ?? 0);//成交量 item.DEAL_TOTAL_M0 = medList.Sum(m => m.totaluv_m0 ?? 0);//当月成交量 } else { item.WX_TOTAL = 0;//加微 item.WX_TOTAL_RE_DEP = 0;//部门去重 item.DEL_TOTAL = 0;//取关 item.REG_TOTAL_PC = 0;//PC注册 item.REG_TOTAL_APP = 0;//APP注册 item.DEAL_TOTAL = 0;//成交量 item.DEAL_TOTAL_M0 = 0;//当月成交量 } item.REG_TOTAL = item.REG_TOTAL_APP + item.REG_TOTAL_PC; item.DEL_RATE = GetRate(item.DEL_TOTAL, item.WX_TOTAL);//删除微信率 item.REG_RATE = GetRate(item.REG_TOTAL, item.WX_TOTAL_RE_DEP);//注册率 item.REG_RATE_APP = GetRate(item.REG_TOTAL_APP, item.WX_TOTAL_RE_DEP);//注册率 item.REG_RATE_PC = GetRate(item.REG_TOTAL_PC, item.WX_TOTAL_RE_DEP);//注册率 item.DEAL_RATE = GetRate(item.DEAL_TOTAL, item.WX_TOTAL);//成交率 } #region 排序 //排序 if (pager.order == "desc") { switch (pager.sort.ToLower()) { case "wx_total_re_dep": reslut = reslut.OrderByDescending(c => c.WX_TOTAL_RE_DEP).ToList(); break; case "wx_total": reslut = reslut.OrderByDescending(c => c.WX_TOTAL).ToList(); break; case "del_total": reslut = reslut.OrderByDescending(c => c.DEL_TOTAL).ToList(); break; case "reg_total": reslut = reslut.OrderByDescending(c => c.REG_TOTAL).ToList(); break; case "reg_total_app": reslut = reslut.OrderByDescending(c => c.REG_TOTAL_APP).ToList(); break; case "reg_total_pc": reslut = reslut.OrderByDescending(c => c.REG_TOTAL_PC).ToList(); break; case "deal_total": reslut = reslut.OrderByDescending(c => c.DEAL_TOTAL).ToList(); break; case "del_rate": reslut = reslut.OrderByDescending(c => c.DEL_RATE).ToList(); break; case "reg_rate": reslut = reslut.OrderByDescending(c => c.REG_RATE).ToList(); break; case "reg_rate_app": reslut = reslut.OrderByDescending(c => c.REG_RATE_APP).ToList(); break; case "reg_rate_pc": reslut = reslut.OrderByDescending(c => c.REG_RATE_PC).ToList(); break; case "deal_rate": reslut = reslut.OrderByDescending(c => c.DEAL_RATE).ToList(); break; case "deal_total_m0": reslut = reslut.OrderByDescending(c => c.DEAL_TOTAL_M0).ToList(); break; default: reslut = reslut.OrderByDescending(c => c.WX_TOTAL).ToList(); break; } } else { switch (pager.sort.ToLower()) { case "wx_total_re_dep": reslut = reslut.OrderBy(c => c.WX_TOTAL_RE_DEP).ToList(); break; case "wx_total": reslut = reslut.OrderBy(c => c.WX_TOTAL).ToList(); break; case "del_total": reslut = reslut.OrderBy(c => c.DEL_TOTAL).ToList(); break; case "reg_total": reslut = reslut.OrderBy(c => c.REG_TOTAL).ToList(); break; case "reg_total_app": reslut = reslut.OrderBy(c => c.REG_TOTAL_APP).ToList(); break; case "reg_total_pc": reslut = reslut.OrderBy(c => c.REG_TOTAL_PC).ToList(); break; case "deal_total": reslut = reslut.OrderBy(c => c.DEAL_TOTAL).ToList(); break; case "del_rate": reslut = reslut.OrderBy(c => c.DEL_RATE).ToList(); break; case "reg_rate": reslut = reslut.OrderBy(c => c.REG_RATE).ToList(); break; case "reg_rate_app": reslut = reslut.OrderBy(c => c.REG_RATE_APP).ToList(); break; case "reg_rate_pc": reslut = reslut.OrderBy(c => c.REG_RATE_PC).ToList(); break; case "deal_rate": reslut = reslut.OrderBy(c => c.DEAL_RATE).ToList(); break; case "deal_total_m0": reslut = reslut.OrderBy(c => c.DEAL_TOTAL_M0).ToList(); break; default: reslut = reslut.OrderBy(c => c.WX_TOTAL).ToList(); break; } } #endregion 排序 //合计 UserWorkReport3View sum = new UserWorkReport3View(); sum.GNAME = "合计"; sum.UNAME = "合计"; sum.WX_TOTAL = reslut.Sum(m => m.WX_TOTAL);//加微 sum.WX_TOTAL_RE_DEP = reslut.Sum(m => m.WX_TOTAL_RE_DEP);//部门 去重 sum.DEL_TOTAL = reslut.Sum(m => m.DEL_TOTAL);//删除微信 sum.REG_TOTAL = reslut.Sum(m => m.REG_TOTAL);//注册 sum.REG_TOTAL_PC = reslut.Sum(m => m.REG_TOTAL_PC);//注册 sum.REG_TOTAL_APP = reslut.Sum(m => m.REG_TOTAL_APP);//注册 sum.DEAL_TOTAL = reslut.Sum(m => m.DEAL_TOTAL);//成交量 sum.DEAL_TOTAL_M0 = reslut.Sum(m => m.DEAL_TOTAL_M0);//当月成交量 sum.DEL_RATE = GetRate(sum.DEL_TOTAL, sum.WX_TOTAL);//删除微信率 sum.REG_RATE = GetRate(sum.REG_TOTAL, sum.WX_TOTAL_RE_DEP);//注册率 sum.REG_RATE_APP = GetRate(sum.REG_TOTAL_APP, sum.WX_TOTAL_RE_DEP);//注册率 sum.REG_RATE_PC = GetRate(sum.REG_TOTAL_PC, sum.WX_TOTAL_RE_DEP);//注册率 sum.DEAL_RATE = GetRate(sum.DEAL_TOTAL, sum.WX_TOTAL);//成交率 reslut.Add(sum); } } catch (Exception ex) { throw ex; } return reslut; } private decimal GetRate(int? total, int? dividend, int rcount = 1) { if (!total.HasValue || !dividend.HasValue) return 0; return (total == 0 || dividend == 0) ? 0 : Math.Round(Convert.ToDecimal(total.Value) / dividend.Value * 100, rcount); } public List GetAllVersion() { using (var db = new crmContext()) { DateTime time = new DateTime(2018, 1, 1); var xx = from p in db.WX_ALIVE where p.LASTTIME > time group p by p.VERSION into g select g.Key ; return xx.OrderBy(m => m).ToList(); } } /// /// 获取db上传位置 /// /// /// public WX_UPLOADMAXCREATETIME GetUploadMaxCreateTime(string v_username) { using (var db = new crmContext()) { return db.WX_UPLOADMAXCREATETIME.FirstOrDefault(m => m.USERNAME == v_username); } } /// /// 手动修改上传位置 /// /// /// 1:普通消息 2:群发助手消息 /// /// public bool UpdateUpdateMaxCreateTime(string username, int type, DateTime time) { using (var db = new crmContext()) { WX_UPLOADMAXCREATETIME entry = db.WX_UPLOADMAXCREATETIME.FirstOrDefault(m => m.USERNAME == username); if (entry == null)//没有初始化数据,就新增 { WX_UPLOADMAXCREATETIME model = new WX_UPLOADMAXCREATETIME() { USERNAME = username, UPTIME = DateTime.Now }; if (type == 1) { model.CREATETIME = DateTimeTool.ConvertDateTimeLong(time); model.CREATETIMEWIN = time; } else { model.QUNFACLIENTID = "" + DateTimeTool.ConvertDateTimeLong(time); } db.WX_UPLOADMAXCREATETIME.Add(model); } else { if (type == 1) { entry.CREATETIME = DateTimeTool.ConvertDateTimeLong(time); entry.CREATETIMEWIN = time; } else { entry.QUNFACLIENTID = "" + DateTimeTool.ConvertDateTimeLong(time); } } return db.SaveChanges().GetResult(); } } public List GetTemplateList(Laypage pager, GetWarnningTemplateDto dto) { List res = new List(); var url = _cache_bl.GetValue_Parameter("Core_ZxdService_WebApi"); var postparams = $"PageIndex={pager.page}&PageSize={pager.limit}&Sort={pager.sort}&Order={pager.order}"; if (dto.Id.HasValue) { postparams += $"&Id={dto.Id}"; } if (!string.IsNullOrWhiteSpace(dto.Name)) { postparams += $"&name={dto.Name}"; } if (!string.IsNullOrWhiteSpace(dto.DeptId)) { postparams += $"&deptid={dto.DeptId}"; } if (!string.IsNullOrWhiteSpace("Core_ZxdService_WebApi")) { url = $"{url}Api/Warnning/TemplatePage"; var result = Utility.GetData(url, postparams, Encoding.UTF8); var reqInfo = JsonConvert.DeserializeObject>(result); pager.count = reqInfo.Data.total; res = reqInfo.Data.data; } return res; } public TemplateListModel GetTemplate(int id) { var url = _cache_bl.GetValue_Parameter("Core_ZxdService_WebApi"); var postparams = $"id={id}"; if (!string.IsNullOrWhiteSpace("Core_ZxdService_WebApi")) { url = $"{url}Api/Warnning/Template"; var result = Utility.GetData(url, postparams, Encoding.UTF8); var reqInfo = JsonConvert.DeserializeObject>(result); return reqInfo.Data; } return new TemplateListModel(); } public List GetWarnUser(Laypage pager, GetWarnningUserDto dto) { List res = new List(); var url = _cache_bl.GetValue_Parameter("Core_ZxdService_WebApi"); var postparams = $"PageIndex={pager.page}&PageSize={pager.limit}&Sort={pager.sort}&Order={pager.order}"; if (!string.IsNullOrWhiteSpace(dto.DeptId)) { postparams += $"&deptid={dto.DeptId}"; } if (!string.IsNullOrWhiteSpace("Core_ZxdService_WebApi")) { url = $"{url}Api/Warnning/GetWarnUserTotal"; var result = Utility.GetData(url, postparams, Encoding.UTF8); var reqInfo = JsonConvert.DeserializeObject>>(result); //pager.count = reqInfo.Data.totalCount; res = reqInfo.Data; } return res; } public EarlyWarningUser GetWarnUserModel(string code) { EarlyWarningUser res = new EarlyWarningUser(); var url = _cache_bl.GetValue_Parameter("Core_ZxdService_WebApi"); var postparams = ""; if (!string.IsNullOrWhiteSpace(code)) { postparams += $"&code={code}"; } if (!string.IsNullOrWhiteSpace("Core_ZxdService_WebApi")) { url = $"{url}Api/Warnning/GetWarnUser"; var result = Utility.GetData(url, postparams, Encoding.UTF8); var reqInfo = JsonConvert.DeserializeObject>(result); //pager.count = reqInfo.Data.totalCount; res = reqInfo.Data; } return res; } public void DeleteWarnUser(string code) { var url = _cache_bl.GetValue_Parameter("Core_ZxdService_WebApi"); var postparams = ""; if (!string.IsNullOrWhiteSpace(code)) { postparams += $"&code={code}"; } if (!string.IsNullOrWhiteSpace("Core_ZxdService_WebApi")) { url = $"{url}Api/Warnning/WarnUser"; var result = Utility.DeleteData(url, postparams, Encoding.UTF8); var reqInfo = JsonConvert.DeserializeObject(result); } } public bool AddTemplate(TemplateListModel dto) { dto.PrewarningValue = JsonConvert.DeserializeObject>(dto.PrewarningValue).ToJson(); var url = _cache_bl.GetValue_Parameter("Core_ZxdService_WebApi"); url = $"{url}Api/Warnning/AddTemplate"; var result = Utility.PostAjaxData(url, dto.ToJson(), Encoding.UTF8); var reqInfo = JsonConvert.DeserializeObject>(result); //res = reqInfo.Data.data; return reqInfo.Data; } public TemplateListModel GetNewTemplateListModel(string deptId) { var url = _cache_bl.GetValue_Parameter("Core_ZxdService_WebApi"); url = $"{url}Api/Warnning/NewTemplatePeriod"; var result = Utility.GetData(url, "?deptid=" + deptId, Encoding.UTF8); var reqInfo = JsonConvert.DeserializeObject>(result); return reqInfo.Data; } public List GetWarnUserList(Laypage pager, GetWarnningTemplateDto dto) { List res = new List(); var url = _cache_bl.GetValue_Parameter("Core_ZxdService_WebApi"); var postparams = $"PageIndex={pager.page}&PageSize={pager.limit}&Sort={pager.sort}&Order={pager.order}"; if (dto.Id.HasValue) { postparams += $"&Id={dto.Id}"; } if (!string.IsNullOrWhiteSpace(dto.Name)) { postparams += $"&name={dto.Name}"; } if (!string.IsNullOrWhiteSpace(dto.DeptId)) { postparams += $"&deptid={dto.DeptId}"; } if (!string.IsNullOrWhiteSpace("Core_ZxdService_WebApi")) { url = $"{url}Api/Warnning/GetTemplate"; var result = Utility.GetData(url, postparams, Encoding.UTF8); var reqInfo = JsonConvert.DeserializeObject>(result); pager.count = reqInfo.Data.totalCount; res = reqInfo.Data.data; } return res; } public bool AddWarnUser(EarlyWarningUser dto) { var url = _cache_bl.GetValue_Parameter("Core_ZxdService_WebApi"); url = $"{url}Api/Warnning/AddWarnUser"; var result = Utility.PostAjaxData(url, dto.ToJson(), Encoding.UTF8); var reqInfo = JsonConvert.DeserializeObject>(result); //res = reqInfo.Data.data; return reqInfo.Data; } public bool AddWarnSetting(CreateOrEditSettingDto dto) { var url = _cache_bl.GetValue_Parameter("Core_ZxdService_WebApi"); url = $"{url}Api/Warnning/AddWarnSetting"; var result = Utility.PostAjaxData(url, dto.ToJson(), Encoding.UTF8); var reqInfo = JsonConvert.DeserializeObject>(result); if (reqInfo.Code == -1) { throw new Exception(reqInfo.Message); } //res = reqInfo.Data.data; return reqInfo.Data; } public List GetWarnSettingByEid(List eidFilter) { List res = new List(); try { var url = _cache_bl.GetValue_Parameter("Core_ZxdService_WebApi"); url = $"{url}Api/Warnning/GetWarnSettingByEid"; var postparams = $"eidFilter=" + string.Join(",", eidFilter); var result = Utility.GetData(url, postparams, Encoding.UTF8); var reqInfo = JsonConvert.DeserializeObject>>(result); //res = reqInfo.Data.data; res = reqInfo.Data; } catch (Exception ex) { LogHelper.Error($"获取最大资源量失败{ex.Message}"); } return res; } } }