947 lines
44 KiB
C#
947 lines
44 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;
|
||
|
||
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();
|
||
|
||
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();
|
||
|
||
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>();
|
||
}
|
||
}
|
||
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);
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
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, int deptid, string uname,string eid, DateTime Stime, DateTime Etime, bool hideQuit) {
|
||
List<UserWorkReport3View> reslut = new List<UserWorkReport3View>();
|
||
try
|
||
{
|
||
List<Mysql_Mediareport> mediareportList = new List<Mysql_Mediareport>();
|
||
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<MediareportApiModel<List<Mysql_Mediareport>>>(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<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();
|
||
}
|
||
}
|
||
}
|
||
} |