1347 lines
60 KiB
C#
1347 lines
60 KiB
C#
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<WX_WORKACCOUNT>, IWX_WORKACCOUNT
|
||
{
|
||
private WX_WORKACCOUNT_DAL wx_WorkAccount_DAL = new WX_WORKACCOUNT_DAL();
|
||
private CACHE_BL _cache_bl = new CACHE_BL();
|
||
|
||
public List<WX_WORKACCOUNT> 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<WX_WORKACCOUNT> 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<WX_WORKACCOUNT>(ref queryData, ref page);
|
||
return queryData.ToList();
|
||
}
|
||
}
|
||
|
||
public List<WX_WORKACCOUNT> 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<WX_WORKACCOUNT>(ref queryData, ref page);
|
||
return queryData.ToList();
|
||
}
|
||
}
|
||
|
||
public List<WxWorkAccountView> 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<decimal?> groupList = new List<decimal?>();
|
||
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<WX_WORKACCOUNT_ALIVE> 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<WX_WORKACCOUNT_ALIVE> list = new List<WX_WORKACCOUNT_ALIVE>();
|
||
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<WX_WORKACCOUNT_ALIVE> Get24HoursNoWeixinFriendAliveList(List<string> 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<WX_WORKACCOUNT_ALIVE> list = new List<WX_WORKACCOUNT_ALIVE>();
|
||
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();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 通过工作微信获取
|
||
/// </summary>
|
||
/// <param name="workusername"></param>
|
||
/// <returns></returns>
|
||
public List<WX_WorkRCONTACT> GetRcontactList(string workusername, string column, string sort)
|
||
{
|
||
return new WX_WORKACCOUNT_DAL().GetRcontactByWorkAccount(workusername, column, sort);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 通过工作微信获取
|
||
/// </summary>
|
||
/// <param name="workusername"></param>
|
||
/// <returns></returns>
|
||
public List<Wx_WorkGroupRcontact> 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<WxResourceReport> 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<decimal> deptIDS = new List<decimal>();
|
||
List<decimal> gidS = new List<decimal>();
|
||
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<OrderResourceReport> 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<string> Get24HoursNoWeixinFriend()
|
||
{
|
||
return wx_WorkAccount_DAL.Get24HoursNoWeixinFriend();
|
||
}
|
||
|
||
public int GetWeiXinPauseTime(string alias)
|
||
{
|
||
return wx_WorkAccount_DAL.GetWeiXinPauseTime(alias);
|
||
}
|
||
|
||
public List<WxWorkAccountView> 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<WxWorkAccountView> list = new List<WxWorkAccountView>();
|
||
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<TMP_DANGSAN_DATA_REPORT> GetUserWorkStatistics(Pager pager, List<decimal> userId, DateTime Stime, DateTime Etime, bool hideQuit)
|
||
{
|
||
OracleConnection conn = new OracleConnection(OracleHelper.AYCRMConn);
|
||
List<TMP_DANGSAN_DATA_REPORT> result = new List<TMP_DANGSAN_DATA_REPORT>();
|
||
if (conn.State == ConnectionState.Closed)
|
||
conn.Open();
|
||
try
|
||
{
|
||
using (OracleTransaction trans = conn.BeginTransaction())
|
||
{
|
||
var p = new List<OracleParameter> {
|
||
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<TMP_DANGSAN_DATA_REPORT>();
|
||
var list = dataRows.Where(m => userId.Contains(m.PKID)).AsQueryable();
|
||
|
||
if (hideQuit)
|
||
{
|
||
list = list.Where(m => m.ISDISMISS == 0);
|
||
}
|
||
result = list.ToList();
|
||
//PagerUtil.SetPager<TMP_DANGSAN_DATA_REPORT>(ref list, ref pager);//分页
|
||
}
|
||
else
|
||
{
|
||
return new List<TMP_DANGSAN_DATA_REPORT>();
|
||
}
|
||
}
|
||
|
||
#region 加微统计
|
||
|
||
var url = Utility.GetSettingByKey("rzapi");
|
||
//获取 统计数据
|
||
var fullApi = $"{url}/Api/EarlyWarning/ExternalUserTotal";
|
||
Dictionary<string, object> param = new Dictionary<string, object>();
|
||
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<RZApiModel<List<RZApiItem>>>(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<TMP_EID_USERID>("select corpid,eid,Userid from ww_hhuser_eid");
|
||
// //本部门 所有数据
|
||
// var allextuser = mySqlhelper.QueryEntitys<MySql_WW_USER_EXTUSER>($@"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<MySql_WW_USER_EXTUSER>();
|
||
|
||
// //去重
|
||
// 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<UserWorkReport3View> GetMediareport(Pager pager, List<decimal> userId, string deptid, string uname, string eid, DateTime Stime, DateTime Etime, bool hideQuit)
|
||
{
|
||
List<UserWorkReport3View> reslut = new List<UserWorkReport3View>();
|
||
try
|
||
{
|
||
List<Mysql_Mediareport3> mediareportList = new List<Mysql_Mediareport3>();
|
||
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<MediareportApiModel<List<Mysql_Mediareport3>>>(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<string> 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();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取db上传位置
|
||
/// </summary>
|
||
/// <param name="v_username"></param>
|
||
/// <returns></returns>
|
||
public WX_UPLOADMAXCREATETIME GetUploadMaxCreateTime(string v_username)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
return db.WX_UPLOADMAXCREATETIME.FirstOrDefault(m => m.USERNAME == v_username);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 手动修改上传位置
|
||
/// </summary>
|
||
/// <param name="username"></param>
|
||
/// <param name="type">1:普通消息 2:群发助手消息</param>
|
||
/// <param name="time"></param>
|
||
/// <returns></returns>
|
||
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<TemplateListModel> GetTemplateList(Laypage pager, GetWarnningTemplateDto dto)
|
||
{
|
||
List<TemplateListModel> res = new List<TemplateListModel>();
|
||
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<ApiResult<TemplateReturnModel>>(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<ApiResult<TemplateListModel>>(result);
|
||
return reqInfo.Data;
|
||
}
|
||
return new TemplateListModel();
|
||
}
|
||
|
||
public List<WarnUserList> GetWarnUser(Laypage pager, GetWarnningUserDto dto)
|
||
{
|
||
List<WarnUserList> res = new List<WarnUserList>();
|
||
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<ApiResult<List<WarnUserList>>>(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<ApiResult<EarlyWarningUser>>(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<ApiResult>(result);
|
||
}
|
||
}
|
||
|
||
public bool AddTemplate(TemplateListModel dto)
|
||
{
|
||
dto.PrewarningValue = JsonConvert.DeserializeObject<List<TemplateSettingDetail>>(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<ApiResult<bool>>(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<ApiResult<TemplateListModel>>(result);
|
||
return reqInfo.Data;
|
||
}
|
||
|
||
public List<TemplateListModel> GetWarnUserList(Laypage pager, GetWarnningTemplateDto dto)
|
||
{
|
||
List<TemplateListModel> res = new List<TemplateListModel>();
|
||
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<ApiResult<TemplateReturnModel>>(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<ApiResult<bool>>(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<ApiResult<bool>>(result);
|
||
if (reqInfo.Code == -1)
|
||
{
|
||
throw new Exception(reqInfo.Message);
|
||
}
|
||
//res = reqInfo.Data.data;
|
||
return reqInfo.Data;
|
||
}
|
||
|
||
public List<WranReportListModel> GetWarnSettingByEid(List<decimal> eidFilter)
|
||
{
|
||
List<WranReportListModel> res = new List<WranReportListModel>();
|
||
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<ApiResult<List<WranReportListModel>>>(result);
|
||
//res = reqInfo.Data.data;
|
||
res = reqInfo.Data;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.Error($"获取最大资源量失败{ex.Message}");
|
||
}
|
||
return res;
|
||
}
|
||
}
|
||
} |