TG.WXCRM.V4/BLL/Level2/L2_SOFT_ORDER_BL.cs

431 lines
17 KiB
C#
Raw Permalink 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.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;
}
}
}