/// <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; }
/// <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; }
/// <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; }
/// <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; }