private void Form_ItemSelected(GiftTicket ticket, EventArgs t2) { try { if (ticket != null) { //重新设置匹配 ticket.CostumeID = match.Retail.CostumeID; match.Retail.GiftTickets = ticket.ID; match.Ticket = ticket; // List<GiftTicket> memberList = (List<GiftTicket>)this.dataGridView1.DataSource; //match //重新设置match GiftTicketList[index] = ticket; BindingDataSource(); } } catch (Exception ee) { GlobalUtil.ShowError(ee); } }
private void Form_ItemSelected(GiftTicket ticket, EventArgs t2) { try { if (ticket != null) { //重新设置匹配 this.giftTicketList = ticket.ID; this.discountMoney = ticket.Denomination; this.textBox1.Text = ticket.Denomination.ToString(); /* ticket = match.Retail.CostumeID; * match.Retail.GiftTickets = ticket.ID; * match.Ticket = ticket; * // List<GiftTicket> memberList = (List<GiftTicket>)this.dataGridView1.DataSource; * * //match * //重新设置match * * * * * GiftTicketList[index] = ticket; * BindingDataSource();*/ } } catch (Exception ee) { GlobalUtil.ShowError(ee); } }
public void SetMatch(int i, GiftTicketMatch match, GiftTicket newTicket) { //如果是款号有匹配的优惠券则完成匹配,否则,设置为空,那么优惠券就保留。 if (String.IsNullOrEmpty(match.Retail.GiftTickets)) { match.Ticket = null; genes[i] = match; } else { //款号有匹配的优惠券 String[] retailMatchTickets = match.Retail.GiftTickets.Split(','); List <String> retailMatchTicketList = new List <string>(retailMatchTickets); if (newTicket != null) { if (retailMatchTicketList.Contains(newTicket.ID)) { //匹配到了 tickets.Add(match.Ticket); match.Ticket = newTicket; tickets.Remove(newTicket); genes[i] = match; } else { tickets.Add(match.Ticket); match.Ticket = null; genes[i] = match; } } } }
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { if (!DataGridViewUtil.CheckPerrmisson(this, sender, e)) { return; } try { // MessageBox.Show(string.Format("当前点中的是第{0}列,第{1}行", e.ColumnIndex, e.RowIndex)); if (e.RowIndex > -1 && e.ColumnIndex > -1) { List <GiftTicket> memberList = (List <GiftTicket>) this.dataGridView1.DataSource; GiftTicket gifTicket = memberList[e.RowIndex]; //switch (this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value) //{ // case "选择优惠券": // if (!String.IsNullOrEmpty(memberList[e.RowIndex].ID)) // { // ChooseGiftTicket(e.RowIndex); // } // break; // default: // break; //} } } catch (Exception ee) { GlobalUtil.ShowError(ee); } }
// 随机的个体 public void GenerateIndividual(List <RetailDetail> retailsOrg, List <GiftTicket> ticketsOrg) { this.RetailsOrg = retailsOrg; this.TicketsOrg = ticketsOrg; retails = new List <RetailDetail>(); tickets = new List <GiftTicket>(); retails.AddRange(retailsOrg); tickets.AddRange(ticketsOrg); for (int i = 0; i < retailsOrg.Count; i++) { //Random randomDetail = new Random(GlobalUtil.GetRandomSeed()); //int randomDetailIndex = random.Next(0, retails.Count); RetailDetail retail = retailsOrg[i]; //随机拿一张优惠券 Random random = new Random(GetRandomSeed()); GiftTicket ticket = null; if (tickets.Count > 0) { int pickTicket = random.Next(0, tickets.Count); ticket = tickets[pickTicket]; } SetMatch(i, retail, ticket); // int pickTicket = (int)(new Random().NextDouble() * tickets.Count); //是否考虑到,优惠券被占用的条件,被占用的话,这个是无效的适应度 } }
private void Initialize() { this.skinTextBoxMemberId.SkinTxt.Text = string.Empty; this.dataGridViewMembers.AutoGenerateColumns = false; DateTimeUtil.DateTimePicker_GetTodayAndAfterAMonth(dateTimePickerStartDate, dateTimePickerEndDate); SetGiftTicket(this.skinComboBox_giftTicket); // guideComboBox1.Initialize(GuideComboBoxInitializeType.Null, CommonGlobalCache.CurrentShopID); //if (CommonGlobalCache.CurrentUser.Type == UserInfoType.Guide) //{ // this.guideComboBox1.SelectedValue = CommonGlobalCache.CurrentUserID; //} try { config = GiftTicketAgileConfiguration.Load(CONFIG_PATH) as GiftTicketAgileConfiguration; } catch (Exception ex) { CommonGlobalUtil.WriteLog(ex); } GiftTicket = config?.GiftTicket; if (GiftTicket != null) { while (GiftTicket.ExpiredDate < TimeHelper.GetDateTimeWithEmptyTime(DateTime.Now)) { GiftTicket.ExpiredDate = GiftTicket.ExpiredDate.AddMonths(1); } dateTimePickerEndDate.Value = GiftTicket.ExpiredDate; } else { GiftTicket = new GiftTicket(); config = new GiftTicketAgileConfiguration(); } }
private void ConfirmSelectCell(GiftTicket ticket) { if (this.ItemSelected != null) { this.ItemSelected(ticket, null); } this.DialogResult = DialogResult.OK; }
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (!DataGridViewUtil.CheckPerrmisson(this, sender, e)) { return; } try { if (e.RowIndex >= 0 && e.ColumnIndex >= 0 && !dataGridView1.Rows[e.RowIndex].IsNewRow) { DataGridView view = (DataGridView)sender; List <GiftTicket> list = (List <GiftTicket>)view.DataSource; GiftTicket item = (GiftTicket)list[e.RowIndex]; switch (view.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn.HeaderText) { case "禁用": if (item.StateName == "已使用") { GlobalMessageBox.Show("已使用的优惠券不能禁用!"); dataGridView1.CancelEdit(); //dataGridView1.CellValueChanged -= dataGridView1_CellValueChanged; //this.dataGridView1[e.ColumnIndex, e.RowIndex].Value = false; //dataGridView1.CellValueChanged += dataGridView1_CellValueChanged; //dataGridView1.Refresh(); return; } if (GlobalMessageBox.Show("是否确认操作?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { item.Enabled = !item.Enabled; DoEnable(item); } else { dataGridView1.CancelEdit(); return; } break; default: break; } } } catch (Exception ex) { CommonGlobalUtil.ShowError(ex); } }
private void SetMatch(int i, RetailDetail retail, GiftTicket ticket) { if (ticket == null) { //优惠券不够用了 genes[i] = new GiftTicketMatch() { Retail = retail, Ticket = null }; retails.Remove(retail); } //如果是款号有匹配的优惠券则完成匹配,否则,设置为空,那么优惠券就保留。 else if (String.IsNullOrEmpty(retail.MatchGiftTickets)) { //该款号没有匹配的优惠券。 genes[i] = new GiftTicketMatch() { Retail = retail, Ticket = null }; retails.Remove(retail); } else { //款号有匹配的优惠券 String[] retailMatchTickets = retail.MatchGiftTickets.Split(','); List <String> retailMatchTicketList = new List <string>(retailMatchTickets); if (retailMatchTicketList.Contains(ticket.ID)) { //匹配到了 genes[i] = new GiftTicketMatch() { Retail = retail, Ticket = ticket }; retails.Remove(retail); tickets.Remove(ticket); } else { genes[i] = new GiftTicketMatch() { Retail = retail, Ticket = null }; retails.Remove(retail); } } }
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { try { if (e.RowIndex > -1 && e.ColumnIndex > -1) { if (e.Value == null) { return; } DataGridView view = sender as DataGridView; GiftTicket tickets = view.Rows[e.RowIndex].DataBoundItem as GiftTicket; //if (e.ColumnIndex == effectDateDataGridViewTextBoxColumn.Index) //{ // if (tickets.EffectDate == SystemDefault.DateTimeNull) // { // e.Value = null; // } //} //else if (e.ColumnIndex == expiredDateDataGridViewTextBoxColumn.Index) //{ // if (tickets.ExpiredDate == SystemDefault.DateTimeNull) // { // e.Value = null; // } //} //else if (e.ColumnIndex == Denomination.Index || e.ColumnIndex == denominationDataGridViewTextBoxColumn.Index) { if (String.IsNullOrEmpty(tickets?.ID)) { e.Value = null; } } } } catch (Exception ee) { GlobalUtil.ShowError(ee); } }
//绑定数据源 private void BindingDataSource() { try { this.dataGridView1.DataSource = null; List <GiftTicket> temp = new List <GiftTicket>(); int tempDenomination = 0; if (this.GiftTicketList != null && this.GiftTicketList.Count != 0) { //根据面额大小择优排序 for (int i = 0; i < GiftTicketList.Count - 1; ++i) { tempDenomination = i; for (int j = i + 1; j < GiftTicketList.Count; ++j) { if (GiftTicketList[j].Denomination > GiftTicketList[tempDenomination].Denomination) { tempDenomination = j; } } GiftTicket t = GiftTicketList[tempDenomination]; GiftTicketList[tempDenomination] = GiftTicketList[i]; GiftTicketList[i] = t; // Console.WriteLine("{0}",list[i]); } temp.AddRange(GiftTicketList); } //foreach (var item in AllRetailDetailList) //{ // if (!MatchRetails.Contains(item)) // { // temp.Add(new GiftTicket() { CostumeID = item.CostumeID, EffectDate = SystemDefault.DateTimeNull, ExpiredDate = SystemDefault.DateTimeNull }); // } //} this.dataGridView1.DataSource = temp; } catch (Exception ee) { GlobalUtil.ShowError(ee); } }
public void SetGene(int index, GiftTicketMatch value) { List <GiftTicket> tickets = new List <GiftTicket>(); tickets.AddRange(TicketsOrg); //如果 for (int i = 0; i < genes.Length; i++) { if (index != i) { if (genes[i] != null) { tickets.Remove(genes[i].Ticket); } } } if (tickets.Exists(t => t.ID == value.Ticket?.ID)) { //优惠券没有被占用,可以使用 genes[index] = value; fitness = 0; } else { //重新查找新的优惠券匹配 GiftTicket ticket = null; if (tickets.Count > 0) { Random random = new Random(GetRandomSeed()); int pickTicket = random.Next(0, tickets.Count); // int pickTicket = (int)(new Random().NextDouble() * tickets.Count); //随机拿一张优惠券 ticket = tickets[pickTicket]; } SetMatch(index, value, ticket); fitness = 0; } }
// 变异 private static void Mutate(GiftTicketIndividual indiv) { // Console.WriteLine("变异"); // Loop through genes for (int i = 0; i < indiv.Size(); i++) { if (new Random().NextDouble() <= mutationRate) { //从剩余的优惠券中,随机一个优惠券 GiftTicketMatch gene = indiv.GetGene(i); GiftTicket ticket = null; if (indiv.tickets.Count > 0) { Random random = new Random(GetRandomSeed()); int pickTicket = random.Next(0, indiv.tickets.Count); // int pickTicket = (int)(new Random().NextDouble() * indiv.tickets.Count); ticket = indiv.tickets[pickTicket]; indiv.SetMatch(i, gene, ticket); } } } }
private void DoEnable(GiftTicket item) { try { if (CommonGlobalUtil.EngineUnconnectioned(this)) { return; } EnabledGiftTicketPara para = new EnabledGiftTicketPara() { Enabled = item.Enabled, ID = item.ID }; UpdateResult result = CommonGlobalCache.ServerProxy.EnabledGiftTicket(para); switch (result) { case UpdateResult.Success: break; case UpdateResult.Error: GlobalMessageBox.Show("内部错误!"); break; default: break; } } catch (Exception ee) { ShowError(ee); } finally { UnLockPage(); } }
private void CalcGiftTickets() { try { List <List <GiftTicketMatch> > matchePopulation = new List <List <GiftTicketMatch> >(); //非会员不计算 if (member != null) { //找出所有订单中匹配优惠活动的款号信息 //算出最划算的匹配信息 //获取所有优惠券信息 ticketsOrg = GlobalCache.ServerProxy.GetValidGiftTickets(member.PhoneNumber); SortTicket(ticketsOrg); List <GiftTicket> temp = new List <GiftTicket>(); int tempDenomination = 0; if (ticketsOrg != null && ticketsOrg.Count != 0) { //根据面额大小择优排序 for (int i = 0; i < ticketsOrg.Count - 1; ++i) { tempDenomination = i; for (int j = i + 1; j < ticketsOrg.Count; ++j) { if (ticketsOrg[j].Denomination > ticketsOrg[tempDenomination].Denomination) { tempDenomination = j; } } GiftTicket t = ticketsOrg[tempDenomination]; ticketsOrg[tempDenomination] = ticketsOrg[i]; ticketsOrg[i] = t; // Console.WriteLine("{0}",list[i]); } temp.AddRange(ticketsOrg); } ticketsOrg = temp; //重新获取匹配的优惠信息 CheckTicketsForCostumes(ticketsOrg); allRetailDetailListOrg = GetAllRetailDetails(); /* SortRetailDetail(allRetailDetailListOrg); * allRetailDetailListOrg.Reverse(); * * GiftTicketAlgorithm.RetailDetails = allRetailDetailListOrg; * GiftTicketAlgorithm.Tickets = ticketsOrg; * GiftTicketIndividual.SetDefaultGeneLength(allRetailDetailListOrg.Count); * GiftTicketPopulation pop = new GiftTicketPopulation(500, true); * Console.WriteLine("初始化种群"); * Console.WriteLine(pop.ToString()); * int bestScore = 0; * * GiftTicketIndividual best = null; * for (int i = 0; i <50; i++) * { * GiftTicketPopulation newPop = GiftTicketAlgorithm.EvolvePopulation(pop); * Console.WriteLine("获取新种群" + i); * Console.WriteLine(newPop.ToString()); * pop = newPop; * GiftTicketIndividual ind = pop.GetFittest(); * Console.WriteLine("最优解" + ind); * int score = ind.GetFitness(); * Console.WriteLine("分数" + score); * * * //如果分数相同,则判断是否是相同的解? * if (score == bestScore) * { * best = ind; * if (ind?.ToString() == best?.ToString()) { * //得到最优解 * break; * } * }else * if (score > bestScore) { * bestScore = score; * best = ind; * } * } * * * //计算没有个体的集中性,取出最高概率的那个记录 * * * matches = best.GiftTicketMatches; * // * Console.WriteLine("得到最优的"); * foreach (var item in matches) * { * if (item.Ticket != null) * { * //得到了就设置下关系 * item.Ticket.CostumeID = item.Retail.CostumeID; * item.Retail.GiftTickets = item.Ticket.ID; * item.Retail.GiftTicketDenomination = item.Ticket.Denomination; * Console.WriteLine(item.Ticket.ToString()); * } * }*/ //int discountMoney = 0; //foreach (GiftTicketMatch item in matches) //{ // if (item.Ticket != null) // { // discountMoney += item.DiscountMoney(); // } //} // UpdateRetailDetailGiftTickets(); } } catch (Exception ex) { CommonGlobalUtil.ShowError(ex); } }