package com.norteksoft.wf.engine.web;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.product.web.struts2.CrudActionSupport;
import com.norteksoft.task.base.enumeration.TaskState;
import com.norteksoft.task.entity.WorkflowTask;
import com.norteksoft.wf.engine.core.DefinitionXmlParse;
import com.norteksoft.wf.engine.entity.Document;
import com.norteksoft.wf.engine.entity.DocumentFile;
import com.norteksoft.wf.engine.entity.WorkflowInstance;
import com.norteksoft.wf.engine.service.OfficeManager;
import com.norteksoft.wf.engine.service.TaskService;
import com.norteksoft.wf.engine.service.WorkflowInstanceManager;
import com.norteksoft.wf.engine.service.WorkflowRightsManager;
@Namespace("/engine")
@ParentPackage("default")
@Results( { @Result(name = CrudActionSupport.RELOAD, location = "office", type = "redirectAction") })
public class OfficeAction extends CrudActionSupport<Document> {
private static final long serialVersionUID = 1L;
// private Log log=LogFactory.getLog(CrudActionSupport.class);
private Long id;
private Document document;
private OfficeManager officeManager;
private WorkflowInstanceManager workflowInstanceManager;
private WorkflowRightsManager workflowRightsManager;
private List<Document> offices;
private TaskService taskService;
private String currentUserLonginName;
private String currentUserName;
private String workflowId;
private Long taskId;
private Boolean urgenFlag;//是否应急方案中点进的
private Boolean viewFlag;//是否只是查看正文
@Autowired
public void setWorkflowRightsManager(
WorkflowRightsManager workflowRightsManager) {
this.workflowRightsManager = workflowRightsManager;
}
@Autowired
public void setTaskService(TaskService taskService) {
this.taskService = taskService;
}
@Override
public String delete() throws Exception {
return null;
}
//上传正文
@Override
public String input() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper)request;
File filePath = wrapper.getFiles("Filedata")[0];
String fileName = request.getParameter("Filename");
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));
Document document = new Document();
document.setFileSize(bis.available());
document.setFileName(fileName);
document.setCreatedTime(new Date());
if(request.getParameter("taskId") != null){
long taskId = Long.valueOf(request.getParameter("taskId"));
WorkflowTask task = taskService.getTask(taskId);
document.setTaskMode(task.getProcessingMode());
document.setTaskName(task.getName());
document.setWorkflowId(task.getProcessInstanceId());
document.setCompanyId(task.getCompanyId());
document.setCreator(task.getTransactor());
document.setCreatorName(task.getTransactorName());
}
String fileType = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
if(!("pdf").equals(fileType) ){
fileType = "."+fileType;
}
document.setFileType(fileType);
officeManager.saveDocument(document);
DocumentFile file = new DocumentFile();
byte[] content=null;
try {
content = new byte[bis.available()];
bis.read(content);
} catch (IOException e) {
e.printStackTrace();
}finally{
bis.close();
}
file.setFileBody(content);
file.setDocumentId(document.getId());
file.setCompanyId(document.getCompanyId());
officeManager.saveDocumentFile( file);
return "DOCUMENTID:"+document.getId();
}
//显示正文列表
@Override
public String list() throws Exception {
return SUCCESS;
}
@Override
protected void prepareModel() throws Exception {
if(id==null){
document = new Document();
}else{
document = officeManager.getDocument(id);
}
}
@Override
public String save() throws Exception {
//TODO
return null;
}
public void prepareCreateOffice() throws Exception{
prepareModel();
}
//新建word/excel
public String createOffice() throws Exception {
WorkflowInstance instance = null;
WorkflowTask task = null;
if(id==null){
task = taskService.getTask(taskId);
instance = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId());
document.setTaskName(task.getName());
document.setTaskMode(task.getProcessingMode());
document.setWorkflowId(instance.getProcessInstanceId());
document.setCreator(ContextUtils.getLoginName());
document.setCreatorName(ContextUtils.getUserName());
document.setCompanyId(ContextUtils.getCompanyId());
document.setEditType("-1,0,0,0,0,0,1,1");//允许编辑,不显示和保留痕迹,允许批注
document.setPrintSetting(true);
document.setDownloadSetting(true);
if(document.getFileType().equalsIgnoreCase("pdf")){
return "pdf";
}else{
String template = DefinitionXmlParse.getOfficialTextTemplate(instance.getProcessDefinitionId(),task.getName());
if(StringUtils.isNotEmpty(template))document.setTemplateId(Long.valueOf(StringUtils.substringBetween(template, "[", "]")));
setOfficeRight(document,instance,task);
return "view";
}
}else{
if(taskId==null){
instance = workflowInstanceManager.getWorkflowInstance(document.getWorkflowId());
task=taskService.getTask(instance.getFirstTaskId());
}else{
task = taskService.getTask(taskId);
instance = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId());
}
setOfficeRight(document,instance,task);
if(document.getFileType().equalsIgnoreCase("pdf")){
return "pdf";
}else{
return "view";
}
}
}
private void setOfficeRight(Document document ,WorkflowInstance instance,WorkflowTask task){
StringBuilder editType = new StringBuilder("-1");// "-1,0,1,1,0,0,1,1";//查看保留痕迹
if(urgenFlag!=null && urgenFlag){
editType.append(",0,1,1,0,0,1,1");
document.setEditType(editType.toString());
document.setPrintSetting(true);
document.setDownloadSetting(true);
}else if(viewFlag!=null&&viewFlag){
editType.append(",1,0,0,0,0,1,1");
document.setEditType(editType.toString());
document.setPrintSetting(false);
document.setDownloadSetting(false);
}else{
//是否保户文档
if(TaskState.WAIT_TRANSACT.getIndex().equals(task.getActive())&&workflowRightsManager.officialTextEditRight(task)){
editType.append(",0");
}else{
editType.append(",1");
}
//是否显示痕迹
if(workflowRightsManager.officialTextViewTrace(task)){
editType.append(",1");
}else{
editType.append(",0");
}
//是否保留痕迹
if(workflowRightsManager.officialTextRetainTrace(task)){
editType.append(",1");
}else{
editType.append(",0");
}
editType.append(",0,0,1,1");
document.setEditType(editType.toString());
boolean downloadSetting = workflowRightsManager.officialTextDownloadRight(task);
boolean printSetting = workflowRightsManager.officialTextPrintRight(task);
document.setPrintSetting(printSetting);
document.setDownloadSetting(downloadSetting);
}
}
/**
* 删除正文
*/
public String deleteText() throws Exception{
officeManager.deleteText(id);
//renderText("ok");
return list();
}
public String webOfficeServer() throws Exception{
return null;
}
//上传文件
public String upload() throws Exception{
//companyId = ContextUtils.getCompanyId();
return "upload";
}
public Document getModel() {
return document;
}
@Required
public void setOfficeManager(OfficeManager officeManager) {
this.officeManager = officeManager;
}
@Required
public void setWorkflowInstanceManager(
WorkflowInstanceManager workflowInstanceManager) {
this.workflowInstanceManager = workflowInstanceManager;
}
public List<Document> getOffices() {
return offices;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getWorkflowId() {
return workflowId;
}
public void setWorkflowId(String workflowId) {
this.workflowId = workflowId;
}
public Long getTaskId() {
return taskId;
}
public void setTaskId(Long taskId) {
this.taskId = taskId;
}
public String getCurrentUserLonginName() {
currentUserLonginName = ContextUtils.getLoginName();
return currentUserLonginName;
}
public String getCurrentUserName() {
currentUserName=ContextUtils.getUserName();
return currentUserName;
}
public void setViewFlag(Boolean viewFlag) {
this.viewFlag = viewFlag;
}
public void setUrgenFlag(Boolean urgenFlag) {
this.urgenFlag = urgenFlag;
}
}