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

2023-11-04 22:20
文章标签 code basic 味道 引以为戒

本文主要是介绍【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:19if (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:04var 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 leagselect 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 tempselect fn.Id;id = tempId.ToList();var tempEventSelect = temporaryEventList.Where(p => id.Contains(p.TemporaryCardId)).ToList();temporaryEventList.Clear();temporaryEventList = tempEventSelect;}           //还有 consumelistvar 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 leagselect fn.Id;List<int> id = leaguerId.ToList();var leaguerEventSelect = leaguereventlist.Where(p => id.Contains(p.LeaguerId)).ToList();leaguereventlist.Clear();leaguereventlist = leaguerEventSelect;//还有 consumelistvar 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 menuselect 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;}elseresultLeaguer = new LeKeCardInfo();resultLeaguer.NowBalance = 0;}elseresultLeaguer.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);elseleaguerLevel = 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);elseleaguerLevel = 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;}elseresultTemp.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 leagselect 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 menuselect 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;}elseresultLeaguer = new LeKeCardInfo();resultLeaguer.NowBalance = 0;}elseresultLeaguer.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.


这篇关于【Basic Code】一个被我写烂的坏味道,引以为戒的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/345560

相关文章

CesiumJS【Basic】- #008 通过canvas绘制billboard

文章目录 通过canvas绘制billboard1 目标2 实现 通过canvas绘制billboard 1 目标 通过canvas绘制billboard 2 实现 /** @Author: alan.lau* @Date: 2024-06-16 11:15:48* @LastEditTime: 2024-06-16 11:43:02* @LastEditors: al

VS Code SSH 远程连接服务器及坑点解决

背景 Linux服务器重装了一下,IP没有变化,结果VS Code再重连的时候就各种问题,导致把整个流程全部走了一遍,留个经验帖以备查看 SSH 首先确保Windows安装了ssh,通过cmd下ssh命令查看是否安装了。 没安装,跳转安装Windows下的ssh 对应的,也需要Linux安装ssh,本文是Ubuntu系统,使用以下命令安装: sudo apt updatesudo

Google Code Jam 2014(附官方题解)

2014年Google编程挑战赛 Problem A. Magic Trick Confused? Read the quick-start guide. Small input 6 points You have solved this input set. Note: To advance to the next rounds, you will need to s

在Mac OS上使用Visual Studio Code创建C++ Qt的Hello World应用

引言 Qt是一个跨平台的应用程序和用户界面框架,而Visual Studio Code是一个功能强大的编辑器,两者结合可以极大地提升开发效率。本文将指导你在Mac OS上使用Visual Studio Code创建一个简单的Qt 'Hello World'窗口应用。 环境准备 确保你的MacBook OS运行最新的操作系统。安装Homebrew,Mac OS的包管理器。通过Homebrew安装

【C/C++】Code Style

消除重复 PS:机能一次,使用多次 // .hvirtual bool hasFormat(const QString &mimetype) const;//.cppbool QMimeData::hasFormat(const QString &mimeType) const{return formats().contains(mimeType);}bool QMimeData::h

Query failed with error code 96 and error message 'Executor error during find command: OperationFail

Query failed with error code 96 and error message 'Executor error during find command: OperationFailed: Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smal

gbase8s之Encoding or code set not supported

如图发生以下错误: 解决办法:在url里加上ifx_use_strenc=true 就可以了 参数解释:

[Codeforces - Gym100801H (NEERC)] Hash Code Hacker (字符串构造)

Codeforces - Gym100801H (NEERC) 给定一个字符串hash,为 ∑i=0len−1str[i]×31len−1−i \displaystyle\sum_{i=0}^{len-1} str[i]\times 31^{len-1-i} 求 K K个长度不超过 1000的字符串,使得他们的 hash值相等 其中每个 hash值是 32位有符号整数,K≤1000K\l

File I/O source code--新建文件 相关方法阅读

虽然我们经常在用java的I/O,但是我们有没有想过,我们是怎样来创建文件的呢 首先我们来新建一个文件: try {File file = new File("c:\\newfile.txt");if (file.createNewFile()){System.out.println("File is created!");}else{System.out.println("File al

ArrayList source code相关方法阅读

1、新增一个对象 /*** Appends the specified element to the end of this list.** @param e element to be appended to this list* @return <tt>true</tt> (as specified by {@link Collection#add})*/public boolean a