//将单元的下单数量分配到主账户 public static Dictionary <int, int> GetOrderAccount(Order order) { Dictionary <int, int> order_items = new Dictionary <int, int>(); Unit unit = UnitRA.Get("U_" + order.unit_id); List <AccountGroupItem> items = AccountGroupRA.List4Unit(order.unit_id); int total = 0; if (order.type_enum == OrderTypeEnum.Buy) { if (unit.priority_strategy_enum == PriorityStrategyEnum.Natural) { items = items.OrderBy(i => i.sort_buy).ToList(); } else { items = items.OrderByDescending(i => i.capital_available).ToList(); } foreach (AccountGroupItem item in items) { int buyable = (item.capital_available == decimal.MaxValue) ? (order.count - total) : (int)(item.capital_available / 100 / order.price) * 100; int ct = Math.Min(buyable, (order.count - total)); order_items.Add(item.account_id, ct); total += ct; if (ct == order.count) { break; } } } else { items = items.OrderBy(i => i.sort_sell).ToList(); foreach (AccountGroupItem item in items) { int sellable = PositionRA.GetSellable(order.unit_id, order.code, item.account_id); int ct = Math.Min(sellable, (order.count - total)); order_items.Add(item.account_id, ct); total += ct; if (ct == order.count) { break; } } } return(order_items); }
public Result <int> Count(Order model) { model.user_id = user_id; ApiResultEnum result = LimitBiz.CheckStatus(model); if (result != ApiResultEnum.Success && result != ApiResultEnum.Order_Count_Error && (result != ApiResultEnum.Order_Price_Error || model.type_enum == OrderTypeEnum.Buy)) { return(Result(ApiResultEnum.Success, 0)); } int unit_count = LimitBiz.GetUnitCount(model); if (unit_count == 0) { return(Result(ApiResultEnum.Success, 0)); } List <int> order_items; int account_count = 0; if (model.account_id == 0) { order_items = AccountGroupRA.List4Unit(model.unit_id).Select(g => g.account_id).ToList(); } else { order_items = new List <int> { model.account_id } }; foreach (int account_id in order_items) { model.account_id = account_id; account_count += LimitBiz.GetAccountCount(model); } return(Result(ApiResultEnum.Success, Math.Min(unit_count, account_count))); }