예제 #1
0
      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));
              }
          }
      }
예제 #2
0
        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);
            }
        }
예제 #3
0
        ///     产品查询
        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));
            }
        }
예제 #4
0
        ///     产品订单创建
        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));
                }
            }
        }