📄 documentmanagerimpl.java
字号:
package com.bjsxt.oa.managers.impl;
import java.util.Date;
import java.util.List;
import com.bjsxt.oa.PagerModel;
import com.bjsxt.oa.managers.DocumentManager;
import com.bjsxt.oa.managers.SystemException;
import com.bjsxt.oa.managers.WorkflowManager;
import com.bjsxt.oa.model.ApproveInfo;
import com.bjsxt.oa.model.Document;
import com.bjsxt.oa.model.User;
public class DocumentManagerImpl extends AbstractManager implements
DocumentManager {
private WorkflowManager workflowManager;
public void addDocument(Document document, int creator) {
if(document.getWorkflow() == null){
throw new SystemException("公文对应的流程不能为空!");
}
if(creator == 0){
throw new SystemException("创建者不能为空!");
}
document.setCreator((User)getHibernateTemplate().load(User.class, creator));
document.setCreateTime(new Date());
document.setStatus(Document.STATUS_NEW);
getHibernateTemplate().save(document);
//根据公文标识,创建流程实例
workflowManager.addProcessInstance(document.getId());
}
//记录审批信息
public void addOrUpdateApproveInfo(int documentId, int approverId,
String approveInfo) {
ApproveInfo ai = findApproveInfo(documentId,approverId);
if(ai == null){
ai = new ApproveInfo();
ai.setApproveDoc(
(Document)getHibernateTemplate().load(Document.class, documentId)
);
ai.setApprover(
(User)getHibernateTemplate().load(User.class, approverId)
);
ai.setApproveInfo(approveInfo);
ai.setApproveTime(new Date());
getHibernateTemplate().save(ai);
return;
}
//能找到相关的对象,则直接更新即可
ai.setApproveInfo(approveInfo);
getHibernateTemplate().update(ai);
}
public void delDocument(int documentId) {
//先删除工作流引擎中对应的流程实例
workflowManager.delProcessInstance(documentId);
//再删除公文对象
getHibernateTemplate().delete(
getHibernateTemplate().load(Document.class, documentId)
);
}
/**
* 查找经过用户审批的记录(本方法主要用于打开审批界面的时候,如果用户已经审批,应该
* 加载其前一次审批的信息,以便用户能够修改其审批信息)
*
* 即尚未提交的用户审批记录,只可能是0或1条记录
*/
public ApproveInfo findApproveInfo(int documentId, int approverId) {
return (ApproveInfo)getSession()
.createQuery(
"select ai from ApproveInfo ai where " +
"ai.approver.id = ? and ai.approveDoc.id = ? " +
"and ai.submit = ? "
)
.setParameter(0, approverId)
.setParameter(1, documentId)
.setParameter(2, false)
.uniqueResult();
}
//查看是否已有审批记录(而且已提交)
private long findApproveInfoSize(int documentId,int approverId){
return (Long)getSession()
.createQuery(
"select count(*) from ApproveInfo ai where " +
"ai.approver.id = ? and ai.approveDoc.id = ? " +
"and ai.submit = ? "
)
.setParameter(0, approverId)
.setParameter(1, documentId)
.setParameter(2, true)
.uniqueResult();
}
//查找某个特定的文档
public Document findDocument(int documentId) {
return (Document)getHibernateTemplate().load(Document.class, documentId);
}
//查看某个文档的审批历史
public List searchApproveHistory(int documentId) {
return getHibernateTemplate().find("from ApproveInfo ai where ai.approveDoc.id = ?", documentId);
}
//我的公文列表
public PagerModel searchMyDocuments(int userId) {
return searchPaginated("select d from Document d where d.creator.id = ?", userId);
}
//经我审批的公文列表
public PagerModel searchProcessedDocuments(int userId) {
/**
* 1、必须是已经提交的审批记录
* 2、同一个文档,只需要列出一条记录即可
*/
return searchPaginated("select distinct ai.approveDoc from ApproveInfo ai where ai.submit = true and ai.approver.id = ?",userId);
}
//搜索正在等待审批的公文
public List searchProcessingDocuments(int userId) {
User user = (User)getHibernateTemplate().load(User.class, userId);
List docIds = workflowManager.searchCurrentProcessInstances(user.getUsername());
if(docIds == null || docIds.isEmpty()){
return null;
}
return getSession()
.createQuery("select d from Document d where d.id in (:ids)")
.setParameterList("ids", docIds)
.list();
}
/**
* 提交到流程
* 1、如果不是新创建的公文,而且尚未审批,则不能提交
* 2、如果已经提交,则不能重复提交
*/
public void submitToWorkflow(int documentId, int userId,String transitionName) {
//首先看是否已有审批记录
ApproveInfo info = findApproveInfo(documentId,userId);
/**
* 没有未提交的审批记录,有两种可能:
* 1、已有审批记录,但是审批记录已经提交,这种情况下,需要抛出异常,因为不允许重复提交
* 2、尚未有任何审批记录,这种情况属于第一次提交到流程,这时候,不需要创建审批记录,
* 但需要更改公文的状态(即将状态更改为当前节点!即提交之后的节点名称,我们可以在
* workflowManager中改变这个名称)
*/
if(info == null){
//如果已有审批记录,即重复提交
if(findApproveInfoSize(documentId, userId) > 0){
throw new SystemException("文档已提交,您不能重复提交相同的文档");
}
Document document = (Document)getHibernateTemplate().load(Document.class, documentId);
//没有审批记录,而且又不是第一次提交,则应该抛出异常
if(!document.getStatus().equals(Document.STATUS_NEW)){
throw new SystemException("您尚未审批,无法执行提交操作!");
}
}else{
//改为已提交
info.setSubmit(true);
getHibernateTemplate().update(info);
}
//让流程流向下一步
workflowManager.flowToNextStep(documentId, transitionName);
}
public void setWorkflowManager(WorkflowManager workflowManager) {
this.workflowManager = workflowManager;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -