/**
* 获取返回的JSON文件格式 传入的数据集必须第一个字段名称为FID,如果是单据,分录字段前面必须加前缀ENTRY_ (客户端服务端通用:客户端ctx传入空值,服务端传入ctx)
* @param rowSet 数据集
* @return
* @throws BOSException
* @throws EASBizException
* @throws EASDBException
*/
public static String getRtrnForJSON(Context ctx, IRowSet rowSet, String billId) throws BOSException, EASBizException,
EASDBException {
// TODO Auto-generated method stub
String JSONData = "[{}]";
try {
if (!EmptyUtil.isEmpty(rowSet)&&rowSet.size()>0) {
// 组合结果集的JSON文件
JSONObject billInfo = new JSONObject();
JSONObject billEntryInfo = new JSONObject();
List billList = new ArrayList();
List billEntryList = new ArrayList();
String ids = "";
String lastId = "";
while (rowSet.next()) {
String newId = "";
//获取数据集列的集合
ResultSetMetaData rsMetaData = rowSet.getMetaData();
int count = rsMetaData.getColumnCount();
String id = "";
billEntryInfo = new JSONObject();
//循环列
for (int i = 1; i <= count; i++) {
//判断是否为分录
// if (rsMetaData.getColumnName(i).indexOf("ENTRY_")!=-1) {
if (rsMetaData.getColumnName(i).indexOf("ENTRY_")!=-1) {
//添加分录数据
billEntryInfo.element(rsMetaData.getColumnName(i).replace("ENTRY_", "").toLowerCase(), rowSet.getString(rsMetaData.getColumnName(i)));
}else {
//获取ID用于区分新旧ID和区分多条数据行的表头和分录
if (billId.equalsIgnoreCase(rsMetaData.getColumnName(i))) {
// if ("FID".equalsIgnoreCase(rsMetaData.getColumnName(i))) {
id = !EmptyUtil.isEmpty(rowSet.getString(rsMetaData.getColumnName(i)))?rowSet.getString(rsMetaData.getColumnName(i)):"";
newId = id;
}
//判断是否循环这条数据的ID是否已经在第一次把表头的数据加载后存入表头ID集合中,如果存在,则表示表头已经添加完成,只需要循环剩下的分录
if (ids.indexOf(id)>=0)
continue;
//添加表头数据
billInfo.element(rsMetaData.getColumnName(i).toLowerCase(), rowSet.getString(rsMetaData.getColumnName(i))!=null?rowSet.getString(rsMetaData.getColumnName(i)):"");
}
}
//将第一次循环的新表头数据加入到集合中后,存储ID以便后面相同的表头数据无需再次加入
if (!EmptyUtil.isEmpty(id)) {
if (ids.indexOf(id)<0){
if (EmptyUtil.isEmpty(ids)) {
ids = id;
}else {
ids = ids + "," + id;
}
}
}
//将数据集中提前与下一条数据的ID进行比对
if (rowSet.next()) {
// lastId = rowSet.getString("FID");
lastId = rowSet.getString(billId);
rowSet.previous();
//如果不同则为另外一条新的单据表头,此时将对当前循环存储的表头表体数据进行添加到集合中
if (!newId.equalsIgnoreCase(lastId)) {
if (!billEntryInfo.isEmpty()) {
billEntryList.add(billEntryInfo);
}
if (!EmptyUtil.isEmpty(billEntryList)&&billEntryList.size()>0) {
JSONArray jsonArray = JSONArray.fromObject(billEntryList);
billInfo.element("ENTRY",jsonArray.toString());
}
billList.add(billInfo);
billInfo = new JSONObject();
billEntryInfo = new JSONObject();
billEntryList = new ArrayList();
}else {//如果相同则把分录添加到分录的集合中去
if (!EmptyUtil.isEmpty(billEntryInfo)) {
billEntryList.add(billEntryInfo);
}
}
}else {//如果下一条不存在,则对整个循环进行一个整合并结束
if (!billEntryInfo.isEmpty()) {
billEntryList.add(billEntryInfo);
}
if (!EmptyUtil.isEmpty(billEntryList)&&billEntryList.size()>0) {
JSONArray jsonArray = JSONArray.fromObject(billEntryList);
billInfo.element("ENTRY",jsonArray.toString());
}
billList.add(billInfo);
billInfo = new JSONObject();
billEntryInfo = new JSONObject();
billEntryList = new ArrayList();
break;
}
}
JSONArray jsonArray = JSONArray.fromObject(billList);
// 生成JSON字符串
JSONData = jsonArray.toString();
// System.out.println("返回JSON报文:" + JSONData);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("查询出错:" + e.getMessage());
e.printStackTrace();
}
return JSONData;
}