ComplianceServer/oldcode/Core.BLL/UserProtocol/USER_PROTOCOL_BL.cs

591 lines
22 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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) : ""; } }
}
}