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; namespace WX.CRM.BLL.Wx { public class WX_WORKACCOUNT_BL : DbContextRepository, IWX_WORKACCOUNT { private WX_WORKACCOUNT_DAL wx_WorkAccount_DAL = new WX_WORKACCOUNT_DAL(); 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(); 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(); } } 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); } } } } 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, int 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/QueryMediareport.html"; var dataJson=Utility.GetData(fullApi, $"&deptid={deptid}&stime={Stime.ToString("yyyy-MM-dd")}&etime={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) //过滤前端组选择 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(); foreach (var item in reslut) { if (medGup.ContainsKey(item.EID)) { var medList = medGup[item.EID]; item.WX_TOTAL = medList.Sum(m => m.wx_total ?? 0);//加微去重 item.WX_TOTAL_RE = medList.Sum(m => m.wx_total_re??0);//加微 item.DEL_TOTAL = medList.Sum(m => m.wx_del_total ?? 0);//删除微信 item.REG_TOTAL = medList.Sum(m => m.reg_total ?? 0);//注册 item.DEAL_TOTAL = medList.Sum(m => m.order_total ?? 0);//成交量 } else { item.WX_TOTAL = 0;//加微去重 item.WX_TOTAL_RE = 0;//加微 item.DEL_TOTAL = 0;//删除微信 item.REG_TOTAL = 0;//注册 item.DEAL_TOTAL = 0;//成交量 } item.DEL_RATE = (item.WX_TOTAL == 0)? 0: Math.Round(Convert.ToDecimal(item.DEL_TOTAL) / item.WX_TOTAL*100,1);//删除微信率 item.REG_RATE = (item.WX_TOTAL == 0) ? 0 : Math.Round(Convert.ToDecimal(item.REG_TOTAL) / item.WX_TOTAL * 100, 1);//注册率 item.DEAL_RATE = (item.WX_TOTAL == 0) ? 0 : Math.Round(Convert.ToDecimal(item.DEAL_TOTAL) / item.WX_TOTAL_RE * 100, 1);//成交率 } #region 排序 //排序 if (pager.order == "desc") { switch (pager.sort.ToLower()) { 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 "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 "deal_rate": reslut = reslut.OrderByDescending(c => c.DEAL_RATE).ToList(); break; default: reslut = reslut.OrderByDescending(c => c.WX_TOTAL).ToList(); break; } } else { switch (pager.sort.ToLower()) { 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 "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 "deal_rate": reslut = reslut.OrderBy(c => c.DEAL_RATE).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 = reslut.Sum(m => m.WX_TOTAL_RE);//加微 去重 sum.DEL_TOTAL = reslut.Sum(m => m.DEL_TOTAL);//删除微信 sum.REG_TOTAL = reslut.Sum(m => m.REG_TOTAL);//注册 sum.DEAL_TOTAL = reslut.Sum(m => m.DEAL_TOTAL);//成交量 sum.DEL_RATE = (sum.WX_TOTAL == 0) ? 0 : Math.Round(Convert.ToDecimal(sum.DEL_TOTAL) / sum.WX_TOTAL * 100, 1);//删除微信率 sum.REG_RATE = (sum.WX_TOTAL == 0) ? 0 : Math.Round(Convert.ToDecimal(sum.REG_TOTAL) / sum.WX_TOTAL * 100, 1);//注册率 sum.DEAL_RATE = (sum.WX_TOTAL == 0) ? 0 : Math.Round(Convert.ToDecimal(sum.DEAL_TOTAL) / sum.WX_TOTAL * 100, 1);//成交率 reslut.Add(sum); } } catch(Exception ex) { throw ex; } return reslut; } 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(); } } } }