T2Util.java 3.93 KB
package com.cjs.cms.util.t2;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.cjs.cms.biz.ServiceException;
import com.cjs.cms.util.lang.StringUtil;
import com.hundsun.t2sdk.common.core.context.ContextUtil;
import com.hundsun.t2sdk.common.share.dataset.DatasetService;
import com.hundsun.t2sdk.impl.client.T2Services;
import com.hundsun.t2sdk.interfaces.IClient;
import com.hundsun.t2sdk.interfaces.T2SDKException;
import com.hundsun.t2sdk.interfaces.share.dataset.IDataset;
import com.hundsun.t2sdk.interfaces.share.dataset.IDatasets;
import com.hundsun.t2sdk.interfaces.share.event.EventTagdef;
import com.hundsun.t2sdk.interfaces.share.event.EventType;
import com.hundsun.t2sdk.interfaces.share.event.IEvent;

/**
 * 恒生T2接口工具类
 * 
 * @author tongyufu
 *
 */
public final class T2Util {

    private static T2Services server;
    private static IClient    client;

    static {
        try {
            server = T2Services.getInstance();
            String configString = T2Util.class.getResource("/t2sdk-config.xml").getPath();
            server.setT2sdkConfigString(configString);
            server.init();
            server.start();
            client = server.getClient("myserver");
        } catch (T2SDKException e) {
            e.printStackTrace();
        }
    }

    /**
     * 发送请求
     * 
     * @param params 请求参数
     * @param funccode 接口编号
     * @throws T2SDKException 
     */
    public static T2Result request(Map<String, Object> params,
                                   String funccode) throws ServiceException {
        try {
            IEvent event = ContextUtil.getServiceContext().getEventFactory()
                .getEventByAlias(funccode, EventType.ET_REQUEST);

            //请求参数
            IDataset requestParam = DatasetService.getDefaultInstance().getDataset();
            for (String key : params.keySet()) {
                requestParam.addColumn(key);
            }
            requestParam.appendRow();
            for (String key : params.keySet()) {
                requestParam.updateString(key, StringUtil.castString(params.get(key)));
            }
            event.putEventData(requestParam);
            if ("651004".equals(funccode)) {
                event.setStringAttributeValue(EventTagdef.TAG_SYSTEM_NO, "1");
            }

            //发送请求
            IEvent rsp = client.sendReceive(event, 10000);

            T2Result result = new T2Result();
            result.setCode(rsp.getReturnCode());
            //响应状态
            result.setData(T2Util.getData(rsp.getEventDatas()));
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            throw new ServiceException("请求T2接口出错", e);
        }
    }

    private static List<Map<String, Object>> getData(IDatasets datasets) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        for (int i = 0; i < datasets.getDatasetCount(); i++) {
            Map<String, Object> row = new HashMap<String, Object>();
            // 开始读取单个结果集的信息
            IDataset ds = datasets.getDataset(i);
            // 遍历单个结果集记录,遍历前首先将指针置到开始
            ds.beforeFirst();
            while (ds.hasNext()) {
                ds.next();
                row = new HashMap<String, Object>();
                for (int j = 1; j <= ds.getColumnCount(); j++) {
                    row.put(ds.getColumnName(j), ds.getValue(j));
                }
                list.add(row);
            }
        }
        return list;
    }

    public static void main(String[] args) throws T2SDKException {
        Map<String, Object> params = new HashMap<String, Object>();
        //params.put("bank_no", "99");
        params.put("mobile_tel", "13817944654");
        T2Result result = T2Util.request(params, "619837");
        System.out.println(result);
    }
}