431 lines
17 KiB
C#
431 lines
17 KiB
C#
using CRM.Core.DTO.Ord;
|
||
using Newtonsoft.Json;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data.Entity;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using WX.CRM.BLL.Application.UserComBox;
|
||
using WX.CRM.BLL.Base;
|
||
using WX.CRM.BLL.Res;
|
||
using WX.CRM.BLL.Util;
|
||
using WX.CRM.Common;
|
||
using WX.CRM.IBLL.Level2;
|
||
using WX.CRM.Model.DTO;
|
||
using WX.CRM.Model.Entity;
|
||
using WX.CRM.Model.Enum;
|
||
using WX.CRM.Model.MAP;
|
||
|
||
namespace WX.CRM.BLL.Level2
|
||
{
|
||
public class L2_SOFT_ORDER_BL : IL2_SOFT_ORDER_Q
|
||
{
|
||
private CACHE_BL cache_BL = new CACHE_BL();
|
||
private WX.CRM.IBLL.Util.ISecurityHelper sHelper = new SecurityHelper();
|
||
|
||
public bool CreateOrder(decimal productid, string productCode, string resid, string username, decimal companyid, decimal salesid, int ordertype, decimal days, decimal price, out decimal orderId, int? mainOrderId, string deptcode)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var product = cache_BL.GetSProductList().Where(p => p.PRODUCTCODE == productCode).FirstOrDefault();
|
||
L2_SOFT_ORDER model = new L2_SOFT_ORDER();
|
||
model.PRODUCTNAME = product?.PRODUCTNAME;
|
||
model.ORDERID = new SEQUENCES_BL().Seq_base_get();
|
||
model.RESID = resid;
|
||
model.PRODUCTID = productid;
|
||
model.PRODUCTCODE = productCode;
|
||
model.USERNAME = username;
|
||
model.ORDERSTATUS = 0;
|
||
model.ORDERTYPE = ordertype;
|
||
model.CREATEUSER = salesid;
|
||
model.CTIME = DateTime.Now;
|
||
model.COMPANYID = companyid;
|
||
model.DAYS = days;
|
||
model.PRICE = price;
|
||
model.MAINORDERID = mainOrderId;
|
||
model.DEPTCODE = deptcode;
|
||
|
||
LogHelper.Info(Utility.ObjectToJson(model));
|
||
db.L2_SOFT_ORDER.Add(model);
|
||
orderId = model.ORDERID;
|
||
return db.SaveChanges().GetResult();
|
||
}
|
||
}
|
||
|
||
public L2_SOFT_ORDER getOrder(decimal productId, string username, string resId)
|
||
{
|
||
using (crmContext db = new crmContext())
|
||
{
|
||
resId = resId.Trim();
|
||
return db.L2_SOFT_ORDER.FirstOrDefault(p => p.PRODUCTID == productId && p.USERNAME == username && p.RESID == resId && p.ORDERSTATUS != 2 && p.ORDERSTATUS != 3);
|
||
}
|
||
}
|
||
|
||
public List<L2_SOFT_ORDER> getOrderByResId(string resId, decimal? productId = null)
|
||
{
|
||
using (crmContext db = new crmContext())
|
||
{
|
||
resId = resId.Trim();
|
||
|
||
var query = db.L2_SOFT_ORDER.Where(p => db.RES_CUSTOMER.Where(m => m.CUSTOMERID == resId).Select(m => m.RESID).Contains(p.RESID));
|
||
|
||
if (productId.HasValue)
|
||
{
|
||
query = query.Where(p => p.PRODUCTID == productId.Value && p.ORDERSTATUS == 1);
|
||
}
|
||
|
||
return query.OrderByDescending(p => p.ORDERID).ToList();
|
||
}
|
||
}
|
||
|
||
public bool UpdateOrder(ref Common.ValidationErrors errors, L2_SOFT_ORDER order)
|
||
{
|
||
try
|
||
{
|
||
using (crmContext db = new crmContext())
|
||
{
|
||
db.L2_SOFT_ORDER.Attach(order);
|
||
db.Entry<L2_SOFT_ORDER>(order).State = EntityState.Modified;
|
||
db.SaveChanges();
|
||
return true;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
errors.Add(ex.Message);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public L2_SOFT_ORDER getOrderByOrderId(decimal orderId)
|
||
{
|
||
using (crmContext db = new crmContext())
|
||
{
|
||
return db.L2_SOFT_ORDER.FirstOrDefault(p => p.ORDERID == orderId);
|
||
}
|
||
}
|
||
|
||
public L2_SOFT_ORDER GetOrderByWebOrderId(string webOrderId)
|
||
{
|
||
using (crmContext db = new crmContext())
|
||
{
|
||
return db.L2_SOFT_ORDER.FirstOrDefault(p => p.WEBORDERID == webOrderId);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 审核列表
|
||
/// </summary>
|
||
/// <param name="pg"></param>
|
||
/// <param name="status"></param>
|
||
/// <param name="stime"></param>
|
||
/// <param name="etime"></param>
|
||
/// <returns></returns>
|
||
public List<L2_SOFT_ORDERDTO> getOrderList(ref Common.Pager pg, int status, DateTime? stime, DateTime? etime, int productId, string resid, string orderid, string username, string groupid, decimal userid, QueryUserComboDto usercomboDto = null)
|
||
{
|
||
using (crmContext db = new crmContext())
|
||
{
|
||
// var List = db.L2_SOFT_ORDER.Where(m => m.ORDERTYPE != 3).AsQueryable();
|
||
var List = (from m in db.L2_SOFT_ORDER
|
||
join d in db.RES_CUSTOMER on m.RESID equals d.RESID
|
||
where m.ORDERTYPE != 3
|
||
select new L2_SOFT_ORDERDTO()
|
||
{
|
||
ORDERID = m.ORDERID,
|
||
RESID = d.UMID,
|
||
PRODUCTID = m.PRODUCTID,
|
||
PRODUCTCODE = m.PRODUCTCODE,
|
||
USERNAME = m.USERNAME,
|
||
ORDERSTATUS = m.ORDERSTATUS,
|
||
ORDERTYPE = m.ORDERTYPE,
|
||
OPENUSER = m.OPENUSER,
|
||
DAYS = m.DAYS,
|
||
PRICE = m.PRICE,
|
||
OTIME = m.OTIME,
|
||
CANCELUSER = m.CANCELUSER,
|
||
CANCELTIME = m.CANCELTIME,
|
||
MEMO = m.MEMO,
|
||
CREATEUSER = m.CREATEUSER,
|
||
CTIME = m.CTIME,
|
||
COMPANYID = m.COMPANYID,
|
||
WEBORDERID = m.WEBORDERID,
|
||
MAINORDERID = m.MAINORDERID,
|
||
DEPTCODE = m.DEPTCODE
|
||
});
|
||
|
||
if (usercomboDto != null && usercomboDto.userId.HasValue)
|
||
{
|
||
List = List.Where(m => m.CREATEUSER == usercomboDto.userId.Value);
|
||
}
|
||
else if (usercomboDto != null && !string.IsNullOrEmpty(usercomboDto.groupIds))
|
||
{
|
||
var _groupids = OperationUtil.ConvertToDecimal(usercomboDto.groupIds.Split(','));
|
||
List = (from a in List
|
||
join b in db.BAS_INNERUSERGROUP on a.CREATEUSER equals b.INNERUSERID
|
||
where _groupids.Contains(b.GID.Value)
|
||
select a);
|
||
}
|
||
else if (usercomboDto != null && !string.IsNullOrEmpty(usercomboDto.deptId))
|
||
{
|
||
var depts = OperationUtil.ConvertToDecimal(usercomboDto.deptId.Split(','));
|
||
List<decimal> ALLdeptIDS = new List<decimal>();
|
||
List<decimal> ALLgidS = new List<decimal>();
|
||
UserServices userservices = new UserServices(cache_BL);
|
||
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);
|
||
}
|
||
List = (from a in List
|
||
join b in db.BAS_INNERUSERGROUP on a.CREATEUSER equals b.INNERUSERID
|
||
where ALLdeptIDS.Contains(b.DEPTID.Value) || ALLgidS.Contains(b.GID.Value)
|
||
select a);
|
||
}
|
||
else if (usercomboDto != null && usercomboDto.companyId.HasValue)
|
||
{
|
||
List = (from a in List
|
||
join b in db.BAS_INNERUSERGROUP on a.CREATEUSER equals b.INNERUSERID
|
||
join g in db.BAS_INNERGROUP on b.GID equals g.GID
|
||
join m in db.BAS_SALESDEPARTMENT on g.SALEDEPTID equals m.SALEDEPTID
|
||
where m.COMPANYID == usercomboDto.companyId.Value
|
||
select a);
|
||
}
|
||
if (!string.IsNullOrWhiteSpace(resid))
|
||
{
|
||
List = List.Where(m => m.RESID == resid);
|
||
}
|
||
if (!string.IsNullOrWhiteSpace(username))
|
||
{
|
||
string name = username.Trim();
|
||
List = List.Where(m => m.USERNAME == name);
|
||
}
|
||
|
||
if (!string.IsNullOrWhiteSpace(orderid))
|
||
{
|
||
decimal id = Convert.ToDecimal(orderid);
|
||
List = List.Where(m => m.ORDERID == id);
|
||
}
|
||
if (productId != -1)
|
||
{
|
||
List = List.Where(m => m.PRODUCTID == productId);
|
||
}
|
||
|
||
if (status != -1)
|
||
{
|
||
List = List.Where(m => m.ORDERSTATUS == status);
|
||
}
|
||
|
||
if (stime != null && stime != null)
|
||
{
|
||
List = List.Where(m => m.CTIME >= stime && m.CTIME < etime);
|
||
}
|
||
if (userid > 0)
|
||
{
|
||
List = List.Where(m => m.CREATEUSER == userid);
|
||
}
|
||
else if (!string.IsNullOrEmpty(groupid))
|
||
{
|
||
decimal[] _groupids = OperationUtil.ConvertToDecimal(groupid.Split(','));
|
||
var userIds = db.BAS_INNERUSERGROUP.Where(m => _groupids.Contains(m.GID.Value)).Select(m => m.INNERUSERID).ToArray<decimal>();
|
||
List = List.Where(m => userIds.Contains(m.CREATEUSER));
|
||
}
|
||
List = List.OrderByDescending(m => m.CTIME);
|
||
PagerUtil.SetPager<L2_SOFT_ORDERDTO>(ref List, ref pg);
|
||
return List.ToList();
|
||
}
|
||
}
|
||
|
||
public string deleteOrder(ref Common.ValidationErrors errors, decimal orderId)
|
||
{
|
||
using (crmContext db = new crmContext())
|
||
{
|
||
string resmsg = "";
|
||
try
|
||
{
|
||
var order = db.L2_SOFT_ORDER.Where(p => p.ORDERID == orderId).FirstOrDefault();
|
||
if (order.ORDERSTATUS == 1)
|
||
{
|
||
return "已开通的订单不允许删除";
|
||
}
|
||
|
||
order.ORDERSTATUS = 3;
|
||
db.SaveChanges();
|
||
resmsg = "成功";
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
resmsg = "系统错误";
|
||
LogHelper.Error(ex.Message + "|" + ex.StackTrace);
|
||
throw ex;
|
||
}
|
||
|
||
return resmsg;
|
||
}
|
||
}
|
||
|
||
public string closeOrder(decimal orderId)
|
||
{
|
||
using (crmContext db = new crmContext())
|
||
{
|
||
string resmsg = "";
|
||
try
|
||
{
|
||
var order = db.L2_SOFT_ORDER.Where(p => p.ORDERID == orderId).FirstOrDefault();
|
||
if (order.ORDERSTATUS != 1)
|
||
{
|
||
return "开通订单才能关闭";
|
||
}
|
||
|
||
order.ORDERSTATUS = 2;
|
||
db.SaveChanges();
|
||
resmsg = "成功";
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
resmsg = "系统错误";
|
||
LogHelper.Error(ex.Message + "|" + ex.StackTrace);
|
||
throw ex;
|
||
}
|
||
return resmsg;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据权限订单号 开通订单
|
||
/// </summary>
|
||
/// <param name="id"></param>
|
||
/// <param name="reson"></param>
|
||
/// <returns></returns>
|
||
public bool OpenOrder(string id, string reson, decimal? opuser = 10000)
|
||
{
|
||
L2_SOFT_ORDER model = null;
|
||
string url = "";
|
||
string json = "";
|
||
if (!string.IsNullOrEmpty(id))
|
||
{
|
||
model = GetOrderByWebOrderId(id);
|
||
}
|
||
if (model == null)
|
||
{
|
||
return true;
|
||
}
|
||
|
||
OpenFreeModel openFreeModel = new OpenFreeModel
|
||
{
|
||
webOrderId = id,
|
||
remark = reson,
|
||
opuser = 10000,
|
||
};
|
||
|
||
url = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_Api);//内部接口··开通免费订单接口
|
||
url = url.Trim('/') + "/OrderService.svc/FreeOrder/NewOpen";
|
||
//url = "http://localhost:55047/OrderService.svc/FreeOrder/NewOpen";
|
||
json = Utility.ConvertToJSON<OpenFreeModel>(openFreeModel);
|
||
json = sHelper.createSignEncodingStr(json, SecurityHelper.OrderClientIdKey);
|
||
LogHelper.Info("免费订单自动开通" + model.ORDERID + (string.IsNullOrEmpty(model.WEBORDERID) ? "" : string.Format("({0})", model.WEBORDERID)) + "审核:" + url + "?" + json);
|
||
string retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8);
|
||
retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, retmsg);
|
||
|
||
CreateOrderRsp retmessage = JsonConvert.DeserializeObject<CreateOrderRsp>(retmsg);//返回信息
|
||
LogHelper.Info($"免费订单开通结果{retmessage}");
|
||
if (retmessage.retCode == (int)NodeJsOrderEnum.调用成功)//成功
|
||
{
|
||
ValidationErrors errors = new ValidationErrors();
|
||
model.ORDERSTATUS = 1;
|
||
model.OPENUSER = 10000;
|
||
model.OTIME = DateTime.Now;
|
||
model.MEMO = reson;
|
||
UpdateOrder(ref errors, model);
|
||
}
|
||
else
|
||
{
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
//public bool BatchUpdateVip(decimal orderid, string username)
|
||
//{
|
||
// using (crmContext db = new crmContext())
|
||
// {
|
||
// string[] code = { "997365", "996365", "998365" };
|
||
// try
|
||
// {
|
||
// var datalist = db.L2_SOFT_ORDER.Where(p => p.ORDERID != orderid && p.USERNAME == username && code.Contains(p.PRODUCTCODE));
|
||
// foreach (L2_SOFT_ORDER order in datalist)
|
||
// {
|
||
// order.ORDERSTATUS = 2;
|
||
// }
|
||
// bool reslut = db.SaveChanges().GetResult();
|
||
// return reslut;
|
||
// }
|
||
// catch (Exception ex)
|
||
// {
|
||
// LogHelper.Error(ex.Message + "--------" + ex.StackTrace);
|
||
// return false;
|
||
// }
|
||
// }
|
||
//}
|
||
|
||
public bool updatewebOrder(decimal orderid, string WEBORDERID)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var model = db.L2_SOFT_ORDER.FirstOrDefault(p => p.ORDERID == orderid);
|
||
model.WEBORDERID = WEBORDERID;
|
||
db.L2_SOFT_ORDER.Attach(model);
|
||
db.Entry<L2_SOFT_ORDER>(model).State = EntityState.Modified;
|
||
db.SaveChanges();
|
||
return true;
|
||
}
|
||
}
|
||
|
||
public List<L2_SOFT_ORDER> getOrderByUsername(string username)
|
||
{
|
||
using (crmContext db = new crmContext())
|
||
{
|
||
return db.L2_SOFT_ORDER.Where(p => p.USERNAME == username).ToList();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新合同状态
|
||
/// </summary>
|
||
/// <param name="model"></param>
|
||
/// <param name="errors"></param>
|
||
/// <returns></returns>
|
||
public bool UpdateCheckStatus(L2_SOFT_ORDER model, ref ValidationErrors errors)
|
||
{
|
||
bool result = false;
|
||
try
|
||
{
|
||
using (WX.CRM.Model.Entity.crmContext db = new WX.CRM.Model.Entity.crmContext())
|
||
{
|
||
var entry = db.L2_SOFT_ORDER.FirstOrDefault(m => m.WEBORDERID == model.WEBORDERID);
|
||
if (entry == null)
|
||
{
|
||
LogHelper.Error("L2_SOFT_ORDER找不到订单号:" + model.WEBORDERID);
|
||
return true;
|
||
}
|
||
entry.ORDERSTATUS = model.ORDERSTATUS;
|
||
entry.OPENUSER = model.OPENUSER;
|
||
entry.OTIME = model.OTIME;
|
||
entry.CONTRACTSTATUS = model.CONTRACTSTATUS;
|
||
entry.CONTRACTCODE = model.CONTRACTCODE;
|
||
entry.CONTRACTCTIME = model.CONTRACTCTIME;
|
||
entry.ISFORCE = model.ISFORCE;
|
||
db.SaveChanges();
|
||
result = true;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
errors.Add(ex.Message);
|
||
}
|
||
return result;
|
||
}
|
||
}
|
||
} |