package com.oa.dao.impl;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import com.oa.dao.DocumentDao;
import com.oa.extend.JbpmCore;
import com.oa.listenner.Persistence;
import com.oa.model.Document;
import com.oa.model.DocumentProperty;
import com.oa.model.Users;
import com.oa.model.WorkFlow;
@Component("documentDao")
public class DocumentDaoImp implements DocumentDao {
private SuperDao superDao;
private JbpmCore jbpmCore;
/*
* public void addDocument(Document document, int workflowId, int userId) {
* // TODO Auto-generated method stub WorkFlow wf = (WorkFlow)
* superDao.select(WorkFlow.class, workflowId); Users users = (Users)
* superDao.select(Users.class, userId);
*
* Long processInstance = jbpmCore.addProcessInstance(wf.getName(),
* document); System.err.println("processInstance " + processInstance);
*
* // System.err.println(wf.toString()); //
* System.err.println(users.toString()); document.setWorkFlow(wf);
* document.setUsers(users); document.setProcessInstanceId(processInstance);
* document.setStatus(Document.New); document.setCreateTime(new Date());
* superDao.add(document); }
*/
// 添加公文
public Serializable addDocument(Document document, int workflowId, int userId, List<DocumentProperty> props) {
// 保存公文信息
document.setWorkFlow((WorkFlow) jbpmCore.getJbpmTemplate().getHibernateTemplate().load(WorkFlow.class, workflowId));
document.setUsers((Users) jbpmCore.getJbpmTemplate().getHibernateTemplate().load(Users.class, userId));
document.setStatus(Document.New);
document.setCreateTime(new Date());
String key = Persistence.setVariable((Serializable) props);
if (props != null) {
document.setTypePersist(key + "|properties");
}
// 设置其它属性
// document.setPropertiesMap(props);
Serializable flag = jbpmCore.getJbpmTemplate().getHibernateTemplate().save(document);
System.out.println("=------------========");
System.out.println(document.toString() + " documentDaoImp addDocument ");
if (props != null) {
for (DocumentProperty property : props) {
if (property != null) {
// 防止删除不掉公文
property.setDocument(document);
superDao.add(property);
}
}
}
// 添加流程实例
long processInstanceId = jbpmCore.addProcessInstance(document.getWorkFlow().getName(), document, props);
// 绑定流程实例的标识到公文对象
document.setProcessInstanceId(processInstanceId);
jbpmCore.getJbpmTemplate().getHibernateTemplate().update(document);
return flag;
}
public void deleteDocuments(Class clazz, String[] ids, String hql) {
superDao.deleteList(clazz, ids, hql);
}
public void updateDocument(Document document, int workFLowId, int userId) {
// TODO Auto-generated method stub
}
public Document getDocument(Serializable id) {
return (Document) superDao.select(Document.class, id);
}
// 查找正在等待审批的公文=-=-=-=-=-======================-------------------------------==============
public List<Document> searchPageApprovingDocuments(String username, int index) {
// System.out.println(username+"===--approving ");
List docs = jbpmCore.searchMyTaskList(username);
// System.out.println("DocumentDaoImp 待审公文"+docs.size());
// System.out.println(docs.size()+"DocumentDaoImp sdfsaf ");
if (docs.size() == 0 || docs == null) {
return null;
}
String hql = "from Document d where d.id in (:ids)";
String sign = "ids";
// return objectToDocuments(superDao.getChoice(docs, hql, sign));
return objectToDocuments(superDao.getPageChoice(docs, hql, sign, index));
}
public List<Document> searchAllApprovingDocuments(String username) {
// List<Integer> docs = jbpmCore.seachMyTaskList(username);
List<Integer> docs = jbpmCore.searchMyTaskList(username);
if (docs.size() == 0 || docs == null) {
return null;
}
// System.out.println(docs.size()+"DocumentDaoImp sdfsaf ");
String hql = "from Document d where d.id in (:ids)";
String sign = "ids";
return objectToDocuments(superDao.getChoice(docs, hql, sign));
}
// 查找用户已审批过全部的公文
public List<Document> searchAllApprovedDocuments(String CompleteHql) {
return objectToDocuments(superDao.getAllObjects(CompleteHql));
}
// 分页显示审批过的公文
public List<Document> searchPageApprovedDocument(int index, String CompleteHql) {
return objectToDocuments(superDao.getpage(index, CompleteHql));
}
private List<Document> objectToDocuments(List<Object> lists) {
List<Document> documents = new ArrayList<Document>();
for (Object o : lists) {
documents.add((Document) o);
}
return documents;
}
public void deleteDocument(Document document) {
superDao.delete(document);
}
/**
* 我的所有公文===================
*/
public List<Document> searchAllMyDocument(Class clazz, int userId, boolean finished) {
if (finished == false) {
String hql = "from Document d where d.users.id =" + userId;
return objectToDocuments(superDao.getAllObjects(hql));
} else {
String hql = "from Document d where d.users.id =" + userId + " and d.status='结束'";
return objectToDocuments(superDao.getAllObjects(hql));
}
}
public List<Document> searchPageDocument(Class clazz, int userId, int index, boolean finished) {
if (finished == false) {
String hql = "from Document d where d.users.id =" + userId + " and d.status!='结束' ";
return objectToDocuments(superDao.getpage(index, hql));
} else {
String hql = "from Document d where d.users.id =" + userId + " and d.status='结束'";
System.out.println(hql + " ================================ finish document");
return objectToDocuments(superDao.getpage(index, hql));
}
}
// 查找用户创建的所有公文
public List<Document> getAllDocuments(Class clazz, String hql) {
return objectToDocuments(superDao.getAllObjects(clazz, hql));
}
// 分页查找用户创建的所有公文
public List<Document> getPageDocuments(int index, Class clazz, String hql) {
return objectToDocuments(superDao.getPage(index, clazz, hql));
}
/**
* --------------------=======================
*/
public List searchNextStep(int documentId, String userId) {
Document doc = (Document) superDao.select(Document.class, documentId);
return jbpmCore.searchNextTransitions(doc.getProcessInstanceId(), userId);
}
// 提交到流程
public void submitToWorkFlow(int userId, int documentId, String transitionName) {
// Users user = (Users)getHibernateTemplate().load(User.class, userId);
Users user = (Users) superDao.select(Users.class, userId);
String username = user.getAccount();
Document document = (Document) superDao.select(Document.class, documentId);
long processInstanceId = document.getProcessInstanceId();
String status = jbpmCore.nextStep(processInstanceId, username, transitionName);
if ("结束".equals(status)) {
String key = document.getTypePersist();
if (key != null) {
key = key.replaceAll("(.*)\\|.*", "$1");
Object object = Persistence.getVariable(key);
superDao.saveOrUpdate(object);
Persistence.removeVariable(key);
}
}
document.setStatus(status);
superDao.update(document);
}
public SuperDao getSuperDao() {
return superDao;
}
@Resource
public void setSuperDao(SuperDao superDao) {
this.superDao = superDao;
}
public JbpmCore getJbpmCore() {
return jbpmCore;
}
@Resource
public void setJbpmCore(JbpmCore jbpmCore) {
this.jbpmCore = jbpmCore;
}
}