id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	due_date
57	由数据接口地区参数引发的问题	chenyinle		"'''事情是这样的：'''

用户报障过来，说河北的用户，手机频道页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、支持的越多，代码越复杂，增加排查和维护难度
"	QA	new	major		商家后台			常见故障 问题发现 问题反映		16/12/2011
