zoukankan      html  css  js  c++  java
  • 公共异步抽象类(多线程)

    AsyncHandler

    抽象类:

    package com.finance.pabbank.util;

    public abstract class AsyncHandler {
       public void callback(final Object obj ) {
           Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
            handle(obj);
            }
        });
        thread.start();
        }

        abstract public void handle(Object ...obj );
    }

    抽象类子类:

    package com.finance.pabbank.support;

    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.stereotype.Service;

    import com.finance.pabbank.agpay.config.SpaFireBankConfigInfo;
    import com.finance.pabbank.agpay.dto.BatchAgpayFileUpReq;
    import com.finance.pabbank.agpay.dto.BatchAgpayFileUpResultQueryReq;
    import com.finance.pabbank.agpay.dto.BatchAgpayFileUpResultQueryRes;
    import com.finance.pabbank.agpay.dto.BatchAgpayReq;
    import com.finance.pabbank.agpay.dto.BatchAgpayRes;
    import com.finance.pabbank.agpay.dto.SpaBatchFileDto;
    import com.finance.pabbank.agpay.support.SpaFireBankChannel;
    import com.finance.pabbank.util.AsyncHandler;
    import com.finance.pabbank.util.ConcurrentFlagProvider;


    @Service("pabBankBatchSendSupport")
    public class PabBankBatchSendSupport extends AsyncHandler{
        
    private static final Logger logger = LogManager.getLogger(PabBankBatchSendSupport.class);
        
        @Autowired
        private RedisTemplate<String, Object> redisTemplate;
        
        
        private static String OBJECT_KEY="SPAB_BATCH_FILE";
        
        public void BatchPay(Object...obj) {
            
            logger.info("==========批量代付异步发送报文并确认========");
            SpaBatchFileDto req=(SpaBatchFileDto)obj[0];
             try {
                    //查询未提交的代付文件
                    SpaFireBankConfigInfo configInfo=req.getSpaFireBankConfigInfo();
                    logger.info("[BatchPay]-=-=-=-=-=-=处理文件批次id"+req.getId()+"===代付批次=="+req.getBatch());
                    //发送批量代付文件
                    logger.info("[BatchPay]发送批量代付文件  1");
                    BatchAgpayFileUpReq bafuq=new BatchAgpayFileUpReq();
                    bafuq.setTradeSn(req.getId());
                    bafuq.setFileName(req.getFileName());
                    bafuq.setFileSize("");
                    bafuq.setFilePath(req.getFilePath());
                    SpaFireBankChannel.batchPayFileUp(bafuq,req.getSpaFireBankConfigInfo(),req.getId());

                    
                    //查询代付文件上传是否成功
                    logger.info("[BatchPay]查询批量代付文件  2");
                    BatchAgpayFileUpResultQueryReq bfrq=new BatchAgpayFileUpResultQueryReq();
                    bfrq.setTradeSn(req.getId());   //唯一字段
                    bfrq.setFileName(req.getFileName());
                    BatchAgpayFileUpResultQueryRes bfrqres=null;
                    for(int i=0;i<50;i++){
                        bfrqres = SpaFireBankChannel.batchPayFileUpResQuery(bfrq, req.getSpaFireBankConfigInfo());
                        if(bfrqres.getCode().equals("F0")){
                            break;
                        }
                        Thread.sleep(1000);
                    }

                    if(bfrqres!=null&&bfrqres.getCode().equals("F0")){
                        logger.info("[BatchPay]发送批量代付消息  3");
                        //发送上传代付文件通知
                        BatchAgpayReq baq=new BatchAgpayReq();
                            baq.setAcctNo(configInfo.getAcctNo());
                            baq.setCorpId(configInfo.getCorpId());
                            baq.setBatchNo(req.getBatch());
                            baq.setBusiType("00000");
                            baq.setTotalNum(req.getTotalNum()+"");
                            baq.setTotalAmount(req.getTotalAmount());
                            baq.setRemark("");
                            baq.setFileName(req.getFileName());
                            baq.setRandomPwd(bfrqres.getRandomPwd());
                            baq.setHashData("");
                            baq.setSignData("");
                        BatchAgpayRes res=SpaFireBankChannel.batchPay(baq, configInfo,req.getId());
                        logger.info("[BatchPay]发送批量代付消息银行返回结果"+res.getRetCode());
                    }else{
                        logger.info("[BatchPay]查询文件上传结果失败 "+req.getBatch());
                        redisTemplate.opsForHash().put(OBJECT_KEY,req.getBatch(), req.getBatch());
                    }
            } catch (Exception e) {
                logger.error("job批量代付上传文件  发送代付消息异常",e);
            }finally{
                // 无论代付成功还是失败清除 缓存中当前批次信息
                logger.info("删除日志标志============batch===================");
                ConcurrentFlagProvider.removeFlag(redisTemplate, req.getBatch());
            }
        }

        @Override
        public void handle(Object...obj) {
            BatchPay(obj);
        }

    }

    调用抽象类子类的方法:

    package com.finance.pabbank.spiImpl;

    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;

    import com.finance.chn.pabbank.spi.AgpayPabBankSpi;
    import com.finance.pabbank.agpay.dto.SpaBatchFileDto;
    import com.finance.pabbank.support.PabBankBatchSendSupport;
    import com.finance.pabbank.support.PabBankSupport;
    import com.finance.pabbank.util.ConfigRedis;
    import com.pisgah.finance.agpay.body.rep.AgPayBatchQueryRep;
    import com.pisgah.finance.agpay.body.rep.AgPayBatchTransferRep;
    import com.pisgah.finance.agpay.body.rep.AgPaySingleQueryRep;
    import com.pisgah.finance.agpay.body.rep.AgPaySingleTransferRep;
    import com.pisgah.finance.agpay.body.req.AgPayBatchQueryReq;
    import com.pisgah.finance.agpay.body.req.AgPayBatchTransferReq;
    import com.pisgah.finance.agpay.body.req.AgPaySingleQueryReq;
    import com.pisgah.finance.agpay.body.req.AgPaySingleTransferReq;
    import com.pisgah.finance.lang.config.wrapper.ConfigCodeWrapper;

    @Service("agpayBatchPabBankSpiImpl")
    public class AgpayBatchPabBankSpiImpl implements AgpayPabBankSpi {
        
        private static final Logger logger = LogManager.getLogger(AgpayBatchPabBankSpiImpl.class);
        @Autowired
        ConfigRedis configRedis;

        @Autowired
        PabBankSupport pabBankSupport;
        
        @Autowired
        PabBankBatchSendSupport pabBankBatchSendSupport;
        
        @Override
        public AgPaySingleTransferRep SinglePay(AgPaySingleTransferReq req) {
            return null;
        }

        @Override
        public AgPayBatchTransferRep BatchPay(AgPayBatchTransferReq req) {
            logger.info("进入渠道平安银行 批量 代付  start 传入参数"+req );
            ConfigCodeWrapper wrapper = configRedis.getWrapper(req.getChnCode(), req.getChnAcctId());
            SpaBatchFileDto spaBatchFile = new SpaBatchFileDto();
            AgPayBatchTransferRep rep = pabBankSupport.creatBatchFile(req,wrapper,spaBatchFile);
            /**
             * 判断批量代付 文件生成结果  
             */
            if(rep.isSuccess() && rep.isAvailable()){// 成功后 进行 代付文件发送动作
                logger.info("成功后进行代付文件发送动作start");
                pabBankBatchSendSupport.callback(spaBatchFile);
                logger.info("成功后进行代付文件发送动作end");
            }
            
            logger.info("进入渠道平安银行 批量 代付  end 传出参数"+rep );
            return rep;
        }

        @Override
        public AgPaySingleQueryRep querySingleStatus(AgPaySingleQueryReq req) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public AgPayBatchQueryRep queryBatchResult(AgPayBatchQueryReq req) {
            logger.info("进入渠道平安银行 批量 代付查询  start 传入参数"+req );
            ConfigCodeWrapper wrapper = configRedis.getWrapper(req.getChnCode(), req.getChnAcctId());

            AgPayBatchQueryRep rep = pabBankSupport.queryBatchResult(req,wrapper);
            logger.info("进入渠道平安银行 批量 代付  end 传出参数"+rep );
            return rep;
        }

    }

  • 相关阅读:
    BEM(Block–Element-Modifier)
    http://element.eleme.io/#/zh-CN/component/quickstart
    Commit message 的写法规范。本文介绍Angular 规范(
    好的commit应该长啥样 https://github.com/torvalds/linux/pull/17#issuecomment-5654674
    代码管理
    if you have content fetched asynchronously on pages where SEO is important, SSR might be necessary
    Martin Fowler’s Active Record design pattern.
    The Zen of Python
    Introspection in Python How to spy on your Python objects Guide to Python introspection
    Object-Oriented Metrics: LCOM 内聚性的度量
  • 原文地址:https://www.cnblogs.com/zhangtan/p/8177739.html
Copyright © 2011-2022 走看看