第二个任务

第二个任务

熊奉标 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,速度会加快。第二个任务