You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

268 lines
8.2 KiB

package com.fr.plugin.ztzzSSO.serverDS;
import com.fr.base.TableData;
import com.fr.data.AbstractDataModel;
import com.fr.general.data.TableDataException;
import com.fr.general.http.HttpToolbox;
import com.fr.json.JSONArray;
import com.fr.json.JSONObject;
import com.fr.plugin.ztzzSSO.config.PluginSimpleConfig;
import com.fr.plugin.ztzzSSO.utils.FRUtils;
import com.fr.plugin.ztzzSSO.utils.HttpUtils;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
public class ORGHttpDataModel extends AbstractDataModel {
private static String[] COLUMN_NAMES = {"DISPLAY_PATH", "DISPLAY_PATH_NAME", "MDM_CODE","ORG_NAME","ORG_NAME_SHORT",
"FOUND_DATE","UPDATE_TIME","REG_ADDRESS","ORG_CODE","ORG_UID","ORG_PID"};
private int rowCount = TableData.RESULT_ALL;
private DatasetData datas = new DatasetData();
public ORGHttpDataModel(int count) {
this.rowCount = count;
if (this.rowCount == 0) {
return;
}
queryData();
}
//获取列的数量
@Override
public int getColumnCount() throws TableDataException {
return COLUMN_NAMES.length;
}
//获取列的名称
@Override
public String getColumnName(int i) throws TableDataException {
return COLUMN_NAMES[i];
}
//是否还有行
@Override
public boolean hasRow(int rowIndex) throws TableDataException {
int count = getRowCount();
return rowIndex < count;
}
//获取行数量
@Override
public int getRowCount() throws TableDataException {
if (this.datas == null) {
return 0;
}
List<List<Object>> values = this.datas.getValues();
if (values == null) {
return 0;
}
int count = values.size();
return count;
}
//获取数据
@Override
public Object getValueAt(int rowIndex, int columnIndex) throws TableDataException {
if (this.datas == null) {
return "";
}
List<List<Object>> values = this.datas.getValues();
if ((values == null) || (values.size() <= rowIndex)) {
return "";
}
List<Object> rowValues = values.get(rowIndex);
if ((rowValues == null) || (rowValues.size() <= columnIndex)) {
return "";
}
return rowValues.get(columnIndex);
}
//释放
@Override
public void release() throws Exception {
this.datas = null;
}
public static String httpRequest(String requestUrl, String requestMethod,
String outputStr, String tokenid) {
StringBuffer buffer = null;
HttpURLConnection conn = null;
InputStream is = null;
InputStreamReader isr = null;
try {
URL url = new URL(requestUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod(requestMethod);
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Authorization", tokenid);
conn.setRequestProperty("X-MDM-UNIFIED-RESPONSE", "true");
conn.connect();
// 往服务器端写内容 也就是发起http请求需要带的参数
if (null != outputStr) {
OutputStream os = conn.getOutputStream();
os.write(outputStr.getBytes("utf-8"));
os.close();
}
// 读取服务器端返回的内容
is = conn.getInputStream();
isr = new InputStreamReader(is, "utf-8");
BufferedReader br = new BufferedReader(isr);
buffer = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
buffer.append(line);
}
System.out.println(buffer);
} catch (Exception e) {
e.printStackTrace();
}finally{
if(null != conn){
conn.disconnect();
}
if(null != is){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(null != isr){
try {
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return buffer.toString();
}
/**
* 查询数据
*/
private void queryData() {
try {
String token = getToken();
FRUtils.FRLogInfo("orgToken:"+token);
createDatas(0,token);
} catch (Exception e) {
FRUtils.FRLogInfo("数据集获取组织信息,请求出错:"+e.getMessage());
throw new NullPointerException("数据集获取组织信息为空," + e.getMessage());
}
}
/**
* 获取token
* @return
*/
private String getToken(){
PluginSimpleConfig psc = PluginSimpleConfig.getInstance();
String tokenUrl = psc.getTokenUrl2();
String username = psc.getUsername();
String psd = psc.getPsd();
Map<String,String> header = new HashMap<String,String>();
header.put("Content-Type","application/json");
header.put("X-MDM-UNIFIED-RESPONSE","true");
JSONObject params = new JSONObject();
// Map<String,String> params = new HashMap<String,String>();
params.put("username",username);
params.put("password",psd);
String result = "";
try {
result = HttpUtils.HttpPostJson(tokenUrl,params.toString(),header);
} catch (Exception e) {
return "";
}
JSONObject resultJson = new JSONObject(result);
return resultJson.getString("token");
}
/**
* 获取组织数据
* @param pageNum
* @param token
* @return
*/
private JSONObject getOrg(int pageNum,String token){
PluginSimpleConfig psc = PluginSimpleConfig.getInstance();
String orgUrl = psc.getOrgUrl()+"?pageNum="+pageNum+"&pageSize=1000";;
FRUtils.FRLogInfo("orgUrl:"+orgUrl);
String result = httpRequest(orgUrl,"POST",null,token);
FRUtils.FRLogInfo("orgResult:"+result);
return new JSONObject(result);
}
private void createDatas(int pageNum,String token) {
JSONObject json = getOrg(pageNum,token);
JSONArray jsonArray = json.getJSONArray("content");
addRowDatas(jsonArray);
boolean last = json.getBoolean("last");
if(last){
return;
}
pageNum = pageNum+1;
createDatas(pageNum,token);
}
/**
* 添加行数据
* @param jsonArray
*/
private void addRowDatas(JSONArray jsonArray) {
if(jsonArray == null || jsonArray.size() <= 0){
return ;
}
for(int i =0;i< jsonArray.size();i++){
JSONObject org = jsonArray.getJSONObject(i);
String DISPLAY_PATH = org.getString("DISPLAY_PATH");
String DISPLAY_PATH_NAME = org.getString("DISPLAY_PATH_NAME");
String MDM_CODE = org.getString("MDM_CODE");
String ORG_NAME = org.getString("ORG_NAME");
String ORG_NAME_SHORT = org.getString("ORG_NAME_SHORT");
String FOUND_DATE = org.getString("FOUND_DATE");
String UPDATE_TIME = org.getString("UPDATE_TIME");
String REG_ADDRESS = org.getString("REG_ADDRESS");
String ORG_CODE = org.getString("ORG_CODE");
String ORG_UID = org.getString("ORG_UID");
String ORG_PID = org.getString("ORG_PID");
List<Object> rowDatas = new ArrayList<Object>();
rowDatas.add(DISPLAY_PATH);
rowDatas.add(DISPLAY_PATH_NAME);
rowDatas.add(MDM_CODE);
rowDatas.add(ORG_NAME);
rowDatas.add(ORG_NAME_SHORT);
rowDatas.add(FOUND_DATE);
rowDatas.add(UPDATE_TIME);
rowDatas.add(REG_ADDRESS);
rowDatas.add(ORG_CODE);
rowDatas.add(ORG_UID);
rowDatas.add(ORG_PID);
List<List<Object>> values = this.datas.getValues();
values.add(rowDatas);
}
}
}