public static int UAddRecord(SqlConnection con, SqlTransaction sqt, TUserGroup ug) { try { string sql = "insert into tUserGroup(UID,GID) values (@UID,@GID)"; return(MsSqlHelper.ExecSqlUControl(con, sqt, sql, new SqlParameter("@UID", ug.UID), new SqlParameter("@GID", ug.GID) )); } catch (Exception e) { LogHelper.WriteLog("TUserGroupDAL.UAddRecord", e); return(-1); } }
public static int UAddUserInfo(TUserInfo ui) { SqlConnection con = new SqlConnection(MsSqlHelper.connectionString); con.Open(); SqlTransaction trn = con.BeginTransaction(); try { int iUserId = UAddUserInfo(con, trn, ui); if (iUserId > 0) { ui.Uid = iUserId; foreach (var item in ui.Usergroups) { TUserGroup ug = new TUserGroup() { UID = ui.Uid, GID = item.GID }; if (TUserGroupDAL.UAddRecord(con, trn, ug) != 1) { throw new Exception("添加用户组失败"); } } trn.Commit(); con.Close(); con.Dispose(); return(1); } else { throw new Exception("添加UserInfo出错"); } } catch (Exception e) { LogHelper.WriteLog("TUserInfoDAL.UAddUserInfo1", e); trn.Rollback(); con.Close(); con.Dispose(); return(0); } }
public ActionResult UserGroup() { int gid = Converter.ToInt(Request.QueryString["gid"], 0); string sql = "select ID,GroupName from TUserGroup"; DataTable dt = APIDataContextProxy.GetTable(null, sql, CommandType.Text); ViewData["UserGroup"] = dt; TUserGroup model = new TUserGroup(); if (gid > 0) { APIDataDataContext db = APIDataContextProxy.APIDB; { var res = db.TUserGroup.Where(p => p.ID == gid).FirstOrDefault(); if (res != null) model = res; else return Content("<h1>该用户分组不存在!</h1>"); } } ViewData.Model = model; return View(); }
public ActionResult PostUserGroup() { int Id = 0; //Id string name = ""; //登陆名 string Type = ""; //type string msg = ""; //提示信息 bool fruit = false; //结果 if (!Request.IsAjaxRequest()) return Content("{result:'fail',msg:'非法请求'}"); int id = Converter.ToInt(Request.Form["ID"], 0); string gname = Converter.ToString(Request.Form["GroupName"]).Trim(); string minamount = Converter.ToString(Request.Form["MinAmount"]).Trim(); string maxware = Converter.ToString(Request.Form["MaxWare"]).Trim(); string maxoper = Converter.ToString(Request.Form["MaxOperate"]).Trim(); string minwaretime = Converter.ToString(Request.Form["MinWareTime"]).Trim(); string minvolume = Converter.ToString(Request.Form["MinVolume"]).Trim(); string maxvolume = Converter.ToString(Request.Form["MaxVolume"]).Trim(); string bwr = Converter.ToString(Request.Form["BalanceWarnRate"]).Trim(); string liquid = Converter.ToString(Request.Form["LiquidationRate"]).Trim(); int scale = Converter.ToInt(Request.Form["Scale"],0); //string lwr = Converter.ToString(Request.Form["LossWarnRate"]).Trim(); int allowlogin = Converter.ToInt(Request.Form["AllowLogin"], -1); int allowtrade = Converter.ToInt(Request.Form["AllowTrade"], -1); int aeo = Converter.ToInt(Request.Form["AllowEntrustOrder"], -1); int ed = Converter.ToInt(Request.Form["EntrustDeadLine"], 0); int pldl = Converter.ToInt(Request.Form["ProLossDeadLine"], 0); int atwt = Converter.ToInt(Request.Form["AllowTwoWayTrade"], -1); int aowt = Converter.ToInt(Request.Form["AllowOneWayTrade"], -1); int abw = Converter.ToInt(Request.Form["AllowBulkWare"], -1); int aft = Converter.ToInt(Request.Form["AllowFlashTrade"], -1); string bb = Converter.ToString(Request.Form["BalanceBonus"]).Trim(); //string resp = Converter.ToString(Request.Form["ResponseTime"]).Trim(); string low = Converter.ToString(Request.Form["OffsetLow"]).Trim(); //string high = Converter.ToString(Request.Form["OffsetHigh"]).Trim(); int allOcu = Converter.ToInt(Request.Form["AllowOccupyPrePay"], 0); string errMsg = ""; if (gname == "") errMsg += "用户组名称不能为空;"; double minamount1 = 0d; if (!double.TryParse(minamount, out minamount1) || minamount1 < 0) errMsg += "最小入金必须为大于0的数;"; double maxware1 = 0d; if (!double.TryParse(maxware, out maxware1) || maxware1 < 0) errMsg += "持仓量限制必须为大于0的数;"; int maxoper1 = 0; if (!int.TryParse(maxoper, out maxoper1) || maxoper1 < 0) errMsg += "当日操作次数必须为大于等于0的正数;"; int minwaretime1 = 0; if (!int.TryParse(minwaretime, out minwaretime1) || minwaretime1 < 0) errMsg += "持仓最少时间必须是大于等于0的正数;"; double minvolume1 = 0d; if (!double.TryParse(minvolume, out minvolume1) || minvolume1 < 0) errMsg += "最低成交量必须为大于等于0的数;"; double maxvolume1 = 0d; if (!double.TryParse(maxvolume, out maxvolume1) || maxvolume1 < 0) errMsg += "最大成交量必须为大于等于0的数;"; if (minvolume1 >= maxvolume1) errMsg += "最低成交量不能大于最大成交量;"; double bwr1 = 0d; if (!double.TryParse(bwr, out bwr1) || bwr1 < 0) errMsg += "余额预警比率必须为大于等于0的数;"; double liquid1 = 0d; if (!double.TryParse(liquid, out liquid1) || liquid1 < 0) errMsg += "强制平仓比率必须为大于等于0的数;"; //double pwr1 = 0d; //if (!double.TryParse(pwr, out pwr1) || pwr1 < 0) // errMsg += "账户盈利预警必须为大于等于0的数;"; //double lwr1 = 0d; //if (!double.TryParse(lwr, out lwr1) || lwr1 < 0) // errMsg += "账户亏损预警必须为大于等于0的数"; double bb1 = 0d; if (!double.TryParse(bb, out bb1) || bb1 < 0) errMsg += "账户余额红利必须为大于等于0的数;"; //int resp1 = 0; //if (!int.TryParse(resp, out resp1) || resp1 < 0) // errMsg += "响应时间必须为大于等于0的正整数;"; double low1 = 0d; if (!double.TryParse(low, out low1) || low1 < 0) errMsg += "允许偏差值必须为大于等于0的数"; //double high1 = 0d; //if (!double.TryParse(high, out high1) || high1 < 0) // errMsg += "偏差上限必须为大于等于0的数"; //if (low1 >= high1) // errMsg += "偏差必须小于偏差上限;"; if (errMsg.Length > 0) return Content("{result:'fail',msg:'" + errMsg + "'}"); try { TOperationLog OLog = new TOperationLog(); //修改 if (id > 0) { APIDataDataContext db = APIDataContextProxy.APIDB; { int count = (from p in db.TUserGroup where p.ID != id && p.GroupName.ToLower() == gname select p).Count(); if (count > 0) return Content("{result:'fail',msg:'分组名已存在,不能重复!'}"); TUserGroup entity = db.TUserGroup.Where(p => p.ID == id).FirstOrDefault(); OLog.BeforeValue = ObjectToJson.ModelToJson(entity); if (entity == null) return Content("{result:'fail',msg:'修改失败,分组不存在!'}"); entity.GroupName = gname; entity.MinAmount = minamount1; entity.MaxWare = maxware1; entity.MaxOperate = maxoper1; entity.MinWareTime = minwaretime1; entity.MinVolume = minvolume1; entity.MaxVolume = maxvolume1; entity.BalanceWarnRate = bwr1; entity.LiquidationRate = liquid1; entity.Scale = scale; //entity.ProfitWarnRate = pwr1; //entity.LossWarnRate = lwr1; entity.AllowLogin = allowlogin == 1; entity.AllowTrade = allowtrade == 1; entity.AllowEntrustOrder = aeo == 1; entity.EntrustDeadLine = ed; entity.ProLossDeadLine = pldl; entity.AllowBulkWare = abw == 1 ? true : false; entity.BalanceBonus = bb1; //entity.ResponseTime = resp1; //entity.OffsetHigh = high1; entity.OffsetLow = low1; entity.AllowFlashTrade = aft == 1; entity.AllowOccupyPrePay = allOcu == 1; if (aft == 0) { entity.AllowTwoWayTrade = false; entity.AllowOneWayTrade = false; } else { entity.AllowTwoWayTrade = atwt == 1; entity.AllowOneWayTrade = aowt == 1; } db.SubmitChanges(); OLog.UpdateValue = ObjectToJson.ModelToJson(entity); //写入操作日志 OLog.UserID = Convert.ToInt32(Session["ID"]); OLog.UserType = 2;//0 用户 1 会员 2 员工 OLog.CreateDate = DateTime.Now; OLog.PageName = "修改分组管理"; Converter.InsertOperationLog(OLog); //存入日志 Id = Convert.ToInt32(Session["ID"]); //id Type = Session["Type"].ToString(); //类型 msg = "分组修改成功"; fruit = true; Converter.InsertLog(Id, name, Type, msg, fruit); return Content("{result:'success',msg:'分组修改成功!',id:" + entity.ID + "}"); } } else { APIDataDataContext db = APIDataContextProxy.APIDB; { OLog.BeforeValue = "";; int count = (from p in db.TUserGroup where p.GroupName.ToLower() == gname select p).Count(); if (count > 0) return Content("{result:'fail',msg:'分组名已存在,不能重复!'}"); TUserGroup entity = new TUserGroup(); if (entity == null) return Content("{result:'fail',msg:'修改失败,分组不存在!'}"); entity.GroupName = gname; entity.MinAmount = minamount1; entity.MaxWare = maxware1; entity.MaxOperate = maxoper1; entity.MinWareTime = minwaretime1; entity.MinVolume = minvolume1; entity.MaxVolume = maxvolume1; entity.BalanceWarnRate = bwr1; entity.LiquidationRate = liquid1; entity.Scale = scale; //entity.ProfitWarnRate = pwr1; //entity.LossWarnRate = lwr1; entity.AllowLogin = allowlogin == 1 ? true : false; entity.AllowTrade = allowtrade == 1 ? true : false; entity.AllowEntrustOrder = aeo == 1 ? true : false; entity.EntrustDeadLine = ed; entity.ProLossDeadLine = pldl; entity.AllowBulkWare = abw == 1 ? true : false; entity.BalanceBonus = bb1; //entity.ResponseTime = resp1; //entity.OffsetHigh = high1; entity.OffsetLow = low1; entity.AllowFlashTrade = aft == 1; entity.AllowOccupyPrePay = allOcu == 1; if (aft == 0) { entity.AllowTwoWayTrade = false; entity.AllowOneWayTrade = false; } else { entity.AllowTwoWayTrade = atwt == 1; entity.AllowOneWayTrade = aowt == 1; } db.TUserGroup.InsertOnSubmit(entity); db.SubmitChanges(); OLog.UpdateValue = ObjectToJson.ModelToJson(entity); //写入操作日志 OLog.UserID = Convert.ToInt32(Session["ID"]); OLog.UserType = 2;//0 用户 1 会员 2 员工 OLog.CreateDate = DateTime.Now; OLog.PageName = "新增分组管理"; Converter.InsertOperationLog(OLog); //存入日志 Id = Convert.ToInt32(Session["ID"]); //id Type = Session["Type"].ToString(); //类型 msg = "分组添加成功"; fruit = false; Converter.InsertLog(Id, name, Type, msg, fruit); return Content("{result:'success',msg:'分组添加成功!',id:" + entity.ID + "}"); } } } catch { //存入日志 Id = Convert.ToInt32(Session["ID"]); //id Type = Session["Type"].ToString(); //类型 msg = "分组编辑失败"; fruit = false; Converter.InsertLog(Id, name, Type, msg, fruit); return Content("{result:'fail',msg:'出现位置错误,操作失败!'}"); } }
//public ActionResult GetNewestVersion() //{ // APIDataDataContext db = APIDataContextProxy.APIDB; // var sedition = (from b in db.TSysPreference select b.SEdition); // JObject job = new JObject(); // job["sedition"] = sedition; //} public ActionResult Index() { if (requestType == "testping") { return Content("connected"); } if (requestType.ToLower() == "gettestaccount") { return Content(GetTestAccount(Request["num"])); } string msg = ""; userid = 0; APIDataDataContext db = APIDataContextProxy.APIDB; //var aa = db.TSysPreference.FirstOrDefault(); sysPreference = db.TSysPreference.FirstOrDefault(); if (requestType.ToLower() != "login" && requestType.ToLower() != "regist" && requestType.ToLower() != "version") { var usertoken = (from c in db.Access where c.access_token == token select c.userid).FirstOrDefault(); userid = usertoken; JObject jo = new JObject(); if (usertoken <= 0) { JObject jomsg = new JObject(); jomsg["success"] = 6666; jomsg["msg"] = "token不正确!"; return Content(jo.ToString()); } } if (requestType == "Version") { JObject jobj = new JObject(); JObject job = new JObject(); job["Version"] = sysPreference.SEdition; job["Version1"] = sysPreference.SEdition1; job["Version2"] = sysPreference.SEdition2; jobj["success"] = "TRUE"; jobj["content"] = job; return Content(jobj.ToString()); } var group = (from c in db.TUserGroup join b in db.TRealAccounts on c.ID equals b.GroupID where b.ID == userid select c).FirstOrDefault(); userGroup = group; if (userGroup == null) { userGroup = (from c in db.TUserGroup where c.IsDefault == true select c).FirstOrDefault(); } switch (requestType.ToLower()) { case "login": msg = Login(); break; case "regist": msg = Regist(); break; case "getuserip": msg = GetUserIp; break; case "announcelist": msg = AnnounceList(); break; case "announce": msg = Announce(); break; case "analysislist": msg = AnalysisList(); break; case "analysis": msg = Analysis(); break; case "databytimespan": msg = GetDataByTimeSpan(); break; case "lateschardate": msg = LatestChartData(); break; case "allchartdate": msg = GetData(); break; case "getproducts": msg = GetProductList(); break; case "getproductinfo": msg = GetProductInfo(); break; case "createorder": msg = CreateOrder(); break; case "editorder": msg = EditOrder(); break; case "delorder": msg = DelOrder(); break; //case "getlatestchartdata": // return GetLatestChartData(); //case "getchartdatainfo": // return GetChartDataInfo(); case "getnewsbytype": msg = GetNewsByType(); break; case "getnewsinfobyid": msg = GetNewsInfoById(); break; case "orderinfo": msg = OrderInfo(); break; case "getproductsinfo": msg = GetProductsInfo(); break; case "gettproducts": msg = GetTProducts(); break; case "getemails": msg = GetEmails(); break; case "getproductprice": msg = GetProductPrice(); break; case "getemailcontent": msg = GetEmailContent(); break; case "getdatalist": msg = GetDataList(); break; case "getclosedatalist": msg = GetCloseDataList(); break; case "getorderinfo": msg = GetOrderInfo(); break; case "operatecollection": msg = OperateCollection(); break; case "closeorder": msg = CloseOrder(); break; case "closeallorder": msg = CloseAllOrder(); break; case "getcollectionproductlist": msg = GetCollectionProductList(); break; case "getuserinfo": msg = GetUserInfo(); break; case "getproductconfig": msg = GetProductConfig(); break; case "getaccountinfo": msg = getAccountInfo(); break; case "repeatorder": msg = RepeatOrder(); break; case "updatepwd": msg = UpdatePwd(); break; case "logout": msg = Logout(); break; } //msg = GetProductInfo(); return Content(msg); }
public string GetUserInfo() { try { APIDataDataContext db = APIDataContextProxy.APIDB; var Day1Type = sysPreference.Day1Type; var Day1BeginTime = sysPreference.Day1BeginTime; var Day1EndTime = sysPreference.Day1EndTime; var Day2Type = sysPreference.Day2Type; var Day2BeginTime = sysPreference.Day2BeginTime; var Day2EndTime = sysPreference.Day2EndTime; var Day3Type = sysPreference.Day3Type; var Day3BeginTime = sysPreference.Day3BeginTime; var Day3EndTime = sysPreference.Day3EndTime; var Day4Type = sysPreference.Day4Type; var Day4BeginTime = sysPreference.Day4BeginTime; var Day4EndTime = sysPreference.Day4EndTime; var Day5Type = sysPreference.Day5Type; var Day5BeginTime = sysPreference.Day5BeginTime; var Day5EndTime = sysPreference.Day5EndTime; var Day6Type = sysPreference.Day6Type; var Day6BeginTime = sysPreference.Day6BeginTime; var Day6EndTime = sysPreference.Day6EndTime; var Day7Type = sysPreference.Day7Type; var Day7BeginTime = sysPreference.Day7BeginTime; var Day7EndTime = sysPreference.Day7EndTime; DateTime begintime = DateTime.Now; DateTime endtime = DateTime.Now; DateTime nowdate = DateTime.Now; var aa = (from c in db.THoliday where c.BeginDate <= nowdate && c.EndDate >= nowdate select c).FirstOrDefault(); int dayofweek = (int)(nowdate.DayOfWeek); if (dayofweek == 0) { var a0 = Day6Type.Value; var a1 = DateTime.Parse("1991-01-01 " + Day6EndTime); var a2 = DateTime.Parse(nowdate.ToString("1991-01-01 HH:mm:ss")); if (a0 == 2 && a1 > a2) { begintime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day6BeginTime)).AddDays(-1); endtime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day6EndTime)); } else { begintime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day7BeginTime)); endtime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day7EndTime)); if (Day7Type == 2) { endtime = endtime.AddDays(1); } } } else if (dayofweek == 1) { var a0 = Day7Type.Value; var a1 = DateTime.Parse("1991-01-01 " + Day7EndTime); var a2 = DateTime.Parse(nowdate.ToString("1991-01-01 HH:mm:ss")); if (a0 == 2 && a1 > a2) { begintime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day7BeginTime)).AddDays(-1); endtime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day7EndTime)); } else { begintime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day1BeginTime)); endtime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day1EndTime)); if (Day1Type == 2) { endtime = endtime.AddDays(1); } } } else if (dayofweek == 2) { var a0 = Day1Type.Value; var a1 = DateTime.Parse("1991-01-01 " + Day1EndTime); var a2 = DateTime.Parse(nowdate.ToString("1991-01-01 HH:mm:ss")); if (a0 == 2 && a1 > a2) { begintime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day1BeginTime)).AddDays(-1); endtime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day1EndTime)); } else { begintime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day2BeginTime)); endtime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day2EndTime)); if (Day2Type == 2) { endtime = endtime.AddDays(1); } } } else if (dayofweek == 3) { var a0 = Day2Type.Value; var a1 = DateTime.Parse("1991-01-01 " + Day2EndTime); var a2 = DateTime.Parse(nowdate.ToString("1991-01-01 HH:mm:ss")); if (a0 == 2 && a1 > a2) { begintime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day2BeginTime)).AddDays(-1); endtime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day2EndTime)); } else { begintime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day3BeginTime)); endtime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day3EndTime)); if (Day3Type == 2) { endtime = endtime.AddDays(1); } } } else if (dayofweek == 4) { var a0 = Day3Type.Value; var a1 = DateTime.Parse("1991-01-01 " + Day3EndTime); var a2 = DateTime.Parse(nowdate.ToString("1991-01-01 HH:mm:ss")); if (a0 == 2 && a1 > a2) { begintime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day3BeginTime)).AddDays(-1); endtime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day3EndTime)); } else { begintime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day4BeginTime)); endtime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day4EndTime)); if (Day4Type == 2) { endtime = endtime.AddDays(1); } } } else if (dayofweek == 5) { var a0 = Day4Type.Value; var a1 = DateTime.Parse("1991-01-01 " + Day4EndTime); var a2 = DateTime.Parse(nowdate.ToString("1991-01-01 HH:mm:ss")); if (a0 == 2 && a1 > a2) { begintime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day4BeginTime)).AddDays(-1); endtime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day4EndTime)); } else { begintime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day5BeginTime)); endtime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day5EndTime)); if (Day5Type == 2) { endtime = endtime.AddDays(1); } } } else if (dayofweek == 6) { var a0 = Day5Type.Value; var a1 = DateTime.Parse("1991-01-01 " + Day5EndTime); var a2 = DateTime.Parse(nowdate.ToString("1991-01-01 HH:mm:ss")); if (a0 == 2 && a1 > a2) { begintime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day5BeginTime)).AddDays(-1); endtime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day5EndTime)); } else { begintime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day6BeginTime)); endtime = DateTime.Parse(nowdate.ToString("yyyy-MM-dd " + Day6EndTime)); if (Day6Type == 2) { endtime = endtime.AddDays(1); } } } bool isTrading = true; if (nowdate <= begintime || nowdate >= endtime) { isTrading = false; } else if (aa != null) { isTrading = false; } TRealAccounts userinfo = (from c in db.TRealAccounts where c.ID == userid select c).FirstOrDefault(); string Name = userinfo.Name; string AccountType = "模拟"; if (userinfo.AccountType == 1) AccountType = "实盘"; var ab = 0.00; if(userinfo.AccountMoney>0) ab = Math.Floor(userinfo.AccountMoney.Value * 100) / 100;//取2位小数, string AccountMoney = ab.ToString("F2"); var allProfitAndLoss = 0.0; var allprice = 0.0; var allOccupyFunds = 0.0; var allProfitAndLossNet = 0.0; #region 占用资金的订单 TUserGroup userGroup = (from c in db.TUserGroup where c.ID == userinfo.GroupID select c).FirstOrDefault(); if (userGroup == null) { userGroup = (from c in db.TUserGroup where c.IsDefault == true select c).FirstOrDefault(); } if (userGroup == null) { userGroup = (from c in db.TUserGroup select c).FirstOrDefault(); } var UGAllowTrade = userGroup.AllowTrade; var UAllowTrade = userinfo.AllowTrade; if (UGAllowTrade == false || UAllowTrade == false) isTrading = false; bool AllowOccupyPrePay = userGroup.AllowOccupyPrePay.Value; //查询所有在手订单 var order = (from c in db.TOrders join a in db.TProducts on c.ProductID equals a.ID join b in db.TLastClose on a.ProductCode equals b.ProductCode where c.TRealAccountsID == userid && c.OrderType == 1 && c.OrderState == 1 select new { c, b, a }).ToList(); var num = order.Count(); //查询委托订单 var order2 = (from c in db.TOrders join a in db.TProducts on c.ProductID equals a.ID join b in db.TLastClose on a.ProductCode equals b.ProductCode where c.TRealAccountsID == userid && c.OrderType == 0 && c.OrderState == 1 select new { c, b, a }).ToList(); var num2 = order2.Count(); if (AllowOccupyPrePay == true) { order = order.Union(order2).ToList(); } var abc = 0.0; //var priceList = (from c in db.TLastClose select c).ToList();//查询现在所有产品 foreach (var items in order) { //var LastCloses = (from c in priceList where c.ProductCode == items.a.ProductCode.ToString() select c.LastClose).FirstOrDefault(); //var LastClose = Convert.ToDouble(Converter.ToFloat(LastCloses).ToString("F" + Scale)); //jb["NetProfit"] = (ProfitAndLoss - Deposit - Interest).ToString("F" + Scale); var Scale = Converter.ToInt((items.a.Scale), 2); var fudongyingkui = 0.0;//浮动盈亏 if (items.c.Deal == true)//买 fudongyingkui = (Converter.ToFloat(items.b.LastClose.Value.ToString("F" + Scale)) - Converter.ToFloat(items.c.OpenPrice)) * Converter.ToFloat(items.c.OrderCount) * Converter.ToFloat(items.a.ContractNumber); else//卖 fudongyingkui = (Converter.ToFloat(items.c.OpenPrice) - Converter.ToFloat(items.b.LastClose.Value.ToString("F" + Scale)) - Converter.ToFloat(items.a.Fixedly)) * Converter.ToFloat(items.c.OrderCount) * Converter.ToFloat(items.a.ContractNumber); //fudongyingkui = Converter.ToFloat(items.c.ProfitAndLoss); //fudongyingkui = Converter.ToFloat(fudongyingkui); var jiagongfei = Converter.ToFloat(items.c.Deposit); //加工费(已计算好) //jiagongfei = Converter.ToFloat(jiagongfei); var cangxi = Converter.ToFloat(items.c.Interest); //仓息(已计算好) //cangxi = Converter.ToFloat(cangxi); var baozhengjin = Converter.ToFloat(items.c.OccupyFunds); //占用资金 保证金OccupyFundsType(已计算好) //baozhengjin = Converter.ToFloat(baozhengjin); //var ykjl = Converter.ToFloat(items.c.NetProfit); //盈亏净利(已计算好) var ykjl = Converter.ToFloat(fudongyingkui - jiagongfei - cangxi); allprice = allprice + ykjl; allOccupyFunds = allOccupyFunds - baozhengjin; allProfitAndLoss = allProfitAndLoss + fudongyingkui; //计算盈亏 allProfitAndLossNet = allProfitAndLossNet + ykjl; } //var AvailablePrice = Converter.ToFloat(userinfo.AccountMoney) - allprice; //可用余额 //AvailablePrice = Converter.ToFloat(AvailablePrice); #endregion string AccountNet = (ab + allprice).ToString("f2");//余额-盈亏毛利 string MarginOccupied = (allOccupyFunds * -1).ToString("f2"); string AvailableOccupied = (Convert.ToDouble(AccountNet) + allOccupyFunds).ToString("f2"); string LossWarnRate = "0"; if (Convert.ToDouble(MarginOccupied) != 0) { try { LossWarnRate = Convert.ToInt32((Convert.ToDouble(AccountNet) / Convert.ToDouble(MarginOccupied)) * 100) + ""; } catch { LossWarnRate = Convert.ToInt64((Convert.ToDouble(AccountNet) / Convert.ToDouble(MarginOccupied)) * 100) + ""; } } string ProfitAndLoss = allProfitAndLoss.ToString("f2") + ""; string ProfitAndLossNet = allProfitAndLossNet.ToString("f2") + ""; string OnlineOrder = num + ""; string EntrustOrder = num2 + ""; JObject job = new JObject(); job["Name"] = Name; job["MaxVolume"] = userGroup.MaxVolume;// job["MinVolume"] = userGroup.MinVolume; job["Scale"] = userGroup.Scale; job["AccountType"] = AccountType; job["AccountMoney"] = AccountMoney; job["AccountNet"] = AccountNet; job["MarginOccupied"] = MarginOccupied; job["AvailableOccupied"] = AvailableOccupied; job["LossWarnRate"] = LossWarnRate; job["ProfitAndLoss"] = ProfitAndLoss; job["ProfitAndLossNet"] = ProfitAndLossNet; job["OnlineOrder"] = OnlineOrder; job["EntrustOrder"] = EntrustOrder; job["isTrading"] = isTrading; try { job["LiquidationRate"] = userGroup.LiquidationRate; } catch { job["LiquidationRate"] = 70; } try { job["BalanceWarnRate"] = userGroup.BalanceWarnRate;//100 } catch { job["BalanceWarnRate"] = 100; } job["AllowFlashTrade"] = userGroup.AllowFlashTrade.ToString(); job["AllowBulkWare"] = userGroup.AllowBulkWare.ToString(); string EntrustDeadLinestr = ""; DateTime datetimes = DateTime.Now; string datestr = ""; int EntrustDeadLine = 1; try { EntrustDeadLine = userGroup.EntrustDeadLine.Value; } catch { } if (EntrustDeadLine == 1) { EntrustDeadLinestr = "当日有效"; datestr = datetimes.ToString("yyyy-MM-dd 23:59:59"); } else if (EntrustDeadLine == 2) { EntrustDeadLinestr = "长期有效"; datestr = datetimes.AddYears(1).ToString("yyyy-MM-dd 23:59:59"); } else { EntrustDeadLinestr = "本周有效"; int dayofweeks = (int)datetimes.DayOfWeek; if (dayofweeks == 0) dayofweeks = 7; int addday = 7 - dayofweeks; datestr = datetimes.AddDays(addday).ToString("yyyy-MM-dd 23:59:59"); } job["EntrustDeadLine"] = EntrustDeadLinestr; job["EntrustDeadLineDate"] = datestr; JObject jobj = new JObject(); jobj["success"] = "TRUE"; jobj["content"] = job; return jobj.ToString(); } catch { return ErrMsg(10112, "服务器请求失败,请稍后再试!"); } }
/// <summary> /// 创建订单 /// 10022 开仓时间不能为空 /// 10023 对不起您所在的用户组现在不允许交易 /// 10024 对不起您所在的用户组现在不允许开委托订单 /// 10025 手数范围不正确 /// 10026 超过当日最大持仓量 /// 10027 超过当日最大操作次数限制 /// 10028 pid错误 /// 10029 当前产品不支持交易 /// 10030 超过止盈距离 /// 10031 超过止损距离 /// 10032 超过挂单距离 /// 10033 当前可用余额不足 /// 10034 创建订单失败 /// </summary> /// <returns></returns> public string CreateOrder() { double NowPrice = Converter.ToFloat(Request["nowprice"], 0); //现价 int id = Converter.ToInt(Request["pid"], 0); //产品id string Deal = Converter.ToString(Request["deal"], "true"); //true (true买 false卖)默认买 double OrderCount = Converter.ToFloat(Request["ordercount"], 1); //手数 double OpenPrice = Converter.ToFloat(Request["openprice"], 0); //开仓价(委托的开仓价) string OpenTimes = Converter.ToString(Request["opentime"], ""); //开时间(如果是委托订单就是委托单的截止时间) string OperatorIP = ""; //操作Ip try { OperatorIP = GetUserIp; } catch { } double Profit = Converter.ToFloat(Request["profit"], 0); //止盈 平仓用的 double Loss = Converter.ToFloat(Request["loss"], 0); //止损 平仓用的 int OrderType = Converter.ToInt(Request["ordertype"], 1); //订单类型 0委托 1持仓 2历史单 int EntrustType = Converter.ToInt(Request["entrusttype"], 0); //委托类型 0限价交易 1止损交易 APIDataDataContext db = APIDataContextProxy.APIDB; //查询用户组,如果用户所在组为空,则使用默认的用户组,如果默认用户组不存在,则给第一条用户组(IsDefault) TRealAccounts userinfo = (from c in db.TRealAccounts where c.ID == userid select c).FirstOrDefault(); TUserGroup userGroup = (from c in db.TUserGroup where c.ID == userinfo.GroupID select c).FirstOrDefault(); if (userGroup == null) { userGroup = (from c in db.TUserGroup where c.IsDefault == true select c).FirstOrDefault(); } if (userGroup == null) { userGroup = (from c in db.TUserGroup select c).FirstOrDefault(); } DateTime OpenTime = DateTime.Now; if (string.IsNullOrEmpty(OpenTimes)) { OpenTime = DateTime.Now.AddDays(1); //return ErrMsg(10022, "开仓时间不能为空!"); } else { DateTime.TryParse(OpenTimes, out OpenTime); } try { if (OrderType == 0)//委托单 { if (userGroup.EntrustDeadLine.Value == 1)//当日有效 { if (OpenTime.Date != DateTime.Now.Date) { return ErrMsg(10022, "委托订单必须当天有效!"); } } else if (userGroup.EntrustDeadLine.Value == 2)//长期有效 { } else//本周有效 { int weekday2 = (int)(DateTime.Now.DayOfWeek); if (weekday2 == 0) weekday2 = 7; var todayint2 = 7 - weekday2; var aa = (OpenTime.Date - DateTime.Now.Date).Days; if (aa > todayint2) { return ErrMsg(10022, "委托订单必须本周有效!"); } } } //Deposit 加工费 //OccupyFunds 占用资金 //用户组逻辑 #region 允许交易 var AllowTrade = userGroup.AllowTrade; //允许交易 if (AllowTrade == false) { return ErrMsg(10023, "对不起您所在的用户组现在不允许交易!"); } TRealAccounts tra = (from c in db.TRealAccounts where c.ID == userid select c).FirstOrDefault(); var traAllowTrade = tra.AllowTrade; if (traAllowTrade == false) { return ErrMsg(10023, "对不起您现在不允许交易!"); } #endregion #region 委托交易 var AllowEntrustOrder = userGroup.AllowEntrustOrder; //允许委托订单 if (AllowEntrustOrder == false && OrderType == 0) { return ErrMsg(10024, "对不起您所在的用户组现在不允许开委托订单!"); } #endregion #region 手数 var MinVolume = userGroup.MinVolume; //最小手数 var MaxVolume = userGroup.MaxVolume; //最大手数 if (OrderCount < MinVolume || OrderCount > MaxVolume) { return ErrMsg(10025, "手数范围在" + MinVolume + "-" + MaxVolume + "!"); } #endregion #region 最大持仓量 var MaxWare = userGroup.MaxWare; //当日最大持仓量(在手订单) //查询产品持仓量 var orderWare = (from c in db.TOrders where c.TRealAccountsID == userid && c.OrderState == 1 && c.OrderType == 1 && c.ProductID == id && c.OpenTime.Value.Date == DateTime.Now.Date select c.OrderCount).Sum(); if (orderWare + OrderCount > MaxWare) { return ErrMsg(10026, "超过当日最大持仓量,当日最大持仓量为" + MaxWare + "!"); } #endregion #region 当日操作最大次数 var MaxOperate = userGroup.MaxOperate; //当日操作最大次数限制 开仓(成功的开仓平仓委托动作) //查询当日操作次数 var orderOperate = (from c in db.TOrders //开仓 where c.TRealAccountsID == userid && c.OrderState == 1 && c.OrderType == 1 && c.OpenTime.Value.Date == DateTime.Now.Date select c).Count(); orderOperate = orderOperate + (from c in db.TOrders//委托 where c.TRealAccountsID == userid && c.OrderState == 1 && c.OrderType == 0 && c.UpdateTime.Value.Date == DateTime.Now.Date select c).Count(); orderOperate = orderOperate + (from c in db.TOrders//平仓 where c.TRealAccountsID == userid && c.OrderState == 2 && c.OrderType == 2 && c.OpenTime.Value.Date == DateTime.Now.Date select c).Count(); if (orderOperate >= MaxOperate) { return ErrMsg(10027, "超过当日最大操作次数限制,当日最大操作次数为" + MaxOperate + "!"); } #endregion //LiquidationRate 强制平仓比率 var AllowOccupyPrePay = userGroup.AllowOccupyPrePay; //允许委托订单占用预付款(委托订单占用保证金) //产品逻辑 var product = (from c in db.TProducts where c.ID == id select c).FirstOrDefault(); if (product == null) { return ErrMsg(10028, "pid错误!"); } var Scale = Converter.ToFloat(product.Scale); #region 否可以开仓交易 是否显示 var IsBuy = product.IsBuy; //是否可以开仓交易 var IsLook = product.IsLook; //是否显示 if (IsBuy == false || IsLook == false) { return ErrMsg(10029, "当前产品不支持交易!"); } #endregion #region 止盈·止损 距离 var ProfitSize = product.ProfitSize; //止盈距离 //if (Profit > ProfitSize) //{ // return ErrMsg(10030, "超过止盈距离,止盈距离为" + ProfitSize + "!"); //} var LossSize = product.LossSize; //止损距离 //if (Loss > LossSize) //{ // return ErrMsg(10031, "超过止损距离,止损距离为" + LossSize + "!"); //} #endregion #region 挂单距离 var lastclose = (from c in db.TLastClose where c.ProductCode == product.ProductCode select c).FirstOrDefault(); var lastcloseprice = 0.0;//现价(如果是买,则是当前最新价+点差) if(OrderType==1) { if (lastclose == null) { return ErrMsg(10050, "价格已经改变请重新开仓!"); } var OffsetLow = userGroup.OffsetLow;//允许的价格浮动 var OffsetHigh = userGroup.OffsetHigh; //以当前数据库的最新价格为准,而不是使用用户传入的价格 if (Deal.ToLower() == "true") { lastcloseprice = product.Fixedly.Value + lastclose.LastClose.Value; } else { lastcloseprice = lastclose.LastClose.Value; } if (lastcloseprice - OpenPrice > 0) { if (((lastcloseprice - OpenPrice) >= OffsetLow))//&& (lastcloseprice - OpenPrice) <= OffsetHigh)) return ErrMsg(10050, "价格已经改变请重新开仓!"); } else { if (((OpenPrice - lastcloseprice) >= OffsetLow))// && (OpenPrice - lastcloseprice) <= OffsetHigh)) return ErrMsg(10050, "价格已经改变请重新开仓!"); } } else { if (Deal.ToLower() == "true") { lastcloseprice = product.Fixedly.Value + lastclose.LastClose.Value; } else { lastcloseprice = lastclose.LastClose.Value; } } NowPrice = lastcloseprice; var EntrustSize = product.EntrustSize; //挂单距离 委托开盘价为当前开盘价格+ - 挂单距离 //if (OrderType != 1 && !(NowPrice - EntrustSize <= OpenPrice && NowPrice + EntrustSize >= OpenPrice)) //{ // return ErrMsg(10032, "超过挂单距离,挂单距离离为" + EntrustSize + "!"); //} if (OrderType == 0) if (EntrustType == 0)//0限价交易 { if (!(NowPrice + EntrustSize <= OpenPrice) && Deal == "false")//卖 { return ErrMsg(10032, "超过挂单距离,挂单距离离为" + EntrustSize + "!"); } else if (!(NowPrice - EntrustSize >= OpenPrice) && Deal == "true")//买 { return ErrMsg(10032, "超过挂单距离,挂单距离离为" + EntrustSize + "!"); } } else//止损交易 { if (!(NowPrice - EntrustSize >= OpenPrice) && Deal == "false")//卖 { return ErrMsg(10032, "超过挂单距离,挂单距离离为" + EntrustSize + "!"); } else if (!(NowPrice + EntrustSize <= OpenPrice) && Deal == "true")//买 { return ErrMsg(10032, "超过挂单距离,挂单距离离为" + EntrustSize + "!"); } } #endregion var ContractNumber = product.ContractNumber; //合约数(乘) //查询所有在手订单 var order = (from c in db.TOrders join a in db.TProducts on c.ProductID equals a.ID join b in db.TLastClose on a.ProductCode equals b.ProductCode where c.TRealAccountsID == userid && c.OrderType == 1 && c.OrderState == 1 select new { c, b, a }).ToList(); //如果委托订单占用保证金,则把委托订单也计算在内(计算风险比率 70%) if (AllowOccupyPrePay == true) { var order2 = (from c in db.TOrders join a in db.TProducts on c.ProductID equals a.ID join b in db.TLastClose on a.ProductCode equals b.ProductCode where c.TRealAccountsID == userid && c.OrderType == 0 && c.OrderState == 1 select new { c, b, a }).ToList(); order = order.Union(order2).ToList(); } var allprice = 0.0;//所有占用保证金的订单的盈亏净利之和(浮动盈亏-仓息-加工费)-所用订单的保证金 foreach (var item in order) { var Scales=Converter.ToInt(item.a.Scale,2); var fudongyingkui = 0.0;//浮动盈亏 if (item.c.OrderType != 0) { if (item.c.Deal == true)//买 fudongyingkui = (Converter.ToFloat(item.b.LastClose.Value.ToString("F"+Scales)) - item.c.OpenPrice.Value) * item.a.ContractNumber.Value * item.c.OrderCount.Value; else//卖 fudongyingkui = (item.c.OpenPrice.Value - Converter.ToFloat(item.b.LastClose.Value.ToString("F"+Scales)) - Converter.ToFloat(item.a.Fixedly)) * item.a.ContractNumber.Value * item.c.OrderCount.Value; } fudongyingkui = Converter.ToFloat(fudongyingkui.ToString("F" + Scales)); //fudongyingkui = Converter.ToFloat(item.c.ProfitAndLoss); var jiagongfei = Converter.ToFloat(item.c.Deposit); //加工费 var cangxi = Converter.ToFloat(item.c.Interest); //仓息 var baozhengjin = Converter.ToFloat(item.c.OccupyFunds); //占用资金 保证金OccupyFundsType allprice = allprice + fudongyingkui - jiagongfei - cangxi - baozhengjin;// } //var userinfo = (from c in db.TRealAccounts where c.ID == userid select c).FirstOrDefault(); var AvailablePrice = userinfo.AccountMoney + allprice; //可用余额(账户余额-仓息-加工费+浮动盈亏-保证金) #region 计算当前(即将创建的单子)的相关费用 int DepositType = product.DepositType.Value; //加工费方式(每单收取的加工费) 1固定(每笔统一价) 2浮动(按照交易金额的百分比来算) double OpenDeposit = Converter.ToFloat(product.OpenDeposit, 0); //开仓加工费 固定(固定值) 浮动(开仓*固定值) int OccupyFundsType = product.OccupyFundsType.Value; //保证金方式(每单必须有的保证金) 1固定(每笔统一价) 2浮动(按照交易金额的百分比来算) double OccupyFunds = Converter.ToFloat(product.OccupyFunds, 0); //保证金 固定(固定值*手数) 浮动(开仓价*固定值*手数) //计算当前订单加工费 var nowjiagongfei = 0.0; if (DepositType == 1) nowjiagongfei = OpenDeposit * product.ContractNumber.Value * Converter.ToFloat(OrderCount, 1); else nowjiagongfei = 0.01 * OpenDeposit * product.ContractNumber.Value * NowPrice * Converter.ToFloat(OrderCount, 1); //计算当前订单保证金 var nowbaozhengjin = 0.0; if (OccupyFundsType == 1) nowbaozhengjin = OccupyFunds * product.ContractNumber.Value * Converter.ToFloat(OrderCount, 1); else nowbaozhengjin = 0.01 * OccupyFunds * product.ContractNumber.Value * NowPrice * Converter.ToFloat(OrderCount, 1); //仓息刚刚下的订单是没有的 //现在的钱可以开多少手 var ordernumMax = AvailablePrice / (nowjiagongfei + nowbaozhengjin);//只用加工费和保证金需要占用资金 if (Converter.ToFloat(ordernumMax, 0) < 1) return ErrMsg(10033, "当前可用余额不足,请修改手数或更换产品!"); TOrders addOrder = new TOrders(); #endregion if (OrderType == 1)//开仓 { addOrder.ProductID = id; addOrder.OrderNum = DateTime.Now.ToString("yyyyMMddHHmmssfff"); addOrder.TRealAccountsID = userid; addOrder.OpenPrice = Converter.ToFloat(lastcloseprice.ToString("F" + Scale)); addOrder.Deal = Deal.ToLower() == "true"; addOrder.OrderCount = OrderCount; addOrder.OpenTime = OpenTime; addOrder.Profit = Convert.ToDouble(Profit.ToString("F" + Scale)); addOrder.Loss = Convert.ToDouble(Loss.ToString("F" + Scale)); addOrder.OrderState = 1; addOrder.OrderType = OrderType; addOrder.EntrustType = EntrustType; addOrder.UpdateTime = DateTime.Now; addOrder.Deposit = nowjiagongfei; addOrder.OccupyFunds = nowbaozhengjin; addOrder.OperatorIP = OperatorIP; } else//委托 { addOrder.ProductID = id; addOrder.OrderNum = DateTime.Now.ToString("yyyyMMddHHmmssfff"); addOrder.TRealAccountsID = userid; addOrder.OpenPrice = Converter.ToFloat(OpenPrice.ToString("F" + Scale)); addOrder.Deal = Deal.ToLower() == "true"; addOrder.OrderCount = OrderCount; addOrder.OpenTime = OpenTime; addOrder.Profit = Convert.ToDouble(Profit.ToString("F" + Scale)); addOrder.Loss = Convert.ToDouble(Loss.ToString("F" + Scale)); addOrder.OrderState = 1; addOrder.OrderType = OrderType; addOrder.EntrustType = EntrustType; addOrder.UpdateTime = DateTime.Now; addOrder.Deposit = nowjiagongfei; addOrder.OccupyFunds = nowbaozhengjin; addOrder.OperatorIP = OperatorIP; } db.TOrders.InsertOnSubmit(addOrder); db.SubmitChanges(); JObject jb = new JObject(); jb["success"] = "TRUE"; jb["content"] = addOrder.ID; return jb.ToString(); } catch { return ErrMsg(10034, "创建订单失败!"); } }