package com.vci.server.bof.service;
|
|
import java.math.BigDecimal;
|
import java.sql.PreparedStatement;
|
import java.sql.ResultSet;
|
import java.sql.SQLException;
|
import java.sql.Statement;
|
import java.sql.Timestamp;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.Map;
|
|
import org.apache.commons.lang3.StringUtils;
|
import org.hibernate.SQLQuery;
|
import org.hibernate.Session;
|
|
import com.vci.omd.constants.LinkConstants;
|
import com.vci.server.base.persistence.dao.HibernateSessionFactory;
|
import com.vci.server.base.utility.OmdHelper;
|
import com.vci.server.bof.objects.LinkTypeWrap;
|
import com.vci.server.cache.OMCacheProvider;
|
import com.vci.corba.common.VCIError;
|
import com.vci.corba.omd.atm.AttribItem;
|
import com.vci.corba.omd.data.AttributeValue;
|
import com.vci.corba.omd.data.BusinessObject;
|
import com.vci.corba.omd.data.LinkObject;
|
import com.vci.corba.omd.ltm.LinkType;
|
import com.vci.common.log.ServerWithLog4j;
|
import com.vci.common.utility.ObjectUtility;
|
|
public class LOFactoryService extends BOFactoryBaseService {
|
|
private int BATCHSIZE = 2000;
|
|
private static LOFactoryService instance = null;
|
|
private LOFactoryService() {
|
|
}
|
|
public static synchronized LOFactoryService getInstance() {
|
if (instance == null) {
|
instance = new LOFactoryService();
|
}
|
|
return instance;
|
}
|
|
/**
|
* 创建新对象
|
*
|
* @param lo
|
* @return
|
* @throws Throwable
|
* @throws Exception
|
*/
|
public LinkObject createLinkObject(LinkObject lo) throws Exception, Throwable {
|
String tableName = OmdHelper.getLTTableName(lo.ltName);
|
|
// Jason。wang 取消通过cobra服务获取LinkType的对象定义信息,直接使用服务器端服务的方式获取。
|
//LinkType linkType = ServerServiceProvider.getOMDService().getLinkTypeService().getLinkType(lo.linkTypeName);
|
LinkType linkType = OMCacheProvider.getLinkType(lo.ltName);
|
// end Jason.Wang 2018.6.28
|
|
int count = 0;
|
|
if (linkType.relationFrom.equals("1") && linkType.relationTo.equals("N")) {
|
count = getLinkObjectCountByFromTOObject(lo.fromOid, lo.toOid, tableName, 2);
|
} else if (linkType.relationFrom.equals("N") && linkType.relationTo.equals("1")) {
|
count = getLinkObjectCountByFromTOObject(lo.fromOid, lo.toOid, tableName, 3);
|
} else if (linkType.relationFrom.equals("1") && linkType.relationTo.equals("1")) {
|
count = getLinkObjectCountByFromTOObject(lo.fromOid, lo.toOid, tableName, 1);
|
}
|
|
if (count > 0) {
|
throw new VCIError("P0010LOL-00005", new String[] { linkType.relationFrom, linkType.relationTo });
|
}
|
|
//AttribItem[] items = ServerServiceProvider.getOMDService().getAttributeService().getAttribItemsByNames(linkType.attributes);
|
AttribItem[] items = OMCacheProvider.getAttributes(linkType.attributes);
|
Map<String, AttribItem> attrItemMap = new HashMap<String, AttribItem>();
|
for (int i = 0; i < items.length; i++) {
|
attrItemMap.put(items[i].name, items[i]);
|
}
|
|
// Map<String, AttribItem> attrItemMap = getLOAttributeItemMap(lo.linkTypeName);
|
String sql = getCreateLOSql(lo, tableName, attrItemMap);
|
Session session = HibernateSessionFactory.getSession();
|
|
SQLQuery query = session.createSQLQuery(sql);
|
prepareCreateLOPsmt(query, lo, attrItemMap);
|
query.executeUpdate();
|
|
return lo;
|
}
|
|
private LinkObject createLinkObject(LinkObject lo, LinkType linkType, Map<String, AttribItem> attrItemMap)
|
throws Exception, Throwable {
|
String tableName = OmdHelper.getLTTableName(lo.ltName);
|
|
int count = 0;
|
|
if (linkType.relationFrom.equals("1") && linkType.relationTo.equals("N")) {
|
count = getLinkObjectCountByFromTOObject(lo.fromOid, lo.toOid, tableName, 2);
|
} else if (linkType.relationFrom.equals("N") && linkType.relationTo.equals("1")) {
|
count = getLinkObjectCountByFromTOObject(lo.fromOid, lo.toOid, tableName, 3);
|
} else if (linkType.relationFrom.equals("1") && linkType.relationTo.equals("1")) {
|
count = getLinkObjectCountByFromTOObject(lo.fromOid, lo.toOid, tableName, 1);
|
}
|
|
if (count > 0) {
|
throw new VCIError("P0010LOL-00005", new String[] { linkType.relationFrom, linkType.relationTo });
|
}
|
|
String sql = getCreateLOSql(lo, tableName, attrItemMap);
|
Session session = HibernateSessionFactory.getSession();
|
|
SQLQuery query = session.createSQLQuery(sql);
|
prepareCreateLOPsmt(query, lo, attrItemMap);
|
query.executeUpdate();
|
|
return lo;
|
}
|
|
/**
|
* 根据from、to端的类型获取已经建立类型的关系数
|
*
|
* @param fromType
|
* @param toType
|
* @param linkType
|
* @return
|
* @throws SQLException
|
*/
|
@SuppressWarnings("rawtypes")
|
private int getLinkObjectCountByFromTOObject(String fromOid, String toOid, String tableName, int type)
|
throws SQLException {
|
|
String sql = "";
|
if (type == 1) {
|
sql = getSelectLOOneOneCountSql(fromOid, toOid, tableName);
|
} else if (type == 2) {
|
sql = getSelectLOOneManyCountSql(fromOid, toOid, tableName);
|
} else if (type == 3) {
|
sql = getSelectLOManyOneCountSql(fromOid, toOid, tableName);
|
}
|
|
Session session = HibernateSessionFactory.getSession();
|
|
SQLQuery query = session.createSQLQuery(sql);
|
List queryList = query.list();
|
Object array = (Object) queryList.get(0);
|
int count = ((BigDecimal) array).intValue();
|
|
return count;
|
}
|
|
/**
|
* 获取关系为一对一时查询关系数据的SQL语句
|
*
|
* @param fromOid
|
* @param toOid
|
* @param tableName
|
* @return
|
*/
|
private String getSelectLOOneOneCountSql(String fromOid, String toOid, String tableName) {
|
String sql = "";
|
StringBuffer sbFields = new StringBuffer("SELECT count(*) FROM ").append(tableName)
|
.append(" p where p.F_OID = '").append(fromOid).append("'").append(" or p.T_OID = '").append(toOid)
|
.append("'");
|
sql = sbFields.toString();
|
return sql;
|
}
|
|
/**
|
* 获取关系为一对多时查询关系数据的sql语句
|
*
|
* @param fromOid
|
* @param toOid
|
* @param tableName
|
* @return
|
*/
|
private String getSelectLOOneManyCountSql(String fromOid, String toOid, String tableName) {
|
String sql = "";
|
StringBuffer sbFields = new StringBuffer("SELECT count(*) FROM ").append(tableName)
|
.append(" p where p.T_OID = '").append(toOid).append("'");
|
sql = sbFields.toString();
|
return sql;
|
}
|
|
/**
|
* 获取关系为多对一时查询关系数据的sql语句
|
*
|
* @param fromOid
|
* @param toOid
|
* @param tableName
|
* @return
|
*/
|
private String getSelectLOManyOneCountSql(String fromOid, String toOid, String tableName) {
|
String sql = "";
|
StringBuffer sbFields = new StringBuffer("SELECT count(*) FROM ").append(tableName)
|
.append(" p where p.F_OID = '").append(fromOid).append("'");
|
sql = sbFields.toString();
|
return sql;
|
}
|
|
/**
|
* 根据from、to端的类型获取已经建立类型的关系数的sql。
|
*
|
* @param fromType
|
* @param toType
|
* @param tableName
|
* @return
|
*/
|
@SuppressWarnings("unused")
|
private String getSelectLOCountSql(String fromType, String toType, String tableName) {
|
String sql = "";
|
StringBuffer sbFields = new StringBuffer("SELECT count(*) FROM ").append(tableName)
|
.append(" p where p.F_BTWNAME = '").append(fromType).append("'").append(" and p.T_BTWNAME = '")
|
.append(toType).append("'");
|
sql = sbFields.toString();
|
return sql;
|
}
|
|
@SuppressWarnings("deprecation")
|
public LinkObject[] batchCreateLinkObjectNoCheck(LinkObject[] los, String currentTime)
|
throws Exception {
|
Map<String, List<LinkObject>> mapLtLOs = new HashMap<String, List<LinkObject>>();
|
List<LinkObject> lstLO = null;
|
|
Map<String, LinkTypeWrap> mapLTWrap = new HashMap<String, LinkTypeWrap>();
|
LinkTypeWrap ltWrap = null;
|
|
String sql;
|
|
for (LinkObject lo : los) {
|
|
if (mapLTWrap.containsKey(lo.ltName)) {
|
ltWrap = mapLTWrap.get(lo.ltName);
|
} else {
|
ltWrap = new LinkTypeWrap();
|
//ltWrap.ltItem = ServerServiceProvider.getOMDService().getLinkTypeService().getLinkType(lo.linkTypeName);
|
ltWrap.ltItem = OMCacheProvider.getLinkType(lo.ltName);
|
mapLTWrap.put(lo.ltName, ltWrap);
|
}
|
|
if (ltWrap.mapAttr == null) {
|
//AttribItem[] items = ServerServiceProvider.getOMDService().getAttributeService().getAttribItemsByNames(ltWrap.ltItem.attributes);
|
AttribItem[] items = OMCacheProvider.getAttributes(ltWrap.ltItem.attributes);
|
Map<String, AttribItem> attrMap = new HashMap<String, AttribItem>();
|
for (int i = 0; i < items.length; i++) {
|
attrMap.put(items[i].name, items[i]);
|
}
|
ltWrap.mapAttr = attrMap;
|
}
|
|
if (ltWrap.tableName == null) {
|
ltWrap.tableName = OmdHelper.getLTTableName(lo.ltName);
|
}
|
|
if (mapLtLOs.containsKey(lo.ltName))
|
lstLO = mapLtLOs.get(lo.ltName);
|
else {
|
lstLO = new ArrayList<LinkObject>();
|
mapLtLOs.put(lo.ltName, lstLO);
|
}
|
|
lstLO.add(lo);
|
}
|
|
String sLType = "";
|
Session session = HibernateSessionFactory.getSession();
|
Iterator<String> it = mapLtLOs.keySet().iterator();
|
while (it.hasNext()) {
|
sLType = it.next();
|
|
if (mapLTWrap.containsKey(sLType)) {
|
ltWrap = mapLTWrap.get(sLType);
|
} else
|
continue;
|
|
sql = getInitParamSql(ltWrap);
|
|
ServerWithLog4j.logger.debug(sql);
|
|
lstLO = mapLtLOs.get(sLType);
|
PreparedStatement pst = session.connection().prepareStatement(sql);
|
int size = lstLO.size();
|
|
int i = 0;
|
for (i = 0; i < size; i++) {
|
setPreparedStatementParams(pst, ltWrap, lstLO.get(i));
|
pst.addBatch();
|
if ((i + 1) % BATCHSIZE == 0) {
|
pst.executeBatch();
|
}
|
}
|
|
pst.executeBatch();
|
|
if (pst != null) {
|
pst.close();
|
pst = null;
|
}
|
}
|
|
return los;
|
}
|
|
private String constructCreateSql(String tableName, LinkObject lo, Map<String, AttribItem> attrMap,
|
Map<String, String> initSqlMap, long currentTime) throws Exception {
|
String initSql = null;
|
if (initSqlMap.containsKey(tableName)) {
|
initSql = initSqlMap.get(tableName);
|
} else {
|
initSql = getInitSql(tableName, lo);
|
initSqlMap.put(tableName, initSql);
|
}
|
StringBuilder sbSql = new StringBuilder(initSql);
|
// 对象固有属性
|
sbSql.append("'").append(lo.oid).append("'").append(",'").append(lo.creator).append("'")
|
.append(",to_timestamp('").append(currentTime).append("','").append(DATEFORMATTER).append("')")
|
.append(",'").append(lo.creator).append("'").append(",to_timestamp('").append(currentTime).append("','")
|
.append(DATEFORMATTER).append("')").append(",'").append(lo.fromOid).append("'").append(",'")
|
.append(lo.fromRevOid).append("'").append(",'").append(lo.fromNameOid).append("'").append(",'")
|
.append(lo.fromBTName).append("'").append(",'").append(lo.toOid).append("'").append(",'")
|
.append(lo.toRevOid).append("'").append(",'").append(lo.toNameOid).append("'").append(",'")
|
.append(lo.toBTName).append("'").append(",to_timestamp('").append(currentTime).append("','")
|
.append(DATEFORMATTER).append("')");
|
for (int i = 0; i < lo.newAttrValList.length; i++) {
|
AttributeValue abValue = lo.newAttrValList[i];
|
AttribItem abItem = null;
|
|
String attName = abValue.attrName.toLowerCase();
|
if (attrMap.containsKey(attName)) {
|
abItem = attrMap.get(attName);
|
} else {
|
// abItem = ServerServiceProvider.getOMDService().getAttributeService()
|
// .getAttribItemByName(abValue.attrName.toLowerCase());
|
abItem = OMCacheProvider.getAttribute(attName);
|
attrMap.put(attName, abItem);
|
}
|
|
sbSql.append(",").append(getSqlAccordingType(abItem, lo.newAttrValList[i].attrVal));
|
}
|
|
lo.createTime = currentTime;
|
lo.modifyTime = currentTime;
|
lo.ts = currentTime;
|
sbSql.append(")");
|
String sql = sbSql.toString();
|
return sql;
|
}
|
|
// private void setPreparedStatementParams(PreparedStatement pst, LinkObject lo , Map<String, AttribItem> attrMap) throws SQLException {
|
//
|
// Timestamp curTime = new Timestamp(System.currentTimeMillis());
|
// String sTime = curTime.toString();
|
//
|
// int index = 1;
|
// pst.setString(index++, lo.oid);
|
// pst.setString(index++, lo.creator);
|
// pst.setTimestamp(index++, curTime);
|
// pst.setString(index++, lo.creator);
|
// pst.setTimestamp(index++, curTime);
|
// pst.setString(index++, lo.fromOid);
|
// pst.setString(index++, lo.fromRevisionOid);
|
// pst.setString(index++, lo.fromNameOid);
|
// pst.setString(index++, lo.fromBTMName);
|
// pst.setString(index++, lo.toOid);
|
// pst.setString(index++, lo.toRevisionOid);
|
// pst.setString(index++, lo.toNameOid);
|
// pst.setString(index++, lo.toBTMName);
|
// pst.setTimestamp(index++, curTime);
|
//
|
// for (int i = 0; i < lo.newAttrValList.length; i++) {
|
// AttributeValue abValue = lo.newAttrValList[i];
|
// AttribItem abItem = null;
|
// if (attrMap.containsKey(abValue.attrName.toLowerCase())) {
|
// abItem = attrMap.get(abValue.attrName.toLowerCase());
|
// } else {
|
// abItem = ApProvider.getInstance().getAbItemByName(
|
// abValue.attrName.toLowerCase());
|
// attrMap.put(abValue.attrName.toLowerCase(), abItem);
|
// }
|
//
|
// setQueryValueAccordingDataType(pst, abItem, index++, lo.newAttrValList[i].attrVal);
|
// }
|
//
|
// // 对象固有属性
|
//// sbSql.append("'").append(lo.oid).append("'")
|
//// .append(",'").append(lo.creator).append("'")
|
//// .append(",to_timestamp('").append(currentTime).append("','").append(DATEFORMATTER).append("')")
|
//// .append(",'").append(lo.creator).append("'")
|
//// .append(",to_timestamp('").append(currentTime).append("','").append(DATEFORMATTER).append("')")
|
//// .append(",'").append(lo.fromOid).append("'")
|
//// .append(",'").append(lo.fromRevisionOid).append("'")
|
//// .append(",'").append(lo.fromNameOid).append("'")
|
//// .append(",'").append(lo.fromBTMName).append("'")
|
//// .append(",'").append(lo.toOid).append("'")
|
//// .append(",'").append(lo.toRevisionOid).append("'")
|
//// .append(",'").append(lo.toNameOid).append("'")
|
//// .append(",'").append(lo.toBTMName).append("'")
|
//// .append(",to_timestamp('").append(currentTime).append("','").append(DATEFORMATTER).append("')");
|
//// for (int i = 0; i < lo.newAttrValList.length; i++) {
|
//// AttributeValue abValue = lo.newAttrValList[i];
|
//// AttribItem abItem = null;
|
//// if (attrMap.containsKey(abValue.attrName.toLowerCase())) {
|
//// abItem = attrMap.get(abValue.attrName.toLowerCase());
|
//// } else {
|
//// abItem = ApProvider.getInstance().getAbItemByName(
|
//// abValue.attrName.toLowerCase());
|
//// attrMap.put(abValue.attrName.toLowerCase(), abItem);
|
//// }
|
////
|
//// sbSql.append(",").append(
|
//// getSqlAccordingType(abItem, lo.newAttrValList[i].attrVal));
|
//// }
|
//
|
// lo.createTime = sTime;
|
// lo.lastModifyTime = sTime;
|
// lo.ts = sTime;
|
// }
|
//
|
private void setPreparedStatementParams(PreparedStatement pst, LinkTypeWrap ltWrap, LinkObject lo)
|
throws Exception {
|
|
long time = System.currentTimeMillis();
|
Timestamp curTime = new Timestamp(time);
|
String sTime = curTime.toString();
|
|
Map<String, AttribItem> attrMap = ltWrap.mapAttr;
|
|
Map<String, String> mapValue = new HashMap<String, String>();
|
for (AttributeValue av : lo.newAttrValList) {
|
mapValue.put(av.attrName.toLowerCase(), av.attrVal);
|
}
|
|
int index = 1;
|
pst.setString(index++, lo.oid);
|
pst.setString(index++, lo.creator);
|
pst.setTimestamp(index++, curTime);
|
pst.setString(index++, lo.creator);
|
pst.setTimestamp(index++, curTime);
|
pst.setString(index++, lo.fromOid);
|
pst.setString(index++, lo.fromRevOid);
|
pst.setString(index++, lo.fromNameOid);
|
pst.setString(index++, lo.fromBTName);
|
pst.setString(index++, lo.toOid);
|
pst.setString(index++, lo.toRevOid);
|
pst.setString(index++, lo.toNameOid);
|
pst.setString(index++, lo.toBTName);
|
pst.setTimestamp(index++, curTime);
|
|
String sField = "", sValue;
|
for (int i = 0; i < ltWrap.ltItem.attributes.length; i++) {
|
sField = ltWrap.ltItem.attributes[i].toLowerCase();
|
AttribItem atItem = null;
|
if (attrMap.containsKey(sField)) {
|
atItem = attrMap.get(sField);
|
} else {
|
//atItem = ServerServiceProvider.getOMDService().getAttributeService().getAttribItemByName(sField);
|
atItem = OMCacheProvider.getAttribute(sField);
|
attrMap.put(sField, atItem);
|
}
|
|
if (mapValue.containsKey(sField))
|
sValue = mapValue.get(sField);
|
else
|
sValue = null;
|
|
setQueryValueAccordingDataType(pst, atItem, index++, sValue);
|
}
|
|
lo.createTime = time;
|
lo.modifyTime = time;
|
lo.ts = time;
|
}
|
|
private String getInitSql(String tableName, LinkObject lo) {
|
String sql = "";
|
StringBuffer sbFields = new StringBuffer(
|
"OID,CREATOR,CREATETIME,LASTMODIFIER,LASTMODIFYTIME,F_OID,F_REVISIONOID,F_NAMEOID,F_BTWNAME,"
|
+ "T_OID,T_REVISIONOID,T_NAMEOID,T_BTWNAME,TS");
|
AttributeValue[] attrValList = lo.newAttrValList;
|
for (int i = 0; i < attrValList.length; i++) {
|
sbFields.append(",");
|
sbFields.append(attrValList[i].attrName);
|
}
|
|
StringBuffer sbSql = new StringBuffer().append("INSERT INTO ").append(tableName).append("(")
|
.append(sbFields.toString()).append(")").append(" VALUES (");
|
sql = sbSql.toString();
|
return sql;
|
}
|
|
// private String getInitParamSql(String tableName, LinkObject lo) {
|
// String sql = "";
|
// StringBuffer sbFields = new StringBuffer(
|
// "OID,CREATOR,CREATETIME,LASTMODIFIER,LASTMODIFYTIME,F_OID,F_REVISIONOID,F_NAMEOID,F_BTWNAME,"
|
// + "T_OID,T_REVISIONOID,T_NAMEOID,T_BTWNAME,TS");
|
//
|
// StringBuffer sbParams = new StringBuffer("?,?,?,?,?,?,?,?,?,?,?,?,?,?");
|
//
|
// AttributeValue[] attrValList = lo.newAttrValList;
|
// for (int i = 0; i < attrValList.length; i++) {
|
// sbFields.append(",");
|
// sbFields.append(attrValList[i].attrName);
|
//
|
// sbParams.append(",?");
|
// }
|
//
|
// sql = String.format("INSERT INTO %s (%s) VALUES (%s)", tableName, sbFields.toString(), sbParams.toString());
|
//
|
//// StringBuffer sbSql = new StringBuffer().append("INSERT INTO ")
|
//// .append(tableName).append("(").append(sbFields.toString())
|
//// .append(")").append(" VALUES (").append(sbParams.toString());
|
//// sql = sbSql.toString();
|
// return sql;
|
// }
|
|
private String getInitParamSql(LinkTypeWrap ltWrap) {
|
String sql = "";
|
StringBuffer sbFields = new StringBuffer(
|
"OID,CREATOR,CREATETIME,LASTMODIFIER,LASTMODIFYTIME,F_OID,F_REVISIONOID,F_NAMEOID,F_BTWNAME,"
|
+ "T_OID,T_REVISIONOID,T_NAMEOID,T_BTWNAME,TS");
|
|
StringBuffer sbParams = new StringBuffer("?,?,?,?,?,?,?,?,?,?,?,?,?,?");
|
|
// AttributeValue[] attrValList = lo.newAttrValList;
|
for (int i = 0; i < ltWrap.ltItem.attributes.length; i++) {
|
sbFields.append(",");
|
sbFields.append(ltWrap.ltItem.attributes[i]);
|
|
sbParams.append(",?");
|
}
|
|
sql = String.format("INSERT INTO %s (%s) VALUES (%s)", ltWrap.tableName, sbFields.toString(),
|
sbParams.toString());
|
|
// StringBuffer sbSql = new StringBuffer().append("INSERT INTO ")
|
// .append(tableName).append("(").append(sbFields.toString())
|
// .append(")").append(" VALUES (").append(sbParams.toString());
|
// sql = sbSql.toString();
|
return sql;
|
}
|
|
/**
|
* 批量保存LO对象
|
*
|
* @param los
|
* @return
|
* @throws Throwable
|
* @throws Exception
|
*/
|
public LinkObject[] batchCreateLinkObject(LinkObject[] los) throws Exception, Throwable {
|
|
ServerWithLog4j.logger.info("====batchCreateLinkObject begin====");
|
|
Map<String, List<LinkObject>> mapLOs = new HashMap<String, List<LinkObject>>();
|
|
List<LinkObject> lstLO = null;
|
for (LinkObject lo : los) {
|
|
if (mapLOs.containsKey(lo.ltName))
|
lstLO = mapLOs.get(lo.ltName);
|
else {
|
lstLO = new ArrayList<LinkObject>();
|
mapLOs.put(lo.ltName, lstLO);
|
}
|
lstLO.add(lo);
|
}
|
|
ServerWithLog4j.logger.info("====batchCreateLinkObject Create LinkObjects====");
|
|
LinkTypeWrap ltWrap = null;
|
Iterator<String> its = mapLOs.keySet().iterator();
|
while (its.hasNext()) {
|
String sLType = its.next();
|
|
ltWrap = new LinkTypeWrap();
|
//ltWrap.ltItem = ServerServiceProvider.getOMDService().getLinkTypeService().getLinkType(sLType);
|
ltWrap.ltItem = OMCacheProvider.getLinkType(sLType);
|
ltWrap.tableName = OmdHelper.getLTTableName(sLType);
|
|
Map<String, AttribItem> attrMap = new HashMap<String, AttribItem>();
|
//AttribItem[] items = ServerServiceProvider.getOMDService().getAttributeService().getAttribItemsByNames(ltWrap.ltItem.attributes);
|
AttribItem[] items = OMCacheProvider.getAttributes(ltWrap.ltItem.attributes);
|
for (int i = 0; i < items.length; i++) {
|
attrMap.put(items[i].name, items[i]);
|
}
|
ltWrap.mapAttr = attrMap;
|
|
// 调用单一业务类型的进行批量处理
|
|
String sql = getInitParamSql(ltWrap);
|
|
ServerWithLog4j.logger.debug(sql);
|
|
lstLO = mapLOs.get(sLType);
|
PreparedStatement pst = HibernateSessionFactory.getSessionConnection().prepareStatement(sql);
|
int size = lstLO.size();
|
|
int i = 0;
|
for (i = 0; i < size; i++) {
|
setPreparedStatementParams(pst, ltWrap, lstLO.get(i));
|
pst.addBatch();
|
if ((i + 1) % BATCHSIZE == 0) {
|
pst.executeBatch();
|
}
|
}
|
|
pst.executeBatch();
|
|
if (pst != null) {
|
pst.close();
|
pst = null;
|
}
|
|
// batchCreateLinkObjectNoCheck(lstLO.toArray(new LinkObject[]{}), currentTime);
|
}
|
ServerWithLog4j.logger.info("====batchCreateLinkObject end====");
|
|
return los;
|
}
|
|
public boolean createLinkObjectNotCommint(LinkObject lo) throws Exception, Throwable {
|
String tableName = OmdHelper.getLTTableName(lo.ltName);
|
|
Map<String, AttribItem> attrItemMap = getLOAttributeItemMap(lo.ltName);
|
|
Session session = HibernateSessionFactory.getSession();
|
String sql = getCreateLOSql(lo, tableName, attrItemMap);
|
SQLQuery query = session.createSQLQuery(sql);
|
prepareCreateLOPsmt(query, lo, attrItemMap);
|
query.executeUpdate();
|
return true;
|
}
|
|
/**
|
* 构建LO的创建SQL
|
*
|
* @param bo
|
* @return
|
*/
|
private String getCreateLOSql(LinkObject lo, String tableName, Map<String, AttribItem> attrItemMap) {
|
String sql = "";
|
StringBuffer sbFields = new StringBuffer(
|
"OID,CREATOR,CREATETIME,LASTMODIFIER,LASTMODIFYTIME,F_OID,F_REVISIONOID,F_NAMEOID,F_BTWNAME,"
|
+ "T_OID,T_REVISIONOID,T_NAMEOID,T_BTWNAME,TS");
|
AttributeValue[] attrValList = lo.newAttrValList;
|
for (int i = 0; i < attrValList.length; i++) {
|
if (!attrItemMap.containsKey(attrValList[i].attrName.toLowerCase())) {
|
continue;
|
}
|
sbFields.append(",");
|
sbFields.append(attrValList[i].attrName);
|
}
|
|
String[] allFields = sbFields.toString().split(",");
|
StringBuffer sbValues = new StringBuffer();
|
for (int i = 0; i < allFields.length; i++) {
|
sbValues.append("?");
|
if (i != allFields.length - 1) {
|
sbValues.append(",");
|
}
|
}
|
StringBuffer sbSql = new StringBuffer().append("INSERT INTO ").append(tableName).append("(")
|
.append(sbFields.toString()).append(")").append(" VALUES (").append(sbValues.toString()).append(")");
|
sql = sbSql.toString();
|
return sql;
|
}
|
|
|
/**
|
* 准备创建数据
|
*
|
* @param psmt
|
* @param bo
|
* @throws SQLException
|
*/
|
private void prepareCreateLOPsmt(SQLQuery query, LinkObject lo, Map<String, AttribItem> attrItemMap)
|
throws SQLException {
|
int index = 0;
|
// 对象固有属性
|
|
long curTime = System.currentTimeMillis();
|
Timestamp currentTime = new Timestamp(curTime);
|
if (lo.oid.equals("")) {
|
lo.oid = ObjectUtility.getNewObjectID36(); // modify by zhonggy 2015-1-16
|
}
|
|
String userName = HibernateSessionFactory.getVciSessionInfo().userName;
|
|
if (!StringUtils.isEmpty(userName))
|
lo.creator = userName;
|
|
if (!StringUtils.isEmpty(userName))
|
lo.modifier = userName;
|
|
query.setString(index++, lo.oid);
|
query.setString(index++, lo.creator);
|
query.setTimestamp(index++, currentTime);
|
query.setString(index++, lo.modifier);
|
query.setTimestamp(index++, currentTime);
|
query.setString(index++, lo.fromOid);
|
query.setString(index++, lo.fromRevOid);
|
query.setString(index++, lo.fromNameOid);
|
query.setString(index++, lo.fromBTName);
|
query.setString(index++, lo.toOid);
|
query.setString(index++, lo.toRevOid);
|
query.setString(index++, lo.toNameOid);
|
query.setString(index++, lo.toBTName);
|
query.setTimestamp(index++, currentTime);
|
// 对象特有属性
|
for (int i = 0; i < lo.newAttrValList.length; i++) {
|
if (!attrItemMap.containsKey(lo.newAttrValList[i].attrName.toLowerCase())) {
|
continue;
|
}
|
AttributeValue abValue = lo.newAttrValList[i];
|
AttribItem abItem = attrItemMap.get(abValue.attrName.toLowerCase());
|
setQueryValueAccordingDataType(query, abItem, index++, lo.newAttrValList[i].attrVal);
|
}
|
lo.createTime = curTime;
|
lo.modifyTime = curTime;
|
lo.ts = curTime;
|
}
|
|
/**
|
* 关闭stamement连接
|
*
|
* @param psmt
|
*/
|
private void close(Statement psmt) {
|
try {
|
if (psmt != null) {
|
psmt.close();
|
psmt = null;
|
}
|
} catch (SQLException e) {
|
;
|
}
|
}
|
|
private void close(ResultSet rs) {
|
try {
|
if (rs != null) {
|
rs.close();
|
rs = null;
|
}
|
} catch (SQLException e) {
|
;
|
}
|
}
|
|
/**
|
* 更改LO的属性值
|
*
|
* @param bo
|
* @return
|
* @throws SQLException
|
*/
|
public boolean updateLinkObject(LinkObject lo, Map<String, String> attrMap) throws SQLException {
|
String tableName = OmdHelper.getLTTableName(lo.ltName);
|
|
Session session = HibernateSessionFactory.getSession();
|
|
String sql = getUpdateLOSql(lo, tableName, attrMap);
|
SQLQuery query = session.createSQLQuery(sql);
|
prepareUpdateLOPsmt(query, lo, attrMap);
|
query.executeUpdate();
|
|
return true;
|
}
|
|
/**
|
* 批量更改LO对象属性值
|
*
|
* @param los
|
* @return
|
* @throws Throwable
|
* @throws Exception
|
*/
|
public boolean batchUpdateLinkObject(LinkObject[] los) throws Exception, Throwable {
|
Map<String, Map<String, String>> loAttrMap = new HashMap<String, Map<String, String>>();
|
for (LinkObject lo : los) {
|
if (loAttrMap.get(lo.ltName) == null) {
|
Map<String, String> attrMap = this.getLOAttributeItemDefaultValMap(lo.ltName);
|
loAttrMap.put(lo.ltName, attrMap);
|
}
|
updateLinkObject(lo, loAttrMap.get(lo.ltName));
|
}
|
|
return true;
|
}
|
|
boolean isLOAttribute(String attrName, Map<String, String> attrMap) {
|
if (attrMap.containsKey(attrName.toLowerCase()) || attrMap.containsKey(attrName.toUpperCase())
|
|| LinkConstants.isLinkConstants(attrName.toUpperCase())) {
|
return true;
|
} else {
|
return false;
|
}
|
}
|
|
/**
|
* 准备更改LO属性的SQL语句
|
*
|
* @param lo
|
* @return
|
*/
|
private String getUpdateLOSql(LinkObject lo, String tableName, Map<String, String> attrMap) {
|
String sql = "";
|
|
StringBuffer sbSql = new StringBuffer().append("UPDATE ").append(tableName).append(" set ")
|
.append("LASTMODIFIER = ?").append(", LASTMODIFYTIME = ?");
|
// Set<String> set = LinkConstants.SELECT_NOT_TO_CONSTANTS.keySet();
|
for (int i = 0; i < lo.newAttrValList.length; i++) {
|
/*
|
* if (set.contains(lo.newAttrValList[i].attrName)) { continue; }
|
*/
|
if (!isLOAttribute(lo.newAttrValList[i].attrName, attrMap)) { // modify by zhonggy 2015-1-3
|
continue;
|
}
|
sbSql.append(", ");
|
sbSql.append(lo.newAttrValList[i].attrName).append("=?");
|
}
|
// 2013-12-03增加 更新"TS"逻辑(gaonb)
|
sbSql.append(" ,TS = ?");
|
// 2013-12-03增加 更新"TS"逻辑(gaonb)
|
sbSql.append(" WHERE OID = ? and TS = ?");
|
sql = sbSql.toString();
|
return sql;
|
}
|
|
/**
|
* 准备更改属性值
|
*
|
* @param psmt
|
* @param bo
|
* @throws SQLException
|
*/
|
private void prepareUpdateLOPsmt(SQLQuery query, LinkObject lo, Map<String, String> attrMap) throws SQLException {
|
int index = 0;
|
|
long curTime = System.currentTimeMillis();
|
Timestamp ts = new Timestamp(curTime);
|
// 对象特有属性
|
// query.setString(index++, lo.lastModifier);
|
// 对象保存修改人后台统一处理 modify by zhonggy 2015-1-3
|
|
String userName = HibernateSessionFactory.getVciSessionInfo().userName;
|
if (!StringUtils.isBlank(userName)) {
|
lo.creator = userName;
|
lo.modifier = userName;
|
}
|
|
query.setString(index++, lo.creator);
|
query.setTimestamp(index++, ts);
|
// Set<String> set = LinkConstants.SELECT_NOT_TO_CONSTANTS.keySet();
|
for (int i = 0; i < lo.newAttrValList.length; i++) {
|
/*
|
* if (set.contains(lo.newAttrValList[i].attrName)) { continue; }
|
*/
|
if (!isLOAttribute(lo.newAttrValList[i].attrName, attrMap)) { // modify by zhonggy 2015-1-3
|
continue;
|
}
|
query.setString(index++, lo.newAttrValList[i].attrVal);
|
}
|
|
// 2013-12-03增加 更新"TS"逻辑(gaonb)
|
query.setTimestamp(index++, ts);
|
// 2013-12-03增加 更新"TS"逻辑(gaonb)
|
// 对象固有属性
|
query.setString(index++, lo.oid);
|
query.setTimestamp(index++, new Timestamp(lo.ts));
|
// lo.lastModifier = HibernateSessionFactory.getVciSessionInfo().userName;
|
// //对象保存修改人后台统一处理 modify by zhonggy 2015-1-3
|
lo.ts = curTime;
|
lo.modifyTime = curTime;
|
}
|
|
/**
|
* 删除LO对象
|
*
|
* @param lo
|
* @return
|
* @throws SQLException
|
*/
|
public boolean deleteLinkObject(LinkObject lo) throws SQLException {
|
String tableName = OmdHelper.getLTTableName(lo.ltName);
|
|
Session session = HibernateSessionFactory.getSession();
|
|
String sql = getDeleteLOSql(lo, tableName);
|
SQLQuery query = session.createSQLQuery(sql);
|
prepareDeleteLOPsmt(query, lo);
|
query.executeUpdate();
|
|
return true;
|
}
|
|
/**
|
* 批量删除LO对象
|
*
|
* @param los
|
* @return
|
* @throws SQLException
|
*/
|
public boolean batchDeleteLinkObject(LinkObject[] los) throws SQLException {
|
for (LinkObject lo : los) {
|
deleteLinkObject(lo);
|
}
|
|
return true;
|
}
|
|
/**
|
* 删除处于from端对象管理的Link
|
*
|
* @param los
|
* @param bo
|
*/
|
public void deleteLinksByFromObj(String[] linkTypeNames, BusinessObject bo, int type) {
|
for (int i = 0; i < linkTypeNames.length; i++) {
|
deleteSingleLinkByFromObj(linkTypeNames[i], bo, type);
|
}
|
}
|
|
public void getBatchDeleteLinksByFromObj(String[] linkTypeNames, BusinessObject bo, int type, List<String> sqlList,
|
Map<String, String> tableMap) {
|
String tableName;
|
for (int i = 0; i < linkTypeNames.length; i++) {
|
if (tableMap.get(linkTypeNames[i]) != null) {
|
tableName = tableMap.get(linkTypeNames[i]);
|
} else {
|
tableName = OmdHelper.getLTTableName(linkTypeNames[i]);
|
tableMap.put(linkTypeNames[i], tableName);
|
}
|
sqlList.add(getDeleteSingleLinkSqlByFromObj(tableName, bo, type));
|
}
|
}
|
|
public void deleteSingleLinkByFromObj(String linkTypeName, BusinessObject bo, int type) {
|
String tableName = OmdHelper.getLTTableName(linkTypeName);
|
|
String sql = "";
|
StringBuffer sbSql = new StringBuffer().append("DELETE FROM ").append(tableName).append(" WHERE ");
|
if (type == 1) {
|
sbSql.append("F_OID = '").append(bo.oid);
|
} else if (type == 2) {
|
sbSql.append("F_REVISIONOID = '").append(bo.revisionid);
|
} else if (type == 3) {
|
sbSql.append("F_NAMEOID = '").append(bo.nameoid);
|
}
|
sbSql.append("'");
|
sql = sbSql.toString();
|
SQLQuery query = HibernateSessionFactory.getSession().createSQLQuery(sql);
|
query.executeUpdate();
|
}
|
|
private String getDeleteSingleLinkSqlByFromObj(String tableName, BusinessObject bo, int type) {
|
String sql = "";
|
StringBuffer sbSql = new StringBuffer().append("DELETE FROM ").append(tableName).append(" WHERE ");
|
if (type == 1) {
|
sbSql.append("F_OID = '").append(bo.oid);
|
} else if (type == 2) {
|
sbSql.append("F_REVISIONOID = '").append(bo.revisionid);
|
} else if (type == 3) {
|
sbSql.append("F_NAMEOID = '").append(bo.nameoid);
|
}
|
sbSql.append("'");
|
sql = sbSql.toString();
|
|
return sql;
|
}
|
|
/**
|
* shanch
|
*
|
* @param los
|
* @param bo
|
*/
|
public void deleteLinksbyToObj(String[] linkTypeNames, BusinessObject bo, int type) {
|
for (int i = 0; i < linkTypeNames.length; i++) {
|
deleteSingleLinkbyToObj(linkTypeNames[i], bo, type);
|
}
|
}
|
|
public void getBatchDeleteLinksByToObj(String[] linkTypeNames, BusinessObject bo, int type, List<String> sqlList,
|
Map<String, String> tableMap) {
|
String tableName;
|
for (int i = 0; i < linkTypeNames.length; i++) {
|
if (tableMap.get(linkTypeNames[i]) != null) {
|
tableName = tableMap.get(linkTypeNames[i]);
|
} else {
|
tableName = OmdHelper.getLTTableName(linkTypeNames[i]);
|
tableMap.put(linkTypeNames[i], tableName);
|
}
|
sqlList.add(getDeleteSingleLinkSqlbyToObj(tableName, bo, type));
|
}
|
}
|
|
public void deleteSingleLinkbyToObj(String linkTypeName, BusinessObject bo, int type) {
|
String tableName = OmdHelper.getLTTableName(linkTypeName);
|
|
String sql = "";
|
StringBuffer sbSql = new StringBuffer().append("DELETE FROM ").append(tableName).append(" WHERE ");
|
if (type == 1) {
|
sbSql.append("T_OID = '").append(bo.oid);
|
} else if (type == 2) {
|
sbSql.append("T_REVISIONOID = '").append(bo.revisionid);
|
} else if (type == 3) {
|
sbSql.append("T_NAMEOID = '").append(bo.nameoid);
|
}
|
sbSql.append("'");
|
sql = sbSql.toString();
|
SQLQuery query = HibernateSessionFactory.getSession().createSQLQuery(sql);
|
query.executeUpdate();
|
}
|
|
private String getDeleteSingleLinkSqlbyToObj(String tableName, BusinessObject bo, int type) {
|
String sql = "";
|
StringBuffer sbSql = new StringBuffer().append("DELETE FROM ").append(tableName).append(" WHERE ");
|
if (type == 1) {
|
sbSql.append("T_OID = '").append(bo.oid);
|
} else if (type == 2) {
|
sbSql.append("T_REVISIONOID = '").append(bo.revisionid);
|
} else if (type == 3) {
|
sbSql.append("T_NAMEOID = '").append(bo.nameoid);
|
}
|
sbSql.append("'");
|
sql = sbSql.toString();
|
|
return sql;
|
}
|
|
/**
|
* 构建删除LO的SQL语句
|
*
|
* @param lo
|
* @return
|
*/
|
private String getDeleteLOSql(LinkObject lo, String tableName) {
|
String sql = "";
|
|
StringBuffer sbSql = new StringBuffer().append("DELETE FROM ").append(tableName).append(" WHERE OID = ?");
|
// 2013-12-03 增加TS判断逻辑(gaonb)
|
sql = sbSql.append(" and TS =? ").toString();
|
// 2013-12-03 增加TS判断逻辑(gaonb)
|
return sql;
|
}
|
|
/**
|
* 准备删除LO的数据
|
*
|
* @param psmt
|
* @param bo
|
* @throws SQLException
|
*/
|
private void prepareDeleteLOPsmt(SQLQuery query, LinkObject lo) throws SQLException {
|
int index = 0;
|
|
// 对象固有属性
|
query.setString(index++, lo.oid);
|
// 2013-12-03 删除增加TS判断逻辑
|
query.setTimestamp(index++, new Timestamp(lo.ts));
|
// 2013-12-03 删除增加TS判断逻辑
|
}
|
|
/**
|
* 根据对象ID获取对象的指定属性列值
|
*
|
* @param oid
|
* @param linkTypeName
|
* @param queryColumns
|
* @return
|
* @throws Throwable
|
* @throws Exception
|
*/
|
@SuppressWarnings("deprecation")
|
public LinkObject[] getLinkObjectByBO(BusinessObject bo, String linkTypeName, boolean isFrom)
|
throws Exception, Throwable {
|
String tableName = OmdHelper.getLTTableName(linkTypeName);
|
|
AttribItem[] loAttributes = getLOAttributeItem(linkTypeName);
|
|
String sql = getSelectLOSql(bo.oid, tableName, loAttributes, isFrom);
|
Session session = HibernateSessionFactory.getSession();
|
|
Statement stmt = session.connection().createStatement();
|
ResultSet rs = stmt.executeQuery(sql);
|
ArrayList<LinkObject> los = new ArrayList<LinkObject>();
|
LinkObject lo = null;
|
while (rs.next()) {
|
lo = createLOByRS(rs, loAttributes);
|
lo.ltName = linkTypeName;
|
|
los.add(lo);
|
}
|
close(rs);
|
close(stmt);
|
|
return los.toArray(new LinkObject[0]);
|
}
|
|
private LinkObject createLOByRS(ResultSet rs, AttribItem[] loAttributes) throws SQLException {
|
LinkObject lo = new LinkObject();
|
|
int index = 1;
|
lo.oid = rs.getString(index++);
|
lo.creator = rs.getString(index++);
|
lo.createTime = rs.getTimestamp(index++).getTime();
|
lo.modifier = rs.getString(index++);
|
lo.modifyTime = rs.getTimestamp(index++).getTime();
|
lo.fromOid = rs.getString(index++);
|
lo.fromRevOid = rs.getString(index++);
|
lo.fromNameOid = rs.getString(index++);
|
lo.fromBTName = rs.getString(index++);
|
lo.toOid = rs.getString(index++);
|
lo.toRevOid = rs.getString(index++);
|
lo.toNameOid = rs.getString(index++);
|
lo.toBTName = rs.getString(index++);
|
lo.ts = rs.getTimestamp(index++).getTime();
|
|
ArrayList<AttributeValue> list = new ArrayList<AttributeValue>();
|
for (int i = 0; i < loAttributes.length; i++) {
|
AttributeValue attrVal = new AttributeValue();
|
attrVal.attrName = loAttributes[i].name;
|
attrVal.attrVal = rs.getString(index++);
|
list.add(attrVal);
|
}
|
lo.newAttrValList = new AttributeValue[0];
|
lo.hisAttrValList = list.toArray(new AttributeValue[list.size()]);
|
return lo;
|
}
|
//
|
// /**
|
// * 根据对象ID获取对象的指定属性列值
|
// *
|
// * @param oid
|
// * @param linkTypeName
|
// * @param queryColumns
|
// * @return
|
// * @throws Throwable
|
// * @throws Exception
|
// */
|
// @SuppressWarnings("deprecation")
|
// public LinkObject[] getLinkObjectByToBO(BusinessObject bo, String linkTypeName, boolean isFrom)
|
// throws Exception, Throwable {
|
// String tableName = getLinkTypeTableName(linkTypeName);
|
//
|
// Session session = HibernateSessionFactory.getSession();
|
//
|
// AttribItem[] loAttributes = getLOAttributeItem(linkTypeName);
|
//
|
// String sql = getSelectLOSql(bo.oid, tableName, loAttributes, isFrom);
|
// Statement stmt = session.connection().createStatement();
|
// ResultSet rs = stmt.executeQuery(sql);
|
// ArrayList<LinkObject> los = new ArrayList<LinkObject>();
|
// LinkObject lo = null;
|
// while (rs.next()) {
|
// lo = new LinkObject();
|
// int index = 1;
|
// lo.oid = rs.getString(index++);
|
// lo.creator = rs.getString(index++);
|
// lo.createTime = String.valueOf(rs.getTimestamp(index++));
|
// lo.lastModifier = rs.getString(index++);
|
// lo.lastModifyTime = String.valueOf(rs.getTimestamp(index++));
|
// lo.fromOid = rs.getString(index++);
|
// lo.fromRevisionOid = rs.getString(index++);
|
// lo.fromNameOid = rs.getString(index++);
|
// lo.fromBTMName = rs.getString(index++);
|
// lo.toOid = rs.getString(index++);
|
// lo.toRevisionOid = rs.getString(index++);
|
// lo.toNameOid = rs.getString(index++);
|
// lo.toBTMName = rs.getString(index++);
|
// lo.ts = String.valueOf(rs.getTimestamp(index++));
|
//
|
// lo.linkTypeName = linkTypeName;
|
//
|
// ArrayList<AttributeValue> list = new ArrayList<AttributeValue>();
|
// for (int i = 0; i < loAttributes.length; i++) {
|
// AttributeValue attrVal = new AttributeValue();
|
// attrVal.attrName = loAttributes[i].name;
|
// attrVal.attrVal = rs.getString(index++);
|
// list.add(attrVal);
|
// }
|
// lo.newAttrValList = new AttributeValue[0];
|
// lo.hisAttrValList = list.toArray(new AttributeValue[list.size()]);
|
// los.add(lo);
|
// }
|
// close(rs);
|
// close(stmt);
|
//
|
// return los.toArray(new LinkObject[0]);
|
// }
|
/**
|
* 根据id和链接类型名称获取指定的链接对象
|
*
|
* @param oid
|
* @param linkTypeName
|
* @return
|
*/
|
public LinkObject readLinkObjectById(String oid, String linkTypeName) throws Exception, Throwable {
|
String tableName = OmdHelper.getLTTableName(linkTypeName);
|
|
AttribItem[] loAttributes = getLOAttributeItem(linkTypeName);
|
|
String sql = getSelectLOByIdSql(oid, tableName, loAttributes);
|
Session session = HibernateSessionFactory.getSession();
|
|
Statement stmt = session.connection().createStatement();
|
ResultSet rs = stmt.executeQuery(sql);
|
|
LinkObject lo = new LinkObject();
|
if (rs.next()) {
|
lo = createLOByRS(rs, loAttributes);
|
lo.ltName = linkTypeName;
|
}
|
close(rs);
|
close(stmt);
|
|
return lo;
|
|
// SQLQuery query = session.createSQLQuery(sql);
|
// List<?> queryList = query.list();
|
// if (queryList == null || queryList.size() < 1) {
|
// return new LinkObject();
|
// }
|
//
|
// Object[] array = (Object[]) queryList.get(0);
|
// ServerLinkObject slo = new ServerLinkObject();
|
// String[] queryColumns = slo.getQueryColumnAccordingToSQL(sql, "SELECT", "FROM " + tableName);
|
//
|
// String attrType = "";
|
// int j = 0;
|
// for (int i = 0; i < array.length; i++) {
|
// if (i < array.length - loAttributes.length) {
|
// attrType = "";
|
// } else {
|
// attrType = loAttributes[j++].vtDataType;
|
// }
|
// slo.setAttributeValue(queryColumns[i], attrType, array[i]);
|
// }
|
//
|
// LinkObject lo = slo.getLinkObject();
|
// lo.ltName = linkTypeName;
|
|
// return slo.getLinkObject();
|
}
|
|
/**
|
* 构建查询SQL语句
|
*
|
* @param oid
|
* @param ltName
|
* @param queryColumns
|
* @return
|
*/
|
private String getSelectLOSql(String fromOId, String tableName, AttribItem[] queryColumns, boolean isFrom) {
|
String sql = "";
|
StringBuffer sbFields = new StringBuffer(
|
"SELECT OID,CREATOR,CREATETIME,LASTMODIFIER,LASTMODIFYTIME,F_OID,F_REVISIONOID,F_NAMEOID,F_BTWNAME,"
|
+ "T_OID,T_REVISIONOID,T_NAMEOID,T_BTWNAME,TS");
|
for (int i = 0; i < queryColumns.length; i++) {
|
sbFields.append(",");
|
sbFields.append(queryColumns[i].name);
|
}
|
sbFields.append(" FROM ").append(tableName).append(" p where ");
|
if (isFrom) {
|
sbFields.append("p.F_OID");
|
} else {
|
sbFields.append("p.T_OID");
|
}
|
sbFields.append(" = '").append(fromOId).append("'");
|
sql = sbFields.toString();
|
return sql;
|
}
|
|
/**
|
* 获取根据oid,类型获取链接对象的查询语句
|
*
|
* @param oid
|
* @param tableName
|
* @param queryColumns
|
* @return
|
*/
|
private String getSelectLOByIdSql(String oid, String tableName, AttribItem[] queryColumns) {
|
String sql = "";
|
StringBuffer sbFields = new StringBuffer(
|
"SELECT OID,CREATOR,CREATETIME,LASTMODIFIER,LASTMODIFYTIME,F_OID,F_REVISIONOID,F_NAMEOID,F_BTWNAME,"
|
+ "T_OID,T_REVISIONOID,T_NAMEOID,T_BTWNAME,TS");
|
for (int i = 0; i < queryColumns.length; i++) {
|
sbFields.append(",");
|
sbFields.append(queryColumns[i].name);
|
}
|
sbFields.append(" FROM ").append(tableName).append(" p where p.OID = '").append(oid).append("'");
|
sql = sbFields.toString();
|
return sql;
|
}
|
}
|