public ActionResult Create(string kindSN, string varietyName) { try { if (kindSN.Equals(string.Empty)) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } if (varietyName.Equals(string.Empty)) { ModelState.AddModelError("varietyName", "請輸入品種"); } if (!ModelState.IsValid) { return(View()); } int kSN = 0; int.TryParse(kindSN.ToString(), out kSN); Comm_Variety variety = new Comm_Variety(); variety.varietyName = varietyName; variety.kindSN = kSN; VarietyModel.Create(variety); return(RedirectToAction("Index", new { kindSN = kindSN })); } catch { return(View()); } }
public ActionResult Edit(int?SN, string varietyName) { try { if (SN == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } if (varietyName.Equals(string.Empty)) { ModelState.AddModelError("varietyName", "請輸入品種"); } Comm_Variety variety = VarietyModel.getVarietyBySN(Convert.ToInt32(SN)); if (!ModelState.IsValid) { return(View(variety)); } variety.varietyName = varietyName; VarietyModel.Update(variety); return(RedirectToAction("Index", new { kindSN = variety.kindSN })); } catch { return(View()); } }
// GET: Variety public ActionResult Index(int kindSN, int page = 1, int pageSize = 10) { List <Comm_Variety> varietyList = VarietyModel.getVarietyListByKindSN(kindSN); var result = varietyList.OrderBy(o => o.SN).ToPagedList(); ViewBag.kindSN = kindSN; return(View(result)); }
public void ExecuteTradeData(object para) { try { TodayTraderModel ttm = para as TodayTraderModel; if (TodayTraderViewModels.Instance().TodayTraderList.FirstOrDefault(x => x.TradeNumber == ttm.trade_id) != null) { return; } if (ttm.bLast) { Dictionary <string, TodayTraderModelViewModel> dicTTVM = new Dictionary <string, TodayTraderModelViewModel>(); foreach (TodayTraderModelViewModel item in TodayTraderViewModels.Instance().TodayTraderList) { if (!dicTTVM.ContainsKey(item.ContractCode + item.Direction + item.OpenOffset)) { TodayTraderModelViewModel ttmvm = item.Clone(item); ttmvm.AllPrice = item.TradePrice * item.TradeVolume; dicTTVM.Add(item.ContractCode + item.Direction + item.OpenOffset, ttmvm); } else { dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].AllPrice = dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].AllPrice + item.TradePrice * item.TradeVolume; dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradeVolume = dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradeVolume + item.TradeVolume; dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradePrice = dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].AllPrice / dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradeVolume; } } foreach (TodayTraderModelViewModel item in dicTTVM.Values) { TodayTraderViewModels.Instance().TodayTraderListALL.Add(item); } return; } VarietyModel vm = null; string[] values = ttm.contract_code.Split(' '); if (values.Length == 3) { string varietie = values[1]; if (ContractVariety.Varieties.ContainsKey(varietie)) { vm = ContractVariety.Varieties[varietie]; } if (vm != null) { ttm.precision = vm.precision; } } //添加持仓集合 TodayTraderViewModels.Instance().TodayTraderList.Add(new TodayTraderModelViewModel(ttm)); } catch (Exception ex) { LogHelper.Info(ex.ToString()); } }
// GET: Variety/Edit/5 public ActionResult Edit(int?SN) { if (SN == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Comm_Variety variety = VarietyModel.getVarietyBySN(Convert.ToInt32(SN)); ViewBag.kindSN = variety.kindSN; return(View(variety)); }
public void ExecuteDelegationData(object para) { try { DelegationModel rtm = para as DelegationModel; OrderCancelViewModel ocvm = OrderCancelViewModel.Instance(); if (ocvm.Delegations.FirstOrDefault(x => x.OrderId == rtm.order_id) != null) { return; } if (rtm.bLast) { //PositionViewModel.Instance().JSAbleVolume(); TransactionViewModel.Instance().FigureUpNum(TransactionViewModel.Instance()._futures); return; } VarietyModel vm = null; string[] values = rtm.contract_code.Split(' '); if (values.Length == 3) { string varietie = values[1]; if (ContractVariety.Varieties.ContainsKey(varietie)) { vm = ContractVariety.Varieties[varietie]; } if (vm != null) { rtm.precision = vm.precision; } } DelegationModelViewModel dmvm = new DelegationModelViewModel(rtm); ocvm.Delegations.Add(dmvm); if (rtm.order_status == (int)DeleteType.CreateSuccess || rtm.order_status == (int)DeleteType.PortionTakeEffect) { ocvm.KCDelegations.Add(dmvm); } } catch (Exception ex) { LogHelper.Info(ex.ToString()); } }
public void ExecutePlaceOrderData(object para) { try { DelegationModel rtm = para as DelegationModel; //添加持仓集合 if (!rtm.bLast) { VarietyModel vm = null; string[] values = rtm.contract_id.Split(' '); if (values.Length == 3) { string varietie = values[1]; if (ContractVariety.Varieties.ContainsKey(varietie)) { vm = ContractVariety.Varieties[varietie]; } if (vm != null) { rtm.precision = vm.precision; } } } if (OrderCancelViewModel.Instance().Delegations.FirstOrDefault(x => x.OrderId == rtm.order_id) == null) { OrderCancelViewModel.Instance().Delegations.Add(new DelegationModelViewModel(rtm)); LogHelper.Info("4002 增加" + rtm.contract_code + ":" + rtm.direction + ":" + rtm.open_offset + ":" + rtm.order_status); } if (CommParameterSetting.MessageAlert.OrderAlert == "窗口提示") { MessageBox.Show(rtm.contract_id + " 委托创建成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (CommParameterSetting.MessageAlert.OrderAlert == "声音提示") { SoundPlayerHelper.Play(); } } catch (Exception ex) { LogHelper.Info(ex.ToString()); } }
public void ExecuteRevcVarietyData(object para) { VarietyModel vm = para as VarietyModel; if (!loginvm.LoginBtnIsEnabled) { loginvm.LoginStatus = "正在查询品种信息..."; } if (vm.bLast) { loginvm.ReqParities(); return; } string key = vm.product_code; if (!ContractVariety.Varieties.ContainsKey(key)) { ContractVariety.Varieties.Add(key, vm); } }
public async Task <IActionResult> Edit(int id, [Bind("Item")] CoffeeViewModel cvm) { if (id != cvm.Item.Id) { return(NotFound()); } if (ModelState.IsValid) { try { CountryModel newCountry = _context.Countries.FirstOrDefault(c => c.Name == cvm.Item.Country.Name) ?? new CountryModel(null, cvm.Item.Country.Name); if (newCountry.Id == null) { _context.Add(newCountry); } VarietyModel newVariety = _context.Varieties.FirstOrDefault(v => v.Name == cvm.Item.Variety.Name) ?? new VarietyModel(null, cvm.Item.Variety.Name); if (newVariety.Id == null) { _context.Add(newVariety); } cvm.Item.Country = newCountry; cvm.Item.Variety = newVariety; _context.Update(cvm.Item); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!CoffeeModelExists(cvm.Item.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(cvm)); }
public JsonResult getVarietyList(int kindSN) { List <Comm_Variety> varietyList = new List <Comm_Variety>(); if (kindSN != 0) { varietyList = VarietyModel.getVarietyListByKindSN(kindSN); varietyList.Insert(0, new Comm_Variety() { SN = 0, varietyName = "品種" }); } else { varietyList.Add(new Comm_Variety() { SN = 0, varietyName = "品種" }); } return(Json(varietyList, JsonRequestBehavior.AllowGet)); }
public async Task <IActionResult> Create([Bind("Item")] CoffeeViewModel cvm) { if (ModelState.IsValid) { CountryModel newCountry = _context.Countries.FirstOrDefault(c => c.Name == cvm.Item.Country.Name) ?? new CountryModel(null, cvm.Item.Country.Name); if (newCountry.Id == null) { _context.Add(newCountry); } VarietyModel newVariety = _context.Varieties.FirstOrDefault(v => v.Name == cvm.Item.Variety.Name) ?? new VarietyModel(null, cvm.Item.Variety.Name); if (newVariety.Id == null) { _context.Add(newVariety); } cvm.Item.Country = newCountry; cvm.Item.Variety = newVariety; _context.Add(cvm.Item); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(cvm)); }
// GET: Pet/Edit/5 public ActionResult Edit(int?SN) { if (SN == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Comm_Pet pet = PetModel.getPetBySN(Convert.ToInt32(SN)); if (pet == null) { return(HttpNotFound()); } List <Comm_Customer> customerList = CustomerModel.getCustomerList(); List <Comm_Kind> kindList = KindModel.getKindList(); List <Comm_Variety> varietyList = VarietyModel.getVarietyListByKindSN(pet.kindSN); ViewBag.customerSN = new SelectList(customerList, "SN", "customerName", pet.customerSN); ViewBag.kindSN = new SelectList(kindList, "SN", "kindName", pet.kindSN); ViewBag.varietySN = new SelectList(varietyList, "SN", "varietyName", pet.varietySN); return(View(pet)); }
private CheckFullStopViewModel(PotionDetailModelViewModel pmvm) { _PositionModelViewModel = pmvm; ContractCode = pmvm.ContractCode; _AllNum = _PositionModelViewModel.PositionVolume; Direction = pmvm.Direction == "B" ? " (买入,投机) " : " (卖出,投机) "; VarietyModel vm = null; string[] values = pmvm.ContractCode.Split(' '); if (values.Length != 3) { return; } string varietie = values[1]; if (ContractVariety.Varieties.ContainsKey(varietie)) { vm = ContractVariety.Varieties[varietie]; } if (vm == null) { return; } Increment = vm.tick_size; length = vm.precision; ////发送命令 //ReqPotion rp = new ReqPotion(); //rp.cmdcode = RequestCmdCode.SelectStopLoss; //rp.content = new ReqLoginName() { user_id = UserInfoHelper.UserId }; //ScoketManager.GetInstance().SendTradeWSInfo(JsonConvert.SerializeObject(rp)); if (ContractVariety.CFSmvmList.ContainsKey(_PositionModelViewModel.ContractId + _PositionModelViewModel.Direction)) { foreach (var item in ContractVariety.CFSmvmList[_PositionModelViewModel.ContractId + _PositionModelViewModel.Direction]) { item.Increment = Increment; item.Precision = length; CheckFullStopModel cfsm = new CheckFullStopModel(); cfsm.contract_code = _PositionModelViewModel.ContractCode; cfsm.contract_id = _PositionModelViewModel.ContractId; cfsm.create_date = DateTime.Now.ToString("yyyy-MM-dd"); cfsm.create_time = DateTime.Now.ToString("HH:mm:ss"); cfsm.user_id = UserInfoHelper.UserId; cfsm.order_volume = _PositionModelViewModel.PositionVolume; cfsm.resource = (int)OperatorTradeType.OPERATOR_TRADE_PC; cfsm.direction = item.Direction; cfsm.float_loss = item.FloatLoss; cfsm.float_loss_flag = item.FloatLossFlag; cfsm.open_offset = item.OpenOffset; cfsm.order_volume = item.OrderVolume; CheckFullStopModelViewModel cfsvm = new CheckFullStopModelViewModel(cfsm); cfsvm.Increment = item.Increment; cfsvm.Precision = item.Precision; cfsvm.Direction = item.Direction; cfsvm.MaxNum = item.MaxNum; cfsvm.StopprofitPrice = item.StopprofitPrice; cfsvm.StoplossId = item.StoplossId; cfsvm.TrrigerCondition = item.TrrigerCondition; cfsvm.TrrigerPrice = item.TrrigerPrice; cfsvm.FloatLoss = item.FloatLoss; cfsvm.StoplossPrice = item.StoplossPrice; cfsvm.CreateDate = item.CreateDate; cfsvm.OrderVolume = item.OrderVolume; CFSMVMList.Add(cfsvm); } } if (CFSMVMList.Count > 0) { IsHaveData = true; } AddData(); }
/// <summary> /// 提供行情信息 显示要交易的期货行情的信息 /// </summary> /// <param name="futures"></param> public void SendMarket(QuotationEntity futures) { if (futures == null) { return; } if (PMList.Count == 0) { return; } List <PotionDetailModelViewModel> items = PMList.Where(x => x.ContractId == futures.cd).ToList(); VarietyModel vm = null; ParitiesModel pm = null; lock (DetPMList) { foreach (PotionDetailModelViewModel itemde in DetPMList) { if (itemde.ContractCode == futures.cd) { string[] values = futures.cd.Split(' '); if (values.Length != 3) { return; } string varietie = values[1]; if (ContractVariety.Varieties.ContainsKey(varietie)) { vm = ContractVariety.Varieties[varietie]; } if (vm == null) { continue; } if (itemde.Direction == "B") { if (futures.lp > 0) { itemde.PositionProfitLoss = (futures.lp - itemde.OpenPrice) * itemde.PositionVolume * vm.multiple;//合约乘数 } else if (futures.lp == 0 && futures.pslp > 0) { itemde.PositionProfitLoss = (futures.pslp - itemde.OpenPrice) * itemde.PositionVolume * vm.multiple;//合约乘数 } else if (futures.lp == 0 && futures.pslp == 0) { continue; } } else { if (futures.lp > 0) { itemde.PositionProfitLoss = (itemde.OpenPrice - futures.lp) * itemde.PositionVolume * vm.multiple;//合约乘数 } else if (futures.lp == 0 && futures.pslp > 0) { itemde.PositionProfitLoss = (itemde.OpenPrice - futures.pslp) * itemde.PositionVolume * vm.multiple;//合约乘数 } else if (futures.lp == 0 && futures.pslp == 0) { continue; } } } } if (items != null) { foreach (var item in items) { string[] values = futures.cd.Split(' '); if (values.Length != 3) { return; } string varietie = values[1]; if (ContractVariety.Varieties.ContainsKey(varietie)) { vm = ContractVariety.Varieties[varietie]; } if (vm == null) { return; } // if (item.Direction == "B") item.PositionProfitLoss = Math.Round(DetPMList.Where(x => x.ContractId == item.ContractId && x.Direction == item.Direction).Sum(x => x.PositionProfitLoss), vm.precision);//合约乘数 if (ContractVariety.Parities.ContainsKey(vm.currency_code)) { pm = ContractVariety.Parities[vm.currency_code]; } if (pm == null) { return; } // if (item.Direction == "B") item.PositionProfitLossJB = DetPMList.Where(x => x.ContractId == item.ContractId && x.Direction == item.Direction).Sum(x => x.PositionProfitLoss) * pm.exchange_rate; //合约乘数*汇率 // item.PositionProfitLossJB = (item.OpenPrice - futures.lastPrice) * item.PositionVolume * vm.multiple * pm.exchange_rate;//合约乘数*汇率 } CommParameterSetting.StartAutoStopLoss(futures); } } }
/// <summary> /// 触发自动止盈止损 /// </summary> public static void StartAutoStopLoss(QuotationEntity futures) { if (ContractVariety.ContracPostionID.Count == 0) { return; } if (ContractVariety.ContracPostionID.ContainsKey(futures.cd)) { //如果自动止盈止损包含此合约号 //循环查询持仓明细,进行比较 foreach (string value in ContractVariety.ContracPostionID[futures.cd]) { PotionDetailModelViewModel item = PositionAllViewModel.Instance().DetPMList.FirstOrDefault(x => x.PsitionId == value); if (item != null) { AutoStopLossModel aslm = CommParameterSetting.AutoStopLossModel.FirstOrDefault(x => x.Direction == item.Direction && x.Agreement == item.ContractId); if (aslm == null) { break; } string[] VarietiesKey = futures.cd.Split(' '); if (VarietiesKey.Length != 3) { return; } string varietie = VarietiesKey[1]; VarietyModel vm = null; if (ContractVariety.Varieties.ContainsKey(varietie)) { vm = ContractVariety.Varieties[varietie]; } if (vm == null) { break; } if (aslm.StopLossPotion > 0) { //止损价》最新价触发止损 if (item.Direction == "B") { if (ContractVariety.PostionPrice[item.PsitionId].LossPrice >= futures.lp) { //平仓 if (!PostinIds.Contains(item.PsitionId)) { OpenCloseing(item, 0); PostinIds.Add(item.PsitionId); int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "delete from AutoStopLoss where ContractID='" + item.ContractId + "' and PostionID='" + item.PsitionId + "';"); LogHelper.Debug("买:持仓的止损价" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ": 行情最新价" + futures.lp); continue; } } } else { if (ContractVariety.PostionPrice[item.PsitionId].LossPrice <= futures.lp) { //平仓 if (!PostinIds.Contains(item.PsitionId)) { OpenCloseing(item, 0); PostinIds.Add(item.PsitionId); int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "delete from AutoStopLoss where ContractID='" + item.ContractId + "' and PostionID='" + item.PsitionId + "';"); LogHelper.Debug("卖:持仓的止损价" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ": 行情最新价" + futures.lp); continue; } } } } if (aslm.StopProfitPotion > 0) { //止盈价《最新价触发止盈 if (item.Direction == "B") { if ((item.OpenPrice + aslm.StopProfitPotion * vm.tick_size) <= futures.lp) { //平仓 if (!PostinIds.Contains(item.PsitionId)) { OpenCloseing(item, 0); PostinIds.Add(item.PsitionId); int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "delete from AutoStopLoss where ContractID='" + item.ContractId + "' and PostionID='" + item.PsitionId + "';"); LogHelper.Debug("买:持仓的止盈价" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ": 行情最新价" + futures.lp); continue; } } } else { if ((item.OpenPrice - aslm.StopProfitPotion * vm.tick_size) >= futures.lp) { //平仓 if (!PostinIds.Contains(item.PsitionId)) { OpenCloseing(item, 0); PostinIds.Add(item.PsitionId); int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "delete from AutoStopLoss where ContractID='" + item.ContractId + "' and PostionID='" + item.PsitionId + "';"); LogHelper.Debug("卖:持仓的止盈价" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ": 行情最新价" + futures.lp); continue; } } } } if (aslm.FloatingProfitAndLoss > 0 && aslm.StopLossPotion > 0) { if (item.Direction == "B") { double cha = futures.lp - ContractVariety.PostionPrice[item.PsitionId].NewPrice; if (cha > aslm.FloatingProfitAndLoss * vm.tick_size) { int bs = (int)(cha / aslm.FloatingProfitAndLoss * vm.tick_size); ContractVariety.PostionPrice[item.PsitionId].NewPrice = ContractVariety.PostionPrice[item.PsitionId].NewPrice + (bs * (aslm.FloatingProfitAndLoss * vm.tick_size)); ContractVariety.PostionPrice[item.PsitionId].LossPrice = ContractVariety.PostionPrice[item.PsitionId].LossPrice + (bs * (aslm.FloatingProfitAndLoss * vm.tick_size)); // 修改数据库中数据 int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "UPDATE AutoStopLoss set LossPrice=" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ",newprice=" + ContractVariety.PostionPrice[item.PsitionId].NewPrice + " WHERE UserID='" + UserInfoHelper.UserId + "' and PostionID='" + item.PsitionId + "' and ContractID='" + item.ContractId + "';"); LogHelper.Debug("买:更新止损价:" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ":止损价基数" + ContractVariety.PostionPrice[item.PsitionId].NewPrice); } } else { double cha = ContractVariety.PostionPrice[item.PsitionId].NewPrice - futures.lp;//买就是反过来减 if (cha > aslm.FloatingProfitAndLoss * vm.tick_size) { int bs = (int)(cha / aslm.FloatingProfitAndLoss * vm.tick_size); ContractVariety.PostionPrice[item.PsitionId].NewPrice = ContractVariety.PostionPrice[item.PsitionId].NewPrice - (bs * (aslm.FloatingProfitAndLoss * vm.tick_size)); ContractVariety.PostionPrice[item.PsitionId].LossPrice = ContractVariety.PostionPrice[item.PsitionId].LossPrice - (bs * (aslm.FloatingProfitAndLoss * vm.tick_size)); // 修改数据库中数据 int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "UPDATE AutoStopLoss set LossPrice=" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ",newprice=" + ContractVariety.PostionPrice[item.PsitionId].NewPrice + " WHERE UserID='" + UserInfoHelper.UserId + "' and PostionID='" + item.PsitionId + "' and ContractID='" + item.ContractId + "';"); LogHelper.Debug("卖:更新止损价:" + ContractVariety.PostionPrice[item.PsitionId].LossPrice + ":止损价基数" + ContractVariety.PostionPrice[item.PsitionId].NewPrice); } } } } } } }
private ConditionBillViewModel(ConditionBillModelViewModel condtion) { //需要合约号 下单的类型和价格 以及数量 _IsEnabled = false; ContractCode = condtion.ContractCode; VarietyModel vm = null; string[] values = condtion.ContractCode.Split(' '); if (values.Length != 3) { return; } string varietie = values[1]; if (ContractVariety.Varieties.ContainsKey(varietie)) { vm = ContractVariety.Varieties[varietie]; } if (vm == null) { return; } Increment = vm.tick_size; lend = vm.precision; typePrice = condtion.PriceType; if (typePrice == "M") { IsTypePrice = Visibility.Visible; IsPrice = Visibility.Collapsed; Price = 0; PriceTypeBill = "市价"; _priceType = "市价"; } else if (typePrice == "R") { Price = 0; PriceTypeBill = "对手价"; _priceType = "对手价"; IsTypePrice = Visibility.Visible; IsPrice = Visibility.Collapsed; } else { Price = condtion.OrderPrice; typePrice = "L"; IsTypePrice = Visibility.Collapsed; IsPrice = Visibility.Visible; } OrderPrice = condtion.TrrigerPrice; OrderPrice3 = condtion.TrrigerPrice; Num = condtion.OrderVolume; //触发的类型 KeyValue kv0 = new KeyValue() { Id = 0, Value = "最新价" }; KeyValue kv1 = new KeyValue() { Id = 1, Value = "买一价" }; KeyValue kv2 = new KeyValue() { Id = 2, Value = "卖一价" }; PriceList.Add(kv0); PriceList.Add(kv1); PriceList.Add(kv2); PriceItem = kv0; KeyValue ttype0 = new KeyValue() { Id = 0, Value = ">=" }; KeyValue ttype1 = new KeyValue() { Id = 1, Value = "<=" }; TrrigerConditionItem = ttype0; TrrigerCondition.Add(ttype0); TrrigerCondition.Add(ttype1); KeyValue kv03 = new KeyValue() { Id = 0, Value = "最新价" }; KeyValue kv13 = new KeyValue() { Id = 1, Value = "买一价" }; KeyValue kv23 = new KeyValue() { Id = 2, Value = "卖一价" }; PriceList3.Add(kv03); PriceList3.Add(kv13); PriceList3.Add(kv23); PriceItem3 = kv03; KeyValue ttype03 = new KeyValue() { Id = 0, Value = ">=" }; KeyValue ttype13 = new KeyValue() { Id = 1, Value = "<=" }; IsFirst = true; TrrigerCondition3.Add(ttype03); TrrigerCondition3.Add(ttype13); TrrigerConditionItem3 = ttype03; if (condtion.Direction == "B") { IsBuy = true; IsSell = false; } else if (condtion.Direction == "S") { IsBuy = false; IsSell = true; } if (condtion.OpenOffset == (int)OffsetType.OFFSET_OPEN) { IsOpen = true; IsCloseing = false; } else if (condtion.OpenOffset == (int)OffsetType.OFFSET_COVER) { IsCloseing = true; IsOpen = false; } if (condtion.ConditionType == (int)YunConditionType.Y_PRICE) { IsFirst = true; IsSecond = false; IsThird = false; TrrigerConditionItem = TrrigerCondition[condtion.TrrigerCondition]; PriceItem = PriceList[condtion.TrrigerPriceType]; } else if (condtion.ConditionType == (int)YunConditionType.Y_TIME) { IsFirst = false; IsSecond = true; IsThird = false; TrrigerTime = condtion.TrrigerContime; //trriger_contime } else if (condtion.ConditionType == (int)YunConditionType.Y_TIMEPRICE) { IsFirst = false; IsSecond = false; IsThird = true; TrrigerConditionItem = TrrigerCondition3[condtion.TrrigerCondition]; PriceItem3 = PriceList3[condtion.TrrigerPriceType]; TrrigerTime3 = condtion.TrrigerContime; } Upatatecondtion = condtion; }
private ConditionBillViewModel(string contractCode, double price, string pricetype, int num) { _IsEnabled = true; //需要合约号 下单的类型和价格 以及数量 ContractCode = contractCode; VarietyModel vm = null; string[] values = contractCode.Split(' '); if (values.Length != 3) { return; } string varietie = values[1]; if (ContractVariety.Varieties.ContainsKey(varietie)) { vm = ContractVariety.Varieties[varietie]; } if (vm == null) { return; } Increment = vm.tick_size; lend = vm.precision; if (pricetype == "市价") { IsTypePrice = Visibility.Visible; IsPrice = Visibility.Collapsed; Price = 0; typePrice = "M"; } else if (pricetype == "对手价") { Price = 0; typePrice = "R"; IsTypePrice = Visibility.Visible; IsPrice = Visibility.Collapsed; } else { Price = price; typePrice = "L"; IsTypePrice = Visibility.Collapsed; IsPrice = Visibility.Visible; } PriceTypeBill = pricetype; _priceType = pricetype; OrderPrice = price; OrderPrice3 = price; Num = num; //触发的类型 KeyValue kv0 = new KeyValue() { Id = 0, Value = "最新价" }; KeyValue kv1 = new KeyValue() { Id = 1, Value = "买一价" }; KeyValue kv2 = new KeyValue() { Id = 2, Value = "卖一价" }; PriceList.Add(kv0); PriceList.Add(kv1); PriceList.Add(kv2); PriceItem = kv0; KeyValue ttype0 = new KeyValue() { Id = 0, Value = ">=" }; KeyValue ttype1 = new KeyValue() { Id = 1, Value = "<=" }; TrrigerConditionItem = ttype0; TrrigerCondition.Add(ttype0); TrrigerCondition.Add(ttype1); KeyValue kv03 = new KeyValue() { Id = 0, Value = "最新价" }; KeyValue kv13 = new KeyValue() { Id = 1, Value = "买一价" }; KeyValue kv23 = new KeyValue() { Id = 2, Value = "卖一价" }; PriceList3.Add(kv03); PriceList3.Add(kv13); PriceList3.Add(kv23); PriceItem3 = kv03; KeyValue ttype03 = new KeyValue() { Id = 0, Value = ">=" }; KeyValue ttype13 = new KeyValue() { Id = 1, Value = "<=" }; IsFirst = true; TrrigerCondition3.Add(ttype03); TrrigerCondition3.Add(ttype13); TrrigerConditionItem3 = ttype03; }
public void ExecuteSendPlaceOrderData(object para) { try { DelegationModel rtm = para as DelegationModel; VarietyModel vm = null; string[] values = rtm.contract_code.Split(' '); if (values.Length == 3) { string varietie = values[1]; if (ContractVariety.Varieties.ContainsKey(varietie)) { vm = ContractVariety.Varieties[varietie]; } if (vm != null) { rtm.precision = vm.precision; } } DelegationModelViewModel dmvm = OrderCancelViewModel.Instance().Delegations.FirstOrDefault(x => x.OrderId == rtm.order_id); if (dmvm == null) { return; //OrderCancelViewModel.Instance().Delegations.Add(new DelegationModelViewModel(rtm)); } //DelegationModelViewModel dmvmisHave = OrderCancelViewModel.Instance().Delegations.FirstOrDefault(x => x.OrderId == rtm.order_id && x.OrderStatus == (int)DeleteType.CreateSuccess); ////if (dmvmisHave != null) //{ // return; // //OrderCancelViewModel.Instance().Delegations.Add(new DelegationModelViewModel(rtm)); //} if (rtm.order_status == (int)DeleteType.CreateSuccess || rtm.order_status == (int)DeleteType.PortionTakeEffect) { DelegationModelViewModel dmvm1 = OrderCancelViewModel.Instance().KCDelegations.FirstOrDefault(x => x.OrderId == rtm.order_id && rtm.user_id == UserInfoHelper.UserId); if (dmvm1 == null) { OrderCancelViewModel.Instance().KCDelegations.Add(new DelegationModelViewModel(rtm)); LogHelper.Info("4003 增加 可撤" + rtm.contract_code + ":" + rtm.direction + ":" + rtm.open_offset + ":" + rtm.order_status); } dmvm.OrderStatus = rtm.order_status; //详细状态 dmvm.FailMsg = rtm.fail_msg; } else { dmvm.LeftVolume = dmvm.OrderVolume - rtm.trade_volume; dmvm.TradeVolume = rtm.trade_volume; dmvm.OrderStatus = rtm.order_status; dmvm.LeftVolume = rtm.left_volume; //详细状态 dmvm.FailMsg = rtm.fail_msg; DelegationModelViewModel dmvm1 = OrderCancelViewModel.Instance().KCDelegations.FirstOrDefault(x => x.OrderId == rtm.order_id && rtm.user_id == UserInfoHelper.UserId); if (dmvm1 != null) { OrderCancelViewModel.Instance().KCDelegations.Remove(dmvm1); LogHelper.Info("4003 移除 可撤" + rtm.contract_code + ":" + rtm.direction + ":" + rtm.open_offset + ":" + rtm.order_status); } } DelegationModelViewModel tem1 = OrderCancelViewModel.Instance().KCDelegations.FirstOrDefault(x => x.OrderId == rtm.order_id && rtm.user_id == UserInfoHelper.UserId); if (tem1 != null) { tem1.LeftVolume = tem1.OrderVolume - rtm.trade_volume; tem1.TradeVolume = rtm.trade_volume; tem1.OrderStatus = rtm.order_status; //详细状态 dmvm.FailMsg = rtm.fail_msg; } if (rtm.order_status == (int)DeleteType.UnTakeEffecUserCannel) { if (CommParameterSetting.MessageAlert.RevokeAlert == "窗口提示") { MessageBox.Show(rtm.contract_id + " 委托撤单成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (CommParameterSetting.MessageAlert.RevokeAlert == "声音提示") { SoundPlayerHelper.Play(); } } TransactionViewModel.Instance().SelectNumExecuteChanged(); } catch (Exception ex) { LogHelper.Info(ex.ToString()); } }
public void ExecutePositionInfoData(object para) { try { PotionModel rtm = para as PotionModel; PositionAllViewModel pavm = PositionAllViewModel.Instance(); PositionViewModel pvm = PositionViewModel.Instance(); PotionDetailModelViewModel pdmvmtemp = pavm.DetPMList.FirstOrDefault(x => x.PsitionId == rtm.position_id); if (rtm.position_volume == 0) { if (pdmvmtemp != null) { pavm.DetPMList.Remove(pdmvmtemp); LogHelper.Info("4007 移除 " + rtm.contract_code + ":" + rtm.direction); pavm.PMList.Clear(); pvm.PMList.Clear(); } int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "delete from AutoStopLoss where ContractID='" + rtm.contract_id + "' and PostionID='" + rtm.position_id + "';"); } else { if (pdmvmtemp != null) { pdmvmtemp.PositionVolume = rtm.position_volume; pdmvmtemp.AbleVolume = rtm.position_volume; pdmvmtemp.UseMargin = rtm.use_margin; pdmvmtemp.SysUseMargin = rtm.sys_margin; } else { PotionDetailModel pdm = new PotionDetailModel(); pdm.able_volume = rtm.position_volume; pdm.contract_code = rtm.contract_code; pdm.contract_id = rtm.contract_id; pdm.direction = rtm.direction; pdm.open_date = rtm.position_date; pdm.open_price = rtm.position_price; pdm.open_time = rtm.position_time; pdm.position_volume = rtm.position_volume; pdm.position_id = rtm.position_id; pdm.shadow_orderID = rtm.shadow_orderID; pdm.shadow_positionid = rtm.shadow_positionid; pdm.shadow_tradeid = rtm.shadow_tradeid; pdm.trade_id = ""; pdm.user_id = rtm.user_id; pdm.use_margin = rtm.use_margin; pdm.sys_margin = rtm.sys_margin; VarietyModel vm = null; string[] values = pdm.contract_id.Split(' '); if (values.Length == 3) { string varietie = values[1]; if (ContractVariety.Varieties.ContainsKey(varietie)) { vm = ContractVariety.Varieties[varietie]; } if (vm != null) { pdm.precision = vm.precision; } } pdmvmtemp = new PotionDetailModelViewModel(pdm); pavm.DetPMList.Add(pdmvmtemp); } } if (ContractVariety.ContracPostionID.ContainsKey(rtm.contract_id)) { AutoStopLossModel aslm = CommParameterSetting.AutoStopLossModel.FirstOrDefault(x => x.Direction == rtm.direction && x.Agreement == rtm.contract_id); if (aslm != null) { if (!ContractVariety.PostionPrice.ContainsKey(rtm.position_id)) { ContractVariety.PostionPrice.Add(rtm.position_id, new AutoLossPrice()); } string[] VarietiesKey = rtm.contract_id.Split(' '); if (VarietiesKey.Length == 3) { string varietie = VarietiesKey[1]; VarietyModel vm = null; if (ContractVariety.Varieties.ContainsKey(varietie)) { vm = ContractVariety.Varieties[varietie]; } if (vm != null) { if (rtm.direction == "B") { ContractVariety.PostionPrice[rtm.position_id].LossPrice = rtm.position_price - aslm.StopLossPotion * vm.tick_size; } else { ContractVariety.PostionPrice[rtm.position_id].LossPrice = rtm.position_price + aslm.StopLossPotion * vm.tick_size; } ContractVariety.PostionPrice[rtm.position_id].NewPrice = rtm.position_price; if (!ContractVariety.ContracPostionID.ContainsKey(rtm.contract_id)) { ContractVariety.ContracPostionID.Add(rtm.contract_id, new List <string>()); } ContractVariety.ContracPostionID[rtm.contract_id].Add(rtm.position_id); int count = SQLiteHelper.ExecuteNonQuery(SQLiteHelper.DBPath, CommandType.Text, "insert INTO AutoStopLoss VALUES('" + rtm.position_id + "','" + rtm.contract_id + "','" + UserInfoHelper.UserId + "'," + ContractVariety.PostionPrice[rtm.position_id].LossPrice + "," + ContractVariety.PostionPrice[rtm.position_id].NewPrice + ");"); } } } } PotionDetailModelViewModel[] temp = pavm.DetPMList.ToArray(); //合约名加方向作为K Dictionary <string, PotionDetailModelViewModel> dicod = new Dictionary <string, PotionDetailModelViewModel>(); foreach (PotionDetailModelViewModel item in temp) { PotionDetailModelViewModel pm1 = item.Clone(item); if (!dicod.Keys.Contains(pm1.ContractCode + pm1.Direction)) { pm1.AllPrice = pm1.OpenPrice * pm1.PositionVolume; dicod.Add(pm1.ContractCode + pm1.Direction, pm1); //MainViewModel.GetInstance().SubscribedStocks.Add(pm1.ContractCode); } else { dicod[item.ContractCode + item.Direction].AbleVolume = dicod[item.ContractCode + item.Direction].AbleVolume + item.AbleVolume; dicod[item.ContractCode + item.Direction].PositionProfitLoss = dicod[item.ContractCode + item.Direction].PositionProfitLoss + item.PositionProfitLoss; dicod[item.ContractCode + item.Direction].PositionVolume = dicod[item.ContractCode + item.Direction].PositionVolume + item.PositionVolume; dicod[item.ContractCode + item.Direction].UseMargin = dicod[item.ContractCode + item.Direction].UseMargin + item.UseMargin; dicod[item.ContractCode + item.Direction].SysUseMargin = dicod[item.ContractCode + item.Direction].SysUseMargin + item.SysUseMargin; dicod[item.ContractCode + item.Direction].AllPrice += item.PositionVolume * item.OpenPrice; dicod[item.ContractCode + item.Direction].OpenPrice = dicod[item.ContractCode + item.Direction].AllPrice / dicod[item.ContractCode + item.Direction].PositionVolume; } } if (dicod.Keys.Count > 0) { pavm.PMList.Clear(); pvm.PMList.Clear(); foreach (PotionDetailModelViewModel item in dicod.Values) { pavm.PMList.Add(item); pvm.PMList.Add(item); } pvm.SelectedItem = pvm.PMList.FirstOrDefault(x => x.ContractCode == rtm.contract_code && x.Direction == rtm.direction); } if (!MainViewModel.GetInstance().SubscribedStocks.Contains(rtm.contract_code)) { MainViewModel.GetInstance().SubscribedStocks.Add(rtm.contract_code); ScoketManager.GetInstance().SendSubscribeInfo(7, rtm.contract_code); } foreach (string key in CommHelper.CFSmvmList.Keys) { PotionDetailModelViewModel temp1 = PositionViewModel.Instance().PMList.FirstOrDefault(x => (x.ContractId + x.Direction) == key); if (temp1 == null) { continue; } double maxprice = 99999999999; double minprice = 0; double maxprice1 = 0; double minprice1 = 99999999999; int maxnum = 0; int minnum = 0; foreach (CheckFullStopModelViewModel item in CommHelper.CFSmvmList[key]) { if (item == null) { continue; } if (item.StoplossPrice > 0 || item.StopprofitPrice > 0) { if (item.Direction == "B") { if (item.StopprofitPrice > 0) { if (item.StopprofitPrice < maxprice) { maxprice = item.StopprofitPrice; maxnum = item.OrderVolume; } else if (item.StopprofitPrice == maxprice) { maxnum += item.OrderVolume; } } if (item.StoplossPrice > 0) { if (item.StoplossPrice > minprice) { minprice = item.StoplossPrice; minnum = item.OrderVolume; } else if (item.StoplossPrice == minprice) { minnum += item.OrderVolume; } } if (maxprice < 99999999999 && maxnum > 0) { temp1.ProfitVolume = maxprice + "/" + maxnum; } if (minprice > 0 && minnum > 0) { temp1.LossVolume = minprice + "/" + minnum; } } else { if (item.StopprofitPrice > 0) { if (item.StopprofitPrice > maxprice1) { maxprice1 = item.StopprofitPrice; maxnum = item.OrderVolume; } else if (item.StopprofitPrice == maxprice1) { maxnum += item.OrderVolume; } } if (item.StoplossPrice > 0) { if (item.StoplossPrice < minprice1) { minprice1 = item.StoplossPrice; minnum = item.OrderVolume; } else if (item.StoplossPrice == minprice1) { minnum += item.OrderVolume; } } if (maxprice1 > 0 && maxnum > 0) { temp1.ProfitVolume = maxprice1 + "/" + maxnum; } if (minprice < 99999999999 && minnum > 0) { temp1.LossVolume = minprice1 + "/" + minnum; } } } } } TransactionViewModel.Instance().AgreementChangedExecuteChanged(); if (pavm.PMList.FirstOrDefault(x => x.ContractCode == rtm.contract_code && x.Direction == rtm.direction) == null) { if (CommHelper.CFSmvmList.ContainsKey(rtm.contract_code + rtm.direction)) { CommHelper.CFSmvmList[rtm.contract_code + rtm.direction].Clear(); LogHelper.Info("4007中移除止盈止损" + rtm.contract_id + rtm.direction + "清除数据"); } } //PositionViewModel.Instance().JSAbleVolume(); TransactionViewModel.Instance().FigureUpNum(TransactionViewModel.Instance()._futures); } catch (Exception ex) { LogHelper.Info(ex.ToString()); } }
public void ExecutePositionDetialData(object para) { try { PotionDetailModel pm = para as PotionDetailModel; PositionAllViewModel pavm = PositionAllViewModel.Instance(); if (pavm.DetPMList.FirstOrDefault(x => x.PsitionId == pm.position_id) != null) { return; } if (pm.bLast) { PotionDetailModelViewModel[] temp = pavm.DetPMList.ToArray(); //合约名加方向作为K Dictionary <string, PotionDetailModelViewModel> dicod = new Dictionary <string, PotionDetailModelViewModel>(); foreach (PotionDetailModelViewModel item in temp) { PotionDetailModelViewModel pm1 = item.Clone(item); if (!dicod.Keys.Contains(pm1.ContractCode + pm1.Direction)) { pm1.AllPrice = pm1.OpenPrice * pm1.PositionVolume; dicod.Add(pm1.ContractCode + pm1.Direction, pm1); MainViewModel.GetInstance().SubscribedStocks.Add(pm1.ContractCode); } else { dicod[item.ContractCode + item.Direction].AbleVolume = dicod[item.ContractCode + item.Direction].AbleVolume + item.AbleVolume; dicod[item.ContractCode + item.Direction].PositionProfitLoss = dicod[item.ContractCode + item.Direction].PositionProfitLoss + item.PositionProfitLoss; dicod[item.ContractCode + item.Direction].PositionVolume = dicod[item.ContractCode + item.Direction].PositionVolume + item.PositionVolume; dicod[item.ContractCode + item.Direction].UseMargin = dicod[item.ContractCode + item.Direction].UseMargin + item.UseMargin; dicod[item.ContractCode + item.Direction].SysUseMargin = dicod[item.ContractCode + item.Direction].SysUseMargin + item.SysUseMargin; dicod[item.ContractCode + item.Direction].AllPrice += item.PositionVolume * item.OpenPrice; dicod[item.ContractCode + item.Direction].OpenPrice = dicod[item.ContractCode + item.Direction].AllPrice / dicod[item.ContractCode + item.Direction].PositionVolume; } } if (dicod.Keys.Count > 0) { foreach (PotionDetailModelViewModel item in dicod.Values) { pavm.PMList.Add(item); PositionViewModel.Instance().PMList.Add(item); } } ScoketManager.GetInstance().SendSubscribeInfo(7, MainViewModel.GetInstance().SubscribedStocks); //发送命令 ReqPotion rp = new ReqPotion(); rp.cmdcode = RequestCmdCode.SelectStopLoss; rp.content = new ReqLoginName() { user_id = UserInfoHelper.UserId }; ScoketManager.GetInstance().SendTradeWSInfo(JsonConvert.SerializeObject(rp)); //PositionViewModel.Instance().JSAbleVolume(); TransactionViewModel.Instance().FigureUpNum(TransactionViewModel.Instance()._futures); return; } VarietyModel vm = null; string[] values = pm.contract_id.Split(' '); if (values.Length == 3) { string varietie = values[1]; if (ContractVariety.Varieties.ContainsKey(varietie)) { vm = ContractVariety.Varieties[varietie]; } if (vm != null) { pm.precision = vm.precision; } } PotionDetailModelViewModel pvm = new PotionDetailModelViewModel(pm); pavm.DetPMList.Add(pvm); } catch (Exception ex) { LogHelper.Info(ex.ToString()); } }
public void ExecuteTransactionInfoData(object para) { try { TransactionInfoModel tim = para as TransactionInfoModel; if (tim == null) { return; } if (TodayTraderViewModels.Instance().TodayTraderList.FirstOrDefault(x => x.ShadowTradeID == tim.shadow_tradeID) != null) { return; } TodayTraderModel ttm = new TodayTraderModel(); ttm.contract_code = tim.contract_code; ttm.direction = tim.direction; ttm.open_offset = tim.open_offset; ttm.order_id = tim.order_id; ttm.price_type = tim.price_type; ttm.shadow_orderID = tim.shadow_orderID; ttm.trade_id = tim.trade_number; ttm.contract_id = tim.contract_id; ttm.shadow_tradeID = tim.shadow_tradeID; ttm.trade_date = tim.trade_date; ttm.trade_id = tim.trade_id; ttm.trade_price = tim.trade_price; ttm.trade_time = tim.trade_time; ttm.trade_volume = tim.trade_volume; VarietyModel vm = null; string[] values = ttm.contract_code.Split(' '); if (values.Length == 3) { string varietie = values[1]; if (ContractVariety.Varieties.ContainsKey(varietie)) { vm = ContractVariety.Varieties[varietie]; } if (vm != null) { ttm.precision = vm.precision; } } TodayTraderViewModels.Instance().TodayTraderList.Add(new TodayTraderModelViewModel(ttm)); Dictionary <string, TodayTraderModelViewModel> dicTTVM = new Dictionary <string, TodayTraderModelViewModel>(); foreach (TodayTraderModelViewModel item in TodayTraderViewModels.Instance().TodayTraderList) { if (!dicTTVM.ContainsKey(item.ContractCode + item.Direction + item.OpenOffset)) { TodayTraderModelViewModel ttmvm = item.Clone(item); ttmvm.AllPrice = item.TradePrice * item.TradeVolume; dicTTVM.Add(item.ContractCode + item.Direction + item.OpenOffset, ttmvm); } else { dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].AllPrice = dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].AllPrice + item.TradePrice * item.TradeVolume; dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradeVolume = dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradeVolume + item.TradeVolume; dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradePrice = dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].AllPrice / dicTTVM[item.ContractCode + item.Direction + item.OpenOffset].TradeVolume; } } if (dicTTVM != null && dicTTVM.Values.Count > 0) { TodayTraderViewModels.Instance().TodayTraderListALL.Clear(); foreach (TodayTraderModelViewModel item in dicTTVM.Values) { TodayTraderViewModels.Instance().TodayTraderListALL.Add(item); } } if (CommParameterSetting.MessageAlert.TradeAlert == "窗口提示") { // string msg = "\t合约已成交\t" + "\n\n" + ttm.contract_id + "\n\t" + "方向:" + (ttm.direction == "B" ? "买" : "卖") + "\n\t开平:" + (ttm.open_offset == 1 ? "开仓" : "平仓") + "\n\t成交数量:" + ttm.trade_volume + "\n\t成交价格" + ttm.trade_price; string msg = " " + ttm.contract_id + "\t" + " 方向:" + (ttm.direction == "B" ? "买" : "卖") + "\t\n 开平:" + (ttm.open_offset == 1 ? "开仓" : "平仓") + "\t 成交数量:" + ttm.trade_volume + "\t\n 成交价格" + ttm.trade_price + "\t" + " 已成交"; MessageBox.Show(msg, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); LogHelper.Info(msg + "成交时间:"); } else if (CommParameterSetting.MessageAlert.TradeAlert == "声音提示") { SoundPlayerHelper.Play(); } } catch (Exception ex) { LogHelper.Info(ex.ToString()); } }
public ActionResult Edit(int?SN, int?customerSN, string petName, int?petGender, int?kindSN, int?varietySN, string petRemark) { try { if (SN == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Comm_Pet pet = PetModel.getPetBySN(Convert.ToInt32(SN)); if (pet == null) { return(HttpNotFound()); } #region Validation if (customerSN == null) { ModelState.AddModelError("customerSN", "請選擇飼主"); } if (petName == string.Empty) { ModelState.AddModelError("petName", "請輸入寵物名稱"); } if (petGender == null) { ModelState.AddModelError("petGender", "請選擇寵物性別"); } if (kindSN == null) { ModelState.AddModelError("kindSN", "請選擇物種"); } if (varietySN == null) { ModelState.AddModelError("varietySN", "請選擇品種"); } if (!ModelState.IsValid) { List <Comm_Customer> customerList = CustomerModel.getCustomerList(); List <Comm_Kind> kindList = KindModel.getKindList(); List <Comm_Variety> varietyList = VarietyModel.getVarietyListByKindSN(pet.kindSN); ViewBag.customerSN = new SelectList(customerList, "SN", "customerName", pet.customerSN); ViewBag.kindSN = new SelectList(kindList, "SN", "kindName", pet.kindSN); ViewBag.varietySN = new SelectList(varietyList, "SN", "varietyName", pet.varietySN); return(View(pet)); } #endregion Boolean gender = false; if (petGender == 1) { gender = true; } pet.customerSN = Convert.ToInt32(customerSN); pet.petName = petName; pet.petGender = gender; pet.kindSN = Convert.ToInt32(kindSN); pet.varietySN = Convert.ToInt32(varietySN); pet.petRemark = petRemark; return(RedirectToAction("Index")); } catch { return(View()); } }