package com.platform.controller; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.base.BaseController; import com.platform.entities.BasedTask; import com.platform.entities.DataInfoEntity; import com.platform.entities.DataInfoEntityMoveTmp; import com.platform.entities.GatherOracleInfo; import com.platform.entities.OracleConnectorParams; import com.platform.entities.OracleExtractExecuter; import com.platform.form.PagerOptions; import com.platform.form.oracleForm; import com.platform.form.volumeMoveForm; import com.platform.service.DataInfoService; import com.platform.service.ICodeService; import com.platform.service.IGatherOracleService; import com.platform.service.ILogRead; import com.platform.service.IMoveDataService; import com.platform.service.IOracleExtractService; import com.platform.service.IVolumeService; import com.platform.service.OracleExtractTask; import com.platform.service.OracleStatusService; import com.platform.utils.CacheSetCantDelete; import com.platform.utils.Configs; import com.platform.utils.Constant; import com.platform.utils.ThreadVolumeImm; import com.platform.utils.UtilsHelper; /** * 数据管理 * * @author chen * */ @Controller public class DataModelController extends BaseController { public static Logger log = Logger.getLogger(DataModelController.class); /** * 数据管理--业务类 */ @Resource(name = "dataInfoService") private DataInfoService dfs; /** * gfs业务类 */ @Resource(name = "volumeService") private IVolumeService volumeService; /** * mysql相关业务 */ @Resource(name = "mySqlService") private IGatherOracleService mySqlService; /** * oracle汇总功能业务 */ @Resource(name = "OracleExtract") private IOracleExtractService OracleExtract; /** * 迁移数据业务类 */ @Resource(name = "moveDataService") private IMoveDataService moveDataService; /** * 地区、系统code业务类 */ @Resource(name = "codeService") private ICodeService codeService; /** * 日志业务管理类 */ @Resource(name = "logReadService") private ILogRead logReadService; public void setDfsImp(DataInfoService dfs) { this.dfs = dfs; } /** * 数据管理--分页查询数据 * * @param res * @param req * @return * @throws Exception */ @RequestMapping("/data.json") @ResponseBody public ModelMap getAllDataToJson(HttpServletRequest res, HttpServletResponse req) throws Exception { log.info("-----------/data.json-----------"); res.setCharacterEncoding("UTF-8"); Map paramMap = res.getParameterMap(); Set keySet = paramMap.keySet(); Map params = new HashMap(); StringBuffer sb = new StringBuffer().append("当前的请求参数:{"); for (String str : keySet) { String value = paramMap.get(str)[0]; if (StringUtils.isNotEmpty(value)) { params.put(str, value); sb.append(str).append(":").append(value).append(","); } else { sb.append(str).append(":").append("null").append(","); } } log.info(sb.deleteCharAt(sb.length() - 1).append("}").toString()); PagerOptions pagerOptions = (PagerOptions) UtilsHelper .newObjAndSetAttrsByClass(PagerOptions.class, params); pagerOptions.setCurrentPageNum(Integer.valueOf(params .get("currentPageNum"))); // 冷热区查询字段mark pagerOptions.setMark(pagerOptions.getVolumeType().trim()); return dfs.getPagerTableData(pagerOptions); } /** * 数据管理--删除数据 * * @param res * @param req * @throws Exception */ @RequestMapping(value = "/delete/data") @ResponseBody public ModelMap deleteData(HttpServletRequest res, HttpServletResponse req) throws Exception { log.info("-----------/delete/data-----------"); ModelMap mode = new ModelMap(); res.setCharacterEncoding("UTF-8"); Map paramMap = res.getParameterMap(); String[] data = paramMap.get("data"); if (null != data && data.length > 0) { List list = new ArrayList(); List errList = new ArrayList(); // 判断是否有 不能删除的。 for (String dataId : data) { if (CacheSetCantDelete.containsId(dataId)) errList.add(dataId); else list.add(dataId); } if (list.size() > 0) { String[] ids = list.toArray(new String[list.size()]); dfs.deleteData(ids); req.setStatus(200); } if (errList.size() > 0) { mode.put("err", errList); req.setStatus(500); } } return mode; } /** * 连接oracle * * @param res * @param req * @throws UnsupportedEncodingException */ @RequestMapping("/connectOracle") public void connectOracle(HttpServletRequest res, HttpServletResponse req) throws UnsupportedEncodingException { res.setCharacterEncoding("UTF-8"); Map paramMap = res.getParameterMap(); String[] oraclesName = paramMap.get("oracleName"); if (oraclesName != null) for (String rcName : oraclesName) { log.info("执行连接\t" + rcName); String cmd = "kubectl --server " + Configs.KUBE_MASTER_ADDRESS + " label --overwrite rc " + rcName + " status=0"; List rList = Constant.ganymedSSH .execCmdWaitAcquiescent(cmd); StringBuffer sb = new StringBuffer(); for (String string : rList) sb.append(string).append("\n"); log.info(sb.toString()); new OracleStatusService().connectToOracle(rcName); } req.setStatus(200); } /** * 断开oracle连接 * * @param res * @param req * @throws UnsupportedEncodingException */ @RequestMapping("/cancelOracleConection") public void cancelOracleConnection(HttpServletRequest res, HttpServletResponse req) throws UnsupportedEncodingException { res.setCharacterEncoding("UTF-8"); Map paramMap = res.getParameterMap(); String[] oraclesName = paramMap.get("oracleName"); String operate = paramMap.get("operation")[0]; if (null != oraclesName) { for (String rcName : oraclesName) { log.info("取消连接:\t" + rcName); new OracleStatusService().cancelToOracle(rcName, operate); } } req.setStatus(200); } /** * gfs的 volume节点的查询 * * @return * @throws Exception */ @RequestMapping(value = "/volume/list", method = RequestMethod.POST) @ResponseBody public String volumeList() throws Exception { log.info("-----/volume/list------"); String rest = volumeService.getAllvolume(); new ThreadVolumeImm("ThreadVolumeImm-in-VolumeController-volumeList") .start(); return rest; } /** * 数据迁移功能 * * @param res * @param req * @param form * @throws Exception */ @RequestMapping(value = "/volume/{name}/move", method = RequestMethod.POST) @ResponseBody public void volumeMove(HttpServletRequest res, HttpServletResponse req, @RequestBody volumeMoveForm form) throws Exception { List datas = new ArrayList(); List selectItems = form.getSelectItems(); if (null == selectItems) { req.setStatus(200); return; } datas.addAll(selectItems); log.info("------/volume/{name}/move--------"); if (datas.size() > 0) { moveDataService.moveData(datas, form.getSelectNode()); } req.setStatus(200); } /** * oracle的 汇总功能 * * @param res * @param req * @param form * @throws Exception */ @RequestMapping(value = "/oracle/{name}/extract", method = RequestMethod.POST) public void oracleExtract(HttpServletRequest res, HttpServletResponse req, @RequestBody oracleForm form) throws Exception { log.info("/oracle/{name}/extract"); if (null != form.getTarget()) { // 检查请求参数中是否包含汇总库信息 boolean isConnect = OracleExtract.isConnectTotalOracle(form .getTarget()); // 检查汇总库是否可以连接成功,连接成功返回200状态吗,连接失败返回500状态吗 if (isConnect) { req.setStatus(200); if (null != form.getInneed() && form.getInneed().size() > 0) { for (OracleConnectorParams oracleParams : form.getInneed()) { BasedTask task = new OracleExtractTask( oracleParams.getName(), form.getTarget(), oracleParams, OracleExtract); OracleExtractExecuter oee = new OracleExtractExecuter( task); new Thread(oee, oracleParams.getName()).start(); } } } else req.setStatus(500); } } /** * oracle汇总、抽取库的 查询 * * @return * @throws Exception */ @RequestMapping(value = "/oracle/list", method = RequestMethod.POST) @ResponseBody public List oracleList() throws Exception { log.info("----------getOracleInfo-----------------------"); List result = mySqlService.findAllOracle(); return result; } /** * oracle汇总、抽取库的 删除 * * @param req * @param res * @param id * @throws Exception */ @RequestMapping(value = "/oracle/{id}/delete", method = RequestMethod.POST) public void oracleDelete(HttpServletRequest req, HttpServletResponse res, @PathVariable String id) throws Exception { log.info("----------deleteOracleInfo----------------"); Integer num = Integer.valueOf(id); Integer result = mySqlService.deleteOracle(num); log.info("oracleDelete : " + result); res.setStatus(200); } /** * oracle汇总、抽取库的 新增 * * @param res * @param req * @param id * @param oracle * @throws Exception */ @RequestMapping(value = "/oracle/{id}/insert", method = RequestMethod.POST) @ResponseBody public void oracleInsert(HttpServletRequest res, HttpServletResponse req, @PathVariable String id, @RequestBody GatherOracleInfo oracle) throws Exception { log.info("----------insertOracleInfo----------------"); oracle.setId(Integer.valueOf(id)); mySqlService.insertOracle(oracle); req.setStatus(200); } /** * oracle汇总、抽取库的 更新 * * @param res * @param req * @param id * @param oracle * @throws Exception */ @RequestMapping(value = "/oracle/{id}/update", method = RequestMethod.POST) @ResponseBody public void oracleUpdate(HttpServletRequest res, HttpServletResponse req, @PathVariable("id") String id, @RequestBody GatherOracleInfo oracle) throws Exception { log.info("----------updateOracleInfo-----------------------"); log.info(oracle); mySqlService.updateOracle(oracle); req.setStatus(200); } /** * 迁移任务 的查询 * * @return * @throws Exception */ @RequestMapping(value = "/task/transfer/list", method = RequestMethod.POST) @ResponseBody public Object taskTransferList() throws Exception { log.debug("----------/task/transfer/list-----------------------"); List result = moveDataService.findAll(); return result; } /** * 迁移完成后的 删除记录功能 * * @param res * @param req * @param id * @return * @throws Exception */ @RequestMapping(value = "/task/transfer/{id}/delete", method = RequestMethod.POST) @ResponseBody public Object taskTransferDelete(HttpServletRequest res, HttpServletResponse req, @PathVariable String id) throws Exception { log.info("----------/task/transfer/{id}/delete-----------------------"); DataInfoEntityMoveTmp move = new DataInfoEntityMoveTmp(); move.setId(Integer.valueOf(id)); int result = moveDataService.delete(move); req.setStatus(200); return result; } /** * 迁移完成后的 删除记录功能 * * @param res * @param req * @param id * @return * @throws Exception */ @RequestMapping(value = "/task/transfer/deletes", method = RequestMethod.POST) @ResponseBody public Object taskTransferDeletes(HttpServletRequest res, HttpServletResponse req, @RequestBody String[] ids) throws Exception { log.info("---------/task/transfer/deletes----------------------"); req.setStatus(200); int result = 0; if (ids != null ) { // String[] ids = idsString.split(","); result = moveDataService.delete(ids); } else { req.setStatus(500); } return result; } /** * 迁移数据完成后新增一条数据(暂时去掉,新增功能不在此) * * @param res * @param req * @param move * @return * @throws Exception */ @RequestMapping(value = "/task/transfer/save", method = RequestMethod.POST) @ResponseBody public Object taskTransferSave(HttpServletRequest res, HttpServletResponse req, @RequestBody DataInfoEntity move) throws Exception { log.info("---------/task/transfer/save-----------------------"); // int result = dfs.save(move); req.setStatus(200); return 1; } /** * 地区和系统的 code 对应的名称 的 获取 * * @return * @throws Exception */ @RequestMapping(value = "/code/list", method = RequestMethod.POST) @ResponseBody public Object findCodeList() throws Exception { log.info("---------/findSystemCode-----------------------"); Map result = codeService.findAll(); return result; } /** * oracle 汇总的 日志 读取 * * @param name * @param res * @param req * @return * @throws Exception */ @RequestMapping(value = "/oracle/extract/log", method = RequestMethod.POST) @ResponseBody public Object getExtractLog(@RequestParam("rcName") String name, HttpServletRequest res, HttpServletResponse req) throws Exception { log.info("---------/oracle/extract/log-------------------"); String result = logReadService.readLog(name); // "查看相应日志" Map log = new HashMap(); log.put(name, result + "\r\n"); return log; } }