591 lines
22 KiB
C#
591 lines
22 KiB
C#
using CRM.Core.BLL.Base;
|
||
using CRM.Core.Common.Layui;
|
||
using CRM.Core.Model.Entity;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Linq.Expressions;
|
||
using System.Text;
|
||
using System.Text.RegularExpressions;
|
||
using System.Threading.Tasks;
|
||
using WX.CRM.Common;
|
||
|
||
namespace CRM.Core.BLL.UserProtocol
|
||
{
|
||
public class USER_PROTOCOL_BL
|
||
{
|
||
private Bas_CompanyVirtual_BL _companyvirtual = new Bas_CompanyVirtual_BL();
|
||
|
||
public List<SYS_USER_PROTOCOL> GetAll()
|
||
{
|
||
using (var db = new CRM.Core.Model.Entity.zxdContext())
|
||
{
|
||
return db.SYS_USER_PROTOCOL.ToList();
|
||
}
|
||
}
|
||
|
||
public List<ProListView> PageList(ref Laypage pager, string resid, string UMID, string username, string softusername, int? proType, int? status,
|
||
string subname, DateTime? subsdate, DateTime? subedate, string verifyname, DateTime? verifysdate, DateTime? verifyedate, string protocolno, string channel, bool isElderly = false, string orderids = "")
|
||
{
|
||
using (var db = new CRM.Core.Model.Entity.zxdContext())
|
||
{
|
||
var list = db.SYS_USER_PROTOCOL.AsQueryable();
|
||
//UMID转RESID
|
||
if (!string.IsNullOrEmpty(UMID) && string.IsNullOrEmpty(resid))
|
||
{
|
||
var UMIDMain = db.RES_CUSTOMER.FirstOrDefault(m => m.UMID == UMID);
|
||
if (UMIDMain != null)
|
||
{
|
||
resid = UMIDMain.RESID;
|
||
}
|
||
else
|
||
{
|
||
resid = "NULL_RESID";//阻止查询
|
||
}
|
||
}
|
||
|
||
#region 查询条件
|
||
|
||
if (!string.IsNullOrEmpty(resid))
|
||
{
|
||
list = list.Where(m => m.RESID == resid);
|
||
}
|
||
if (!isElderly)
|
||
{
|
||
list = list.Where(x => new int[] { 1, 2, 3, 4, 5 }.Contains(x.PROTOCOLTYPE));
|
||
}
|
||
else
|
||
{
|
||
list = list.Where(x => new int[] { 6 }.Contains(x.PROTOCOLTYPE));
|
||
}
|
||
if (status.HasValue)
|
||
{
|
||
list = list.Where(m => m.STATUS == status);
|
||
}
|
||
if (!string.IsNullOrEmpty(username))
|
||
{
|
||
list = list.Where(m => m.USERNAME.ToLower().Contains(username.ToLower()));
|
||
}
|
||
if (!string.IsNullOrEmpty(softusername))
|
||
{
|
||
list = list.Where(m => m.USERID.ToLower().Contains(softusername.ToLower()));
|
||
}
|
||
if (proType.HasValue)
|
||
{
|
||
list = list.Where(m => m.PROTOCOLTYPE == proType);
|
||
}
|
||
if (!string.IsNullOrEmpty(subname))
|
||
{
|
||
list = list.Where(m => m.creater.ToLower().Contains(subname.ToLower()));
|
||
}
|
||
if (!string.IsNullOrEmpty(verifyname))
|
||
{
|
||
list = list.Where(m => m.reviewer.ToLower().Contains(verifyname.ToLower()));
|
||
}
|
||
if (subsdate.HasValue)
|
||
{
|
||
list = list.Where(m => m.CTIME >= subsdate.Value);
|
||
}
|
||
if (subedate.HasValue)
|
||
{
|
||
subedate = subedate.Value.AddDays(1).AddSeconds(-1);
|
||
list = list.Where(m => m.CTIME <= subedate.Value);
|
||
}
|
||
if (verifysdate.HasValue)
|
||
{
|
||
list = list.Where(m => m.auditTime >= verifysdate.Value);
|
||
}
|
||
if (verifyedate.HasValue)
|
||
{
|
||
verifyedate = verifyedate.Value.AddDays(1).AddSeconds(-1);
|
||
list = list.Where(m => m.auditTime <= verifyedate.Value);
|
||
}
|
||
if (!string.IsNullOrEmpty(protocolno))
|
||
{
|
||
list = list.Where(m => m.PROTOCOLNO.ToLower().Contains(protocolno.ToLower()));
|
||
}
|
||
if (!string.IsNullOrEmpty(orderids))
|
||
{
|
||
var orderidList = orderids.Split(',').Select(x => decimal.Parse(x));
|
||
list = list.Where(m => db.USER_PROTOCOL_ORDER.Where(x => orderidList.Contains(x.Orderid)).Select(x => x.ProtocolId).Contains(m.ID));
|
||
}
|
||
|
||
#endregion 查询条件
|
||
|
||
var companys = _companyvirtual.GetList();
|
||
|
||
var res = new List<ProListView>().AsQueryable();
|
||
if (!isElderly)
|
||
{
|
||
res = (from m in list
|
||
join b in db.Wx_SzzyOrder_HandGift on m.ORDERID equals b.orderid into gj
|
||
from p in gj.DefaultIfEmpty()
|
||
//join u in db.RES_CUSTOMER on m.RESID equals u.RESID into ruc
|
||
//from uc in ruc.DefaultIfEmpty()
|
||
select new ProListView()
|
||
{
|
||
ID = m.ID,
|
||
RESID = m.RESID,
|
||
//UMID= uc.UMID,
|
||
USERNAME = m.USERNAME,
|
||
USERID = m.USERID,
|
||
PROTOCOLTYPE = m.PROTOCOLTYPE,
|
||
PRODUCTTYPE = m.PRODUCTTYPE,
|
||
ORDERSTATUS = p.orderstatus,
|
||
CTIME = m.CTIME,
|
||
NOTE = m.NOTE,
|
||
STATUS = m.STATUS,
|
||
channel = p.channel,
|
||
CREATER = m.creater,
|
||
REVIEWER = m.reviewer,
|
||
AUDITTIME = m.auditTime,
|
||
PROTOCOLNO = m.PROTOCOLNO,
|
||
PRICE = m.PRICE,
|
||
});
|
||
}
|
||
else
|
||
{
|
||
res = (from m in list
|
||
join b in db.Wx_SzzyOrder_HandGift on m.ORDERID equals b.orderid into gj
|
||
from p in gj.DefaultIfEmpty()
|
||
//join u in db.RES_CUSTOMER on m.RESID equals u.RESID into ruc
|
||
//from uc in ruc.DefaultIfEmpty()
|
||
select new ProListView()
|
||
{
|
||
ID = m.ID,
|
||
RESID = m.RESID,
|
||
//UMID = uc.UMID,
|
||
USERNAME = m.USERNAME,
|
||
USERID = m.USERID,
|
||
PROTOCOLTYPE = m.PROTOCOLTYPE,
|
||
PRODUCTTYPE = m.PRODUCTTYPE,
|
||
ORDERSTATUS = p.orderstatus,
|
||
CTIME = m.CTIME,
|
||
NOTE = m.NOTE,
|
||
STATUS = m.STATUS,
|
||
channel = p.channel,
|
||
CREATER = m.creater,
|
||
REVIEWER = m.reviewer,
|
||
AUDITTIME = m.auditTime,
|
||
PROTOCOLNO = m.PROTOCOLNO,
|
||
PRICE = m.PRICE,
|
||
Orderids = db.USER_PROTOCOL_ORDER.Where(x => m.ID == x.ProtocolId).Select(x => x.Orderid).ToList()
|
||
});
|
||
}
|
||
if (!string.IsNullOrEmpty(channel))
|
||
{
|
||
var residList = res.Select(x => x.RESID.Trim()).Distinct().ToList();
|
||
|
||
var orderQurey = db.WX_SZZYORDER.Where(x => residList.Contains(x.RESID));
|
||
|
||
if (channel.Split(',').Count() != 1)
|
||
{
|
||
var predicates = new List<Expression<Func<WX_SZZYORDER, bool>>>();
|
||
foreach (var channelitem in channel.Split(','))
|
||
{
|
||
var arr0 = channelitem.Split('|');
|
||
foreach (var item in arr0)
|
||
{
|
||
var a = item.Split(';');
|
||
var min = Convert.ToInt32(a[0]);
|
||
var max = Convert.ToInt32(a[1]);
|
||
predicates.Add(m => m.CHANNEL >= min && m.CHANNEL <= max);
|
||
}
|
||
}
|
||
orderQurey = orderQurey.WhereOR(predicates.ToArray());
|
||
}
|
||
else
|
||
{
|
||
foreach (var channelitem in channel.Split(','))
|
||
{
|
||
var arr0 = channelitem.Split('|');
|
||
if (arr0.Length > 1)
|
||
{
|
||
var predicates = new List<Expression<Func<WX_SZZYORDER, bool>>>();
|
||
foreach (var item in arr0)
|
||
{
|
||
var a = item.Split(';');
|
||
var min = Convert.ToInt32(a[0]);
|
||
var max = Convert.ToInt32(a[1]);
|
||
predicates.Add(m => m.CHANNEL >= min && m.CHANNEL <= max);
|
||
}
|
||
orderQurey = orderQurey.WhereOR(predicates.ToArray());
|
||
}
|
||
else
|
||
{
|
||
var arr = channel.Split(';');
|
||
var min = Convert.ToInt32(arr[0]);
|
||
var max = Convert.ToInt32(arr[1]);
|
||
orderQurey = orderQurey.Where(m => m.CHANNEL >= min && m.CHANNEL <= max);
|
||
}
|
||
}
|
||
}
|
||
|
||
residList = orderQurey.Select(x => x.RESID).Distinct().ToList();
|
||
|
||
res = res.Where(x => residList.Contains(x.RESID));
|
||
}
|
||
|
||
#region 分页
|
||
|
||
switch (pager.sort?.ToLower())
|
||
{
|
||
case "ctime":
|
||
if (pager.order.ToLower() == "desc")
|
||
res = res.OrderByDescending(m => m.CTIME);
|
||
else
|
||
res = res.OrderBy(m => m.CTIME);
|
||
break;
|
||
|
||
default:
|
||
res = res.OrderBy(m => m.ID);
|
||
break;
|
||
}
|
||
pager.count = res.Count();
|
||
var pageList = res.OrderByDescending(x => x.ID).Skip(pager.limit * (pager.page - 1)).Take(pager.limit).ToList();
|
||
|
||
#endregion 分页
|
||
|
||
var resids = pageList.Select(x => x.RESID.Trim()).Distinct().ToList();
|
||
|
||
var orders = db.WX_SZZYORDER.Where(x => resids.Contains(x.RESID)).ToList();
|
||
|
||
var ruc = db.RES_CUSTOMER.Where(m => resids.Contains(m.RESID)).ToList();
|
||
//汉化
|
||
foreach (var item in pageList)
|
||
{
|
||
var orderList = orders.Where(x => x.RESID == item.RESID.Trim()).ToList();
|
||
foreach (var order in orderList)
|
||
{
|
||
foreach (var company in companys)
|
||
{
|
||
var channels = company.Channel.Split('|');
|
||
foreach (var subchannel in channels)
|
||
{
|
||
var subch = subchannel.Split(',');
|
||
var min = int.Parse(subch[0].ToString());
|
||
var max = int.Parse(subch[1].ToString());
|
||
|
||
if (order.CHANNEL >= min && order.CHANNEL <= max)
|
||
{
|
||
item.CompanyNames.Add(company.CompanyName);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
item.PROTOCOLTYPENAME = ProtocolName(item.PROTOCOLTYPE);
|
||
if (item.PROTOCOLTYPE == 4 || item.PROTOCOLTYPE == 5)
|
||
{
|
||
item.PROTOCOLTYPENAME += "(" + ProtocolFixxStr(item.PRODUCTTYPE, item.ORDERSTATUS) + ")";
|
||
}
|
||
item.STATUSNAME = StatusName(item.STATUS);
|
||
item.UMID = ruc.FirstOrDefault(m => item.RESID == m.RESID)?.UMID;
|
||
}
|
||
|
||
return pageList;
|
||
}
|
||
}
|
||
|
||
public SYS_USER_PROTOCOL GetOne(int ID)
|
||
{
|
||
using (var db = new CRM.Core.Model.Entity.zxdContext())
|
||
{
|
||
var res = db.SYS_USER_PROTOCOL.FirstOrDefault(m => m.ID == ID);
|
||
return res;
|
||
}
|
||
}
|
||
|
||
public bool Delete(ref ValidationErrors errors, int ID)
|
||
{
|
||
try
|
||
{
|
||
using (var db = new zxdContext())
|
||
{
|
||
var model = db.SYS_USER_PROTOCOL.FirstOrDefault(x => x.ID == ID);
|
||
if (model.STATUS != 0) { errors.Add("只能删除未签订状态的风险确认书!"); return false; }
|
||
var orders = db.USER_PROTOCOL_ORDER.Where(x => x.ProtocolId == ID).ToList();
|
||
db.SYS_USER_PROTOCOL.Remove(model);
|
||
db.USER_PROTOCOL_ORDER.RemoveRange(orders);
|
||
db.SaveChanges();
|
||
return true;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
errors.Add(ex.Message);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public string GetOrderOne(int ID)
|
||
{
|
||
using (var db = new CRM.Core.Model.Entity.zxdContext())
|
||
{
|
||
var res = db.USER_PROTOCOL_ORDER.Where(x => x.ProtocolId == ID).Select(x => x.Orderid).ToList();
|
||
return string.Join(",", res);
|
||
}
|
||
}
|
||
|
||
public string GetSzzOrderOne(int ID)
|
||
{
|
||
using (var db = new CRM.Core.Model.Entity.zxdContext())
|
||
{
|
||
var res = db.USER_PROTOCOL_ORDER.Where(x => x.ProtocolId == ID).Select(x => x.Orderid).ToList();
|
||
var orderids = db.WX_SZZYORDER.Where(x => res.Contains(x.ORDERID)).Select(x => x.SZZYORDERID).ToList();
|
||
return string.Join(",", orderids);
|
||
}
|
||
}
|
||
|
||
public bool AuditModel(int ID, int status, string reviewer = "审核人", string orderids = "")
|
||
{
|
||
using (var db = new CRM.Core.Model.Entity.zxdContext())
|
||
{
|
||
var res = db.SYS_USER_PROTOCOL.FirstOrDefault(m => m.ID == ID);
|
||
if (!string.IsNullOrEmpty(orderids))
|
||
{
|
||
var orders = orderids.Split(',').Select(x => decimal.Parse(x));
|
||
var cname = db.WX_SZZYORDER.Where(x => orders.Contains(x.ORDERID)).Select(x => x.CNAME).FirstOrDefault();
|
||
if (!string.IsNullOrEmpty(cname))
|
||
{
|
||
res.USERNAME = cname;
|
||
}
|
||
}
|
||
if (res != null)
|
||
{
|
||
res.STATUS = status;
|
||
res.auditTime = DateTime.Now;
|
||
res.reviewer = reviewer;
|
||
db.SaveChanges();
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public bool EditField(int ID, string field, params decimal[] orderids)
|
||
{
|
||
using (var db = new CRM.Core.Model.Entity.zxdContext())
|
||
{
|
||
var res = db.USER_PROTOCOL_ORDER.Where(m => m.ProtocolId == ID).ToList();
|
||
foreach (var item in res)
|
||
{
|
||
var order = orderids.Where(w => w == item.Orderid).FirstOrDefault();
|
||
if (order == 0)
|
||
{
|
||
db.USER_PROTOCOL_ORDER.Remove(item);
|
||
}
|
||
}
|
||
foreach (var orderid in orderids)
|
||
{
|
||
var order = res.Where(w => w.Orderid == orderid).FirstOrDefault();
|
||
if (order == null)
|
||
{
|
||
db.USER_PROTOCOL_ORDER.Add(new USER_PROTOCOL_ORDER
|
||
{
|
||
Orderid = orderid,
|
||
ProtocolId = ID
|
||
});
|
||
}
|
||
else
|
||
{
|
||
if (field == "orderids")
|
||
{
|
||
order.Orderid = orderid;
|
||
}
|
||
}
|
||
}
|
||
db.SaveChanges();
|
||
return true;
|
||
}
|
||
}
|
||
|
||
public bool Create(ref ValidationErrors errors, SYS_USER_PROTOCOL model)
|
||
{
|
||
try
|
||
{
|
||
using (var db = new zxdContext())
|
||
{
|
||
var cust = db.RES_CUSTOMER.FirstOrDefault(n => n.RESID == model.RESID || n.UMID == model.RESID);
|
||
model.RESID = cust?.RESID;
|
||
db.SYS_USER_PROTOCOL.Add(model);
|
||
db.SaveChanges();
|
||
return true;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
errors.Add(ex.Message);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public bool CreateOrder(ref ValidationErrors errors, USER_PROTOCOL_ORDER model)
|
||
{
|
||
try
|
||
{
|
||
using (var db = new zxdContext())
|
||
{
|
||
db.USER_PROTOCOL_ORDER.Add(model);
|
||
db.SaveChanges();
|
||
return true;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
errors.Add(ex.Message);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public string GetGiftOrderStatusStr(decimal? orderId)
|
||
{
|
||
using (var db = new CRM.Core.Model.Entity.zxdContext())
|
||
{
|
||
var order = db.Wx_SzzyOrder_HandGift.FirstOrDefault(m => m.orderid == orderId);
|
||
if (order != null)
|
||
{
|
||
return GiftOrderStatusStr(order.orderstatus);
|
||
}
|
||
}
|
||
return "";
|
||
}
|
||
|
||
public string ProtocolName(int PROTOCOLTYPE)
|
||
{
|
||
switch ((ProtocolType)PROTOCOLTYPE)
|
||
{
|
||
case ProtocolType.退款和解协议:
|
||
return "和解协议(退款)";
|
||
|
||
case ProtocolType.撤销投诉协议:
|
||
return "撤销投诉协议";
|
||
|
||
case ProtocolType.不退款和解协议:
|
||
return "和解协议(不退款)";
|
||
|
||
case ProtocolType.退款赠与协议:
|
||
return "赠与协议(退款)";
|
||
|
||
case ProtocolType.不退款赠与协议:
|
||
return "赠与协议(不退款)";
|
||
|
||
case ProtocolType.高龄人群投资风险告知确认书:
|
||
return "高龄人群投资风险告知确认书";
|
||
|
||
default:
|
||
return "未知协议";
|
||
}
|
||
}
|
||
|
||
public string ProtocolFixxStr(int? PRODUCTTYPE, int GiftOrderStatus)
|
||
{
|
||
var res = "";
|
||
if (PRODUCTTYPE == 1)
|
||
{
|
||
res = "赠送订单";
|
||
res += "-" + GiftOrderStatusStr(GiftOrderStatus);
|
||
}
|
||
else
|
||
{
|
||
res = "赠送服务";
|
||
}
|
||
|
||
return res;
|
||
}
|
||
|
||
public string GiftOrderStatusStr(int GiftOrderStatus)
|
||
{
|
||
var res = "";
|
||
//0未开通、1已开通、2审核不通过,3.关闭
|
||
switch (GiftOrderStatus)
|
||
{
|
||
case 0:
|
||
res = "未开通";
|
||
break;
|
||
|
||
case 1:
|
||
res = "已开通";
|
||
break;
|
||
|
||
case 2:
|
||
res = "审核不通过";
|
||
break;
|
||
|
||
case 3:
|
||
res = "关闭";
|
||
break;
|
||
}
|
||
return res;
|
||
}
|
||
|
||
public string StatusName(int STATUS)
|
||
{
|
||
switch (STATUS)
|
||
{
|
||
case 0:
|
||
return "未签订";
|
||
|
||
case 1:
|
||
return "已签订";
|
||
|
||
case 9:
|
||
return "已确认";
|
||
|
||
case -1:
|
||
return "已驳回";
|
||
|
||
default: return "未知订单";
|
||
}
|
||
}
|
||
}
|
||
|
||
public class ProListView
|
||
{
|
||
public ProListView()
|
||
{
|
||
CompanyNames = new List<string>();
|
||
}
|
||
|
||
public int ID { get; set; }
|
||
public string RESID { get; set; }
|
||
public string UMID { get; set; }
|
||
public string USERNAME { get; set; }
|
||
public string USERID { get; set; }
|
||
public string PROTOCOLTYPENAME { get; set; }
|
||
public string STATUSNAME { get; set; }
|
||
public string NOTE { get; set; }
|
||
public string CREATER { get; set; }
|
||
public string REVIEWER { get; set; }
|
||
|
||
public int channel { get; set; }
|
||
|
||
public int STATUS { get; set; }
|
||
public int PROTOCOLTYPE { get; set; }
|
||
public int? PRODUCTTYPE { get; set; }
|
||
public int ORDERSTATUS { get; set; }
|
||
public DateTime? CTIME { get; set; }
|
||
public DateTime? AUDITTIME { get; set; }
|
||
|
||
public string CompanyName
|
||
{
|
||
get
|
||
{
|
||
return CompanyNames.Any() ? string.Join(",", CompanyNames.Distinct().ToList()) : "";
|
||
}
|
||
}
|
||
|
||
public List<string> CompanyNames { get; set; }
|
||
|
||
public string PROTOCOLNO { get; set; }
|
||
|
||
/// <summary>
|
||
/// 和解协议 金额
|
||
/// </summary>
|
||
public decimal? PRICE { get; set; }
|
||
|
||
public List<decimal> Orderids { get; set; }
|
||
|
||
public string Orderid
|
||
{ get { return Orderids != null ? string.Join(",", Orderids) : ""; } }
|
||
}
|
||
} |