public string Getordercreate(Lvmama_reqlog mlog, Agent_company agentinfo) { lock (lockobj) { var response = new apply_codeRefund(); try { var data = JsonConvert.DeserializeObject <apply_codemodel>(_requestParam); if (data.contacts == null) { response.uid = agentinfo.Lvmama_uid; response.status = "2"; response.msg = "数据解析失败"; return(EditLvmamalog_Order(response, mlog)); } else { contacts body = data.contacts; string num = data.num; string timestamp = data.timestamp; string visitTime = data.visitTime; string supplierGoodsId = data.supplierGoodsId; string settlePrice = data.settlePrice; string serialNo = data.serialNo; string idNum = body.idNum; string name = body.name; string mobile = body.mobile; string idType = body.idType; //结算价核对 decimal jiesuanjia = 0; ////todo 根据请求参数查询产品返回结果 B2b_com_pro pro = new B2bComProData().GetProById(supplierGoodsId); #region 产品信息 if (pro != null) { #region 分销授权信息判断 Agent_company agentwarrantinfo = AgentCompanyData.GetAgentWarrant(agentinfo.Id, pro.Com_id); if (agentwarrantinfo != null) { int warrantid = agentwarrantinfo.Warrantid; int Warrant_type = agentwarrantinfo.Warrant_type; //支付类型分销 1出票扣款 2验码扣款 int Warrant_level = agentwarrantinfo.Warrant_level; if (Warrant_level == 1) { jiesuanjia = pro.Agent1_price; } if (Warrant_level == 2) { jiesuanjia = pro.Agent2_price; } if (Warrant_level == 3) { jiesuanjia = pro.Agent3_price; } if (agentwarrantinfo.Warrant_state == 0) { response.uid = agentinfo.Lvmama_uid; response.orderId = "0"; response.status = "3"; response.msg = "商户关闭授权"; return(EditLvmamalog_Order(response, mlog)); } } else { response.uid = agentinfo.Lvmama_uid; response.orderId = "0"; response.status = "3"; response.msg = "商户未授权开通分销"; return(EditLvmamalog_Order(response, mlog)); } #endregion #region 暂时对外接口只支持票务产品 //if (pro.Server_type != 1) //{ // response.status = 300; // response.msg = "暂时对外接口只支持票务产品,其他产品请到分销后台提单"; // return EditLvmamalog_Order(response, mlog); //} #endregion #region 结算价,保证价格是最新价格 decimal advice_price = Convert.ToDecimal(settlePrice); if (jiesuanjia != advice_price) { response.uid = agentinfo.Lvmama_uid; response.orderId = "0"; response.status = "3"; response.msg = "结算价格不同,请联系供应商要去新的价格。驴妈妈价:" + advice_price + " 系统价:" + jiesuanjia; return(EditLvmamalog_Order(response, mlog)); } #endregion #region 产品编码格式有误 if (supplierGoodsId.ConvertTo <int>(0) == 0) { response.uid = agentinfo.Lvmama_uid; response.orderId = "0"; response.status = "3"; response.msg = "产品编码格式有误"; return(EditLvmamalog_Order(response, mlog)); } #endregion #region 购买数量格式有误 if (num.ConvertTo <int>(0) == 0) { response.uid = agentinfo.Lvmama_uid; response.orderId = "0"; response.status = "3"; response.msg = "购买数量格式有误"; return(EditLvmamalog_Order(response, mlog)); } #endregion #region 产品限购则需要判断 限购数量 是否足够 if (pro.Ispanicbuy != 0) { //最多可购买数量 int zuiduo_canbuynum = pro.Limitbuytotalnum; if (int.Parse(num) > zuiduo_canbuynum) { response.uid = agentinfo.Lvmama_uid; response.orderId = "0"; response.status = "3"; response.msg = "产品库存不足"; return(EditLvmamalog_Order(response, mlog)); } } #endregion #region 产品已暂停 if (pro.Pro_state == 0) { response.uid = agentinfo.Lvmama_uid; response.orderId = "0"; response.status = "3"; response.msg = "产品已下线,请联系商家"; return(EditLvmamalog_Order(response, mlog)); } #endregion #region 产品已过期 if (pro.Pro_end < DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"))) { response.uid = agentinfo.Lvmama_uid; response.orderId = "0"; response.status = "3"; response.msg = "产品已过期"; return(EditLvmamalog_Order(response, mlog)); } #endregion #region 产品是否需要预约:需要预约则最晚预约时间是 游玩前一天的18点 //if (pro.isneedbespeak == 1) //{ // if (timestamp != "") // { // DateTime visitdate = DateTime.Parse(timestamp); // DateTime bookdate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")); // //必须提前一天预约 // if (bookdate >= visitdate) // { // response.orderId = "0"; //response.status = "300"; //response.msg = "产品未预约产品"; // return EditLvmamalog_Order(response, mlog); // } // } //} #endregion #region 是否有使用限制 //if (pro.Iscanuseonsameday == 0)//1:当天出票可用 ;2:2小时内出票不可用;0:当天出票不可用 //{ // if (body.travelDate != "") // { // DateTime visitdate = DateTime.Parse(body.travelDate);//游玩日期:2012-12-12 格式要求:yyyy-MM-dd // DateTime bookdate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")); // if (bookdate >= visitdate) // { // response.code = 300; // response.describe = "预定日期至少在游玩日期之前一天"; // return EditMTlog_Order(response, mlog); // } // } //} #endregion Lvmama_reqlog mtOrderCrateSucLog = new lvmama_reqlogData().GetLvmamaOrderCreateLogByLvmamaorder(serialNo, "0"); #region 查询驴妈妈吗 是否 创建订单日志 if (mtOrderCrateSucLog != null) { string pno = ""; if (pro.Source_type == 3) //如果是接口产品,按接口方式读码selservice,接口产品只读取了wl的码 { if (pro.Serviceid == 4) { //如果是接口产品 B2b_company commanage = B2bCompanyData.GetAllComMsg(pro.Com_id); WlGetProInfoDealRequestData wldata = new WlGetProInfoDealRequestData(commanage.B2bcompanyinfo.wl_PartnerId, commanage.B2bcompanyinfo.wl_userkey); var wlorderinfo = wldata.SearchWlOrderData(pro.Com_id, 0, "", int.Parse(mtOrderCrateSucLog.ordernum)); if (wlorderinfo != null) { pno = wlorderinfo.vouchers; } } } else { //如果不是借口,则按自己规则读码 SendEticketData sendate = new SendEticketData(); pno = sendate.HuoQuEticketPno(int.Parse(mtOrderCrateSucLog.ordernum)); } response.uid = agentinfo.Lvmama_uid; response.orderId = mtOrderCrateSucLog.ordernum; response.status = "0"; response.authCode = pno; response.serialNo = serialNo; response.msg = "订单创建成功"; mlog.ordernum = mtOrderCrateSucLog.ordernum; return(EditLvmamalog_Order(response, mlog)); } #endregion #region 此驴妈妈订单号 ,没有成功创建过 else { int isInterfaceSub = 1; //是否是电子票接口提交的订单:0.否;1.是 string ordertype = "1"; //1.出票2.充值 int orderid = 0; int speciid = 0; //string real_name = ""; //string mobile = ""; string use_date = timestamp.Substring(0, 4) + "-" + timestamp.Substring(4, 2) + "-" + timestamp.Substring(6, 2); //real_name = name; //mobile = mobile; //创建一笔未支付订单 string rdata = OrderJsonData.AgentOrder(agentinfo.Id, supplierGoodsId, ordertype, num, name, mobile, use_date, "", isInterfaceSub, out orderid); XmlDocument retdoc = (XmlDocument)JsonConvert.DeserializeXmlNode("{\"root\":" + rdata + "}"); XmlElement retroot = retdoc.DocumentElement; string rtype = retroot.SelectSingleNode("type").InnerText; string rmsg = retroot.SelectSingleNode("msg").InnerText; if (rtype == "100") //创建订单成功 { response.uid = agentinfo.Lvmama_uid; response.status = "0"; response.msg = "订单创建成功"; response.orderId = orderid.ToString(); response.serialNo = serialNo; response.authCode = retroot.SelectSingleNode("pno").InnerText; //只有成功的订单才有pno项; mlog.ordernum = orderid.ToString(); return(EditLvmamalog_Order(response, mlog)); } else { response.uid = agentinfo.Lvmama_uid; response.status = "3"; response.msg = "创建订单失败" + rmsg; return(EditLvmamalog_Order(response, mlog)); } } #endregion } else { response.uid = agentinfo.Lvmama_uid; response.uid = "0"; response.status = "4"; response.msg = "产品不存在"; return(EditLvmamalog_Order(response, mlog)); } #endregion } } catch (Exception ex) { response.uid = agentinfo.Lvmama_uid; response.status = "8"; response.msg = "异常错误" + ex; return(EditLvmamalog_Order(response, mlog)); } } }
delegate void AsyncsendEventHandler(string updateurl, string pno, int confirmnum, string confirmtime, int agentcomid, int comid, int validateticketlogid, int aorderid);//发送验证同步发送请求委托 public void ProcessRequest(HttpContext context) { //B2b_company commanage = B2bCompanyData.GetAllComMsg(112); WlGetProInfoDealRequestData wldata = new WlGetProInfoDealRequestData("1", "key");//核销数据时不需要读取商户 int comid = 0; context.Response.ContentType = "application/x-www-form-urlencoded"; Stream stream = context.Request.InputStream; if (stream.Length != 0) { try { StreamReader streamreader = new StreamReader(stream); string json = streamreader.ReadToEnd(); //var OnlineMsg = StreamToString(stream); // context.Response.Write(OnlineMsg); // context.Response.End(); var json_hexiao = (wlhexiao)JsonConvert.DeserializeObject(json, typeof(wlhexiao)); int partnerId = json_hexiao.partnerId; string wlOrderId = json_hexiao.body.wlOrderId; int usedQuantity = json_hexiao.body.usedQuantity; int quantity = json_hexiao.body.quantity; int refundedQuantity = json_hexiao.body.refundedQuantity; int lastCount = 0; string credence = ""; var orderdata = wldata.getWlOrderidData(wlOrderId); if (orderdata != null) { comid = orderdata.comid; credence = orderdata.vouchers; int orderid = orderdata.orderid; //orderid int partnerdealid = orderdata.partnerdealid; //产品id int shengyuq = orderdata.quantity - orderdata.usedQuantity; lastCount = shengyuq - usedQuantity; //剩余数量看是否大于0 //插入万龙核销日志插入 var wluselog = wldata.InsertWlUseLog(comid, wlOrderId, usedQuantity, partnerId, quantity, orderid, partnerdealid); if (shengyuq >= usedQuantity) { orderdata.usedQuantity = orderdata.usedQuantity + usedQuantity;//库里的剩余数量加上传递过来使用数量 var hexiao = wldata.UpdateWlOrderPaySC(orderdata); var wlhexiaore = wldata.wlhexiaotongzhi_json(200, "成功");// context.Response.Write(wlhexiaore); #region 验证后订单及通知发放 //易城系统订单 处理 B2b_order morder = new B2bOrderData().GetOrderById(orderid); if (morder != null) { if (lastCount > 0) { morder.service_usecount = usedQuantity; morder.service_lastcount = lastCount; morder.Servicepro_v_state = ((int)Product_V_State.PartValidate).ToString(); //验证部分 morder.Order_state = (int)OrderStatus.HasUsed; //已消费 new B2bOrderData().InsertOrUpdate(morder); } else { //如果剩余数量为0就,使都使用了,剩余数量为0 morder.service_usecount = usedQuantity; morder.service_lastcount = 0; morder.Servicepro_v_state = ((int)Product_V_State.AllValidate).ToString(); //验证全部 morder.Order_state = (int)OrderStatus.HasUsed; //已消费 new B2bOrderData().InsertOrUpdate(morder); } //根据b单判断是否有a单存在 B2b_order aorder = new B2bOrderData().GetOldorderBybindingId(morder.Id); if (aorder != null) { aorder.Order_state = morder.Order_state; new B2bOrderData().InsertOrUpdate(aorder); } //如果是分销订单,则需要给分销发送验证通知 //判断b订单 是否 属于某个a订单 if (aorder != null) { //得到a订单的分销信息 if (aorder.Agentid > 0) { Agent_company acompany = new AgentCompanyData().GetAgentCompany(aorder.Agentid); if (acompany != null) { //异步发送验证同步请求 AsyncsendEventHandler mydelegate = new AsyncsendEventHandler(AsyncSend); mydelegate.BeginInvoke(acompany.Agent_updateurl.Trim(), credence, usedQuantity, DateTime.Now.ToString(), aorder.Agentid, aorder.Comid, 0, aorder.Id, new AsyncCallback(Completed), null); } } } else { if (morder.Agentid > 0) { Agent_company acompany = new AgentCompanyData().GetAgentCompany(morder.Agentid); if (acompany != null) { //异步发送验证同步请求 AsyncsendEventHandler mydelegate = new AsyncsendEventHandler(AsyncSend); mydelegate.BeginInvoke(acompany.Agent_updateurl.Trim(), credence, usedQuantity, DateTime.Now.ToString(), morder.Agentid, morder.Comid, 0, morder.Id, new AsyncCallback(Completed), null); } } } } #endregion } else { var wlhexiaore = wldata.wlhexiaotongzhi_json(1, "剩余数量不符");// context.Response.Write(wlhexiaore); } } else { //context.Response.Write("{code:200,describe:\"成功\"}"); var wlhexiaore = wldata.wlhexiaotongzhi_json(1, "未查询到订单");// context.Response.Write(wlhexiaore); } } catch (Exception ex) { var wlhexiaore = wldata.wlhexiaotongzhi_json(1, "异常" + ex.Message);// context.Response.Write(wlhexiaore); } } else { var wlhexiaore = wldata.wlhexiaotongzhi_json(2, "未接收到数据");// context.Response.Write(wlhexiaore); } }
/// 产品查询 public string Getorderquery(Meituan_reqlog mlog) { var response = new OrderQueryResponse(); response.partnerId = int.Parse(agentinfo.mt_partnerId); try { var data = JsonConvert.DeserializeObject <OrderQueryRequest>(_requestParam); if (data.body == null) { response.code = 399; response.describe = "Body数据解析失败"; return(EditMTlog_Err(response, mlog)); } else { OrderQueryRequestBody body = data.body; string mtorderid = body.orderId.ToString(); //如果合作商订单Id不存在,则查询美团订单创建日志 if (body.partnerOrderId == "") { Meituan_reqlog mtOrderCrateSucLog = new Meituan_reqlogData().GetMtOrderCrateLogByMtorder(body.orderId.ToString(), "200"); body.partnerOrderId = mtOrderCrateSucLog.ordernum; } string ordernum = body.partnerOrderId; mlog.mtorderid = mtorderid; mlog.ordernum = ordernum; int organization = agentinfo.Id; //判断分销商查询订单是否是 自己发送的接口订单 Agent_requestlog mrequestlogg = new Agent_requestlogData().GetAgent_addorderlogByReq_seq(organization.ToString(), mtorderid); if (mrequestlogg == null) { response.code = 301; response.describe = "当前查询的订单不存在"; return(EditMTlog_Err(response, mlog)); } if (mrequestlogg.Is_dealsuc == 0) { response.code = 301; response.describe = "当前查询的订单不存在"; return(EditMTlog_Err(response, mlog)); } if (mtorderid.Trim() == "") { response.code = 301; response.describe = "美团订单号 不可为空"; return(EditMTlog_Err(response, mlog)); } B2b_order morder = new B2bOrderData().GetOrderByAgentRequestReqSeq(mtorderid); if (morder != null) { if (morder.Pro_id > 0) { B2b_com_pro pro = new B2bComProData().GetProById(morder.Pro_id.ToString()); if (pro == null) { response.code = 399; response.describe = "产品不存在"; return(EditMTlog_Err(response, mlog)); } else { #region 主要用途 判断是否是商家自己产品,如果为外来接口产品,暂时不售卖 //判断产品码来源 (4分销倒过来的产品 1系统自动生成产品 2倒码产品 判断分销是否是 自己发码;3外来接口产品暂时不售卖) int prosourtype = pro.Source_type; //if (prosourtype == 3)//外来接口产品,暂时只有阳光接口产品(需要手机号) //{ // //暂时只售卖商家自己产品,主要是产品有效期 需要另外通过外部接口获取,过于麻烦 // response.code = 301; // response.describe = "暂时只可查询商家自己产品"; // return EditMTlog_Err(response, mlog); //} if (prosourtype == 4) //分销导入产品; { int old_proid = new B2bComProData().GetOldproidById(morder.Pro_id.ToString()); //绑定产品的原始编号 if (old_proid == 0) { response.code = 399; response.describe = "分销导入产品的原始产品编号没有查到"; return(EditMTlog_Err(response, mlog)); } else { prosourtype = new B2bComProData().GetProSource_typeById(old_proid.ToString()); //if (prosourtype == 3) //{ // //暂时只售卖商家自己产品,主要是产品有效期 需要另外通过外部接口获取,过于麻烦 // response.code = 300; // response.describe = "暂时只可查询商家自己产品"; // return EditMTlog_Err(response, mlog); //} } } #endregion #region 产品有效期 //经过以上赋值prosourtype,只可能2个值:1系统自动生成码产品;2倒码产品 DateTime pro_start = pro.Pro_start; DateTime pro_end = pro.Pro_end; if (prosourtype == 2) //倒码产品 { } if (prosourtype == 1) //系统自动生成码产品 { #region 产品有效期判定(微信模板--门票订单预订成功通知 中也有用到) string provalidatemethod = pro.ProValidateMethod; int appointdate = pro.Appointdata; int iscanuseonsameday = pro.Iscanuseonsameday; //DateTime pro_end = modelcompro.Pro_end; if (provalidatemethod == "2")//按指定有效期 { if (appointdate == (int)ProAppointdata.NotAppoint) { } else if (appointdate == (int)ProAppointdata.OneWeek) { pro_end = DateTime.Now.AddDays(7); } else if (appointdate == (int)ProAppointdata.OneMonth) { pro_end = DateTime.Now.AddMonths(1); } else if (appointdate == (int)ProAppointdata.ThreeMonth) { pro_end = DateTime.Now.AddMonths(3); } else if (appointdate == (int)ProAppointdata.SixMonth) { pro_end = DateTime.Now.AddMonths(6); } else if (appointdate == (int)ProAppointdata.OneYear) { pro_end = DateTime.Now.AddYears(1); } //如果指定有效期大于产品有效期,则按产品有效期 if (pro_end > pro.Pro_end) { pro_end = pro.Pro_end; } } else //按产品有效期 { pro_end = pro.Pro_end; } //DateTime pro_start = modelcompro.Pro_start; DateTime nowday = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")); if (iscanuseonsameday == 1) //当天可用 { if (nowday < pro_start) //当天日期小于产品起始日期 { pro_start = pro.Pro_start; } else { pro_start = nowday; } } else //当天不可用 { if (nowday < pro_start)//当天日期小于产品起始日期 { pro_start = pro.Pro_start; } else { pro_start = nowday.AddDays(1); } } #endregion } #endregion #region 购买数量 可使用数量 使用数量 退票数量 出票时间 电子票号(列表) string all_pno = ""; //全部电子码 string keyong_pno = ""; //可用电子码 string add_time = morder.U_subdate.ToString("yyyy-MM-dd HH:mm:ss"); int buy_num = 0; int keyong_num = 0; int consume_num = 0; int tuipiao_num = morder.Cancelnum; if (prosourtype == 1)//系统自动生成码产品 { int noworderid = morder.Id; //判断是否含有绑定订单 if (morder.Bindingagentorderid > 0) { noworderid = morder.Bindingagentorderid; } //根据订单号得到电子票信息 List <B2b_eticket> meticketlist = new B2bEticketData().GetEticketListByOrderid(noworderid); if (meticketlist == null) { response.code = 302; response.describe = "根据订单号查询电子票信息失败"; return(EditMTlog_Err(response, mlog)); } else { if (meticketlist.Count == 0) { response.code = 302; response.describe = "根据订单号查询电子票信息失败"; return(EditMTlog_Err(response, mlog)); } else { foreach (B2b_eticket meticket in meticketlist) { if (meticket != null) { buy_num += meticket.Pnum; keyong_num += meticket.Use_pnum; consume_num += meticket.Pnum - meticket.Use_pnum; all_pno += meticket.Pno + ","; if (meticket.Use_pnum > 0) { keyong_pno += meticket.Pno + ","; } } } if (all_pno.Length > 0) { all_pno = all_pno.Substring(0, all_pno.Length - 1); } if (keyong_pno.Length > 0) { keyong_pno = keyong_pno.Substring(0, keyong_pno.Length - 1); } } } } else if (prosourtype == 3) { if (pro.Serviceid == 4) { //如果是接口产品 B2b_company commanage = B2bCompanyData.GetAllComMsg(pro.Com_id); WlGetProInfoDealRequestData wldata = new WlGetProInfoDealRequestData(commanage.B2bcompanyinfo.wl_PartnerId, commanage.B2bcompanyinfo.wl_userkey); var wlorderinfo = wldata.SearchWlOrderData(pro.Com_id, 0, "", morder.Id); if (wlorderinfo != null) { all_pno = wlorderinfo.vouchers; buy_num = wlorderinfo.quantity; keyong_num = wlorderinfo.quantity - wlorderinfo.usedQuantity; consume_num = wlorderinfo.usedQuantity;; } } } else //倒码产品 { } #endregion #region 实名制类型 真是姓名 状态 string real_name_type = pro.Realnametype.ToString(); string real_name = morder.U_name; string statusdesc = EnumUtils.GetName((OrderStatus)morder.Order_state); #endregion #region 手机号 根据订单号得到 分销商发送接口请求记录 string mobile = ""; Agent_requestlog mrequestlog = new Agent_requestlogData().GetAgent_addorderlogByOrderId(morder.Id.ToString(), 1); if (mrequestlog == null) { response.code = 399; response.describe = "根据订单号获得分销商接口发送请求记录失败"; return(EditMTlog_Err(response, mlog)); } #endregion int orderstate = morder.Order_state; // int mt_orderstatus = (int)Meituan_orderStatus.CreateFail; if (orderstate == (int)OrderStatus.HasSendCode) { mt_orderstatus = (int)Meituan_orderStatus.CreateSuc; } else if (orderstate == (int)OrderStatus.HasUsed) { mt_orderstatus = (int)Meituan_orderStatus.PaySuc; } else { if (orderstate == (int)PayStatus.HasPay) { mt_orderstatus = (int)Meituan_orderStatus.PaySuc; } if (orderstate == (int)PayStatus.NotPay) { mt_orderstatus = (int)Meituan_orderStatus.PayFailed; } if (orderstate == (int)PayStatus.WaitPay) { mt_orderstatus = (int)Meituan_orderStatus.Paying; } } response.code = 200; response.describe = "success"; /************现在只有一单一码的情况************ * required 凭证状态 见映射表<凭证码状态> * 0 未使用 * 1 已使用 * 2 已退款 * 3 已废弃 对应的门票还未消费,但是此凭证码作废了 * ************************/ List <Voucher> voucherlist = new List <Voucher>(); //电子票未使用 if (keyong_num == buy_num) { Voucher vou = new Voucher { voucher = all_pno, voucherPics = "", voucherInvalidTime = morder.U_subdate.ToString("yyyy-MM-dd HH:mm:ss"), quantity = keyong_num, status = 0 }; voucherlist.Add(vou); } else { //电子票已使用 if (tuipiao_num == 0) { string yanzhengtime = morder.U_subdate.ToString("yyyy-MM-dd HH:mm:ss"); //得到电子票最近的一条验证成功日志 B2b_eticket_log lastyanzhengsuclog = new B2bEticketLogData().GetlastyanzhengsuclogByPno(all_pno); if (lastyanzhengsuclog != null) { yanzhengtime = lastyanzhengsuclog.Actiondate.ToString("yyyy-MM-dd HH:mm:ss"); } Voucher vou = new Voucher { voucher = all_pno, voucherPics = "", voucherInvalidTime = morder.U_subdate.ToString("yyyy-MM-dd HH:mm:ss"), quantity = consume_num, status = 1 }; voucherlist.Add(vou); } else { //电子票退票 if (tuipiao_num != buy_num) { Voucher vou = new Voucher { voucher = all_pno, voucherPics = "", voucherInvalidTime = morder.Backtickettime.ToString("yyyy-MM-dd HH:mm:ss"), quantity = keyong_num, status = 2 }; voucherlist.Add(vou); } //电子票废弃 else { Voucher vou = new Voucher { voucher = all_pno, voucherPics = "", voucherInvalidTime = morder.Backtickettime.ToString("yyyy-MM-dd HH:mm:ss"), quantity = keyong_num, status = 3 }; voucherlist.Add(vou); } } } response.body = new OrderQueryResponseBody { orderId = body.orderId, partnerOrderId = body.partnerOrderId, orderStatus = mt_orderstatus, orderQuantity = morder.U_num, usedQuantity = (consume_num - morder.Cancelnum), refundedQuantity = morder.Cancelnum, voucherType = 2, voucherList = voucherlist }; return(EditMTlog_Err(response, mlog)); } } else { response.code = 301; response.describe = "订单中产品不存在"; return(EditMTlog_Err(response, mlog)); } } else { response.code = 301; response.describe = "订单不存在"; return(EditMTlog_Err(response, mlog)); } } } catch (Exception ex) { response.code = 399; response.describe = "异常错误"; return(EditMTlog_Err(response, mlog)); } }
/// 产品订单创建 public string Getordercreate(Meituan_reqlog mlog) { lock (lockobj) { var response = new OrderCreateResponse(); response.partnerId = int.Parse(agentinfo.mt_partnerId); try { var data = JsonConvert.DeserializeObject <OrderCreateRequest>(_requestParam); if (data.body == null) { response.code = 499; response.describe = "Body数据解析失败"; return(EditMTlog_Order(response, mlog)); } else { OrderCreateRequestBody body = data.body; string product_num = body.partnerDealId; string num = body.quantity.ToString(); mlog.mtorderid = body.orderId.ToString(); //todo 根据请求参数查询产品返回结果 B2b_com_pro pro = new B2bComProData().GetProById(product_num); #region 产品信息 if (pro != null) { #region 分销授权信息判断 Agent_company agentwarrantinfo = AgentCompanyData.GetAgentWarrant(agentinfo.Id, pro.Com_id); if (agentwarrantinfo != null) { int warrantid = agentwarrantinfo.Warrantid; int Warrant_type = agentwarrantinfo.Warrant_type;//支付类型分销 1出票扣款 2验码扣款 int Warrant_level = agentwarrantinfo.Warrant_level; if (agentwarrantinfo.Warrant_state == 0) { response.code = 499; response.describe = "商户尚未授权此分销"; return(EditMTlog_Order(response, mlog)); } } else { response.code = 499; response.describe = "分销还没有得到商户授权"; return(EditMTlog_Order(response, mlog)); } #endregion #region 暂时对外接口只支持票务产品 if (pro.Server_type != 1) { response.code = 499; response.describe = "暂时对外接口只支持票务产品,其他产品请到分销后台提单"; return(EditMTlog_Order(response, mlog)); } #endregion #region 价格(建议价)效验,保证美团抓到的是最新价格 string advice_price = body.unitPrice.ToString("f0"); if (pro.Advise_price.ToString("f0") != advice_price) { response.code = 410; response.describe = "价格(建议价)效验失败,请重新拉取价格库存日历"; return(EditMTlog_Order(response, mlog)); } #endregion #region 价格(分销价)效验,保证美团抓到的是最新的结算价 if (agentwarrantinfo.Warrant_level == 1) { if (body.buyPrice.ToString("f0") != pro.Agent1_price.ToString("f0")) { response.code = 410; response.describe = "价格(分销价)效验失败,请重新拉取价格库存日历"; return(EditMTlog_Order(response, mlog)); } } if (agentwarrantinfo.Warrant_level == 2) { if (body.buyPrice.ToString("f0") != pro.Agent2_price.ToString("f0")) { response.code = 410; response.describe = "价格(分销价)效验失败,请重新拉取价格库存日历"; return(EditMTlog_Order(response, mlog)); } } if (agentwarrantinfo.Warrant_level == 3) { if (body.buyPrice.ToString("f0") != pro.Agent3_price.ToString("f0")) { response.code = 410; response.describe = "价格(分销价)效验失败,请重新拉取价格库存日历"; return(EditMTlog_Order(response, mlog)); } } #endregion #region 多规格产品编码格式验证 int speciid = 0; //判断产品编号是否符合多规格产品特点:例如 2503-1 if (product_num.IndexOf("-") > -1) { speciid = product_num.Substring(product_num.IndexOf("-") + 1).ConvertTo <int>(0); if (speciid == 0) { response.code = 410; response.describe = "多规格产品编码格式有误"; return(EditMTlog_Order(response, mlog)); } product_num = product_num.Substring(0, product_num.IndexOf("-")); } #endregion #region 产品编码格式有误 if (product_num.ConvertTo <int>(0) == 0) { response.code = 410; response.describe = "产品编码格式有误"; return(EditMTlog_Order(response, mlog)); } #endregion #region 购买数量格式有误 if (num.ConvertTo <int>(0) == 0) { response.code = 410; response.describe = "购买数量格式有误"; return(EditMTlog_Order(response, mlog)); } #endregion #region 产品限购则需要判断 限购数量 是否足够 if (pro.Ispanicbuy != 0) { //最多可购买数量 int zuiduo_canbuynum = pro.Limitbuytotalnum; if (int.Parse(num) > zuiduo_canbuynum) { response.code = 420; response.describe = "产品库存不足"; return(EditMTlog_Order(response, mlog)); } } #endregion #region 产品已暂停 if (pro.Pro_state == 0) { response.code = 421; response.describe = "产品已暂停"; return(EditMTlog_Order(response, mlog)); } #endregion #region 产品已过期 if (pro.Pro_end < DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"))) { response.code = 421; response.describe = "产品已过期"; return(EditMTlog_Order(response, mlog)); } #endregion #region 产品是否需要预约:需要预约则最晚预约时间是 游玩前一天的18点 if (pro.isneedbespeak == 1) { if (body.travelDate != "") { DateTime visitdate = DateTime.Parse(body.travelDate); DateTime bookdate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")); //必须提前一天预约 if (bookdate >= visitdate) { response.code = 422; response.describe = "产品需要提前一天预约"; return(EditMTlog_Order(response, mlog)); } } } #endregion #region 是否有使用限制 if (pro.Iscanuseonsameday == 0)//1:当天出票可用 ;2:2小时内出票不可用;0:当天出票不可用 { if (body.travelDate != "") { DateTime visitdate = DateTime.Parse(body.travelDate);//游玩日期:2012-12-12 格式要求:yyyy-MM-dd DateTime bookdate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")); if (bookdate >= visitdate) { response.code = 422; response.describe = "预定日期至少在游玩日期之前一天"; return(EditMTlog_Order(response, mlog)); } } } #endregion Meituan_reqlog mtOrderCrateSucLog = new Meituan_reqlogData().GetMtOrderCrateLogByMtorder(body.orderId.ToString(), "200"); #region 美团订单成功创建过 if (mtOrderCrateSucLog != null) { response.code = 200; response.describe = "订单创建成功"; response.partnerId = int.Parse(agentinfo.mt_partnerId); response.body = new OrderCreateResponseBody { partnerOrderId = mtOrderCrateSucLog.ordernum }; mlog.ordernum = mtOrderCrateSucLog.ordernum; return(EditMTlog_Order(response, mlog)); } #endregion #region 美团订单没有成功创建过 else { int isInterfaceSub = 1; //是否是电子票接口提交的订单:0.否;1.是 string ordertype = "1"; //1.出票2.充值 int orderid = 0; string real_name = ""; string mobile = ""; string use_date = body.travelDate; List <BaseVisitor> visitorlist = body.visitors; if (visitorlist.Count > 0) { foreach (BaseVisitor info in visitorlist) { if (info != null) { real_name = info.name; mobile = info.mobile; break; } } } //创建一笔未支付订单 string rdata = OrderJsonData.CreateNopayOrder(agentinfo.Id, product_num, ordertype, num, real_name, mobile, use_date, isInterfaceSub, out orderid, speciid); XmlDocument retdoc = (XmlDocument)JsonConvert.DeserializeXmlNode("{\"root\":" + rdata + "}"); XmlElement retroot = retdoc.DocumentElement; string rtype = retroot.SelectSingleNode("type").InnerText; string rmsg = retroot.SelectSingleNode("msg").InnerText; if (rtype == "100")//创建订单成功 { //针对美团因为创建未支付订单 是单写的,所以同时创建一笔wl订单 #region 万龙接口订单 if (pro.Source_type == 3 && pro.Serviceid == 4) { try { B2b_company commanage = B2bCompanyData.GetAllComMsg(pro.Com_id); WlGetProInfoDealRequestData wldata = new WlGetProInfoDealRequestData(commanage.B2bcompanyinfo.wl_PartnerId, commanage.B2bcompanyinfo.wl_userkey); WlDealResponseBody WlDealinfo = wldata.SelectonegetWlProDealData(pro.Service_proid, pro.Com_id); if (WlDealinfo == null) { response.code = 499; response.describe = "订单创建失败1"; return(EditMTlog_Order(response, mlog)); } double toal = WlDealinfo.marketPrice * int.Parse(num); string tavedate = ""; var createwlorder = wldata.wlOrderCreateRequest_json(int.Parse(commanage.B2bcompanyinfo.wl_PartnerId), real_name, mobile, orderid.ToString(), product_num.ToString(), WlDealinfo.proID, WlDealinfo.settlementPrice, WlDealinfo.marketPrice, toal, int.Parse(num), tavedate);// var wlcreate = wldata.wlOrderCreateRequest_data(createwlorder, pro.Com_id); if (wlcreate.IsSuccess == true) { //wl订单创建成功 } else { //return JsonConvert.SerializeObject(new { type = 1, msg = "wl接口创建订单失败1" }); response.code = 499; response.describe = "订单创建失败1"; return(EditMTlog_Order(response, mlog)); } } catch (Exception ex) { response.code = 499; response.describe = "订单创建失败" + ex.Message; return(EditMTlog_Order(response, mlog)); } } #endregion response.code = 200; response.describe = "订单创建成功"; response.partnerId = int.Parse(agentinfo.mt_partnerId); response.body = new OrderCreateResponseBody { partnerOrderId = orderid.ToString() }; mlog.ordernum = orderid.ToString(); return(EditMTlog_Order(response, mlog)); } else { response.code = 499; response.describe = "订单创建失败"; return(EditMTlog_Order(response, mlog)); } } #endregion } else { response.code = 421; response.describe = "产品不存在"; return(EditMTlog_Order(response, mlog)); } #endregion } } catch (Exception ex) { response.code = 499; response.describe = "异常错误" + ex; return(EditMTlog_Order(response, mlog)); } } }