import org.apache.ojb.broker.query.Criteria; //導入方法依賴的package包/類
/**
* @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionLockDao#getOrphanedPositionLocks(java.lang.String)
*/
public List getOrphanedPositionLocks(String lockUnivId) {
Criteria criteria = new Criteria();
if (StringUtils.isNotBlank(lockUnivId)) {
criteria.addEqualTo(BCPropertyConstants.POSITION_LOCK_USER_IDENTIFIER, lockUnivId);
}
else {
criteria.addNotNull(BCPropertyConstants.POSITION_LOCK_USER_IDENTIFIER);
}
ReportQueryByCriteria query = QueryFactory.newReportQuery(BudgetConstructionPosition.class, criteria);
query.addOrderByAscending(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR);
query.addOrderByAscending(BCPropertyConstants.POSITION_NUMBER);
List allPositionLocks = (List) getPersistenceBrokerTemplate().getCollectionByQuery(query);
List orphanedPositionLocks = new ArrayList();
for (BudgetConstructionPosition position : allPositionLocks) {
Criteria criteria2 = new Criteria();
criteria2.addEqualTo(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, position.getUniversityFiscalYear());
criteria2.addEqualTo(BCPropertyConstants.POSITION_NUMBER, position.getPositionNumber());
Criteria subCrit = new Criteria();
subCrit.addEqualToField(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, Criteria.PARENT_QUERY_PREFIX + KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR);
subCrit.addEqualToField(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, Criteria.PARENT_QUERY_PREFIX + KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
subCrit.addEqualToField(KFSPropertyConstants.ACCOUNT_NUMBER, Criteria.PARENT_QUERY_PREFIX + KFSPropertyConstants.ACCOUNT_NUMBER);
subCrit.addEqualToField(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, Criteria.PARENT_QUERY_PREFIX + KFSPropertyConstants.SUB_ACCOUNT_NUMBER);
subCrit.addEqualTo(BCPropertyConstants.APPOINTMENT_FUNDING_LOCK_USER_ID, position.getPositionLockUserIdentifier());
ReportQueryByCriteria subQuery = QueryFactory.newReportQuery(BudgetConstructionFundingLock.class, subCrit);
subQuery.setAttributes(new String[] { "1" });
criteria2.addExists(subQuery);
List appointmentFundingLocks = (List) getPersistenceBrokerTemplate().getCollectionByQuery(QueryFactory.newQuery(PendingBudgetConstructionAppointmentFunding.class, criteria2));
if (appointmentFundingLocks == null || appointmentFundingLocks.isEmpty()) {
orphanedPositionLocks.add(position);
}
}
return orphanedPositionLocks;
}