两个方法做的同样的工作,那种写法更好一些?有没有更好的写法呢?
private String sixOperaBaseChk(String code,String status,String[]modelId,String account)throws Exception{
// 0 失败 1 成功 2 基本型利润率不达标 3基本型利润率未维护 4 plm编码未返回 6 ddp利润率未维护
TargetSetDAO_S daos = new TargetSetDAO_S();
TargetSetDAO dao = new TargetSetDAO();
String msg = "3";
FeeRatioVO vo = daos.baseInTarget(code, true);
if(vo!=null&&!"".equals(vo.getFeeValue())){
BigDecimal bt = new BigDecimal(vo.getFeeValue());
List<ProjItemDetialVO> ls = dao.checkModelVerson(modelId, status);
if (ls.size() == 0){
boolean tp = true;
if ("3".equals(status)||"2".equals(status)){
ls = dao.chkPlmIsNull(modelId);
tp = ls.size() > 0 ? false : true;
}
if (tp){
boolean ratioChk = true;
for(int i=0;i<modelId.length;i++){
String basePlan = daos.sixOperaInPlan(modelId[i]);
BigDecimal bp = new BigDecimal(basePlan);
if(bp.compareTo(bt)==-1){
ratioChk = false;
msg = "2";
}
}
if(ratioChk){
int flag = dao.toFina(status,modelId,account);
msg = flag + "";
}
}
else{
msg = "4";
}
}else{
msg = "";
for (ProjItemDetialVO pidv : ls){
msg += "[" + pidv.getModelName() + "]";
}
}
}
return msg;
}
----------------------------
private String sixOperaBaseChk(String code,String status,String[]modelId,String account)throws Exception{
// 0 失败 1 成功 2 基本型利润率不达标 3基本型利润率未维护 4 plm编码未返回 6 ddp利润率未维护
//检查基本型目标利润率是否维护
DefFeeRatioDAO defRatioDao = new DefFeeRatioDAO();
List<BrandVO> brands = defRatioDao.getProjectBrands(code);
Map<String,FeeRatioVO> baseRatioTarget = defRatioDao.getBaseRatioTarget(code, brands, true);
for(BrandVO vo:brands){
FeeRatioVO feeRatio = baseRatioTarget.get(vo.getToBrand());
if(feeRatio == null || "".equals(feeRatio.getFeeValue())){
return "3";
}
}
//检查型号是否都保存过
TargetSetDAO dao = new TargetSetDAO();
List<ProjItemDetialVO> ls = dao.checkModelVerson(modelId, status);
if(ls.size()>0){
String msg = "";
for (ProjItemDetialVO pidv : ls){
msg += "[" + pidv.getModelName() + "]";
}
return msg;
}
//检查PLM编码是否回传
if ("3".equals(status)||"2".equals(status)){
ls = dao.chkPlmIsNull(modelId);
if(ls.size()>0){
return "4";
}
}
//基本型利润率闸口
for(int i=0;i<modelId.length;i++){
ProjItemDetialVO vo = defRatioDao.getModelBaseRatioPlan(modelId[i]);
BigDecimal ratioTarget = new BigDecimal(baseRatioTarget.get(modelId[i]).getFeeValue());
BigDecimal modelRatioPlan = new BigDecimal("0");
if(vo!=null){
ProgramService ps = new ProgramService();
modelRatioPlan = new BigDecimal(ps.div(vo.getProfit(), vo.getIncome(), 4));
}
if(modelRatioPlan.compareTo(ratioTarget)==-1){
return "2";
}
}
return String.valueOf(dao.toFina(status,modelId,account));
}
用设计模式进行优化 此代码不好维护 职责链模式可供参考
MyEclipse中
alt+shift+j
第二种好点。。第一种我第一次读的话。。我先要确定最外层的if判断是什么意思再看对应的else然后还要分别看if和else里面的代码是什么意思。。来回反复。。。。比较麻烦。。。第二种我可以从上往下顺利的看下去。
在团队开发过程中,代码规范非常重要,我们项目组一般是这样子做的:制定一个统一的template,要求每个开发人员导入和使用这个template。
这样最大的好处:svn提交的时候你格式化的代码和别人格式化后的代码风格一致,不会因为代码风格问题比较出差异;在svn上可以很方便的合并代码。
return 最好用枚举来表示.
一个小小的建议.