public Reply service(TPServiceInformation tpServiceInfor) throws Exception {
    SopIntf recvSop = getSopFromWTC(tpServiceInfor);
    SopIntf sendSop = new SopIntf();
    setSystemHeadForSop(recvSop, sendSop);
    printRecvHeaderPkt(recvSop);

    PybjyEO record = buildAsyQueryRecord(recvSop);
    record.setChaxzl(HdqsConstants.CHAXZL_KEHUZH);
    Handle0781Form form = buildForm(record);
    printRecvFormPkt(form, record);
    try {
      validateField(record);
    } catch (HdqsWtcException e) {
      getLogger().info(getExCode() + " sop invalid: " + e.getMessage());
      if (isFrontAuthorize(record)) {
        return getAuthorizeBuffer(tpServiceInfor, sendSop, Authorize.NO_AUTH_MSG);
      }
      return getExceptionBuffer(tpServiceInfor, sendSop, e.getMessage());
    }
    getLogger().info("Start query:" + getExCode());
    TimerUtils timer = new TimerUtils();
    timer.start();
    PjyjlEO sRecord = saveExchangeRecord(record, form);
    record.setJioyrq(sRecord.getJioyrq());
    String key = buildKey(record);
    isZonghangAuthorize(record);
    try {
      Handle0781Cache cache = Handle0781Cache.getInstance();
      Authorize authorize = new Authorize();
      C0781RowkeyItem rowkeyItem = new C0781RowkeyItem();
      if (!cache.containsKey(key)) {
        Handle0781Query queryAction = new Handle0781Query();
        Query0781Result queryResult = queryAction.load(record);
        Map<Integer, List<RowkeyAndTblContext>> qMap = queryResult.getPageCache();
        // 无论记录明细是否存在,都需要进行授权
        if (queryResult != null && queryResult.getAuthorize() != null) {
          authorize = isNeedAuthorize(record, queryResult.getAuthorize());
          rowkeyItem.setAuthorize(authorize);
        }
        if (qMap != null && qMap.size() > 0) {
          rowkeyItem.setBishuu(queryResult.getBishuu());
          rowkeyItem.setKehuzh(record.getKehuzh());
          rowkeyItem.setKehhao(queryResult.getKehhao());
          rowkeyItem.setGerzwm(queryResult.getGerzwm());
          rowkeyItem.getCache().putAll(qMap);
          getLogger().info("total size: " + rowkeyItem.getBishuu());
        }
        // 无论记录明细是否存在,都缓存
        rowkeyItem.setLastModifiedT(System.currentTimeMillis());
        cache.put(key, rowkeyItem);
      }
      List<Item0781> result = null;
      if (cache.containsKey(key)) {
        rowkeyItem = cache.get(key);
        if (rowkeyItem.getAuthorize() != null) {
          authorize = isNeedCacheAuthorize(rowkeyItem.getAuthorize(), record);
        }
        if (isFrontAuthorize(record) || authorize.isNeedAuth()) {
          getLogger().info(authorize.getPrintMsg());
          return getAuthorizeBuffer(tpServiceInfor, sendSop, authorize.getPrintMsg());
        }

        Map<Integer, List<RowkeyAndTblContext>> itemCache = rowkeyItem.getCache();
        if (itemCache.containsKey(record.getStartNum())) {
          List<RowkeyAndTblContext> pageInfo = itemCache.get(record.getStartNum());
          Adgmx0781Scanner itemQuery = new Adgmx0781Scanner();
          result = itemQuery.query(record, pageInfo);
          getLogger().info("current query size: " + result.size());
        }

        rowkeyItem.setLastModifiedT(System.currentTimeMillis());
        cache.put(key, rowkeyItem);
      }
      if (isFrontAuthorize(record) || authorize.isNeedAuth()) {
        getLogger().info(authorize.getPrintMsg());
        updateExchangeEndTime(sRecord);
        return getAuthorizeBuffer(tpServiceInfor, sendSop, authorize.getPrintMsg());
      }
      if (!cache.containsKey(key) || result == null || result.isEmpty()) {
        timer.stop();
        getLogger().info("存在[0]条记录, Cost time(ms)=" + timer.getExecutionTime());
        updateExchangeEndTime(sRecord);
        return getExceptionBuffer(tpServiceInfor, sendSop, "存在[0]条记录");
      }
      getTPServiceInfoAsResult(tpServiceInfor, record, sendSop, result, rowkeyItem);
    } catch (ConditionNotExistException e) {
      timer.stop();
      getLogger().info(e.getMessage());
      updateExchangeRunErrStatus(sRecord);
      if (isFrontAuthorize(record)) {
        return getAuthorizeBuffer(tpServiceInfor, sendSop, Authorize.NO_AUTH_MSG);
      }
      return getExceptionBuffer(tpServiceInfor, sendSop, e.getMessage());
    } catch (UnCorporationCardException e) {
      timer.stop();
      getLogger().info(e.getMessage());
      updateExchangeRunErrStatus(sRecord);
      if (isFrontAuthorize(record)) {
        return getAuthorizeBuffer(tpServiceInfor, sendSop, Authorize.NO_AUTH_MSG);
      }
      return getExceptionBuffer(tpServiceInfor, sendSop, e.getMessage());
    } catch (BalanceBrokedException e) {
      timer.stop();
      getLogger().info(e.getMessage());
      updateExchangeRunErrStatus(sRecord);
      if (isFrontAuthorize(record)) {
        return getAuthorizeBuffer(tpServiceInfor, sendSop, Authorize.NO_AUTH_MSG);
      }
      return getExceptionBuffer(tpServiceInfor, sendSop, e.getMessage());
    } catch (AsynQueryException e) {
      timer.stop();
      getLogger().info("进入异步查询");
      updateExchangeEndTime(sRecord);
      Authorize asyAuth = isAsyAuthorize(record);
      if (asyAuth.isNeedAuth()) {
        return getAuthorizeBuffer(tpServiceInfor, sendSop, asyAuth.getPrintMsg());
      }
      if (isFrontAuthorize(record)) {
        return getAuthorizeBuffer(tpServiceInfor, sendSop, Authorize.NO_AUTH_MSG);
      }
      this.getYbjyService().add(record);
      return handleAsynchronized(tpServiceInfor, sendSop, record);
    } catch (Exception e) {
      timer.stop();
      getLogger().error(e.getMessage(), e);
      updateExchangeRunErrStatus(sRecord);
      if (isFrontAuthorize(record)) {
        return getAuthorizeBuffer(tpServiceInfor, sendSop, Authorize.NO_AUTH_MSG);
      }
      return getExceptionBuffer(tpServiceInfor, sendSop, "后台查询异常");
    }
    timer.stop();
    getLogger().info(getExCode() + " query complete, Cost time(ms)=" + timer.getExecutionTime());
    updateExchangeEndTime(sRecord);
    return tpServiceInfor;
  }