java查询物流信息

该代码段展示了如何利用阿里云API查询物流信息。首先,通过@Value注解从配置文件中读取AppCode、host和path。根据传入的订单类型获取用户电话、快递公司代码、运单号和快递名称。然后尝试从Redis缓存中获取物流信息,若不存在则调用阿里云API,使用HttpUtils发送GET请求,并将返回的物流信息存储到Redis中。最后,将查询结果封装到MessageBean中返回。
摘要由CSDN通过智能技术生成
	@Value("${aliyun.logistics.AppCode}")
    private String appCode;
    @Value("${aliyun.logistics.host}")
    private String host;
    @Value("${aliyun.logistics.path}")
    private String path;
    @Resource
    private RedisUtil redisUtil;
    
@Override
    public MessageBean logistics(Long id,Integer type) {
        MessageBean result = new MessageBean();
        try {
            String userPhone ="";
            String deliveryCode ="";
            String deliveryNum ="";
            String deliveryName ="";
            if (type.equals(ConstantNumber.INTEGER_ZERO)){
                Order one = orderMapper.getOne(id);
                userPhone = one.getUserPhone();
                deliveryCode = one.getDeliveryCode();
                deliveryNum = one.getDeliveryNum();
                deliveryName = one.getDeliveryName();
            }else if (type.equals(ConstantNumber.INTEGER_ONE)){
                PointsOrder one = pointsOrderMapper.selectByPrimaryKey(id);
                userPhone = one.getUserPhone();
                deliveryCode = one.getDeliveryCode();
                deliveryNum = one.getDeliveryNum();
                deliveryName = one.getDeliveryName();
            }else {
                throw new BDException("type参数错误");
            }
            //先从redis查询数据
            Object obj = redisUtil.get("logistics" + deliveryNum);
            JSONObject jsonObject = null;
            if (obj == null) {
                logger.info("从阿里云查询物流信息!");
                Map<String, String> headers = new HashMap<>(1);
                headers.put("Authorization", "APPCODE " + appCode);

                Map<String, String> querys = new HashMap<>(2);
                if ("SFEXPRESS".equals(deliveryCode) || deliveryName.contains("顺丰")) {
                    if (StringUtils.isEmpty(userPhone)) {
                        userPhone = redisUtil.hmget("returnAddress").get("phone").toString();
                    }
                    userPhone = userPhone.substring(userPhone.length() - 4);
                    deliveryNum = deliveryNum + ":" + userPhone;
                }
                querys.put("no", deliveryNum.trim());
                querys.put("type", deliveryCode);

                HttpResponse response = HttpUtils.doGet(host, path, HttpUtils.GET, headers, querys);
                //获取response的body
                String ss = EntityUtils.toString(response.getEntity());
                jsonObject = JSONObject.parseObject(ss);
                redisUtil.set("logistics" + deliveryNum,ss,1800);
            }else {
                logger.info("从redis查询物流信息!");
                jsonObject = JSONObject.parseObject(obj.toString());
            }
            result.setData(jsonObject);
        }catch (Exception e){
            logger.error(ErrorInfoUtil.getErrorInfo(e));
            throw ExceptionFormatUtil.formatException(e, ErrorEnum.GETINFO_ERROR);
        }
        return result;
    }

aliyun.properties

aliyun.logistics.AppCode= 你自己的appcode
aliyun.logistics.host=http://kdwlcxf.market.alicloudapi.com
aliyun.logistics.path=/kdwlcx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值