Exemplo n.º 1
0
        /// <summary>
        /// 线上出货上报
        /// </summary>
        /// <returns></returns>
        public async Task OnlineOrder(DealOrderInput input)
        {
            var orders = await _orderRepository.GetAllListAsync(c => input.orders.Any(w => w.orderId == c.order_id));

            foreach (var order in orders)
            {
                var state = input.orders.FirstOrDefault(c => c.orderId == order.order_id);
                order.status = state.orderStatus;
            }
        }
Exemplo n.º 2
0
        public override Empty DealOrder(DealOrderInput input)
        {
            var order = CheckDealOrderInput(input.OrderId);

            order.BalanceAchieved.Add(input.Amount);
            State.AllOrders[input.OrderId] = order;
            if (order.BalanceAchieved == order.BalanceObtain)
            {
                order.Status = OrderStatus.Done;
                State.AllOrders[input.OrderId] = order;

                UpdateOrderId(input.OrderId, OrderStatus.Done);
            }
            else
            {
                if (order.Status == OrderStatus.Created)
                {
                    order.Status = OrderStatus.Ongoing;
                    State.AllOrders[input.OrderId] = order;
                }
            }
            //add sub order record
            var subOrders = State.SubOrders[input.OrderId];

            subOrders.SubOrders.Add(new DealtOrder
            {
                Dealer = Context.Sender,
                Amount = input.Amount
            });

            //transfer from
            State.TokenContract.TransferFrom.Send(new TransferFromInput
            {
                Symbol = order.SymbolObtain,
                Amount = input.Amount,
                From   = Context.Sender,
                To     = Context.Self,
                Memo   = "sent order token to contract first"
            });

            //transfer to issuer
            State.TokenContract.Transfer.Send(new TransferInput
            {
                Symbol = order.SymbolObtain,
                Amount = input.Amount,
                To     = order.Issuer,
                Memo   = "deal order"
            });

            //transfer to dealer
            var paidAmount = order.BalancePaid.Div(order.BalanceObtain).Mul(input.Amount);

            State.TokenContract.Transfer.Send(new TransferInput
            {
                Symbol = order.SymbolPaid,
                Amount = paidAmount,
                To     = Context.Sender,
                Memo   = "got token"
            });

            Context.Fire(new OrderDealt
            {
                OrderId = input.OrderId,
                Dealer  = Context.Sender,
                Amount  = input.Amount
            });

            return(new Empty());
        }