标签:
在项目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(); } } }
标签:
原文地址:http://www.cnblogs.com/RunForLove/p/5630795.html