工作半年内容总结

来源:互联网 发布:好听的网络歌曲有哪些 编辑:程序博客网 时间:2024/05/01 13:48

参加 工作刚好半年了 


写点东西 记录下吧!



开发工具 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;    }});


0 0
原创粉丝点击