/**
* 说明 : 获取最近登陆账户信息
* @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!”,旨在帮助读者识别和改正可能引入的错误或低效的...
文章的主要内容可以分为两部分:第一部分是作者对审稿人的吐槽和讽刺,包括审稿人的各种类型,如反面教材型、意外型、总结型等。第二部分是作者对机器学习领域的思考和建议,包括如何改进大型会议的审稿模式和基于...
6. **正面示范与反面教材**:员工的错误行为可以作为其他员工的反面教材,提醒大家引以为戒,同时,良好的改正行为也可以成为正面示范,促进整个团队的纪律性和责任感。 7. **领导的教导与帮助**:员工期望通过领导...
老塔科马大桥的失败是软件工程设计概念与原则的反面教材。老塔科马大桥的设计人员没有遵循软件工程的设计概念与原则,导致桥梁的设计结构崭新而没有经过验证,最后导致桥梁被风“吹”断。这个案例告诉我们,软件工程...
反面教材是一般它是结合现物和柏拉图的表示,就是让现场的作业人员明白,也知道他的不良的现象及后果。提醒板是用于防止遗漏,健忘是人的本性,不可能杜绝,只有通过一些自主管理的方法来最大限度地尽量减少遗漏或...
《C++编写的学生成绩管理系统:从反面教材中汲取经验》 在软件开发领域,我们经常通过分析和学习失败案例来提升自己的编程技能。本文将以“C++编写的学生成绩管理系统”为例,探讨其中可能存在的问题,并从中提炼出...
文档标签为"范文",这通常意味着这些作文虽然被评为零分,但也可以作为反面教材,供学生参考和学习,避免犯同样的错误。 【知识点详解】 1. **高考作文评分标准**:高考作文评分通常基于内容、结构、语言和创新四...
华中地区某大型宾馆的案例给我们提供了一个直观的反面教材。该宾馆的商场在硬件设施上做到了精良,但忽略了商品的多样性和针对性,尤其是未能满足来自南美游客的特殊需求。这不仅仅是商品种类的问题,更是酒店服务...
进一步地,教材深入探讨了导致人为失误的九种典型人物类型,它们是安全培训中的反面教材。这些类型从不同的角度反映了人们在安全操作中可能存在的心理和行为偏差。例如,“大胆人”明知故犯,存在侥幸心理;“危险人...
新王后的嫉妒心理是典型的反面教材,它让孩子们认识到人性中的丑恶面。而白雪公主的无辜和猎人的怜悯,则是善良与正义的体现。七个小矮人的形象,则通过他们的行动传递了友好与互助的美德。这些鲜明的对比,为孩子们...
综上所述,人教新课标版的《七年级政治下册:人生自强少年始》教学设计,在帮助学生理解自强的深刻含义和重要作用的同时,注重实际案例的引入和反面教材的分析,这不仅能够丰富学生的精神世界,而且能够有效激发他们...
- **反面教材**:继母王后的行为则成为了一个反面教材,展示了嫉妒和恶意所带来的后果。 #### 2.2 善待他人 - **人际关系**:故事启示我们,如果以真诚友好的态度对待他人,就能获得别人的尊重和喜爱,进而建立良好...
作者提到自己曾经对父母发脾气,缺乏礼貌,且在学习上不够刻苦,这些都是《弟子规》所强调的孝、礼、勤的反面教材。 接着,作者引用了《弟子规》中的故事,如孟宗泣竹、董永与仙女、董遇巧用“三余”时间学习、车胤...
同时,通过观看反面教材,警示自己坚守职业道德,维护国家和人民的利益。 2. **业务能力的提升**:参加各类税务政策培训,如新版车辆购置税软件、增值税知识更新等,以提高业务理解和应用能力。通过不断学习和实践...
9. 反面教材:文章通过列举某些不履行公民责任的例子,提醒读者要有爱国心和责任感。 10. 青年一代的启示:年轻一代应以正面人物为榜样,学习他们的责任担当精神,为国家的未来贡献力量。 11. 国家与个人命运的...
5. 案例分析:通过分析扬尘防治的成功案例和反面教材,强化从业人员对扬尘污染防治的紧迫性和责任感。 6. 应急处理措施:讲解在出现扬尘污染事件时的应急处理流程、方法和责任分配,确保能够在扬尘发生时迅速有效地...