public ActionResult EditPositionPassword() { var password = Request["password"]; var orderid = Converter.ToInt(Request["orderid"], 0); var types = Request["types"];//0保存 1删除 2平仓 var OrderNum = Request["OrderNum"]; var ProductID = Request["ProductID"]; var TRealAccountsID = Converter.ToInt(Request["TRealAccountID"], 0); var Deal = Request["Deal"]; var OrderCount = Request["OrderCount"]; var OpenPrice = Request["OpenPrice"]; var Loss = Request["Loss"]; var OpenTime = Request["OpenTime"]; var Profit = Request["Profit"]; var NowPrice = Request["NowPrice"]; var Deposit = Request["Deposit"]; var UpdateTime = Request["UpdateTime"]; APIDataDataContext db = APIDataContextProxy.APIDB; TOperationLog OLog = new TOperationLog(); var user2 = (from c in db.TRealAccounts where c.ID == TRealAccountsID && c.PassWord == password select c).FirstOrDefault(); if (user2 == null) { return Json(new { code = "0", msg = "客户密码不正确!" }); } try { if (orderid > 0) { var order = (from c in db.TOrders where c.ID == orderid select c).FirstOrDefault(); OLog.BeforeValue = ObjectToJson.ModelToJson(order); OLog.UserID = Convert.ToInt32(Session["ID"]); OLog.UserType = 2;//0 用户 1 会员 2 员工 OLog.CreateDate = DateTime.Now; if (order != null) { if (types == "1") { #region 删除订单 db.TOrders.DeleteOnSubmit(order); db.SubmitChanges(); OLog.UpdateValue = ""; //写入操作日志 OLog.PageName = "删除在手订单"; Converter.InsertOperationLog(OLog); return Json(new { code = "1", msg = "提交成功!" }); #endregion } else if (types == "0") { #region 修改保存 order.ProductID = Converter.ToInt(ProductID, 0); order.TRealAccountsID = Converter.ToInt(TRealAccountsID, 0); order.Deal = Deal == "1" ? true : false; order.OrderCount = Converter.ToInt(OrderCount, 0); order.OpenPrice = Converter.ToFloat(OpenPrice, 0); order.Loss = Converter.ToFloat(Loss, 0); order.OpenTime = Convert.ToDateTime(OpenTime); order.Profit = Converter.ToFloat(Profit, 0); order.NowPrice = Converter.ToFloat(NowPrice, 0); order.Deposit = Converter.ToFloat(Deposit, 0); order.UpdateTime = Convert.ToDateTime(UpdateTime); db.SubmitChanges(); OLog.UpdateValue = ObjectToJson.ModelToJson(order); //写入操作日志 OLog.PageName = "修改在手订单"; Converter.InsertOperationLog(OLog); return Json(new { code = "1", msg = "提交成功!" }); #endregion } else { #region 平仓 int OrderId = orderid; var item = (from c in db.TOrders where c.ID == OrderId && c.OrderState == 1 && c.OrderType == 1 select c).FirstOrDefault(); if (item != null) { var product = (from c in db.TProducts join b in db.TLastClose on c.ProductCode equals b.ProductCode where c.ID == item.ProductID orderby c.ID select new { c, b.LastClose, b.LastUpdateTime }).FirstOrDefault(); if (product != null) { var Scale = Converter.ToFloat(product.c.Scale, 2); var nowdate = product.LastUpdateTime; #region 加工费 double closedeposit = 0.0; //加工费 if (product.c.DepositType == 1)//固定 { closedeposit = Converter.ToFloat(product.c.CloseDeposit, 0) * Converter.ToFloat(product.c.ContractNumber, 0) * Converter.ToFloat(item.OrderCount, 0); } else if (product.c.DepositType == 2)//浮动 { if (item.Deal == false) closedeposit = 0.01 * Converter.ToFloat(product.c.CloseDeposit, 0) * (Converter.ToFloat(product.LastClose, 0)) * Converter.ToFloat(product.c.ContractNumber, 0) * Converter.ToFloat(item.OrderCount, 0); else closedeposit = 0.01 * Converter.ToFloat(product.c.CloseDeposit, 0) * (Converter.ToFloat(product.LastClose, 0) + Converter.ToFloat(product.c.Fixedly, 0)) * Converter.ToFloat(product.c.ContractNumber, 0) * Converter.ToFloat(item.OrderCount, 0); } closedeposit = Converter.ToFloat(closedeposit.ToString("F" + Scale), 0); #endregion item.Deposit = Converter.ToFloat((Converter.ToFloat(item.Deposit, 0) + closedeposit).ToString("F" + Scale), 0); double LastClose = 0.0; //市场价 收盘价 double Spread = 0.0; //点数 //计算盈亏 if (item.Deal == false)//卖出 { LastClose = Converter.ToFloat(product.LastClose, 0) + Converter.ToFloat(product.c.Fixedly, 0); Spread = Converter.ToFloat(item.OpenPrice, 0) - LastClose; } else if (item.Deal == true)//买入 { LastClose = Converter.ToFloat(product.LastClose, 0); Spread = LastClose - Converter.ToFloat(item.OpenPrice, 0); } item.Spread = Converter.ToFloat(Spread.ToString("F" + Scale), 0); item.ProfitAndLoss = Converter.ToFloat((Converter.ToFloat(Spread * item.OrderCount, 0) * Converter.ToFloat(product.c.ContractNumber, 0)).ToString("F" + Scale), 0); item.NowPrice = Converter.ToFloat(LastClose.ToString("F" + Scale), 0); item.NetProfit = Converter.ToFloat((Converter.ToFloat(item.ProfitAndLoss, 0) - Converter.ToFloat(item.Deposit, 0) - Converter.ToFloat(item.Interest, 0)).ToString("F" + Scale), 0); item.UpdateTime = nowdate; item.OrderState = 2; item.OrderType = 2; item.CloseType = "授权平仓"; var user = (from c in db.TRealAccounts where c.ID == item.TRealAccountsID select c).FirstOrDefault(); try { var agent = (from c in db.TAgents join b in db.TAgentGroup on c.GroupID equals b.ID where c.ID == user.AgendID select new { c.ID, c.DirectAgentID, c.Depth, c.HeadRate1, c.ProcessRate1, c.InterestRate1, c.HeadRate2, c.ProcessRate2, c.InterestRate2, c.HeadRate3, c.ProcessRate3, c.InterestRate3, c.HeadRate4, c.ProcessRate4, c.InterestRate4, c.HeadRate5, c.ProcessRate5, c.InterestRate5, GID = b.ID, b.GroupName, b.ProcessRate, b.HeadRate, b.InterestRate, b.NextRate }).FirstOrDefault(); #region 分成 if (agent != null) { //查询客户所属会员的分成 double HeadRate = Convert.ToDouble(Converter.ToFloat(agent.HeadRate, 0).ToString("F4")) * 0.01; double ProcessRate = Convert.ToDouble(Converter.ToFloat(agent.ProcessRate, 0).ToString("F4")) * 0.01; double InterestRate = Convert.ToDouble(Converter.ToFloat(agent.InterestRate, 0).ToString("F4")) * 0.01; //计算分成 double HeadInfo = Convert.ToDouble((Converter.ToFloat(item.ProfitAndLoss, 0) * HeadRate * -1).ToString("F4")); double ProcessInfo = Convert.ToDouble((Converter.ToFloat(item.Deposit, 0) * ProcessRate).ToString("F4")); double InterestInfo = Convert.ToDouble((Converter.ToFloat(item.Interest, 0) * InterestRate).ToString("F4")); TAgentRate tar = new TAgentRate(); tar.HeadRate = HeadInfo.ToString(); tar.ProcessRate = ProcessInfo.ToString(); tar.InterestRate = InterestInfo.ToString(); tar.AllRate = (HeadInfo + ProcessInfo + InterestInfo).ToString(); tar.NextHeadRate = "0"; tar.NextProcessRate = "0"; tar.NextInterestRate = "0"; tar.NextAllRate = "0"; tar.Date = DateTime.Now; tar.TAgentId = agent.ID; tar.TOrderId = item.ID; IList<TAgentRate> tarlist = new List<TAgentRate>(); int depth = agent.Depth;//深度 if (depth > 6) depth = 6; var ag = (from c in db.TAgents where c.ID == agent.ID select c).FirstOrDefault(); var age = ag; for (int i = 1; i < depth; i++) { if (i == 1) { //会员的分成 HeadRate = Convert.ToDouble(Converter.ToFloat(age.HeadRate1, 0).ToString("F4")) * 0.01; ProcessRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate1, 0).ToString("F4")) * 0.01; InterestRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate1, 0).ToString("F4")) * 0.01; //计算分成 var HeadInfo_ = Convert.ToDouble((Converter.ToFloat(item.ProfitAndLoss, 0) * HeadRate * -1).ToString("F4")); var ProcessInfo_ = Convert.ToDouble((Converter.ToFloat(item.Deposit, 0) * ProcessRate).ToString("F4")); var InterestInfo_ = Convert.ToDouble((Converter.ToFloat(item.Interest, 0) * InterestRate).ToString("F4")); TAgentRate tars = new TAgentRate(); tars.HeadRate = "0"; tars.ProcessRate = "0"; tars.InterestRate = "0"; tars.AllRate = "0"; tars.NextHeadRate = HeadInfo_.ToString(); tars.NextProcessRate = ProcessInfo_.ToString(); tars.NextInterestRate = InterestInfo_.ToString(); tars.NextAllRate = (HeadInfo_ + ProcessInfo_ + InterestInfo_).ToString(); tars.Date = DateTime.Now; tars.TAgentId = ag.DirectAgentID; tars.TOrderId = item.ID; tarlist.Add(tars); tar.HeadRate = (Convert.ToDouble(tar.HeadRate) - HeadInfo_).ToString("F4"); tar.ProcessRate = (Convert.ToDouble(tar.ProcessRate) - ProcessInfo_).ToString("F4"); tar.InterestRate = (Convert.ToDouble(tar.InterestRate) - InterestInfo_).ToString("F4"); tar.AllRate = (Convert.ToDouble(tar.AllRate) - (HeadInfo_ + ProcessInfo_ + InterestInfo_)).ToString("F4"); } else if (i == 2) { //会员的分成 HeadRate = Convert.ToDouble(Converter.ToFloat(age.HeadRate2, 0).ToString("F4")) * 0.01; ProcessRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate2, 0).ToString("F4")) * 0.01; InterestRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate2, 0).ToString("F4")) * 0.01; //计算分成 var HeadInfo_ = Convert.ToDouble((Converter.ToFloat(item.ProfitAndLoss, 0) * HeadRate * -1).ToString("F4")); var ProcessInfo_ = Convert.ToDouble((Converter.ToFloat(item.Deposit, 0) * ProcessRate).ToString("F4")); var InterestInfo_ = Convert.ToDouble((Converter.ToFloat(item.Interest, 0) * InterestRate).ToString("F4")); TAgentRate tars = new TAgentRate(); tars.HeadRate = "0"; tars.ProcessRate = "0"; tars.InterestRate = "0"; tars.AllRate = "0"; tars.NextHeadRate = HeadInfo_.ToString(); tars.NextProcessRate = ProcessInfo_.ToString(); tars.NextInterestRate = InterestInfo_.ToString(); tars.NextAllRate = (HeadInfo_ + ProcessInfo_ + InterestInfo_).ToString(); tars.Date = DateTime.Now; tars.TAgentId = ag.DirectAgentID; tars.TOrderId = item.ID; tarlist.Add(tars); tar.HeadRate = (Convert.ToDouble(tar.HeadRate) - HeadInfo_).ToString("F4"); tar.ProcessRate = (Convert.ToDouble(tar.ProcessRate) - ProcessInfo_).ToString("F4"); tar.InterestRate = (Convert.ToDouble(tar.InterestRate) - InterestInfo_).ToString("F4"); tar.AllRate = (Convert.ToDouble(tar.AllRate) - (HeadInfo_ + ProcessInfo_ + InterestInfo_)).ToString("F4"); } else if (i == 3) { //会员的分成 HeadRate = Convert.ToDouble(Converter.ToFloat(age.HeadRate3, 0).ToString("F4")) * 0.01; ProcessRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate3, 0).ToString("F4")) * 0.01; InterestRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate3, 0).ToString("F4")) * 0.01; //计算分成 var HeadInfo_ = Convert.ToDouble((Converter.ToFloat(item.ProfitAndLoss, 0) * HeadRate * -1).ToString("F4")); var ProcessInfo_ = Convert.ToDouble((Converter.ToFloat(item.Deposit, 0) * ProcessRate).ToString("F4")); var InterestInfo_ = Convert.ToDouble((Converter.ToFloat(item.Interest, 0) * InterestRate).ToString("F4")); TAgentRate tars = new TAgentRate(); tars.HeadRate = "0"; tars.ProcessRate = "0"; tars.InterestRate = "0"; tars.AllRate = "0"; tars.NextHeadRate = HeadInfo_.ToString(); tars.NextProcessRate = ProcessInfo_.ToString(); tars.NextInterestRate = InterestInfo_.ToString(); tars.NextAllRate = (HeadInfo_ + ProcessInfo_ + InterestInfo_).ToString(); tars.Date = DateTime.Now; tars.TAgentId = ag.DirectAgentID; tars.TOrderId = item.ID; tarlist.Add(tars); tar.HeadRate = (Convert.ToDouble(tar.HeadRate) - HeadInfo_).ToString("F4"); tar.ProcessRate = (Convert.ToDouble(tar.ProcessRate) - ProcessInfo_).ToString("F4"); tar.InterestRate = (Convert.ToDouble(tar.InterestRate) - InterestInfo_).ToString("F4"); tar.AllRate = (Convert.ToDouble(tar.AllRate) - (HeadInfo_ + ProcessInfo_ + InterestInfo_)).ToString("F4"); } else if (i == 4) { //会员的分成 HeadRate = Convert.ToDouble(Converter.ToFloat(age.HeadRate4, 0).ToString("F4")) * 0.01; ProcessRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate4, 0).ToString("F4")) * 0.01; InterestRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate4, 0).ToString("F4")) * 0.01; //计算分成 var HeadInfo_ = Convert.ToDouble((Converter.ToFloat(item.ProfitAndLoss, 0) * HeadRate * -1).ToString("F4")); var ProcessInfo_ = Convert.ToDouble((Converter.ToFloat(item.Deposit, 0) * ProcessRate).ToString("F4")); var InterestInfo_ = Convert.ToDouble((Converter.ToFloat(item.Interest, 0) * InterestRate).ToString("F4")); TAgentRate tars = new TAgentRate(); tars.HeadRate = "0"; tars.ProcessRate = "0"; tars.InterestRate = "0"; tars.AllRate = "0"; tars.NextHeadRate = HeadInfo_.ToString(); tars.NextProcessRate = ProcessInfo_.ToString(); tars.NextInterestRate = InterestInfo_.ToString(); tars.NextAllRate = (HeadInfo_ + ProcessInfo_ + InterestInfo_).ToString(); tars.Date = DateTime.Now; tars.TAgentId = ag.DirectAgentID; tars.TOrderId = item.ID; tarlist.Add(tars); tar.HeadRate = (Convert.ToDouble(tar.HeadRate) - HeadInfo_).ToString("F4"); tar.ProcessRate = (Convert.ToDouble(tar.ProcessRate) - ProcessInfo_).ToString("F4"); tar.InterestRate = (Convert.ToDouble(tar.InterestRate) - InterestInfo_).ToString("F4"); tar.AllRate = (Convert.ToDouble(tar.AllRate) - (HeadInfo_ + ProcessInfo_ + InterestInfo_)).ToString("F4"); } else if (i == 5) { //会员的分成 HeadRate = Convert.ToDouble(Converter.ToFloat(age.HeadRate5, 0).ToString("F4")) * 0.01; ProcessRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate5, 0).ToString("F4")) * 0.01; InterestRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate5, 0).ToString("F4")) * 0.01; //计算分成 var HeadInfo_ = Convert.ToDouble((Converter.ToFloat(item.ProfitAndLoss, 0) * HeadRate * -1).ToString("F4")); var ProcessInfo_ = Convert.ToDouble((Converter.ToFloat(item.Deposit, 0) * ProcessRate).ToString("F4")); var InterestInfo_ = Convert.ToDouble((Converter.ToFloat(item.Interest, 0) * InterestRate).ToString("F4")); TAgentRate tars = new TAgentRate(); tars.HeadRate = "0"; tars.ProcessRate = "0"; tars.InterestRate = "0"; tars.AllRate = "0"; tars.NextHeadRate = HeadInfo_.ToString(); tars.NextProcessRate = ProcessInfo_.ToString(); tars.NextInterestRate = InterestInfo_.ToString(); tars.NextAllRate = (HeadInfo_ + ProcessInfo_ + InterestInfo_).ToString(); tars.Date = DateTime.Now; tars.TAgentId = ag.DirectAgentID; tars.TOrderId = item.ID; tarlist.Add(tars); tar.HeadRate = (Convert.ToDouble(tar.HeadRate) - HeadInfo_).ToString("F4"); tar.ProcessRate = (Convert.ToDouble(tar.ProcessRate) - ProcessInfo_).ToString("F4"); tar.InterestRate = (Convert.ToDouble(tar.InterestRate) - InterestInfo_).ToString("F4"); tar.AllRate = (Convert.ToDouble(tar.AllRate) - (HeadInfo_ + ProcessInfo_ + InterestInfo_)).ToString("F4"); } ag = (from c in db.TAgents where c.ID == ag.DirectAgentID select c).FirstOrDefault(); } tarlist.Add(tar); db.TAgentRate.InsertAllOnSubmit(tarlist); db.SubmitChanges(); //AgentRate ar = new AgentRate(); //ar.Id = agent.ID; //ar.DirectAgentID = Converter.ToInt(agent.DirectAgentID, 0); //ar.Groupid = agent.GID; //ar.Num = 0; //ar.HeadInfo = HeadInfo; //ar.ProcessInfo = ProcessInfo; //ar.InterestInfo = InterestInfo; //ar.NextheadInfo = HeadInfo; //ar.NextprocessInfo = ProcessInfo; //ar.NextinterestInfo = InterestInfo; //if (ar.DirectAgentID > 0) //{ // Converter.GetAgent(ar, ar, item.ID); //} //ar.HeadInfo = ar.NextheadInfo; //ar.ProcessInfo = ar.NextprocessInfo; //ar.InterestInfo = ar.NextinterestInfo; //ar.NextheadInfo = 0; //ar.NextprocessInfo = 0; //ar.NextinterestInfo = 0; //APIDataDataContext db2 = ConnectionHelper.Db; //{ // TAgentRate tar = new TAgentRate(); // tar.HeadRate = ar.HeadInfo.ToString(); // tar.ProcessRate = ar.ProcessInfo.ToString(); // tar.InterestRate = ar.InterestInfo.ToString(); // tar.AllRate = (ar.HeadInfo + ar.ProcessInfo + ar.InterestInfo).ToString(); // tar.NextHeadRate = ar.NextheadInfo.ToString(); // tar.NextProcessRate = ar.NextprocessInfo.ToString(); // tar.NextInterestRate = ar.NextinterestInfo.ToString(); // tar.NextAllRate = (ar.NextheadInfo + ar.NextprocessInfo + ar.NextinterestInfo).ToString(); // tar.Date = DateTime.Now; // tar.TAgentId = agent.ID; // tar.TOrderId = item.ID; // db2.TAgentRate.InsertOnSubmit(tar); // db2.SubmitChanges(); //} } #endregion } catch { } #region 资金记录 TAccountMoney tam = new TAccountMoney(); tam.MoneyOrderNum = DateTime.Now.ToString("yyyyMMddHHmmssfff"); tam.RealAccountId = Converter.ToInt(item.TRealAccountsID, 0); tam.TypeId = 4; tam.OriginalMoney = user.AccountMoney; tam.CreateMoney = item.ProfitAndLoss; tam.NowMoney = user.AccountMoney + item.ProfitAndLoss; if (tam.NowMoney < 0) { tam.NowMoney = 0; } tam.CreateTime = nowdate; tam.UpDateTime = nowdate; tam.Status = 2; tam.TOrderId = item.ID; db.TAccountMoney.InsertOnSubmit(tam); TAccountMoney tams = new TAccountMoney(); tams.MoneyOrderNum = DateTime.Now.ToString("yyyyMMddHHmmssfff"); tams.RealAccountId = Converter.ToInt(item.TRealAccountsID, 0); tams.TypeId = 5; tams.OriginalMoney = tam.NowMoney; tams.CreateMoney = item.Deposit; tams.NowMoney = tam.NowMoney - item.Deposit; if (tams.NowMoney < 0) { tams.NowMoney = 0; } tams.CreateTime = nowdate; tams.UpDateTime = nowdate; tams.Status = 2; tams.TOrderId = item.ID; db.TAccountMoney.InsertOnSubmit(tams); #endregion user.AccountMoney = user.AccountMoney + item.ProfitAndLoss - item.Deposit; if (user.AccountMoney < 0) { user.AccountMoney = 0; } db.SubmitChanges(); OLog.UpdateValue = ObjectToJson.ModelToJson(order); //写入操作日志 OLog.PageName = "平仓"; Converter.InsertOperationLog(OLog); return Json(new { code = "1", msg = "提交成功!" }); } else { return Json(new { code = "0", msg = "订单id不正确!" }); } } else { return Json(new { code = "0", msg = "订单id不正确!" }); } #endregion } } else { return Json(new { code = "0", msg = "提交失败请稍后在试!" }); } } else { //添加 #region 添加 TOrders to = new TOrders(); to.OrderNum = DateTime.Now.ToString("yyyyMMddHHmmssfff"); to.ProductID = Converter.ToInt(ProductID, 0); to.TRealAccountsID = TRealAccountsID; to.Deal = Deal == "1" ? true : false; to.OrderCount = Converter.ToInt(OrderCount, 0); to.OpenPrice = Converter.ToFloat(OpenPrice, 0); to.Profit = Converter.ToFloat(Profit, 0); to.Loss = Converter.ToFloat(Loss, 0); to.NowPrice = Converter.ToFloat(NowPrice, 0); to.Deposit = Converter.ToFloat(Deposit, 0); to.Interest = 0; double nowbaozhengjin = 0; var product = (from c in db.TProducts where c.ID == Converter.ToInt(ProductID, 0) select c).FirstOrDefault(); int OccupyFundsType = product.OccupyFundsType.Value; //保证金方式(每单必须有的保证金) 1固定(每笔统一价) 2浮动(按照交易金额的百分比来算) double OccupyFunds = Converter.ToFloat(product.OccupyFunds, 0); //保证金 固定(固定值*手数) 浮动(开仓价*固定值*手数) if (OccupyFundsType == 1) nowbaozhengjin = OccupyFunds * product.ContractNumber.Value * Converter.ToInt(OrderCount, 0); else nowbaozhengjin = 0.01 * OccupyFunds * product.ContractNumber.Value * Converter.ToFloat(NowPrice, 0) * Converter.ToInt(OrderCount, 0); to.OccupyFunds = nowbaozhengjin; to.OpenTime = Convert.ToDateTime(OpenTime); to.UpdateTime = DateTime.Now; try { to.OperatorIP = GetUserIp; } catch { return Json(new { code = "0", msg = "服务器内部错误!" }); } to.OrderState = 1; to.OrderType = 1; to.EntrustType = 0; db.TOrders.InsertOnSubmit(to); db.SubmitChanges(); return Json(new { code = "1", msg = "提交成功!" }); #endregion } } catch { return Json(new { code = "0", msg = "服务器内部错误!" }); } }
/// <summary> /// 平仓操作 /// 10050 订单id不正确! /// 10051 订单id不正确! /// 10052 服务器错误! /// </summary> /// <returns></returns> public string CloseOrder() { try { int OrderId = Converter.ToInt(Request["OrderId"], 0); //订单id double ClosePrice = Convert.ToDouble(Request["ClosePrice"]); //关闭价格 APIDataDataContext db = APIDataContextProxy.APIDB; var item = (from c in db.TOrders where c.ID == OrderId && c.OrderState == 1 && c.OrderType == 1 select c).FirstOrDefault(); if (item != null) { var product = (from c in db.TProducts join b in db.TLastClose on c.ProductCode equals b.ProductCode where c.ID == item.ProductID orderby c.ID select new { c, b.LastClose, b.LastUpdateTime }).FirstOrDefault(); if (product != null) { var OffsetLow = userGroup.OffsetLow; var MinWareTime = userGroup.MinWareTime; #region 允许交易 var AllowTrade = userGroup.AllowTrade; //允许交易 if (AllowTrade == false) { return ErrMsg(10039, "对不起您所在的用户组现在不允许交易!"); } TRealAccounts tra = (from c in db.TRealAccounts where c.ID == userid select c).FirstOrDefault(); var traAllowTrade = tra.AllowTrade; if (traAllowTrade == false) { return ErrMsg(10039, "对不起您现在不允许交易!"); } #endregion if (MinWareTime > 0) { DateTime nowdt = DateTime.Now; try { if ((nowdt - item.OpenTime.Value).TotalSeconds < MinWareTime) { return ErrMsg(10050, "持仓最少时间为" + MinWareTime + "秒!"); } } catch { } } var lastcloseprice = 0.0; if (item.Deal.Value) { lastcloseprice = product.LastClose.Value; if (lastcloseprice - ClosePrice > OffsetLow || ClosePrice - lastcloseprice > OffsetLow) { return ErrMsg(10050, "价格已经改变请重新开仓!"); } } else { lastcloseprice = product.c.Fixedly.Value + product.LastClose.Value; if (lastcloseprice - ClosePrice > OffsetLow || ClosePrice - lastcloseprice > OffsetLow) { return ErrMsg(10050, "价格已经改变请重新开仓!"); } } ClosePrice = lastcloseprice; var Scale = Converter.ToFloat(product.c.Scale, 2); var nowdate = product.LastUpdateTime; #region 加工费 double closedeposit = 0.0; //加工费 if (product.c.DepositType == 1)//固定(设定的值*合约数*手数) { closedeposit = Converter.ToFloat(product.c.CloseDeposit) * Converter.ToFloat(product.c.ContractNumber) * Converter.ToFloat(item.OrderCount); } else if (product.c.DepositType == 2)//浮动(设定的比率*现价*合约数*手数) { if (item.Deal == false) closedeposit = 0.01 * Converter.ToFloat(product.c.CloseDeposit) * (Converter.ToFloat(product.LastClose)) * Converter.ToFloat(product.c.ContractNumber) * Converter.ToFloat(item.OrderCount); else closedeposit = 0.01 * Converter.ToFloat(product.c.CloseDeposit) * (Converter.ToFloat(product.LastClose) + Converter.ToFloat(product.c.Fixedly)) * Converter.ToFloat(product.c.ContractNumber) * Converter.ToFloat(item.OrderCount); } closedeposit = Converter.ToFloat(closedeposit.ToString("F" + Scale)); #endregion item.Deposit = Converter.ToFloat((Converter.ToFloat(item.Deposit) + closedeposit).ToString("F" + Scale));//修改加工费 double LastClose = 0.0; //市场价 收盘价 double Spread = 0.0; //点数 //计算盈亏 if (item.Deal == false)//卖出 { LastClose = Converter.ToFloat(product.LastClose) + Converter.ToFloat(product.c.Fixedly); Spread = Converter.ToFloat(item.OpenPrice) - LastClose; } else if (item.Deal == true)//买入 { LastClose = Converter.ToFloat(product.LastClose); Spread = LastClose - Converter.ToFloat(item.OpenPrice); } item.Spread = Converter.ToFloat(Spread.ToString("F" + Scale)); item.ProfitAndLoss = Converter.ToFloat((Converter.ToFloat(Spread * item.OrderCount) * Converter.ToFloat(product.c.ContractNumber)).ToString("F" + Scale)); item.NowPrice = Converter.ToFloat(LastClose.ToString("F" + Scale)); item.NetProfit = Converter.ToFloat((Converter.ToFloat(item.ProfitAndLoss) - Converter.ToFloat(item.Deposit) - Converter.ToFloat(item.Interest)).ToString("F" + Scale)); item.UpdateTime = nowdate; item.OrderState = 2; item.OrderType = 2; item.CloseType = "人工平仓"; var user = (from c in db.TRealAccounts where c.ID == item.TRealAccountsID select c).FirstOrDefault(); try { var agent = (from c in db.TAgents join b in db.TAgentGroup on c.GroupID equals b.ID where c.ID == user.AgendID select new { c.ID, c.DirectAgentID, c.Depth, c.HeadRate1, c.ProcessRate1, c.InterestRate1, c.HeadRate2, c.ProcessRate2, c.InterestRate2, c.HeadRate3, c.ProcessRate3, c.InterestRate3, c.HeadRate4, c.ProcessRate4, c.InterestRate4, c.HeadRate5, c.ProcessRate5, c.InterestRate5, GID = b.ID, b.GroupName, b.ProcessRate, b.HeadRate, b.InterestRate, b.NextRate }).FirstOrDefault(); #region 分成 if (agent != null) { //查询客户所属会员的分成 double HeadRate = Convert.ToDouble(Converter.ToFloat(agent.HeadRate, 0).ToString("F4")) * 0.01;//直属会员浮动盈亏比率 double ProcessRate = Convert.ToDouble(Converter.ToFloat(agent.ProcessRate, 0).ToString("F4")) * 0.01;//加工费比率 double InterestRate = Convert.ToDouble(Converter.ToFloat(agent.InterestRate, 0).ToString("F4")) * 0.01;//仓息比率 //计算分成 double HeadInfo = Convert.ToDouble((Converter.ToFloat(item.ProfitAndLoss, 0) * HeadRate * -1).ToString("F4"));//盈利与客户相反:客户赚钱,会员亏钱 double ProcessInfo = Convert.ToDouble((Converter.ToFloat(item.Deposit, 0) * ProcessRate).ToString("F4"));//加工费 double InterestInfo = Convert.ToDouble((Converter.ToFloat(item.Interest, 0) * InterestRate).ToString("F4"));//仓息 //会员分红相关,跟每笔订单相关 TAgentRate tar = new TAgentRate(); tar.HeadRate = HeadInfo.ToString(); tar.ProcessRate = ProcessInfo.ToString(); tar.InterestRate = InterestInfo.ToString(); tar.AllRate = (HeadInfo + ProcessInfo + InterestInfo).ToString(); tar.NextHeadRate = "0"; tar.NextProcessRate = "0"; tar.NextInterestRate = "0"; tar.NextAllRate = "0"; tar.Date = DateTime.Now; tar.TAgentId = agent.ID; tar.TOrderId = item.ID; IList<TAgentRate> tarlist = new List<TAgentRate>(); int depth = agent.Depth;//深度 if (depth > 6) depth = 6; var ag = (from c in db.TAgents where c.ID == agent.ID select c).FirstOrDefault(); var age = ag; for (int i = 1; i < depth; i++) { if (i == 1)//直属会员的上1级 { //会员的分成 HeadRate = Convert.ToDouble(Converter.ToFloat(age.HeadRate1, 0).ToString("F4")) * 0.01; ProcessRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate1, 0).ToString("F4")) * 0.01; InterestRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate1, 0).ToString("F4")) * 0.01; //计算分成 var HeadInfo_ = Convert.ToDouble((Converter.ToFloat(item.ProfitAndLoss, 0) * HeadRate * -1).ToString("F4")); var ProcessInfo_ = Convert.ToDouble((Converter.ToFloat(item.Deposit, 0) * ProcessRate).ToString("F4")); var InterestInfo_ = Convert.ToDouble((Converter.ToFloat(item.Interest, 0) * InterestRate).ToString("F4")); TAgentRate tars = new TAgentRate(); tars.HeadRate = "0"; tars.ProcessRate = "0"; tars.InterestRate = "0"; tars.AllRate = "0"; tars.NextHeadRate = HeadInfo_.ToString(); tars.NextProcessRate = ProcessInfo_.ToString(); tars.NextInterestRate = InterestInfo_.ToString(); tars.NextAllRate = (HeadInfo_ + ProcessInfo_ + InterestInfo_).ToString(); tars.Date = DateTime.Now; tars.TAgentId = ag.DirectAgentID; tars.TOrderId = item.ID; tarlist.Add(tars); tar.HeadRate = (Convert.ToDouble(tar.HeadRate) - HeadInfo_).ToString("F4"); tar.ProcessRate = (Convert.ToDouble(tar.ProcessRate) - ProcessInfo_).ToString("F4"); tar.InterestRate = (Convert.ToDouble(tar.InterestRate) - InterestInfo_).ToString("F4"); tar.AllRate = (Convert.ToDouble(tar.AllRate) - (HeadInfo_ + ProcessInfo_ + InterestInfo_)).ToString("F4"); } else if (i == 2)//指数会员的上2级 { //会员的分成 HeadRate = Convert.ToDouble(Converter.ToFloat(age.HeadRate2, 0).ToString("F4")) * 0.01; ProcessRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate2, 0).ToString("F4")) * 0.01; InterestRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate2, 0).ToString("F4")) * 0.01; //计算分成 var HeadInfo_ = Convert.ToDouble((Converter.ToFloat(item.ProfitAndLoss, 0) * HeadRate * -1).ToString("F4")); var ProcessInfo_ = Convert.ToDouble((Converter.ToFloat(item.Deposit, 0) * ProcessRate).ToString("F4")); var InterestInfo_ = Convert.ToDouble((Converter.ToFloat(item.Interest, 0) * InterestRate).ToString("F4")); TAgentRate tars = new TAgentRate(); tars.HeadRate = "0"; tars.ProcessRate = "0"; tars.InterestRate = "0"; tars.AllRate = "0"; tars.NextHeadRate = HeadInfo_.ToString(); tars.NextProcessRate = ProcessInfo_.ToString(); tars.NextInterestRate = InterestInfo_.ToString(); tars.NextAllRate = (HeadInfo_ + ProcessInfo_ + InterestInfo_).ToString(); tars.Date = DateTime.Now; tars.TAgentId = ag.DirectAgentID; tars.TOrderId = item.ID; tarlist.Add(tars); tar.HeadRate = (Convert.ToDouble(tar.HeadRate) - HeadInfo_).ToString("F4"); tar.ProcessRate = (Convert.ToDouble(tar.ProcessRate) - ProcessInfo_).ToString("F4"); tar.InterestRate = (Convert.ToDouble(tar.InterestRate) - InterestInfo_).ToString("F4"); tar.AllRate = (Convert.ToDouble(tar.AllRate) - (HeadInfo_ + ProcessInfo_ + InterestInfo_)).ToString("F4"); } else if (i == 3)//指数会员的上3级 { //会员的分成 HeadRate = Convert.ToDouble(Converter.ToFloat(age.HeadRate3, 0).ToString("F4")) * 0.01; ProcessRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate3, 0).ToString("F4")) * 0.01; InterestRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate3, 0).ToString("F4")) * 0.01; //计算分成 var HeadInfo_ = Convert.ToDouble((Converter.ToFloat(item.ProfitAndLoss, 0) * HeadRate * -1).ToString("F4")); var ProcessInfo_ = Convert.ToDouble((Converter.ToFloat(item.Deposit, 0) * ProcessRate).ToString("F4")); var InterestInfo_ = Convert.ToDouble((Converter.ToFloat(item.Interest, 0) * InterestRate).ToString("F4")); TAgentRate tars = new TAgentRate(); tars.HeadRate = "0"; tars.ProcessRate = "0"; tars.InterestRate = "0"; tars.AllRate = "0"; tars.NextHeadRate = HeadInfo_.ToString(); tars.NextProcessRate = ProcessInfo_.ToString(); tars.NextInterestRate = InterestInfo_.ToString(); tars.NextAllRate = (HeadInfo_ + ProcessInfo_ + InterestInfo_).ToString(); tars.Date = DateTime.Now; tars.TAgentId = ag.DirectAgentID; tars.TOrderId = item.ID; tarlist.Add(tars); tar.HeadRate = (Convert.ToDouble(tar.HeadRate) - HeadInfo_).ToString("F4"); tar.ProcessRate = (Convert.ToDouble(tar.ProcessRate) - ProcessInfo_).ToString("F4"); tar.InterestRate = (Convert.ToDouble(tar.InterestRate) - InterestInfo_).ToString("F4"); tar.AllRate = (Convert.ToDouble(tar.AllRate) - (HeadInfo_ + ProcessInfo_ + InterestInfo_)).ToString("F4"); } else if (i == 4)//指数会员的上4级 { //会员的分成 HeadRate = Convert.ToDouble(Converter.ToFloat(age.HeadRate4, 0).ToString("F4")) * 0.01; ProcessRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate4, 0).ToString("F4")) * 0.01; InterestRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate4, 0).ToString("F4")) * 0.01; //计算分成 var HeadInfo_ = Convert.ToDouble((Converter.ToFloat(item.ProfitAndLoss, 0) * HeadRate * -1).ToString("F4")); var ProcessInfo_ = Convert.ToDouble((Converter.ToFloat(item.Deposit, 0) * ProcessRate).ToString("F4")); var InterestInfo_ = Convert.ToDouble((Converter.ToFloat(item.Interest, 0) * InterestRate).ToString("F4")); TAgentRate tars = new TAgentRate(); tars.HeadRate = "0"; tars.ProcessRate = "0"; tars.InterestRate = "0"; tars.AllRate = "0"; tars.NextHeadRate = HeadInfo_.ToString(); tars.NextProcessRate = ProcessInfo_.ToString(); tars.NextInterestRate = InterestInfo_.ToString(); tars.NextAllRate = (HeadInfo_ + ProcessInfo_ + InterestInfo_).ToString(); tars.Date = DateTime.Now; tars.TAgentId = ag.DirectAgentID; tars.TOrderId = item.ID; tarlist.Add(tars); tar.HeadRate = (Convert.ToDouble(tar.HeadRate) - HeadInfo_).ToString("F4"); tar.ProcessRate = (Convert.ToDouble(tar.ProcessRate) - ProcessInfo_).ToString("F4"); tar.InterestRate = (Convert.ToDouble(tar.InterestRate) - InterestInfo_).ToString("F4"); tar.AllRate = (Convert.ToDouble(tar.AllRate) - (HeadInfo_ + ProcessInfo_ + InterestInfo_)).ToString("F4"); } else if (i == 5)//指数会员的上5级 { //会员的分成 HeadRate = Convert.ToDouble(Converter.ToFloat(age.HeadRate5, 0).ToString("F4")) * 0.01; ProcessRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate5, 0).ToString("F4")) * 0.01; InterestRate = Convert.ToDouble(Converter.ToFloat(age.ProcessRate5, 0).ToString("F4")) * 0.01; //计算分成 var HeadInfo_ = Convert.ToDouble((Converter.ToFloat(item.ProfitAndLoss, 0) * HeadRate * -1).ToString("F4")); var ProcessInfo_ = Convert.ToDouble((Converter.ToFloat(item.Deposit, 0) * ProcessRate).ToString("F4")); var InterestInfo_ = Convert.ToDouble((Converter.ToFloat(item.Interest, 0) * InterestRate).ToString("F4")); TAgentRate tars = new TAgentRate(); tars.HeadRate = "0"; tars.ProcessRate = "0"; tars.InterestRate = "0"; tars.AllRate = "0"; tars.NextHeadRate = HeadInfo_.ToString(); tars.NextProcessRate = ProcessInfo_.ToString(); tars.NextInterestRate = InterestInfo_.ToString(); tars.NextAllRate = (HeadInfo_ + ProcessInfo_ + InterestInfo_).ToString(); tars.Date = DateTime.Now; tars.TAgentId = ag.DirectAgentID; tars.TOrderId = item.ID; tarlist.Add(tars); tar.HeadRate = (Convert.ToDouble(tar.HeadRate) - HeadInfo_).ToString("F4"); tar.ProcessRate = (Convert.ToDouble(tar.ProcessRate) - ProcessInfo_).ToString("F4"); tar.InterestRate = (Convert.ToDouble(tar.InterestRate) - InterestInfo_).ToString("F4"); tar.AllRate = (Convert.ToDouble(tar.AllRate) - (HeadInfo_ + ProcessInfo_ + InterestInfo_)).ToString("F4"); } ag = (from c in db.TAgents where c.ID == ag.DirectAgentID select c).FirstOrDefault(); } tarlist.Add(tar); db.TAgentRate.InsertAllOnSubmit(tarlist); db.SubmitChanges(); //AgentRate ar = new AgentRate(); //ar.Id = agent.ID; //ar.DirectAgentID = Converter.ToInt(agent.DirectAgentID, 0); //ar.Groupid = agent.GID; //ar.Num = 0; //ar.HeadInfo = HeadInfo; //ar.ProcessInfo = ProcessInfo; //ar.InterestInfo = InterestInfo; //ar.NextheadInfo = HeadInfo; //ar.NextprocessInfo = ProcessInfo; //ar.NextinterestInfo = InterestInfo; //if (ar.DirectAgentID > 0) //{ // Converter.GetAgent(ar, ar, item.ID); //} //ar.HeadInfo = ar.NextheadInfo; //ar.ProcessInfo = ar.NextprocessInfo; //ar.InterestInfo = ar.NextinterestInfo; //ar.NextheadInfo = 0; //ar.NextprocessInfo = 0; //ar.NextinterestInfo = 0; //APIDataDataContext db2 = APIDataContextProxy.APIDB; //{ // TAgentRate tar = new TAgentRate(); // tar.HeadRate = ar.HeadInfo.ToString(); // tar.ProcessRate = ar.ProcessInfo.ToString(); // tar.InterestRate = ar.InterestInfo.ToString(); // tar.AllRate = (ar.HeadInfo + ar.ProcessInfo + ar.InterestInfo).ToString(); // tar.NextHeadRate = ar.NextheadInfo.ToString(); // tar.NextProcessRate = ar.NextprocessInfo.ToString(); // tar.NextInterestRate = ar.NextinterestInfo.ToString(); // tar.NextAllRate = (ar.NextheadInfo + ar.NextprocessInfo + ar.NextinterestInfo).ToString(); // tar.Date = DateTime.Now; // tar.TAgentId = agent.ID; // tar.TOrderId = item.ID; // db2.TAgentRate.InsertOnSubmit(tar); // db2.SubmitChanges(); //} } #endregion } catch { } #region 资金记录 TAccountMoney tam = new TAccountMoney(); tam.MoneyOrderNum = DateTime.Now.ToString("yyyyMMddHHmmssfff"); tam.RealAccountId = Converter.ToInt(item.TRealAccountsID); tam.TypeId = 4; tam.OriginalMoney = user.AccountMoney; tam.CreateMoney = item.ProfitAndLoss; tam.NowMoney = user.AccountMoney + item.ProfitAndLoss; if (tam.NowMoney < 0) { tam.NowMoney = 0; } tam.CreateTime = nowdate; tam.UpDateTime = nowdate; tam.Status = 2; tam.TOrderId = item.ID; db.TAccountMoney.InsertOnSubmit(tam); TAccountMoney tams = new TAccountMoney(); tams.MoneyOrderNum = DateTime.Now.ToString("yyyyMMddHHmmssfff"); tams.RealAccountId = Converter.ToInt(item.TRealAccountsID, 0); tams.TypeId = 5; tams.OriginalMoney = tam.NowMoney; tams.CreateMoney = item.Deposit; tams.NowMoney = tam.NowMoney - item.Deposit; if (tams.NowMoney < 0) { tams.NowMoney = 0; } tams.CreateTime = nowdate; tams.UpDateTime = nowdate; tams.Status = 2; tams.TOrderId = item.ID; db.TAccountMoney.InsertOnSubmit(tams); #endregion user.AccountMoney = user.AccountMoney + item.ProfitAndLoss - item.Deposit; if (user.AccountMoney < 0) { user.AccountMoney = 0; } db.SubmitChanges(); JObject jb = new JObject(); jb["success"] = "TRUE"; jb["content"] = OrderId; return jb.ToString(); } else { return ErrMsg(10050, "订单id不正确!"); } } else { return ErrMsg(10051, "订单id不正确!"); } } catch { return ErrMsg(10052, "服务器错误!"); } }