DataCollectController.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. package com.yihu.hos.datacollect.controller;
  2. import com.fasterxml.jackson.databind.ObjectMapper;
  3. import com.fasterxml.jackson.databind.node.ArrayNode;
  4. import com.yihu.hos.common.Services;
  5. import com.yihu.hos.core.datatype.CollectionUtil;
  6. import com.yihu.hos.core.datatype.StringUtil;
  7. import com.yihu.hos.datacollect.model.RsJobConfig;
  8. import com.yihu.hos.datacollect.service.DatacollectManager;
  9. import com.yihu.hos.resource.service.StdService;
  10. import com.yihu.hos.standard.service.adapter.AdapterSchemeService;
  11. import com.yihu.hos.system.service.DatasourceManager;
  12. import com.yihu.hos.web.framework.constant.DateConvert;
  13. import com.yihu.hos.web.framework.model.ActionResult;
  14. import com.yihu.hos.web.framework.model.Result;
  15. import com.yihu.hos.web.framework.util.controller.BaseController;
  16. import org.apache.commons.beanutils.BeanUtils;
  17. import org.joda.time.DateTime;
  18. import org.joda.time.format.DateTimeFormat;
  19. import org.joda.time.format.DateTimeFormatter;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Controller;
  22. import org.springframework.ui.Model;
  23. import org.springframework.web.bind.annotation.RequestMapping;
  24. import org.springframework.web.bind.annotation.ResponseBody;
  25. import javax.annotation.Resource;
  26. import javax.servlet.http.HttpServletRequest;
  27. import java.lang.reflect.Method;
  28. import java.text.SimpleDateFormat;
  29. import java.util.*;
  30. /**
  31. * 数据采集配置页面
  32. * Created by hzp on 2015/8/12.
  33. */
  34. @RequestMapping("/datacollect")
  35. @Controller("dataCollectController")
  36. public class DataCollectController extends BaseController {
  37. @Resource(name = Services.Datacollect)
  38. DatacollectManager datacollect;
  39. @Resource(name = StdService.BEAN_ID)
  40. StdService stdService;
  41. @Resource(name = Services.Datasource)
  42. DatasourceManager datasource;
  43. @Resource(name = AdapterSchemeService.BEAN_ID)
  44. private AdapterSchemeService adapterSchemeService;
  45. @Autowired
  46. private ObjectMapper objectMapper;
  47. /****************************
  48. * 任务管理
  49. ************************************************/
  50. /*
  51. 任务配置
  52. */
  53. @RequestMapping("configJob")
  54. public String configJob(Model model) {
  55. model.addAttribute("contentPage", "/datacollect/configJob");
  56. return "partView";
  57. }
  58. /*
  59. 任务新增/编辑
  60. */
  61. @RequestMapping("editorJob")
  62. public String editorJob(Model model, String jobId) {
  63. try {
  64. //是否编辑
  65. if (jobId != null && jobId.length() > 0) {
  66. //获取任务信息
  67. RsJobConfig job = datacollect.getJobById(jobId);
  68. model.addAttribute("model", job);
  69. //String cron = datacollect.getCronByJobId(jobId);
  70. //model.addAttribute("cronExpression", cron);
  71. }
  72. //获取方案列表
  73. List data = stdService.getSchemeVersion();
  74. String jsonlist = objectMapper.writeValueAsString(data);
  75. ArrayNode jsonArray = objectMapper.readValue(jsonlist, ArrayNode.class);
  76. model.addAttribute("schemeList", "{\"detailModelList\":" + (CollectionUtil.isEmpty(data) ? "[]" : jsonArray) + "}");
  77. model.addAttribute("contentPage", "/datacollect/editorJob");
  78. return "pageView";
  79. } catch (Exception ex) {
  80. model.addAttribute("contentPage", "/datacollect/editorJob");
  81. return "pageView";
  82. }
  83. }
  84. /*
  85. 获取任务列表
  86. */
  87. @RequestMapping("getJob")
  88. @ResponseBody
  89. public Result getJob(String name, int page, int rows) {
  90. try {
  91. Map<String, Object> map = new HashMap<>();
  92. map.put("name", name);
  93. return datacollect.getJobList(map, page, rows);
  94. } catch (Exception ex) {
  95. return Result.error(ex.getMessage());
  96. }
  97. }
  98. @RequestMapping("compareServeTime")
  99. @ResponseBody
  100. public Result getJob(String time) {
  101. try {
  102. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  103. if (df.parse(time).before(new Date())) {
  104. return Result.success("beforeServeTime");
  105. } else
  106. return Result.error("afterServeTime");
  107. } catch (Exception ex) {
  108. return Result.error(ex.getMessage());
  109. }
  110. }
  111. /**
  112. * 根据适配方案获取数据集列表
  113. */
  114. @RequestMapping("getSchemeDataset")
  115. @ResponseBody
  116. public Result getSchemeDataset(String schemeId, String schemeVersion, String jobId) {
  117. try {
  118. return datacollect.getSchemeDataset(schemeId, schemeVersion, jobId);
  119. } catch (Exception ex) {
  120. return Result.error(ex.getMessage());
  121. }
  122. }
  123. /**
  124. * 根据适配方案+数据集获取字段列表
  125. */
  126. @RequestMapping("getSchemeDatasetCol")
  127. @ResponseBody
  128. public Result getSchemeDatasetCol(String schemeId, String schemeVersion, String datasetId) {
  129. try {
  130. return datacollect.getSchemeDatasetCol(schemeId, schemeVersion, datasetId);
  131. } catch (Exception ex) {
  132. return Result.error(ex.getMessage());
  133. }
  134. }
  135. /*
  136. 新增任务
  137. */
  138. @RequestMapping("addJob")
  139. @ResponseBody
  140. public Result addJob(HttpServletRequest request) {
  141. try {
  142. String cron = request.getParameter("cronExpression");
  143. String jobDataset = request.getParameter("jobDataset");
  144. RsJobConfig obj = new RsJobConfig();
  145. BeanUtils.populate(obj, request.getParameterMap());
  146. obj.setValid("1");
  147. obj.setJobCron(cron);
  148. String time = request.getParameter("jobNextTime");
  149. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  150. if (df.parse(time).before(new Date())) {
  151. return Result.error("任务开始时间不能小于当前时间");
  152. }
  153. return datacollect.addJob(obj, cron, jobDataset);
  154. } catch (Exception ex) {
  155. ex.printStackTrace();
  156. return Result.error("新增任务失败!");
  157. }
  158. }
  159. /*
  160. 修改任务
  161. */
  162. @RequestMapping("updateJob")
  163. @ResponseBody
  164. public Result updateJob(HttpServletRequest request) {
  165. try {
  166. String cron = request.getParameter("cronExpression");
  167. String jobDataset = request.getParameter("jobDataset");
  168. RsJobConfig obj = new RsJobConfig();
  169. obj.setJobCron(cron);
  170. // ConvertUtils.register(new DateLocaleConverter(), Date.class);
  171. BeanUtils.populate(obj, request.getParameterMap());
  172. String time = request.getParameter("jobNextTime");
  173. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  174. if (df.parse(time).before(new Date())) {
  175. return Result.error("任务开始时间不能小于当前时间");
  176. }
  177. String delayTime = request.getParameter("delayTime");//延迟时间
  178. String startTime = request.getParameter("repeatStartTime");
  179. String endTime = request.getParameter("repeatEndTime");
  180. DateTimeFormatter dateTimeFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
  181. if (StringUtil.isBlank(endTime)) {
  182. endTime = DateTime.now().toString(dateTimeFormat);
  183. }
  184. DateTime beginDate = DateTime.parse(startTime, dateTimeFormat);
  185. DateTime endDate = DateTime.parse(endTime, dateTimeFormat);
  186. beginDate = beginDate.plusDays(Integer.valueOf(delayTime));//开始时间+延迟时间
  187. if (beginDate.isAfter(endDate)) {
  188. return Result.error("任务开始时间加延迟时间不能大于结束时间");
  189. }
  190. return datacollect.updateJob(obj, cron, jobDataset);
  191. } catch (Exception ex) {
  192. ex.printStackTrace();
  193. return Result.error("修改任务失败!");
  194. }
  195. }
  196. /*
  197. 修改任务状态
  198. */
  199. @RequestMapping("validJob")
  200. @ResponseBody
  201. public Result validJob(String jobId, String valid) {
  202. try {
  203. return datacollect.validJob(jobId, valid);
  204. } catch (Exception ex) {
  205. return Result.error(ex.getMessage());
  206. }
  207. }
  208. /*
  209. 删除任务
  210. */
  211. @RequestMapping("deleteJob")
  212. @ResponseBody
  213. public Result deleteJob(String jobId) {
  214. try {
  215. return datacollect.deleteJob(jobId);
  216. } catch (Exception ex) {
  217. ex.printStackTrace();
  218. return Result.error(ex.getMessage());
  219. }
  220. }
  221. /**
  222. * 获取任务信息
  223. *
  224. * @return
  225. */
  226. @RequestMapping("getJobInfo")
  227. @ResponseBody
  228. public Result getJobInfo(String jobId) {
  229. try {
  230. RsJobConfig job = datacollect.getJobById(jobId);
  231. if (job != null) {
  232. ActionResult re = new ActionResult(true, "");
  233. re.setData(job.getValid());
  234. return re;
  235. } else {
  236. return new ActionResult(false, "非法操作!");
  237. }
  238. } catch (Exception ex) {
  239. return Result.error(ex.getMessage());
  240. }
  241. }
  242. /**
  243. * 根据任务Id获取相关数据集下拉数据
  244. *
  245. * @return
  246. */
  247. @RequestMapping("getJobDatasetByJobId")
  248. @ResponseBody
  249. public Result getJobDatasetByJobId(String jobId) {
  250. try {
  251. return datacollect.getJobDatasetByJobId(jobId);
  252. } catch (Exception ex) {
  253. return Result.error(ex.getMessage());
  254. }
  255. }
  256. /*************************
  257. * 数据集--数据源管理
  258. ******************************************/
  259. /*
  260. 数据集配置
  261. */
  262. @RequestMapping("configDataset")
  263. public String configDataset(Model model) {
  264. try {
  265. model.addAttribute("stdVersion", "569e19522e3d");
  266. //获取数据源数据
  267. model.addAttribute("datasourceList", datasource.getDatasourceByOrg("").toJson());
  268. model.addAttribute("contentPage", "/datacollect/configDataset");
  269. return "partView";
  270. } catch (Exception ex) {
  271. model.addAttribute("contentPage", "error");
  272. return "partView";
  273. }
  274. }
  275. /**
  276. * 数据集数据源管理列表(包含全部数据集)
  277. *
  278. * @return
  279. */
  280. @RequestMapping("getDatasetSource")
  281. @ResponseBody
  282. public Result getDatasetSource(String stdVersion) {
  283. try {
  284. return datacollect.getDatasetSource(stdVersion);
  285. } catch (Exception ex) {
  286. return Result.error(ex.getMessage());
  287. }
  288. }
  289. /**
  290. * 更新数据集数据源
  291. *
  292. * @return
  293. */
  294. @RequestMapping("saveDatasetSource")
  295. @ResponseBody
  296. public Result saveDatasetSource(String stdVersion, String json) {
  297. try {
  298. return datacollect.saveDatasetSource(json);
  299. } catch (Exception ex) {
  300. return Result.error(ex.getMessage());
  301. }
  302. }
  303. /*************************** 任务执行 ************************************************/
  304. /**
  305. * 执行任务
  306. *
  307. * @return
  308. */
  309. @RequestMapping("executeJob")
  310. @ResponseBody
  311. public Result executeJob(String jobId) {
  312. try {
  313. //获取任务详细信息
  314. RsJobConfig job = datacollect.getJobById(jobId);
  315. String content = job.getJobContent();
  316. Class<?> classType = Class.forName(content);
  317. Method method = classType.getMethod("execute", new Class[]{String.class});
  318. method.invoke(classType.newInstance(), jobId);
  319. return Result.success("处理完成!");
  320. } catch (Exception ex) {
  321. return Result.error(ex.getMessage());
  322. }
  323. }
  324. /*
  325. 任务补采界面
  326. */
  327. @RequestMapping("repeatDatacollect")
  328. public String repeatDatacollect(Model model, String jobId, String jobDatasetId, String jobStatus, String jobTimeFrom, String jobTimeTo) {
  329. try {
  330. model.addAttribute("jobId", jobId == null ? "" : jobId);
  331. model.addAttribute("jobDatasetId", jobDatasetId == null ? "" : jobDatasetId);
  332. model.addAttribute("jobStatus", jobStatus == null ? "" : jobStatus);
  333. if (jobTimeFrom != null && jobTimeFrom.length() > 0) {
  334. Date timeFrom = DateConvert.toDate(jobTimeFrom);
  335. model.addAttribute("jobTimeFrom", DateConvert.toString(timeFrom));
  336. } else {
  337. GregorianCalendar gc = new GregorianCalendar();
  338. gc.setTime(new Date());
  339. gc.add(5, -1);
  340. model.addAttribute("jobTimeFrom", DateConvert.toString(gc.getTime()));
  341. }
  342. if (jobTimeTo != null && jobTimeTo.length() > 0) {
  343. Date timeTo = DateConvert.toDate(jobTimeTo);
  344. model.addAttribute("jobTimeTo", DateConvert.toString(timeTo));
  345. } else {
  346. model.addAttribute("jobTimeTo", DateConvert.toString(new Date()));
  347. }
  348. model.addAttribute("contentPage", "/datacollect/repeatDatacollect");
  349. return "partView";
  350. } catch (Exception ex) {
  351. model.addAttribute("contentPage", "error");
  352. return "partView";
  353. }
  354. }
  355. /**
  356. * 任务详细日志列表
  357. *
  358. * @return
  359. */
  360. @RequestMapping("getJobLogDetail")
  361. @ResponseBody
  362. public Result getJobLogDetail(String jobId, String jobDatasetId, String jobStatus, String jobTimeFrom, String jobTimeTo, int page, int rows) {
  363. try {
  364. Map<String, Object> conditionMap = new HashMap<String, Object>();
  365. conditionMap.put("jobId", jobId);
  366. conditionMap.put("jobDatasetId", jobDatasetId);
  367. conditionMap.put("jobStatus", jobStatus);
  368. conditionMap.put("jobTimeFrom", jobTimeFrom);
  369. conditionMap.put("jobTimeTo", jobTimeTo);
  370. return datacollect.getJobLogDetail(conditionMap, page, rows);
  371. } catch (Exception ex) {
  372. return Result.error(ex.getMessage());
  373. }
  374. }
  375. /**
  376. * 补采数据
  377. *
  378. * @return
  379. */
  380. @RequestMapping("repeat")
  381. @ResponseBody
  382. public Result repeat(String ids) {
  383. return Result.error("非法操作!");
  384. }
  385. /*************************** 任务跟踪 ***********************************/
  386. /**
  387. * 任务跟踪界面
  388. *
  389. * @return
  390. */
  391. @RequestMapping("trackJob")
  392. public String trackJob(Model model, String jobId) {
  393. try {
  394. model.addAttribute("contentPage", "/datacollect/trackJob");
  395. return "pageView";
  396. } catch (Exception ex) {
  397. model.addAttribute("contentPage", "error");
  398. return "partView";
  399. }
  400. }
  401. /**
  402. * 任务日志列表
  403. *
  404. * @return
  405. */
  406. @RequestMapping("getJobLog")
  407. @ResponseBody
  408. public Result getJobLog(String jobId, int page, int rows) {
  409. try {
  410. Map<String, Object> conditionMap = new HashMap<String, Object>();
  411. conditionMap.put("jobId", jobId);
  412. return datacollect.getJobLog(conditionMap, page, rows);
  413. } catch (Exception ex) {
  414. return Result.error(ex.getMessage());
  415. }
  416. }
  417. /**
  418. * 任务详细根据数据集分组
  419. *
  420. * @return
  421. */
  422. @RequestMapping("getJobLogDataset")
  423. @ResponseBody
  424. public Result getJobLogDataset(String logId) {
  425. try {
  426. return datacollect.getJobLogDataset(logId);
  427. } catch (Exception ex) {
  428. return Result.error(ex.getMessage());
  429. }
  430. }
  431. }