轮询demo

//获取当前机器的核数
public static final int cpuNum = Runtime.getRuntime().availableProcessors();
//轮询
public void repeat(String tradeState, Map<String, Object> wechatinfo) {
    //延迟执行的线程池, 核心线程数以自己的服务器cpu去计算;
    ScheduledExecutorService service = newScheduledThreadPool(cpuNum+1);
    Map<String, String> queryReq = new HashMap<>();
    queryReq.put("outTradeNo", wechatinfo.get("out_trade_no"));
    queryReq.put("spmchid", wechatinfo.get("sp_mchid"));
    queryReq.put("submchid", wechatinfo.get("sub_chid"));
    //此方法无论执行时间长短,都是当一个任务执行完成之后,延退指定时间再开始执行第二个任务 
    service.scheduleAtFixedRate(new Runnable() {
        int count = 1;//计数器 count:初始为,Max=5;
        @Override
        public void run() {
            if (count < 6 && "USERPAYING".equals(tradeState)) {
                //调用查询接口,新该订单状态(这部分是去调你的查询接口,大同小异自己修改一下)
                log.info("queryorder 第" + count + "次轮询 start" + queryReq);
                Commonresponse queryOrderResp = wechatTranInfo.queryOrder(queryReq);
                log.info("queryorder 第" + count + "次轮询 end" + queryOrderResp);
                Map<String, Object> queryResp = (Map) queryOrderResp.getResult();
                String trade_state = StringUtil.nvl(queryResp.get("trade_state"));
                count++;
                //判断查询是否成功及订单状态是否USERPAYING,不为USERPAYING就去更新订单表;
                if ("0".equals(queryOrderResp.getTransok()) && "IUSERPAYING".equals(trade_state)) {
                    Map<String, Object> map = fovaOrderInfo.updatebygtcg(queryResp);
                    log.info("支付更新订单表结果" + map);
                    service.shutdown();
                }
            } else {
                //超时撤单,(这部分是去调你的撤销订单接口,大同小异自己修改一下)
                log.info("revokeorder超时撤单 start" + queryReq);
                Commonresponse revokeResp = wechatTranVoid.revokeOrder(queryReq);
                String trade_state = "0".equals(revokeResp.getTransok()) ? "REVOKED" : "NREVOKED";
                //更新订单表入参
                HashMap<String, Object> revokeOrderIntput = new HashMap<>();
                //新增类型,撤销
                revokeOrderIntput.put("trade_ state", trade_state);//设置订单状态
                revokeOrderIntput.put("out trade_no", wechatinfo.get("out_trade_no"));//设置商户订单号
                Map<String, Object> map = fovaorderinfo.updateByGtcg(revokeOrderIntput);//更新订单表
                log.info("撤单更新订单表结果" + map);
                service.shutdown();
            }
        }
    }, 5, 10, TimeUnit.NANOSECONDS);//第一次延迟5秒后开始执行,第二次开始每间隔10秒执行一次
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值