package com.tenwa.flow.action.comm; import com.amarsoft.awe.util.JavaMethod; import com.amarsoft.context.ASUser; import fr.opensagres.xdocreport.core.utils.Base64Utility; import org.codehaus.jackson.map.ObjectMapper; import org.springframework.stereotype.Controller; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.net.URLDecoder; import java.util.HashMap; import java.util.Map; @Controller public class FlowController extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { this.doGet(request, response); } /** * 共需要传递几个基础参数 * ClassName: 用于查找需要执行的startAction * Args内必须提供参数 * ApplyType: 用于查找哪个流程 * @return */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("application/x-www-form-urlencoded;charset=UTF-8"); response.setHeader( "Cache-Control", "no-store" ); response.setHeader( "Pragma", "no-cache" ); response.setDateHeader( "Expires", 0L ); response.setCharacterEncoding( "UTF-8" ); PrintWriter out = response.getWriter(); Map result = new HashMap<>(); String sClassName = request.getParameter( "ClassName" ); //发起流程固定initFLow String sMethodName = "interfaceInitFlow"; String curUserID = request.getParameter("CurUserID"); String sArgs = request.getParameter("Args"); try { if ( sArgs == null ) { sArgs = ""; } else { sArgs += getFixedFlowParam( sArgs ); } ASUser CurUser = ASUser.getUser(curUserID, null ); String sResult = JavaMethod.runTrans( sClassName, sMethodName, sArgs, CurUser ).getReturnText(); if ( sResult.indexOf( "success" ) == -1 ) { throw new Exception( "发起流程失败" ); } result.put( "data", sResult.split( "@" )[ 1 ] ); result.put( "status", "success" ); } catch ( Exception e ) { e.printStackTrace(); result.put( "status", "error" ); } ObjectMapper objectMapper = new ObjectMapper(); out.print( objectMapper.writeValueAsString( result ) ); out.flush(); out.close(); } public static String getFixedFlowParam ( String args ) { StringBuffer fixedFlowParam = new StringBuffer( "{'" ); if ( args != null && args.length() > 0 ) { String[] argObjects = args.split( "," ); for ( String obj : argObjects ) { if ( fixedFlowParam.length() > 2 ) { fixedFlowParam.append( "'@'" ); } fixedFlowParam.append( obj.split( "=" )[0] ).append( "':'" ).append( obj.split( "=" )[1] ); } fixedFlowParam.append( "'}" ); } return ",FixedFlowParam=" + fixedFlowParam.toString(); } }