Ticket #57 (closed QA: fixed)

Opened 14 years ago

Last modified 14 years ago

由数据接口地区参数引发的问题

Reported by: chenyinle Owned by:
Priority: major Milestone:
Component: 网友前台 Version:
Keywords: 常见故障,问题发现,问题反映 Cc:
Due Date: 16/12/2011

Description (last modified by chenyinle) (diff)

事情是这样的:

用户报障过来,说河北的用户,手机频道页mobile.pconline.com.cn里面引用的商城商情数据接口数据不对,具体表现是:应该是河北的商情却显示了全国的。

最终找到了这个数据接口是,small_company_news_array_js.jsp?typeId=20937&areaTag=hb,在接口里面对地区做了很多处理,具体发现了几个有意思的:

1、通过方法getAreaByTag(areaTag)匹配,返回'河北'

具体代码是酱紫:
public String getAreaByTag(String tag){

String area = "";
if (tag!=null){

if(tag.indexOf("gz")==0){

area="广州";

}else if(tag.indexOf("bj")==0){

area="北京";

}else if(tag.indexOf("sh")==0){

area="上海";

}else if(tag.indexOf("sz")==0){

area="深圳";

}else if(tag.indexOf("dg")==0){

area="东莞";

}else if(tag.indexOf("hk")==0){

area="香港";

}else if(tag.indexOf("hb")==0){

area="河北";

}else if(tag.indexOf("cq")==0){
....
}


return area;

}
咨询了火青哥,了解到目前的"河北"分站改成"石家庄"了,而这里没有同步更新,导致了查询的时候找不到对应的地区,当成全国来查了。

原则上,这里直接将河北改成石家庄,就解决问题了。but为了免得类似的情况出现,便改成动态的出,如下:
public String getAreaByTag(String tag){

String area = "";
if (tag!=null){

for(PriceArea? priceArea : EnvUtils?.getEnv().getPriceAreaList()){

if(tag.equals(priceArea.getPinyin().toLowerCase())){

area = priceArea.getName();
return area;

}

}

做了如此的修改,解决了问题。

2、商情的地区关联字段是地区名,不是地区ID

这种做法,导致报价地区改变的时候,商情的关联字段也要做相应同步,否则数据就不一致。

当然之前是可能没有商情按地区显示的业务,只不过这里的确这样用了,就勉强用了这个地区字段。

理论上,应该要添加一个商情的地区主键关联字段

3、大部分数据接口里面的地区参数,兼容了多种方式

如这个接口的例子:
String area=StringUtils?.defaultIfEmpty(request.getParameter("area"),StringUtils?.defaultIfEmpty(
getAreaById(NumberUtils?.toInt(request.getParameter("areaID"),0)),getAreaByTag(request.getParameter(
"areaTag"))));报价地区

这里支持传入地区名,地区拼音缩写,地区ID
而又通过各种方式,把它转成地区名来给接口用

好笑的是:

有部分数据接口(jsp)里的方法要求传入的参数是地区ID
有部分数据接口(jsp)里的方法要求传入的参数是地区名

碰巧这个接口里面就转了n重,地区拼音转地区名,地区名转地区ID,地区ID再转回地区名来查询sql

这样就增加了维护的难度

其实我在想,如果接口参数传递只支持地区ID,不就完了吗

为了兼容多种传值(其实有些真的不用的),
增加了代码复杂性
数据做了多重的适配,增加了数据同步的难度,增加了数据不一致的机会出现
而且维护的人会有点不爽

总结起来,就三点:
1、一些静态的代码,很难同步
2、需要关联表查询的地方,最好用主键关联
3、支持的越多,代码越复杂,增加排查和维护难度

Change History

comment:1 Changed 14 years ago by chenyinle

  • Component changed from 商家后台 to 网友前台
  • Description modified (diff)

comment:2 Changed 14 years ago by chenyinle

  • Description modified (diff)

comment:3 Changed 14 years ago by huangzhong

如果一个接口做成了万金油那样到处可以用,什么参数都可以接受,这样的情况就很难避免

comment:4 Changed 14 years ago by huangzhong

  • Keywords 常见故障,问题发现,问题反映 added; 常见故障 问题发现 问题反映 removed
  • Status changed from new to closed
  • Resolution set to fixed
Note: See TracTickets for help on using tickets.