Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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;
             }
         }
     }
 }
Exemple #4
0
        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();
            }
        }
Exemple #7
0
 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);
                }
            }
        }
Exemple #10
0
        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);
            }
        }
Exemple #11
0
        //绑定数据源
        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();
            }
        }
Exemple #15
0
        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);
            }
        }