【Basic Code】一个被我写烂的坏味道,引以为戒

        今天被组长训了,因为这个坏味道,封装啊!!!

public static List<LeKeCardInfo> QueryStoreChange(LeKeQueryReq PayREQ)
        {
            //存储最终的数据
            List<LeKeCardInfo> resultList = new List<LeKeCardInfo>();
            List<LeKeCardInfo> resultNull = new List<LeKeCardInfo>();
            List<D.Consume> consumelist = new List<Consume>();
            
            var where = new Where<D.LeaguerEvent>();
            var where1 = new Where<D.Consume>();
            var where2 = new Where<D.ExperienceRecord>();
            var where3 = new Where<D.TemporaryEvent>();

            where.And(a => a.Createdatetime >= PayREQ.StartTime && a.Createdatetime <= PayREQ.EndTime && a.Event != (int)OperateEvent.RemakeCard && a.Event != (int)OperateEvent.ChangeCard);
            where1.And(a => a.Createdatetime >= PayREQ.StartTime && a.Createdatetime <= PayREQ.EndTime && a.IsSuccess == 1);
            where3.And(a => a.Createdatetime >= PayREQ.StartTime && a.Createdatetime <= PayREQ.EndTime && a.Event != (int)OperateEvent.RemakeCard && a.Event != (int)OperateEvent.ChangeCard);
            
            //终端ID不为空
            if (PayREQ.TerminalId > 0)
            {
                string terminalname = DbCard.GetTerminalName(PayREQ.TerminalId);
                where2.And(a => a.LeaguerID == terminalname);
                where.And(a => a.TerminalId == PayREQ.TerminalId);
                where.And(a => a.TerminalId == PayREQ.TerminalId);
            }
            //操作员不为空
            if (PayREQ.OperatorId > 0)
                where.And(a => a.Operator == PayREQ.OperatorId);
            else
            {
                where2.And(a => a.EndTime >= PayREQ.StartTime && a.EndTime <= PayREQ.EndTime);
                if (!string.IsNullOrEmpty(PayREQ.CardNum))
                    where2.And(a => a.LeaguerID == PayREQ.CardNum);
                //找出体验表中符合条件的数据
                List<D.ExperienceRecord> ExList = MySql.From<D.ExperienceRecord>().Where(where2).ToList();
                var conslist = MySql.From<D.Consume>().Where(where1).ToList();

                foreach (var e in ExList)
                {//找出消费表中体验id为ExList中的数据
                    var consume = conslist.Find(a => a.ExperienceId == e.Id);
                    if (consume != null)
                        consumelist.Add(consume);
                }
                //级别和名称作为筛选条件,应对异常条件筛选 - 2016年9月27日22:34:19
                if (PayREQ.LeaguerLevelId > 0)
                {
                    var test = MySql.From<D.LeaguerEvent>().Where(b => b.LeaguerLevelId == PayREQ.LeaguerLevelId).ToList();
                    if (test == null || test.Count == 0)
                    {
                        return resultNull;
                    }
                }

            }

            var leaguereventlist = MySql.From<D.LeaguerEvent>().Where(where).ToList();
            var temporaryEventList = MySql.From<D.TemporaryEvent>().Where(where3).ToList();

            //卡号不为空
            if (!string.IsNullOrEmpty(PayREQ.CardNum))
            {
                //验证卡号异常输入 - 2016年9月27日22:36:04
                var test = MySql.From<D.Card>().Where(a => a.CardNo == PayREQ.CardNum).ToList();
                if (test == null || test.Count == 0)
                {
                    return resultNull;
                }

                var card = DbCard.GetCardInfo(PayREQ.CardNum);
                if (card == null)
                    return resultNull;

                List<int> id = new List<int>();

                if (card.Type == (int)CardType.LeaguerCard)
                {
                    temporaryEventList.Clear();
                    var leag = MySql.From<D.LeaguerCard>().Where(a => a.CardId == card.Id).ToList();
                    if (leag == null || leag.Count == 0)
                        return resultNull;

                    var leaguerId = from fn in leag
                                    select fn.Id;
                    id = leaguerId.ToList();

                    var leaguerEventSelect = leaguereventlist.Where(p => id.Contains(p.LeaguerId)).ToList();
                    leaguereventlist.Clear();
                    leaguereventlist = leaguerEventSelect;
                }

                if (card.Type == (int)CardType.TemporaryCard)
                {
                    leaguereventlist.Clear();
                    var temp = MySql.From<D.TemporaryCard>().Where(a => a.CardId == card.Id).ToList();
                    if (temp == null || temp.Count == 0)
                        return resultNull;

                    var tempId = from fn in temp
                                 select fn.Id;
                    id = tempId.ToList();

                    var tempEventSelect = temporaryEventList.Where(p => id.Contains(p.TemporaryCardId)).ToList();
                    temporaryEventList.Clear();
                    temporaryEventList = tempEventSelect;
                }           

                //还有 consumelist
                var consumelistSelect = consumelist.Where(p => id.Contains(p.ChildCardId)).ToList();
                consumelist.Clear();
                consumelist = consumelistSelect;
            }

            if (!string.IsNullOrEmpty(PayREQ.LeaguerName))
            {
                temporaryEventList.Clear();

                var leag = MySql.From<D.LeaguerCard>().Where(a => a.UserName == PayREQ.LeaguerName).ToList();
                if (leag == null || leag.Count == 0)
                    return resultNull;

                var leaguerId = from fn in leag
                                select fn.Id;
                List<int> id = leaguerId.ToList();

                var leaguerEventSelect = leaguereventlist.Where(p => id.Contains(p.LeaguerId)).ToList();
                leaguereventlist.Clear();
                leaguereventlist = leaguerEventSelect;

                //还有 consumelist
                var consumelistSelect = consumelist.Where(p => id.Contains(p.ChildCardId)).ToList();
                consumelist.Clear();
                consumelist = consumelistSelect;
            }
            if (!string.IsNullOrEmpty(PayREQ.MenuName))
            {
                temporaryEventList.Clear();

                var menu = MySql.From<D.Menu>().Where(a => a.Name == PayREQ.MenuName).ToList();
                if (menu == null || menu.Count == 0)
                    return resultNull;

                var menuId = from fn in menu
                             select fn.Id;

                var leaguerEventSelect = leaguereventlist.Where(p => menuId.Contains(p.MenuId)).ToList();
                leaguereventlist.Clear();
                leaguereventlist = leaguerEventSelect;
            }

            if (PayREQ.LeaguerLevelId > 0)
            {
                temporaryEventList.Clear();

                var leaguerEventSelect = leaguereventlist.Where(a => a.LeaguerLevelId == PayREQ.LeaguerLevelId).ToList();
                leaguereventlist.Clear();
                leaguereventlist = leaguerEventSelect;

                //找出通过卡号、会员名称限制的开卡记录
                var consumelistSelect = consumelist.Where(p => p.LeaguerLevelId == PayREQ.LeaguerLevelId).ToList();
                consumelist.Clear();
                consumelist = consumelistSelect;
            }

            foreach (var item in leaguereventlist)
            {
                LeKeCardInfo resultLeaguer = new LeKeCardInfo();
                if ((OperateEvent)item.Event == OperateEvent.CancelCard)
                {
                    resultLeaguer = resultList.Find(a => a.LeaguerId == item.LeaguerId && a.opevent == OperateEvent.CancelCard);
                    if (resultList.Count > 0 && resultLeaguer !=null)
                    {
                        resultLeaguer.NowBalance = 0;
                        resultLeaguer.PreBalance += item.Point;
                        resultLeaguer.Balance += item.Point;
                        continue;
                    }
                    else
                        resultLeaguer = new LeKeCardInfo();
                    resultLeaguer.NowBalance = 0;
                }
                else
                    resultLeaguer.NowBalance = item.PreBalance + item.Point;

                resultLeaguer.opevent = (OperateEvent)item.Event;
                resultLeaguer.LeaguerId = item.LeaguerId;
                resultLeaguer.CardNo = DbLeaguer.GetCardNo(item.LeaguerId);
                resultLeaguer.OperateTime = item.Createdatetime;
                resultLeaguer.cardType = (int)CardType.LeaguerCard;
                resultLeaguer.cardTypeName = EnumHelper.GetDescription(CardType.LeaguerCard);
                var LeaguerInfo = DbLeaguer.GetLeaguerInfoById(item.LeaguerId);
                if (LeaguerInfo == null)
                    continue;
                resultLeaguer.UserName = LeaguerInfo.UserName;
                resultLeaguer.Tel = LeaguerInfo.Tel;
                resultLeaguer.LeaguerLevel = DbLeaguerLevel.GetLeaguerLevelName(item.LeaguerLevelId);
                resultLeaguer.Remark = EnumHelper.GetDescription((OperateEvent)item.Event);
                resultLeaguer.PreBalance = item.PreBalance;
                resultLeaguer.Balance = item.Point;

                resultLeaguer.OperatorName = DbUserInfo.GetOperatorName(item.Operator);
                resultLeaguer.TerminalName = DbCard.GetTerminalName(item.TerminalId);
                resultList.Add(resultLeaguer);


            }
            foreach (var item in consumelist)
            {
                LeKeCardInfo resultLeaguer = new LeKeCardInfo();
                resultLeaguer.OperateTime = item.Createdatetime;
                resultLeaguer.cardType = (CardType)item.Cardtype;
                resultLeaguer.cardTypeName = EnumHelper.GetDescription(resultLeaguer.cardType);
                string userName = "-";
                string tel = "-";
                string leaguerLevel = "-";
                if (resultLeaguer.cardType == CardType.LeaguerCard)
                {
                    var LeaguerInfo = DbLeaguer.GetLeaguerInfoById(item.ChildCardId);
                    if (LeaguerInfo == null)
                        continue;
                    userName = LeaguerInfo.UserName;
                    tel = LeaguerInfo.Tel;
                    if (PayREQ.LeaguerLevelId > 0)
                        leaguerLevel = DbLeaguerLevel.GetLeaguerLevelName(PayREQ.LeaguerLevelId);
                    else
                        leaguerLevel = DbLeaguerLevel.GetLevelNameByLeaguerId(item.ChildCardId);
                }
                resultLeaguer.CardNo = DbCard.GetCardNoByChildId(item.ChildCardId, resultLeaguer.cardType);
                resultLeaguer.UserName = userName;
                resultLeaguer.Tel = tel;
                resultLeaguer.LeaguerLevel = leaguerLevel;
                resultLeaguer.Remark = "消费";
                resultLeaguer.PreBalance = item.PreBalance;
                resultLeaguer.Balance = item.ConsumePoint;
                resultLeaguer.NowBalance = resultLeaguer.PreBalance - item.ConsumePoint;
                //resultLeaguer.OperatorName = DbUserInfo.GetOperatorName(item.Operator);   消费没有操作人
                resultLeaguer.TerminalName = DbTerminal.GetLTerminalItemByExperienceId(item.ExperienceId);
                //消费的姓名、手机号、会员级别
                if (item.Cardtype == (int)CardType.LeaguerCard)
                {
                    var leaguer = DbLeaguer.GetLeaguerInfoById(item.ChildCardId);
                    resultLeaguer.UserName = leaguer.UserName;
                    resultLeaguer.Tel = leaguer.Tel;
                    //resultLeaguer.LeaguerLevel = DbLeaguerLevel.GetLevelNameByLeaguerId(item.ChildCardId);
                    if (PayREQ.LeaguerLevelId > 0)
                        leaguerLevel = DbLeaguerLevel.GetLeaguerLevelName(PayREQ.LeaguerLevelId);
                    else
                        leaguerLevel = DbLeaguerLevel.GetLevelNameByLeaguerId(item.ChildCardId);
                }

                resultList.Add(resultLeaguer);
            }
            if (temporaryEventList != null && temporaryEventList.Count > 0)
            {
                foreach (var item in temporaryEventList)
                {
                    LeKeCardInfo resultTemp = new LeKeCardInfo();

                    resultTemp.PreBalance = item.PreBalance;
                    resultTemp.Balance = item.Point;

                    if ((OperateEvent)item.Event == OperateEvent.CancelCard)
                    {
                        resultTemp.NowBalance = 0;
                        resultTemp.PreBalance = item.Point;
                        resultTemp.Balance = item.Point;
                    }
                    else
                        resultTemp.NowBalance = item.PreBalance + item.Point;

                    resultTemp.UserName = "-";
                    resultTemp.Tel = "-";
                    resultTemp.LeaguerLevel = "-";
                    resultTemp.opevent = (OperateEvent)item.Event;
                    resultTemp.CardNo = DbTemporaryCard.GetCardNo(item.TemporaryCardId);
                    resultTemp.OperateTime = item.Createdatetime;
                    resultTemp.cardType = CardType.TemporaryCard;
                    resultTemp.cardTypeName = EnumHelper.GetDescription(CardType.TemporaryCard);

                    resultTemp.Remark = EnumHelper.GetDescription((OperateEvent)item.Event);

                    resultTemp.OperatorName = DbUserInfo.GetOperatorName(item.Operator);
                    resultTemp.TerminalName = DbCard.GetTerminalName(item.TerminalId);
                    resultList.Add(resultTemp);

                }
            }
            return resultList;
        }

       引以为戒吧……

***************************************************************************************************************************************************************************************

       昨天晚上抽了点时间,对这个玩意重构了一下:

       

Part 1:

 #region 定义变量以及where
            //存储最终的数据
            List<LeKeCardInfo> resultList = new List<LeKeCardInfo>();
            List<LeKeCardInfo> resultNull = new List<LeKeCardInfo>();
            List<D.Consume> consumeList = new List<Consume>();
  
            var where = new Where<D.LeaguerEvent>();
            var where1 = new Where<D.Consume>();
            var where2 = new Where<D.ExperienceRecord>();
            var where3 = new Where<D.TemporaryEvent>();

            where.And(a => a.Createdatetime >= PayREQ.StartTime && a.Createdatetime <= PayREQ.EndTime && a.Event != (int)OperateEvent.RemakeCard && a.Event != (int)OperateEvent.ChangeCard);
            where1.And(a => a.Createdatetime >= PayREQ.StartTime && a.Createdatetime <= PayREQ.EndTime && a.IsSuccess == 1);
            where2.And(a => a.EndTime >= PayREQ.StartTime && a.EndTime <= PayREQ.EndTime);
            where3.And(a => a.Createdatetime >= PayREQ.StartTime && a.Createdatetime <= PayREQ.EndTime && a.Event != (int)OperateEvent.RemakeCard && a.Event != (int)OperateEvent.ChangeCard);
            #endregion

Part2:

#region 根据条件拼接where条件()
            //终端ID不为空
            if (PayREQ.TerminalId > 0)
            {
                string terminalname = DbCard.GetTerminalName(PayREQ.TerminalId);
                where2.And(a => a.LeaguerID == terminalname);
                where.And(a => a.TerminalId == PayREQ.TerminalId);
                where3.And(a => a.TerminalId == PayREQ.TerminalId);
            }

            //卡号不为空
            if (!string.IsNullOrEmpty(PayREQ.CardNum))
            {
                var card = DbCard.GetCardInfo(PayREQ.CardNum);
                if (card == null)
                    return resultNull;
                List<int> id = new List<int>();

                if (card.Type == (int)CardType.LeaguerCard)
                {
                    int leagId = DbLeaguer.GetLeaguerId(card.Id);
                    where.And(a => a.LeaguerId == leagId);
                    where1.And(a => a.ChildCardId == leagId && a.Cardtype == (int)CardType.LeaguerCard);
                    where2.And(a => a.LeaguerID == PayREQ.CardNum);
                }

                if (card.Type == (int)CardType.TemporaryCard)
                {
                    int tempId = DbTemporaryCard.GetTempId(card.Id);
                    if (!string.IsNullOrEmpty(PayREQ.LeaguerName) || !string.IsNullOrEmpty(PayREQ.MenuName) || PayREQ.LeaguerLevelId > 0)
                        return resultNull;
                    where1.And(a => a.ChildCardId == tempId && a.Cardtype == (int)CardType.TemporaryCard);
                    where3.And(a => a.TemporaryCardId == tempId);
                }

                if (card.Type == (int)CardType.TestCard)
                    return resultNull;
            }

            //会员名不为空
            if (!string.IsNullOrEmpty(PayREQ.LeaguerName))
            {
                var leag = MySql.From<D.LeaguerCard>().Where(a => a.UserName == PayREQ.LeaguerName).ToList();
                if (leag == null || leag.Count == 0)
                    return resultNull;

                var leaguerId = from fn in leag
                                select fn.Id;
                List<int> id = leaguerId.ToList();

                where.And(p => id.Contains(p.LeaguerId));
                where1.And(a => id.Contains(a.ChildCardId) && a.Cardtype == (int)CardType.LeaguerCard);
            }

            //套餐名不为空
            if (!string.IsNullOrEmpty(PayREQ.MenuName))
            {
                var menu = MySql.From<D.Menu>().Where(a => a.Name == PayREQ.MenuName).ToList();
                if (menu == null || menu.Count == 0)
                    return resultNull;

                var menuId = from fn in menu
                             select fn.Id;

                where.And(p => menuId.Contains(p.MenuId));
            }

            //会员级别不为空
            if (PayREQ.LeaguerLevelId > 0)
            {
                where.And(a => a.LeaguerLevelId == PayREQ.LeaguerLevelId);
                where1.And(a => a.LeaguerLevelId == PayREQ.LeaguerLevelId);
            }
            #endregion
       这部分很难提取出一个新的方法(需要有4个不同的返回值),而且也没有必要,逻辑清晰了,组长说,封装的方法,一定是要常用的,你仅仅就这里用一次,封装没有必要了。

      

Part3:

#region 获取where查询结果
            var leagEventlist = MySql.From<D.LeaguerEvent>().Where(where).ToList();
            var consList = MySql.From<D.Consume>().Where(where1).ToList();
            var experienceList = MySql.From<D.ExperienceRecord>().Where(where2).ToList();
            var tempEventList = MySql.From<D.TemporaryEvent>().Where(where3).ToList();

            foreach (var e in experienceList)
            {
                var consume = consList.Find(a => a.ExperienceId == e.Id);
                if (consume != null)
                    consumeList.Add(consume);
            }
            #endregion

Part4:

#region 遍历组合返回结果
            resultList.AddRange(GetLeagEventList(leagEventlist));
            resultList.AddRange(GetTempEventList(tempEventList));
            resultList.AddRange(GetConsumeList(consumeList,PayREQ.LeaguerLevelId));
            return resultList;
            #endregion

Part5:

 public static List<LeKeCardInfo> GetLeagEventList(List<LeaguerEvent> leagEventlist)
        {
            List<LeKeCardInfo> resultList = new List<LeKeCardInfo>();

            foreach (var item in leagEventlist)
            {
                LeKeCardInfo resultLeaguer = new LeKeCardInfo();
                if ((OperateEvent)item.Event == OperateEvent.CancelCard)
                {
                    resultLeaguer = resultList.Find(a => a.LeaguerId == item.LeaguerId && a.opevent == OperateEvent.CancelCard);
                    if (resultList.Count > 0 && resultLeaguer != null)
                    {
                        resultLeaguer.NowBalance = 0;
                        resultLeaguer.PreBalance += item.Point;
                        resultLeaguer.Balance += item.Point;
                        continue;
                    }
                    else
                        resultLeaguer = new LeKeCardInfo();
                    resultLeaguer.NowBalance = 0;
                }
                else
                    resultLeaguer.NowBalance = item.PreBalance + item.Point;

                resultLeaguer.opevent = (OperateEvent)item.Event;
                resultLeaguer.LeaguerId = item.LeaguerId;
                resultLeaguer.CardNo = DbLeaguer.GetCardNo(item.LeaguerId);
                resultLeaguer.OperateTime = item.Createdatetime;
                resultLeaguer.cardType = (int)CardType.LeaguerCard;
                resultLeaguer.cardTypeName = EnumHelper.GetDescription(CardType.LeaguerCard);
                var LeaguerInfo = DbLeaguer.GetLeaguerInfoById(item.LeaguerId);
                if (LeaguerInfo == null)
                    continue;
                resultLeaguer.UserName = LeaguerInfo.UserName;
                resultLeaguer.Tel = LeaguerInfo.Tel;
                resultLeaguer.LeaguerLevel = DbLeaguerLevel.GetLeaguerLevelName(item.LeaguerLevelId);
                resultLeaguer.Remark = EnumHelper.GetDescription((OperateEvent)item.Event);
                resultLeaguer.PreBalance = item.PreBalance;
                resultLeaguer.Balance = item.Point;

                resultLeaguer.OperatorName = DbUserInfo.GetOperatorName(item.Operator);
                resultLeaguer.TerminalName = DbCard.GetTerminalName(item.TerminalId);
                resultList.Add(resultLeaguer);
            }

            return resultList;
        }
        这里还有3个类似的方法被封装,就不展示了.

        That's all.


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 40
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值