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 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(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); } } /// /// 审核列表 /// /// /// /// /// /// public List 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 ALLdeptIDS = new List(); List ALLgidS = new List(); UserServices userservices = new UserServices(cache_BL); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); 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(); List = List.Where(m => userIds.Contains(m.CREATEUSER)); } List = List.OrderByDescending(m => m.CTIME); PagerUtil.SetPager(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; } } /// /// 根据权限订单号 开通订单 /// /// /// /// 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); 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(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(model).State = EntityState.Modified; db.SaveChanges(); return true; } } public List getOrderByUsername(string username) { using (crmContext db = new crmContext()) { return db.L2_SOFT_ORDER.Where(p => p.USERNAME == username).ToList(); } } /// /// 更新合同状态 /// /// /// /// 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; } } }