Ticket #57 (new QA) — at Initial Version
由数据接口地区参数引发的问题
| Reported by: | chenyinle | Owned by: | |
|---|---|---|---|
| Priority: | major | Milestone: | |
| Component: | 网友前台 | Version: | |
| Keywords: | 常见故障,问题发现,问题反映 | Cc: | |
| Due Date: | 16/12/2011 |
Description
事情是这样的:
用户报障过来,说河北的用户,手机频道页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、支持的越多,代码越复杂,增加排查和维护难度
![(please configure the [header_logo] section in trac.ini)](http://www1.pconline.com.cn/global/2008/images/jss/m_logo091125.jpg)