你的位置:首页 > Java教程

[Java教程]J2EE项目开发中好用的公共方法

  在项目IDCM中涉及到多种工单,包括有:服务器|网络设备上下架工单、服务器|网络设备重启工单、服务器光纤网线更换工单、网络设备撤线布线工单、服务器|网络设备替换工单、服务器|网络设备RMA工单、通用原子工单、硬盘消磁折弯工单、物流工单、资产初入门工单、机柜上下电工单、待盘点|待盘盈工单等等。工单管理系统中要涉及到工单的创建|API创建和维护。所以有必要将一些通用的方法提出来,类似于模块化的架构涉及。

1.业务逻辑描述:在工单系统的详情页中,需要展示对工单的操作记录,所以做了通用的模块设计,这样当要对工单详情中的日志部分作出修改的时候,能在最短的时间,最小的改动的情况下,完美的解决问题。日志表中新增附件字段,关联app_attachment表中的主键,当操作人与登录人相一致时,可以通过附件上传文件。

  解决方案:抽象出了详情页面中的orderOptList.vm模块,在工单详情页中通过$control.setTemplate("web:orderOptList.vm")引入到工单详情页中,同时在后端需要提供公共的context.put("operations", operations)和context.put("appUserInfo", pvgInfo)来配合前端数据的展现。

2.业务逻辑描述:需要在工单的详情页中添加是否超时字段,用于在结单时判断工单是否超时,如果逐个在工单中添加,侵入式太重,不利于后期维护,因此利用了java的反射机制,动态的更新是否超时字段。

  解决方案:方法中的参数设置为超级父类Object,传入的类,通过.getClass().getDeclaredMethod("方法名",方法入参逗号分隔)获取到Method类,然后再满足业务逻辑的情况下,通过method.invoke(Object obj, Object.. args)方法,调用方法刷新数据。

 

public void updateIsTimeOut(Object pojo, Date startTm, Double sla, String slaUnit) {    try {      Method method = pojo.getClass().getDeclaredMethod("setIsTimeOut", String.class);      if (null != startTm && null != pojo) {        if (null != sla && StringUtil.isNotBlank(slaUnit)) {          boolean isTimeOut = (new Date().getTime() - startTm.getTime() > (long) (sla.doubleValue() * SLAUtil.getSlaUnit(slaUnit).getUnit()) ? true : false);          if (null != method) {            if (isTimeOut) {              method.invoke(pojo, WorkOrderCst.YES);            } else {              method.invoke(pojo, WorkOrderCst.NO);            }          }        } else {          method.invoke(pojo, WorkOrderCst.UNKNOWN);        }      } else {        method.invoke(pojo, WorkOrderCst.UNKNOWN);      }    } catch (Exception e) {      logger.error("update isTimeOut erros.");    }  }

 

对类的方法实现动态赋值,使用方法method.invoke(obj,args...)方法,方法中的obj就是一个实例化对象,args是方法的参数。

 

public Object invoke(Object obj, Object... args)  obj:从中调用底层方法的对象,必须是实例化对象  args:用于方法调用,是一个object的数组,因为参数有可能有多个

3.业务逻辑描述:

  解决方案:

 

package basic;import java.security.MessageDigest;public class TestMD5 {  public static void main(String[] args) {    try {      String name = "Zhao, Xu-Guang";      String charset = "GBK";      String str = "2k3u.o#02pt" + name;      MessageDigest messageDigest;      messageDigest = MessageDigest.getInstance("MD5");      messageDigest.reset();      messageDigest.update(str.getBytes(charset));      byte[] byteArray = messageDigest.digest();      StringBuffer md5StrBuff = new StringBuffer();      for (int i = 0; i < byteArray.length; i++) {        if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {          md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));        } else {          md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));        }      }      System.out.println(md5StrBuff.toString().toLowerCase());    } catch (Exception e) {      e.printStackTrace();    }  }}