Esempio n. 1
0
        public override string DoOrder(CUtility.OrderType type, decimal?cost, decimal amount, ref string orderId, bool marketOrder)
        {
            //throw new NotImplementedException();

            return("");

            /*
             * potremmo evitare di fare ordini se non vengono smazzati gli eventuali precedenti
             */

            IMtGoxExchange mtGoxExchange = new MtGoxExchange();

            mtGoxExchange.APIKey    = Api;
            mtGoxExchange.APISecret = Secret;
            OrderType           ordertype = type == CUtility.OrderType.Buy ? OrderType.Bid : OrderType.Ask;
            OrderCreateResponse response  = mtGoxExchange.CreateOrder(currency, ordertype, (double)amount, null);

            if (response.Result == ResponseResult.Success)
            {
                orderId = response.OID.ToString();
                System.Console.WriteLine("Order success");
                return(response.OID.ToString());
            }
            else
            {
                orderId = "";
                System.Console.WriteLine("Order failed");
                return("");
            }
        }
Esempio n. 2
0
        public OrderCreateResponse Create(OrderCreateRequest request)
        {
            var response = new OrderCreateResponse();

            _facade.Create(request.Order);
            return(response);
        }
        /// <summary>
        /// 下单验证接口
        /// </summary>
        /// <param name="request"></param>
        /// <param name="business"></param>
        /// <returns></returns>
        private PageResult VerifyOrder(OrderCreateRequest request, Tbl_OTABusiness business)
        {
            var orderInfo = request.Body.OrderInfo;
            OrderCreateResponse result = new OrderCreateResponse
            {
                Head = HeadResult.V1,
                Body = new OrderCreateInfo
                {
                    Item = new List <OrderCreateItem>()
                }
            };
            var validResult = _orderService.ValidDataForOrderVerifyRequest(request);

            if (!validResult.Status)
            {
                result.Head.Code     = validResult.Code;
                result.Head.Describe = validResult.Message;
                return(PageDataResult.Data(result, business.Saltcode.ToString()));
            }
            List <int> productIds  = orderInfo.TicketList.Select(a => a.ProductId).ToList();
            var        ticketIds   = _otaTicketRelationService.GetTicketIds(business.Id, productIds);
            var        tbl_Tickets = _ticketService.CheckIsTicketIds(ticketIds, business.ScenicId, orderInfo.VisitDate.ToDataTime());

            var validDataResult = _orderService.ValidDataForOrderCreateRequest(request, tbl_Tickets);

            if (!validDataResult.Status)
            {
                result.Head.Code     = validDataResult.Code;
                result.Head.Describe = validDataResult.Message;
                result.Body.Item.Add(new OrderCreateItem
                {
                    ProductId = request.Body.OrderInfo.TicketList[0].ProductId.ToString(),
                    useDate   = request.Body.OrderInfo.VisitDate,
                    quantity  = 0
                });
                return(PageDataResult.Data(result, business.Saltcode.ToString()));
            }

            result.Head.Code        = "000000";
            result.Head.Describe    = "成功";
            result.Body.OrderStatus = "OREDER_SUCCESS";
            foreach (var row in tbl_Tickets)
            {
                result.Body.Item.Add(new OrderCreateItem
                {
                    ProductId = row.TicketId.ToString(),
                    useDate   = request.Body.OrderInfo.VisitDate,
                    quantity  = 500000
                });
            }

            return(PageDataResult.Data(result, business.Saltcode.ToString()));
        }
Esempio n. 4
0
        //编辑日志
        public string EditMTlog_Order(OrderCreateResponse response, Meituan_reqlog mlog)
        {
            string json = JsonConvert.SerializeObject(response);

            #region 把处理结果录入数据库
            mlog.respstr  = json;
            mlog.resptime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            mlog.code     = response.code.ToString();
            mlog.describe = response.describe;
            new Meituan_reqlogData().EditReqlog(mlog);
            #endregion

            return(json);
        }
Esempio n. 5
0
        /// <summary>Call the POS for Order method</summary>
        /// <param name="request">The request</param>
        public OrderCreatePOSResponse OrderTransaction(OrderCreateRequest request)
        {
            OrderCreatePOSResponse response       = new OrderCreatePOSResponse();
            HttpStatusCode         httpStatusCode = response.HttpStatusCode;
            Order order = response.OrderCreateResponse.Order;

            string    responseStr = string.Empty;
            RestCalls restCalls   = new RestCalls();

            //TODO order time is invalid from test need to check if the kiosk
            //does the same thing
            DateTime orderTime    = DateTime.Now;
            string   orderTimeStr = orderTime.ToString("yyMMddHHmmss");

            request.DOTOrder.OrderTime = orderTimeStr;

            string requestStr = JsonConvert.SerializeObject(request.DOTOrder);

            //POST the JSON to the Server and get the response - load the url path
            LoadAPIUrls();
            //responseStr = restCalls.PostAsyncRequest(orderUrl, requestOrderStr);


            //call the APIs in order
            //Checkbasket

            responseStr = restCalls.PostRestSharpRequest();

            //Deserialize the string to an Object
            OrderCreateResponse jsonOrder = JsonConvert.DeserializeObject <OrderCreateResponse>(responseStr);

            //populate Order with the result from the POS
            response.OrderCreateResponse = jsonOrder;


            if (httpStatusCode == HttpStatusCode.Created)
            {
                Log.Info($"HTTP Status Code Created:{httpStatusCode}");
            }
            else
            {
                Log.Error($"HTTP Status Code:{httpStatusCode}");
            }

            return(response);
        }
Esempio n. 6
0
        public ReturnResult SimulationMTGetDeal(string url, OrderCreateRequestBody body)
        {
            ReturnResult result = new ReturnResult
            {
                IsSuccess = false,
            };

            try
            {
                OrderCreateRequest requestData = new OrderCreateRequest
                {
                    partnerId = agentinfo.mt_partnerId.ConvertTo <int>(0),
                    body      = body
                };

                var responseStr = new MeiTuanInter(agentinfo.mt_partnerId, agentinfo.mt_secret, agentinfo.mt_client).DoRequest(url, JsonConvert.SerializeObject(requestData));
                if (string.IsNullOrEmpty(responseStr))
                {
                    result.Message = "返回数据为空";
                }
                else
                {
                    OrderCreateResponse responseBody = (OrderCreateResponse)JsonConvert.DeserializeObject(responseStr, typeof(OrderCreateResponse));
                    if (responseBody.code == 200)
                    {
                        result.IsSuccess = true;
                        result.Message   = JsonConvert.SerializeObject(responseBody);
                    }
                    else
                    {
                        result.Message = responseBody.describe;
                    }
                }
            }
            catch (Exception ex)
            {
                result.Message = "异常" + ex.Message;
            }
            return(result);
        }
Esempio n. 7
0
        /// <summary>
        /// 创建订单
        /// </summary>
        /// <param name="condition"></param>
        /// <returns></returns>
        public OrderCreateResponse OrderCreate(OrderCreateCondition condition)
        {
            OrderCreateResponse response = new OrderCreateResponse();

            try
            {
                var result = HotelApiAccess.Query <OrderCreateCondition, OrderCreateResponse>(condition, "hotel.order.create");

                if (result.Code == "0")
                {
                    response = result.Result;
                }
                else
                {
                    throw new Exception("接口请求失败:" + result.Code);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(response);
        }
        /// <summary>
        /// 创建订单并支付
        /// </summary>
        /// <param name="orderInfo"></param>
        private PageResult PayOrder(OrderCreateRequest request, Tbl_OTABusiness business)
        {
            OrderInfo           orderInfo = request.Body.OrderInfo;
            OrderCreateResponse result    = new OrderCreateResponse
            {
                Head = HeadResult.V1
            };
            var validResult = _orderService.ValidDataForOrderCreateRequest(request, result);

            if (!validResult.Status)
            {
                result.Head.Code     = validResult.Code;
                result.Head.Describe = validResult.Message;
                return(PageDataResult.Data(result, business.Saltcode.ToString()));
            }
            List <int> productIds  = orderInfo.TicketList.Select(a => a.ProductId).ToList();
            var        ticketIds   = _otaTicketRelationService.GetTicketIds(business.Id, productIds);
            var        tbl_Tickets = _ticketService.CheckIsTicketIds(ticketIds, business.ScenicId, orderInfo.VisitDate.ToDataTime());

            var validDataResult = _orderService.ValidDataForOrderCreateRequest(request, tbl_Tickets);

            if (!validDataResult.Status)
            {
                result.Head.Code     = validDataResult.Code;
                result.Head.Describe = validDataResult.Message;
                return(PageDataResult.Data(result, business.Saltcode.ToString()));
            }
            var tbl_Order        = _orderService.AddOrder(orderInfo, business);
            var tbl_OrderDetails = _orderDetailService.AddOrderDetail(orderInfo, tbl_Order);

            _orderService.UpdateOrder(tbl_Order, tbl_OrderDetails);
            var tbl_Ticket_Testing = _ticketTestingService.addTicketTestings(tbl_Order, tbl_OrderDetails);

            _ticketService.UpdateTicketBySellCount(tbl_Tickets, tbl_OrderDetails);
            var tbl_SaleLog = _saleLogService.addSaleLog(tbl_Order);

            try
            {
                _orderService.BeginTran();
                _orderService.Add(tbl_Order);
                _orderDetailService.Add(tbl_OrderDetails);
                _ticketTestingService.Add(tbl_Ticket_Testing);
                _ticketService.Update(tbl_Tickets);
                _noticeOrderConsumedService.Add(tbl_Order, tbl_OrderDetails, business);
                _orderTravelNoticeService.Add(tbl_Order, business);
                _saleLogService.Add(tbl_Order);
                _orderService.CommitTran();
            }
            catch (Exception ex)
            {
                _orderService.RollbackTran();
                result.Head.Code     = "113021";
                result.Head.Describe = "订单创建异常,订单创建失败";
                return(PageDataResult.Data(result, business.Saltcode.ToString()));
            }
            result.Body = new OrderCreateInfo
            {
                OtaOrderId  = tbl_Order.OTAOrderNo,
                OrderId     = tbl_Order.OrderNo,
                OrderStatus = "OREDER_SUCCESS",
                Item        = new List <OrderCreateItem>()
            };
            tbl_OrderDetails = _orderDetailService.GetList(tbl_Order.OrderNo);
            foreach (var row in tbl_OrderDetails)
            {
                result.Body.Item.Add(new OrderCreateItem
                {
                    OtaOrderDetailId = row.OtaOrderDetailId,
                    ProductId        = row.TicketId.ToString(),
                    useDate          = row.ValidityDateStart.ToString("yyyy-MM-dd"),
                    CertificateNo    = row.CertificateNO,
                    quantity         = 500000
                });
            }
            result.Head.Code     = "000000";
            result.Head.Describe = "成功";
            return(PageDataResult.Data(result, business.Saltcode.ToString()));
        }
        /// <summary>
        /// 创建订单并支付
        /// </summary>
        /// <param name="orderInfo"></param>
        private PageResult PayOrder(OrderCreateRequest request, Tbl_OTABusiness business)
        {
            OrderInfo           orderInfo = request.Body.OrderInfo;
            OrderCreateResponse result    = new OrderCreateResponse
            {
                Head = HeadResult.V1
            };
            var validResult = _orderService.ValidDataForOrderCreateRequest(request);

            if (!validResult.Status)
            {
                result.Head.Code     = validResult.Code;
                result.Head.Describe = validResult.Message;
                return(PageDataResult.Data(result, business.Saltcode.ToString()));
            }
            List <int> productIds  = orderInfo.TicketList.Select(a => a.ProductId).ToList();
            var        ticketIds   = _otaTicketRelationService.GetTicketIds(business.Id, productIds);
            var        tbl_Tickets = _ticketService.CheckIsTicketIds(ticketIds, business.ScenicId, orderInfo.VisitDate.ToDataTime());

            var validDataResult = _orderService.ValidDataForOrderCreateRequest(request, tbl_Tickets);

            if (!validDataResult.Status)
            {
                result.Head.Code     = validDataResult.Code;
                result.Head.Describe = validDataResult.Message;
                return(PageDataResult.Data(result, business.Saltcode.ToString()));
            }
            var tbl_Order        = _orderService.AddOrder(orderInfo, business);
            var tbl_OrderDetails = _orderDetailService.AddOrderDetail(orderInfo, tbl_Order);

            _orderService.UpdateOrder(tbl_Order, tbl_OrderDetails);
            var tbl_Ticket_Testing = _ticketTestingService.addTicketTestings(tbl_Order, tbl_OrderDetails);

            _ticketService.UpdateTicketBySellCount(tbl_Tickets, tbl_OrderDetails);
            var tbl_SaleLog = _saleLogService.addSaleLog(tbl_Order);

            try
            {
                using (SqlConnection connection = new SqlConnection(DbConfig.TicketConnectionString))
                {
                    connection.Open();
                    var trans = connection.BeginTransaction();
                    SqlBulkInsert.Inert(tbl_Order, connection, trans);
                    SqlBulkInsert.Inert(tbl_OrderDetails, connection, trans);
                    SqlBulkInsert.Inert(tbl_Ticket_Testing, connection, trans);
                    _ticketService.UpdateTicket(tbl_Tickets, connection, trans);
                    SqlBulkInsert.Inert(tbl_SaleLog, connection, trans);
                    trans.Commit();
                }
            }
            catch (Exception ex)
            {
                result.Head.Code     = "113021";
                result.Head.Describe = "订单创建异常,订单创建失败";
                return(PageDataResult.Data(result, business.Saltcode.ToString()));
            }
            result.Body = new OrderCreateInfo
            {
                OrderId     = tbl_Order.OrderNo,
                OrderStatus = "OREDER_SUCCESS"
            };
            try
            {
                var sendResult = _smsService.Send(tbl_OrderDetails, tbl_Order.Mobile);
                if (sendResult.Status)
                {
                    result.Head.Code     = "000000";
                    result.Head.Describe = "成功";
                    return(PageDataResult.Data(result, business.Saltcode.ToString()));
                }
                result.Head.Code     = "000001";
                result.Head.Describe = "订单创建成功,发送入园凭证短信失败";
                return(PageDataResult.Data(result, business.Saltcode.ToString()));
            }
            catch (Exception ex)
            {
                result.Head.Code     = "000001";
                result.Head.Describe = "订单创建成功,发送入园凭证短信失败";
                return(PageDataResult.Data(result, business.Saltcode.ToString()));
            }
        }
        public ActionResult OrderCreate(int?timeunix, string signature, OrderCreateRequest request)
        {
            table_商户账号 account = null;

            sqlSugarClient.Ado.UseTran(() => { });
            sqlSugarClient.Ado.UseTran(() =>
            {
                account = sqlSugarClient.Queryable <table_商户账号>().Where(it => it.商户ID == request.UserName).First();
            });
            if (Convert.ToDouble(account.手续费余额) - Convert.ToDouble(account.单笔手续费) < 0)
            {
                return(GetStandardError(BaseErrors.ERROR_NUMBER.LX1010, request.UserName, request.UserPassword));
            }
            if (Convert.ToDouble(request.AimsMoney) - Convert.ToDouble(account.提款最低单笔金额) < 0)
            {
                return(GetStandardError(BaseErrors.ERROR_NUMBER.LX1011, request.UserName, request.UserPassword));
            }
            if (Convert.ToDouble(request.AimsMoney) - Convert.ToDouble(account.提款最高单笔金额) > 0)
            {
                return(GetStandardError(BaseErrors.ERROR_NUMBER.LX1012, request.UserName, request.UserPassword));
            }
            if (account.提款余额.Value - Convert.ToDouble(request.AimsMoney) < 0)
            {
                return(GetStandardError(BaseErrors.ERROR_NUMBER.LX1013, request.UserName, request.UserPassword));
            }
            JsonResult jsonResult = null;

            sqlSugarClient.Ado.UseTran(() => { });
            sqlSugarClient.Ado.UseTran(() =>
            {
                var getByWhere = sqlSugarClient.Queryable <table_商户明细提款>()
                                 .Where(it => it.商户ID == request.UserName && it.商户API订单号 == request.OrderNumberMerchant).ToList();
                if (getByWhere.Count > 0)
                {
                    jsonResult = GetStandardError(BaseErrors.ERROR_NUMBER.LX1020, request.UserName, request.UserPassword);
                }
            });
            if (jsonResult != null)
            {
                return(jsonResult);
            }
            sqlSugarClient.Ado.UseTran(() => { });
            var result = sqlSugarClient.Ado.UseTran(() =>
            {
                account       = sqlSugarClient.Queryable <table_商户账号>().Where(it => it.商户ID == request.UserName).First();
                string 状态     = "待处理";
                string 类型     = "提款";
                DateTime 时间创建 = DateTime.Now;

                double preFee     = Convert.ToDouble(account.手续费余额);
                double preBalance = account.提款余额.Value;

                account.提款余额  -= Convert.ToDouble(request.AimsMoney);
                account.手续费余额 -= Convert.ToDouble(account.单笔手续费);
                account.API回调  = request.CallBack;

                // sqlSugarClient.Updateable(account).UpdateColumns(it => new { it.提款余额, it.手续费余额, it.API回调 }).ExecuteCommand();
                sqlSugarClient.Updateable <table_商户账号>().Where(it => it.商户ID == account.商户ID)
                .SetColumns(it => it.提款余额 == it.提款余额 - Convert.ToDouble(request.AimsMoney))
                .SetColumns(it => it.手续费余额 == it.手续费余额 - Convert.ToDouble(account.单笔手续费))
                .SetColumns(it => it.API回调 == request.CallBack)
                .ExecuteCommand();

                table_商户明细手续费 fee = new table_商户明细手续费();
                fee.订单号           = "MHFON" + DateTime.Now.ToString("yyyyMMddHHmmss") + Convert.ToString(ClassLibrary1.ClassHelpMe.GenerateRandomCode(1, 1000, 9999));
                fee.商户ID          = Convert.ToInt32(account.商户ID);
                fee.手续费支出         = account.单笔手续费;
                fee.交易金额          = Convert.ToDouble(request.AimsMoney);
                fee.交易前手续费余额      = preFee;
                fee.交易后手续费余额      = account.手续费余额;
                fee.类型            = 类型;
                fee.状态            = 状态;
                fee.时间创建          = 时间创建;
                sqlSugarClient.Insertable(fee).ExecuteCommand();

                table_商户明细余额 balance = new table_商户明细余额();
                balance.订单号          = "MBON" + DateTime.Now.ToString("yyyyMMddHHmmss") + Convert.ToString(ClassLibrary1.ClassHelpMe.GenerateRandomCode(1, 1000, 9999));
                balance.商户ID         = Convert.ToInt32(account.商户ID);
                balance.类型           = 类型;
                balance.手续费          = Convert.ToString(account.单笔手续费);
                balance.交易金额         = request.AimsMoney;
                balance.交易前账户余额      = Convert.ToString(preBalance);
                balance.交易后账户余额      = Convert.ToString(account.提款余额);
                balance.状态           = 状态;
                balance.时间创建         = 时间创建;
                sqlSugarClient.Insertable(balance).ExecuteCommand();

                table_商户明细提款 detail = new table_商户明细提款();
                detail.订单号          = "MST" + DateTime.Now.ToString("yyyyMMddHHmmss") + Convert.ToString(ClassLibrary1.ClassHelpMe.GenerateRandomCode(1, 1000, 9999));
                detail.商户ID         = account.商户ID;
                detail.交易方卡号        = request.AimsCardNumber;
                detail.交易方姓名        = request.AimsCardName;
                detail.交易方银行        = request.AimsCardBank;
                detail.商户API订单号     = request.OrderNumberMerchant;
                detail.交易金额         = Convert.ToDouble(request.AimsMoney);
                detail.手续费          = account.单笔手续费;
                detail.创建方式         = "接口";
                detail.备注商户写        = "";
                detail.状态           = 状态;
                detail.类型           = 类型;
                detail.时间创建         = 时间创建;
                detail.API回调次数      = 0;
                detail.订单源IP        = ClassLibrary1.ClassAccount.来源IP();
                sqlSugarClient.Insertable(detail).ExecuteCommand();

                OrderCreateResponse orderCreateResponse = AutoCopy <BaseResponse, OrderCreateResponse>(baseSuccess);
                orderCreateResponse.Username            = request.UserName;
                orderCreateResponse.Userpassword        = request.UserPassword;
                orderCreateResponse.OrderNumberMerchant = request.OrderNumberMerchant;
                orderCreateResponse.OrderNumberSite     = detail.订单号;
                orderCreateResponse.AimsCardBank        = request.AimsCardBank;
                orderCreateResponse.AimsCardName        = request.AimsCardName;
                orderCreateResponse.AimsCardNumber      = request.AimsCardNumber;
                orderCreateResponse.AimsMoney           = request.AimsMoney;

                jsonResult      = new JsonResult();
                jsonResult.Data = orderCreateResponse;
            });

            sqlSugarClient.Ado.UseTran(() => { });
            if (!result.IsSuccess)
            {
                jsonResult = GetStandardError(BaseErrors.ERROR_NUMBER.LX1016, request.UserName, request.UserPassword);
                BaseResponse baseResponse = (BaseResponse)jsonResult.Data;
                baseResponse.StatusReply = string.Format(baseResponse.StatusReply, result.ErrorMessage);
            }
            return(jsonResult);
        }
Esempio n. 11
0
        /// <summary>
        /// 创建订单基础数据验证
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public DataValidResult ValidDataForOrderCreateRequest(OrderCreateRequest request, OrderCreateResponse response)
        {
            var orderInfo = request.Body.OrderInfo;
            var result    = new DataValidResult {
                Status = false
            };

            if (orderInfo.ContactPerson == null)
            {
                result.Code    = "113001";
                result.Message = "创建订单异常,取票人信息为空";
                return(result);
            }
            if (string.IsNullOrEmpty(orderInfo.ContactPerson.Name))
            {
                result.Code    = "113002";
                result.Message = "创建订单异常,取票人姓名不能为空";
                return(result);
            }
            if (string.IsNullOrEmpty(orderInfo.ContactPerson.Mobile))
            {
                result.Code    = "113003";
                result.Message = "创建订单异常,取票人手机号码不能为空";
                return(result);
            }
            if (!RegexValidation.IsCellPhone(orderInfo.ContactPerson.Mobile))
            {
                result.Code    = "113004";
                result.Message = "创建订单异常,取票人手机号码异常";
                return(result);
            }
            if (!string.IsNullOrEmpty(orderInfo.ContactPerson.CardType))
            {
                if (orderInfo.ContactPerson.CardType.ToUpper() == "ID_CARD" && !string.IsNullOrEmpty(orderInfo.ContactPerson.CardNo))
                {
                    if (!RegexValidation.IsIdCard(orderInfo.ContactPerson.CardNo))
                    {
                        result.Code    = "113005";
                        result.Message = "创建订单异常,游客身份证信息输入有误";
                        return(result);
                    }
                }
            }

            if (string.IsNullOrEmpty(orderInfo.OrderOtaId))
            {
                result.Code    = "113006";
                result.Message = "创建订单异常,OTA订单id不能为空";
                return(result);
            }
            if (orderInfo.OrderPrice <= 0)
            {
                result.Code    = "113007";
                result.Message = "创建订单异常,订单总金额不能小于0";
                return(result);
            }
            if (orderInfo.OrderQuantity <= 0)
            {
                result.Code    = "113008";
                result.Message = "创建订单异常,订票总数量不能小于1";
                return(result);
            }
            if (!orderInfo.VisitDate.IsDataTime())
            {
                result.Code    = "113009";
                result.Message = "创建订单异常,游玩日期格式不合法";
                return(result);
            }
            if (orderInfo.TicketList == null || orderInfo.TicketList.Count <= 0)
            {
                result.Code    = "113010";
                result.Message = "创建订单异常,购买产品的数量不能小于1";
                return(result);
            }
            if (orderInfo.TicketList.Sum(a => a.Quantity) != orderInfo.OrderQuantity)
            {
                result.Code    = "113011";
                result.Message = "创建订单异常,购买产品的总数量和订票总数量不符";
                return(result);
            }
            if (orderInfo.TicketList.Sum(a => a.SellPrice * a.Quantity) != orderInfo.OrderPrice)
            {
                result.Code    = "113012";
                result.Message = "创建订单异常,购买产品的总金额和订票总金额不符";
                return(result);
            }
            foreach (var row in orderInfo.TicketList)
            {
                if (row.Quantity <= 0)
                {
                    result.Code    = "113013";
                    result.Message = "创建订单异常,购买产品的游客人数不能小于1";
                    return(result);
                }
                if (row.ProductId <= 0)
                {
                    result.Code    = "113014";
                    result.Message = "创建订单异常,购买产品的id不合法";
                    return(result);
                }
                if (orderInfo.TicketList == null)
                {
                    result.Code    = "113015";
                    result.Message = "创建订单异常,购买产品的数据不合法";
                    return(result);
                }
                if (row.SellPrice <= 0)
                {
                    result.Code    = "113016";
                    result.Message = "创建订单异常,购买产品的金额不合法";
                    return(result);
                }
            }

            if (orderInfo.OrderPayStatus > 1 || orderInfo.OrderPayStatus < 0)
            {
                result.Code    = "113017";
                result.Message = "创建订单异常,是否收款超出范围";
                return(result);
            }
            //验证OTA订单id是否已存在
            var tbl_Order = GetOrderBy(request.Body.OrderInfo.OrderOtaId);

            if (tbl_Order != null)
            {
                var tbl_OrderDetails = _orderDetailService.GetList(tbl_Order.OrderNo);
                result.Code    = "000000";
                result.Message = "成功,重复提交订单";
                response.Body  = new OrderCreateInfo
                {
                    OtaOrderId  = tbl_Order.OTAOrderNo,
                    OrderId     = tbl_Order.OrderNo,
                    OrderStatus = "OREDER_SUCCESS",
                    Item        = new List <OrderCreateItem>()
                };
                foreach (var row in tbl_OrderDetails)
                {
                    response.Body.Item.Add(new OrderCreateItem
                    {
                        OtaOrderDetailId = row.OtaOrderDetailId,
                        ProductId        = row.TicketId.ToString(),
                        useDate          = row.ValidityDateStart.ToString("yyyy-MM-dd"),
                        CertificateNo    = row.CertificateNO,
                        quantity         = 500000
                    });
                }
                return(result);
            }
            result.Status = true;
            return(result);
        }
Esempio n. 12
0
        protected void Page_Load(object sender, EventArgs e)
        {
            #region 记入日志表Meituan_reqlog
            string         reqip = CommonFunc.GetRealIP();
            Meituan_reqlog mlog  = new Meituan_reqlog
            {
                id                  = 0,
                reqstr              = _requestParam,
                subtime             = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                respstr             = "",
                resptime            = "",
                code                = "",
                describe            = "",
                req_type            = "",
                sendip              = reqip,
                stockagentcompanyid = 0
            };
            int logid = new Meituan_reqlogData().EditReqlog(mlog);
            mlog.id = logid;
            #endregion

            string date          = System.Web.HttpContext.Current.Request.Headers.Get("Date");
            string PartnerId     = System.Web.HttpContext.Current.Request.Headers.Get("PartnerId");
            string Authorization = System.Web.HttpContext.Current.Request.Headers.Get("Authorization");
            string requestMethod = System.Web.HttpContext.Current.Request.HttpMethod;
            string URI           = System.Web.HttpContext.Current.Request.CurrentExecutionFilePath;
            //authorization 形式: "MWS" + " " + client + ":" + sign;
            string mtSign = Authorization.Substring(Authorization.IndexOf(":") + 1);

            mlog.req_type = URI;

            agentinfo = new AgentCompanyData().GetAgentCompanyByMeituanPartnerId(PartnerId);

            #region 验证是否已经配置美团合作商信息
            if (agentinfo == null)
            {
                var response = new OrderCreateResponse();
                response.partnerId = int.Parse(PartnerId);
                response.code      = 499;
                response.describe  = "分销尚未配置美团合作商信息(PartnerId:" + PartnerId + ")";

                string json = JsonConvert.SerializeObject(response);

                //把处理结果录入日志
                mlog.respstr  = json;
                mlog.resptime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                mlog.code     = response.code.ToString();
                mlog.describe = response.describe;
                new Meituan_reqlogData().EditReqlog(mlog);

                LogHelper.RecordSelfLog("Error", "meituan", response.describe);

                Response.Write(json);
                return;
            }
            #endregion

            mlog.stockagentcompanyid = agentinfo.Id;

            #region 签名验证
            string beforeSign = requestMethod + " " + URI + "\n" + date;
            string afterSign  = new MeiTuanInter(agentinfo.mt_partnerId, agentinfo.mt_secret, agentinfo.mt_client).GetSign(beforeSign);
            //判断签名是否正确
            if (afterSign != mtSign)
            {
                var response = new OrderCreateResponse();
                response.partnerId = int.Parse(PartnerId);
                response.code      = 499;
                response.describe  = "签名验证失败";

                string json = JsonConvert.SerializeObject(response);

                //把处理结果录入日志
                mlog.respstr  = json;
                mlog.resptime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                mlog.code     = response.code.ToString();
                mlog.describe = response.describe;
                new Meituan_reqlogData().EditReqlog(mlog);

                LogHelper.RecordSelfLog("Error", "meituan", "拉取产品 签名错误 mtSign-" + mtSign + "  meSign-" + afterSign);

                Response.Write(json);
                return;
            }
            #endregion

            string actionResult = Getordercreate(mlog);

            Response.Write(actionResult);
        }
Esempio n. 13
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));
                }
            }
        }