//查询单个万龙库里产品
        internal WlDealResponseBody SelectonegetWlProDeal(string wlDealId, int comid)
        {
            string sql = @"SELECT  *  FROM  WL_pro where comid =@comid ";

            sql += " and  proid=@wlDealId ";
            sql += " order by id desc";

            var cmd = sqlHelper.PrepareTextSqlCommand(sql);

            cmd.AddParam("@wlDealId", wlDealId);
            cmd.AddParam("@comid", comid);
            WlDealResponseBody wlpro = new WlDealResponseBody();

            using (var reader = cmd.ExecuteReader())
            {
                if (reader.Read())
                {
                    wlpro = new WlDealResponseBody
                    {
                        id                  = reader.GetValue <int>("id"),
                        comid               = reader.GetValue <int>("comid"),
                        subtime             = reader.GetValue <DateTime>("subtime"),
                        useDateMode         = reader.GetValue <int>("useDateMode"),
                        visitorInfoType     = reader.GetValue <int>("visitorInfoType"),
                        proID               = reader.GetValue <string>("proID"),
                        scheduleOnlineTime  = reader.GetValue <string>("scheduleOnlineTime"),
                        scheduleOfflineTime = reader.GetValue <string>("scheduleOfflineTime"),
                        needTicket          = reader.GetValue <bool>("needTicket"),
                        orderCancelTime     = reader.GetValue <int>("orderCancelTime"),
                        stock               = Decimal.ToInt64(reader.GetValue <decimal>("stock")),
                        marketPrice         = Convert.ToDouble(reader.GetValue <decimal>("marketPrice")),
                        wlPrice             = Convert.ToDouble(reader.GetValue <decimal>("wlPrice")),
                        settlementPrice     = Convert.ToDouble(reader.GetValue <decimal>("settlementPrice")),
                        title               = reader.GetValue <string>("title"),
                        subTitle            = reader.GetValue <string>("subTitle"),
                        include             = reader.GetValue <string>("include"),
                        exclude             = reader.GetValue <string>("exclude"),
                        partnerId           = reader.GetValue <int>("partnerId").ToString(),
                        voucherDateBegin    = reader.GetValue <string>("voucherDateBegin"),
                        voucherDateEnd      = reader.GetValue <string>("voucherDateEnd"),
                        stockMode           = reader.GetValue <int>("stockMode"),
                        state               = reader.GetValue <int>("state")
                    };
                }
            }

            return(wlpro);
        }
        //查询一条产品逐一核对
        internal WlDealResponseBody SelectproidgetWlProDeal(string proID, int comid)
        {
            string sql = @"SELECT top 1  *
  FROM  WL_pro where   proID=@proID and  comid =@comid order by id desc";
            var    cmd = sqlHelper.PrepareTextSqlCommand(sql);

            cmd.AddParam("@proID", proID);
            cmd.AddParam("@comid", comid);
            using (var reader = cmd.ExecuteReader())
            {
                WlDealResponseBody m = null;
                if (reader.Read())
                {
                    m = new WlDealResponseBody
                    {
                        id      = reader.GetValue <int>("id"),
                        comid   = reader.GetValue <int>("comid"),
                        subtime = reader.GetValue <DateTime>("subtime"),
                        //useDateMode = reader.GetValue<int>("useDateMode"),
                        //visitorInfoType = reader.GetValue<int>("visitorInfoType"),
                        proID = reader.GetValue <string>("proID"),
                        scheduleOnlineTime  = reader.GetValue <string>("scheduleOnlineTime"),
                        scheduleOfflineTime = reader.GetValue <string>("scheduleOfflineTime"),
                        //needTicket = reader.GetValue<bool>("needTicket"),
                        //orderCancelTime = reader.GetValue<int>("orderCancelTime"),
                        //stock = reader.GetValue<int>("stock"),
                        //marketPrice = reader.GetValue<double>("marketPrice"),
                        //wlPrice = reader.GetValue<double>("wlPrice"),
                        //settlementPrice = reader.GetValue<double>("settlementPrice"),
                        //title = reader.GetValue<string>("title"),
                        //subTitle = reader.GetValue<string>("subTitle"),
                        //include = reader.GetValue<string>("include"),
                        //exclude = reader.GetValue<string>("exclude"),
                        //partnerId = reader.GetValue<string>("partnerId"),
                        //voucherDateBegin = reader.GetValue<string>("voucherDateBegin"),
                        //voucherDateEnd = reader.GetValue<string>("voucherDateEnd"),
                        //stockMode = reader.GetValue<int>("stockMode")
                    };
                }
                return(m);
            }
        }
        //插入拉取的产品
        internal int InsertorUpdateWlProDeal(WlDealResponseBody m)
        {
            if (m.id == 0)
            {
                string sql = @"INSERT INTO  [WL_pro]
                           (comid,
                            subtime,
                            useDateMode,
                            visitorInfoType,
                            proID,
                            scheduleOnlineTime,
                            scheduleOfflineTime,
                            needTicket,
                            orderCancelTime,
                            stock,
                            marketPrice,
                            wlPrice,
                            settlementPrice,
                            title,
                            subTitle,
                            include,
                            exclude,
                            partnerId,
                            voucherDateBegin,
                            voucherDateEnd,
                            stockMode
                            )
                     VALUES
                           (
                             @comid
                            ,@subtime
                            ,@useDateMode
                            ,@visitorInfoType
                            ,@proID
                            ,@scheduleOnlineTime
                            ,@scheduleOfflineTime
                            ,@needTicket
                            ,@orderCancelTime
                            ,@stock
                            ,@marketPrice
                            ,@wlPrice
                            ,@settlementPrice
                            ,@title
                            ,@subTitle
                            ,@include
                            ,@exclude
                            ,@partnerId
                            ,@voucherDateBegin
                            ,@voucherDateEnd
                            ,@stockMode
                            );select @@identity;";
                var    cmd = sqlHelper.PrepareTextSqlCommand(sql);
                cmd.AddParam("@comid", m.comid);
                cmd.AddParam("@subtime", DateTime.Now);
                cmd.AddParam("@useDateMode", m.useDateMode);
                cmd.AddParam("@visitorInfoType", m.visitorInfoType);
                cmd.AddParam("@proID", m.proID);
                cmd.AddParam("@scheduleOnlineTime", m.scheduleOnlineTime);
                cmd.AddParam("@scheduleOfflineTime", m.scheduleOfflineTime);
                cmd.AddParam("@needTicket", m.needTicket);
                cmd.AddParam("@orderCancelTime", m.orderCancelTime);
                cmd.AddParam("@stock", m.stock);
                cmd.AddParam("@marketPrice", m.marketPrice);
                cmd.AddParam("@wlPrice", m.wlPrice);
                cmd.AddParam("@settlementPrice", m.settlementPrice);
                cmd.AddParam("@title", m.title);
                cmd.AddParam("@subTitle", m.subTitle);

                if (m.include == null)
                {
                    m.include = "";
                }

                cmd.AddParam("@include", m.include);

                if (m.exclude == null)
                {
                    m.exclude = "";
                }

                cmd.AddParam("@exclude", m.exclude);

                cmd.AddParam("@partnerId", m.partnerId);
                cmd.AddParam("@voucherDateBegin", m.voucherDateBegin);
                cmd.AddParam("@voucherDateEnd", m.voucherDateEnd);
                cmd.AddParam("@stockMode", m.stockMode);

                object o = cmd.ExecuteScalar();
                return(o == null ? 0 : int.Parse(o.ToString()));
            }
            else
            {
                string sql = @"UPDATE  [WL_pro]
                               SET comid=@comid,
                            subtime=@subtime,
                            useDateMode=@useDateMode,
                            visitorInfoType=@visitorInfoType,
                            proID=@proID,
                            scheduleOnlineTime=@scheduleOnlineTime,
                            scheduleOfflineTime=@scheduleOfflineTime,
                            needTicket=@needTicket,
                            orderCancelTime=@orderCancelTime,
                            stock=@stock,
                            marketPrice=@marketPrice,
                            wlPrice=@wlPrice,
                            settlementPrice=@settlementPrice,
                            title=@title,
                            subTitle=@subTitle,
                            include=@include,
                            exclude=@exclude,
                            partnerId=@partnerId,
                            voucherDateBegin=@voucherDateBegin,
                            voucherDateEnd=@voucherDateEnd,
                            stockMode=@stockMode,
                            state=@state
                             WHERE id=@id";
                var    cmd = sqlHelper.PrepareTextSqlCommand(sql);
                cmd.AddParam("@id", m.id);
                cmd.AddParam("@comid", m.comid);
                cmd.AddParam("@subtime", DateTime.Now);
                cmd.AddParam("@useDateMode", m.useDateMode);
                cmd.AddParam("@visitorInfoType", m.visitorInfoType);
                cmd.AddParam("@proID", m.proID);
                cmd.AddParam("@scheduleOnlineTime", m.scheduleOnlineTime);
                cmd.AddParam("@scheduleOfflineTime", m.scheduleOfflineTime);
                cmd.AddParam("@needTicket", m.needTicket);
                cmd.AddParam("@orderCancelTime", m.orderCancelTime);
                cmd.AddParam("@stock", m.stock);
                cmd.AddParam("@marketPrice", m.marketPrice);
                cmd.AddParam("@wlPrice", m.wlPrice);
                cmd.AddParam("@settlementPrice", m.settlementPrice);
                cmd.AddParam("@title", m.title);
                cmd.AddParam("@subTitle", m.subTitle);
                cmd.AddParam("@include", m.include);
                if (m.exclude == null)
                {
                    m.exclude = "";
                }

                cmd.AddParam("@exclude", m.exclude);
                cmd.AddParam("@partnerId", m.partnerId);
                cmd.AddParam("@voucherDateBegin", m.voucherDateBegin);
                cmd.AddParam("@voucherDateEnd", m.voucherDateEnd);
                cmd.AddParam("@stockMode", m.stockMode);
                cmd.AddParam("@state", m.state);

                cmd.ExecuteNonQuery();
                return(m.id);
            }
        }
Ejemplo n.º 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));
                }
            }
        }