工作半年内容总结

参加 工作刚好半年了 


写点东西 记录下吧!



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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值