package org.fireflow.demo.biztrip.servlet; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.servlet.RequestDispatcher; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.fireflow.client.WorkflowSession; import org.fireflow.client.WorkflowSessionFactory; import org.fireflow.client.WorkflowStatement; import org.fireflow.demo.biztrip.dao.IBusinessTripBasicInfoDao; import org.fireflow.demo.biztrip.entity.BusinessTripBasicInfo; import org.fireflow.demo.common.dao.ICommonApprovalInfoDao; import org.fireflow.demo.fireflow_ext.WorkflowUtil; import org.fireflow.engine.context.RuntimeContext; import org.fireflow.engine.modules.ousystem.User; import org.fireflow.web_client.util.Constants; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionTemplate; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; /** * Servlet implementation class BusinessTripServlet */ public class BusinessTripServlet extends HttpServlet { private static final long serialVersionUID = 1L; public static final String CREATE_BIZ_TRIP_APPLICATION = "CREATE_BIZ_TRIP_APPLICATION"; protected WebApplicationContext springCtx = null; protected RuntimeContext fireContext = null; protected TransactionTemplate tramsactionTemplate = null; protected ICommonApprovalInfoDao commonApprovalInfoDao = null; protected IBusinessTripBasicInfoDao businessTripBasicInfoDao = null; /** * @see HttpServlet#HttpServlet() */ public BusinessTripServlet() { super(); // TODO Auto-generated constructor stub } /** * @see Servlet#init(ServletConfig) */ public void init(ServletConfig config) throws ServletException { super.init(config); springCtx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); fireContext = (RuntimeContext)springCtx.getBean("fireflowRuntimeContext"); tramsactionTemplate = (TransactionTemplate)springCtx.getBean("transactionTemplate"); commonApprovalInfoDao = (ICommonApprovalInfoDao)springCtx.getBean("commonApprovalInfoDao"); businessTripBasicInfoDao = (IBusinessTripBasicInfoDao)springCtx.getBean("businessTripBasicInfoDao"); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String actionType = request.getParameter("actionType"); if (actionType!=null && actionType.trim().equals(BusinessTripServlet.CREATE_BIZ_TRIP_APPLICATION)){ createBizTripApplication(request,response); } } /** * 创建出差申请 * @param request * @param response * @throws ServletException * @throws IOException */ @SuppressWarnings("unchecked") protected void createBizTripApplication(final HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { final BusinessTripBasicInfo basicInfo = buildBusinessTripBasicInfo(request); tramsactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status) { businessTripBasicInfoDao.create(basicInfo); //******************************************// //******* Fire workflow 相关的代码 ********// //******* (运行流程实例) ********// //******************************************// final User u = getCurrentUser(request); final WorkflowSession workflowSession = WorkflowSessionFactory .createWorkflowSession(fireContext, u); WorkflowStatement stmt = workflowSession.createWorkflowStatement(); Map<String,Object> vars = new HashMap<String,Object>(); vars.put("days", basicInfo.getTotalDays()); vars.put("applicant", basicInfo.getApplicantName()); String processInstanceId = request.getParameter(Constants.PROCESS_INSTANCE_ID); //运行流程实例 stmt.runProcessInstance(processInstanceId, basicInfo.getBizId(), vars); //TODO 流程实例运行后,对于第一个节点,应该自动提交 return null; } }); //导航到“我的在办”页面 RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet/WorkflowOperationServlet?"+Constants.ACTION_TYPE+"="+Constants.LIST_MY_ACTIVE_PROCESS_INSTANCE); dispatcher.forward(request, response); } /** * 构建出差申请信息 * @param request * @return */ protected BusinessTripBasicInfo buildBusinessTripBasicInfo(HttpServletRequest request){ BusinessTripBasicInfo basicInfo = new BusinessTripBasicInfo(); basicInfo.setBizId(request.getParameter("biz_id")); basicInfo.setApplicantId(request.getParameter("applicant_id")); basicInfo.setApplicantName(request.getParameter("applicant_name")); basicInfo.setDepartmentName(request.getParameter("department")); basicInfo.setPhoneNumber(request.getParameter("phone_number")); basicInfo.setPositionName(request.getParameter("position")); basicInfo.setDestinationCity(request.getParameter("destination_city")); basicInfo.setStartDate(request.getParameter("start_date")); basicInfo.setEndDate(request.getParameter("end_date")); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); try{ Date startDate = dateFormat.parse(basicInfo.getStartDate()); Date endDate = dateFormat.parse(basicInfo.getEndDate()); long days = (endDate.getTime()-startDate.getTime())/(24*60*60*1000 ); basicInfo.setTotalDays((int)days); }catch(Exception e){ e.printStackTrace(); } basicInfo.setSubject(request.getParameter("subject")); return basicInfo; } protected User getCurrentUser(HttpServletRequest request){ HttpSession session = request.getSession(true); return WorkflowUtil.getCurrentWorkflowUser(session); } }