第二个任务
第二个任务
熊奉标 17:03:34
内容:局内模板校验,判断设备的所属机房是否为空,如果不为空,取机房作为入参;如果机房为空,再判断是否OBD,非OBD取设备id入参,如果是OBD,取obd的所属上级设备id入参。
熊奉标 17:03:39
你再看看这个问题
熊奉标 17:06:24
问题是出在checkValidResource这个方法里面
熊奉标 17:07:04
就是校验导入的模板里面的数据,是不是有可用方案
熊奉标 17:07:34
checkValidResource这个方法的作用就是根据入参校验是否有可用方案
熊奉标 17:07:47
但是校验的时候存在一个问题
熊奉标 17:08:44
判断设备的所属机房是否为空,如果不为空,取机房作为入参;如果机房为空,再判断是否OBD,非OBD取设备id入参,如果是OBD,取obd的所属上级设备id入参。上面需求定义的逻辑,代码少了:非OBD取设备id入参,这个逻辑
看了一下问题,感觉应该问题不大,所以找到了对应的方法:
private void checkValidResource(Map<String, String> mapmo,String metaClassName,StringBuffer errorMsg) throws Exception{ if(!metaClassName.equals("ACCESSNETFIBER(SZ)_INSTALL") &&!metaClassName.equals("ACCESSNETFIBER(GZ)_INSTALL_PORTZI") &&!metaClassName.equals("ACCESSNETFIBER(GZ)_INSTALL_ROOM") &&!metaClassName.equals("TRANSMISSIONFIBER(SZ)_INSTALL") &&!metaClassName.equals("TRANSMISSIONFIBER(GZ)_INSTALL")){ return; } String aId = mapmo.get("AROOMID")==null?"":mapmo.get("AROOMID"); String bId = mapmo.get("BROOMID")==null?"":mapmo.get("BROOMID"); String aDeviceId = mapmo.get("ADEVICENAMEID")==null?"":mapmo.get("ADEVICENAMEID"); String bDeviceId = mapmo.get("BDEVICENAMEID")==null?"":mapmo.get("BDEVICENAMEID"); String aDeviceSpecId = mapmo.get("ADEVICENAMESPECID")==null?"":mapmo.get("ADEVICENAMESPECID"); String bDeviceSpecId = mapmo.get("BDEVICENAMESPECID")==null?"":mapmo.get("BDEVICENAMESPECID"); if(aId.equals("")&&!aDeviceId.equals("")&&InventoryUtil.isSubClassOf(aDeviceSpecId, "OBD")){ MetaObject obd = resourceConfigService.getBelongNEByOBD(aDeviceId, null); if(obd!=null){ aId = obd.getValue("ID").toString(); } } if(aId.equals("")&&!aDeviceId.equals("")&&!InventoryUtil.isSubClassOf(aDeviceSpecId, "OBD")){ aId = aDeviceId; } if(bId.equals("")&&!bDeviceId.equals("")&&InventoryUtil.isSubClassOf(bDeviceSpecId, "OBD")){ MetaObject obd = resourceConfigService.getBelongNEByOBD(bDeviceId, null); if(obd!=null){ bId = obd.getValue("ID").toString(); } } if(bId.equals("")&&!bDeviceId.equals("")&&!InventoryUtil.isSubClassOf(bDeviceSpecId, "OBD")){ bId = bDeviceId; } if(aId.equals("")||bId.equals("")){ errorMsg.append("无可用方案!\r\n"); return; } String shardingId = SecurityUtils.getCurrentShardingId(); //单纤1,双纤2 String fiberNum = InventoryUtil.isEmptyString(mapmo.get("FIBERCOUNT"))?"":mapmo.get("FIBERCOUNT"); int fiberNum_int = fiberNum.equals("双纤")?2:1; //双模1,单模3 String fiberType = InventoryUtil.isEmptyString(mapmo.get("FIBERTYPE"))?"":mapmo.get("FIBERTYPE"); int fiberType_int = fiberType.equals("双模")?1:3; try{ Object[] results = metaService.executeSP("PKG_OPTROAD_SEARCH.CHOOSE_SITEFIBER", new Object[]{aId,bId,7,null,null,fiberNum_int,1, fiberType_int}, new int[]{OracleTypes.NUMBER,OracleTypes.VARCHAR}, InventoryUtil.getDbRouteContext(shardingId)); if(results == null || results.length<2 || results[1] == null || results[1].toString().length()==0){ errorMsg.append("无可用方案!\r\n"); } }catch(Exception e){ errorMsg.append("无可用方案!\r\n"); } }
经过分析,发现下面代码是对 如果是OBD,取obd的所属上级设备id入参 这个逻辑进行验证:
所以就在此逻辑的基础上再加上
对 非OBD取设备id入参 这个逻辑进行判断。
然后今天标哥给了个测试文件,验证有没有走过这个逻辑判断。
经过debug,发现了一些问题:
在从数据库查询出moList这个列表时,发现moList里面全都为空,然后直接return,没有在mapmo对象中添加入aROOMID这个key值,导致aROOMID为空。
查看了queryMetaObjectByColumn这个方法,也是发现resultList为空,此时怀疑会不会是数据库数据的问题,
然后捣鼓了一下oracle,发现连接不上,所以叫来了标哥。
看了一下系统,发现之前登录的是sa用户,是广州市的测试账户,然后测试文件是深圳的机房,在数据库中查询不到对应的机房,所以返回了null。
于是更换成testsz帐号,重启系统,debug一遍,代码完美走过我添加的那个逻辑,好的任务完成。
接下来的任务就是把自己的代码提交到SVN代码库。
首先找到
选中自己修改过的java文件,右键提交,并且添加上所解决问题的PMS作为备注。
提交成功后,就要给系统打补丁,打补丁之前就要先导出jar包,右键java文件->导出->jar文件
由于本次是两个PMS一起提交,所以需要把jar包合并:
jar包命名规则如上:项目名-日期-姓名-pms
jar包的内部结构必须要符合路径,具体路径如上,也可以在tomcat的配置路径那里找:
打开以上目录,进入项目的地址:
jar包的路径必须与以上的路径对应,这样打了补丁才会替换掉原来的文件。
然后就是登录自己的pms帐号,为pms打补丁:
填写必要的信息,提交:
还有一个加快系统运行的技巧:
就是每天第一次运行系统的时候用master运行,之后的每一次都可以用slave,速度会加快。