由于我所在的部门跟数据库之间被一层部门隔开了,因此我们不能直接接触到数据库。我们需要通过接口接收到其他部门(A)调用到的顾客信息,然后我们负责购物车加车的这一步骤,在点结算之后把用户的状态(新客为0,老客为1,无法判断为2)传递给结算中台,由结算组(B)进行判断,如果客户为新客,则生鲜商品不支持到付,而老客支持。
A给我们提供的接口文件,其中包括了Maven配置、Jsf配置、接口说明(接口名、接口说明、测试环境、预发环境、线上环境)
我们调用A所提供的接口,B给我们传了一个新的jar包,这个jar包仅仅在一个OrderFrom的类中加入了一个userLevelYhd的int属性用来接收我们所传给他的顾客等级数据。
接着我们要写一个方法,以实现在每个客户进行结算操作的时候,把他们的用户等级传给中台。但是考虑到并发量的问题,因此我们再方法中添加了一个缓存。这个缓存的设计是设定为有效时间为1小时,并且只保存状态为1的用户。因为考虑到老客户永远都是老客户了,但是新客户可能在一次进结算页之后,但是他没有进行结算操作,如果缓存是设置的把新客户进来一次就缓存成为老客户的话就可能出错。因此我们只缓存一开始就是老客户的用户。在1小时之内缓存会记住他们,以下是方法的代码。
/**
* 是否是新客接口
*
* NEW_USER(0, "新用户"),
OLD_USER(1, "老用户"),
不在数据库中
UNKOWNN_USER(2,"未知用户");
*
*
*/
private int getNewUser(String pin){
//获取用户的状态,缓存仅缓存老用户状态,新用户状态实时调用接口查询
if (null != jimCacheProxy.get(pin)){
return 1;
}
try {
GetNewUserInfoIn getNewUserInfoIn = new GetNewUserInfoIn();
getNewUserInfoIn.setUserPin(pin);
Return<GetNewUserInfoOut> getNewUser = newUserService.getNewUserInfo(getNewUserInfoIn);
if (getNewUser.isSuccess() && null != getNewUser.getOut() && getNewUser.getOut().getNewUserStatus() == 1){
jimCacheProxy.put(pin,1,1*60*60,TimeUnit.SECONDS);
}
return (getNewUser.isSuccess() && null != getNewUser.getOut()) ? getNewUser.getOut().getNewUserStatus() : 2;
}catch (Exception e){
log.error("调用新客接口异常,pin=" + pin +"Exception" + e.toString());
}
return 2;
}
把这个赋值的函数加在跳进结算页的方法中,大部分工作就做完了,剩下的就是配置预发环境和线上环境了,他给的线上环境参数在jsf中配置一下就可以上线了。