Пример #1
0
        /// <summary>
        /// 根据挂单ID查询挂单记录
        /// </summary>
        /// <param name="holdid">挂单ID</param>
        /// <param name="userid">要返回的用户ID</param>
        /// <param name="ip">要返回的IP</param>
        /// <param name="mac">要返回的MAC</param>
        /// <returns>挂单记录</returns>
        public static TradeHoldOrder GetTradeHoldOrder(string holdid, ref string userid, ref string ip, ref string mac)
        {
            TradeHoldOrder tradeHoldOrder = new TradeHoldOrder();
            SqlConnection sqlconn = null;
            SqlCommand sqlcmd = null;
            SqlDataReader sqldr = null;
            try
            {
                sqlconn = new SqlConnection(SqlConnectionString);
                sqlconn.Open();
                sqlcmd = sqlconn.CreateCommand();
                sqlcmd.CommandText = "select userId,HoldOrderID,productcode,quantity,frozenMoney,OrderType,HoldPrice,profitPrice,lossPrice,validtime,ordertime, " +
                                    " ip,mac from Trade_HoldOrder where HoldOrderID=@HoldOrderID ";
                SqlParameter p_holdid = new SqlParameter();
                p_holdid.ParameterName = "@HoldOrderID";
                p_holdid.DbType = DbType.String;
                p_holdid.Value = holdid;
                sqlcmd.Parameters.Add(p_holdid);

                sqldr = sqlcmd.ExecuteReader();
                while (sqldr.Read())
                {
                    userid = System.DBNull.Value != sqldr["userId"] ? sqldr["userId"].ToString() : string.Empty;
                    tradeHoldOrder.HoldOrderID = System.DBNull.Value != sqldr["HoldOrderID"] ? sqldr["HoldOrderID"].ToString() : string.Empty;
                    tradeHoldOrder.ProductCode = System.DBNull.Value != sqldr["productcode"] ? sqldr["productcode"].ToString() : string.Empty;
                    tradeHoldOrder.Quantity = System.DBNull.Value != sqldr["quantity"] ? Convert.ToDouble(sqldr["quantity"]) : 0;
                    tradeHoldOrder.FrozenMoney = System.DBNull.Value != sqldr["frozenMoney"] ? Convert.ToDouble(sqldr["frozenMoney"]) : 0;

                    tradeHoldOrder.OrderType = System.DBNull.Value != sqldr["OrderType"] ? sqldr["OrderType"].ToString() : string.Empty;
                    tradeHoldOrder.HoldPrice = System.DBNull.Value != sqldr["HoldPrice"] ? Convert.ToDouble(sqldr["HoldPrice"]) : 0;
                    tradeHoldOrder.ProfitPrice = System.DBNull.Value != sqldr["profitPrice"] ? Convert.ToDouble(sqldr["profitPrice"]) : 0;
                    tradeHoldOrder.LossPrice = System.DBNull.Value != sqldr["lossPrice"] ? Convert.ToDouble(sqldr["lossPrice"]) : 0;
                    tradeHoldOrder.ValidTime = System.DBNull.Value != sqldr["validtime"] ? Convert.ToDateTime(sqldr["validtime"]) : DateTime.MinValue;
                    tradeHoldOrder.OrderTime = System.DBNull.Value != sqldr["ordertime"] ? Convert.ToDateTime(sqldr["ordertime"]) : DateTime.MinValue;
                    ip = System.DBNull.Value != sqldr["ip"] ? sqldr["ip"].ToString() : string.Empty;
                    mac = System.DBNull.Value != sqldr["mac"] ? sqldr["mac"].ToString() : string.Empty;
                    break;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
            finally
            {
                if (null != sqlconn)
                {
                    sqlconn.Close();
                }
                if (null != sqldr)
                {
                    sqldr.Close();
                }
            }
            return tradeHoldOrder;
        }
Пример #2
0
        /// <summary>
        /// 挂单查询
        /// </summary>
        /// <param name="LoginID">登陆标识</param>
        /// <returns>挂单记录</returns>
        public List<TradeHoldOrder> GetTradeHoldOrder(string LoginID)
        {
            List<TradeHoldOrder> list = new List<TradeHoldOrder>();

            System.Data.Common.DbDataReader dbreader = null;

            try
            {
                string userId = string.Empty;

                if (!ComFunction.ExistUserLoginID(LoginID, ref userId))
                {
                    return list;
                }
                string sql = "select  c.account, a.HoldOrderID,b.ProductName, a.productcode,a.quantity,a.frozenMoney,a.OrderType,a.HoldPrice,a.profitPrice,a.lossPrice,a.validtime,a.ordertime " +
                                    "from Trade_HoldOrder a,Trade_Product b,base_user c  where a.userId=@userId and a.productcode=b.productcode and c.userid=a.userid and c.status='1' order by a.ordertime desc";
                dbreader = DbHelper.ExecuteReader(sql,
                                  new System.Data.Common.DbParameter[]{DbHelper.CreateDbParameter(JinTong.Jyrj.Data.DataBase.Type,
                    "@userId",DbParameterType.String,userId,ParameterDirection.Input)});
                while (dbreader.Read())
                {
                    TradeHoldOrder thdr = new TradeHoldOrder();
                    thdr.TradeAccount = dbreader["account"].ToString();
                    thdr.HoldOrderID = dbreader["HoldOrderID"].ToString();
                    thdr.ProductName = dbreader["ProductName"].ToString();
                    thdr.ProductCode = dbreader["productcode"].ToString();
                    thdr.Quantity = Convert.ToDouble(dbreader["quantity"]);
                    thdr.FrozenMoney = Convert.ToDouble(dbreader["frozenMoney"]);

                    thdr.OrderType = dbreader["OrderType"].ToString();
                    thdr.HoldPrice = Convert.ToDouble(dbreader["HoldPrice"]);
                    thdr.ProfitPrice = Convert.ToDouble(dbreader["profitPrice"]);
                    thdr.LossPrice = Convert.ToDouble(dbreader["lossPrice"]);
                    thdr.ValidTime = Convert.ToDateTime(dbreader["validtime"]);
                    thdr.OrderTime = Convert.ToDateTime(dbreader["Ordertime"]);
                    list.Add(thdr);
                }
            }
            catch (Exception ex)
            {
                ComFunction.WriteErr(ex);
                if (null != list && list.Count > 0)
                {
                    list.Clear();
                }

            }
            finally
            {
                if (null != dbreader)
                {
                    dbreader.Close();
                    dbreader.Dispose();
                }
            }
            return list;
        }
Пример #3
0
        /// <summary>
        /// 限价挂单分页查询
        /// </summary>
        /// <param name="Cxqc">查询条条</param>
        /// <param name="pageindex">第几页,从1开始</param>
        /// <param name="pagesize">每页多少条</param>
        /// <param name="page">输出参数(总页数)</param>
        /// <returns>订单信息</returns>
        public TradeHoldOrderInfo GetMultiTradeHoldOrderWithPage(CxQueryCon Cxqc, int pageindex, int pagesize, ref int page)
        {
            TradeHoldOrderInfo TdHoldOrderInfo = new TradeHoldOrderInfo();

            System.Data.Common.DbDataReader dbreader = null;
            System.Data.Common.DbParameter OutputParam = DbHelper.CreateDbParameter(JinTong.Jyrj.Data.DataBase.Type,
                "@PageCount", DbParameterType.Int, 0, ParameterDirection.Output);
            string SearchCondition = string.Empty;
            try
            {
                string AndStr = string.Empty;
                string PartSearchCondition = string.Empty;
                string ParentOrgID = string.Empty;
                TradeUser TdUser = new TradeUser();
                #region 判断登陆标识是否过期

                if (!ComFunction.ExistUserLoginID(Cxqc.LoginID, ref TdUser))
                {
                    TdHoldOrderInfo.Result = false;
                    TdHoldOrderInfo.Desc = ResCode.UL003Desc;
                    return TdHoldOrderInfo;
                }
                if (UserType.NormalType == TdUser.UType)
                {
                    TdHoldOrderInfo.Result = false;
                    TdHoldOrderInfo.Desc = ComFunction.NotRightUser;
                    return TdHoldOrderInfo;
                }
                #endregion

                if (!string.IsNullOrEmpty(Cxqc.TradeAccount)) //交易账号不为空 表示查询该用户的历史单 否则查询所有用户的历史单
                {
                    AndStr = string.Format(" and [Account] like '{0}%' ", Cxqc.TradeAccount);
                }
                string productname = string.Empty;
                if ("ALL" == Cxqc.ProductName.ToUpper())
                {
                    productname = string.Empty;
                }
                else
                {
                    productname = string.Format(" and ProductName='{0}'", Cxqc.ProductName);
                }

                if (!string.IsNullOrEmpty(Cxqc.OrgName))
                {
                    //AndStr += string.Format("and [orgname] like '{0}%' ", Cxqc.OrgName);
                    AndStr += string.Format("and [orgid]='{0}' ", Cxqc.OrgName);
                }

                if (UserType.OrgType == TdUser.UType && !string.IsNullOrEmpty(TdUser.OrgId))
                {
                    //AndStr += string.Format(" and [OrgId] in ({0}) ", ComFunction.GetOrgIds(TdUser.OrgId));
                    PartSearchCondition = " and orgid in (select orgid from #tmp) ";
                    ParentOrgID = TdUser.OrgId;
                }
                if ("ALL" != Cxqc.OrderType.ToUpper())
                {
                    AndStr += string.Format(" and ordertype='{0}'", Cxqc.OrderType);
                }
                if (!string.IsNullOrEmpty(Cxqc.PriceCode))
                {
                    AndStr += string.Format(" and [PriceCode]='{0}' ", Cxqc.PriceCode);
                }
                string SumSelectList = "round(isnull(sum(frozenMoney),0),2) as frozenMoney,round(isnull(sum(quantity),0),2) as quantity ";

                string selectlist = "orgname,telephone,username, account,ProductName,HoldOrderID,productcode,quantity,frozenMoney,OrderType,HoldPrice,profitPrice,lossPrice,validtime,ordertime ";

                SearchCondition = string.Format("where ordertime >= '{0}' and ordertime <='{1}' {2} {3} {4}",
                    Cxqc.StartTime.ToString("yyyy-MM-dd HH:mm:ss.fff"), Cxqc.EndTime.ToString("yyyy-MM-dd HH:mm:ss.fff"),
                    productname, AndStr, PartSearchCondition);

                dbreader = DbHelper.RunProcedureGetDataReader("GetRecordFromPageExWithSum",
                     new System.Data.Common.DbParameter[]{
                         DbHelper.CreateDbParameter(JinTong.Jyrj.Data.DataBase.Type,
                    "@selectlist",DbParameterType.String,selectlist,ParameterDirection.Input),
                      DbHelper.CreateDbParameter(JinTong.Jyrj.Data.DataBase.Type,
                    "@SumSelectList",DbParameterType.String,SumSelectList,ParameterDirection.Input),
                       DbHelper.CreateDbParameter(JinTong.Jyrj.Data.DataBase.Type,
                    "@TableSource",DbParameterType.String,"V_Trade_HoldOrder",ParameterDirection.Input), //表名或视图表
                        DbHelper.CreateDbParameter(JinTong.Jyrj.Data.DataBase.Type,
                    "@TableOrder",DbParameterType.String,"a",ParameterDirection.Input), //排序后的表名称 即子查询结果集的别名
                         DbHelper.CreateDbParameter(JinTong.Jyrj.Data.DataBase.Type,
                    "@SearchCondition",DbParameterType.String,SearchCondition,ParameterDirection.Input),
                          DbHelper.CreateDbParameter(JinTong.Jyrj.Data.DataBase.Type,
                    "@OrderExpression",DbParameterType.String,"order by ordertime desc",ParameterDirection.Input),//排序 表达式
                            DbHelper.CreateDbParameter(JinTong.Jyrj.Data.DataBase.Type,
                    "@ParentOrgID",DbParameterType.String,ParentOrgID,ParameterDirection.Input),//父级组织ID
                           DbHelper.CreateDbParameter(JinTong.Jyrj.Data.DataBase.Type,
                    "@PageIndex",DbParameterType.Int,pageindex,ParameterDirection.Input),
                           DbHelper.CreateDbParameter(JinTong.Jyrj.Data.DataBase.Type,
                    "@PageSize",DbParameterType.Int,pagesize,ParameterDirection.Input),
                            OutputParam});
                TdHoldOrderInfo.TdHoldOrderList = new List<TradeHoldOrder>();
                while (dbreader.Read())
                {
                    TradeHoldOrder thdr = new TradeHoldOrder();
                    thdr.Telephone = System.DBNull.Value != dbreader["telephone"] ? dbreader["telephone"].ToString() : string.Empty;
                    thdr.UserName = System.DBNull.Value != dbreader["username"] ? dbreader["username"].ToString() : string.Empty;
                    thdr.OrgName = System.DBNull.Value != dbreader["orgname"] ? dbreader["orgname"].ToString() : string.Empty;
                    thdr.TradeAccount = System.DBNull.Value != dbreader["account"] ? dbreader["account"].ToString() : string.Empty;
                    thdr.HoldOrderID = System.DBNull.Value != dbreader["HoldOrderID"] ? dbreader["HoldOrderID"].ToString() : string.Empty;
                    thdr.ProductName = System.DBNull.Value != dbreader["ProductName"] ? dbreader["ProductName"].ToString() : string.Empty;
                    thdr.ProductCode = System.DBNull.Value != dbreader["productcode"] ? dbreader["productcode"].ToString() : string.Empty;
                    thdr.Quantity = System.DBNull.Value != dbreader["quantity"] ? Convert.ToDouble(dbreader["quantity"]) : 0;
                    thdr.FrozenMoney = System.DBNull.Value != dbreader["frozenMoney"] ? Convert.ToDouble(dbreader["frozenMoney"]) : 0;

                    thdr.OrderType = System.DBNull.Value != dbreader["OrderType"] ? dbreader["OrderType"].ToString() : string.Empty;
                    thdr.HoldPrice = System.DBNull.Value != dbreader["HoldPrice"] ? Convert.ToDouble(dbreader["HoldPrice"]) : 0;
                    thdr.ProfitPrice = System.DBNull.Value != dbreader["profitPrice"] ? Convert.ToDouble(dbreader["profitPrice"]) : 0;
                    thdr.LossPrice = System.DBNull.Value != dbreader["lossPrice"] ? Convert.ToDouble(dbreader["lossPrice"]) : 0;
                    thdr.ValidTime = System.DBNull.Value != dbreader["validtime"] ? Convert.ToDateTime(dbreader["validtime"]) : DateTime.MinValue;
                    thdr.OrderTime = System.DBNull.Value != dbreader["Ordertime"] ? Convert.ToDateTime(dbreader["Ordertime"]) : DateTime.MinValue;
                    TdHoldOrderInfo.TdHoldOrderList.Add(thdr);
                }
                if (dbreader.NextResult())//前进到下一结果集
                {
                    if (dbreader.Read()) //获取汇总数据
                    {
                        TdHoldOrderInfo.Quantity = System.DBNull.Value != dbreader["quantity"] ? Convert.ToDouble(dbreader["quantity"]) : 0;
                        TdHoldOrderInfo.FrozenMoney = System.DBNull.Value != dbreader["frozenMoney"] ? Convert.ToDouble(dbreader["frozenMoney"]) : 0;
                    }
                }
                TdHoldOrderInfo.Result = true;
                TdHoldOrderInfo.Desc = "查询成功";
            }
            catch (Exception ex)
            {
                ComFunction.WriteErr(ex);
                if (null != TdHoldOrderInfo.TdHoldOrderList && TdHoldOrderInfo.TdHoldOrderList.Count > 0)
                {
                    TdHoldOrderInfo.TdHoldOrderList.Clear();
                }
                TdHoldOrderInfo.Desc = "查询失败";
                TdHoldOrderInfo.Result = false;
            }
            finally
            {
                if (null != dbreader)
                {
                    dbreader.Close();
                    dbreader.Dispose();
                    page = Convert.ToInt32(OutputParam.Value);
                }
            }

            return TdHoldOrderInfo;
        }
Пример #4
0
        /// <summary>
        /// 挂单取消
        /// </summary>
        /// <param name="DhInfo">取消信息</param>
        /// <returns>取消结果</returns>
        public MarDelivery DelHoldOrder(DelHoldInfo DhInfo)
        {
            MarDelivery ctpOrder = new MarDelivery();
            ctpOrder.MoneyInventory = new MoneyInventory();
            DateTime dt = DateTime.Now;//服务器当前本地时间
            TradeHoldOrder tradeholdorder = new TradeHoldOrder();
            ProductConfig ptc = new ProductConfig();
            TradeUser TdUser = new TradeUser();
            //从挂单表中查询出的用户ID IP MAC
            string hold_userid = string.Empty;
            string hold_ip = string.Empty;
            string hold_mac = string.Empty;
            string userId = string.Empty;
            string operUser = DhInfo.TradeAccount;
            string ipmac = string.Empty;
            try
            {
                #region 判断用户登陆标识是否过期

                if (!ComFunction.ExistUserLoginID(DhInfo.LoginID,ref TdUser))
                {
                    ctpOrder.Result = false;
                    ctpOrder.ReturnCode = ResCode.UL003;
                    ctpOrder.Desc = ResCode.UL003Desc;
                    return ctpOrder;
                }
                operUser = TdUser.Account;
                ipmac = ComFunction.GetIpMac(TdUser.Ip, TdUser.Mac);

                if (UserType.NormalType == TdUser.UType)
                {
                    userId = TdUser.UserID;
                }
                else
                {
                    userId = ComFunction.GetUserId(DhInfo.TradeAccount);
                }
                #endregion

                #region 根据挂单ID获取挂单信息
                tradeholdorder = ComFunction.GetTradeHoldOrder(DhInfo.HoldOrderID, ref hold_userid, ref hold_ip, ref hold_mac);
                if (string.IsNullOrEmpty(tradeholdorder.ProductCode))
                {
                    ctpOrder.Result = false;
                    ctpOrder.ReturnCode = ResCode.UL028;
                    ctpOrder.Desc = ResCode.UL028Desc;
                    return ctpOrder;
                }
                #endregion

                #region 获取商品信息
                ptc = ComFunction.GetProductInfo(tradeholdorder.ProductCode);
                //挂单类型(0买、1卖)
                //未能获取商品状态
                if (string.IsNullOrEmpty(ptc.State))
                {
                    ctpOrder.Result = false;
                    ctpOrder.ReturnCode = ResCode.UL024;
                    ctpOrder.Desc = ResCode.UL024Desc;
                    return ctpOrder;
                }
                #endregion

                #region 判断当前时间是否允许交易
                if (!ComFunction.GetDateset(ptc.PriceCode, dt))
                {
                    ctpOrder.Result = false;
                    ctpOrder.ReturnCode = ResCode.UL022;
                    ctpOrder.Desc = ResCode.UL022Desc;
                    return ctpOrder;
                }
                #endregion

                #region 判断商品是否处于交易时段
                if (!ComFunction.ProductCanTrade(ptc.Starttime, ptc.Endtime))
                {
                    ctpOrder.Result = false;
                    ctpOrder.ReturnCode = ResCode.UL025;
                    ctpOrder.Desc = ResCode.UL025Desc;
                    return ctpOrder;
                }
                #endregion

                #region 最大交易时间差判断
                //当前客户端实时报价时间+允许最大交易时间差>=服务器时间
                if (!(DhInfo.CurrentTime.AddSeconds(ptc.MaxTime) >= dt))
                {
                    ctpOrder.Result = false;
                    ctpOrder.ReturnCode = ResCode.UL014;
                    ctpOrder.Desc = ResCode.UL014Desc;
                    return ctpOrder;
                }
                #endregion

                ctpOrder.MoneyInventory = ComFunction.GetMoneyInventoryByUserId(userId);
                if (!ctpOrder.MoneyInventory.Result)
                {
                    ctpOrder.Result = false;
                    ctpOrder.Desc = "未能获取资金库存";
                    return ctpOrder;
                }
                #region 数据库事务处理

                /*
                List<string> sqlList = new List<string>();
                sqlList.Add(string.Format("delete from Trade_HoldOrder where holdorderid='{0}'", DhInfo.HoldOrderID));

                sqlList.Add(string.Format("INSERT INTO L_Trade_HoldOrder([userId],[HoldOrderID],[productCode],[quantity],[OrderType],[HoldPrice],[lossPrice],[profitPrice],[frozenMoney],[validtime],[ordertime],[IsTrade],[tradetime],[OrderID],[failreason],[ip],[mac]) VALUES('{0}','{1}','{2}',{3},{4},{5},{6},{7},{8},'{9}','{10}',{11},'{12}','{13}','{14}','{15}','{16}')",
                    hold_userid, tradeholdorder.HoldOrderID, tradeholdorder.ProductCode, tradeholdorder.Quantity,
                    tradeholdorder.OrderType, tradeholdorder.HoldPrice, tradeholdorder.LossPrice, tradeholdorder.ProfitPrice,
                    tradeholdorder.FrozenMoney, tradeholdorder.ValidTime.ToString("yyyy-MM-dd HH:mm:ss.fff"), tradeholdorder.OrderTime.ToString("yyyy-MM-dd HH:mm:ss.fff"), 1, dt.ToString("yyyy-MM-dd HH:mm:ss.fff"),
                   ComFunction.GetOrderId(ComFunction.Hold_His), DhInfo.ReasonType, hold_ip, hold_mac));
                double ResultfrozenMoney = ctpOrder.MoneyInventory.FdInfo.FrozenMoney - tradeholdorder.FrozenMoney;
                if (ResultfrozenMoney < ComFunction.dzero)
                {
                    ResultfrozenMoney = 0;
                }
                sqlList.Add(string.Format("update Trade_FundInfo set frozenMoney={0} where userid='{1}' and [state]<>'4'", ResultfrozenMoney, userId));

                //添加操作记录
                sqlList.Add(string.Format("insert into Base_OperrationLog([OperTime],[Account],[UserType],[Remark]) values('{0}','{1}',{2},'{3}')", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), operUser, (int)TdUser.UType, string.Format("{1}撤销委托订单{0}", DhInfo.HoldOrderID,ipmac)));

                if (!ComFunction.SqlTransaction(sqlList))
                {
                    ctpOrder.Result = false;
                    ctpOrder.Desc = "挂单取消时数据库事务处理出错";
                    return ctpOrder;
                }
                */
                //改用存储过程实现
                int result = ComFunction.DoHoldTradeOrder(DhInfo.HoldOrderID, 1, 0);
                #endregion

                if (99 == result)
                {
                    ctpOrder.Result = false;
                    ctpOrder.Desc = "挂单取消失败!";
                    return ctpOrder;
                }

                #region 给返回对象赋值

                ctpOrder.MoneyInventory.FdInfo.FrozenMoney -= tradeholdorder.FrozenMoney;
                ctpOrder.Result = true;
                switch (result)//99失败,100成功,0挂单已被自动撤销 1挂单已被手动撤销 2挂单已经自动转换为订单
                {
                    case 0: ctpOrder.Desc = "挂单已被自动撤销";
                        break;
                    case 1: ctpOrder.Desc = "挂单已被手动撤销";
                        break;
                    case 2: ctpOrder.Desc = "挂单已经自动转换为订单";
                        break;
                    default: ctpOrder.Desc = "挂单取消成功";
                        break;
                }
                #endregion
            }
            catch (Exception ex)
            {
                ComFunction.WriteErr(ex);
                ctpOrder.Result = false;
                ctpOrder.Desc = "挂单取消失败";

            }

            return ctpOrder;
        }