package com.tenwa.flow.action.comm; import com.amarsoft.awe.util.JavaMethod; import com.amarsoft.context.ASUser; 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( "text/html; charset=GBK" ); 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 sArgs = request.getParameter( "Args" ); try { if ( sArgs == null ) { sArgs = ""; } else { if ( sArgs.indexOf( "CurUserID" ) == -1 ) { sArgs += ",CurUserID=8006U00000001"; } sArgs += getFixedFlowParam( sArgs ); sArgs = URLDecoder.decode(sArgs, "UTF-8").replace("Ж", "+").replace("ё", "%"); } ASUser CurUser = ASUser.getUser( "8006U00000001", 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() > 1 ) { fixedFlowParam.append( "," ); } fixedFlowParam.append( obj.split( "=" )[0] ) .append( ":" ).append( obj.split( "=" )[1] ); } fixedFlowParam.append( "}" ); } return ",FixedFlowParam=" + fixedFlowParam.toString(); } }