DocumentAction.java
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:11k
源码类别:

OA系统

开发平台:

Java

  1. package com.bjsxt.oa.web.actions;
  2. import java.util.Date;
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Set;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import org.apache.commons.beanutils.BeanUtils;
  11. import org.apache.commons.beanutils.ConvertUtils;
  12. import org.apache.struts.action.ActionForm;
  13. import org.apache.struts.action.ActionForward;
  14. import org.apache.struts.action.ActionMapping;
  15. import org.apache.struts.upload.FormFile;
  16. import com.bjsxt.oa.managers.DocumentManager;
  17. import com.bjsxt.oa.managers.FormManager;
  18. import com.bjsxt.oa.managers.SystemException;
  19. import com.bjsxt.oa.managers.WorkflowManager;
  20. import com.bjsxt.oa.model.ApproveInfo;
  21. import com.bjsxt.oa.model.Document;
  22. import com.bjsxt.oa.model.DocumentProperty;
  23. import com.bjsxt.oa.model.FieldType;
  24. import com.bjsxt.oa.model.FlowForm;
  25. import com.bjsxt.oa.model.FormField;
  26. import com.bjsxt.oa.web.forms.DocumentActionForm;
  27. public class DocumentAction extends BaseAction {
  28. private DocumentManager documentManager;
  29. private WorkflowManager workflowManager;
  30. private FormManager formManager;
  31. public void setDocumentManager(DocumentManager documentManager) {
  32. this.documentManager = documentManager;
  33. }
  34. public void setWorkflowManager(WorkflowManager workflowManager) {
  35. this.workflowManager = workflowManager;
  36. }
  37. //公文管理主界面,显示我的公文列表
  38. @Override
  39. protected ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  40. request.setAttribute("pm", documentManager.searchMyDocuments(currentUser(request).getId()));
  41. return mapping.findForward("index");
  42. }
  43. /**
  44.  * 已审公文列表,显示由当前登录人员审核的公文列表
  45.  * @param mapping
  46.  * @param form
  47.  * @param request
  48.  * @param response
  49.  * @return
  50.  * @throws Exception
  51.  */
  52. public ActionForward approvedList(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  53. request.setAttribute("pm", documentManager.searchApprovedDocuments(currentUser(request).getId()));
  54. return mapping.findForward("approved_list");
  55. }
  56. /**
  57.  * 待审公文列表,显示等待当前登录人员审核的公文列表
  58.  * @param mapping
  59.  * @param form
  60.  * @param request
  61.  * @param response
  62.  * @return
  63.  * @throws Exception
  64.  */
  65. public ActionForward approvingList(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  66. request.setAttribute("documents", documentManager.searchApprovingDocuments(currentUser(request).getId()));
  67. return mapping.findForward("approving_list");
  68. }
  69. /**
  70.  * 在待审公文列表上,针对某个文档,可以点击打开审批界面,对此文档进行审批
  71.  * @param mapping
  72.  * @param form
  73.  * @param request
  74.  * @param response
  75.  * @return
  76.  * @throws Exception
  77.  */
  78. public ActionForward approveInput(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  79. return mapping.findForward("approve_input");
  80. }
  81. /**
  82.  * 用户输入审批信息之后,点击保存,对文档进行审批操作
  83.  * @param mapping
  84.  * @param form
  85.  * @param request
  86.  * @param response
  87.  * @return
  88.  * @throws Exception
  89.  */
  90. public ActionForward approve(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  91. DocumentActionForm daf = (DocumentActionForm)form;
  92. String comment = daf.getApproveInfo();
  93. int documentId = daf.getId();
  94. int approverId = currentUser(request).getId();
  95. ApproveInfo approveInfo = new ApproveInfo();
  96. approveInfo.setApproveTime(new Date());
  97. approveInfo.setComment(comment);
  98. documentManager.addApproveInfo(approveInfo, documentId, approverId);
  99. return mapping.findForward("pub_add_success");
  100. }
  101. /**
  102.  * 在我的公文或待审公文列表上,点击提交,可打开提交的选择界面
  103.  * 在这个界面上,列出下一步所有可选的步骤,用户可以选择其中一个
  104.  * 步骤进行提交操作。系统将按照用户的选择转移到下一个节点
  105.  * @param mapping
  106.  * @param form
  107.  * @param request
  108.  * @param response
  109.  * @return
  110.  * @throws Exception
  111.  */
  112. public ActionForward submitInput(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  113. DocumentActionForm daf = (DocumentActionForm)form;
  114. Document doc = documentManager.findDocument(daf.getId());
  115. List transitions = workflowManager.searchNextTransitions(currentUser(request).getUsername(),doc.getProcessInstanceId());
  116. request.setAttribute("steps", transitions);
  117. return mapping.findForward("submit_input");
  118. }
  119. /**
  120.  * 用户选择了其中一个步骤,点击提交
  121.  * @param mapping
  122.  * @param form
  123.  * @param request
  124.  * @param response
  125.  * @return
  126.  * @throws Exception
  127.  */
  128. public ActionForward submit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  129. DocumentActionForm daf = (DocumentActionForm)form;
  130. // workflowManager.flowToNextStep(
  131. // currentUser(request).getUsername(), 
  132. // doc.getProcessInstanceId(), 
  133. // daf.getTransitionName());
  134. //
  135. documentManager.submitToWorkflow(currentUser(request).getId(), daf.getId(), daf.getTransitionName());
  136. return mapping.findForward("pub_add_success");
  137. }
  138. /**
  139.  * 查看公文的审批历史
  140.  * @param mapping
  141.  * @param form
  142.  * @param request
  143.  * @param response
  144.  * @return
  145.  * @throws Exception
  146.  */
  147. public ActionForward approvedHistory(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  148. DocumentActionForm daf = (DocumentActionForm)form;
  149. request.setAttribute("historys", documentManager.searchApproveInfos(daf.getId()));
  150. return mapping.findForward("approve_history");
  151. }
  152. public ActionForward del(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  153. DocumentActionForm daf = (DocumentActionForm)form;
  154. documentManager.delDocument(daf.getId());
  155. return mapping.findForward("pub_del_success");
  156. }
  157. /**
  158.  * 点击添加公文的时候,需要选择相应的流程,此界面列出所有的流程以供选择
  159.  * @param mapping
  160.  * @param form
  161.  * @param request
  162.  * @param response
  163.  * @return
  164.  * @throws Exception
  165.  */
  166. public ActionForward selectFlow(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  167. request.setAttribute("workflows", workflowManager.searchAllWorkflows());
  168. return mapping.findForward("select_flow");
  169. }
  170. /**
  171.  * 选择了流程之后(即点击流程名称),需要打开公文录入界面
  172.  * @param mapping
  173.  * @param form
  174.  * @param request
  175.  * @param response
  176.  * @return
  177.  * @throws Exception
  178.  */
  179. public ActionForward addInput(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  180. return mapping.findForward("add_input");
  181. }
  182. /**
  183.  * 添加公文的操作
  184.  * @param mapping
  185.  * @param form
  186.  * @param request
  187.  * @param response
  188.  * @return
  189.  * @throws Exception
  190.  */
  191. public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  192. DocumentActionForm daf = (DocumentActionForm)form;
  193. Document document = new Document();
  194. BeanUtils.copyProperties(document, daf);
  195. //处理Map的数据
  196. //将ActionForm中的Map的数据,按照表单定义对应的类型来进行转换,并设置到document对象即可
  197. if(daf.getProps().isEmpty()){
  198. document.setProps(null);
  199. }else{
  200. int workflowId = daf.getWorkflowId();
  201. //流程对应的表单定义
  202. FlowForm flowForm = formManager.findForm(workflowId);
  203. if(flowForm == null){
  204. document.setProps(null);
  205. }else{
  206. Map documentProps = new HashMap();
  207. //拿到表单定义对应的所有的域定义
  208. Set fields = flowForm.getFields();
  209. for (Iterator iter = fields.iterator(); iter.hasNext();) {
  210. FormField field = (FormField) iter.next();
  211. String propertyName = field.getFieldName();
  212. FieldType propertyType = field.getFieldType();
  213. //根据表单的属性名称,从Map中将界面上传过来的原始值拿出来
  214. Object source = daf.getProps().get(propertyName);
  215. Object target = null;
  216. if(source != null){
  217. //对于输入的字符串
  218. if(source instanceof String && !propertyType.getType().equals("java.io.File")){
  219. Class targetClass = Class.forName(propertyType.getType());
  220. //利用ConvertUtils工具,将从界面上传过来的字符串
  221. //转换为FormFiled对应的FieldType所指定类型的对象
  222. target = ConvertUtils.convert((String)source, targetClass);
  223. }
  224. //如果表单域是上传文件
  225. if(propertyType.getType().equals("java.io.File")){
  226. //注意:如果界面上传的是文件,struts可以自动转换为FormFile
  227. //类型的对象!!!!
  228. FormFile ff  = (FormFile)source;
  229. target = ff.getFileData();
  230. }
  231. //现在,需要将target的值赋予document对象
  232. if(target == null){
  233. throw new SystemException("无法处理输入的值!");
  234. }
  235. DocumentProperty dp = new DocumentProperty();
  236. String type = propertyType.getType();
  237. if(type.equals("java.io.File")){
  238. dp.setJava_io_File((byte[])target);
  239. }
  240. if(type.equals("java.lang.Integer")){
  241. dp.setJava_lang_Integer((Integer)target);
  242. }
  243. if(type.equals("java.lang.String")){
  244. dp.setJava_lang_String((String)target);
  245. }
  246. documentProps.put(propertyName, dp);
  247. }
  248. }
  249. //将documentProps对象赋予document对象的props属性
  250. document.setProps(documentProps);
  251. }
  252. }
  253. if(daf.getContentFile() != null){
  254. document.setContent(daf.getContentFile().getFileData());
  255. }
  256. documentManager.addDocument(document, daf.getWorkflowId(), currentUser(request).getId());
  257. return mapping.findForward("pub_add_success");
  258. }
  259. //下载公文附件
  260. public ActionForward download(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  261. DocumentActionForm daf = (DocumentActionForm)form;
  262. Document document = documentManager.findDocument(daf.getId());
  263. response.reset();
  264. response.setContentType("application/x-download;charset=GBK");
  265. response.setHeader("Content-Disposition", "attachment;filename=temp.doc");
  266. response.getOutputStream().write(document.getContent());
  267. response.getOutputStream().flush();
  268. response.getOutputStream().close();
  269. //指示struts,不要对返回值进行处理
  270. return null;
  271. }
  272. public void setFormManager(FormManager formManager) {
  273. this.formManager = formManager;
  274. }
  275. }