using CRM.Core.BLL.Application.Pay; using CRM.Core.BLL.Application.Refund; using CRM.Core.BLL.Application.StockPool; using CRM.Core.BLL.Base; using CRM.Core.BLL.Csvr; using CRM.Core.BLL.EventBus.EventHandlers; using CRM.Core.BLL.EventBus.Events; using CRM.Core.BLL.Isvr; using CRM.Core.BLL.Level2; using CRM.Core.BLL.Res; using CRM.Core.BLL.Soft; using CRM.Core.BLL.UserProtocol; using CRM.Core.BLL.Util; using CRM.Core.BLL.Wx; using CRM.Core.Common.EventBus; using CRM.Core.Common.Layui; using CRM.Core.Common.WebHelper; using CRM.Core.DTO; using CRM.Core.DTO.Ord; using CRM.Core.Model.Entity; using CRM.Core.Model.EntityStock; using CRM.Core.Model.Enum; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.ServiceModel; using System.ServiceModel.Channels; using System.ServiceModel.Web; using System.Text; using System.Web; using WX.CRM.Common; using WX.CRM.Common.BlowFish; using WX.CRM.Common.WxPay; namespace ZXDService { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“OrderService”。 // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 OrderService.svc 或 OrderService.svc.cs,然后开始调试。 public class OrderService : IOrderService { private string clientKey = WX.CRM.Common.Utility.GetSettingByKey("CRMClientKey"); private string canOrgCreateOrder = Utility.GetSettingOrNullByKey("canOrgCreateOrder"); private ISVR_INTERFACECALLLOG_BL logHelper = new ISVR_INTERFACECALLLOG_BL(); private SecurityHelper sHelper = new SecurityHelper(); private CACHE_BL cache_BL = new CACHE_BL(); private BAS_PARAMETER_BL paramter_bl = new BAS_PARAMETER_BL(); private WX_OrderActive_BL orderActive_BL = new WX_OrderActive_BL(); private RES_CUSTOMER_BL res_Customer_BL = new RES_CUSTOMER_BL(); private WX_SZZYORDER_BL wx_SzzyOrder_BL = new WX_SZZYORDER_BL(); private Csvr_AiCallTask_BL csvr_AiCallTask_BL = new Csvr_AiCallTask_BL(); private SOFT_USER_BL soft_user_bl = new SOFT_USER_BL(); private L2_SOFT_ORDER_BL l2_soft_order_bl = new L2_SOFT_ORDER_BL(); private RES_CUSTOMERUSER_BL res_customeruser_bl = new RES_CUSTOMERUSER_BL(); private WX_PRODUCT_BL product_bl = new WX_PRODUCT_BL(); private WX_SzzyOrderRefund_BL orderRefund_BL = new WX_SzzyOrderRefund_BL(); private WX_SzzyOrderPay_BL _orderPay = new WX_SzzyOrderPay_BL(); private WX_SzzyOrderDeposit_BL _orderDeposit = new WX_SzzyOrderDeposit_BL(); private RES_RESOURCEMOBILE_BL _mobile = new RES_RESOURCEMOBILE_BL(); private Wx_SzzyOrderRefundContract_BL _orderRefundContract = new Wx_SzzyOrderRefundContract_BL(); private Bas_CompanyVirtual_BL _company = new Bas_CompanyVirtual_BL(); private readonly WX_SzzyOrderDeposit_BL _deposit = new WX_SzzyOrderDeposit_BL(); private Csvr_Message_BL _msg = new Csvr_Message_BL(); private readonly CRM.Core.BLL.Application.Order.OrderService _orderService = new CRM.Core.BLL.Application.Order.OrderService(); private readonly PayServices _payServices = new PayServices(); private readonly RefundServices _refundServieces = new RefundServices(); private USER_PROTOCOL_BL userProtocolbll = new USER_PROTOCOL_BL(); public OrderService() { EventBus.Instance.Subscribe(new SupplyOrderEventHandler()); EventBus.Instance.Subscribe(new SignContractEventHandler()); EventBus.Instance.Subscribe(new HgRecordOrderEventHandler()); EventBus.Instance.Subscribe(new PayInfoEventHandler()); EventBus.Instance.Subscribe(new OpenOrderEventHandler()); EventBus.Instance.Subscribe(new RefundContractEventHandler()); EventBus.Instance.Subscribe(new SendPayMessageEventHandler()); EventBus.Instance.Subscribe(new PayOrderEventHandler()); EventBus.Instance.Subscribe(new DepositOrderEventHandler()); EventBus.Instance.Subscribe(new RefundOrderEventHandler()); EventBus.Instance.Subscribe(new UpGradeOrderEventHandler()); EventBus.Instance.Subscribe(new DepositUseOrderEventHandler()); EventBus.Instance.Subscribe(new DepositRefundOrderEventHandler()); EventBus.Instance.Subscribe(new FinishRefundContractEventHandler()); EventBus.Instance.Subscribe(new DeleteRefundOrderEventHandler()); EventBus.Instance.Subscribe(new CloseFreeOrderEventHandler()); EventBus.Instance.Subscribe(new HandGiftEventHandler()); EventBus.Instance.Subscribe(new PayRejectEventHandler()); EventBus.Instance.Subscribe(new DepositRejectEventHandler()); EventBus.Instance.Subscribe(new DepositDeleteEventHandler()); EventBus.Instance.Subscribe(new OrderAndPayInfoEventHandler()); } public JsonResult DoWork(string id) { LogHelper.Info("调用成功:" + id); return new JsonResult { result = false, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = "msg:" + id }; } public Stream OrderAudit(string content, string clientid, string sign) { ret2Class retMsg = new ret2Class(); string ndretmsg = string.Empty; try { string url = Utility.GetClassAndMethodName(1); //LogHelper.Info(content + "-----" + clientid + "---------" + sign); logHelper.AddCallLog(content, clientid, sign, url); //if (clientKey == "nj_crm") //{ // clientid = SecurityHelper.OrderClientIdKey; //} //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign)) { retMsg.orderId = ""; retMsg.result = false; retMsg.retcode = (int)EnumInterfaceErrcode.非法请求; return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 } content = sHelper.decyptData(clientid, content); //解密操作 LogHelper.Info("OrderAudit:" + content); add2OrderOpen ordermodel = null; ordermodel = Utility.JSONToObject(content); WX_SZZYORDER model = wx_SzzyOrder_BL.GetModel(ordermodel.Orderid); SOFT_USER soft_user = soft_user_bl.GetUser_userName(ordermodel.userName); if (model == null) { retMsg.orderId = ""; retMsg.result = false; retMsg.retcode = (int)EnumInterfaceErrcode.找不到订单; return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 } if (model.ORDERSTATUS != "1" && model.ORDERSTATUS != "3" && model.ORDERSTATUS != "8" && model.ORDERSTATUS != "9" && model.ORDERSTATUS != "10") { retMsg.orderId = ""; retMsg.result = false; retMsg.retcode = (int)EnumInterfaceErrcode.此订单状态不能再开通; return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 } url = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_AddOrderOpen);//封装出来的接口 //-----------调用Node.JS接口进行 订单创建 CreateOrderReq suorder = new CreateOrderReq(); suorder.productId = ordermodel.productCode; suorder.userName = ordermodel.userName; suorder.count = 1;//产品数量 suorder.busType = 1;// suorder.ch = soft_user.ACTCAMPAINID.Value; suorder.source = 1; suorder.productType = 0;//0-单一产品、1-组合产品 suorder.mobile = ordermodel.mobile;//手机号码 suorder.totalPrice = Convert.ToInt32(ordermodel.PayPrice * 100);//价格用分作为结算 suorder.totalDays = model.OPENDAYS.HasValue ? Convert.ToInt32(model.OPENDAYS.Value) : 0; suorder.cssId = model.INNERUSERID.HasValue ? model.INNERUSERID.ToString() : ""; suorder.currentCH = soft_user.ACTCAMPAINID.Value; //string json = string.Format("content={0}&clientid={1}&sign={2}", content, clientid, sign);//信息转发 string json = JsonHelper.ObjDivertToJson(suorder); LogHelper.Info("json=>:" + json); json = JsonHelper.ObjDivertToJson(sHelper.createAjaxSignEncodingStr(JsonHelper.ObjDivertToJson(suorder), SecurityHelper.OrderClientIdKey)); string retmsg = Utility.PostAjaxData(url, json, Encoding.UTF8);//返回信息 LogHelper.Info("OrderAudit:" + retmsg); //retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, retmsg); CreateOrderRsp retmessage = JsonHelper.JsonDivertToObj(retmsg); if (retmessage.retCode == (int)NodeJsOrderEnum.调用成功) { model.ISOPEN = 1; model.ORDERSTATUS = "220"; model.ORDERSTATUSNAME = "已开通"; model.FINALPAY = model.NEEDPAY; model.ARRIVALPAY = model.NEEDPAY; model.OTIME = DateTime.Now; model.ARRIVALTIME = model.OTIME; model.SZZYORDERID = Convert.ToDecimal(retmessage.orderId); model.ISPAYED = 1; wx_SzzyOrder_BL.Update(model); //updateOrderExt(model); //retMsg.orderId = retmessage.orderId; //retMsg.result = true; //retMsg.retcode = (int)EnumInterfaceErrcode.订单已开通; //return sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg));//返回加密数据 } return Utility.GetStream(retmsg);//直接返回 } catch (Exception ex) { retMsg.orderId = ""; retMsg.result = false; retMsg.retcode = (int)EnumInterfaceErrcode.系统错误; LogHelper.Error(ex.ToString()); return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 } } /// /// 创建订单(统一将数据加密返回) /// /// /// /// /// public Stream OrderCreate(string content, string clientid, string sign) { string msg = string.Empty; //retOrder retOrder = null; CreateOrderRsp retMsg = new CreateOrderRsp(); //string ndretmsg = string.Empty; try { string url = Utility.GetClassAndMethodName(1); LogHelper.Info(content + "-----" + clientid + "---------" + sign); logHelper.AddCallLog(content, clientid, sign, url); //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { retMsg.orderId = ""; retMsg.retCode = (int)NodeJsOrderEnum.非法请求; retMsg.retMsg = Utility.GetCheckEnumNameByValue(retMsg.retCode); return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 } content = sHelper.decyptData(clientid, content); //解密操作 LogHelper.Info("content:" + content); var ordermodel = Newtonsoft.Json.JsonConvert.DeserializeObject(content, new JsonSerializerSettings { DateTimeZoneHandling = DateTimeZoneHandling.Local }); if (string.IsNullOrEmpty(ordermodel.mobile)) { retMsg.orderId = ""; retMsg.retCode = (int)NodeJsOrderEnum.参数错误; retMsg.retMsg = "手机号码不能未空!"; return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 } string resid = WX.CRM.Common.ResUtil.CreateResId(ordermodel.mobile); if (res_Customer_BL.getResCustomerByResId(resid) == null) { res_Customer_BL.ResgisterCustomer(ordermodel.mobile, resid, "orderres");//注册资源 } res_customeruser_bl.ContractUser(resid, ordermodel.softusername);//关联用户 var model = new WX_SZZYORDER { //ORDERID = new SEQUENCES_BL().Seq_order_get(),//创建订单ID OPERATETIME = DateTime.Now, INNERUSERID = ordermodel.userid, RESID = resid, ISFINANCEPAY = 0, OPENORDER = 0, ISOPEN = 0, ORDERTYPE = ordermodel.ordertype, ORDERSTATUS = "180", ORDERSTATUSNAME = "新订单", PRODUCTNAME = ordermodel.productname, NEEDPAY = ordermodel.needpay, RETURNNEEDPAY = ordermodel.needpay, SOURCE = ordermodel.source, PRODUCTID = Convert.ToInt32(ordermodel.productId), SUBPRODUCTID = Convert.ToInt32(ordermodel.subProductId), CTIME = DateTime.Now, SUBPRODUCTNAME = ordermodel.subproductname, OPENDAYS = ordermodel.opendays, CNAME = ordermodel.cname, SOFTUSERNAME = ordermodel.softusername, REQUESTSTATUS = 1, PRODUCTCODE = ordermodel.productcode, BIGPRODUCTCODE = ordermodel.bigproductcode, BOOKNUM = ordermodel.count, TEAMSERVE = ordermodel.teamserve, companycode = ordermodel.companycode, contractstatus = 0,//刚刚创建订单,合同没签 UPGRADEORDERIDS = ordermodel.upgradeorderids, TOTALUPGRADEVALUE = ordermodel.totalupgradevalue, ISTEST = ordermodel.istest, giftdays = ordermodel.giftdays, giftdays2 = ordermodel.giftdays2, external_userid = ordermodel.external_userid, wework_remoteid = ordermodel.wework_remoteid, CUSTOMERUSERNAME = ordermodel.customerusername, fujian = ordermodel.fujian, RET = ordermodel.discount, RETP = ordermodel.customprisce, estimateotime = ordermodel.estimateotime,//预计开通时间 ai_hgrecord_stime = ordermodel.ai_hgrecord_stime, ai_hgrecord_etime = ordermodel.ai_hgrecord_etime, ai_hgrecord_statusname = EnumAiCallState.尚未进行AI外呼.ToString(), eid = Convert.ToInt32(ordermodel.eid) //deptcode = ordermodel.deptcode }; if (ordermodel.channel.HasValue) { model.CHANNEL = Convert.ToInt32(ordermodel.channel); } var subproduct = product_bl.GetSubProduct(ordermodel.productcode); if (subproduct != null) { model.SettleType = subproduct.SettleType; model.RETURNNEEDPAY = subproduct.PRICE; model.ORIGINPAY = subproduct.PRICE; //原始金额等于产品原价 } else { model.SettleType = model.PRODUCTID; } var soft_user = soft_user_bl.GetUser_userName(ordermodel.softusername); if (soft_user == null) { retMsg.orderId = ""; retMsg.retCode = (int)NodeJsOrderEnum.找不到用户; retMsg.retMsg = ""; return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 } if (model.CHANNEL <= 0) { var ch = soft_user.REGCAMPAINID.HasValue ? Convert.ToInt32(soft_user.REGCAMPAINID.Value) : 0; model.CHANNEL = ch; //订单渠道号 if (string.IsNullOrEmpty(canOrgCreateOrder) || canOrgCreateOrder == "0") { var channels = wx_SzzyOrder_BL.GetList(p => p.SOFTUSERNAME == ordermodel.softusername).Select(p => p.CHANNEL); foreach (var item in channels) { if (ch != item) { retMsg.orderId = ""; retMsg.retCode = (int)NodeJsOrderEnum.用户已经在别的公司注册; retMsg.retMsg = ""; return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 } } } } #region =================调用NodeJs创建订单======================== LogHelper.Info("====调用NodeJs创建订单==="); var suorder = new CreateOrderReq { productId = ordermodel.productcode, userName = ordermodel.softusername, count = ordermodel.count,//产品数量 busType = 1,// //ch = ch, source = 1, productType = ordermodel.productType,//0-单一产品、1-组合产品 mobile = ordermodel.mobile,//手机号码 totalPrice = Convert.ToInt32(ordermodel.needpay.Value * 100),//价格用分作为结算 complianceFlag = 1,//合规 signId = "", totalDays = model.OPENDAYS.HasValue ? Convert.ToInt32(model.OPENDAYS.Value) : 0, cssId = ordermodel.userid.ToString(), currentCH = model.CHANNEL, originalCH = model.CHANNEL, ip = ClientIp() //,Ext1 = JsonHelper.ObjDivertToJson(new { contractPrice = Convert.ToInt32(ordermodel.needpay.Value * 100) }) }; var activeList = orderActive_BL.GetList(model.PRODUCTCODE, model.companycode, DateTime.Now); List productList = new List(); if (activeList != null && activeList.Count > 0) { foreach (var active in activeList) { var count = 0; if (active.IsFollowOrder == 1 && ordermodel.giftdays > 0) { count = model.BOOKNUM * ordermodel.giftdays.Value; } else if (active.IsFollowOrder == 2 && ordermodel.giftdays2 > 0) { count = model.BOOKNUM * ordermodel.giftdays2.Value; } else if (active.IsFollowOrder == 0 && ordermodel.giftdays > 0) { count = model.BOOKNUM * active.DonateDay;//产品数量 } if (count == 0) { continue; } productList.Add(new { productCode = active.ActiveCode, productName = string.IsNullOrEmpty(active.activename) ? active.ProductName : active.activename, giftdays = count }); } } if ((model.RET.HasValue && model.RET.Value > 0) || model.RETP.HasValue) { suorder.ext1 = JsonHelper.ObjDivertToJson(new { contractPrice = Convert.ToInt32(ordermodel.needpay.Value * 100), giftproductList = productList }); } else if (activeList.Count > 0) { suorder.ext1 = JsonHelper.ObjDivertToJson(new { giftproductList = productList }); } if (suorder.totalPrice <= 0) { suorder.totalPrice = 1; } //if (suorder.complianceFlag == 1) //{ // Random rd = new Random(); // string sginid = string.Format("{0}{1}", DateTimeTool.ConvertDateTimeLong(DateTime.Now), rd.Next(10000, 90000)); // sginid = Utility.EncryptMD5(sginid).ToLower(); // suorder.signId = sginid; //} url = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_AddOrderOpen);//封装出来的接口 string json = JsonHelper.ObjDivertToJson(suorder); LogHelper.Info("Node.JS接口参数json=>:" + json); json = JsonHelper.ObjDivertToJson(sHelper.createAjaxSignEncodingStr(json, SecurityHelper.OrderClientIdKey)); string retmsg = Utility.PostAjaxData(url, json, Encoding.UTF8);//返回信息 LogHelper.Info("Node.JS接口返回数据json=>:" + retmsg); CreateOrderRsp retmessage = JsonHelper.JsonDivertToObj(retmsg); #endregion =================调用NodeJs创建订单======================== //string retmsg = string.Empty;//测试的时候启用 //CreateOrderRsp retmessage = new CreateOrderRsp() { retCode = (int)NodeJsOrderEnum.调用成功 };//测试的时候启用 if (retmessage.retCode == (int)NodeJsOrderEnum.调用成功) { model.ISOPEN = 0; model.ORDERSTATUS = "180"; model.ORDERSTATUSNAME = "新订单"; model.FINALPAY = model.NEEDPAY; model.SZZYORDERID = Convert.ToDecimal(retmessage.orderId); model.ISPAYED = 0; model.ORDERID = new SEQUENCES_BL().Seq_order_get(); var result = wx_SzzyOrder_BL.Add(model) > 0; retmessage.selfOirderId = model.ORDERID.ToString(); if (result && !string.IsNullOrEmpty(ordermodel.external_userid)) { wx_SzzyOrder_BL.UpdateOrInsertOrderExtuserId(new Ww_SzzyOrder_ExtUserId() { corpid = ordermodel.corpid, extuserid = ordermodel.external_userid, orderid = model.ORDERID, userid = ordermodel.jobuserid }); } } else { LogHelper.Error("retmessage:" + retmsg);//记录下单不成功 } return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retmessage)));//直接返回 } catch (Exception ex) { retMsg.orderId = ""; retMsg.retCode = (int)NodeJsOrderEnum.系统错误; retMsg.retMsg = "系统错误"; LogHelper.Error("retmsg:" + ex.ToString()); return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 } } public JsonResult OrderUpdate(int orderId, string source, string customerusername, string wework_remoteid, string external_userid, string remark, string fujian, string jobuserid, string corpid, int orderType, string estimateotime) { var msg = string.Empty; try { //LogHelper.Info("orderId:" + orderId + ",source:" + source + ",customerusername:" + customerusername + ",remark:" + remark); var order = wx_SzzyOrder_BL.Get(p => p.ORDERID == orderId); if (!string.IsNullOrEmpty(source)) { order.SOURCE = source; } if (!string.IsNullOrEmpty(customerusername)) { order.CUSTOMERUSERNAME = customerusername; } if (!string.IsNullOrEmpty(wework_remoteid)) { order.wework_remoteid = wework_remoteid; } if (!string.IsNullOrEmpty(external_userid)) { order.external_userid = external_userid; } if (!string.IsNullOrEmpty(remark)) { order.REMARK = remark; } if (!string.IsNullOrEmpty(fujian)) { order.fujian = fujian; } order.ORDERTYPE = orderType; DateTime mytime; if (DateTime.TryParse(estimateotime, out mytime)) { order.estimateotime = mytime; } else { order.estimateotime = null; } if (order != null) { var result = wx_SzzyOrder_BL.Update(order); if (result) { if (!string.IsNullOrEmpty(external_userid)) { wx_SzzyOrder_BL.UpdateOrInsertOrderExtuserId(new Ww_SzzyOrder_ExtUserId() { corpid = corpid, extuserid = external_userid, orderid = orderId, userid = jobuserid }); } return new JsonResult { result = true, retcode = 0, retmsg = null }; } else return new JsonResult { result = false, retcode = 0, retmsg = null }; } else { return new JsonResult { result = false, retcode = 0, retmsg = null }; } } catch (Exception ex) { LogHelper.Error(ex.ToString()); return new JsonResult { result = false, retcode = 0, retmsg = null }; } } public JsonResult OrderUpdateAiTime(int orderId, string startTime, string endTime) { var msg = string.Empty; try { var order = wx_SzzyOrder_BL.Get(p => p.ORDERID == orderId); order.ai_hgrecord_stime = startTime; order.ai_hgrecord_etime = endTime; var result = wx_SzzyOrder_BL.Update(order); return new JsonResult { result = true, retcode = 0, retmsg = null }; } catch (Exception ex) { LogHelper.Error(ex.ToString()); return new JsonResult { result = false, retcode = 0, retmsg = null }; } } public DateTime GetAiStartTime() { try { var robotList = cache_BL.GetAiRobotList(); var startTime = robotList.FirstOrDefault().StartTime; return startTime; } catch (Exception ex) { LogHelper.Error("获取Ai配置时间错误" + ex.Message); return Convert.ToDateTime("2021-12-01 00:00:00"); } } public JsonResult OrderUpdateAiStatus(string filterId, int status, int type) { var msg = string.Empty; try { using (var db = new zxdContext()) { List res = new List(); List containStatus = new List { (int)EnumAiCallState.等待AI重拨, (int)EnumAiCallState.等待AI外呼, }; var nowDate = DateTime.Now.Date.AddDays(-1); switch (type) { case 1: //找到所有的等待ai外呼和等待重播的任务 res = db.WX_SZZYORDER.Where(n => n.RESID == filterId && containStatus.Contains(n.ai_hgrecord_status)).ToList(); var startTime = GetAiStartTime(); //找到符合条件但仍未进行外呼的 List runningStatus = new List { (int)EnumAiCallState.尚未进行AI外呼, (int)EnumAiCallState.AI外呼失败挂断, (int)EnumAiCallState.AI外呼失败未答完, (int)EnumAiCallState.AI外呼未接通, }; var notStartTask = db.WX_SZZYORDER.Where(d => d.ORDERSTATUS.Equals("200") && d.ARRIVALTIME >= startTime && d.idcard != null && (d.hashgrecord == null || d.hashgrecord != 1) && d.CTIME >= nowDate && filterId == d.RESID && runningStatus.Contains(d.ai_hgrecord_status)).ToList(); res.AddRange(notStartTask); break; default: var orderId = Convert.ToDecimal(filterId); res = db.WX_SZZYORDER.Where(n => n.ORDERID == orderId).ToList(); break; } //直接根据orderid if (type != 1) { var orderId = Convert.ToDecimal(filterId); res = db.WX_SZZYORDER.Where(n => n.ORDERID == orderId).ToList(); } var statusEnum = cache_BL.GetAiHgrecordStatusnameKV(2); //找到任务表 var orderids = res.Select(n => n.ORDERID).ToList(); var orderTaskList = db.Csvr_Ai_CallTask_Orders.Where(n => orderids.Contains(n.Orderid.Value)).ToList(); var orderTaskids = orderTaskList.Select(n => n.Taskid).ToList(); var taskList = db.Csvr_Ai_CallTask.Where(n => orderTaskids.Contains(n.Id)).ToList(); foreach (var order in res) { order.ai_hgrecord_status = status; order.ai_hgrecord_statusname = statusEnum[status]; var result = wx_SzzyOrder_BL.Update(order); var orderTask = orderTaskList.Where(n => n.Orderid == order.ORDERID).ToList(); var task = taskList.Where(n => orderTask.Select(s => s.Taskid).Contains(n.Id) && n.ai_hgrecord_status == (int)EnumAiCallState.等待AI外呼).ToList(); foreach (var t in task) { t.ai_hgrecord_status = status; t.ai_hgrecord_statusname = statusEnum[status]; t.Rounds = t.Rounds == null ? 0 : t.Rounds; csvr_AiCallTask_BL.Update(t); } } } return new JsonResult { result = true, retcode = 0, retmsg = null }; } catch (Exception ex) { LogHelper.Error(ex.ToString()); return new JsonResult { result = false, retcode = 0, retmsg = null }; } } private string ClientIp() { OperationContext context = OperationContext.Current; MessageProperties properties = context.IncomingMessageProperties; RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; return endpoint.Address; } /// /// 添加支付记录 /// /// /// /// /// public Stream OrderPayCreate(string content, string clientid, string sign) { var msg = string.Empty; var _id = 0; try { string url = Utility.GetClassAndMethodName(1); logHelper.AddCallLog(content, clientid, sign, url); if (clientKey == "nj_crm") { clientid = SecurityHelper.OrderClientIdKey; } //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } content = sHelper.decyptData(clientid, content); //解密操作 var dto = Utility.JSONToObject(content); LogHelper.Info("orderpayDto:" + dto.ToJson()); var payTypeName = cache_BL.GetList_Parameter(ParameterGroup.OrderPayType).FirstOrDefault(p => p.PARAVALUE == dto.paytype.ToString()).PARANAME; #region 渠道 int? channel = null; var order = wx_SzzyOrder_BL.Get(p => p.ORDERID == dto.orderid); if (order != null) { if (order.ORDERSTATUS == "180" || order.ORDERSTATUS == "190" || order.ORDERSTATUS == "195") { order.ORDERSTATUS = "190"; order.ORDERSTATUSNAME = "已提交支付"; wx_SzzyOrder_BL.Update(order); channel = order.CHANNEL; } else { //已经是支付状态,说明已经给够钱了,不需要再支付了 LogHelper.Info(order.ORDERID.ToString() + "支付金额已经够了,不需要再支付了!"); msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.支付步骤出错, retmsg = "已经是支付状态" }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } } else { LogHelper.Info(dto.orderid.ToString() + "订单不存在!"); msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.找不到订单, retmsg = "订单不存在" }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } #endregion 渠道 var model = new WX_SzzyOrderPay(dto.orderid, dto.needpay, dto.paytype, payTypeName, dto.paydate, dto.payprice, dto.payname, dto.remark, dto.payno, dto.companycode, channel, dto.tradeno); if (dto.creator.HasValue) { model.creator = dto.creator.Value; } if (!string.IsNullOrEmpty(dto.creatorname)) { model.creatorname = dto.creatorname; } model.deptcode = dto.deptcode; _orderPay.Add(model); _id = model.id; #region 发送通知 try { var comcode = _company.GetInfoByChannel(model.channel.Value); _msg.PushNewsMsg("DZTZ", $"到款【{model.orderid}】已经【提交】,请您审核!", comcode == null ? "事业部" : comcode.CompanyName, model.orderid.ToString(), comcode == null ? model.companycode : comcode.CompanyCode); } catch (Exception e) { LogHelper.Error("发送通知出错:" + e.ToString()); } #endregion 发送通知 if (!string.IsNullOrWhiteSpace(dto.deposit)) { var arr = dto.deposit.Split(','); foreach (var item in arr) { var id = int.Parse(item); var info = _orderDeposit.Get(p => p.id == id); if (info != null) { info.isuse = 1; info.orderid = dto.orderid; _orderDeposit.Update(info); } var orderPay = _orderPay.Get(p => p.orderid == id); if (orderPay != null) { orderPay.orderid = dto.orderid; _orderPay.Update(orderPay); } } } } catch (Exception ex) { LogHelper.Error(ex.ToString()); msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } msg = JsonHelper.ObjDivertToJson(new retMsg { result = true, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = _id.ToString() }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } /// /// 创建订单(统一将数据加密返回) /// /// /// /// /// public Stream OpenFreeOrder(string content, string clientid, string sign) { string msg = string.Empty; //retOrder retOrder = null; CreateOrderRsp retMsg = new CreateOrderRsp(); //string ndretmsg = string.Empty; try { string url = Utility.GetClassAndMethodName(1); LogHelper.Info(content + "-----" + clientid + "---------" + sign); logHelper.AddCallLog(content, clientid, sign, url); //if (clientKey == "nj_crm") //{ // clientid = SecurityHelper.OrderClientIdKey; //} //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { retMsg.orderId = ""; retMsg.retCode = (int)NodeJsOrderEnum.非法请求; retMsg.retMsg = Utility.GetCheckEnumNameByValue(retMsg.retCode); return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 } content = sHelper.decyptData(clientid, content); //解密操作 LogHelper.Info("OpenFreeOrder=>content:" + content); freeordermodel ordermodel = null; ordermodel = Utility.JSONToObject(content); string resid = WX.CRM.Common.ResUtil.CreateResId(ordermodel.mobile); if (res_Customer_BL.getResCustomerByResId(resid) == null) { res_Customer_BL.ResgisterCustomer(ordermodel.mobile, resid, "orderres");//注册资源 } SOFT_USER soft_user = soft_user_bl.GetUser_userName(ordermodel.softusername); if (soft_user == null) { retMsg.orderId = ""; retMsg.retCode = (int)NodeJsOrderEnum.找不到用户; retMsg.retMsg = ""; return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 } #region =================调用NodeJs创建订单======================== LogHelper.Info("====调用NodeJs创建订单==="); CreateOrderReq suorder = new CreateOrderReq(); suorder.productId = ordermodel.productcode; suorder.userName = ordermodel.softusername; suorder.count = ordermodel.count;//产品数量 suorder.busType = 1;// //suorder.ch = soft_user.REGCAMPAINID.HasValue ? Convert.ToInt32(soft_user.REGCAMPAINID.Value) : 0; suorder.source = 1; suorder.productType = ordermodel.productType;//0-单一产品、1-组合产品 suorder.mobile = ordermodel.mobile;//手机号码 suorder.totalPrice = Convert.ToInt32(ordermodel.needpay.Value * 100);//价格用分作为结算 //suorder.totalDays = ordermodel.opendays.HasValue ? Convert.ToInt32(ordermodel.opendays.Value) : 0; suorder.cssId = ordermodel.userid.ToString(); suorder.currentCH = soft_user.REGCAMPAINID.HasValue ? Convert.ToInt32(soft_user.REGCAMPAINID.Value) : 0; suorder.originalCH = soft_user.REGCAMPAINID.HasValue ? Convert.ToInt32(soft_user.REGCAMPAINID.Value) : 0; suorder.ip = ClientIp();//获取客户端IP //string json = string.Format("content={0}&clientid={1}&sign={2}", content, clientid, sign);//信息转发 url = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_AddOrderOpenFree);//封装出来的接口 string json = JsonHelper.ObjDivertToJson(suorder); LogHelper.Info("OpenFreeOrder=>Node.JS接口参数json=>:" + json); json = JsonHelper.ObjDivertToJson(sHelper.createAjaxSignEncodingStr(JsonHelper.ObjDivertToJson(suorder), SecurityHelper.OrderClientIdKey)); string retmsg = Utility.PostAjaxData(url, json, Encoding.UTF8);//返回信息 LogHelper.Info("OpenFreeOrder=>Node.JS接口返回数据json=>:" + retmsg); //retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, retmsg); CreateOrderRsp retmessage = JsonHelper.JsonDivertToObj(retmsg); //====================================================================== #endregion =================调用NodeJs创建订单======================== if (retmessage.retCode == (int)NodeJsOrderEnum.调用成功) { L2_SOFT_ORDER model = new L2_SOFT_ORDER(); model.ORDERSTATUS = 1; model.OPENUSER = ordermodel.opuser; model.OTIME = DateTime.Now; //model.WEBORDERID = retmessage.orderId; model.MEMO = ordermodel.remark; model.PRODUCTID = ordermodel.productId; model.PRODUCTCODE = ordermodel.productcode; model.RESID = resid; model.USERNAME = ordermodel.softusername; model.COMPANYID = ordermodel.saledeptid.Value; model.CREATEUSER = ordermodel.userid; model.ORDERTYPE = 1; model.DAYS = ordermodel.days; model.PRICE = suorder.totalPrice; model.CTIME = DateTimeTool.GetTimeFromLinuxShortTime(Convert.ToInt64(ordermodel.ctime)); model.companycode = ordermodel.companycode; model.WEBORDERID = retmessage.orderId; model.MainOrderId = ordermodel.mainOrderId; bool result = l2_soft_order_bl.OpenOrder(model); //retmessage.selfOirderId = model.ORDERID.ToString(); } else { LogHelper.Error("retmessage:" + retmsg);//记录下单不成功 } return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retmessage)));//直接返回 } catch (Exception ex) { retMsg.orderId = ""; retMsg.retCode = (int)NodeJsOrderEnum.系统错误; retMsg.retMsg = "系统错误"; LogHelper.Error("OpenFreeOrder=>erro:" + ex.ToString()); return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 } } /// /// 创建订单(统一将数据加密返回) /// /// /// /// /// public Stream OpenFreeOrderByUserName(string content, string clientid, string sign) { string msg = string.Empty; //retOrder retOrder = null; CreateOrderRsp retMsg = new CreateOrderRsp(); //string ndretmsg = string.Empty; try { string url = Utility.GetClassAndMethodName(1); LogHelper.Info(content + "-----" + clientid + "---------" + sign); logHelper.AddCallLog(content, clientid, sign, url); //if (clientKey == "nj_crm") //{ // clientid = SecurityHelper.OrderClientIdKey; //} //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { retMsg.orderId = ""; retMsg.retCode = (int)NodeJsOrderEnum.非法请求; retMsg.retMsg = Utility.GetCheckEnumNameByValue(retMsg.retCode); return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 } content = sHelper.decyptData(clientid, content); //解密操作 LogHelper.Info("OpenFreeOrderByUserName=>content:" + content); freeordermodel ordermodel = null; ordermodel = Utility.JSONToObject(content); string resid = string.Empty; if (!string.IsNullOrEmpty(ordermodel.mobile))//号码不为空 { resid = WX.CRM.Common.ResUtil.CreateResId(ordermodel.mobile); if (res_Customer_BL.getResCustomerByResId(resid) == null) { res_Customer_BL.ResgisterCustomer(ordermodel.mobile, resid, "orderres");//注册资源 } } //SOFT_USER soft_user = soft_user_bl.GetUser_userName(ordermodel.softusername); //if (soft_user == null) //{ // retMsg.orderId = ""; // retMsg.retCode = (int)NodeJsOrderEnum.找不到用户; // retMsg.retMsg = ""; // return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 //} #region =================调用NodeJs创建订单======================== LogHelper.Info("====调用NodeJs创建订单==="); CreateOrderReq suorder = new CreateOrderReq(); suorder.productId = ordermodel.productcode; suorder.userName = ordermodel.softusername; suorder.count = ordermodel.count;//产品数量 suorder.busType = 1;// //suorder.ch = soft_user.REGCAMPAINID.HasValue ? Convert.ToInt32(soft_user.REGCAMPAINID.Value) : 0; suorder.source = 1; suorder.productType = 0;//0-单一产品、1-组合产品 if (!string.IsNullOrEmpty(ordermodel.mobile)) suorder.mobile = ordermodel.mobile;//手机号码 suorder.totalPrice = 0;//价格用分作为结算 //suorder.totalDays = ordermodel.opendays.HasValue ? Convert.ToInt32(ordermodel.opendays.Value) : 0; suorder.cssId = ordermodel.userid.ToString(); suorder.currentCH = ordermodel.ch;// soft_user.REGCAMPAINID.HasValue ? Convert.ToInt32(soft_user.REGCAMPAINID.Value) : 0; suorder.originalCH = ordermodel.ch;//soft_user.REGCAMPAINID.HasValue ? Convert.ToInt32(soft_user.REGCAMPAINID.Value) : 0; suorder.ip = ClientIp();//获取客户端IP if (suorder.ip == "::1") { suorder.ip = "127.0.0.1"; } //string json = string.Format("content={0}&clientid={1}&sign={2}", content, clientid, sign);//信息转发 url = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_AddOrderOpenFree);//封装出来的接口 string json = JsonHelper.ObjDivertToJson(suorder); LogHelper.Info("OpenFreeOrder=>Node.JS接口参数json=>:" + json); json = JsonHelper.ObjDivertToJson(sHelper.createAjaxSignEncodingStr(JsonHelper.ObjDivertToJson(suorder), SecurityHelper.OrderClientIdKey)); string retmsg = Utility.PostAjaxData(url, json, Encoding.UTF8);//返回信息 LogHelper.Info("OpenFreeOrder=>Node.JS接口返回数据json=>:" + retmsg); //retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, retmsg); CreateOrderRsp retmessage = JsonHelper.JsonDivertToObj(retmsg); //====================================================================== #endregion =================调用NodeJs创建订单======================== if (retmessage.retCode == (int)NodeJsOrderEnum.调用成功) { L2_SOFT_ORDER model = new L2_SOFT_ORDER(); model.ORDERSTATUS = 1; model.OPENUSER = ordermodel.opuser; model.OTIME = DateTime.Now; //model.WEBORDERID = retmessage.orderId; model.MEMO = ordermodel.remark; model.PRODUCTID = ordermodel.productId; model.PRODUCTCODE = ordermodel.productcode; model.RESID = resid; model.USERNAME = ordermodel.softusername; model.COMPANYID = ordermodel.saledeptid; model.CREATEUSER = ordermodel.userid; model.ORDERTYPE = 1; model.DAYS = ordermodel.days; model.PRICE = suorder.totalPrice; model.CTIME = DateTimeTool.GetTimeFromLinuxShortTime(Convert.ToInt64(ordermodel.ctime)); model.companycode = ordermodel.companycode; model.WEBORDERID = retmessage.orderId; model.MainOrderId = ordermodel.mainOrderId; bool result = l2_soft_order_bl.OpenOrder(model); retmessage.selfOirderId = model.ORDERID.ToString(); } else { LogHelper.Error("retmessage:" + retmsg);//记录下单不成功 } return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retmessage)));//直接返回 } catch (Exception ex) { retMsg.orderId = ""; retMsg.retCode = (int)NodeJsOrderEnum.系统错误; retMsg.retMsg = "系统错误"; LogHelper.Error("OpenFreeOrder=>erro:" + ex.ToString()); return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retMsg)));//返回加密数据 } } public Stream CloeaFreeeOrder(string content, string clientid, string sign) { string msg = string.Empty; //retOrder retOrder = null; retMsg restmsg = new retMsg(); //string ndretmsg = string.Empty; try { string url = Utility.GetClassAndMethodName(1); LogHelper.Info(content + "-----" + clientid + "---------" + sign); logHelper.AddCallLog(content, clientid, sign, url); //if (clientKey == "nj_crm") //{ // clientid = SecurityHelper.OrderClientIdKey; //} //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.非法请求; restmsg.retmsg = Utility.GetCheckEnumNameByValue(restmsg.retcode); return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(restmsg)));//返回加密数据 } content = sHelper.decyptData(clientid, content); //解密操作 LogHelper.Info("content:" + content); freeOrderClose ordermodel = Utility.JSONToObject(content); if (ordermodel.orderId == "1092") { var pId = decimal.Parse(ordermodel.orderId); var l2OrderInfo = l2_soft_order_bl.Get(p => p.PRODUCTID == pId && p.USERNAME == ordermodel.userName && p.ORDERSTATUS == 1); if (l2OrderInfo != null) { ordermodel.orderId = l2OrderInfo.WEBORDERID; } } #region =================调用NodeJs关闭订单======================== LogHelper.Info("====调用NodeJs关闭订单==="); freeOrderClose suorder = new freeOrderClose(); suorder.userName = ordermodel.userName; suorder.flag = "0"; suorder.orderId = ordermodel.orderId; //string json = string.Format("content={0}&clientid={1}&sign={2}", content, clientid, sign);//信息转发 //if (suorder.totalPrice == 0) // url = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_AddOrderOpenFree);//封装出来的接口 //else url = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_closeFreeOrder);//封装出来的接口 string json = JsonHelper.ObjDivertToJson(suorder); LogHelper.Info("Node.JS接口参数json=>:" + json); json = JsonHelper.ObjDivertToJson(sHelper.createAjaxSignEncodingStr(JsonHelper.ObjDivertToJson(suorder), SecurityHelper.OrderClientIdKey)); string retmsg = Utility.PostAjaxData(url, json, Encoding.UTF8);//返回信息 LogHelper.Info("Node.JS接口返回数据json=>:" + retmsg); freeOrderCloseRes retmessage = JsonHelper.JsonDivertToObj(retmsg); ////====================================================================== #endregion =================调用NodeJs关闭订单======================== if (retmessage.iRet == 0) { string mssg = l2_soft_order_bl.closeOrder(suorder.orderId); } else { LogHelper.Error("resetpwd_erro:" + retmsg);// } return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(retmessage)));//直接返回 } catch (Exception ex) { LogHelper.Error(ex.ToString()); restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.系统错误; restmsg.retmsg = Utility.GetCheckEnumNameByValue(restmsg.retcode); return Utility.GetStream(sHelper.encyptData(clientid, JsonHelper.ObjDivertToJson(restmsg)));//返回加密数据 } } /// /// 签合同接口 /// /// /// /// /// public Stream Contract_Sign_Ret(string content, string clientid, string sign) { string msg = string.Empty; retMsg restmsg = new retMsg(); try { string url = Utility.GetClassAndMethodName(1); LogHelper.Info("Contract_Sign_Ret:" + content + "-----" + clientid + "---------" + sign); logHelper.AddCallLog(content, clientid, sign, url); if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.非法请求; restmsg.retmsg = Utility.GetCheckEnumNameByValue(restmsg.retcode); return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } content = sHelper.decyptData(clientid, content); //解密操作 LogHelper.Info("content:" + content); contractSignRet ordermodel = Utility.JSONToObject(content); if (string.IsNullOrEmpty(ordermodel.orderid)) ordermodel.orderid = ordermodel.htid.Substring(2); WX_SZZYORDER myorder = wx_SzzyOrder_BL.GetModelBySzId(Convert.ToDecimal(ordermodel.orderid)); if (myorder == null) { LogHelper.Info("未能查到订单信息:" + ordermodel.ToJson()); restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.数据不存在; restmsg.retmsg = "not exists"; return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } myorder.contractstatus = 1; myorder.contractctime = DateTime.Now; myorder.CONTRACTCODE = ordermodel.htid;// myorder.RISKCTRLSTATUS = 0; try { var bf = "{\"uid\": \"" + myorder.SOFTUSERNAME + "\"}"; var htflagUrl = cache_BL.GetValue_Parameter("htflag"); var hqr = BlowFish.encode(bf); var para = new { hqr }; string riskurl = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_Risk);//封装出来的接口 if (string.IsNullOrEmpty(riskurl)) riskurl = "https://r2.soft.dn8188.com/riskevaluate/h5/get_riskinfo"; var res = Utility.PostAjaxData(riskurl, para.ToJson(), Encoding.UTF8); var ret = JsonHelper.JsonDivertToObj(res); if (ret.ret == 0) { myorder.idcard = ret.idCard; myorder.CNAME = ret.name; } var retHtflag = Utility.GetData(htflagUrl, "htid=" + myorder.CONTRACTCODE, Encoding.UTF8); var retObj = JsonConvert.DeserializeAnonymousType(retHtflag, new { ret = -1, msg = string.Empty }); if (retObj.ret != -1) { if (retObj.ret == 0 || retObj.ret == 1) { myorder.adequacy = retObj.ret; } } } catch (Exception ex) { LogHelper.Error("获取合同信息错误:" + ex.ToString()); } wx_SzzyOrder_BL.Update(myorder); #region 签合同事件推送 EventBus.Instance.Publish(new SignContractEvent(ordermodel.orderid, ordermodel.htid, myorder.companycode)); #endregion 签合同事件推送 restmsg.result = true; restmsg.retcode = (int)EnumInterfaceErrcode.调用成功; restmsg.retmsg = "Success"; return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } catch (Exception ex) { LogHelper.Error(ex.ToString()); restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.系统错误; restmsg.retmsg = Utility.GetCheckEnumNameByValue(restmsg.retcode); return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } } /// /// 签订用户协议接口 /// /// /// /// /// public Stream Contract_Sign_Protocol_Ret(string content, string clientid, string sign) { string msg = string.Empty; retMsg restmsg = new retMsg(); try { LogHelper.Info("Contract_Sign_Ret:" + content + "-----" + clientid + "---------" + sign); if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.非法请求; restmsg.retmsg = Utility.GetCheckEnumNameByValue(restmsg.retcode); return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } content = sHelper.decyptData(clientid, content); //解密操作 LogHelper.Info("content:" + content); protocolSignRet ordermodel = Utility.JSONToObject(content); if (userProtocolbll.AuditModel(Convert.ToInt32(ordermodel.id), ordermodel.status)) { restmsg.result = true; restmsg.retcode = (int)EnumInterfaceErrcode.调用成功; restmsg.retmsg = "Success"; } else { restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.系统错误; restmsg.retmsg = "协议状态更新失败!"; } return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } catch (Exception ex) { LogHelper.Error(ex.ToString()); restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.系统错误; restmsg.retmsg = Utility.GetCheckEnumNameByValue(restmsg.retcode); return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } } /// /// 用户协议状态 /// /// /// /// /// public Stream Protocol_Status(string content, string clientid, string sign) { string msg = string.Empty; retMsg restmsg = new retMsg(); try { LogHelper.Info("Protocol_Status:" + content + "-----" + clientid + "---------" + sign); if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.非法请求; restmsg.retmsg = Utility.GetCheckEnumNameByValue(restmsg.retcode); return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } content = sHelper.decyptData(clientid, content); //解密操作 LogHelper.Info("content:" + content); ProtocolId ordermodel = Utility.JSONToObject(content); var model = userProtocolbll.GetOne(Convert.ToInt32(ordermodel.id)); if (model != null) { if (model.STATUS == 0) { restmsg.result = true; restmsg.retcode = (int)EnumInterfaceErrcode.调用成功; restmsg.retmsg = "可签署协议"; } else { restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.调用成功; restmsg.retmsg = "当前不可签署协议!"; } } return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } catch (Exception ex) { LogHelper.Error(ex.ToString()); restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.系统错误; restmsg.retmsg = Utility.GetCheckEnumNameByValue(restmsg.retcode); return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } } /// /// 退款协议接口 /// /// /// /// /// public Stream RefundContract(string content, string clientid, string sign) { var restmsg = new retMsg(); try { LogHelper.Info("退款合同接口:" + content + "-----" + clientid + "---------" + sign); var url = Utility.GetClassAndMethodName(1); logHelper.AddCallLog(content, clientid, sign, url); if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.非法请求; restmsg.retmsg = Utility.GetCheckEnumNameByValue(restmsg.retcode); return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } content = sHelper.decyptData(clientid, content); //解密操作 LogHelper.Info("content:" + content); contractSignRet ordermodel = Utility.JSONToObject(content); if (string.IsNullOrEmpty(ordermodel.orderid)) ordermodel.orderid = ordermodel.htid.Substring(2); //var orderid = Convert.ToInt32(ordermodel.orderid); var myorder = wx_SzzyOrder_BL.GetModelBySzId(Convert.ToDecimal(ordermodel.orderid)); if (myorder != null) { var orderid = Convert.ToInt32(myorder.ORDERID); var orderRefundContract = _orderRefundContract.Get(p => p.OrderId == orderid); if (orderRefundContract != null) { //先删除 _orderRefundContract.Delete(orderRefundContract); //后写入 var contract = new Wx_SzzyOrderRefundContract(orderid, ordermodel.htid, ordermodel.RefundPrice.HasValue ? ordermodel.RefundPrice.Value : 0, 0, string.IsNullOrEmpty(ordermodel.contracttime) ? DateTime.Now : DateTime.Parse(ordermodel.contracttime), ordermodel.contractkey, myorder.CHANNEL); _orderRefundContract.Add(contract); #region 签退款协议事件推送 EventBus.Instance.Publish(new RefundContractEvent(contract.OrderId.ToString(), contract.Contract, contract.RefundPrice, contract.ContractTime, contract.ContractKey, myorder.companycode)); #endregion 签退款协议事件推送 } else { var contract = new Wx_SzzyOrderRefundContract(orderid, ordermodel.htid, ordermodel.RefundPrice.HasValue ? ordermodel.RefundPrice.Value : 0, 0, string.IsNullOrEmpty(ordermodel.contracttime) ? DateTime.Now : DateTime.Parse(ordermodel.contracttime), ordermodel.contractkey, myorder.CHANNEL); _orderRefundContract.Add(contract); #region 签退款协议事件推送 EventBus.Instance.Publish(new RefundContractEvent(contract.OrderId.ToString(), contract.Contract, contract.RefundPrice, contract.ContractTime, contract.ContractKey, myorder.companycode)); #endregion 签退款协议事件推送 } } restmsg.result = true; restmsg.retcode = (int)EnumInterfaceErrcode.调用成功; restmsg.retmsg = "Success"; return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } catch (Exception ex) { LogHelper.Error(ex.ToString()); restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.系统错误; restmsg.retmsg = Utility.GetCheckEnumNameByValue(restmsg.retcode); return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } } /// /// 补单接口 /// /// /// /// /// public Stream SupplyOrder(string content, string clientid, string sign) { string msg = string.Empty; retMsg restmsg = new retMsg(); try { string url = Utility.GetClassAndMethodName(1); LogHelper.Info("SupplyOrder:" + content + "-----" + clientid + "---------" + sign); logHelper.AddCallLog(content, clientid, sign, url); if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.非法请求; restmsg.retmsg = Utility.GetCheckEnumNameByValue(restmsg.retcode); return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } content = sHelper.decyptData(clientid, content); //解密操作 LogHelper.Info("SupplyOrder content:" + content); supplyOrderRes getmodel = Utility.JSONToObject(content); LogHelper.Info("====调用NodeJs获取订单==="); string json = "{\"orderId\":\"" + getmodel.orderid + "\"}"; url = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_OrderGet);//封装出来的接口 //LogHelper.Info(url + "Node.JS接口参数json=>:" + json); json = JsonHelper.ObjDivertToJson(sHelper.createAjaxSignEncodingStr(json, SecurityHelper.OrderClientIdKey)); string retmsg = Utility.PostAjaxData(url, json, Encoding.UTF8);//返回信息 LogHelper.Info(url + "Node.JS接口返回数据json=>:" + retmsg); //retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, retmsg); orderGet retmessage = JsonHelper.JsonDivertToObj(retmsg); WX_SZZYORDER myorder = wx_SzzyOrder_BL.GetModelBySzId(Convert.ToDecimal(getmodel.orderid)); if (myorder == null)//线上开通的订单,需要开始创建 { WX_SZZYORDER model = new WX_SZZYORDER(); string outorderno = string.Empty; string resid = string.Empty; if (!string.IsNullOrEmpty(retmessage.stOrderInfo.ext1)) { var ext = JsonHelper.JsonDivertToObj(retmessage.stOrderInfo.ext1); model.eid = ext.eid; if (model.eid.HasValue) { model.USERID = model.eid.Value.ToString(); } model.outorderno = ext.outOrderNo;//***第三方平台订单号*** model.wXShopOrderNo = ext.wXShopOrderNo;//微信小店单号 model.ORDERTYPE = 1; SOFT_USER outsoftuser = soft_user_bl.GetUser_userName(retmessage.stOrderInfo.username); if (outsoftuser != null) { resid = outsoftuser.RESID;//如果是外部订单,就查找之前注册的resid } #region 新媒体二和平台一新增oldOutOrderidList 升级订单数据入库 if (ext.oldOutOrderidList != null && ext.oldOutOrderidList.Count() > 0)//升级关系 { var oldOrdList = wx_SzzyOrder_BL.GetList(m => ext.oldOutOrderidList.Contains(m.outorderno)).Select(m => m.ORDERID).ToArray(); model.UPGRADEORDERIDS = string.Join(",", oldOrdList); model.ORDERTYPE = 3; } else { //平台一历史数据处理 if (ext.oldpointOrderIds != null && ext.oldpointOrderIds.Count() > 0) //升级关系 { // var sql = "SELECT orderid From pt1_module_price where point_id in (223326,223321,223324,146480)"; LogHelper.Info("oldpointOrderIds=>:" + ext.oldpointOrderIds); model.UPGRADEORDERIDS = string.Join(",", ext.oldpointOrderIds); model.ORDERTYPE = 3; } } #endregion 新媒体二和平台一新增oldOutOrderidList 升级订单数据入库 } if (string.IsNullOrEmpty(resid))//内部订单 { resid = WX.CRM.Common.ResUtil.CreateResId(getmodel.mb); if (res_Customer_BL.getResCustomerByResId(resid) == null) { res_Customer_BL.ResgisterCustomer(getmodel.mb, resid, "orderres");//注册资源 } res_customeruser_bl.ContractUser(resid, retmessage.stOrderInfo.username);//关联用户 } model.ORDERID = new SEQUENCES_BL().Seq_order_get();//创建订单ID model.OPERATETIME = DateTime.Now; model.INNERUSERID = 0; model.RESID = resid; model.OPENORDER = 0; if (!string.IsNullOrEmpty(getmodel.name)) { model.CNAME = getmodel.name; } if (!string.IsNullOrEmpty(getmodel.idcard)) { model.idcard = getmodel.idcard; } //先是以新订单的方式入库 model.ISFINANCEPAY = 0; model.ISOPEN = 0; model.ORDERSTATUS = "180"; model.ORDERSTATUSNAME = "新订单"; model.PRODUCTNAME = retmessage.stOrderInfo.productname; model.NEEDPAY = retmessage.stOrderInfo.totalprice / 100; //model.RETURNNEEDPAY = retmessage.stOrderInfo.totalprice / 100; //model.SOURCE = retmessage.stOrderInfo.source.ToString(); model.SOURCE = "5";//网上下单 WX_SZZYSUBPRODUCT subproduct = product_bl.GetSubProduct(retmessage.stOrderInfo.productid); var isCompliance = 0; if (subproduct != null) { model.PRODUCTID = subproduct.PRODUCTID; model.SUBPRODUCTID = subproduct.SUBPRODUCTID; model.SettleType = subproduct.SettleType; WX_SZZYPRODUCT product = product_bl.GetBigProduct(subproduct.PRODUCTID); if (product != null) { model.PRODUCTNAME = product.PRODUCTNAME; model.BIGPRODUCTCODE = product.PRODUCTCODE; } isCompliance = subproduct.IsCompliance; model.RETURNNEEDPAY = subproduct.PRICE; model.ORIGINPAY = subproduct.PRICE; //原始金额等于产品原价 } model.CTIME = DateTime.Now; model.SUBPRODUCTNAME = retmessage.stOrderInfo.productname; model.OPENDAYS = retmessage.stOrderInfo.totaldays; //model.CNAME = ordermodel.cname; model.SOFTUSERNAME = retmessage.stOrderInfo.username; model.TOTALUPGRADEVALUE = 0; model.REQUESTSTATUS = 1; model.PRODUCTCODE = retmessage.stOrderInfo.productid; //model.BIGPRODUCTCODE = ordermodel.bigproductcode; model.BOOKNUM = retmessage.stOrderInfo.count; //model.TEAMSERVE = ordermodel.teamserve; //model.INNERUSERID = ordermodel.userid; //根据渠道号获取部门编码 var ch = 0; if (retmessage.stOrderInfo.orich != 0) { ch = retmessage.stOrderInfo.orich; } else { //if (retmessage.stOrderInfo.currch == 0) if (retmessage.stOrderInfo.ch > 0) { ch = retmessage.stOrderInfo.ch; } else { ch = retmessage.stOrderInfo.currch; } } var companyCode = cache_BL.GetCompanyCode(); var company = companyCode.FirstOrDefault(p => p.Min <= ch && p.Max >= ch); model.companycode = company != null ? company.CompanyCode : "DNZZ"; //是否合规,1:是,0:否。主要在线订单同步到线下的时候,根据该状态值来判断是否写入合同数据 if (isCompliance == 1) { //合同生成才写合同号 if (getmodel.ispdf == 1) { //正常签合同流程 model.contractstatus = 1;//刚刚创建订单,合同没签 model.CONTRACTCODE = "DN" + retmessage.stOrderInfo.orderid; } } //else if(isCompliance == 2) //{ // //先开通后签合同 // model.CONTRACTCODE = "DN" + retmessage.stOrderInfo.orderid; //} model.CTIME = DateTimeTool.GetTimeFromLinuxShortTime(retmessage.stOrderInfo.ctime); //model.PAYTYPE=retmessage.stOrderInfo.GetType model.RISKCTRLSTATUS = 0;//补单的也需要风控 model.CHANNEL = ch; model.SZZYORDERID = Convert.ToDecimal(retmessage.stOrderInfo.orderid); model.ISTEST = 0; model.mb = getmodel.mb;//用于推送到线下补用户 /*获取实名信息*/ if (string.IsNullOrEmpty(model.idcard)) { try { var bf = "{\"uid\": \"" + retmessage.stOrderInfo.username + "\"}"; var hqr = BlowFish.encode(bf); var para = new { hqr }; string riskurl = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_Risk);//封装出来的接口 if (string.IsNullOrEmpty(riskurl)) riskurl = "https://r2.soft.dn8188.com/riskevaluate/h5/get_riskinfo"; var res = Utility.PostAjaxData(riskurl, para.ToJson(), Encoding.UTF8); LogHelper.Info("补单获取合同信息:" + res); if (!string.IsNullOrEmpty(res)) { var ret = JsonHelper.JsonDivertToObj(res); if (ret.ret == 0) { model.idcard = ret.idCard; model.CNAME = ret.name; } } } catch (Exception ex) { LogHelper.Error("获取合同信息错误:" + ex.ToString()); } } wx_SzzyOrder_BL.Add(model);//进行补单 //推送到分部 EventBus.Instance.Publish(new SupplyOrderEvent(model)); //如果有支付流水号,就判断写入支付流水表 if (!string.IsNullOrEmpty(getmodel.payno)) { if (getmodel.payno.IndexOf("_") > -1) { getmodel.payno = getmodel.payno.Substring(0, getmodel.payno.IndexOf("_")); } var payInfo = _orderPay.Get(m => m.orderid == model.ORDERID && m.payno == getmodel.payno); var payInfo2 = _orderPay.Get(m => m.orderid == model.ORDERID && m.payno == getmodel.payno); if (payInfo == null && payInfo2 == null) { #region 废弃 //payInfo = new WX_SzzyOrderPay(); //payInfo.orderid = Convert.ToInt32(model.ORDERID); //payInfo.needpay = model.NEEDPAY.Value; //payInfo.payprice = getmodel.payprice / 100; //up金额单位是分 //payInfo.payno = getmodel.payno; //payInfo.paytype = getmodel.paytype; //var payTypeName = cache_BL.GetList_Parameter(ParameterGroup.OrderPayType).FirstOrDefault(p => p.PARAVALUE == getmodel.paytype.ToString()).PARANAME; //payInfo.paytypename = payTypeName; //payInfo.remark = getmodel.paymark; //payInfo.ctime = DateTime.Now; //payInfo.paydate = DateTime.Now.Date; //payInfo.payname = "在线支付"; //payInfo.companycode = model.companycode; //payInfo.auditstatus = 1; //表示已经确认 //payInfo.audittime = payInfo.ctime; //payInfo.channel = model.CHANNEL; ////写入支付记录表 //int result = _orderPay.Add(payInfo); ////写入支付表成功+新订单状态,就修改订单为已经支付状态 //if (result == 1 && model.ORDERSTATUS == "180") //{ // //更新订单支付信息 // model.ARRIVALPAY = getmodel.payprice; // model.FINALPAY = getmodel.payprice; // model.ARRIVALTIME = payInfo.paydate; // model.ORDERSTATUS = "200"; // model.ORDERSTATUSNAME = "已支付"; // wx_SzzyOrder_BL.Update(model); //} ////推送支付事件 //EventBus.Instance.Publish(new PayInfoEvent(Convert.ToInt32(model.ORDERID), "200", "已支付", model.NEEDPAY.Value, payInfo.paydate.Value, model.companycode, getmodel.payno, getmodel.paytype, payTypeName, getmodel.paymark, payInfo.payprice, payInfo.ctime, payInfo.payname)); #endregion 废弃 #region 自动确认审核 var payTypeName = cache_BL.GetList_Parameter(ParameterGroup.OrderPayType).FirstOrDefault(p => p.PARAVALUE == getmodel.paytype.ToString()).PARANAME; var paylist = new List() { new PayInfoDto(){ resid = resid, paytype = getmodel.paytype, paytypename = payTypeName, paydate = DateTime.Now.Date, payname = "在线支付", remark = getmodel.paymark, payno = getmodel.payno, isuse = 0, companycode = model.companycode, tradeno = null, creator = null, creatorname = null, checkpaytime=DateTime.Now, payprice=getmodel.payprice / 100 //up金额单位是分lPrice } }; var orderuselist = new List() { new OrderuseDto() { orderid = Convert.ToInt32(model.ORDERID), needpay = model.NEEDPAY.Value, arrivalpay = 0 } }; var dto2 = new CRM.Core.DTO.Ord.PayDto2 { orderuselist = orderuselist, resid = model.RESID, //depprice = depprice, paylist = paylist, channel = model.CHANNEL }; LogHelper.Info("dto2:" + dto2.ToJson()); var ret2 = _payServices.Add(dto2, 2); if (ret2.result) { LogHelper.Info("写入支付记录和更新订单状态执行数据库操作成功!"); //支付信息写入成功之后自动调用审核 var depositInfoList = ret2.retmsg; foreach (var deposit in depositInfoList) { //try //{ var depositModel = _deposit.Get(p => p.id == deposit.id); if (depositModel != null) { retMsg rets = _deposit.Audit(depositModel, 0, string.Empty, needAutomaticOpen: false); if (rets.result == false)//审核失败,返回失败 { throw new Exception("流水入库失败,返回错误!"); } } //} //catch (Exception exx) //{ // LogHelper.Error(exx); //} } if (retmessage.stOrderInfo.status == 220) { model.ISFINANCEPAY = 1; model.ISOPEN = 1; model.ORDERSTATUSNAME = "已开通"; model.OTIME = DateTimeTool.GetTimeFromLinuxShortTime(retmessage.stOrderInfo.otime); model.ENDTIME = model.OTIME.Value.AddDays(retmessage.stOrderInfo.totaldays); model.ARRIVALPAY = retmessage.stOrderInfo.totalprice / 100; model.ARRIVALTIME = model.OTIME; model.ORDERSTATUS = retmessage.stOrderInfo.status.ToString(); wx_SzzyOrder_BL.Update(model);//进行补单 } } #endregion 自动确认审核 } } restmsg.result = true; restmsg.retcode = (int)EnumInterfaceErrcode.调用成功; restmsg.retmsg = model.ORDERID.ToString(); return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } else { //如果订单不是开通状态才执行 if (myorder.ORDERSTATUS != "220") { //如果有支付流水号,就判断写入支付流水表 if (!string.IsNullOrEmpty(getmodel.payno)) { if (getmodel.payno.IndexOf("_") > -1) { getmodel.payno = getmodel.payno.Substring(0, getmodel.payno.IndexOf("_")); } var payInfo = _orderPay.Get(m => m.orderid == myorder.ORDERID && m.payno == getmodel.payno); var payInfo2 = _orderPay.Get(m => m.orderid == myorder.ORDERID && m.payno == getmodel.payno); if (payInfo == null && payInfo2 == null) { //payInfo = new WX_SzzyOrderPay(); //payInfo.orderid = Convert.ToInt32(myorder.ORDERID); //payInfo.needpay = myorder.NEEDPAY.Value; //payInfo.payprice = getmodel.payprice / 100; //up金额单位是分 //payInfo.payno = getmodel.payno; //payInfo.paytype = getmodel.paytype; //var payTypeName = cache_BL.GetList_Parameter(ParameterGroup.OrderPayType).FirstOrDefault(p => p.PARAVALUE == getmodel.paytype.ToString()).PARANAME; //payInfo.paytypename = payTypeName; //payInfo.remark = getmodel.paymark; //payInfo.ctime = DateTime.Now; //payInfo.paydate = DateTime.Now.Date; //payInfo.payname = "在线支付"; //payInfo.companycode = myorder.companycode; //payInfo.auditstatus = 1; //表示已经确认 //payInfo.audittime = payInfo.ctime; //payInfo.channel = myorder.CHANNEL; ////写入支付记录表 //int result = _orderPay.Add(payInfo); ////写入支付表成功+新订单状态,就修改订单为已经支付状态 //if (result == 1 && myorder.ORDERSTATUS == "180") //{ // //更新订单支付信息 // myorder.ARRIVALPAY = getmodel.payprice; // myorder.FINALPAY = getmodel.payprice; // myorder.ARRIVALTIME = payInfo.paydate; // myorder.ORDERSTATUS = "200"; // myorder.ORDERSTATUSNAME = "已支付"; // wx_SzzyOrder_BL.Update(myorder); //} ////推送支付事件 //EventBus.Instance.Publish(new PayInfoEvent(Convert.ToInt32(myorder.ORDERID), "200", "已支付", myorder.NEEDPAY.Value, payInfo.paydate.Value, myorder.companycode, getmodel.payno, getmodel.paytype, payTypeName, getmodel.paymark, payInfo.payprice, payInfo.ctime, payInfo.payname)); #region 自动确认审核 var payTypeName = cache_BL.GetList_Parameter(ParameterGroup.OrderPayType).FirstOrDefault(p => p.PARAVALUE == getmodel.paytype.ToString()).PARANAME; var paylist = new List() { new PayInfoDto(){ resid = myorder.RESID, paytype = getmodel.paytype, paytypename = payTypeName, paydate = DateTime.Now.Date, payname = "在线支付", remark = getmodel.paymark, payno = getmodel.payno, isuse = 0, companycode = myorder.companycode, tradeno = null, creator = null, creatorname = null, checkpaytime=DateTime.Now, payprice=getmodel.payprice / 100 //up金额单位是分lPrice } }; var orderuselist = new List() { new OrderuseDto() { orderid = Convert.ToInt32(myorder.ORDERID), needpay = myorder.NEEDPAY.Value, arrivalpay = 0 } }; var dto2 = new CRM.Core.DTO.Ord.PayDto2 { orderuselist = orderuselist, resid = myorder.RESID, //depprice = depprice, paylist = paylist, channel = myorder.CHANNEL }; LogHelper.Info("dto2:" + dto2.ToJson()); var ret2 = _payServices.Add(dto2, 2); if (ret2.result) { LogHelper.Info("写入支付记录和更新订单状态执行数据库操作成功!"); //支付信息写入成功之后自动调用审核 var depositInfoList = ret2.retmsg; foreach (var deposit in depositInfoList) { //try //{ var depositModel = _deposit.Get(p => p.id == deposit.id); if (depositModel != null) { retMsg rets = _deposit.Audit(depositModel, 0, string.Empty, needAutomaticOpen: false); if (rets.result == false)//审核失败,返回失败 { throw new Exception("流水入库失败,返回错误!"); } } //} //catch (Exception exx) //{ // LogHelper.Error(exx); //} } } #endregion 自动确认审核 } } } if (retmessage.stOrderInfo.status == 220 && myorder.ORDERSTATUS != "220") { myorder.ISOPEN = 1; myorder.ORDERSTATUS = "220"; myorder.ORDERSTATUSNAME = "已开通"; myorder.OTIME = DateTimeTool.GetTimeFromLinuxShortTime(retmessage.stOrderInfo.otime); myorder.ENDTIME = myorder.OTIME.Value.AddDays(retmessage.stOrderInfo.totaldays); myorder.ARRIVALPAY = retmessage.stOrderInfo.totalprice / 100; myorder.ARRIVALTIME = myorder.OTIME; wx_SzzyOrder_BL.Update(myorder); //推送支付事件 //EventBus.Instance.Publish(new PayOrderEvent(Convert.ToInt32(myorder.ORDERID), "200", "已支付", myorder.ARRIVALPAY.Value, myorder.ARRIVALTIME.Value, myorder.companycode)); //推送开通事件 EventBus.Instance.Publish(new OpenOrderEvent(Convert.ToInt32(myorder.ORDERID), myorder.ORDERSTATUS, myorder.ORDERSTATUSNAME, myorder.OTIME.Value, myorder.ENDTIME.Value, myorder.companycode, null, null, null, myorder.RESID, null, null)); } //调用淘牛邦第三方订单通知 WX_SZZYSUBPRODUCT subproduct = product_bl.GetSubProduct(retmessage.stOrderInfo.productid); if (subproduct.ThirdOrderCate.HasValue && subproduct.ThirdOrderCate == 3) { TNB_SyncData_BL tnbSync = new TNB_SyncData_BL(); tnbSync.SyncData(myorder, subproduct); } restmsg.result = true; restmsg.retcode = (int)EnumInterfaceErrcode.调用成功; restmsg.retmsg = myorder.ORDERID.ToString(); return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } } catch (Exception ex) { LogHelper.Error(ex.ToString()); restmsg.result = false; restmsg.retcode = (int)EnumInterfaceErrcode.系统错误; restmsg.retmsg = Utility.GetCheckEnumNameByValue(restmsg.retcode); return Utility.GetStream(JsonHelper.ObjDivertToJson(restmsg));//返回加密数据 } } /// /// 分部审核合同 /// /// /// /// /// public Stream ContractAudit(string content, string clientid, string sign) { var msg = string.Empty; try { string url = Utility.GetClassAndMethodName(1); logHelper.AddCallLog(content, clientid, sign, url); if (clientKey == "nj_crm") { clientid = SecurityHelper.OrderClientIdKey; } //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } content = sHelper.decyptData(clientid, content); //解密操作 var dto = Utility.JSONToObject(content); LogHelper.Info("合同审核信息:dto=" + dto.ToJson()); var order = wx_SzzyOrder_BL.Get(p => p.ORDERID == dto.OrderId); if (order != null) { if (order.RISKCTRLSTATUS != 2) { order.RISKCTRLSTATUS = 1; wx_SzzyOrder_BL.Update(order); } } else { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.参数错误, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } } catch (Exception ex) { LogHelper.Error(ex.ToString()); msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } msg = JsonHelper.ObjDivertToJson(new retMsg { result = true, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } /// /// 分部审核退款合同 /// /// /// /// /// public Stream RefundContractAudit(string content, string clientid, string sign) { var msg = string.Empty; LogHelper.Info("退款合同审核信息:cntent=" + content + "&clientid=" + clientid + "&sign=" + sign); try { string url = Utility.GetClassAndMethodName(1); logHelper.AddCallLog(content, clientid, sign, url); if (clientKey == "nj_crm") { clientid = SecurityHelper.OrderClientIdKey; } //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } content = sHelper.decyptData(clientid, content); //解密操作 var dto = Utility.JSONToObject(content); //var order = wx_SzzyOrder_BL.Get(p => p.ORDERID == dto.OrderId); var refundOrder = _orderRefundContract.Get(p => p.OrderId == dto.OrderId); if (refundOrder != null) { //if (refundOrder.ContractStatus != 2) //{ refundOrder.ContractStatus = 2; _orderRefundContract.Update(refundOrder); //} } else { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.参数错误, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } } catch (Exception ex) { LogHelper.Error(ex.ToString()); msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } msg = JsonHelper.ObjDivertToJson(new retMsg { result = true, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } /// /// 退款申请 /// /// /// public Stream RefundApply(Stream input) { var msg = string.Empty; var headerCollection = WebOperationContext.Current.IncomingRequest.Headers; var content = HttpUtility.UrlDecode(headerCollection.Get("content")); var clientid = HttpUtility.UrlDecode(headerCollection.Get("clientid")); var sign = HttpUtility.UrlDecode(headerCollection.Get("sign")); LogHelper.Info("退款申请信息:cntent=" + content + "&clientid=" + clientid + "&sign=" + sign); try { string url = Utility.GetClassAndMethodName(1); logHelper.AddCallLog(content, clientid, sign, url); if (clientKey == "nj_crm") { clientid = SecurityHelper.OrderClientIdKey; } //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } content = sHelper.decyptData(clientid, content); //解密操作 var dto = Utility.JSONToObject(content); var payTypeName = cache_BL.GetList_Parameter(ParameterGroup.OrderPayType).FirstOrDefault(p => p.PARAVALUE == dto.refundtype.ToString()).PARANAME; #region 上传文件 if (input.CanRead && !string.IsNullOrEmpty(dto.att)) { string rootPath = ConfigurationManager.AppSettings["uploadfile"]; FileStream targetStream = null; var fileName = Path.GetFileName(dto.att); var webPath = dto.att; var filePaths = webPath.Replace(fileName, "");//去掉开头的/,然后再按照/拆分文件路径 var dic = Path.Combine(rootPath, filePaths); //上传文件的一级目录 if (!Directory.Exists(dic)) { Directory.CreateDirectory(dic); } var filePath = Path.Combine(dic, fileName); //LogHelper.Info(string.Format("filePath:{0}", filePath)); using (targetStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) { const int bufferLen = 4096; byte[] buffer = new byte[bufferLen]; int count = 0; while ((count = input.Read(buffer, 0, bufferLen)) > 0) { targetStream.Write(buffer, 0, count); } targetStream.Close(); input.Close(); } } #endregion 上传文件 var id = new SEQUENCES_BL().Seq_OrderRefund(); #region 渠道 int? channel = null; var deptcode = string.Empty; //先根据orderid在订单表里面查找,能找到说明是订单退款,没找到的话就在订金表里查找,能找到说明是订金退款 //订单退款线上线下都有,订金暂时只在线下有 var order = wx_SzzyOrder_BL.Get(p => p.ORDERID == dto.orderid); var oldrefSum = new WX_SzzyOrderRefund_BL().GetList(m => m.orderid == dto.orderid && m.auditstatus == 1 && m.isdelete == 0).Sum(m => m.refundprice);//在此之前的退款数据 //if (oldrefSum < dto.refundprice) //{ // msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.调用成功但有错误, retmsg = "累计退款金额不能大于到款金额。" }); // msg = sHelper.encyptData(clientid, msg); // return Utility.GetStream(msg); //} if (order != null) { channel = order.CHANNEL; deptcode = order.deptcode; if ((order.ARRIVALPAY - oldrefSum) < dto.refundprice)//有订单的情况退款金额过大,不能够在继续退款 { var canRefPay = ((order.ARRIVALPAY ?? 0) - oldrefSum); msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.调用成功但有错误, retmsg = " 当前可退款金额:" + canRefPay.ToString("#0.00") + " 元" }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } } else { var orderDeposit = _orderDeposit.Get(p => p.id == dto.orderid); if (orderDeposit != null) { channel = orderDeposit.channel; deptcode = orderDeposit.deptcode; if ((orderDeposit.payprice - oldrefSum) < dto.refundprice) { var canRefPay = ((orderDeposit.payprice ?? 0) - oldrefSum); msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.调用成功但有错误, retmsg = " 累计退款超过了流水金额" }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } } else { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.调用成功但有错误, retmsg = "找不到可退款的数据" }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } } #endregion 渠道 var model = new WX_SzzyOrderRefund(id, dto.orderid, dto.refundprice, dto.account, dto.username, dto.refundtype, payTypeName, dto.refunddate, dto.remark, dto.att, string.Empty, dto.companycode, channel, dto.isacturalrefund ?? 1); if (dto.creator.HasValue) { model.creator = dto.creator.Value; } if (!string.IsNullOrEmpty(dto.creatorname)) { model.creatorname = dto.creatorname; } model.deptcode = deptcode; var res = orderRefund_BL.Add(model); if (res > 0) { msg = JsonHelper.ObjDivertToJson(new retMsg { result = true, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = id.ToString() }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } else { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } } catch (Exception ex) { LogHelper.Error(ex.ToString()); msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } } public Stream Refund(string content, string clientid, string sign) { var msg = string.Empty; //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } content = sHelper.decyptData(clientid, content); //解密操作 var dto = Utility.JSONToObject(content); //如果订单号跟权限单号都没有 if (!dto.orderid.HasValue && string.IsNullOrEmpty(dto.szzyorderid)) { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.参数错误, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } var payTypeName = cache_BL.GetList_Parameter(ParameterGroup.OrderPayType).FirstOrDefault(p => p.PARAVALUE == dto.refundtype.ToString()).PARANAME; var id = new SEQUENCES_BL().Seq_OrderRefund(); int? channel = null; var deptcode = string.Empty; var companycode = string.Empty; //先根据orderid在订单表里面查找,能找到说明是订单退款,没找到的话就在订金表里查找,能找到说明是订金退款 //订单退款线上线下都有,订金暂时只在线下有 var order = new WX_SZZYORDER(); if (dto.orderid.HasValue) { order = wx_SzzyOrder_BL.Get(p => p.ORDERID == dto.orderid); } else { var szzyorderid = Convert.ToDecimal(dto.szzyorderid); order = wx_SzzyOrder_BL.Get(p => p.SZZYORDERID == szzyorderid); } var oldrefSum = new WX_SzzyOrderRefund_BL().GetList(m => m.orderid == dto.orderid && m.auditstatus == 1 && m.isdelete == 0).Sum(m => m.refundprice);//在此之前的退款数据 //if (oldrefSum < dto.refundprice) //} if (order != null) { channel = order.CHANNEL; deptcode = order.deptcode; companycode = order.companycode; dto.orderid = Convert.ToInt32(order.ORDERID); if ((order.ARRIVALPAY - oldrefSum) < dto.refundprice)//有订单的情况退款金额过大,不能够在继续退款 { var canRefPay = ((order.ARRIVALPAY ?? 0) - oldrefSum); msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.调用成功但有错误, retmsg = " 当前可退款金额:" + canRefPay.ToString("#0.00") + " 元" }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } } else { var orderDeposit = _orderDeposit.Get(p => p.id == dto.orderid); if (orderDeposit != null) { channel = orderDeposit.channel; deptcode = orderDeposit.deptcode; companycode = orderDeposit.companycode; dto.orderid = orderDeposit.id; if ((orderDeposit.payprice - oldrefSum) < dto.refundprice) { var canRefPay = ((orderDeposit.payprice ?? 0) - oldrefSum); msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.调用成功但有错误, retmsg = " 累计退款超过了流水金额" }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } } else { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.调用成功但有错误, retmsg = "找不到可退款的数据" }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } } var model = new WX_SzzyOrderRefund(id, dto.orderid.Value, dto.refundprice, dto.account, dto.username, dto.refundtype, payTypeName, DateTime.Now, dto.remark, null, string.Empty, companycode, channel, dto.isacturalrefund ?? 1); if (dto.creator.HasValue) { model.creator = dto.creator.Value; } if (!string.IsNullOrEmpty(dto.creatorname)) { model.creatorname = dto.creatorname; } model.deptcode = deptcode; var res = orderRefund_BL.Add(model); if (res > 0) { //自动审核 if (!string.IsNullOrEmpty(dto.szzyorderid)) { _refundServieces.Audit(model, 90, 0, "系统"); } msg = JsonHelper.ObjDivertToJson(new retMsg { result = true, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = id.ToString() }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } else { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } } public Stream OrderHgRecord(string content, string clientid, string sign) { var msg = string.Empty; LogHelper.Info("订单合规确认信息:cntent=" + content + "&clientid=" + clientid + "&sign=" + sign); try { string url = Utility.GetClassAndMethodName(1); logHelper.AddCallLog(content, clientid, sign, url); if (clientKey == "nj_crm") { clientid = SecurityHelper.OrderClientIdKey; } //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } content = sHelper.decyptData(clientid, content); //解密操作 var dto = Utility.JSONToObject(content); var order = wx_SzzyOrder_BL.Get(p => p.ORDERID == dto.OrderId); if (order != null) { order.hashgrecord = 1; wx_SzzyOrder_BL.Update(order);//修改订单的合规录音状态 ValidationErrors erro = new ValidationErrors(); new Csvr_HgRecord_BL().Create(ref erro, new CSVR_HGRECORD { COMPANYCODE = dto.COMPANYCODE, CONTENT = dto.CONTENT, CTIME = dto.CTIME, FILENAME = dto.FILENAME, INNERUSERID = dto.INNERUSERID, ISDOWN = dto.ISDOWN, MEMOID = dto.MEMOID, ORDERID = dto.OrderId, PKID = dto.PKID, RECORDID = dto.RECORDID, RECORDTYPE = dto.RECORDTYPE, RESID = dto.RESID, SALESEID = dto.SALESEID, SERVERID = dto.SERVERID, SERVICENUMBER = dto.SERVICENUMBER, TELNUMBERLAST4 = dto.TELNUMBERLAST4, TIMEEND = dto.TIMEEND, TIMELENGTH = dto.TIMELENGTH, TIMESTART = dto.TIMESTART }); //插入新的数据 EventBus.Instance.Publish(new HgRecordOrderEvent(Convert.ToInt32(order.ORDERID), order.companycode)); } else { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.参数错误, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } } catch (Exception ex) { LogHelper.Error(ex.ToString()); msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } msg = JsonHelper.ObjDivertToJson(new retMsg { result = true, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } /// /// 订金申请,审核确认的时候写入到账记录 /// /// /// /// /// public Stream OrderDepositAdd(string content, string clientid, string sign) { var msg = string.Empty; try { string url = Utility.GetClassAndMethodName(1); logHelper.AddCallLog(content, clientid, sign, url); if (clientKey == "nj_crm") { clientid = SecurityHelper.OrderClientIdKey; } //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } content = sHelper.decyptData(clientid, content); //解密操作 var dto = Utility.JSONToObject(content); if (!string.IsNullOrEmpty(dto.payno)) { dto.payno = dto.payno.Trim();//支付流水去除空格 } var payTypeName = cache_BL.GetList_Parameter(ParameterGroup.OrderPayType).FirstOrDefault(p => p.PARAVALUE == dto.paytype.ToString()).PARANAME; dto.paytypename = payTypeName; #region 如果有传渠道直接使用渠道,没有的话根据companycode 查找渠道 int? channel = null; bool CheckStatus = false; bool isReject = false;//是否需要驳回 string CheckMsg = ""; DateTime? PayTime = dto.paydate; if (dto.channel.HasValue) { channel = dto.channel; } else { var companyList = cache_BL.GetList_innerCompany().FirstOrDefault(p => p.SYSTEMCODE != null && p.SYSTEMCODE == dto.companycode); if (companyList != null) { channel = companyList.MINCHANNELCODE; } } #endregion 如果有传渠道直接使用渠道,没有的话根据companycode 查找渠道 //开始在线验证 if ((dto.paytype == 1 || dto.paytype == 5) && !string.IsNullOrEmpty(dto.payno)) { using (var db = new zxdContext()) { var orderPayNo = db.WX_SzzyOrderPay.FirstOrDefault(p => p.payno == dto.payno && p.auditstatus == 1); var deposit = db.WX_SzzyOrderDeposit.FirstOrDefault(p => p.payno == dto.payno && p.auditstatus == 1); if (orderPayNo != null || deposit != null) { CheckStatus = false; CheckMsg = "该笔流水号已被确认过,不可重复提交"; isReject = true; } else { CheckPayApi api = new CheckPayApi( Utility.GetSettingByKey("checkPayApiKey"), Utility.GetSettingByKey("checkPayApiSecret"), Utility.GetSettingByKey("checkPayApiIdentityKey")); Dictionary param = new Dictionary(); param.Add("channel", channel); //param.Add("outTradeNo", ); //请求 ApiResult res = new ApiResult(); if (dto.paytype == 1) { param.Add("tradeNo", dto.payno); res = api.AliPayStatus(param); } else { param.Add("transactionId", dto.payno); res = api.WechatPayStatus(param); } if (res.code == "200") { PayTime = res.data.payTime; if (res.data.totalAmount != (dto.payprice * 100)) { CheckStatus = false; CheckMsg = "提交的支付金额错误"; isReject = true; } else if (res.data.tradeStatus == 1)//验证通过 { CheckStatus = true; CheckMsg = "通过"; dto.paydate = res.data.payTime.Value.Date;//更新支付时间 } else { CheckStatus = false; CheckMsg = "支付流水号正确,但状态异常"; } } else { //验证失败 CheckStatus = false; CheckMsg = "支付流水未查到或错误"; } } } } var model = new WX_SzzyOrderDeposit(dto.resid, dto.paytype, payTypeName, dto.paydate, dto.payprice, dto.payname, dto.remark, dto.payno, dto.isuse, dto.companycode, channel, dto.tradeno) { id = new SEQUENCES_BL().Seq_OrderDeposit(), checkreslut = CheckMsg, checkpaytime = PayTime }; if (dto.creator.HasValue) { model.creator = dto.creator.Value; } if (!string.IsNullOrEmpty(dto.creatorname)) { model.creatorname = dto.creatorname; } model.deptcode = dto.deptcode; _orderDeposit.Add(model); //结束验证 if (CheckStatus) { var res = _orderDeposit.Audit(model, 0, "系统"); if (!res.result) { model.checkreslut = res.retmsg; _orderDeposit.Update(model); //驳回 _orderDeposit.Reject(model.id, -1, res.retmsg, 0, "系统"); } } if (isReject) { //主动驳回 //驳回 _orderDeposit.Reject(model.id, -1, CheckMsg, 0, "系统"); } #region 发送通知 try { var comcode = _company.GetInfoByChannel(model.channel.Value); _msg.PushNewsMsg("DJTZ", $"订金【{model.id}】已经【提交】,请您审核!", comcode == null ? "事业部" : comcode.CompanyName, model.id.ToString(), comcode == null ? model.companycode : comcode.CompanyCode); } catch (Exception e) { LogHelper.Error("发送通知出错:" + e.ToString()); } #endregion 发送通知 msg = JsonHelper.ObjDivertToJson(new retMsg { result = true, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = model.id.ToString() }); return Utility.GetStream(msg); } catch (Exception ex) { LogHelper.Error(ex.ToString()); msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = null }); return Utility.GetStream(msg); } } public Stream OrderDepositUse(string content, string clientid, string sign) { var msg = string.Empty; try { string url = Utility.GetClassAndMethodName(1); logHelper.AddCallLog(content, clientid, sign, url); if (clientKey == "nj_crm") { clientid = SecurityHelper.OrderClientIdKey; } //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } content = sHelper.decyptData(clientid, content); //解密操作 var dto = Utility.JSONToObject(content); if (!string.IsNullOrWhiteSpace(dto.deposit)) { var arr = dto.deposit.Split(','); foreach (var item in arr) { var id = int.Parse(item); var info = _orderDeposit.Get(p => p.id == id); if (info != null) { info.isuse = 1; info.orderid = dto.orderid; _orderDeposit.Update(info); } var orderPay = _orderPay.Get(p => p.orderid == id); if (orderPay != null) { orderPay.orderid = dto.orderid; _orderPay.Update(orderPay); } var order = wx_SzzyOrder_BL.Get(p => p.ORDERID == dto.orderid); if (order != null) { var arrivalPayList = _orderPay.GetList(p => p.orderid == dto.orderid && p.auditstatus == 1); var payDate = arrivalPayList.OrderByDescending(p => p.paydate).First().paydate; order.ARRIVALPAY = arrivalPayList.Sum(p => p.payprice); order.ARRIVALTIME = payDate; order.FINALPAY = order.ARRIVALPAY; if (order.ARRIVALPAY >= order.NEEDPAY) { order.ORDERSTATUS = "200"; order.ORDERSTATUSNAME = "已支付"; } else { order.ORDERSTATUS = "190"; order.ORDERSTATUSNAME = "已提交支付"; } wx_SzzyOrder_BL.Update(order); } } } msg = JsonHelper.ObjDivertToJson(new retMsg { result = true, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = null }); return Utility.GetStream(msg); } catch (Exception ex) { LogHelper.Error(ex.ToString()); msg = JsonHelper.ObjDivertToJson(new retMsg { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = null }); return Utility.GetStream(msg); } } public JsonResult SetOrderEid(int orderid, int channel, string deptcode) { try { var ret = _orderService.SetChannelByEid(orderid, channel, deptcode); if (ret.result) { return new JsonResult() { result = true, retcode = 200, retmsg = "success" }; } return new JsonResult() { result = false, retcode = 500, retmsg = "error" }; } catch (Exception ex) { LogHelper.Error(ex); return new JsonResult() { result = false, retcode = 500, retmsg = "error" }; } } public JsonResult> GetOrder(int page, int limit, decimal orderId, decimal orderType, DateTime stime, DateTime etime, string orderStatus, string resId, string companyCode, decimal szzyOrderId, int productId, int subProductId, string channel, int aiCallType, DateTime aistime, DateTime aietime) { try { //LogHelper.Info("page:" + page + ",limit:" + limit + ",orderid=" + orderId + ",orderType=" + orderType + ",stime=" + stime + ",etime=" + etime + ",orderStatus=" + orderStatus + ",resId=" + resId + ",companyCode=" + companyCode + ",szzyOrderId=" + szzyOrderId + ",productId=" + productId + ",subProductId=" + subProductId); var pager = new Laypage() { page = page, limit = limit }; var list = wx_SzzyOrder_BL.GetList(ref pager, orderId, orderType, stime, etime, orderStatus, resId, companyCode, szzyOrderId, productId, subProductId, channel, aiCallType, aistime, aietime); var data = new List(); var mobiles = _mobile.GetNumberByResId(list.Select(p => p.RESID).ToArray()); var subProductList = product_bl.GetSubProductListByProductId(0, 0, null); foreach (var item in list) { var mobile = mobiles.FirstOrDefault(p => p.Key == item.RESID).Value; var product = subProductList.FirstOrDefault(p => p.SUBPRODUCTID == item.SUBPRODUCTID); if (item.ORDERID != 0 && mobile != null && product != null) { var info = new OrderDto(item.RESID, item.CNAME, item.INNERUSERID, null, item.SUBPRODUCTID, item.SUBPRODUCTNAME, item.NEEDPAY, item.FINALPAY , item.ARRIVALPAY, item.ARRIVALTIME.ToString(), item.ORDERID, item.ORDERTYPE, item.ORDERSTATUSNAME, item.CTIME.ToString(), item.OTIME.ToString(), item.SOURCE, item.SOFTUSERNAME , item.OPENDAYS.Value, item.CONTRACTCODE, item.RISKCTRLSTATUS, item.hashgrecord, item.SZZYORDERID.ToString(), item.companycode, mobile, item.rejectremark , item.CHANNEL.Value, GetCompanyName(item.CHANNEL.Value), product.PRICE.Value, product.PRODUCTLEVEL, product.PRODUCTINVESTTIME, product.PRODUCTINVESTTYPE , item.CpConfirmOrderId, item.ret, item.giftdays, item.ai_hgrecord_time, item.ai_hgrecord_status, item.ai_hgrecord_statusname, item.hasaiaudio.Value, item.hasBtn); data.Add(info); } }; return new JsonResult> { result = true, retcode = pager.count, retmsg = data }; } catch (Exception ex) { LogHelper.Error(ex.ToString()); return new JsonResult> { result = false, retcode = 0, retmsg = null }; } } public JsonResult> GetOrderByIdList(string orderIdList, string resId) { List res = new List(); if (!string.IsNullOrWhiteSpace(orderIdList)) { res = wx_SzzyOrder_BL.GetAiStatusByOrderIds(orderIdList.Split(',').Select(n => Convert.ToDecimal(n)).ToList(), new List()); } if (!string.IsNullOrWhiteSpace(resId)) { var resList = resId.Split(',').Select(n => n).ToList(); res = wx_SzzyOrder_BL.GetAiStatusByOrderIds(new List(), resList); } return new JsonResult> { result = true, retcode = res.Count, retmsg = res }; } public JsonResult> GetAiConfig() { var res = cache_BL.GetAICallTaskConfigList(); return new JsonResult> { result = true, retcode = res.Count, retmsg = res }; } /// /// 获取ai音频 /// /// /// /// /// public JsonResult> GetAiAudioRecord(int page, int limit, string resId) { var res = wx_SzzyOrder_BL.GetAiAudioRecordByResId(page, limit, resId); return new JsonResult> { result = true, retcode = res.Count, retmsg = res }; } public JsonResult> GetStockFlash(int page, int limit, string gpcode) { try { var pager = new Laypage() { page = page, limit = limit }; var stock = new StockPoolService().GetStockPoolList(ref pager, gpcode); return new JsonResult> { result = true, retcode = pager.count, retmsg = stock }; } catch (Exception ex) { LogHelper.Error(ex.ToString()); return new JsonResult> { result = false, retcode = 0, retmsg = null }; } } /// /// 手工赠送订单(必须绑定主订单) /// /// /// /// /// public Stream OrderHandleGift(string content, string clientid, string sign) { var msg = string.Empty; try { Wx_SzzyOrder_HandGift_BL bll = new Wx_SzzyOrder_HandGift_BL(); string url = Utility.GetClassAndMethodName(1); logHelper.AddCallLog(content, clientid, sign, url); if (clientKey == "nj_crm") { clientid = SecurityHelper.OrderClientIdKey; } //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { msg = JsonHelper.ObjDivertToJson(new retMsgNew { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = null, data = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } content = sHelper.decyptData(clientid, content); //解密操作 var dto = Utility.JSONToObject(content); ValidationErrors erro = new ValidationErrors(); OrderHandGiftDto newdto = bll.AddGift(dto, ref erro); if (erro.Count > 0) { msg = JsonHelper.ObjDivertToJson(new retMsgNew { result = false, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = erro.Error, data = newdto }); } else { msg = JsonHelper.ObjDivertToJson(new retMsgNew { result = true, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = "succed", data = newdto }); } return Utility.GetStream(msg); } catch (Exception ex) { LogHelper.Error(ex.ToString()); msg = JsonHelper.ObjDivertToJson(new retMsgNew { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = null, data = null }); return Utility.GetStream(msg); } } /// /// 根据订单id获取手工赠送订单商品 /// /// /// /// /// public Stream GetSuProductIdByOrderId(string content, string clientid, string sign) { var msg = string.Empty; try { Wx_SzzyOrder_HandGift_BL bll = new Wx_SzzyOrder_HandGift_BL(); string url = Utility.GetClassAndMethodName(1); logHelper.AddCallLog(content, clientid, sign, url); if (clientKey == "nj_crm") { clientid = SecurityHelper.OrderClientIdKey; } //验证是否非法请求 if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证 { msg = JsonHelper.ObjDivertToJson(new retMsgNew { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = null, data = null }); msg = sHelper.encyptData(clientid, msg); return Utility.GetStream(msg); } content = sHelper.decyptData(clientid, content); //解密操作 var dto = Utility.JSONToObject(content); ValidationErrors erro = new ValidationErrors(); var newdto = bll.GetSuProductIdByOrderId(dto, ref erro); if (erro.Count > 0) { msg = JsonHelper.ObjDivertToJson(new retMsgNew { result = false, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = erro.Error, data = newdto }); } else { msg = JsonHelper.ObjDivertToJson(new retMsgNew { result = true, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = "succed", data = newdto }); } return Utility.GetStream(msg); } catch (Exception ex) { LogHelper.Error(ex.ToString()); msg = JsonHelper.ObjDivertToJson(new retMsgNew { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = null, data = null }); return Utility.GetStream(msg); } } public string ClearCache() { var list = new List() { "cache_Parameter_getList", "cache_Company_getList", "cache_Company_Code", "cache_comapny_virtual", "cache_comapny_wework", "cache_LeftMemu_getList", "cache_wx_szzyproduct", "cache_wx_szzysubproduct", "cache_smsSubTypeList", "cache_smsClientList" }; foreach (var item in list) { CacheHelper.Remove(item); } return "ok"; } private string GetCompanyName(int channel) { var name = "未知"; var companyList = cache_BL.GetList_innerCompany().Where(p => p.ISOUTERAGENT == 0); var company = companyList.FirstOrDefault(p => p.MINCHANNELCODE <= channel && p.MAXCHANNELCODE >= channel); if (company != null) { name = company.COMPANYNAME; } return name; } public class RiskInfoDto { public int ret { get; set; } public string answer { get; set; } public Int64 createTime { get; set; } public string idCard { get; set; } public string name { get; set; } public string key { get; set; } public string style { get; set; } public int index { get; set; } } } }