package com.fr.plugin.jsd9683.controller; import com.fr.decision.authority.data.User; import com.fr.decision.webservice.CrossDomainResponse; import com.fr.decision.webservice.Response; import com.fr.decision.webservice.annotation.LoginStatusChecker; import com.fr.decision.webservice.bean.user.UserUpdateBean; import com.fr.decision.webservice.v10.user.UserService; import com.fr.log.FineLoggerFactory; import com.fr.plugin.jsd9683.beans.DeleteUserBean; import com.fr.plugin.jsd9683.beans.ReportFileBean; import com.fr.stable.StringUtils; import com.fr.third.springframework.stereotype.Controller; import com.fr.third.springframework.web.bind.annotation.*; import com.fr.web.JSONReportUtils; import com.fr.web.controller.decision.api.auth.LoginResource; import com.fr.workspace.WorkContext; import org.apache.catalina.filters.CorsFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.UnsupportedEncodingException; import java.util.ArrayList; @Controller @LoginStatusChecker( required = false ) public class Jsd9683Controller { @RequestMapping( value = {"/bg/deleteUserByOrgCodeAndName"}, method = {RequestMethod.POST} ) @ResponseBody public Response deleteUserByName(HttpServletRequest req, HttpServletResponse res, @RequestBody DeleteUserBean deleteUserBean ) throws Exception { FineLoggerFactory.getLogger().info("delete user by post................"); String X_Access_Token = req.getHeader("X-Access-Token"); FineLoggerFactory.getLogger().info("X-Access-Token:"+X_Access_Token); Response response = deleteUserByUserNameAndOrgCode(deleteUserBean.getUserName(),deleteUserBean.getOrgCode()); return response; } @RequestMapping( value = {"/bg/deleteUserByOrgCodeAndName1"}, method = {RequestMethod.GET} ) @ResponseBody public Response deleteUserByNameByGet(HttpServletRequest req, HttpServletResponse res, @RequestParam("userName") String userName,@RequestParam("orgCode") String orgCode) throws Exception { FineLoggerFactory.getLogger().info("delete user by get................"); res.setHeader("Access-Control-Allow-Origin", "*"); String X_Access_Token = req.getHeader("X-Access-Token"); FineLoggerFactory.getLogger().info("X-Access-Token:"+X_Access_Token); Response response = deleteUserByUserNameAndOrgCode(userName,orgCode); // return CrossDomainResponse.create().callbackFuncName(callback).parameter("result", "ok").parameter("status", "success").createCrossDomainResponse(); return response; } @RequestMapping( value = {"/bg/deleteUserByOrgCodeAndName2"}, method = {RequestMethod.GET} ) @ResponseBody public String deleteUserByNameByJSONP(HttpServletRequest req, HttpServletResponse res, @RequestParam("userName") String userName,@RequestParam("orgCode") String orgCode,@RequestParam(value = "callback",required = false,defaultValue = "callback") String callback) throws Exception { FineLoggerFactory.getLogger().info("delete user by jsonp................"); String X_Access_Token = req.getHeader("X-Access-Token"); //获取不到,JSONP不支持在header中加入自定义属性 FineLoggerFactory.getLogger().info("X-Access-Token:"+X_Access_Token); FineLoggerFactory.getLogger().info("==== deleteUserByName userName:"+userName); FineLoggerFactory.getLogger().info("==== deleteUserByName orgCode:"+orgCode); String fineUserName = orgCode + "_" +userName; User user = UserService.getInstance().getUserByUserName(fineUserName); if(user == null){ return (new CrossDomainResponse()).callbackFuncName(callback).parameter("status", "fail").parameter("errorCode", "0001").parameter("errorMsg", "user is not exist").createCrossDomainResponse(); } UserUpdateBean deleteBean = new UserUpdateBean(); String[] removeIds = new String[1]; removeIds[0] = user.getId(); deleteBean.setRemoveUserIds(removeIds);//删除登录用户 UserService.getInstance().deleteUsers(deleteBean); return CrossDomainResponse.create().callbackFuncName(callback).parameter("message", "ok").parameter("status", "success").createCrossDomainResponse(); } private Response deleteUserByUserNameAndOrgCode(String userName,String orgCode) throws Exception { FineLoggerFactory.getLogger().info("==== deleteUserByName userName:"+userName); FineLoggerFactory.getLogger().info("==== deleteUserByName orgCode:"+orgCode); String fineUserName = orgCode + "_" +userName; User user = UserService.getInstance().getUserByUserName(fineUserName); if(user == null){ return Response.error("0001","user is not exist"); // return (new CrossDomainResponse()).callbackFuncName(callback).parameter("status", "fail").parameter("errorCode", "0001").parameter("errorMsg", "user is not exist").createCrossDomainResponse(); } UserUpdateBean deleteBean = new UserUpdateBean(); String[] removeIds = new String[1]; removeIds[0] = user.getId(); deleteBean.setRemoveUserIds(removeIds);//删除登录用户 UserService.getInstance().deleteUsers(deleteBean); return Response.ok("ok"); } //@RequestParam(value = "callback",required = false,defaultValue = "callback") String callback @RequestMapping( value = {"/bg/getReportDirList"}, method = {RequestMethod.GET} ) @ResponseBody public Response getReportDirList(HttpServletRequest req, HttpServletResponse res, @RequestParam("name") String name) throws Exception { String envPath = WorkContext.getCurrent().getPath(); FineLoggerFactory.getLogger().info("envPath:" + envPath); String webReport = (new File(envPath)).getParent(); FineLoggerFactory.getLogger().info("webReport:" + webReport); String basePath = webReport + File.separator + "WEB-INF" + File.separator + "reportlets" + File.separator; File reportDir = new File(basePath); ArrayList allFiles = new ArrayList<>(); ArrayList allReportFile = new ArrayList<>(); if (reportDir.exists()) { try { iterateDir(reportDir, allReportFile, basePath, name); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } ReportFileBean root = new ReportFileBean(); root.setDir(true); root.setPreviewUrl(""); root.setChildren(new ArrayList<>()); root.setPath(""); root.setName("root"); if (allReportFile.size() > 0) { for (ReportFileBean node : allReportFile) { String path = node.getPath(); FineLoggerFactory.getLogger().info("==== path:" + path); if (path.indexOf(File.separator) == -1 ) { //根目录的文件 root.getChildren().add(node); } else { String[] pathStrings = path.split("\\"+File.separator); ReportFileBean childNode = new ReportFileBean(); ReportFileBean parent = null; String currentPath = ""; for (int i = 0; i < pathStrings.length; i++) { String fileName = pathStrings[i]; currentPath+= (File.separator+fileName); if (fileName.indexOf(".cpt") != -1 || fileName.indexOf(".frm") != -1) { parent = getChildNode(parent.getChildren(), fileName); parent.setDir(false); parent.setPath(path); parent.setPreviewUrl(node.getPreviewUrl()); } else { if (i == 0) { parent = getChildNode(root.getChildren(), fileName); parent.setDir(true); parent.setPath(currentPath); parent.setPreviewUrl(""); } else { parent = getChildNode(parent.getChildren(), fileName); parent.setDir(true); parent.setPath(currentPath); parent.setPreviewUrl(""); } } } } } } //String result = JSONReportUtils.objToJSONString(root); // FineLoggerFactory.getLogger().info("==== result:" + result); // return CrossDomainResponse.create().callbackFuncName(callback).parameter("result",result).createCrossDomainResponse(); return Response.ok(root); } private ReportFileBean getChildNode(ArrayList clildren,String name){ for(ReportFileBean node : clildren){ if(node.getName().equals(name)){ return node; } } ReportFileBean child = new ReportFileBean(); clildren.add(child); child.setName(name); child.setChildren(new ArrayList<>()); return child; } private void iterateDir(File parent,ArrayList allReportFile,String basePath,String paramName) throws UnsupportedEncodingException { File[] childrens = parent.listFiles(); if(childrens != null && childrens.length > 0){ for(File f:childrens){ String reportName = f.getName(); ReportFileBean bean = new ReportFileBean(); bean.setChildren(new ArrayList<>()); boolean isAdd = true; if(StringUtils.isNotEmpty(paramName)){ if(reportName.indexOf(paramName) == -1){ isAdd = false; } } if(isAdd){ bean.setName(reportName); String abPath = f.getAbsolutePath(); String rePath = abPath.replace(basePath,""); bean.setPath(rePath); bean.setDir(f.isDirectory()); if(bean.isDir() == false){ allReportFile.add(bean); bean.setPreviewUrl("webroot/decision//view/report?viewlet="+ java.net.URLEncoder.encode(rePath, "UTF-8")); } } iterateDir(f,allReportFile,basePath,paramName); } } } }