public SweepUnitContext_Bond_Short(
            TradingDirection ls,
            BondPair pair,
            Account bondAccount,
            ISweeper sweeper)
        {
            this.ID = SweepUnitIDManager.NextID++;

            this.LongShort = ls;

            Trace.Assert(this.LongShort == TradingDirection.Short);

            // -15
            this.CurSignedTargetCount = pair.Count * (-1);

            this.EnterCode = pair.EnterCodeWithMarketType;
            this.PairCode = pair.PairCodeWithMarketType;

            this._initSweepPrice = pair.PairPrice;

            this.BondAccount = bondAccount;

            this._enterMarketType = BondUtil.GetMarketType(pair.EnterCodeWithMarketType);
            this._pairMarketType = BondUtil.GetMarketType(pair.PairCodeWithMarketType);

            this._sweeper = sweeper;

            this.RealOrdersShort = new List<POrder>();
        }
        public SweepUnitContext_Bond_Long(
            TradingDirection ls,
            BondPair pair,
            Account bondAccount,
            ISweeper sweeper)
        {
            this.ID = SweepUnitIDManager.NextID++;

            this.LongShort = ls;

            Trace.Assert(this.LongShort == TradingDirection.Long);

            this.InitSignedGoalCount = pair.Count;
            this.CurSignedTargetCount = pair.Count;

            this.EnterCode = pair.EnterCodeWithMarketType;

            this._initEnterPrice = pair.EnterPrice;

            this.BondAccount = bondAccount;

            this._enterMarketType = BondUtil.GetMarketType(pair.EnterCodeWithMarketType);

            this._sweeper = sweeper;

            CreateInitOrders(pair);

            this.RealOrdersLong = new List<POrder>();

            ReadyBidAskCountDataForAllocate(pair);
        }
        /// <summary>
        /// Cancel an active order if the status is 'open'.
        /// </summary>
        /// <param name="orderID">The order id to cancel.</param>
        /// <param name="markets">Default is "BTCCNY". [ BTCCNY | LTCCNY | LTCBTC ]</param>
        /// <returns>JSON-string contains true or false depending on the result of cancellation and JSON-request id.</returns>
        public string cancelOrder(int orderID, MarketType markets=MarketType.BTCCNY)
        {
            string method = "cancelOrder";
            string mParams = orderID.ToString();
            //all is not supported
            if (markets == MarketType.ALL)
                throw new BTCChinaException(method, "N/A", "Market:ALL is not supported.");
            //not default market
            if (markets != MarketType.BTCCNY)
                mParams += ",\"" + System.Enum.GetName(typeof(MarketType), markets) + "\"";

            return DoMethod(BuildParams(method, mParams));
        }
Example #4
0
        public POrder(
            TradingDirection longShort, 
            String code, 
            long reqCount, 
            double reqPrice, 
            Account account,
            RawMarketData rmdClone,
            MarketType market,
            Boolean bWeakLongBlock)
        {
            this.LongShort = longShort;
            this.Code = code;
            this.ReqCount = reqCount;
            this.ReqPrice = reqPrice;
            this.TargetAccount = account;
            this.RMDClone = rmdClone.Clone() as RawMarketData; // 밖에서도 열심히 했겠지만 최종적으로 Clone을 저장하도록 한다.
            this.Market = market;
            this.IsWeakLongBlock = bWeakLongBlock;

            this.InitReqPrice = reqPrice;

            this.ContractedCount = 0;
            this.CanceledCount = 0;
            this.OrderNumber = -1;
            this.AvgContractPrice = 0;

            this.IsAllocatedYetRequestOrFree = true;

            this.CreatedTime = DateTime.Now;
            this.NoErrorOrderIn = false;
            this.Comment = "";

            this.ShortCutTargetOfContractCallBack = null;

            this.EarlyUpdatedLongBlockCount = 0;

            _bGotLastPacket = false;

            // dependency가 있음(SetMarketType, SetcodeNoTail, SetLongBlock)
            Boolean bSuccess1 = SetMarketType();
            Boolean bSuccess2 = SetCodeNoTail(bSuccess1);

            ConvertOverPriceToInRMDPriceIfNotZero();

            SetLongBlock(bSuccess2);

            POrderManager.Ins().Add(this);

            ValidateInput();
        }
Example #5
0
        public static KLine[] GetKLine(MarketType _type, MarketPeriod _period)
        {
            string _url = "";
            switch (_type)
            {
                case MarketType.BTC: _url = "https://market.huobi.com/staticmarket/kline{0}.html"; break;
                case MarketType.LTC: _url = "https://market.huobi.com/staticmarket/kline_ltc{0}.html"; break;
            }
            switch (_period)
            {
                case MarketPeriod.M1: _url = string.Format(_url, "001"); break;
                case MarketPeriod.M5: _url = string.Format(_url, "005"); break;
                case MarketPeriod.M15: _url = string.Format(_url, "015"); break;
                case MarketPeriod.M30: _url = string.Format(_url, "030"); break;
                case MarketPeriod.M60: _url = string.Format(_url, "060"); break;
                case MarketPeriod.D: _url = string.Format(_url, "100"); break;
                case MarketPeriod.W: _url = string.Format(_url, "200"); break;
                case MarketPeriod.M: _url = string.Format(_url, "300"); break;
                case MarketPeriod.Y: _url = string.Format(_url, "400"); break;
            }

            string _result = Get(_url);
            IList<KLine> _klines = new List<KLine>();
            string[] _lines = _result.Split('\n');
            foreach (string _line in _lines)
            {
                string[] _item = _line.Replace("\r", "").Split(',');
                if (_item.Length != 8) { continue; }
                KLine _kline = new KLine();
                _kline.DateTime = DateTime.Parse(string.Format("{0}-{1}-{2} {3}:{4}:{5}",
                    _item[0].Substring(0,4),
                    _item[0].Substring(4,2),
                    _item[0].Substring(6,2),
                    _item[1].Substring(0,2),
                    _item[1].Substring(2,2),
                    _item[1].Substring(4,2)));
                _kline.Open = decimal.Parse(_item[2]);
                _kline.High = decimal.Parse(_item[3]);
                _kline.Low = decimal.Parse(_item[4]);
                _kline.Close = decimal.Parse(_item[5]);
                _kline.Volume = decimal.Parse(_item[6]);
                _kline.Total = decimal.Parse(_item[7]);
                _klines.Add(_kline);
            }
            return _klines.ToArray();
        }
Example #6
0
 public static char get_block_from_market_type(MarketType t)
 {
     switch(t)
     {
     case MarketType.MARKET_SHANGHAI_A:
         return (char)0;
     case MarketType.MARKET_SHANGHAI_B:
         return (char)1;
     case MarketType.MARKET_SHENZHEN_A:
         return (char)2;
     case MarketType.MARKET_SHENZHEN_B:
         return (char)3;
     case MarketType.MARKET_INDEX:
         return (char)11;			// 所有指数
     case MarketType.MARKET_WARRANT:
         return (char)13;			// 权证
     default:
         return (char)0;
     }
 }
Example #7
0
        /// <summary>
        ///     Returns true if MarketDefinition instances are equal
        /// </summary>
        /// <param name="other">Instance of MarketDefinition to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(MarketDefinition other)
        {
            // credit: http://stackoverflow.com/a/10454552/677735
            if (other == null)
            {
                return(false);
            }

            return((Venue == other.Venue || Venue != null && Venue.Equals(other.Venue)) &&
                   (SettledTime == other.SettledTime || SettledTime != null && SettledTime.Equals(other.SettledTime)) &&
                   (Timezone == other.Timezone || Timezone != null && Timezone.Equals(other.Timezone)) &&
                   (EachWayDivisor == other.EachWayDivisor || EachWayDivisor != null && EachWayDivisor.Equals(other.EachWayDivisor)) &&
                   (Regulators == other.Regulators || Regulators != null && Regulators.SequenceEqual(other.Regulators)) &&
                   (MarketType == other.MarketType || MarketType != null && MarketType.Equals(other.MarketType)) &&
                   (MarketBaseRate == other.MarketBaseRate || MarketBaseRate != null && MarketBaseRate.Equals(other.MarketBaseRate)) &&
                   (NumberOfWinners == other.NumberOfWinners || NumberOfWinners != null && NumberOfWinners.Equals(other.NumberOfWinners)) &&
                   (CountryCode == other.CountryCode || CountryCode != null && CountryCode.Equals(other.CountryCode)) &&
                   (InPlay == other.InPlay || InPlay != null && InPlay.Equals(other.InPlay)) &&
                   (BetDelay == other.BetDelay || BetDelay != null && BetDelay.Equals(other.BetDelay)) &&
                   (BspMarket == other.BspMarket || BspMarket != null && BspMarket.Equals(other.BspMarket)) &&
                   (BettingType == other.BettingType || BettingType != null && BettingType.Equals(other.BettingType)) &&
                   (NumberOfActiveRunners == other.NumberOfActiveRunners || NumberOfActiveRunners != null && NumberOfActiveRunners.Equals(other.NumberOfActiveRunners)) &&
                   (EventId == other.EventId || EventId != null && EventId.Equals(other.EventId)) &&
                   (CrossMatching == other.CrossMatching || CrossMatching != null && CrossMatching.Equals(other.CrossMatching)) &&
                   (RunnersVoidable == other.RunnersVoidable || RunnersVoidable != null && RunnersVoidable.Equals(other.RunnersVoidable)) &&
                   (TurnInPlayEnabled == other.TurnInPlayEnabled || TurnInPlayEnabled != null && TurnInPlayEnabled.Equals(other.TurnInPlayEnabled)) &&
                   (SuspendTime == other.SuspendTime || SuspendTime != null && SuspendTime.Equals(other.SuspendTime)) &&
                   (DiscountAllowed == other.DiscountAllowed || DiscountAllowed != null && DiscountAllowed.Equals(other.DiscountAllowed)) &&
                   (PersistenceEnabled == other.PersistenceEnabled || PersistenceEnabled != null && PersistenceEnabled.Equals(other.PersistenceEnabled)) &&
                   (Runners == other.Runners || Runners != null && Runners.SequenceEqual(other.Runners)) &&
                   (Version == other.Version || Version != null && Version.Equals(other.Version)) &&
                   (EventTypeId == other.EventTypeId || EventTypeId != null && EventTypeId.Equals(other.EventTypeId)) &&
                   (Complete == other.Complete || Complete != null && Complete.Equals(other.Complete)) &&
                   (OpenDate == other.OpenDate || OpenDate != null && OpenDate.Equals(other.OpenDate)) &&
                   (MarketTime == other.MarketTime || MarketTime != null && MarketTime.Equals(other.MarketTime)) &&
                   (BspReconciled == other.BspReconciled || BspReconciled != null && BspReconciled.Equals(other.BspReconciled)) &&
                   (Status == other.Status || Status != null && Status.Equals(other.Status)));
        }
Example #8
0
        public async Task <Stream> pullMarketData(MarketType market, int page)
        {
            var client = ClientForMarket;


            Stream val     = null;
            string request = $"EM_MutiSvcExpandInterface/api/js/get?type=HSGTHIS&token=70f12f2f4f091e459a279469fe49eca5&filter=(MarketType={(int)market})&js=var%20ANUtXcyP={{% 22data%22:(x),%22pages%22:(tp)}}&ps=50&p={page}&sr=-1&st=DetailDate&rt=52918531";



            HttpResponseMessage response = await client.GetAsync(request);

            if (response.IsSuccessStatusCode)
            {
                val = await response.Content.ReadAsStreamAsync();
            }
            else
            {
                throw new Exception($"从东方财富获取融资融券余额数据错误");
            }

            return(val);
        }
Example #9
0
        public static string FormatDisplayOrderNumber(string orderNumber, MarketType market)
        {
            var formatted = new string(orderNumber.Where(char.IsDigit).ToArray());

            if (market == MarketType.Shopify)
            {
                return(formatted);
            }
            if (market == MarketType.OverStock)
            {
                return(formatted);
            }

            if (formatted.Length >= 3)
            {
                formatted = Regex.Replace(formatted, "(.{3})(.*)", "$1" + "-" + "$2");
            }
            if (formatted.Length >= 11)
            {
                formatted = Regex.Replace(formatted, "(.{11})(.*)", "$1" + "-" + "$2");
            }
            return(formatted);
        }
        public RejectOrderCancellationToBuyerEmailInfo(IAddressService addressService,
                                                       string byName,
                                                       string orderNumber,
                                                       MarketType market,
                                                       string buyerName,
                                                       string buyerEmail,
                                                       string replyToSubject,
                                                       string replyToEmail) : base(addressService)
        {
            ByName = byName;
            Tag    = orderNumber;
            Market = market;

            ToName  = StringHelper.MakeEachWordFirstLetterUpper(buyerName);
            ToEmail = buyerEmail;

            ReplyToSubject = replyToSubject;

            if (String.IsNullOrEmpty(ToEmail))
            {
                ToEmail = replyToEmail;
            }
        }
        public string Add(MarketType type, int id)
        {
            if (!this.database.Products.ContainsKey(id))
            {
                throw new ArgumentException($"Product {id} does not exist");
            }

            if (this.database.ProductsByMarkets[type].ContainsKey(id))
            {
                throw new ArgumentException($"Product {id} is already registered to a market {type}");
            }

            var product = this.database.Products[id];

            while (this.database.ProductsByMarkets[type].Values.Sum(prod => prod.Size) + product.Size > (int)type)
            {
                type = Enum.GetValues(typeof(MarketType)).Cast <MarketType>().First(value => (int)value > (int)type);
            }

            this.database.ProductsByMarkets[type].Add(id, product);

            return($"Product {id} moved to market {type}");
        }
Example #12
0
        public async Task <Stream> pullMarketData(MarketType market)
        {
            var client = ClientForHuShenTong;


            Stream val     = null;
            string request = "hsgt/index.html";



            HttpResponseMessage response = await client.GetAsync(request);

            if (response.IsSuccessStatusCode)
            {
                val = await response.Content.ReadAsStreamAsync();
            }
            else
            {
                throw new Exception($"从东方财富数据中心获取沪股通,深股股通资金流入数据错误");
            }

            return(val);
        }
        public IList <StyleEntireDto> GetStyles(MarketType market, string marketplaceId)
        {
            using (var db = _dbFactory.GetRDb())
            {
                if (!String.IsNullOrEmpty(marketplaceId))
                {
                    marketplaceId = marketplaceId.ToUpper();
                }

                var items    = db.Items.GetAllViewAsDto().Where(i => i.Market == (int)market && i.MarketplaceId == marketplaceId).ToList();
                var styleIds = items.Where(i => i.StyleId.HasValue).Select(i => i.StyleId.Value).ToList();

                var styles        = db.Styles.GetAllAsDtoEx().Where(st => styleIds.Contains(st.Id)).ToList();
                var styleItems    = db.StyleItems.GetAllAsDto().Where(si => styleIds.Contains(si.StyleId)).ToList();
                var styleItemIds  = styleItems.Select(si => si.StyleItemId).ToList();
                var styleBarcodes = db.StyleItemBarcodes.GetAllAsDto().Where(si => styleItemIds.Contains(si.StyleItemId)).ToList();
                var styleImages   = db.StyleImages.GetAllAsDto().Where(sim => styleIds.Contains(sim.StyleId)).ToList();
                var styleFeatures = db.StyleFeatureValues.GetAllWithFeature().Where(st => styleIds.Contains(st.StyleId)).ToList();
                styleFeatures.AddRange(db.StyleFeatureTextValues.GetAllWithFeature().Where(st => styleIds.Contains(st.StyleId)).ToList());

                IList <StyleEntireDto> results = new List <StyleEntireDto>();
                foreach (var style in styles)
                {
                    style.StyleItems = styleItems.Where(si => si.StyleId == style.Id).ToList();
                    foreach (var si in style.StyleItems)
                    {
                        si.Barcodes = styleBarcodes.Where(sib => sib.StyleItemId == si.StyleItemId).ToList();
                    }
                    style.Images        = styleImages.Where(sim => sim.StyleId == style.Id).ToList();
                    style.StyleFeatures = styleFeatures.Where(sf => sf.StyleId == style.Id).ToList();

                    results.Add(style);
                }

                return(results);
            }
        }
        public List <ItemDTO> GetByParentASINAsDto(MarketType market, string marketplaceId, string parentAsin)
        {
            var listingsQuery = unitOfWork.Listings.GetAll();

            if (market != MarketType.None)
            {
                listingsQuery = listingsQuery.Where(l => l.Market == (int)market);
            }
            if (!String.IsNullOrEmpty(marketplaceId))
            {
                listingsQuery = listingsQuery.Where(l => l.MarketplaceId == marketplaceId);
            }

            var query = from i in unitOfWork.GetSet <ViewItem>()
                        join l in listingsQuery on i.Id equals l.ItemId
                        where i.ParentASIN == parentAsin &&
                        l.IsRemoved == false &&
                        l.IsFBA == false
                        select new ItemDTO
            {
                ASIN         = i.ASIN,
                SKU          = l.SKU,
                Size         = i.Size,
                Color        = i.Color,
                StyleColor   = i.StyleColor,
                StyleSize    = i.StyleSize,
                Weight       = i.Weight,
                StyleItemId  = i.StyleItemId,
                StyleString  = i.StyleString,
                StyleId      = i.StyleId,
                RealQuantity = i.RealQuantity,
                CurrentPrice = i.CurrentPrice,
            };

            return(query.ToList());
        }
        public static IList <ExcelWFSProductUSViewModel> GetItemsFor(ILogService log,
                                                                     ITime time,
                                                                     IMarketCategoryService categoryService,
                                                                     IHtmlScraperService htmlScraper,
                                                                     IMarketApi marketApi,
                                                                     IUnitOfWork db,
                                                                     CompanyDTO company,
                                                                     string asin,
                                                                     ExportToExcelMode exportMode,
                                                                     IList <FBAItemInfo> fbaItems,
                                                                     MarketType market,
                                                                     string marketplaceId,
                                                                     UseStyleImageModes useStyleImageMode,
                                                                     out string filename)
        {
            filename = null;

            var items = ItemExportHelper.GetParentItemAndChilds(log,
                                                                time,
                                                                htmlScraper,
                                                                marketApi,
                                                                db,
                                                                company,
                                                                asin,
                                                                fbaItems,
                                                                exportMode,
                                                                market,
                                                                marketplaceId);

            var parent   = items.Item1; // db.ParentItems.GetAsDTO(asin);
            var children = items.Item2; // db.Items.GetAllActualExAsDto().Where(i => i.ParentASIN == asin).ToList();

            var models = GetItemsFor(db, categoryService, exportMode, fbaItems, parent, children, useStyleImageMode, out filename);

            return(models);
        }
Example #16
0
        public decimal GetMarketPrice(decimal sourcePrice,
                                      decimal?sourceSFPPrice,
                                      bool isPrime,
                                      bool isFBA,
                                      double?weight,
                                      MarketType market,
                                      string marketplaceId,
                                      IDictionary <string, decimal?> rateForMarketplace)
        {
            var defaultPrice = GetMarketDefaultPrice(sourcePrice,
                                                     market,
                                                     marketplaceId,
                                                     rateForMarketplace);

            var resultPrice = ApplyMarketSpecified(defaultPrice,
                                                   sourceSFPPrice,
                                                   market,
                                                   marketplaceId,
                                                   weight,
                                                   isPrime,
                                                   isFBA);

            return(resultPrice ?? sourcePrice);
        }
Example #17
0
        static void Main(string[] args)
        {
            var lines = File.ReadAllLines(@"C:\sync\603R\sources\NoMoreBeer\NoMoreBeer\data\stock.csv");

            List <Stock> stocks = new List <Stock>(lines.Length);

            foreach (var line in lines)
            {
                var tokens = line.Split(',');

                var stockName    = tokens[1];
                var trashStrings = TrashChars.ToCharArray().Select(x => x.ToString());
                foreach (var trash in trashStrings)
                {
                    stockName = stockName.Replace(trash, "");
                }

                MarketType market = tokens[2] == "p" ? MarketType.Kospi : MarketType.Kosdaq;

                Stock stock = new Stock(stockName, tokens[0], market);
                stocks.Add(stock);
            }

            stocks = stocks.Distinct(new StockComparer()).ToList();

            StringWriter writer = new StringWriter();

            foreach (var stock in stocks)
            {
                writer.WriteLine($@"public const string {stock.Name} = ""{stock.YahooName}"";");
            }

            string code = string.Format(_template, writer.ToString());

            File.WriteAllText(@"C:\sync\603R\sources\NoMoreBeer\NoMoreBeer\generated\Stock.cs", code);
        }
        public SweepUnitContext_Bond_Long_StartWithDone(
            RemainPositionDatum datum,
            Account bondAccount,
            ISweeper sweeper)
        {
            this.ID = SweepUnitIDManager.NextID++;

            this.LongShort = TradingDirection.Long;

            this.InitSignedGoalCount = datum.CurTargetCount;
            this.CurSignedTargetCount = datum.CurTargetCount;

            this.EnterCode = datum.EnterCodeWithMarketType;
            this._initEnterPrice = datum.EnterPrice;

            this.BondAccount = bondAccount;

            this._enterMarketType = BondUtil.GetMarketType(this.EnterCode);

            this._sweeper = sweeper;

            this._signedContractedCount = datum.CurTargetCount;
            this._signedBookValue = (long)(datum.EnterPrice * datum.CurTargetCount);
        }
Example #19
0
        public async Task <SlotType> GetActiveSlotAsync(MarketType marketType)
        {
            if (_activeSlot != null)
            {
                return(_activeSlot.Value);
            }

            var key = GetActiveSlotKey(marketType);

            var value = await _database.StringGetAsync(key);

            if (value.HasValue)
            {
                _activeSlot = Enum.Parse <SlotType>(value);
            }
            else
            {
                await _database.StringSetAsync(key, SlotType.Slot0.ToString());

                _activeSlot = SlotType.Slot0;
            }

            return(_activeSlot.Value);
        }
        public AlreadyShippedEmailInfo(IAddressService addressService,
                                       string byName,
                                       string orderNumber,
                                       MarketType market,
                                       IList <ListingOrderDTO> items,
                                       string carrier,
                                       string trackingNumber,
                                       AddressDTO address,
                                       string buyerName,
                                       string buyerEmail) : base(addressService)
        {
            ByName = byName;
            Tag    = orderNumber;
            Market = market;

            Items          = items;
            Carrier        = carrier;
            TrackingNumber = trackingNumber;

            FullAddress = AddressHelper.ToStringForLetterWithPersonName(address);

            ToName  = StringHelper.MakeEachWordFirstLetterUpper(buyerName);
            ToEmail = buyerEmail;
        }
Example #21
0
        /// <summary>
        /// Get all order status.
        /// </summary>
        /// <param name="openonly">Default is 'true'. Only open orders are returned.</param>
        /// <param name="markets">Default to “BTCCNY”. [ BTCCNY | LTCCNY | LTCBTC | ALL]</param>
        /// <param name="limit">Limit the number of transactions, default value is 1000.</param>
        /// <param name="offset">Start index used for pagination, default value is 0.</param>
        /// <param name="withdetails">Return the trade details or not for this order. Can be set to true, false. Default to false, no detail will be returned.</param>
        /// <returns>JSON-string of order objects</returns>
        public IEnumerable <Order> getOrders(bool openonly = true, MarketType markets = MarketType.BTCCNY, uint limit = 1000, uint offset = 0, bool withdetails = false)
        {
            //due to the complexity of parameters, all default values are explicitly set.
            const string method  = "getOrders";
            string       mParams = openonly.ToString(CultureInfo.InvariantCulture).ToLowerInvariant() +
                                   ",\"" + System.Enum.GetName(typeof(MarketType), markets) + "\"," +
                                   limit.ToString(CultureInfo.InvariantCulture) + "," +
                                   offset.ToString(CultureInfo.InvariantCulture) + "," +
                                   withdetails.ToString(CultureInfo.InvariantCulture).ToLowerInvariant();
            var response = DoMethod(BuildParams(method, mParams));

            var jobj = JObject.Parse(response);

            if (jobj["result"] != null)
            {
                var orders = jobj["result"]["order"];
                foreach (var orderItem in orders)
                {
                    var order = Order.ReadFromJObject(orderItem);
                    yield return(order);
                }
            }
            ;
        }
Example #22
0
 public static QueryParam ToQueryParam(this MarketType value, string param_name)
 {
     return(new QueryParam(param_name, value));
 }
        List<long> GetReqCounts(LongShortCount lsc, MarketType marketType)
        {
            List<long> list = new List<long>();

            if (marketType == MarketType._0_Bond_일반)
            {
                // 한큐에 주문을 낸다.
                list.Add((long)lsc.Count);
            }
            else if (marketType == MarketType._1_Bond_소액)
            {
                long curCount = (long)lsc.Count;

                const long k50_000_000 = 50 * CommonConst._1_000 * CommonConst._1_000;

                while (true)
                {
                    if (curCount <= 0)
                    {
                        break;
                    }

                    if (curCount <= k50_000_000)
                    {
                        list.Add(curCount);
                        break;
                    }

                    list.Add(k50_000_000);
                    curCount -= (k50_000_000);
                }
            }
            else if (marketType == MarketType._2_Bond_소매)
            {
                // 소매시장인 경우라면 한큐에 몽땅낸다.
                list.Add((long)lsc.Count);
            }
            return list;
        }
Example #24
0
 public override ILineParser GetLineParser(ILogService log, MarketType market, string marketplaceId)
 {
     return(new ListingDefectLineParser(log));
 }
        public void Update(IUnitOfWork db,
                           ILogService log,
                           ISystemActionService actionService,
                           IPriceManager priceManager,
                           MarketType market,
                           string marketplaceId,
                           DateTime when,
                           long?by)
        {
            var parentItem = db.ParentItems.Get(Id);

            if (parentItem != null)
            {
                var childItems = db.Items.GetListingsByParentASIN(market, marketplaceId, parentItem.ASIN);

                if (ChangePriceOffset.HasValue)
                {
                    foreach (var childItem in childItems)
                    {
                        log.Info("Child price was changed, from=" + childItem.CurrentPrice + ", to=" +
                                 (childItem.CurrentPrice + ChangePriceOffset.Value));

                        var oldPrice = childItem.CurrentPrice;
                        childItem.CurrentPrice        += ChangePriceOffset.Value;
                        childItem.CurrentPriceInUSD    = PriceHelper.RougeConvertToUSD(childItem.CurrentPriceCurrency, childItem.CurrentPrice);
                        childItem.PriceUpdateRequested = true;

                        priceManager.LogListingPrice(db,
                                                     PriceChangeSourceType.ParentItemOffset,
                                                     childItem.Id,
                                                     childItem.SKU,
                                                     childItem.CurrentPrice,
                                                     oldPrice,
                                                     when,
                                                     by);
                    }
                    db.Commit();
                }

                parentItem.SKU              = SKU;
                parentItem.OnHold           = OnHold;
                parentItem.LockMarketUpdate = LockMarketUpdate;

                if (parentItem.ManualImage != ManualImage)
                {
                    log.Info("Image changed: " + parentItem.ManualImage + " => " + ManualImage);
                    parentItem.ManualImage = ManualImage;

                    if (!MarketHelper.IsAmazon((MarketType)parentItem.Market))
                    {
                        foreach (var child in childItems)
                        {
                            var newAction = new SystemActionDTO()
                            {
                                ParentId  = null,
                                Status    = (int)SystemActionStatus.None,
                                Type      = (int)SystemActionType.UpdateOnMarketProductImage,
                                Tag       = child.Id.ToString(),
                                InputData = null,

                                CreateDate = when,
                                CreatedBy  = null,
                            };
                            db.SystemActions.AddAction(newAction);
                        }
                    }
                }

                parentItem.UpdateDate = when;
                parentItem.UpdatedBy  = by;

                db.Commit();

                var lastComment = db.ProductComments.UpdateComments(
                    Comments.Select(c => new CommentDTO()
                {
                    Id      = c.Id,
                    Message = c.Comment
                }).ToList(),
                    Id,
                    when,
                    by);

                Comment = lastComment != null ? lastComment.Message : "";
            }
        }
Example #26
0
        public MarketSettingInfo GetServiceSetting(MarketType type)
        {
            var model = Context.MarketSettingInfo.FirstOrDefault(m => m.TypeId == type);

            return(model);
        }
Example #27
0
 public QueryParam(string name, MarketType value)
 {
     Name  = name;
     Value = value.ToValue();
 }
Example #28
0
 public Securities(SecuritiesTypes secType, MarketType marketType, String code)
 {
     this.Type = secType;
     this.MarketType = marketType;
     this.Symbol = code + "." + marketType.ToString();
 }
 /// <summary>
 /// Get order status.
 /// </summary>
 /// <param name="orderID">The order id.</param>
 /// <param name="markets">Default to “BTCCNY”. [ BTCCNY | LTCCNY | LTCBTC ]</param>
 /// <returns>JSON-string of order object.</returns>
 public string getOrder(uint orderID, MarketType markets = MarketType.BTCCNY)
 {
     if (markets == MarketType.ALL)
         throw new BTCChinaException("getOrder", "N/A", "Market: ALL is not supported.");
     else
     {
         string method = "getOrder";
         string mParams = orderID.ToString();
         if (markets != MarketType.BTCCNY)
             mParams += ",\"" + System.Enum.GetName(typeof(MarketType), markets) + "\"";
         return DoMethod(BuildParams(method, mParams));
     }
 }
Example #30
0
        private XmlDocument ComposeDocument(IUnitOfWork db,
                                            MarketType market,
                                            string marketplaceId,
                                            IList <string> skuList,
                                            string merchantId,
                                            string type,
                                            out int nodesCount,
                                            out IList <FeedItemDTO> feedItems)
        {
            var             toDate = Time.GetAppNowTime().Subtract(IntervalBetweenAttempts);
            IList <ItemDTO> dtoItems;

            if (skuList == null || !skuList.Any())
            {
                var requestInfoes = db.SystemActions.GetAllAsDto()
                                    .Where(a => a.Type == (int)SystemActionType.UpdateOnMarketProductImage &&
                                           a.Status == (int)SystemActionStatus.None &&
                                           (!a.AttemptDate.HasValue || a.AttemptDate < toDate))
                                    .OrderByDescending(a => a.CreateDate)
                                    .ToList();

                var tags    = requestInfoes.Select(i => i.Tag).ToList();
                var itemIds = tags.Select(i => StringHelper.TryGetLong(i)).ToList().Where(i => i.HasValue).Select(i => i.Value).ToList();

                dtoItems = (from i in db.Items.GetAllViewAsDto()
                            join pi in db.ParentItems.GetAll() on new { i.ParentASIN, i.Market, i.MarketplaceId } equals new { ParentASIN = pi.ASIN, pi.Market, pi.MarketplaceId }
                            where itemIds.Contains(i.Id) &&
                            !pi.LockMarketUpdate &&
                            (i.PublishedStatus == (int)PublishedStatuses.Published ||
                             i.PublishedStatus == (int)PublishedStatuses.New ||
                             i.PublishedStatus == (int)PublishedStatuses.None ||
                             i.PublishedStatus == (int)PublishedStatuses.PublishedInactive ||
                             i.PublishedStatus == (int)PublishedStatuses.PublishedInProgress ||
                             i.PublishedStatus == (int)PublishedStatuses.PublishingErrors ||
                             i.PublishedStatus == (int)PublishedStatuses.HasChanges) &&
                            i.Market == (int)market &&
                            (String.IsNullOrEmpty(marketplaceId) || i.MarketplaceId == marketplaceId)
                            select i).ToList();

                foreach (var dtoItem in dtoItems)
                {
                    var requestInfo = requestInfoes.FirstOrDefault(i => i.Tag == dtoItem.Id.ToString());
                    dtoItem.Id = (int)(requestInfo?.Id ?? 0);
                }
            }
            else
            {
                dtoItems = db.Items.GetAllViewAsDto()
                           .Where(i => i.Market == (int)market &&
                                  (String.IsNullOrEmpty(marketplaceId) || i.MarketplaceId == marketplaceId) &&
                                  i.StyleItemId.HasValue &&
                                  i.StyleId.HasValue &&
                                  skuList.Contains(i.SKU))
                           .ToList();
                dtoItems.ForEach(i => i.Id = 0);
            }

            //TEMP: prevent udpate manually changes of images
            //dtoItems = dtoItems.Where(i => (i.PublishedStatus != (int)PublishedStatuses.Published || i.IsExistOnAmazon == false || i.IsExistOnAmazon == null) && !(i.IsExistOnAmazon == true)).ToList();

            var parentASINs = dtoItems.Select(i => i.ParentASIN).ToList();
            var parentItems = db.ParentItems.GetAllAsDto()
                              .Where(pi => parentASINs.Contains(pi.ASIN) &&
                                     pi.Market == (int)market &&
                                     pi.MarketplaceId == marketplaceId).ToList();

            var styleIdList       = dtoItems.Where(i => i.StyleId.HasValue).Select(i => i.StyleId.Value).ToList();
            var allStyleImageList = db.StyleImages
                                    .GetAllAsDto()
                                    .Where(sim => styleIdList.Contains(sim.StyleId) && !sim.IsSystem)
                                    .ToList()
                                    .OrderByDescending(im => ImageHelper.GetSortIndex(im.Category))
                                    .ThenByDescending(im => im.IsDefault)
                                    .ThenBy(im => im.Id)
                                    .ToList();

            nodesCount = allStyleImageList.Count;

            if (allStyleImageList.Any())
            {
                Log.Info("Items to submit=" + String.Join(", ", dtoItems.Select(i => i.SKU).ToList()));

                var newFeed = new Feed()
                {
                    Market        = (int)market,
                    MarketplaceId = marketplaceId,
                    Type          = (int)Type,
                    Status        = (int)FeedStatus.Submitted,
                    SubmitDate    = Time.GetAppNowTime()
                };
                db.Feeds.Add(newFeed);
                db.Commit();

                Log.Info("Feed id=" + newFeed.Id);

                var builder = new ProductImageFeedBuilder();
                var items   = builder.Build(
                    dtoItems,
                    parentItems,
                    allStyleImageList);

                feedItems = items
                            .Select(i => new FeedItemDTO()
                {
                    FeedId    = newFeed.Id,
                    MessageId = i.MessageID,
                    ItemId    = i.Id ?? 0
                }).ToList();

                var xml = builder.ToXmlFeed(items,
                                            merchantId,
                                            Type.ToString());

                var doc = new XmlDocument();
                doc.LoadXml(xml);
                return(doc);
            }

            feedItems = new List <FeedItemDTO>();
            return(null);
        }
Example #31
0
        public static Market GetTrades(MarketType _type)
        {
            string _url = "";
            switch (_type)
            {
                case MarketType.BTC: _url = "https://market.huobi.com/staticmarket/detail.html"; break;
                case MarketType.LTC: _url = "https://market.huobi.com/staticmarket/detail_ltc.html"; break;
            }

            string _result = "";
            JObject _json;

            while(true)
            {
                _result = Get(_url);
                _result = _result.Replace("view_detail(", "");
                _result = _result.Substring(0, _result.LastIndexOf("}") + 1);
                try
                {
                    _json = JObject.Parse(_result);
                    break;
                }
                catch
                {
                    Thread.Sleep(1000);
                }
            }

            Market _market = new Market();
            _market.New = _json["p_new"].Value<decimal>();
            _market.Open = _json["p_open"].Value<decimal>();
            _market.Close = _json["p_last"].Value<decimal>();
            _market.High = _json["p_high"].Value<decimal>();
            _market.Low = _json["p_low"].Value<decimal>();
            _market.Level = _json["level"].Value<decimal>();
            _market.Volume = _json["amount"].Value<decimal>();
            _market.Total = _json["total"].Value<decimal>();
            _market.AMP = _json["amp"].Value<decimal>();

            _market.Buys = new MarketTrade[_json["buys"].Count()];
            for (int i = 0; i < _market.Buys.Length; i++)
            {
                MarketTrade _trade = new MarketTrade();
                _trade.Price = _json["buys"][i]["price"].Value<decimal>();
                _trade.Level = _json["buys"][i]["level"].Value<decimal>();
                _trade.Volume = _json["buys"][i]["amount"].Value<decimal>();
                _market.Buys[i] = _trade;
            }

            _market.Sells = new MarketTrade[_json["sells"].Count()];
            for (int i = 0; i < _market.Sells.Length; i++)
            {
                MarketTrade _trade = new MarketTrade();
                _trade.Price = _json["sells"][i]["price"].Value<decimal>();
                _trade.Level = _json["sells"][i]["level"].Value<decimal>();
                _trade.Volume = _json["sells"][i]["amount"].Value<decimal>();
                _market.Sells[i] = _trade;
            }

            _market.TopBuys = new MarketTrade5[_json["top_buy"].Count()];
            for (int i = 0; i < _market.TopBuys.Length; i++)
            {
                MarketTrade5 _trade = new MarketTrade5();
                _trade.Price = _json["top_buy"][i]["price"].Value<decimal>();
                _trade.Level = _json["top_buy"][i]["level"].Value<decimal>();
                _trade.Volume = _json["top_buy"][i]["amount"].Value<decimal>();
                _trade.ACCU = _json["top_buy"][i]["accu"].Value<decimal>();
                _market.TopBuys[i] = _trade;
            }

            _market.TopSells = new MarketTrade5[_json["top_sell"].Count()];
            for (int i = 0; i < _market.TopSells.Length; i++)
            {
                MarketTrade5 _trade = new MarketTrade5();
                if (_type == MarketType.LTC)
                {
                    _trade.Price = _json["top_sell"][(4 - i).ToString()]["price"].Value<decimal>();
                    _trade.Level = _json["top_sell"][(4 - i).ToString()]["level"].Value<decimal>();
                    _trade.Volume = _json["top_sell"][(4 - i).ToString()]["amount"].Value<decimal>();
                    _trade.ACCU = _json["top_sell"][(4 - i).ToString()]["accu"].Value<decimal>();
                }
                else
                {
                    _trade.Price = _json["top_sell"][i]["price"].Value<decimal>();
                    _trade.Level = _json["top_sell"][i]["level"].Value<decimal>();
                    _trade.Volume = _json["top_sell"][i]["amount"].Value<decimal>();
                    _trade.ACCU = _json["top_sell"][i]["accu"].Value<decimal>();
                }
                _market.TopSells[i] = _trade;
            }

            _market.Trades = new MarketTraded[_json["trades"].Count()];
            for (int i = 0; i < _market.Trades.Length; i++)
            {
                MarketTraded _trade = new MarketTraded();
                _trade.Time = _json["trades"][i]["time"].Value<string>();
                _trade.Price = _json["trades"][i]["price"].Value<decimal>();
                _trade.Volume = _json["trades"][i]["amount"].Value<decimal>();
                _trade.Type = _json["trades"][i]["type"].Value<string>();
                _market.Trades[i] = _trade;
            }

            return _market;
        }
Example #32
0
 public static string ToValue(this MarketType value)
 {
     return(value.ToString().ToLower());
 }
Example #33
0
 public static extern string ES_ConvetString2MarketType(MarketType market);
        //public static SalesGraphViewModel ComposeByStyleItemId(IUnitOfWork db,
        //    long styleItemId,
        //    int periodValue)
        //{
        //    var labels = new List<string> { };
        //    var seriesLabels = new List<string>();
        //    var allDates = new List<DateTime>();
        //    var series = new List<List<int>>();
        //    var period = (SalesPeriod)periodValue;

        //    DateTime? startDate = null;
        //    DateTime endDate = DateHelper.GetAppNowTime().Date;

        //    //NOTE: marketplaceId specially settings to "", show Sales Graph for all marketplaces into current market
        //    var itemsBySKUQuery = db.Items.GetSalesInfoBySKU();

        //    itemsBySKUQuery = itemsBySKUQuery.Where(q => q.StyleItemId == styleItemId);

        //    if (period != SalesPeriod.Overall)
        //    {
        //        startDate = endDate;
        //        var requestFromDate = startDate.Value;
        //        switch (period)
        //        {
        //            case SalesPeriod.Week:
        //                startDate = endDate.AddDays(-7);
        //                requestFromDate = startDate.Value;
        //                break;
        //            case SalesPeriod.TwoWeeks:
        //                startDate = endDate.AddDays(-14);
        //                requestFromDate = startDate.Value;
        //                break;
        //            case SalesPeriod.TwoMonth:
        //                startDate = endDate.AddMonths(-2);
        //                requestFromDate = startDate.Value.AddDays(-7); //NOTE: with a reserve
        //                break;
        //            case SalesPeriod.Year:
        //                startDate = endDate.AddYears(-1);
        //                requestFromDate = startDate.Value;
        //                break;
        //        }
        //        itemsBySKUQuery = itemsBySKUQuery.Where(q => q.Date >= requestFromDate);
        //    }

        //    var items = itemsBySKUQuery.ToList();

        //    if (!startDate.HasValue)
        //        startDate = items.Min(i => (DateTime?)i.Date);
        //    startDate = startDate ?? endDate;

        //    var date = endDate;
        //    if (period == SalesPeriod.TwoMonth)
        //        date = DateHelper.FindPrevousMonday(endDate); //Begin of week
        //    while (date > startDate.Value.Date)
        //    {
        //        allDates.Insert(0, new DateTime(date.Year, date.Month, date.Day));
        //        labels.Insert(0, DateToLabel(date, period));

        //        switch (period)
        //        {
        //            case SalesPeriod.Week:
        //            case SalesPeriod.TwoWeeks:
        //                date = date.AddDays(-1);
        //                break;
        //            case SalesPeriod.TwoMonth:
        //                date = date.AddDays(-7);
        //                break;
        //            case SalesPeriod.Year:
        //            case SalesPeriod.Overall:
        //                date = date.AddMonths(-1);
        //                break;
        //            default:
        //                throw new NotImplementedException("Sales Period");
        //        }
        //    }
        //    //NOTE: Add start date interval
        //    allDates.Insert(0, new DateTime(date.Year, date.Month, date.Day));
        //    labels.Insert(0, DateToLabel(date, period));

        //    var saleGraph = new List<int>();
        //    for (int i = 0; i < allDates.Count; i++)
        //    {
        //        var fromDate = allDates[i];
        //        var toDate = i == allDates.Count - 1 ? endDate.AddDays(1) : allDates[i + 1];

        //        IList<PurchaseByDateDTO> dateItems;
        //        if (period == SalesPeriod.Year || period == SalesPeriod.Overall)
        //            dateItems = items.Where(d => d.Date.Month == allDates[i].Month
        //                                            && d.Date.Year == allDates[i].Year
        //                                            && d.StyleItemId == styleItemId).ToList();
        //        else
        //            dateItems = items.Where(d => d.Date >= fromDate
        //                                            && d.Date < toDate
        //                                            && d.StyleItemId == styleItemId).ToList();


        //        saleGraph.Add(dateItems.Sum(d => d.Quantity));
        //    }

        //    series.Add(saleGraph);

        //    return new SalesGraphViewModel()
        //    {
        //        SeriesLabels = new List<string>() { "" },
        //        Sales = series,
        //        LabelsX = labels,
        //    };
        //}

        public static SalesGraphViewModel ComposeByParams(IUnitOfWork db,
                                                          MarketType market,
                                                          string marketplaceId,
                                                          string[] skuList,
                                                          long[] styleItemIdList,
                                                          int periodValue)
        {
            var labels       = new List <string> {
            };
            var seriesLabels = new List <string>();
            var allDates     = new List <DateTime>();
            var series       = new List <List <int> >();
            var period       = (SalesPeriod)periodValue;

            DateTime?startDate = null;
            DateTime endDate   = DateHelper.GetAppNowTime().Date;

            //NOTE: marketplaceId specially settings to "", show Sales Graph for all marketplaces into current market
            var itemsBySKUQuery = db.Items.GetSalesInfoBySKU();

            if (market != MarketType.None)
            {
                itemsBySKUQuery = itemsBySKUQuery.Where(p => p.Market == (int)market);
            }

            if (!String.IsNullOrEmpty(marketplaceId))
            {
                itemsBySKUQuery = itemsBySKUQuery.Where(p => p.MarketplaceId == marketplaceId);
            }

            if (skuList != null && skuList.Any())
            {
                itemsBySKUQuery = itemsBySKUQuery.Where(q => skuList.Contains(q.SKU));
            }

            if (styleItemIdList != null && styleItemIdList.Any())
            {
                itemsBySKUQuery = itemsBySKUQuery.Where(q => styleItemIdList.Contains(q.StyleItemId));
            }

            if (period != SalesPeriod.Overall)
            {
                startDate = endDate;
                var requestFromDate = startDate.Value;
                switch (period)
                {
                case SalesPeriod.Week:
                    startDate       = endDate.AddDays(-7);
                    requestFromDate = startDate.Value;
                    break;

                case SalesPeriod.TwoWeeks:
                    startDate       = endDate.AddDays(-14);
                    requestFromDate = startDate.Value;
                    break;

                case SalesPeriod.TwoMonth:
                    startDate       = endDate.AddMonths(-2);
                    requestFromDate = startDate.Value.AddDays(-7);     //NOTE: with a reserve
                    break;

                case SalesPeriod.Year:
                    startDate       = endDate.AddYears(-1);
                    requestFromDate = startDate.Value;
                    break;
                }
                itemsBySKUQuery = itemsBySKUQuery.Where(q => q.Date >= requestFromDate);
            }

            var items = itemsBySKUQuery.ToList();

            if (!startDate.HasValue)
            {
                startDate = items.Min(i => (DateTime?)i.Date);
            }
            startDate = startDate ?? endDate;

            var date = endDate;

            if (period == SalesPeriod.TwoMonth)
            {
                date = DateHelper.FindPrevousMonday(endDate); //Begin of week
            }
            while (date > startDate.Value.Date)
            {
                allDates.Insert(0, new DateTime(date.Year, date.Month, date.Day));
                labels.Insert(0, DateToLabel(date, period));

                switch (period)
                {
                case SalesPeriod.Week:
                case SalesPeriod.TwoWeeks:
                    date = date.AddDays(-1);
                    break;

                case SalesPeriod.TwoMonth:
                    date = date.AddDays(-7);
                    break;

                case SalesPeriod.Year:
                case SalesPeriod.Overall:
                    date = date.AddMonths(-1);
                    break;

                default:
                    throw new NotImplementedException("Sales Period");
                }
            }
            //NOTE: Add start date interval
            allDates.Insert(0, new DateTime(date.Year, date.Month, date.Day));
            labels.Insert(0, DateToLabel(date, period));

            if (skuList != null)
            {
                foreach (var sku in skuList)
                {
                    var saleGraph = new List <int>();
                    for (int i = 0; i < allDates.Count; i++)
                    {
                        var fromDate = allDates[i];
                        var toDate   = i == allDates.Count - 1 ? endDate.AddDays(1) : allDates[i + 1];

                        IList <PurchaseByDateDTO> dateItems;
                        if (period == SalesPeriod.Year || period == SalesPeriod.Overall)
                        {
                            dateItems = items.Where(d => d.Date.Month == allDates[i].Month &&
                                                    d.Date.Year == allDates[i].Year &&
                                                    d.SKU == sku).ToList();
                        }
                        else
                        {
                            dateItems = items.Where(d => d.Date >= fromDate &&
                                                    d.Date < toDate &&
                                                    d.SKU == sku).ToList();
                        }


                        saleGraph.Add(dateItems.Sum(d => d.Quantity));
                    }

                    series.Add(saleGraph);
                }

                return(new SalesGraphViewModel()
                {
                    SeriesLabels = skuList,
                    Sales = series,
                    LabelsX = labels,
                });
            }

            if (styleItemIdList != null)
            {
                var styleItems = db.StyleItems.GetAllAsDto()
                                 .Where(si => styleItemIdList.Contains(si.StyleItemId))
                                 .ToList()
                                 .OrderBy(si => SizeHelper.GetSizeIndex(si.Size))
                                 .ThenBy(si => si.Color)
                                 .ThenBy(si => si.StyleItemId)
                                 .ToList();

                foreach (var styleItem in styleItems)
                {
                    var saleGraph = new List <int>();
                    for (int i = 0; i < allDates.Count; i++)
                    {
                        var fromDate = allDates[i];
                        var toDate   = i == allDates.Count - 1 ? endDate.AddDays(1) : allDates[i + 1];

                        IList <PurchaseByDateDTO> dateItems;
                        if (period == SalesPeriod.Year || period == SalesPeriod.Overall)
                        {
                            dateItems = items.Where(d => d.Date.Month == allDates[i].Month &&
                                                    d.Date.Year == allDates[i].Year &&
                                                    d.StyleItemId == styleItem.StyleItemId).ToList();
                        }
                        else
                        {
                            dateItems = items.Where(d => d.Date >= fromDate &&
                                                    d.Date < toDate &&
                                                    d.StyleItemId == styleItem.StyleItemId).ToList();
                        }


                        saleGraph.Add(dateItems.Sum(d => d.Quantity));
                    }

                    series.Add(saleGraph);
                }

                return(new SalesGraphViewModel()
                {
                    SeriesLabels = styleItems.Select(si => StringHelper.JoinTwo("/", si.Size, si.Color)).ToList(),
                    Sales = series,
                    LabelsX = labels,
                });
            }
            return(null);
        }
        void RequestSmallRetailSyncShortOrder(long syncCount, MarketType marketType)
        {
            // 1000으로 딱떨어져야 한다.
            Trace.Assert(syncCount % CommonConst._1_000 == 0);

            if (syncCount > CommonConst._1_000)
            {
                // 1000원보다 크다. 바로바로 매도한다.
                List<long> reqCounts = SplitCountForSweepOrdersViaMarketType(new LongShortCount((-1) * syncCount), marketType);

                foreach (long reqCount in reqCounts)
                {
                    RequestSyncShortOrder_Raw(reqCount);
                }
            }
        }
Example #36
0
        public ActiveMarketServiceInfo GetMarketService(long shopId, MarketType type)
        {
            var model = Context.ActiveMarketServiceInfo.FirstOrDefault(m => m.TypeId == type && m.ShopId == shopId);

            return(model);
        }
 public override DateTime?GetLastSyncDate(ISettingsService settings, MarketType market, string marketplaceId)
 {
     return(settings.GetListingsReadDate(market, marketplaceId));
 }
Example #38
0
        public void OrderMarketService(int monthCount, long shopId, MarketType type)
        {
            if (shopId <= 0)
            {
                throw new HimallException("ShopId不能识别");
            }
            if (monthCount <= 0)
            {
                throw new HimallException("购买服务时长必须大于零");
            }
            var shop = Context.ShopInfo.FindById(shopId);

            if (shop == null || shopId <= 0)
            {
                throw new HimallException("ShopId不能识别");
            }
            var market    = Context.ActiveMarketServiceInfo.Where(a => a.ShopId == shopId && a.TypeId == type).FirstOrDefault();
            var price     = Context.MarketSettingInfo.Where(a => a.TypeId == type).Select(a => a.Price).FirstOrDefault();
            var StartTime = DateTime.Now;
            MarketServiceRecordInfo model = new MarketServiceRecordInfo();

            model.StartTime = StartTime;
            model.Price     = price * monthCount;
            var shopAccount = Context.ShopAccountInfo.Where(a => a.ShopId == shopId).FirstOrDefault(); //店铺帐户信息

            if (shopAccount.Balance < model.Price)                                                     //店铺余额不足以支付服务费用
            {
                throw new HimallException("您的店铺余额为:" + shopAccount.Balance + "元,不足以支付此次营销服务购买费用,请先充值。");
            }
            if (market != null)
            {
                var maxTime = market.MarketServiceRecordInfo.Max(a => a.EndTime);
                if (maxTime > DateTime.Now) //如果结束时间大于当前时间,续费从结束时间加上购买月数,否则从当前时间加上购买月数
                {
                    StartTime = maxTime;
                }
                model.StartTime = StartTime;
                model.BuyTime   = DateTime.Now;
                model.EndTime   = StartTime.AddMonths(monthCount);
                // model.MarketServiceId = market.Id;
                model.SettlementFlag = 1;
                market.MarketServiceRecordInfo.Add(model);
            }
            else
            {
                model.StartTime      = StartTime;
                model.EndTime        = StartTime.AddMonths(monthCount);
                model.SettlementFlag = 1;
                model.BuyTime        = DateTime.Now;
                ActiveMarketServiceInfo activeMarketServiceInfo = new Model.ActiveMarketServiceInfo();
                activeMarketServiceInfo.ShopId   = shopId;
                activeMarketServiceInfo.ShopName = shop.ShopName;
                activeMarketServiceInfo.TypeId   = type;
                activeMarketServiceInfo.MarketServiceRecordInfo.Add(model);
                Context.ActiveMarketServiceInfo.Add(activeMarketServiceInfo);
            }
            Context.SaveChanges();
            var ShopAccount          = Context.ShopAccountInfo.FirstOrDefault(a => a.ShopId == shopId);
            ShopAccountItemInfo info = new ShopAccountItemInfo();

            info.IsIncome        = false;
            info.ShopId          = shopId;
            info.DetailId        = model.Id.ToString();
            info.ShopName        = shop.ShopName;
            info.AccountNo       = shopId + info.DetailId + new Random().Next(10000);
            info.ReMark          = "店铺购买" + type.ToDescription() + "服务," + monthCount + "个月";
            info.TradeType       = CommonModel.ShopAccountType.MarketingServices;
            info.CreateTime      = DateTime.Now;
            info.Amount          = price * monthCount;
            info.AccoutID        = ShopAccount.Id;
            ShopAccount.Balance -= info.Amount;         //总余额减钱
            info.Balance         = ShopAccount.Balance; //变动后当前剩余金额
            Context.ShopAccountItemInfo.Add(info);
            var PlatAccount           = Context.PlatAccountInfo.FirstOrDefault();
            PlatAccountItemInfo pinfo = new PlatAccountItemInfo();

            pinfo.IsIncome       = true;
            pinfo.DetailId       = model.Id.ToString();
            pinfo.AccountNo      = info.AccountNo;
            pinfo.ReMark         = "店铺购买" + type.ToDescription() + "服务," + monthCount + "个月";
            pinfo.TradeType      = CommonModel.PlatAccountType.MarketingServices;
            pinfo.CreateTime     = DateTime.Now;
            pinfo.Amount         = price * monthCount;
            pinfo.AccoutID       = PlatAccount.Id;
            PlatAccount.Balance += info.Amount;  //总余额加钱

            pinfo.Balance = PlatAccount.Balance; //变动后当前剩余金额
            Context.PlatAccountItemInfo.Add(pinfo);
            Context.SaveChanges();
        }
 public override bool IsManualSyncRequested(ISettingsService settings, MarketType market, string marketplaceId)
 {
     return(settings.GetListingsManualSyncRequest(market, marketplaceId) ?? false);
 }
Example #40
0
        public static IQueryable <MarketImageViewModel> GetAll(IUnitOfWork db,
                                                               MarketType market,
                                                               string marketplaceId,
                                                               string keywords,
                                                               bool onlyIgnored)
        {
            var styleDefaultImg = from im in db.StyleImages.GetAll()
                                  where im.IsDefault
                                  select im;

            var baseQuery = from i in db.Items.GetAll()
                            join s in db.Styles.GetAll() on i.StyleId equals s.Id

                            join sImg in styleDefaultImg on s.Id equals sImg.StyleId into withStyleImage
                            from sImg in withStyleImage.DefaultIfEmpty()

                            join im in db.ItemImages.GetAll() on i.Id equals im.ItemId into withImage
                            from im in withImage.DefaultIfEmpty()

                            where i.Market == (int)market
                            select new { im, i, s, sImg };

            if (!String.IsNullOrEmpty(marketplaceId))
            {
                baseQuery = baseQuery.Where(m => m.i.MarketplaceId == marketplaceId);
            }

            if (!String.IsNullOrEmpty(keywords))
            {
                baseQuery = baseQuery.Where(m => m.i.ASIN.Contains(keywords) ||
                                            m.s.StyleID.Contains(keywords));
            }

            if (onlyIgnored)
            {
                baseQuery = baseQuery.Where(m => m.i.ImagesIgnored);
            }

            var query = baseQuery.Select(i => new MarketImageViewModel()
            {
                Id                      = i.i.Id,
                ASIN                    = i.i.ASIN,
                SourceMarketId          = i.i.SourceMarketId,
                Market                  = i.i.Market,
                MarketplaceId           = i.i.MarketplaceId,
                LocalImage              = i.i.PrimaryImage,
                MarketImage             = i.im.Image,
                StyleImage              = i.sImg.Image,
                StyleImageType          = i.sImg.Type,
                Name                    = i.s.Name,
                DiffWithLocalImageValue = i.im.DiffWithLocalImageValue,
                DiffWithStyleImageValue = i.im.DiffWithStyleImageValue,
                ImagesIgnored           = i.i.ImagesIgnored,

                StyleId     = i.i.StyleId,
                StyleString = i.s.StyleID,
                StyleSize   = i.i.Size,
            });

            return(query);
        }
        List<long> SplitCountForSweepOrdersViaMarketType(LongShortCount lsc, MarketType marketType)
        {
            List<long> list = new List<long>();

            Trace.Assert(marketType != MarketType._0_Bond_일반);

            // 1000원보다 작은 단위일리가 없다. 1000으로 나눈 나머지는 0이어야한다.
            UInt64 remain = lsc.Count % CommonConst._1_000;
            Trace.Assert(remain == 0);

            if (marketType == MarketType._1_Bond_소액)
            {
                long curCount = (long)lsc.Count;

                const long k50_000_000 = 50 * CommonConst._1_000 * CommonConst._1_000;

                while (true)
                {
                    Trace.Assert(curCount >= 0);

                    if (curCount == 0)
                    {
                        break;
                    }

                    if (curCount <= k50_000_000)
                    {
                        list.Add(curCount);
                        break;
                    }

                    list.Add(k50_000_000);
                    curCount -= (k50_000_000);
                }
            }
            else if (marketType == MarketType._2_Bond_소매)
            {
                // 소매시장인 경우라면 한큐에 몽땅낸다.
                list.Add((long)lsc.Count);
            }

            return list;
        }
 public override void SetLastSyncDate(ISettingsService settings, MarketType market, string marketplaceId, DateTime?when)
 {
     settings.SetListingsReadDate(_time.GetUtcTime(), market, marketplaceId);
     settings.SetListingsManualSyncRequest(false, market, marketplaceId);
 }
        /// <summary>
        /// Place a buy/sell order.
        /// </summary>
        /// <param name="price">The price in quote currency to buy 1 base currency. Negative value to buy/sell at market price</param>
        /// <param name="amount">The amount of LTC/BTC to buy/sell. Negative value to sell, while positive value to buy</param>
        /// <param name="market">Default is "BTCCNY". [ BTCCNY | LTCCNY | LTCBTC ]</param>
        /// <returns>JSON string contains order id and json-request id.</returns>
        public string PlaceOrder(double price, double amount, MarketType markets = MarketType.BTCCNY)
        {
            string regPrice = "", regAmount = "", method = "", mParams = "";
            switch (markets)
            {
                case MarketType.BTCCNY:
                    regPrice = price.ToString("F2");
                    regAmount = amount.ToString("F4");
                    break;
                case MarketType.LTCCNY:
                    regPrice = price.ToString("F2");
                    regAmount = amount.ToString("F3");
                    break;
                case MarketType.LTCBTC:
                    regPrice = price.ToString("F4");
                    regAmount = amount.ToString("F3");
                    break;
                default://"ALL" is not supported
                    throw new BTCChinaException("PlaceOrder", "N/A", "Market not supported.");
            }
            if (regPrice.StartsWith("-"))
                regPrice = "null";
            if (regAmount.StartsWith("-"))
            {
                regAmount = regAmount.TrimStart('-');
                method = "sellOrder2";
            }
            else
            {
                method = "buyOrder2";
            }

            //          mParams = regPrice + "," + regAmount;
            mParams = "\"" + regPrice + "\",\"" + regAmount + "\"";
            //not default market
            if (markets != MarketType.BTCCNY)
                mParams += ",\"" + System.Enum.GetName(typeof(MarketType), markets) + "\"";

            return DoMethod(BuildParams(method, mParams));
        }
Example #44
0
        protected override DocumentInfo ComposeDocument(IUnitOfWork db,
                                                        long companyId,
                                                        MarketType market,
                                                        string marketplaceId,
                                                        IList <string> asinList)
        {
            var tag     = asinList != null && asinList.Count == 1 ? asinList[0] : null;
            var actions = _actionService.GetUnprocessedByType(db,
                                                              SystemActionType.UpdateOnMarketReturnOrder,
                                                              null,
                                                              tag);

            if (asinList != null)
            {
                actions = actions.Where(a => asinList.Contains(a.Tag)).ToList();
            }

            _actionOutputList = new Dictionary <long, ReturnOrderOutput>();

            if (actions.Any())
            {
                var orderMessages = new List <XmlElement>();
                var index         = 0;
                var merchant      = db.Companies.Get(companyId).AmazonFeedMerchantIdentifier;
                foreach (var action in actions)
                {
                    var data              = JsonConvert.DeserializeObject <ReturnOrderInput>(action.InputData);
                    var order             = db.Orders.GetByOrderNumber(data.OrderNumber);
                    var unsuitableData    = false;
                    var unsuitableMessage = "";
                    if (order == null)
                    {
                        unsuitableMessage = "Can't find orderId";
                        unsuitableData    = true;
                    }

                    if (data.Items == null)
                    {
                        unsuitableMessage = "No data items";
                        unsuitableData    = true;
                    }

                    if (data.Items != null && !data.Items.Any())
                    {
                        unsuitableMessage = "No return items";
                        unsuitableData    = true;
                    }

                    if (data.Items != null && !data.Items.Any(i => i.RefundShippingPrice > 0 || i.RefundItemPrice > 0))
                    {
                        unsuitableMessage = "All refund price = 0";
                        unsuitableData    = true;
                    }

                    if (unsuitableData)
                    {
                        Log.Info(marketplaceId + ": " + unsuitableMessage);
                        _actionService.SetResult(db, action.Id, SystemActionStatus.Suspended, new ReturnOrderOutput()
                        {
                            ResultMessage = unsuitableMessage
                        });
                        continue;
                    }

                    if (order.Market != (int)market ||
                        (!String.IsNullOrEmpty(marketplaceId) &&
                         order.MarketplaceId != marketplaceId))
                    {
                        //Log.Info("skip order=" + data.OrderNumber + ", market=" + order.Market + ", marketplace=" + order.MarketplaceId);
                        continue;
                    }

                    Log.Info(marketplaceId + ": add order " + index + ", actionId=" + action.Id + ", orderId=" + data.OrderNumber);

                    index++;

                    var returnItems = data.Items;
                    var orderItems  = db.OrderItems.GetAll().Where(oi => oi.OrderId == order.Id).ToList();
                    foreach (var returnItem in data.Items)
                    {
                        var existOrderItem = orderItems.FirstOrDefault(i => i.ItemOrderIdentifier == returnItem.ItemOrderId);
                        if (existOrderItem != null && returnItem.RefundItemPrice > 0 && existOrderItem.ItemPaid > 0 && existOrderItem.ItemTax > 0)
                        {
                            returnItem.RefundItemTax = (existOrderItem.ItemTax ?? 0) * returnItem.RefundItemPrice / (existOrderItem.ItemPaid.Value - existOrderItem.ItemTax.Value);
                        }
                    }

                    orderMessages.Add(FeedHelper.ComposeOrderAdjustmentMessage(index,
                                                                               data.OrderNumber,
                                                                               data.IncludeShipping,
                                                                               data.DeductShipping,
                                                                               data.IsDeductPrepaidLabelCost,
                                                                               order.TotalPriceCurrency,
                                                                               returnItems));

                    _actionOutputList.Add(new KeyValuePair <long, ReturnOrderOutput>(action.Id, new ReturnOrderOutput()
                    {
                        Identifier = index
                    }));
                }

                db.Commit(); //NOTE: Save SetResulte changes

                if (orderMessages.Any())
                {
                    Log.Info(marketplaceId + ": Compose feed");
                    var document = FeedHelper.ComposeFeed(orderMessages, merchant, Type.ToString());
                    return(new DocumentInfo
                    {
                        XmlDocument = document,
                        NodesCount = index
                    });
                }
            }
            return(null);
        }
 /// <summary>
 /// Get all order status.
 /// </summary>
 /// <param name="openonly">Default is 'true'. Only open orders are returned.</param>
 /// <param name="markets">Default to “BTCCNY”. [ BTCCNY | LTCCNY | LTCBTC | ALL]</param>
 /// <param name="limit">Limit the number of transactions, default value is 1000.</param>
 /// <param name="offset">Start index used for pagination, default value is 0.</param>
 /// <param name="withdetails">Return the trade details or not for this order. Can be set to true, false. Default to false, no detail will be returned.</param>
 /// <returns>JSON-string of order objects</returns>
 public string getOrders(bool openonly = true, MarketType markets = MarketType.BTCCNY, uint limit = 1000, uint offset = 0, bool withdetails = false)
 {
     //due to the complexity of parameters, all default values are explicitly set.
     string method = "getOrders";
     string mParams = openonly.ToString().ToLower() +
         ",\"" + System.Enum.GetName(typeof(MarketType), markets) + "\"," +
         limit.ToString() + "," +
         offset.ToString() + "," +
         withdetails.ToString().ToLower();
     return DoMethod(BuildParams(method, mParams));
 }
Example #46
0
        public static Line[] GetLine(MarketType _type, out decimal _middlePrice)
        {
            string _url = "";
            switch (_type)
            {
                case MarketType.BTC: _url = "https://market.huobi.com/staticmarket/td.html"; break;
                case MarketType.LTC: _url = "https://market.huobi.com/staticmarket/td_ltc.html"; break;
            }

            decimal _output = 0M;
            string _result = Get(_url);
            IList<Line> _tlines = new List<Line>();
            string[] _lines = _result.Split('\n');
            foreach (string _line in _lines)
            {
                string[] _item = _line.Replace("\r", "").Split(',');
                if (_item.Length == 1)
                {
                    decimal _current = 0M;
                    if (decimal.TryParse(_item[0], out _current)) { _output = _current; }
                    continue;
                }
                else if (_item.Length != 4)
                {
                    continue;
                }

                Line _tline = new Line();
                _tline.Time = _item[0];
                _tline.Price = decimal.Parse(_item[1]);
                _tline.Volume = decimal.Parse(_item[2]);
                _tline.Total = decimal.Parse(_item[3]);
                _tlines.Add(_tline);
            }

            _middlePrice = _output;
            return _tlines.ToArray();
        }
Example #47
0
        public static String GetCodeWithMarketType(String sourceCode, MarketType marketType)
        {
            String shortCode = sourceCode;

            if (shortCode.IndexOf("_") < 0)
            {
                // ok
            }
            else
            {
                shortCode = shortCode.Substring(0, shortCode.IndexOf("_"));
            }

            if (marketType == MarketType._0_Bond_일반)
            {
                String fullCode = String.Format("{0}_normal", shortCode);
                return fullCode;
            }
            else if (marketType == MarketType._1_Bond_소액)
            {
                String fullCode = String.Format("{0}_small", shortCode);
                return fullCode;
            }
            else if (marketType == MarketType._2_Bond_소매)
            {
                String fullCode = String.Format("{0}_retail", shortCode);
                return fullCode;
            }
            else
            {
                logger.Error("Error in FullCode");
                Util.KillWithNotice("Error in FullCode");

                return "";
            }
        }
Example #48
0
        protected SyncResult SyncAllNewOrders(CancellationToken?token,
                                              ILogService log,
                                              IMarketApi api,
                                              MarketType market,

                                              Func <ILogService, IMarketApi, ISyncInformer, string, IList <ListingOrderDTO> > getOrderItemsFromMarketFunc,

                                              ISyncInformer syncInfo,
                                              IList <IShipmentApi> rateProviders,
                                              IQuantityManager quantityManager,
                                              ISettingsService settings,
                                              IEmailService emailService,
                                              IOrderValidatorService validatorService,
                                              ICacheService cacheService,

                                              ICompanyAddressService companyAddress,
                                              DateTime syncMissedFrom,
                                              ITime time)
        {
            try
            {
                log.Info("Get missed orders");
                var statusList = new List <string> {
                    OrderStatusEnumEx.Canceled,
                    OrderStatusEnumEx.Shipped,
                    OrderStatusEnumEx.Unshipped,
                    OrderStatusEnumEx.Pending
                };                               //NOTE: On API level there status will be converted on eBay status

                var allOrders = api.GetOrders(log, syncMissedFrom, statusList).ToList();

                if (allOrders.Any())
                {
                    var result = ProcessNewOrdersPack(token,
                                                      log,
                                                      api,

                                                      getOrderItemsFromMarketFunc,

                                                      rateProviders,
                                                      validatorService,
                                                      syncInfo,
                                                      settings,
                                                      quantityManager,
                                                      emailService,
                                                      cacheService,

                                                      companyAddress,
                                                      allOrders,
                                                      time);

                    if (!result.IsSuccess)
                    {
                        syncInfo.AddWarning("", "The orders pack processing has failed");
                        return(new SyncResult()
                        {
                            IsSuccess = false
                        });
                    }

                    return(result);
                }

                return(new SyncResult()
                {
                    IsSuccess = true,
                    ProcessedOrders = new List <SyncResultOrderInfo>()
                });
            }
            catch (Exception ex)
            {
                syncInfo.AddError(null, "Error when storing new unshipped orders", ex);
                log.Error("Error when storing new unshipped orders", ex);
                return(new SyncResult()
                {
                    IsSuccess = false
                });
            }
        }
 /// <summary>
 /// Get the complete market depth. 
 /// </summary>
 /// <param name="limit">Number of orders returned. Default is 10 per side</param>
 /// <param name="markets">Default to “BTCCNY”. [ BTCCNY | LTCCNY | LTCBTC | ALL]</param>
 /// <returns>All open bid and ask orders.</returns>
 public string getMarketDepth(uint limit = 10, MarketType markets = MarketType.BTCCNY)
 {
     string method = "getMarketDepth2";
     string mParams = "";
     if (limit != 10) mParams = limit.ToString();
     if (markets != MarketType.BTCCNY)
         mParams += ",\"" + System.Enum.GetName(typeof(MarketType), markets) + "\"";
     return DoMethod(BuildParams(method, mParams));
 }