From 77934319d1e4bd3dcf5a0d221c8940c6cf419425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=AA=E4=BA=91=E6=98=8A?= Date: Fri, 17 Jul 2020 17:59:01 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=AF=BC=E5=87=BA=20=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=20=E9=87=8D=E8=BD=BD=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/iservice/busi/ISysTaskCycleService.java | 4 + .../api/iservice/busi/ISysTaskPlanService.java | 9 + .../core/api/iservice/busi/ISysTaskService.java | 3 + .../controller/busi/SysRoleController.java | 12 +- .../controller/busi/SysTaskController.java | 129 +++++------ .../controller/busi/SysTaskCycleController.java | 145 +++++------- .../controller/busi/SysTaskPlanController.java | 253 ++++++++++++--------- .../serviceimpl/busi/SysRoleService.java | 17 +- .../serviceimpl/busi/SysTaskCycleService.java | 11 +- .../serviceimpl/busi/SysTaskPlanService.java | 16 ++ .../serviceimpl/busi/SysTaskService.java | 5 + 11 files changed, 323 insertions(+), 281 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskCycleService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskCycleService.java index 1bfa314..c98d188 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskCycleService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskCycleService.java @@ -91,4 +91,8 @@ public interface ISysTaskCycleService { */ @ApiOperation(value = "根据任务周期id查询相关任务计划信息",notes = "根据任务周期id查询相关任务计划信息") List findRefTaskCyclePlanByCycleId(Long cycleId); + + @ApiOperation(value = "按条件查询任务周期",notes = "按条件查询任务周期") + List findSysTaskCycleByCondition(SysTaskCycle sysTaskCycle); + } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskPlanService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskPlanService.java index e3faba8..b423925 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskPlanService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskPlanService.java @@ -98,4 +98,13 @@ public interface ISysTaskPlanService { @AnnoIgnoreLog @ApiOperation(value = "修改任务计划信息",notes = "修改任务计划信息,不会更新quartz数据库") void updateSysTaskPlan(SysTaskPlan sysTaskPlan); + + @ApiOperation(value = "根据id查找任务计划",notes = "根据id查找任务计划") + List findSysTaskPlanByIds(Long[] ids); + + @ApiOperation(value = "检查任务计划是否为空",notes = "检查任务计划是否为空") + boolean checkSysTaskPlanOnly(SysTaskPlan sysTaskPlan); + + @ApiOperation(value = "按条件查询定时任务信息",notes = "按条件查询定时任务信息") + List findSysTaskPlanByCondition(SysTaskPlan sysTaskPlan); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskService.java index 239fbcb..ee0dc43 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskService.java @@ -100,4 +100,7 @@ public interface ISysTaskService { */ @ApiOperation(value = "定时任务唯一校验",notes = "定时任务唯一校验") boolean checkSysTaskOnly(SysTask sysTask); + + @ApiOperation(value = "按条件查询任务",notes = "按条件查询任务") + List findSysTaskByCondition(SysTask sysTask); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java index 56f34d9..9d90f64 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java @@ -271,8 +271,16 @@ public class SysRoleController extends CrudBaseController { ValidatorBean.checkNotNull(roleId, "角色roleId 不能为空"); ValidatorBean.checkNotNull(softType, "产品类型 不能为空"); - return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) - .setResultList(sysRoleService.findSysRefRoleMenuByRoleId(roleId,softType)); + List sysRefRoleMenuList; + if (CommonEnumUtil.USER_TYPE.ADMIN.getCode().equals(AuthUtil.getSessionUser().getUserType())) { + sysRefRoleMenuList = sysRoleService.findSysRefRoleMenuByRoleId(-1L, softType); + }else{ + sysRefRoleMenuList = sysRoleService.findSysRefRoleMenuByRoleId(roleId, softType); + } + + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(sysRefRoleMenuList); } catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); }catch(Exception e){ diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java index 3a2a5b0..48648c1 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java @@ -14,15 +14,12 @@ import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.tool.ExcelTool; import cn.estsh.i3plus.platform.common.tool.FileTool; import cn.estsh.i3plus.platform.common.tool.StringTool; -import cn.estsh.i3plus.platform.common.tool.ZipTool; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; -import cn.estsh.i3plus.pojo.base.bean.ImppFile; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; -import cn.estsh.i3plus.pojo.platform.bean.SysFile; import cn.estsh.i3plus.pojo.platform.bean.SysTask; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.base.service.CommonServiceImpl; @@ -43,11 +40,9 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.persistence.EntityManager; -import java.io.File; -import java.io.FileInputStream; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Date; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; import java.util.List; import java.util.Map; @@ -351,66 +346,57 @@ public class SysTaskController extends CoreBaseController { @GetMapping(value = "/export") @ApiOperation(value = "导出数据") - public ResultBean exportExcel(SysTask bean, boolean needSendMessage) { - ListPager listPager; - List result = new ArrayList<>(); - File zipFile = null; - File excelDir = null; - File excelFile; - ExcelTool excelTool; + public void exportExcel(SysTask bean,HttpServletResponse response) { + File excelFile = null; try { - Pager pager = new Pager(0); - // 判断是否超过excel最大导出数量设定值 - pager.setPageSize(RedisCacheTool.getSysConfigIntVal(PlatformConstWords.EXCEL_EXPORT_MAX_ROW, 20000)); - - // 数据校验 Map colMap = ExcelTool.getColName(SysTask.class); String[] colName = new String[colMap.size()]; - int i = 0; + int j = 0; for (String key : colMap.keySet()) { - colName[i++] = key; + colName[j++] = key; } - excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis()); - excelDir = new File(System.getProperty("java.io.tmpdir") + File.separator + new Date().getTime()); - excelDir.mkdir(); - do { - listPager = sysTaskService.querySysTaskByPager(bean, pager); - pager = listPager.getObjectPager(); - - // 将excel导出至临时文件夹 - excelFile = new File(MessageFormat.format("{0}{1}{2}{3}.xls", excelDir, File.separator, SysTask.class.getSimpleName(), - pager.getCurrentPage())); - excelFile.createNewFile(); - excelTool.exportData(excelFile, listPager.getObjectList(), SysTask.class, colName); - - pager.setCurrentPage(pager.getCurrentPage() + 1); - } while (pager.getCurrentPage() <= pager.getTotalPages()); - - // 将所有excel文件打包上传 - zipFile = ZipTool.zipFile(null, excelDir); - SysFile sysFile = fileService.upload(new FileInputStream(zipFile), zipFile.getName(), - StringTool.getStringFileSuffix(zipFile.getName(), true), CommonEnumUtil.SOFT_TYPE.CORE.getValue()); - - result.add(sysFileService.insertSysFile(sysFile)); - - // 是否发送站内信 - if (needSendMessage) { - sysMessageService.insertSysMessage(ExcelTool.sendStationLetter(result, getSessionUser().getUser().getId())); + ExcelTool excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis()); + // 将excel导出至临时文件夹 + excelFile = new File(System.getProperty("java.io.tmpdir") + File.separator + AuthUtil.getSessionUser().getUserName() + + "SysTask.xls"); + excelFile.createNewFile(); + excelTool.exportData(excelFile, sysTaskService.findSysTaskByCondition(bean), SysTask.class, colName); + + + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", + "attachment;fileName=" + URLEncoder.encode(excelFile.getName(), "UTF-8")); + response.flushBuffer(); + + BufferedInputStream bis = null; + try { + bis = new BufferedInputStream(new FileInputStream(excelFile)); + OutputStream os = response.getOutputStream(); + byte[] buffer = new byte[1024]; + int i = bis.read(buffer); + while (i != -1) { + os.write(buffer, 0, i); + i = bis.read(buffer); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (bis != null) { + try { + bis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } } - - return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); - } catch (ImppBusiException busExcep) { - return ResultBean.fail(busExcep); } catch (Exception e) { - return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + LOGGER.error("下载异常",e); + throw ImppExceptionBuilder.newInstance().setErrorDetail(e.getMessage()).build(); } finally { - // 清理临时文件文件 - if (zipFile != null) { - FileTool.deleteFile(zipFile.getPath()); - } - if (excelDir != null) { - FileTool.deleteFile(excelDir.getPath()); + if (excelFile != null) { + FileTool.deleteFile(excelFile.getPath()); } } } @@ -448,27 +434,22 @@ public class SysTaskController extends CoreBaseController { @GetMapping(value = "/down-template") @ApiOperation(value = "下载导入模板") - public ResultBean downExcelTemplate() { + public void downExcelTemplate(HttpServletResponse response) { try { ExcelTool excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis()); String importTemplateCode = "SysTaskImportTemplate"; - // 查询服务器中是否存在模板文件 - ImppFile fastDFSFile = new ImppFile("SysTaskImportTemplate.xls", - excelTool.importTemplate(SysTask.class), ".xls"); + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", + "attachment;fileName=" + URLEncoder.encode(importTemplateCode + ".xls", "UTF-8")); + response.flushBuffer(); - SysFile sysFile = sysFileService.getSysFileByFileCode(importTemplateCode); - if (sysFile == null) { - sysFile = fileService.upload(fastDFSFile, CommonEnumUtil.SOFT_TYPE.CORE.getValue()); - sysFile.setFileCode(importTemplateCode); - sysFile = sysFileService.insertSysFile(sysFile); - } - - return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(sysFile); - } catch (ImppBusiException busExcep) { - return ResultBean.fail(busExcep); + response.getOutputStream().write(excelTool.importTemplate(SysTask.class)); + response.getOutputStream().flush(); } catch (Exception e) { - return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + LOGGER.error("下载异常",e); + throw ImppExceptionBuilder.newInstance().setErrorDetail(e.getMessage()).build(); } } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java index e35722e..2f692bf 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java @@ -10,15 +10,16 @@ import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.tool.ExcelTool; import cn.estsh.i3plus.platform.common.tool.FileTool; import cn.estsh.i3plus.platform.common.tool.StringTool; -import cn.estsh.i3plus.platform.common.tool.ZipTool; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; -import cn.estsh.i3plus.pojo.base.bean.ImppFile; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; -import cn.estsh.i3plus.pojo.platform.bean.*; +import cn.estsh.i3plus.pojo.platform.bean.SysRefTaskCyclePlan; +import cn.estsh.i3plus.pojo.platform.bean.SysTask; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskCycle; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskPlan; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -39,12 +40,10 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.persistence.EntityManager; -import java.io.File; -import java.io.FileInputStream; -import java.text.MessageFormat; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; import java.text.ParseException; -import java.util.ArrayList; -import java.util.Date; import java.util.List; import java.util.Map; @@ -353,67 +352,58 @@ public class SysTaskCycleController extends CoreBaseController { @GetMapping(value = "/export") @ApiOperation(value = "导出数据") - public ResultBean exportExcel(SysTaskCycle bean, boolean needSendMessage) { - ListPager listPager; - List result = new ArrayList<>(); - File zipFile = null; - File excelDir = null; - File excelFile; - ExcelTool excelTool; + public void exportExcel(SysTaskCycle bean, HttpServletResponse response) { + File excelFile = null; try { - Pager pager = new Pager(0); - // 判断是否超过excel最大导出数量设定值 - pager.setPageSize(RedisCacheTool.getSysConfigIntVal(PlatformConstWords.EXCEL_EXPORT_MAX_ROW, 20000)); - - // 数据校验 Map colMap = ExcelTool.getColName(SysTaskCycle.class); String[] colName = new String[colMap.size()]; - int i = 0; + int j = 0; for (String key : colMap.keySet()) { - colName[i++] = key; + colName[j++] = key; } - excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis()); - excelDir = new File(System.getProperty("java.io.tmpdir") + File.separator + new Date().getTime()); - excelDir.mkdir(); - do { - listPager = sysTaskCycleService.querySysTaskCycleByPager(bean, pager); - pager = listPager.getObjectPager(); - - // 将excel导出至临时文件夹 - excelFile = new File(MessageFormat.format("{0}{1}{2}{3}.xls", excelDir, File.separator, - SysTaskCycle.class.getSimpleName(), - pager.getCurrentPage())); - excelFile.createNewFile(); - excelTool.exportData(excelFile, listPager.getObjectList(), SysTaskCycle.class, colName); - - pager.setCurrentPage(pager.getCurrentPage() + 1); - } while (pager.getCurrentPage() <= pager.getTotalPages()); - - // 将所有excel文件打包上传 - zipFile = ZipTool.zipFile(null, excelDir); - SysFile sysFile = fileService.upload(new FileInputStream(zipFile), zipFile.getName(), - StringTool.getStringFileSuffix(zipFile.getName(), true), CommonEnumUtil.SOFT_TYPE.CORE.getValue()); - - result.add(sysFileService.insertSysFile(sysFile)); - - // 是否发送站内信 - if (needSendMessage) { - sysMessageService.insertSysMessage(ExcelTool.sendStationLetter(result, getSessionUser().getUser().getId())); + ExcelTool excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis()); + // 将excel导出至临时文件夹 + excelFile = new File(System.getProperty("java.io.tmpdir") + File.separator + AuthUtil.getSessionUser().getUserName() + + "SysTaskCycle.xls"); + excelFile.createNewFile(); + excelTool.exportData(excelFile, sysTaskCycleService.findSysTaskCycleByCondition(bean), SysTaskCycle.class, colName); + + + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", + "attachment;fileName=" + URLEncoder.encode(excelFile.getName(), "UTF-8")); + response.flushBuffer(); + + BufferedInputStream bis = null; + try { + bis = new BufferedInputStream(new FileInputStream(excelFile)); + OutputStream os = response.getOutputStream(); + byte[] buffer = new byte[1024]; + int i = bis.read(buffer); + while (i != -1) { + os.write(buffer, 0, i); + i = bis.read(buffer); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (bis != null) { + try { + bis.close(); + excelFile.delete(); + } catch (IOException e) { + e.printStackTrace(); + } + } } - - return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); - } catch (ImppBusiException busExcep) { - return ResultBean.fail(busExcep); } catch (Exception e) { - return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + LOGGER.error("下载异常",e); + throw ImppExceptionBuilder.newInstance().setErrorDetail(e.getMessage()).build(); } finally { - // 清理临时文件文件 - if (zipFile != null) { - FileTool.deleteFile(zipFile.getPath()); - } - if (excelDir != null) { - FileTool.deleteFile(excelDir.getPath()); + if (excelFile != null) { + FileTool.deleteFile(excelFile.getPath()); } } } @@ -427,19 +417,10 @@ public class SysTaskCycleController extends CoreBaseController { //校验导入数据并初始化 for (SysTaskCycle taskCycle : beanList) { -// if (!sysTaskService.checkSysTaskOnly(sysTask)) { -// throw ImppExceptionBuilder.newInstance() -// .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) -// .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) -// .setErrorDetail("任务名称【%s】必须唯一", sysTask.getName()) -// .setErrorSolution("请重新输入") -// .build(); -// } - ConvertBean.modelInitialize(taskCycle, AuthUtil.getSessionUser()); } -// sysTaskCycleService.insertSysTaskCycle(beanList); + sysTaskCycleService.insertBatchSysTaskCycle(beanList); return ResultBean.success("导入成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { @@ -451,27 +432,21 @@ public class SysTaskCycleController extends CoreBaseController { @GetMapping(value = "/down-template") @ApiOperation(value = "下载导入模板") - public ResultBean downExcelTemplate() { + public void downExcelTemplate(HttpServletResponse response) { try { ExcelTool excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis()); String importTemplateCode = "SysTaskCycleImportTemplate"; - // 查询服务器中是否存在模板文件 - ImppFile fastDFSFile = new ImppFile("SysTaskCycleImportTemplate.xls", - excelTool.importTemplate(SysTaskCycle.class), ".xls"); - - SysFile sysFile = sysFileService.getSysFileByFileCode(importTemplateCode); - if (sysFile == null) { - sysFile = fileService.upload(fastDFSFile, CommonEnumUtil.SOFT_TYPE.CORE.getValue()); - sysFile.setFileCode(importTemplateCode); - sysFile = sysFileService.insertSysFile(sysFile); - } + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", + "attachment;fileName=" + URLEncoder.encode(importTemplateCode + ".xls", "UTF-8")); - return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(sysFile); - } catch (ImppBusiException busExcep) { - return ResultBean.fail(busExcep); + response.getOutputStream().write(excelTool.importTemplate(SysTaskCycle.class)); + response.getOutputStream().flush(); } catch (Exception e) { - return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + LOGGER.error("下载异常",e); + throw ImppExceptionBuilder.newInstance().setErrorDetail(e.getMessage()).build(); } } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java index c7ebf98..5867a17 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java @@ -19,7 +19,6 @@ import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; -import cn.estsh.i3plus.pojo.platform.bean.SysFile; import cn.estsh.i3plus.pojo.platform.bean.SysTask; import cn.estsh.i3plus.pojo.platform.bean.SysTaskCycle; import cn.estsh.i3plus.pojo.platform.bean.SysTaskPlan; @@ -34,6 +33,7 @@ import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -41,10 +41,13 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.persistence.EntityManager; -import java.io.File; -import java.util.ArrayList; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** * @Description : 任务计划管理服务 @@ -138,6 +141,7 @@ public class SysTaskPlanController extends CoreBaseController { @PostMapping(value = "/insert") @ApiOperation(value = "新增任务计划", notes = "任务计划") public ResultBean insertSysTaskTime(@RequestBody SysTaskPlan sysTaskPlan, Integer isExecute) { + boolean isMakeUpOperate = false; try { startMultiService(); @@ -166,14 +170,14 @@ public class SysTaskPlanController extends CoreBaseController { sysTaskPlan.setTaskPlanStatus(CommonEnumUtil.DATA_STATUS.ENABLE.getValue()); // 唯一检查 - LOGGER.info("定时任务唯一校验 Name:{0},GroupName:{1}", sysTaskPlan.getName(), sysTaskPlan.getGroupName()); + LOGGER.info("定时任务唯一校验 Name:{},GroupName:{}", sysTaskPlan.getName(), sysTaskPlan.getGroupName()); BaseResultBean baseResultBean = getJobService(sysTaskPlan.getTaskSoftTypeRdd()) .checkJobExists(sysTaskPlan.getName(), sysTaskPlan.getGroupName()); if (baseResultBean.isSuccess() && baseResultBean.getResultObject() != null && (boolean) baseResultBean.getResultObject()) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()) - .setErrorDetail("定时任务已存在 %s" , baseResultBean.getErrorMsg()) + .setErrorDetail("定时任务已存在 %s", baseResultBean.getErrorMsg()) .build(); } @@ -182,7 +186,6 @@ public class SysTaskPlanController extends CoreBaseController { sysTask.getTaskClass(), sysTaskPlan.getName(), sysTaskPlan.getGroupName(), sysTaskCycle.getTaskCycleExps(), sysTaskPlan.getTaskPlanParam()); if (!baseResultBean.isSuccess()) { - getJobService(sysTaskPlan.getTaskSoftTypeRdd()).deleteTask(sysTaskPlan.getName(),sysTaskPlan.getGroupName()); throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()) @@ -210,9 +213,17 @@ public class SysTaskPlanController extends CoreBaseController { return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(sysTaskPlan); } catch (ImppBusiException busExcep) { + isMakeUpOperate = true; return ResultBean.fail(busExcep); } catch (Exception e) { + isMakeUpOperate = true; return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } finally { + // 如果失败进行补偿删除,避免添加垃圾数据 + if (isMakeUpOperate && sysTaskPlan.getTaskSoftTypeRdd() != null + && StringUtils.isNotBlank(sysTaskPlan.getName()) && StringUtils.isNotBlank(sysTaskPlan.getGroupName())) { + getJobService(sysTaskPlan.getTaskSoftTypeRdd()).deleteTask(sysTaskPlan.getName(), sysTaskPlan.getGroupName()); + } } } @@ -274,7 +285,11 @@ public class SysTaskPlanController extends CoreBaseController { baseResultBean = getJobService(sysTaskPlan.getTaskSoftTypeRdd()) .editTask(sysTask.getTaskPackage(), sysTask.getTaskClass(), sysTaskPlan.getName(), sysTaskPlan.getGroupName(), sysTaskCycle.getTaskCycleExps(), sysTaskPlan.getTaskPlanParam()); + // 判断是否失败如果失败进行补偿新增,避免出现勿删的情况 if (!baseResultBean.isSuccess()) { + getJobService(sysTaskPlan.getTaskSoftTypeRdd()) + .addTask(sysTask.getTaskPackage(), sysTask.getTaskClass(), sysTaskPlan.getName() + , sysTaskPlan.getGroupName(), sysTaskCycle.getTaskCycleExps(), sysTaskPlan.getTaskPlanParam()); resultBean = ResultBean.fail(baseResultBean.getErrorMsg()); } @@ -404,7 +419,7 @@ public class SysTaskPlanController extends CoreBaseController { * 任务计划复杂查询,分页,排序 * * @param sysTaskPlan 查询条件 - * @param pager 分页信息 + * @param pager 分页信息 * @return 处理结果 */ @GetMapping("/query") @@ -450,48 +465,77 @@ public class SysTaskPlanController extends CoreBaseController { } /** - * 全部刷新 + * 全部重载 * * @return 处理结果 */ - @GetMapping(value = "/refresh/{id}") - @ApiOperation(value = "全部刷新", notes = "全部刷新") - public ResultBean refreshTaskPlan(boolean isSkipDisablePlan) { + @GetMapping(value = "/reload-all") + @ApiOperation(value = "全部重载", notes = "全部重载") + public ResultBean refreshAllTaskPlan(boolean isSkipDisablePlan) { try { List sysTaskPlanList = sysTaskPlanService.listSysTaskPlan(); - ResultBean resultBean = ResultBean.success("操作成功"); SysTask sysTask; SysTaskCycle sysTaskCycle; for (SysTaskPlan sysTaskPlan : sysTaskPlanList) { - if(isSkipDisablePlan && sysTaskPlan.getTaskPlanStatusVal() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()){ + if (isSkipDisablePlan && sysTaskPlan.getTaskPlanStatusVal() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) { continue; } sysTask = sysTaskService.getSysTaskById(sysTaskPlan.getTaskId()); sysTaskCycle = sysTaskCycleService.getSysTaskCycleById(sysTaskPlan.getTaskCycleId()); - // 调用对应微服务的检查接口 - LOGGER.info("微服定时任务数据校验:name:{}, groupName:{}", sysTaskPlan.getName(), sysTaskPlan.getGroupName()); + + // 修改对应微服务的定时任务 + LOGGER.info("微服修改定时任务数据:taskPlan", sysTaskPlan.toString()); BaseResultBean baseResultBean = getJobService(sysTaskPlan.getTaskSoftTypeRdd()) - .checkJobExists(sysTaskPlan.getName(), sysTaskPlan.getGroupName()); - if (baseResultBean.isSuccess() && baseResultBean.getResultObject() != null && !(boolean) baseResultBean.getResultObject()) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) - .setErrorDetail("定时任务不存在") - .build(); - } else if (!baseResultBean.isSuccess()) { - resultBean = ResultBean.fail(baseResultBean.getErrorMsg()); + .editTask(sysTask.getTaskPackage(), sysTask.getTaskClass(), sysTaskPlan.getName(), + sysTaskPlan.getGroupName(), sysTaskCycle.getTaskCycleExps(), sysTaskPlan.getTaskPlanParam()); + // 判断是否失败如果失败进行补偿新增,避免出现勿删的情况 + if (!baseResultBean.isSuccess()) { + getJobService(sysTaskPlan.getTaskSoftTypeRdd()) + .addTask(sysTask.getTaskPackage(), sysTask.getTaskClass(), sysTaskPlan.getName() + , sysTaskPlan.getGroupName(), sysTaskCycle.getTaskCycleExps(), sysTaskPlan.getTaskPlanParam()); } + } + return ResultBean.success("操作成功"); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 全部刷新 + * + * @return 处理结果 + */ + @PutMapping(value = "/reload-ids") + @ApiOperation(value = "按id重载计划", notes = "按id重载计划") + public ResultBean reloadTaskPlanById(@RequestBody Long[] ids) { + try { + List sysTaskPlanList = sysTaskPlanService.findSysTaskPlanByIds(ids); + SysTask sysTask; + SysTaskCycle sysTaskCycle; + for (SysTaskPlan sysTaskPlan : sysTaskPlanList) { + sysTask = sysTaskService.getSysTaskById(sysTaskPlan.getTaskId()); + sysTaskCycle = sysTaskCycleService.getSysTaskCycleById(sysTaskPlan.getTaskCycleId()); // 修改对应微服务的定时任务 LOGGER.info("微服修改定时任务数据:taskPlan", sysTaskPlan.toString()); - baseResultBean = getJobService(sysTaskPlan.getTaskSoftTypeRdd()) + BaseResultBean baseResultBean = getJobService(sysTaskPlan.getTaskSoftTypeRdd()) .editTask(sysTask.getTaskPackage(), sysTask.getTaskClass(), sysTaskPlan.getName(), sysTaskPlan.getGroupName(), sysTaskCycle.getTaskCycleExps(), sysTaskPlan.getTaskPlanParam()); + + // 判断是否失败如果失败进行补偿新增,避免出现勿删的情况 if (!baseResultBean.isSuccess()) { - resultBean = ResultBean.fail(baseResultBean.getErrorMsg()); + LOGGER.error("重载任务计划name:{} group:{} 失败: {}",sysTaskPlan.getName() + ,sysTaskPlan.getGroupName(),baseResultBean.getErrorMsg()); + + getJobService(sysTaskPlan.getTaskSoftTypeRdd()) + .addTask(sysTask.getTaskPackage(), sysTask.getTaskClass(), sysTaskPlan.getName() + , sysTaskPlan.getGroupName(), sysTaskCycle.getTaskCycleExps(), sysTaskPlan.getTaskPlanParam()); } } - return resultBean; + return ResultBean.success("操作成功"); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); } catch (Exception e) { @@ -503,67 +547,57 @@ public class SysTaskPlanController extends CoreBaseController { @GetMapping(value = "/export") @ApiOperation(value = "导出数据") - public ResultBean exportExcel(SysTask bean, boolean needSendMessage) { - ListPager listPager; - List result = new ArrayList<>(); - File zipFile = null; - File excelDir = null; - File excelFile; - ExcelTool excelTool; + public void exportExcel(SysTaskPlan sysTaskPlan,HttpServletResponse response) { + File excelFile = null; try { - Pager pager = new Pager(0); - // 判断是否超过excel最大导出数量设定值 - pager.setPageSize(RedisCacheTool.getSysConfigIntVal(PlatformConstWords.EXCEL_EXPORT_MAX_ROW, 20000)); - - // 数据校验 - Map colMap = ExcelTool.getColName(SysTaskCycle.class); + Map colMap = ExcelTool.getColName(SysTaskPlan.class); String[] colName = new String[colMap.size()]; - int i = 0; + int j = 0; for (String key : colMap.keySet()) { - colName[i++] = key; + colName[j++] = key; } -// excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis()); -// excelDir = new File(System.getProperty("java.io.tmpdir") + File.separator + new Date().getTime()); -// excelDir.mkdir(); -// do { -// listPager = sysTaskService.querySysTaskByPager(bean, pager); -// pager = listPager.getObjectPager(); -// -// // 将excel导出至临时文件夹 -// excelFile = new File(MessageFormat.format("{0}{1}{2}{3}.xls", excelDir, File.separator, -// SysTaskCycle.class.getSimpleName(), -// pager.getCurrentPage())); -// excelFile.createNewFile(); -// excelTool.exportData(excelFile, listPager.getObjectList(), SysTaskCycle.class, colName); -// -// pager.setCurrentPage(pager.getCurrentPage() + 1); -// } while (pager.getCurrentPage() <= pager.getTotalPages()); -// -// // 将所有excel文件打包上传 -// zipFile = ZipTool.zipFile(null, excelDir); -// SysFile sysFile = fileService.upload(new FileInputStream(zipFile), zipFile.getName(), -// StringTool.getStringFileSuffix(zipFile.getName(), true), CommonEnumUtil.SOFT_TYPE.CORE.getValue()); -// -// result.add(sysFileService.insertSysFile(sysFile)); -// -// // 是否发送站内信 -// if (needSendMessage) { -// sysMessageService.insertSysMessage(ExcelTool.sendStationLetter(result, getSessionUser().getUser().getId())); -// } - - return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); - } catch (ImppBusiException busExcep) { - return ResultBean.fail(busExcep); - } catch (Exception e) { - return ImppExceptionBuilder.newInstance().buildExceptionResult(e); - } finally { - // 清理临时文件文件 - if (zipFile != null) { - FileTool.deleteFile(zipFile.getPath()); + ExcelTool excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis()); + // 将excel导出至临时文件夹 + excelFile = new File(System.getProperty("java.io.tmpdir") + File.separator + AuthUtil.getSessionUser().getUserName() + + "SysTaskPlan.xls"); + excelFile.createNewFile(); + excelTool.exportData(excelFile, sysTaskPlanService.findSysTaskPlanByCondition(sysTaskPlan), SysTaskPlan.class, colName); + + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", + "attachment;fileName=" + URLEncoder.encode(excelFile.getName(), "UTF-8")); + response.flushBuffer(); + + BufferedInputStream bis = null; + try { + bis = new BufferedInputStream(new FileInputStream(excelFile)); + OutputStream os = response.getOutputStream(); + byte[] buffer = new byte[1024]; + int i = bis.read(buffer); + while (i != -1) { + os.write(buffer, 0, i); + i = bis.read(buffer); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (bis != null) { + try { + bis.close(); + excelFile.delete(); + } catch (IOException e) { + e.printStackTrace(); + } + } } - if (excelDir != null) { - FileTool.deleteFile(excelDir.getPath()); + } catch (Exception e) { + LOGGER.error("下载异常",e); + throw ImppExceptionBuilder.newInstance().setErrorDetail(e.getMessage()).build(); + } finally { + if (excelFile != null) { + FileTool.deleteFile(excelFile.getPath()); } } } @@ -573,23 +607,30 @@ public class SysTaskPlanController extends CoreBaseController { public ResultBean importExcel(@RequestParam("file") MultipartFile file) { try { ExcelTool excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis()); - List beanList = excelTool.importData(file.getOriginalFilename(), file.getInputStream(), SysTask.class); + List beanList = excelTool.importData(file.getOriginalFilename(), file.getInputStream(), SysTaskPlan.class); + Set keySet = new HashSet<>(); + String key; // 校验导入数据并初始化 - for (SysTask sysTask : beanList) { - if (!sysTaskService.checkSysTaskOnly(sysTask)) { + for (SysTaskPlan sysTaskPlan : beanList) { + key = sysTaskPlan.getName() + sysTaskPlan.getGroupName(); + if (keySet.contains(key) || !sysTaskPlanService.checkSysTaskPlanOnly(sysTaskPlan)) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("任务名称【%s】必须唯一", sysTask.getName()) + .setErrorDetail("任务名称【%s】必须唯一", sysTaskPlan.getName()) .setErrorSolution("请重新输入") .build(); } + keySet.add(key); - ConvertBean.modelInitialize(sysTask, AuthUtil.getSessionUser()); - } + ConvertBean.modelInitialize(sysTaskPlan, AuthUtil.getSessionUser()); - sysTaskService.insertBatchSysTask(beanList); + ResultBean resultBean = insertSysTaskTime(sysTaskPlan,CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + if (!resultBean.isSuccess()) { + return resultBean; + } + } return ResultBean.success("导入成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { @@ -601,28 +642,22 @@ public class SysTaskPlanController extends CoreBaseController { @GetMapping(value = "/down-template") @ApiOperation(value = "下载导入模板") - public ResultBean downExcelTemplate() { + public void downExcelTemplate(HttpServletResponse response) { try { -// ExcelTool excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis()); -// String importTemplateCode = "SysTaskCycleImportTemplate"; -// -// // 查询服务器中是否存在模板文件 -// ImppFile fastDFSFile = new ImppFile("SysTaskCycleImportTemplate.xls", -// excelTool.importTemplate(SysTaskCycle.class), ".xls"); -// -// SysFile sysFile = sysFileService.getSysFileByFileCode(importTemplateCode); -// if (sysFile == null) { -// sysFile = fileService.upload(fastDFSFile, CommonEnumUtil.SOFT_TYPE.CORE.getValue()); -// sysFile.setFileCode(importTemplateCode); -// sysFile = sysFileService.insertSysFile(sysFile); -// } - -// return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(sysFile); - return null; - } catch (ImppBusiException busExcep) { - return ResultBean.fail(busExcep); + ExcelTool excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis()); + String importTemplateCode = "SysTaskPlanImportTemplate"; + + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", + "attachment;fileName=" + URLEncoder.encode(importTemplateCode + ".xls", "UTF-8")); + response.flushBuffer(); + + response.getOutputStream().write(excelTool.importTemplate(SysTaskPlan.class)); + response.getOutputStream().flush(); } catch (Exception e) { - return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + LOGGER.error("下载异常",e); + throw ImppExceptionBuilder.newInstance().setErrorDetail(e.getMessage()).build(); } } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java index acfb2c9..9bb0d2f 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java @@ -2,19 +2,19 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; import cn.estsh.i3plus.core.api.iservice.busi.IPersonnelService; import cn.estsh.i3plus.core.api.iservice.busi.ISysMenuService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysPositionService; import cn.estsh.i3plus.core.api.iservice.busi.ISysRoleService; import cn.estsh.i3plus.core.apiservice.dao.IUserPermissionDao; import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.HqlPack; import cn.estsh.i3plus.pojo.platform.bean.*; -import cn.estsh.i3plus.pojo.platform.repository.SysMenuRepository; import cn.estsh.i3plus.pojo.platform.repository.SysRefRoleMenuRepository; import cn.estsh.i3plus.pojo.platform.repository.SysRefUserRoleRepository; import cn.estsh.i3plus.pojo.platform.repository.SysRoleRepository; @@ -22,12 +22,10 @@ import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; import cn.estsh.impp.framework.base.service.CacheCrudService; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; -import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.ApiOperation; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections4.ListUtils; -import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -226,11 +224,12 @@ public class SysRoleService extends CacheCrudService implements ISysRol @Override public List findSysRefRoleMenuByRoleId(Long roleId, Integer softType) { LOGGER.info("系统角色权限关系 RefRoleMenu find By RoleId"); - return refRoleMenuRDao.findByProperty( - new String[]{"roleId","softType","isValid"}, - new Object[]{roleId,softType, - CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()} - ); + DdlPackBean ddlPackBean = new DdlPackBean(); + DdlPreparedPack.getNumEqualPack(roleId,"roleId",ddlPackBean); + DdlPreparedPack.getNumEqualPack(softType,"softType",ddlPackBean); + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),"isValid",ddlPackBean); + + return refRoleMenuRDao.findByHqlWhere(ddlPackBean); } @Override diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskCycleService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskCycleService.java index 3edeadc..37c4bd8 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskCycleService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskCycleService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskCycleService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; @@ -101,9 +102,9 @@ public class SysTaskCycleService implements ISysTaskCycleService { pager = PagerHelper.getPager(pager, sysTaskCycleRDao.listCount()); return new ListPager(sysTaskCycleRDao.listPager(pager),pager); }else { - String hqlPack = CoreHqlPack.packHqlSysTaskCycle(sysTaskCycle); + DdlPackBean hqlPack = CoreHqlPack.packHqlSysTaskCycle(sysTaskCycle); pager = PagerHelper.getPager(pager, sysTaskCycleRDao.findByHqlWhereCount(hqlPack)); - return new ListPager(sysTaskCycleRDao.findByHqlWherePage(hqlPack + sysTaskCycle.orderBy(),pager),pager); + return new ListPager(sysTaskCycleRDao.findByHqlWherePage(hqlPack, pager), pager); } } @@ -129,4 +130,10 @@ public class SysTaskCycleService implements ISysTaskCycleService { public List findRefTaskCyclePlanByCycleId(Long cycleId) { return sysRefTaskCyclePlanRDao.findByProperty("taskCycleId",cycleId); } + + @Override + public List findSysTaskCycleByCondition(SysTaskCycle sysTaskCycle) { + return sysTaskCycleRDao.findByHqlWhere(CoreHqlPack.packHqlSysTaskCycle(sysTaskCycle)); + } + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskPlanService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskPlanService.java index d16ffcd..0333416 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskPlanService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskPlanService.java @@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Arrays; import java.util.List; /** @@ -111,6 +112,21 @@ public class SysTaskPlanService implements ISysTaskPlanService { } @Override + public List findSysTaskPlanByIds(Long[] ids) { + return sysTaskPlanRDao.findAllById(Arrays.asList(ids)); + } + + @Override + public boolean checkSysTaskPlanOnly(SysTaskPlan sysTaskPlan) { + return !sysTaskPlanRDao.isExitByHql(CoreHqlPack.packHqlSysTaskPlanOnly(sysTaskPlan)); + } + + @Override + public List findSysTaskPlanByCondition(SysTaskPlan sysTaskPlan) { + return sysTaskPlanRDao.findByHqlWhere(CoreHqlPack.packHqlSysTaskPlan(sysTaskPlan)); + } + + @Override @ApiOperation(value = "修改任务计划状态", notes = "修改任务计划状态") public void updateSysTaskPlanStatus(Long id, int status, SessionUser user) { LOGGER.info("定时任务 SYS_MENU id:{} status:{} user:{}", id, status, user); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskService.java index e614eac..c821d49 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskService.java @@ -133,4 +133,9 @@ public class SysTaskService implements ISysTaskService { public boolean checkSysTaskOnly(SysTask sysTask) { return !sysTaskRDao.isExitByHql(CoreHqlPack.packHqlCheckSysTaskOnly(sysTask)); } + + @Override + public List findSysTaskByCondition(SysTask sysTask) { + return sysTaskRDao.findByHqlWhere(CoreHqlPack.packHqlSysTask(sysTask)); + } } From da9e91b89de4f4f2921eba7384d19be9335cc69e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=AA=E4=BA=91=E6=98=8A?= Date: Wed, 22 Jul 2020 17:57:04 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BC=98=E5=8C=96=20=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E5=8F=91=E9=80=81=E5=A4=B1=E8=B4=A5=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/api/iservice/base/ISystemInitService.java | 3 + .../api/iservice/busi/ISysTaskPlanService.java | 1 + .../apiservice/controller/base/AuthController.java | 5 +- .../controller/base/BackstageController.java | 38 ++++++++++- .../controller/busi/SysEnumController.java | 9 +++ .../controller/busi/SysTaskPlanController.java | 52 +++++++++++++-- .../apiservice/mq/MdmDataSyncQueueReceiver.java | 76 +++++++++++----------- .../apiservice/mq/MessageLetterQueueReceiver.java | 2 +- .../apiservice/mq/MessageMailQueueReceiver.java | 69 +++++++++++++++++--- .../serviceimpl/base/SystemInitService.java | 23 +++++-- .../serviceimpl/busi/SysTaskPlanService.java | 4 ++ .../i3plus/core/apiservice/util/MailUtil.java | 18 +++-- .../src/main/resources/log4j2-spring.xml | 8 +-- 13 files changed, 239 insertions(+), 69 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java index 8c55366..72d2807 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java @@ -52,4 +52,7 @@ public interface ISystemInitService { @ApiOperation(value = "对象版本记录信息") void reloadPojoVersionPlan(); + + @ApiOperation(value = "定时任务日志等级") + void reloadTaskPlanLogLevel(); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskPlanService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskPlanService.java index b423925..1c56962 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskPlanService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskPlanService.java @@ -80,6 +80,7 @@ public interface ISysTaskPlanService { * @param groupName * @return */ + @AnnoIgnoreLog @ApiOperation(value = "查询任务计划",notes = "根据任务计划名称与组名称查询") SysTaskPlan getSysTaskPlanByNameAndGroup(String name, String groupName); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java index 5e134e4..a821be9 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java @@ -176,12 +176,13 @@ public class AuthController extends CoreBaseController { ValidatorBean.checkIsNumber(parentId,"父节点不能为空"); List result = memTreeService.packTreeSysMenuByUserIdAndParentId(getSessionUser().getUser().getId(), Long.parseLong(parentId)); - result = findChildList(result); // 国际化 result = sysMenuService.setLanguageSysMenuName(getSessionUser().getLanguageCode(),result); + result = findChildList(result); + return ResultBean.success("操作成功") .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) - .setResultList(findChildList(result)); + .setResultList(result); } catch (ImppBusiException busExcep) { LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); return ResultBean.fail(busExcep); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/BackstageController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/BackstageController.java index 91c9349..a7102a8 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/BackstageController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/BackstageController.java @@ -3,13 +3,16 @@ package cn.estsh.i3plus.core.apiservice.controller.base; import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; import cn.estsh.i3plus.core.api.iservice.busi.ICoreMemTreeService; import cn.estsh.i3plus.core.api.iservice.busi.ISysMenuService; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.model.license.ImppLicense; import cn.estsh.i3plus.pojo.platform.bean.SysMenu; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.license.ImppLicenseTool; +import cn.estsh.impp.framework.boot.license.serviceimpl.ImppLicenseDecoder; import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -17,9 +20,7 @@ import org.apache.commons.collections.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.*; @@ -158,4 +159,35 @@ public class BackstageController extends CoreBaseController { } } + @GetMapping(value = "/reset/task-log-level") + @ApiOperation(value = "重置定时任务日志等级",notes = "重置定时任务日志等级") + public ResultBean restTaskLogLevel(){ + try { + systemInitService.reloadTaskPlanLogLevel(); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping(value = "/license") + @ApiOperation(value = "更新授权信息", notes = "更新授权信息") + public ResultBean updateLicense(@RequestBody String content){ + try { + ImppLicense license = ImppLicenseDecoder.getLicenseDecoder(content); + if (Objects.nonNull(license)) { + ImppLicenseTool.updateImppLicense(license); + } else { + return ResultBean.fail("错误的授权信息"); + } + return ResultBean.success("操作成功"); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ResultBean.fail(e).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java index 56b8638..fa55177 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java @@ -336,4 +336,13 @@ public class SysEnumController extends CoreBaseController { return new ResultBean(true, "操作成功", LocaleUtils.getEnumLocaleResValuesToList(CommonEnumUtil.DATA_SOURCE_TYPE.values())); } + + @GetMapping("/message-send-status") + @ApiOperation(value = "消息发送状态", notes = "消息发送状态") + public ResultBean getMessageSendStatus() { + return new ResultBean(true, "操作成功", + LocaleUtils.getEnumLocaleResValuesToList(ImppEnumUtil.MESSAGE_SEND_STATUS.values())); + } + + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java index 5867a17..d5212e3 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; +import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskCycleService; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskPlanService; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskService; @@ -13,6 +14,7 @@ import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.tool.ExcelTool; import cn.estsh.i3plus.platform.common.tool.FileTool; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; @@ -28,6 +30,7 @@ import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.quartz.IQuartzJobService; import cn.estsh.impp.framework.boot.quartz.ScheduleTool; +import cn.estsh.impp.framework.boot.util.ImppRedis; import cn.estsh.impp.framework.boot.util.RedisCacheTool; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; @@ -40,6 +43,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import javax.persistence.EntityManager; import javax.servlet.http.HttpServletResponse; import java.io.*; @@ -75,6 +79,12 @@ public class SysTaskPlanController extends CoreBaseController { @Autowired private EntityManager entityManager; + @Autowired + private ISystemInitService systemInitService; + + @Resource(name= CommonConstWords.IMPP_REDIS_RES) + private ImppRedis redisRes; + /************ 微服定时任务 *********/ @Autowired private ScheduleTool scheduleTool; @@ -211,6 +221,9 @@ public class SysTaskPlanController extends CoreBaseController { } } + //更新任务计划缓存 + putTaskPlanCache(sysTaskPlan); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(sysTaskPlan); } catch (ImppBusiException busExcep) { isMakeUpOperate = true; @@ -301,6 +314,10 @@ public class SysTaskPlanController extends CoreBaseController { resultBean = ResultBean.fail(baseResultBean.getErrorMsg()); } } + + //更新任务计划缓存 + putTaskPlanCache(sysTaskPlan); + return resultBean; } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); @@ -329,6 +346,9 @@ public class SysTaskPlanController extends CoreBaseController { sysTaskPlanService.deleteSysTaskPlanById(Long.parseLong(id)); getJobService(sysTaskPlan.getTaskSoftTypeRdd()).deleteTask(sysTaskPlan.getName(), sysTaskPlan.getGroupName()); + // 清理缓存 + removeTaskPlanCache(sysTaskPlan); + return ResultBean.success().setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); @@ -495,6 +515,10 @@ public class SysTaskPlanController extends CoreBaseController { , sysTaskPlan.getGroupName(), sysTaskCycle.getTaskCycleExps(), sysTaskPlan.getTaskPlanParam()); } } + + // 刷新全部缓存 + reloadAllTaskPlanCache(); + return ResultBean.success("操作成功"); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); @@ -535,6 +559,10 @@ public class SysTaskPlanController extends CoreBaseController { , sysTaskPlan.getGroupName(), sysTaskCycle.getTaskCycleExps(), sysTaskPlan.getTaskPlanParam()); } } + + // 刷新全部缓存 + reloadAllTaskPlanCache(); + return ResultBean.success("操作成功"); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); @@ -566,8 +594,7 @@ public class SysTaskPlanController extends CoreBaseController { response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); - response.setHeader("Content-Disposition", - "attachment;fileName=" + URLEncoder.encode(excelFile.getName(), "UTF-8")); + response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(excelFile.getName(), "UTF-8")); response.flushBuffer(); BufferedInputStream bis = null; @@ -592,8 +619,8 @@ public class SysTaskPlanController extends CoreBaseController { } } } - } catch (Exception e) { - LOGGER.error("下载异常",e); + } catch (Exception e) { + LOGGER.error("下载异常", e); throw ImppExceptionBuilder.newInstance().setErrorDetail(e.getMessage()).build(); } finally { if (excelFile != null) { @@ -632,6 +659,9 @@ public class SysTaskPlanController extends CoreBaseController { } } + // 刷新全部缓存 + reloadAllTaskPlanCache(); + return ResultBean.success("导入成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); @@ -660,4 +690,18 @@ public class SysTaskPlanController extends CoreBaseController { throw ImppExceptionBuilder.newInstance().setErrorDetail(e.getMessage()).build(); } } + + private void putTaskPlanCache(SysTaskPlan plan){ + String redisKey = CommonConstWords.REDIS_PREFIX_TASK_LOG_LEVEL + ":" + plan.getGroupName() + "." + plan.getName(); + redisRes.putObject(redisKey, plan.getLogLevelVal(), -1); + } + + private void removeTaskPlanCache(SysTaskPlan plan){ + String redisKey = CommonConstWords.REDIS_PREFIX_TASK_LOG_LEVEL + ":" + plan.getGroupName() + "." + plan.getName(); + redisRes.deleteKey(redisKey); + } + + private void reloadAllTaskPlanCache(){ + systemInitService.reloadTaskPlanLogLevel(); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MdmDataSyncQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MdmDataSyncQueueReceiver.java index 5871f66..7fc08f6 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MdmDataSyncQueueReceiver.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MdmDataSyncQueueReceiver.java @@ -1,38 +1,38 @@ -package cn.estsh.i3plus.core.apiservice.mq; - -import cn.estsh.i3plus.core.apiservice.serviceimpl.mdm.SysToolSyncDataService; -import cn.estsh.i3plus.pojo.mdm.bean.busi.core.MdmGearCoreBusiExtd; -import cn.estsh.i3plus.pojo.mdm.bean.master.MdmGear; -import cn.estsh.impp.framework.boot.mdm.mq.BaseMdmDataSyncQueueReceiver; -import com.rabbitmq.client.Channel; -import org.springframework.amqp.core.Message; -import org.springframework.amqp.rabbit.annotation.RabbitListener; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Configuration; - -import static cn.estsh.i3plus.platform.common.util.MdmConstWords.QUEUE_MDM_SYNC_DATA_CORE; - -/** - * @Description : - * @Reference : - * @Author : yunhao - * @CreateDate : 2020-05-28 16:54 - * @Modify: - **/ -@ConditionalOnExpression("'${impp.mq.queue.mdm.sync:true}' == 'true'") -@Configuration -public class MdmDataSyncQueueReceiver extends BaseMdmDataSyncQueueReceiver { - - /** - * 初始化类关系 - */ - public MdmDataSyncQueueReceiver() { - putMdmDataRef(SysToolSyncDataService.class, MdmGear.class, MdmGearCoreBusiExtd.class); - } - - @Override - @RabbitListener(queues = QUEUE_MDM_SYNC_DATA_CORE) - public void syncMasterData(String syncDataStr, Channel channel, Message message) { - processSyncMasterData(syncDataStr, channel, message); - } -} +//package cn.estsh.i3plus.core.apiservice.mq; +// +//import cn.estsh.i3plus.core.apiservice.serviceimpl.mdm.SysToolSyncDataService; +//import cn.estsh.i3plus.pojo.mdm.bean.busi.core.MdmGearCoreBusiExtd; +//import cn.estsh.i3plus.pojo.mdm.bean.master.MdmGear; +//import cn.estsh.impp.framework.boot.mdm.mq.BaseMdmDataSyncQueueReceiver; +//import com.rabbitmq.client.Channel; +//import org.springframework.amqp.core.Message; +//import org.springframework.amqp.rabbit.annotation.RabbitListener; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +//import org.springframework.context.annotation.Configuration; +// +//import static cn.estsh.i3plus.platform.common.util.MdmConstWords.QUEUE_MDM_SYNC_DATA_CORE; +// +///** +// * @Description : +// * @Reference : +// * @Author : yunhao +// * @CreateDate : 2020-05-28 16:54 +// * @Modify: +// **/ +//@ConditionalOnExpression("'${impp.mq.queue.mdm.sync:true}' == 'true'") +//@Configuration +//public class MdmDataSyncQueueReceiver extends BaseMdmDataSyncQueueReceiver { +// +// /** +// * 初始化类关系 +// */ +// public MdmDataSyncQueueReceiver() { +// putMdmDataRef(SysToolSyncDataService.class, MdmGear.class, MdmGearCoreBusiExtd.class); +// } +// +// @Override +// @RabbitListener(queues = QUEUE_MDM_SYNC_DATA_CORE) +// public void syncMasterData(String syncDataStr, Channel channel, Message message) { +// processSyncMasterData(syncDataStr, channel, message); +// } +//} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java index a65b2cf..b78f853 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java @@ -76,7 +76,7 @@ public class MessageLetterQueueReceiver { if (!StringUtils.isBlank(msg.getMessageReceiversId())) { String[] userIds = msg.getMessageReceiversId().split(","); - if (userIds != null && userIds.length > 0) { + if (userIds.length > 0) { List userList = personnelService.findSysUserByIds(StringTool.getArrayLong(userIds)); if (userList != null && userList.size() > 0) { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageMailQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageMailQueueReceiver.java index c8910d0..dc04a43 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageMailQueueReceiver.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageMailQueueReceiver.java @@ -15,6 +15,7 @@ import cn.estsh.impp.framework.boot.util.RedisCacheTool; import com.alibaba.fastjson.JSON; import com.rabbitmq.client.Channel; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.core.Message; @@ -47,9 +48,9 @@ public class MessageMailQueueReceiver { /** * 系统邮件处理队列 * - * @param data 系统消息信息 - * @param channel 通道 - * @param message 消息 + * @param data 系统消息信息 + * @param channel 通道 + * @param message 消息 */ @RabbitListener(queues = PlatformConstWords.QUEUE_IMPP_MESSAGE_MAIL) public void processImppMail(String data, Channel channel, Message message) { @@ -60,26 +61,40 @@ public class MessageMailQueueReceiver { if (msg.getMessageSendTime() == null) { msg.setMessageSendTime(TimeTool.getNowTime(true)); } - ConvertBean.serviceModelInitialize(msg,msg.getMessageSenderNameRdd()); + + // 持久化消息化消息并初始化状态 + ConvertBean.serviceModelInitialize(msg, msg.getMessageSenderNameRdd()); + msg.setSendStatus(ImppEnumUtil.MESSAGE_SEND_STATUS.SENDING.getValue()); msg = sysMessageService.insertSysMessage(msg); + // 默认发送成功 + msg.setSendStatus(ImppEnumUtil.MESSAGE_SEND_STATUS.SEND_SUCCESS.getValue()); + // 设置邮件主题内容及收件人 mailUtil.init(); mailUtil.setSubject(msg.getMessageTitle()); mailUtil.setContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.valueOfDescription(msg.getMessageContentType())); mailUtil.setBody(msg.getMessageContent()); + // 判断收件人类型 if (msg.getMessageReceiverType() != null) { if (msg.getMessageReceiverType().intValue() == ImppEnumUtil.MESSAGE_RECEIVER_TYPE.URGENT.getValue()) { // 判断是否为系统紧急提示 微服注册状态提示 mailUtil.setTo(RedisCacheTool.getSysConfigStrVal(PlatformConstWords.CONTACT_MAIL)); - // 次数过于频繁 - mailUtil.send(); + try { + mailUtil.send(); + } catch (Exception e) { + saveSendErrorMsg(msg, RedisCacheTool.getSysConfigStrVal(PlatformConstWords.CONTACT_MAIL), e); + } } else if (msg.getMessageReceiverType().intValue() == ImppEnumUtil.MESSAGE_RECEIVER_TYPE.EXTERNAL.getValue()) { //判断是否为外部邮件 mailUtil.setTo(StringUtils.split(msg.getMessageReceiversNameRdd(), ",")); - mailUtil.send(); + try { + mailUtil.send(); + } catch (Exception e) { + saveSendErrorMsg(msg, RedisCacheTool.getSysConfigStrVal(PlatformConstWords.CONTACT_MAIL), e); + } } else if (msg.getMessageReceiverType().intValue() == ImppEnumUtil.MESSAGE_RECEIVER_TYPE.INTERNAL.getValue()) { // 收件人信息 @@ -106,7 +121,12 @@ public class MessageMailQueueReceiver { sysMessageService.insertSysRefUserMessage(refUserMessage); mailUtil.setTo(sysUser.getUserEmail()); - mailUtil.send(); + + try { + mailUtil.send(); + } catch (Exception e) { + saveSendErrorMsg(msg, RedisCacheTool.getSysConfigStrVal(PlatformConstWords.CONTACT_MAIL), e); + } } } } @@ -132,4 +152,37 @@ public class MessageMailQueueReceiver { LOGGER.info("[Core Email] Email Id:{} , 耗时{}, Message Info :{}", msg.getId(), System.currentTimeMillis() - startTime, JSON.toJSONString(msg)); } } + + /** + * 保存发送异常信息 + * + * @param message 发送消息主体 + * @param mark 异常消息标识 + * @param e 异常信息 + */ + private void saveSendErrorMsg(SysMessage message, String mark, Exception e) { + if (message == null) { + return; + } + // 更新消息发送状态 + message.setSendStatus(ImppEnumUtil.MESSAGE_SEND_STATUS.SEND_FAIL.getValue()); + + StringBuilder errorMsg = new StringBuilder(); + // 校验标识是否存在 + if (StringUtils.isNotBlank(mark)) { + errorMsg.append("发送标识【"); + errorMsg.append(mark); + errorMsg.append("】"); + } + + // 拼接异常信息 + errorMsg.append(ExceptionUtils.getMessage(e)); + errorMsg.append("\r\n"); + + if (!StringUtils.isBlank(message.getErrorMessage())) { + errorMsg.insert(0, message.getErrorMessage()); + } + + message.setErrorMessage(errorMsg.toString()); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java index c85c2e5..b09a4a7 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java @@ -1,10 +1,7 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.base; import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysLocaleResourceService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysMenuService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysPojoVersionPlanService; -import cn.estsh.i3plus.core.api.iservice.busi.ISystemResourceService; +import cn.estsh.i3plus.core.api.iservice.busi.*; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; @@ -69,6 +66,8 @@ public class SystemInitService implements ISystemInitService { @Autowired private ISysPojoVersionPlanService pojoVersionPlanService; + @Autowired + private ISysTaskPlanService sysTaskPlanService; @Resource(name= CommonConstWords.IMPP_REDIS_RES) private ImppRedis redisRes; @@ -101,6 +100,10 @@ public class SystemInitService implements ISystemInitService { LOGGER.info("加载 对象版本控制信息"); reloadPojoVersionPlan(); LOGGER.info("加载 对象版本控制信息 信息完成"); + + LOGGER.info("加载 定时任务日志等级"); + reloadTaskPlanLogLevel(); + LOGGER.info("加载 定时任务日志等级 信息完成"); }catch (Exception e){ e.printStackTrace(); } @@ -283,6 +286,7 @@ public class SystemInitService implements ISystemInitService { } } + @Override public void putAndLoadSysMenu() { SysLocaleResource resource = new SysLocaleResource(); @@ -415,4 +419,15 @@ public class SystemInitService implements ISystemInitService { } } } + + @Override + public void reloadTaskPlanLogLevel() { + List sysTaskPlanList = sysTaskPlanService.listSysTaskPlan(); + if (CollectionUtils.isNotEmpty(sysTaskPlanList)){ + for (SysTaskPlan plan : sysTaskPlanList) { + String redisKey =CommonConstWords.REDIS_PREFIX_TASK_LOG_LEVEL + ":" + plan.getGroupName() + "." + plan.getName(); + redisRes.putObject(redisKey, plan.getLogLevelVal(), -1); + } + } + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskPlanService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskPlanService.java index 0333416..296607e 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskPlanService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskPlanService.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; import cn.estsh.i3plus.core.api.iservice.base.ISysLogService; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskPlanService; +import cn.estsh.i3plus.pojo.base.annotation.AnnoIgnoreLog; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; @@ -76,6 +77,7 @@ public class SysTaskPlanService implements ISysTaskPlanService { } @Override + @AnnoIgnoreLog @ApiOperation(value = "修改任务计划", notes = "修改任务计划") public void updateSysTaskPlan(SysTaskPlan sysTaskPlan) { SysTaskPlan originSysTaskPlan = sysTaskPlanRDao.getById(sysTaskPlan.getId()); @@ -103,6 +105,7 @@ public class SysTaskPlanService implements ISysTaskPlanService { originSysTaskPlan.setIsInternalUser(sysTaskPlan.getIsInternalUser()); originSysTaskPlan.setNoticeChannel(sysTaskPlan.getNoticeChannel()); originSysTaskPlan.setNoticeMethod(sysTaskPlan.getNoticeMethod()); + originSysTaskPlan.setLogLevel(sysTaskPlan.getLogLevel()); if(StringUtils.isNotBlank(sysTaskPlan.getLastRunDateTime())){ originSysTaskPlan.setLastRunDateTime(sysTaskPlan.getLastRunDateTime()); @@ -181,6 +184,7 @@ public class SysTaskPlanService implements ISysTaskPlanService { } @Override + @AnnoIgnoreLog @ApiOperation(value = "查询任务计划", notes = "根据任务计划名称与组名称查询") public SysTaskPlan getSysTaskPlanByNameAndGroup(String name, String groupName) { return sysTaskPlanRDao.getByProperty( diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java index 82be81c..54cc190 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java @@ -257,7 +257,7 @@ public class MailUtil { } catch (SMTPAddressFailedException e) { LOGGER.error(e.getClass() + "\t" + e.getMessage()); throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) .setErrorCode(ImppExceptionEnum.MAIL_RECIPIENT_NOT_EXIST.getCode()) .setErrorDetail(ImppExceptionEnum.MAIL_RECIPIENT_NOT_EXIST.getDescription()) .setErrorSolution("请重新设置收件人") @@ -265,7 +265,7 @@ public class MailUtil { } catch (AuthenticationFailedException e) { LOGGER.error(e.getClass() + "\t" + e.getMessage()); throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) .setErrorCode(ImppExceptionEnum.MAIL_LOGIN_PASS_ERROR.getCode()) .setErrorDetail(ImppExceptionEnum.MAIL_LOGIN_PASS_ERROR.getDescription()) .setErrorSolution("请重新设置账号或密码") @@ -273,19 +273,27 @@ public class MailUtil { } catch (MessagingException e) { LOGGER.error(e.getClass() + "\t" + e.getMessage()); throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) .setErrorCode(ImppExceptionEnum.MAIL_SERVER_CONFIG_ERROR.getCode()) .setErrorDetail(ImppExceptionEnum.MAIL_SERVER_CONFIG_ERROR.getDescription()) .setErrorSolution("请重新设置邮件服务器地址或端口") .build(); } catch (UnsupportedEncodingException e) { - e.printStackTrace(); + LOGGER.error(e.getClass() + "\t" + e.getMessage()); throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) .setErrorCode(ImppExceptionEnum.MAIL_SERVER_CONFIG_ERROR.getCode()) .setErrorDetail(ImppExceptionEnum.MAIL_SERVER_CONFIG_ERROR.getDescription()) .setErrorSolution("请重新设置邮件服务器地址或端口") .build(); + } catch (Exception e) { + LOGGER.error(e.getClass() + "\t" + e.getMessage()); + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) + .setErrorCode(ImppExceptionEnum.MAIL_SERVER_CONFIG_ERROR.getCode()) + .setErrorDetail(ImppExceptionEnum.MAIL_SERVER_CONFIG_ERROR.getDescription()) + .setErrorSolution("邮件发送异常:%s", e.getMessage()) + .build(); } } } diff --git a/modules/i3plus-core-apiservice/src/main/resources/log4j2-spring.xml b/modules/i3plus-core-apiservice/src/main/resources/log4j2-spring.xml index 64df19b..69eaf67 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/log4j2-spring.xml +++ b/modules/i3plus-core-apiservice/src/main/resources/log4j2-spring.xml @@ -47,10 +47,10 @@ - + filePattern="${logFileRootPath}/$${date:yyyy-MM}/task-name-%d{yyyy-MM-dd}-%i.log"> @@ -71,7 +71,7 @@ - +