434 lines
19 KiB
C#
434 lines
19 KiB
C#
using Newtonsoft.Json;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using WX.CRM.BLL.Application.UserComBox;
|
||
using WX.CRM.BLL.Base;
|
||
using WX.CRM.BLL.Util;
|
||
using WX.CRM.Common;
|
||
using WX.CRM.DAL.Res;
|
||
using WX.CRM.IBLL.Res;
|
||
using WX.CRM.Model.DTO;
|
||
using WX.CRM.Model.Entity;
|
||
using WX.CRM.Model.MAP;
|
||
|
||
namespace WX.CRM.BLL.Res
|
||
{
|
||
public class RES_MYALLOCATERES_BL : DbContextRepository<RES_MYALLOCATERES>, IRES_MYALLOCATERES
|
||
{
|
||
private readonly RES_ALLOCATE_DAL _dal = new RES_ALLOCATE_DAL();
|
||
private readonly RES_DISTRIBUTE_BL _resDistribute = new RES_DISTRIBUTE_BL();
|
||
private readonly RES_CUSTOMER_BL _customer = new RES_CUSTOMER_BL();
|
||
private BAS_PARAMETER_BL _para = new BAS_PARAMETER_BL();
|
||
private BAS_INNERUSER_BL _user = new BAS_INNERUSER_BL();
|
||
private readonly CACHE_BL _cache = new CACHE_BL();
|
||
public RES_MYALLOCATERES GetLastSale(string resId)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
//var roleArr = new string[] { "GJSKF", "GJSGJKF", "GJSSJKF" };
|
||
|
||
////先找出不是客服,客服主管,高级客服的员工,这些员工需要提醒
|
||
//var users = (from u in db.BAS_INNERUSER
|
||
// join ur in db.BAS_INNERUSERROLE on u.PKID equals ur.INNERUSERID
|
||
// join r in db.BAS_ROLE on ur.ROLEID equals r.ROLEID
|
||
// where !roleArr.Contains(r.CODE)
|
||
// select u.PKID)
|
||
// .Distinct()
|
||
// .ToList();
|
||
|
||
//var data = db.RES_MYALLOCATERES.Where(p => !users.Contains(p.INNERUSERID) && p.RESID == resId);
|
||
var data = db.RES_MYALLOCATERES.Where(p => p.RESID == resId);
|
||
return data.FirstOrDefault();
|
||
}
|
||
}
|
||
|
||
public IList<SeniorDistributionDto> GetSeniorDistribution(ref Pager pg, SeniorDistributionQuery query)
|
||
{
|
||
var list = _dal.GetSeniorDistribution(ref pg, query);
|
||
var row = list.FirstOrDefault(p => string.IsNullOrEmpty(p.ResId));
|
||
pg.totalRows = Convert.ToInt32(row.rn);
|
||
list.Remove(row);
|
||
return list;
|
||
}
|
||
public IList<MySeniorDistributionDto> GetMySeniorDistribution(ref Pager pg, MySeniorDistributionQuery query)
|
||
{
|
||
var list = _dal.GetMySeniorDistribution(ref pg, query);
|
||
var row = list.FirstOrDefault(p => string.IsNullOrEmpty(p.ResId));
|
||
pg.totalRows = Convert.ToInt32(row.rn);
|
||
list.Remove(row);
|
||
return list;
|
||
}
|
||
|
||
public IList<SeniorKFBDistributionDto> GetKFBSeniorDistribution(ref Pager pg, SeniorDistributionQuery query, QueryUserComboDto usercomboDto)
|
||
{
|
||
|
||
List<decimal> ALLdeptIDS = new List<decimal>();
|
||
List<decimal> ALLgidS = new List<decimal>();
|
||
if (string.IsNullOrEmpty(usercomboDto.groupIds) && !string.IsNullOrEmpty(usercomboDto.deptId))
|
||
{
|
||
var depts = OperationUtil.ConvertToDecimal(usercomboDto.deptId.Split(','));
|
||
|
||
UserServices userservices = new UserServices();
|
||
foreach (var item in depts)
|
||
{
|
||
List<decimal> deptIDS = new List<decimal>();
|
||
List<decimal> gidS = new List<decimal>();
|
||
userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid
|
||
ALLdeptIDS.AddRange(deptIDS);
|
||
ALLgidS.AddRange(gidS);
|
||
}
|
||
ALLdeptIDS.AddRange(ALLgidS);
|
||
usercomboDto.groupIds = string.Join(",", ALLdeptIDS);//所有的部门ID和销售组ID
|
||
}
|
||
query.groupId = usercomboDto.groupIds;
|
||
if (!query.eid.HasValue)
|
||
query.eid = usercomboDto.userId;
|
||
var list = _dal.GetKFBSeniorDistribution(ref pg, query);
|
||
var row = list.FirstOrDefault(p => string.IsNullOrEmpty(p.ResId));
|
||
pg.totalRows = Convert.ToInt32(row.rn);
|
||
list.Remove(row);
|
||
return list;
|
||
}
|
||
public IList<MySeniorKFBDistributionDto> GetKFBMySeniorDistribution(ref Pager pg, MySeniorDistributionQuery query, QueryUserComboDto usercomboDto)
|
||
{
|
||
|
||
List<decimal> ALLdeptIDS = new List<decimal>();
|
||
List<decimal> ALLgidS = new List<decimal>();
|
||
if (string.IsNullOrEmpty(usercomboDto.groupIds) && !string.IsNullOrEmpty(usercomboDto.deptId))
|
||
{
|
||
var depts = OperationUtil.ConvertToDecimal(usercomboDto.deptId.Split(','));
|
||
|
||
UserServices userservices = new UserServices();
|
||
foreach (var item in depts)
|
||
{
|
||
List<decimal> deptIDS = new List<decimal>();
|
||
List<decimal> gidS = new List<decimal>();
|
||
userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid
|
||
ALLdeptIDS.AddRange(deptIDS);
|
||
ALLgidS.AddRange(gidS);
|
||
}
|
||
ALLdeptIDS.AddRange(ALLgidS);
|
||
usercomboDto.groupIds = string.Join(",", ALLdeptIDS);//所有的部门ID和销售组ID
|
||
}
|
||
query.groupId = usercomboDto.groupIds;
|
||
var list = _dal.GetKFBMySeniorDistribution(ref pg, query);
|
||
var row = list.FirstOrDefault(p => string.IsNullOrEmpty(p.ResId));
|
||
pg.totalRows = Convert.ToInt32(row.rn);
|
||
list.Remove(row);
|
||
return list;
|
||
}
|
||
|
||
|
||
public void ExeSeniorDistribute(SeniorDistributionQuery query)
|
||
{
|
||
_dal.ExeSeniorDistribute(query);
|
||
}
|
||
|
||
public void ExeSeniorDistributeByResId(decimal fenpeiUser, decimal pici, string remark, decimal isNew = 1)
|
||
{
|
||
_dal.ExeSeniorDistributeByResId(fenpeiUser, pici, remark, isNew);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 调用分配
|
||
/// 手机号跟资源ID必须存在一个,渠道跟资源类型必须存在一个
|
||
/// </summary>
|
||
/// <param name="mobile">手机号</param>
|
||
/// <param name="resid">资源ID</param>
|
||
/// <param name="ch">渠道</param>
|
||
/// <param name="restypeid">资源类型</param>
|
||
/// <param name="remark">备注</param>
|
||
public void ExecDistribute(string mobile, string resid, int? ch, decimal? restypeid, string remark)
|
||
{
|
||
if (string.IsNullOrEmpty(mobile) && string.IsNullOrEmpty(resid))
|
||
{
|
||
LogHelper.Info("参数错误!分配时手机号跟资源ID不能同时为空");
|
||
return;
|
||
}
|
||
//var resid = Common.ResUtil.CreateResId(mobile);
|
||
if (string.IsNullOrEmpty(resid))
|
||
{
|
||
resid = Common.ResUtil.CreateResId(mobile);
|
||
}
|
||
var assignUrl = _cache.GetValue_Parameter("assignUrl");
|
||
if (!string.IsNullOrEmpty(assignUrl))
|
||
{
|
||
if (!ch.HasValue && restypeid.HasValue)
|
||
{
|
||
var resourceType = _cache.GetResourceType();
|
||
var rtype = resourceType.FirstOrDefault(p => p.RESTYPEID == restypeid);
|
||
if (rtype != null)
|
||
{
|
||
var companys = _cache.GetList_innerCompany();
|
||
var company = companys.Find(p => p.COMPANYID == rtype.COMPANYID);
|
||
if (company != null)
|
||
{
|
||
var deptments = _cache.GetList_SalesDepartMent();
|
||
var dept = deptments.Find(p => p.CHANNELDEF != null && p.COMPANYID == company.COMPANYID);
|
||
|
||
if (dept != null)
|
||
{
|
||
ch = Convert.ToInt32(dept.CHANNELDEF);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (ch.HasValue)
|
||
{
|
||
var assign = new AssignQuery("com.web", resid, ch.Value, ch.Value, "soft_reg");
|
||
|
||
var time = (long)Utility.ConvertDateTimeInt(DateTime.Now);
|
||
var message = JsonConvert.SerializeObject(new { account = "dn.crm", time });
|
||
var postpara = new SecurityHelper().createSignEncodingStr(message);
|
||
|
||
var rsp = Utility.PostAjaxData(assignUrl + "?" + postpara, assign.ToJson(), Encoding.UTF8);
|
||
|
||
var ret = JsonConvert.DeserializeObject<WeworkUserAssignMessage>(rsp);
|
||
LogHelper.Info("获取分配" + ret.ToJson());
|
||
if (ret.errcode == 0)
|
||
{
|
||
//如果有工号,直接分配
|
||
if (!string.IsNullOrEmpty(ret.data.eid) && !string.IsNullOrEmpty(resid))
|
||
{
|
||
var isExe = false;
|
||
|
||
var userList = _cache.GetUserList();
|
||
var pici = new SEQUENCES_BL().Seq_base_get();
|
||
|
||
using (var db = new crmContext())
|
||
{
|
||
var myRes = db.RES_MYALLOCATERES.FirstOrDefault(p => p.RESID == resid);
|
||
|
||
var para = _para.GetModel_Patameter("IgnoreManager");
|
||
if (para != null && myRes != null)
|
||
{
|
||
var manager = _user.GetModel(myRes.INNERUSERID);
|
||
|
||
if (!string.IsNullOrEmpty(para.PARAVALUE))
|
||
{
|
||
var manageList = para.PARAVALUE.Split(',');
|
||
foreach (var item in manageList)
|
||
{
|
||
if (item == manager.EID.ToString())
|
||
{
|
||
isExe = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//如果不存在分配关系,才需要分配
|
||
if (myRes == null || isExe)
|
||
{
|
||
LogHelper.Info("开始写入分配资源:" + resid);
|
||
var eid32 = Convert.ToDecimal(ret.data.eid);
|
||
var user = userList.FirstOrDefault(p => p.EID == eid32);
|
||
if (user != null)
|
||
{
|
||
var allcoteUse = new RES_ALLCOTE_USER()
|
||
{
|
||
ID = new SEQUENCES_BL().Seq_base_get(),
|
||
INNERUSERID = user.PKID,
|
||
EID = user.EID,
|
||
NUM = 1,
|
||
CTIME = DateTime.Now,
|
||
PICI = pici,
|
||
RESID = resid,
|
||
TYPE = 1
|
||
};
|
||
//if (activeModel.groupid.HasValue)
|
||
//{
|
||
// info.SGID = activeModel.groupid.Value;
|
||
//}
|
||
|
||
db.RES_ALLCOTE_USER.Add(allcoteUse);
|
||
}
|
||
db.SaveChanges();
|
||
}
|
||
}
|
||
|
||
//资源分配关系
|
||
var eid1000 = userList.FirstOrDefault(p => p.EID == 10000).PKID;
|
||
|
||
ExeSeniorDistributeByResId(eid1000, pici, remark);
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
public IEnumerable<ToDayAllocateRes> GetToDayAllocateRes()
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var today = DateTime.Parse(DateTime.Now.ToShortDateString());
|
||
var query = from m in db.RES_MYALLOCATERES
|
||
join c in db.RES_CUSTOMER on m.RESID equals c.RESID
|
||
join u in db.BAS_INNERUSER on m.INNERUSERID equals u.PKID
|
||
where m.DISTIME >= today && m.MEMO == "扫码直接分配"
|
||
select new ToDayAllocateRes() { ResId = m.RESID, Eid = u.EID, DisTime = m.DISTIME, CTime = c.CTIME, IsNew = 1 }
|
||
;
|
||
|
||
return query.ToList();
|
||
}
|
||
}
|
||
|
||
public List<AllocateRes3View> GetAllocateRes3List(AllocateRes3Para dto, ref int total)
|
||
{
|
||
var url = _cache.GetValue_Parameter("AllocateRes3Url");
|
||
|
||
var conditions = new List<Even>();
|
||
var dates = new List<string>();
|
||
if (dto.QwStatus.HasValue)
|
||
{
|
||
conditions.Add(new Even() { eventid = 12, isNo = dto.QwStatus == 1 ? true : false });
|
||
}
|
||
if (dto.RjStatus.HasValue)
|
||
{
|
||
conditions.Add(new Even() { eventid = 6, isNo = dto.RjStatus == 1 ? true : false });
|
||
}
|
||
if (!string.IsNullOrEmpty(dto.TkStatus))
|
||
{
|
||
conditions.Add(new Even() { eventid = 17, isNo = dto.TkStatus == "on" ? true : false });
|
||
}
|
||
if (!string.IsNullOrEmpty(dto.stime))
|
||
{
|
||
dates.Add(dto.stime);
|
||
}
|
||
if (!string.IsNullOrEmpty(dto.etime))
|
||
{
|
||
var time = DateTime.Parse(dto.etime).AddDays(1);
|
||
dates.Add(time.ToString("yyyy-MM-dd"));
|
||
}
|
||
var ch = new List<string>() { "3000", "3099" };
|
||
|
||
var para = new AllocateRes3RequestDto() { conditions = conditions.ToJson(), dates = dates, ch = ch.ToJson(), isAnd = "true", iPageIndex = dto.page };
|
||
|
||
LogHelper.Info("para:" + para.ToJson());
|
||
|
||
var rsp = Utility.PostAjaxData(url, para.ToJson(), Encoding.UTF8);
|
||
//var rsp = Utility.HttpPostData(url, para.ToJson(), Encoding.UTF8);
|
||
|
||
LogHelper.Info("rsp:" + rsp);
|
||
|
||
var data = Utility.JSONToObject<AllocateRes3Rsp>(rsp);
|
||
|
||
total = data.total;
|
||
|
||
var residArr = new List<string>();
|
||
foreach (var item in data.list)
|
||
{
|
||
if (!string.IsNullOrEmpty(item.mobile))
|
||
{
|
||
item.resid = ResUtil.CreateResId(item.mobile);
|
||
residArr.Add(item.resid);
|
||
}
|
||
}
|
||
|
||
var view = new List<AllocateRes3View>();
|
||
|
||
if (!residArr.Any())
|
||
{
|
||
return view;
|
||
}
|
||
|
||
var list = GetList(p => residArr.Contains(p.RESID));
|
||
var resounceCount = _resDistribute.GetCacheResourceCount(residArr);
|
||
var customers = _customer.getResByResIds(residArr.ToArray());
|
||
var users = _cache.GetUserList();
|
||
|
||
foreach (var item in data.list.Where(p => p.resid != null))
|
||
{
|
||
int? eid = null;
|
||
var uname = string.Empty;
|
||
DateTime? distime = null;
|
||
DateTime? lastactivetime = null;
|
||
DateTime? lastcalltime = null;
|
||
DateTime? ctime = null;
|
||
var myRes = list.FirstOrDefault(p => p.RESID == item.resid);
|
||
if (myRes != null)
|
||
{
|
||
var user = users.FirstOrDefault(p => p.PKID == myRes.INNERUSERID);
|
||
if (user != null)
|
||
{
|
||
eid = Convert.ToInt32(user.EID);
|
||
uname = user.UNAME;
|
||
}
|
||
distime = myRes.DISTIME;
|
||
}
|
||
var cacheresourcecount = resounceCount.FirstOrDefault(p => p.RESID == item.resid);
|
||
if (cacheresourcecount != null)
|
||
{
|
||
lastactivetime = cacheresourcecount.LASTACTIVETIME;
|
||
lastcalltime = cacheresourcecount.LASTCALLTIME;
|
||
}
|
||
var customer = customers.FirstOrDefault(p => p.RESID == item.resid);
|
||
if (customer != null)
|
||
{
|
||
ctime = customer.CTIME;
|
||
}
|
||
var model = new AllocateRes3View() { ResId = item.resid, QwStatus = dto.QwStatus, RjStauts = dto.RjStatus, Eid = eid, UName = uname, LastActiveTime = lastactivetime, LastCallTime = lastcalltime, DisTime = distime, CTime = ctime };
|
||
view.Add(model);
|
||
}
|
||
|
||
return view;
|
||
}
|
||
|
||
|
||
|
||
public class AssignQuery
|
||
{
|
||
public AssignQuery(string appid, string appuserid, int channel, int curchannel, string remark) : this(appid, appuserid, string.Empty, channel, curchannel, 0, string.Empty, remark, string.Empty, string.Empty, string.Empty)
|
||
{
|
||
}
|
||
|
||
public AssignQuery(string appid, string appuserid, string unionid, int channel, int curchannel, int type, string livecode, string remark, string remarkext, string memo, string eid)
|
||
{
|
||
this.appid = appid;
|
||
this.appuserid = appuserid;
|
||
this.unionid = unionid;
|
||
this.channel = channel;
|
||
this.curchannel = curchannel;
|
||
this.type = type;
|
||
this.livecode = livecode;
|
||
this.remark = remark;
|
||
this.remarkext = remarkext;
|
||
this.memo = memo;
|
||
this.eid = eid;
|
||
}
|
||
|
||
public string appid { get; set; }
|
||
public string appuserid { get; set; }
|
||
public string unionid { get; set; }
|
||
public int channel { get; set; }
|
||
public int curchannel { get; set; }
|
||
public int type { get; set; }//1、返回二维码链接、0、不需要返回二码码链接
|
||
public string livecode { get; set; } //活码标识,30字符以内
|
||
public string remark { get; set; }//标记,30字符以内
|
||
public string remarkext { get; set; }//标记补充,30字符以内
|
||
public string memo { get; set; }
|
||
public string eid { get; set; }//工号
|
||
}
|
||
|
||
public class WeworkUserAssignMessage
|
||
{
|
||
public int errcode { get; set; }
|
||
public string errmsg { get; set; }
|
||
public WeworkUserAssignResult data { get; set; }
|
||
}
|
||
|
||
public class WeworkUserAssignResult
|
||
{
|
||
public string eid { get; set; }
|
||
public int? groupid { get; set; }
|
||
public string qr { get; set; }
|
||
}
|
||
|
||
}
|
||
}
|