/**
* 说明 : 获取最近登陆账户信息
* @param : 1. List ls,
*
* @return : Accountinfo
*/
@TransactionAttribute(TransactionAttributeType.MANDATORY)
public Accountinfo getRecentAccount(List<String> ls)
{
...
Accountinfo accountinfo = (Accountinfo)query.getSingleResult();
return accountinfo;
}
评点: 不够简洁且高并发情况下,还可能会发生“张冠李戴”的情况。
可优化为:
return (Accountinfo)query.getSingleResult();
public List<AccountDTO> queryAccounts(String accountNo,
String chanelCode, String registTimeStart,String registTimeEnd, String status, List<String> lsAccountInfoId,
String merchantName,String radiocode,int startRow,int endRow){
......
}
评点: 参数过多,可用AccountDTO来代替。可能需要在该DTO增加几个属性来对应页面表单参数,如起始时间,结束时间及多选checkbox状态等。如下图:
/**
* 说明 : 账户账号密码登陆验证
* @param : 1. Long accountInfoId,
* 2. int status
* @return : long
*/
@TransactionAttribute(TransactionAttributeType.MANDATORY)
public long loginValidate(String accountNo, String loginPwd,String chanel)
{
long returnValue=1; //失败
//查询该帐户编号是否存在
String sql = "select count(*) from useraccnum u,accountinfo t where t.ACCOUNTSTATE!=4 and u.accountinfoid = t.accountinfoid and u.useraccount=? and u.channelinfoid=?";
Query query = em.createNativeQuery(sql);
query.setParameter(1, accountNo);
query.setParameter(2, chanel);
BigDecimal b = (BigDecimal)query.getSingleResult();
//----如果验证成功则取得账户编号
if(null!=b&&1==b.intValue())
{
//取得账户ID
sql = "select u.accountinfoid from useraccnum u where u.useraccount=? and u.channelinfoid=?";
query = em.createNativeQuery(sql);
query.setParameter(1, accountNo);
query.setParameter(2, chanel);
b = (BigDecimal)query.getSingleResult();
returnValue = b.longValue(); //账户流水
//验证密码
sql = "select loginpwd from useraccnum u,accountinfo t where t.ACCOUNTSTATE!=4 and u.accountinfoid = t.accountinfoid and u.useraccount=? and u.channelinfoid=?";
Query querymm = em.createNativeQuery(sql);
querymm.setParameter(1, accountNo);
querymm.setParameter(2, chanel);
String dPwd = (String)querymm.getSingleResult();
//验证不通过
//if(!PasswordUtil.validate(dPwd, loginPwd))
if(!dPwd.equals(loginPwd))
{
return -returnValue;
}
//-----更新登陆时间
sql = "update useraccnum t set t.recentlandtime=sysdate where t.useraccount=? and t.channelinfoid=?" ;
query = em.createNativeQuery(sql);
query.setParameter(1, accountNo);
query.setParameter(2, chanel);
query.executeUpdate();
}
return returnValue;
}
评点:该方法用于账户登录时的校验。功能过于复杂、凌乱。先是查询记录数,若为1,则再查询主键ID,接着查询其密码(以上三步可查询一次便可解决),校验密码是否匹配,更新登录时间。且返回值也让人眼花缭乱,账户不存在返回1,账户存在密码错误则为主键ID的负值,若校验通过则为主键ID。
优化:功能单一化,仅校验登录信息。登录日志(登陆成功、登录失败)另外处理。返回值为boolean,即告知校验通过还是未通过。
/**
* 1. 根据账户ID进行账户锁定
*
* @param 1.
* 账户ID Long accountInfoId 2. 锁定方式 int lockType 0:自动锁定;1:手工锁定;
* @return OutObj4Account
* @exception
*/
public OutObj4Account lockAccount(Long accountInfoId, int lockType) {
OutObj4Account outObj4Account = new OutObj4Account();
try {
ut.begin();
if (null != accountInfoId) {
if (0 == lockType) {
accountDAO.updateStatusById(accountInfoId, 0);
}
if (1 == lockType) {
accountDAO.updateStatusById(accountInfoId, 1);
}
outObj4Account.setIsSuccess("0");
outObj4Account.setMsg("操作成功");
......
}
评点: 多此一举。
优化:
accountDAO.updateStatusById(accountInfoId, lockType)
/**
* 1. 根据账户ID进行账户解锁
*
* @param 1.
* 账户ID Long accountInfoId 2. 解锁方式 int unLockType 0:自动解锁;1:手工解锁;
* @return OutObj4Account
* @exception
*/
public OutObj4Account unlockAccount(Long accountInfoId, int unLockType
) {
OutObj4Account outObj4Account = new OutObj4Account();
// -------------------------------------------------------
try {
ut.begin();
if (null != accountInfoId) {
accountDAO.updateStatusById(accountInfoId, 3);
outObj4Account.setIsSuccess("0");
outObj4Account.setMsg("账户解锁操作成功");
} else {
......
}
......
}
评点: unLockType参数多余。且校验accountInfoId亦属画蛇添足。很明显在该操作前你已明确知道该主键ID。
- 大小: 7.1 KB
分享到:
相关推荐
这篇文档的标题是"警示教育片观后感:反面教材的魅力精选.doc",描述是对一部警示教育片的个人观后感,标签为"资料"。主要内容是作者通过观看中煤集团反腐倡廉警示教育片《堕落与忏悔》后的思考,强调了反面教材在...
然而,正如标题“angular js 可做反面教材”所提示的,尽管AngularJS有着显著的优点,但也存在一些问题和挑战,这些不足之处可以成为我们在学习和使用过程中汲取教训的例子。 首先,AngularJS的学习曲线较为陡峭。...
2020初中地理 人民币背面教学参考资料.doc
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...
四、案例分析:正反面教材的启示 《高效Java编程》一书不仅提供正面的编程示例,还包含了一些应避免的“反模式”。这些“反模式”被明确标注为“Never do this!”,旨在帮助读者识别和改正可能引入的错误或低效的...
文章的主要内容可以分为两部分:第一部分是作者对审稿人的吐槽和讽刺,包括审稿人的各种类型,如反面教材型、意外型、总结型等。第二部分是作者对机器学习领域的思考和建议,包括如何改进大型会议的审稿模式和基于...
然而,也有一些反面教材值得借鉴。彭嘉的例子提醒我们,求职者不能过于放松,缺乏紧迫感可能导致失去良机。他过于专注于眼前的事,忽视了求职的紧迫性,结果在激烈的竞争中落败。这反映出在当前就业市场,保持适当的...
5. 反面教材的作用:《贰臣传》将变节者作为反面教材,旨在教育后世臣子应坚守气节,对当朝官员起到警示作用,促进忠君思想的传播。 6. 褒贬并举:乾隆皇帝同时编纂《胜朝殉节诸臣录》,表彰明朝忠臣,以对比强调对...
6. **正面示范与反面教材**:员工的错误行为可以作为其他员工的反面教材,提醒大家引以为戒,同时,良好的改正行为也可以成为正面示范,促进整个团队的纪律性和责任感。 7. **领导的教导与帮助**:员工期望通过领导...
老塔科马大桥的失败是软件工程设计概念与原则的反面教材。老塔科马大桥的设计人员没有遵循软件工程的设计概念与原则,导致桥梁的设计结构崭新而没有经过验证,最后导致桥梁被风“吹”断。这个案例告诉我们,软件工程...
反面教材是一般它是结合现物和柏拉图的表示,就是让现场的作业人员明白,也知道他的不良的现象及后果。提醒板是用于防止遗漏,健忘是人的本性,不可能杜绝,只有通过一些自主管理的方法来最大限度地尽量减少遗漏或...
《C++编写的学生成绩管理系统:从反面教材中汲取经验》 在软件开发领域,我们经常通过分析和学习失败案例来提升自己的编程技能。本文将以“C++编写的学生成绩管理系统”为例,探讨其中可能存在的问题,并从中提炼出...
文档标签为"范文",这通常意味着这些作文虽然被评为零分,但也可以作为反面教材,供学生参考和学习,避免犯同样的错误。 【知识点详解】 1. **高考作文评分标准**:高考作文评分通常基于内容、结构、语言和创新四...
恐龙的灭绝被用作反面教材,说明大型生物在管理和生存上的挑战。综上所述,168厘米被认为是人类的理想身高,因为这样的身高可以保持生理功能的高效运作,减少不必要的能量消耗,有助于健康和长寿。
小品《今日说法—面对诱惑》生动呈现了知法犯法的反面教材,强调了学法、知法、守法的重要性。最后,全班进行宣誓,承诺做遵纪守法的小公民,并在辅导员的领呼下进行呼号,活动在退队旗的仪式中落下帷幕。 此次活动...
- **反面教材**:继母王后的行为则成为了一个反面教材,展示了嫉妒和恶意所带来的后果。 #### 2.2 善待他人 - **人际关系**:故事启示我们,如果以真诚友好的态度对待他人,就能获得别人的尊重和喜爱,进而建立良好...
例如,北京前门大街的改造就是一个反面教材,改造后未能达到预期效果,反而失去了原有的魅力。 4. 对待传统街区的正确态度应该是谨慎和持续的维护与更新,而不是追求速效的改造。应避免盲目复古,而应保护街区的...
同时,文章提到了马加爵事件,作为反面教材,说明缺乏感恩之心可能导致的悲剧后果。此外,陈健、荆轲和袁隆平的事迹进一步强化了感恩的价值。 文章结尾部分,作者呼吁人们怀抱感恩之心,将爱传递,认为感恩可以带来...
4. 使用反面教材:避免仅传授成功案例,引入错误或不完善的实例,让学生从中找出问题,这有助于培养学生的批判性思维和独立解决问题的能力。通过挑错和讨论,学生能更深入理解理论知识,增强知识的实际应用意识。 5...
【知识点】 1. 故事背景:故事源自古代楚国,具体是春秋...10. 教育启示:对于教育领域,这个故事可以作为反面教材,教育孩子们不要盲目追随时尚,要重视内在品质和能力的培养,同时强调领导者的责任和决策的重要性。