您的位置:首页 > 其它

工作半年内容总结

2015-11-16 17:23 405 查看
参加 工作刚好半年了 

写点东西 记录下吧!

开发工具 intellij  ,sourceTree(git),fiddler 抓包; jenkins 工程部署;

开发框架 play framework (异步编程), spring那一套;  web前端  bootstrap

1:初识 异步promise

 public Promise<Result> getNicknameByIdList(String userIdList) {

               

                Promise<Map<String, String>> promises = userInfoService.getNicknameV2(userIdList);

                return promises.map(new F.Function<Map<String, String>, Result>() {

                        @Override

                        public Result apply(Map<String, String> map) throws Throwable {

                                return Results.ok(JsonUtil.toJson(map));//将 promis 转化为 result

                        }

                });     

        }

}

这样 就以一个promise 包裹住 getNicknameV2函数返回的结果  当promise获取结果数据后再进行map处理 ;

2: 当有多个promise 时 (比如是一个list)

/一串promise的 放到list后的在sequence map

public Promise<Map<String, String>> getNicknameV2(String ids) {
List<Promise<BaseDto<UserBaseInfoModel>>> promiseList = new ArrayList<Promise<BaseDto<UserBaseInfoModel>>>();
//List<String> uList = new ArrayList<String>();
String[] tokens = ids.split(",");
for (String dto : tokens) {
Promise<BaseDto<UserBaseInfoModel>> promise = userBaseInfo(Long.parseLong(dto));
promiseList.add(promise);
}
Promise<List<BaseDto<UserBaseInfoModel>>> allInOne = Promise.sequence(promiseList);

Promise<Map<String, String>> finalPromise = allInOne.map(new Function<List<BaseDto<UserBaseInfoModel>>, Map<String, String>>() {
@Override
public Map<String, String> apply(List<BaseDto<UserBaseInfoModel>> baseDtos) throws Throwable {
Map<String, String> resultMap = new HashMap();
if (baseDtos == null || baseDtos.size() == 0)
return resultMap;

for (int i = 0; i < baseDtos.size(); i ++)
{
BaseDto<UserBaseInfoModel> dto = baseDtos.get(i);

if (dto==null||dto.getData() == null || dto.getCode() != 200)
continue;;

UserBaseInfoModel model = dto.getData();

String userId = model.getUserId();
String nickName = model.getNickName();

resultMap.put(userId, nickName);
}
return resultMap;
}
});

return finalPromise;

}

这里对每一个userId 获取对应的 userBaseInfo  promise ,然后将其放到一个promiseList  中 ,然后 用Promise的sequence方法 

Promise<List<BaseDto<UserBaseInfoModel>>> allInOne = Promise.sequence(promiseList);

最后对 allInOne进行map操作即可;

3:多层次的Promise

public  F.Promise<Result> searchUserId(final String username, final String password){
final String apiKey = SystemConfigService.getApikey();
final String apiSecret = SystemConfigService.getApisecret();
Map<String,String>params=new HashMap<String,String>();
params.put("apiKey",apiKey);
params.put("checkType","LOGIN");
params.put("cid",UUID.randomUUID().toString());
params.put("timestamp", String.valueOf(Calendar.getInstance().getTime().getTime()));
String url=SystemConfigService.getVszdApiUrl();
String port=SystemConfigService.getVszdPort();
url=url+port+"/neptune/user/secure_check/v1";
String apiSign= CryptoUtils.makeSha1Hash(params, apiSecret);
url=url+"?apiSign="+apiSign;
F.Promise<HttpResponse> respromise= HttpInvoker.post(url, params);
F.Function<HttpResponse, String> func = new F.Function<HttpResponse, String>() {
public String apply(HttpResponse response)
{
if (response.getStatus() != 200) {
return "";
}
JsonNode jsonNode = response.asJson();
/* if(!jsonNode.path("data").path("code").equals("200")){
return "";
}*/
String sessionId = jsonNode.path("data").path("sessionId").asText();
return sessionId;
}
};
F.Promise<String> sessionIdPromise = respromise.map(func);
//get uid from login call
F.Promise<Result> uidPromise = sessionIdPromise.flatMap(new F.Function<String, F.Promise<Result>>() {
public F.Promise<Result> apply(String sessionId) {
if (sessionId == null || sessionId.isEmpty()) {
Result result = ok(AdminResult.result(CommonError.SYS_ERROR));
return F.Promise.pure(result);
}
Map<String, String> params = new HashMap<String, String>();
params.put("apiKey", apiKey);
params.put("captchaCode", "");
params.put("userName", username);
//params.put("password", MD5.md5(password));
params.put("password",(new Md5Hash(password)).toHex());
params.put("sessionId", sessionId);
params.put("source", "zuida_android");
params.put("timestamp", String.valueOf(Calendar.getInstance().getTime().getTime()));
String apiSign= CryptoUtils.makeSha1Hash(params, apiSecret);
String port = SystemConfigService.getVszdPort();
String url = SystemConfigService.getVszdSapiUrl()+port+"/neptune/user/login/v1"+"?apiSign="+apiSign+"&";
F.Promise<HttpResponse> respromise = HttpInvoker.post(url, params);
return respromise.map(new F.Function<HttpResponse, Result>() {
@Override
public Result apply(HttpResponse response) throws Throwable {
if (response.getStatus() != 200) {
return ok(AdminResult.result(CommonError.SYS_ERROR));
}
JsonNode jsonNode = response.asJson();
if(jsonNode.path("code").asInt()!=200){

return ok(AdminResult.result(CommonError.SYS_ERROR));
}
String uidStr = jsonNode.path("data").path("user").path("userId").asText();
return ok(AdminResult.ok(uidStr));
}
});
}
});
return uidPromise;
}


这里先通过用户名密码 获取验签后的sessionIdPromise  ,然后对其进行 flatMap 然后将其作为查询用户ID的 一个参数(sessionId)传递给另一个http请求;后一个http请求进行map 返回最终的结果;

另一个例子

public F.Promise<List<WishGoods>> getWishGoodsByGoodsNameOrCollocationId(String collocationGroupId, final String goodsName, final Paginator paginator){
F.Promise<List<String>> goodsIdListPromise = getGoodsIdListByCollocationGroupId(collocationGroupId);
F.Promise<List<WishGoods>> wishGoodsByGoodsnameOrCollocationGroupId = goodsIdListPromise.flatMap(new F.Function<List<String>, F.Promise<List<WishGoods>>>()

{
@Override
public F.Promise<List<WishGoods>> apply(List<String> goodsIdList) throws Throwable {
PagingList<WishGoods> wishGoodsPagingList = WishGoods.getWishGoodsByGoodsIdListAndGoodsName(goodsIdList,goodsName,paginator);
if(wishGoodsPagingList !=null) {
paginator.setItems(wishGoodsPagingList.getTotalRowCount());
}
else {
paginator.setItems(0);
}

return F.Promise.pure(wishGoodsPagingList.getPage(paginator.getPage() - 1).getList());
}
});
return wishGoodsByGoodsnameOrCollocationGroupId.flatMap(new F.Function<List<WishGoods>, F.Promise<List<WishGoods>>>() {
public F.Promise<List<WishGoods>> apply(List<WishGoods> wishGoodsList) {
List<F.Promise<WishGoods>> promiseList = new ArrayList<F.Promise<WishGoods>>();
for (final WishGoods wishGoodsTemp : wishGoodsList) {
wishGoodsTemp.setSellingTimeConetent(DateUtil.format(wishGoodsTemp.getExpectSellingTime(), "yyyy-MM-dd"));
final Long goodsStatus = wishGoodsTemp.getStatus();
F.Promise<Goods216StatusEnum> goods216StatusPromise = getGoods216Status(wishGoodsTemp.getGoodsId());
F.Promise<WishGoods> wishGoodsTempPromis = goods216StatusPromise.flatMap(new F.Function<Goods216StatusEnum, F.Promise<WishGoods>>() {
@Override
public F.Promise<WishGoods> apply(Goods216StatusEnum goods216Status) throws Throwable {
String statusMsg;
if (goods216Status.getCode().intValue() == Goods216StatusEnum.SALE_OUT_OR_OFFSHELF.getCode().intValue()
&& goodsStatus.intValue()==Goods216StatusEnum.REQUEST_ERROR.getCode().intValue()) {
statusMsg = WishGoodsStatusEnum.getFromCode(goodsStatus).getMsg()+"(****)";
} else {
statusMsg = WishGoodsStatusEnum.getFromCode(goodsStatus).getMsg();
}
wishGoodsTemp.setStatusContent(statusMsg);
if (wishGoodsTemp.getWishGoodsSN() != null) {
F.Promise<List<WishGoodsCollocationGroup>> colPromise = getCollocationByWishGoodsSn(wishGoodsTemp.getWishGoodsSN());//url
return colPromise.map(new F.Function<List<WishGoodsCollocationGroup>, WishGoods>() {
@Override
public WishGoods apply(List<WishGoodsCollocationGroup> collocations) throws Throwable {
wishGoodsTemp.setCollocation(collocations);
return wishGoodsTemp;
}
});
}

return F.Promise.pure(wishGoodsTemp);
}
});
promiseList.add(wishGoodsTempPromis);
}
return F.Promise.sequence(promiseList);
}

});
}

:4:出错  recover 处理

return responsePromise.map(new F.Function<HttpResponse, String>() {
@Override
public String apply(HttpResponse response) throws Throwable {
if(response.getStatus()!=200) {
// return Results.badRequest("");
return null;
}
//String json=response.getBody();
String result = response.asJson().toString();
return result;
}
}).recover(new F.Function<Throwable, String>() {
@Override
public String apply(Throwable t) throws Throwable {
Logger.error("setUserName error-->" + t.getMessage());
return SYS_ERROR;
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: