From e42084ab38061068cbbe45b08285fc6689844953 Mon Sep 17 00:00:00 2001 From: "yunhao.wang" Date: Fri, 4 Jan 2019 19:29:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=AE=8C=E6=88=90=20=E8=A7=A3=E5=86=B3bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/iservice/busi/ISysLogTaskTimeService.java | 47 +++++++++ .../controller/busi/SysLogSystemController.java | 81 ++++++++++++++++ .../controller/busi/SysLogTaskTimeController.java | 105 +++++++++++++++++++++ .../controller/busi/SysUserController.java | 2 + .../serviceimpl/busi/SysLogTaskTimeService.java | 63 +++++++++++++ .../src/main/resources/init/sys-config.xlsx | Bin 33692 -> 33811 bytes 6 files changed, 298 insertions(+) create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogTaskTimeService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogTaskTimeController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogTaskTimeService.java diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogTaskTimeService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogTaskTimeService.java new file mode 100644 index 0000000..ae9e32d --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogTaskTimeService.java @@ -0,0 +1,47 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogTaskTime; +import io.swagger.annotations.ApiOperation; + +/** + * @Description : 定时任务日志服务接口 + * @Reference : + * @Author : yunhao + * @CreateDate : 2019-01-04 15:06 + * @Modify: + **/ +public interface ISysLogTaskTimeService { + + /** + * 添加定时任务日志 + * @param sysLogTaskTime + */ + @ApiOperation(value = "添加定时任务日志",notes = "添加定时任务日志") + void insertSysLogTaskTime(SysLogTaskTime sysLogTaskTime); + + /** + * 根据id删除定时任务日志 + * @param id + */ + @ApiOperation(value = "删除定时任务日志",notes = "删除定时任务日志") + void deleteSysLogTaskTimeById(Long id); + + /** + * 根据id查询定时任务日志 + * @param id + * @return + */ + @ApiOperation(value = "根据id查询定时任务日志",notes = "根据id查询定时任务日志") + SysLogTaskTime getSysLogTaskTimeById(Long id); + + /** + * 定时任务日志复杂查询 + * @param sysLogTaskTime + * @param pager + * @return + */ + @ApiOperation(value = "定时任务日志分页复杂查询",notes = "定时任务日志分页复杂查询") + ListPager querySysLogTaskTimeByPager(SysLogTaskTime sysLogTaskTime, Pager pager); +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java index 1ec9af3..e2d1303 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java @@ -1,14 +1,24 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; +import cn.estsh.i3plus.core.api.iservice.busi.ISysConfigService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; import cn.estsh.i3plus.core.api.iservice.busi.ISysLogSystemService; +import cn.estsh.i3plus.core.apiservice.util.ExcelUtil; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; +import cn.estsh.i3plus.pojo.platform.bean.SysFile; +import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule; import cn.estsh.i3plus.pojo.platform.platbean.SysLogSystem; 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.fastdfs.FastDFSClient; +import cn.estsh.impp.framework.boot.fastdfs.FastDFSFile; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; @@ -18,6 +28,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; import java.util.List; /** @@ -36,6 +47,18 @@ public class SysLogSystemController extends CoreBaseController{ @Autowired private ISysLogSystemService logSystemService; + @Autowired + private ISysDictionaryService sysDictionaryService; + + @Autowired + private ISysConfigService sysConfigService; + + @Autowired + private ISysFileService sysFileService; + + @Autowired + private FastDFSClient dfsClient; + @PostMapping(value = "/insert") @ApiOperation(value="新增系统日志",notes = "新增系统日志") public ResultBean insertSysLogSystem(SysLogSystem logSystem) { @@ -109,4 +132,62 @@ public class SysLogSystemController extends CoreBaseController{ return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @GetMapping("/get-col") + @ApiOperation(value = "获取系统日志字段") + public ResultBean getSysLogSystem(){ + try { + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultMap(ExcelUtil.getColName(SysLogSystem.class)); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/export") + @ApiOperation(value = "导出系统日志") + public ResultBean exportSysLogSystem(SysLogSystem sysLogSystem, String[] colName){ + try { + Pager pager = new Pager(); + pager.setCurrentPage(1); + pager.setPageSize(Integer.parseInt(sysConfigService.getSysConfigByCode(PlatformConstWords.EXCEL_EXPORT_MAX_ROW).getConfigValue())); + ListPager listPager; + String[] fileAbsolutePath; + List result = new ArrayList(); + do { + listPager = logSystemService.querySysLogSystemByPager(sysLogSystem, pager); + pager = listPager.getObjectPager(); + + // 上传至文件服务器 + FastDFSFile fastDFSFile = new FastDFSFile(SysOrderNoRule.class.getSimpleName() + pager.getCurrentPage() + ".xls", + ExcelUtil.exportData(listPager.getObjectList(),SysOrderNoRule.class,colName),"xls"); + + fileAbsolutePath = dfsClient.upload(fastDFSFile); + + // 保证系统文件表中 + String filePath = dfsClient.getHostUi() + "/" + fileAbsolutePath[0] + "/" + fileAbsolutePath[1]; + SysDictionary dictionary = sysDictionaryService.getSysDictionaryByParentCodeAndCode( + CommonConstWords.DICTIONARY_FILE_TYPE,fastDFSFile.getExt()); + + SysFile sysFile = new SysFile(); + sysFile.setDfsGroupName(fileAbsolutePath[0]); + sysFile.setDfsFileName(fileAbsolutePath[1]); + sysFile.setFileSize(fastDFSFile.getContent().length); + sysFile.setFilePath(filePath); + sysFile.setFileOriginalName(fastDFSFile.getName()); + sysFile.setFileTypeId(dictionary.getId()); + sysFile.setFileTypeName(dictionary.getName()); + sysFile.setDownloadNum(0); + result.add(sysFileService.insertSysFile(sysFile)); + + pager.setCurrentPage(pager.getCurrentPage() + 1); + } while (pager.getCurrentPage() <= pager.getTotalPages()); + 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); + } + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogTaskTimeController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogTaskTimeController.java new file mode 100644 index 0000000..21381d2 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogTaskTimeController.java @@ -0,0 +1,105 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLogSystemService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysLogTaskTimeService; +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogSystem; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogTaskTime; +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.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : 定时任务日志服务 + * @Reference : + * @Author : yunhao + * @Date : 2019-01-04 + * @Modify : + **/ +@RestController +@Api(description = "定时任务日志服务") +@RequestMapping(PlatformConstWords.BASE_URL +"/sys-log-task-time") +public class SysLogTaskTimeController extends CoreBaseController{ + public static final Logger LOGGER = LoggerFactory.getLogger(SysLogTaskTimeController.class); + + @Autowired + private ISysLogTaskTimeService logTaskTimeService; + + @PostMapping(value = "/insert") + @ApiOperation(value="新增定时任务日志",notes = "新增定时任务日志") + public ResultBean insertSyslogTaskTime(SysLogTaskTime sysLogTaskTime) { + try { + logTaskTimeService.insertSysLogTaskTime(sysLogTaskTime); + return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/delete") + @ApiOperation(value = "删除定时任务日志",notes = "删除定时任务日志") + public ResultBean deleteSysLogTaskTimeById(String id) { + try { + // 条件校验 + ValidatorBean.checkNotNull(id,"id不能为空"); + + logTaskTimeService.deleteSysLogTaskTimeById(Long.parseLong(id)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/get") + @ApiOperation(value = "根据id查询定时任务日志",notes = "根据id查询定时任务日志") + public ResultBean getSysLogTaskTimeById(String id){ + try { + SysLogTaskTime logTaskTime = logTaskTimeService.getSysLogTaskTimeById(Long.parseLong(id)); + if (logTaskTime != null) { + return ResultBean.success("查询成功").setResultObject(logTaskTime).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else { + return ResultBean.fail("日志不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 定时任务日志分页复杂查询 + * @param sysLogTaskTime + * @param pager + * @return + */ + @GetMapping("/query") + @ApiOperation(value = "定时任务日志分页复杂查询",notes = "定时任务日志分页复杂查询") + public ResultBean querySysLogSystemByPager(SysLogTaskTime sysLogTaskTime, Pager pager){ + try { + ListPager logSystemList = logTaskTimeService.querySysLogTaskTimeByPager(sysLogTaskTime, pager); + return ResultBean.success("查询成功").setListPager(logSystemList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java index cb91230..50dfc36 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java @@ -7,6 +7,7 @@ import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.EncryptTool; import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; @@ -421,6 +422,7 @@ public class SysUserController extends CoreBaseController{ message.setMessageSenderNameRdd(getSessionUser().getUserName()); message.setMessageReceiversId(user.getId().toString()); message.setMessageReceiversNameRdd(user.getUserName()); + message.setMessageSendTime(TimeTool.getNowTime(true)); sysMessageService.doSendSysMessage(message); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogTaskTimeService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogTaskTimeService.java new file mode 100644 index 0000000..696dab6 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogTaskTimeService.java @@ -0,0 +1,63 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLogTaskTimeService; +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.platform.platbean.SysLogSystem; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogTaskTime; +import cn.estsh.i3plus.pojo.platform.platrepositorymongo.SysLogTaskTimeRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreBsonPack; +import io.swagger.annotations.ApiOperation; +import org.bson.conversions.Bson; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 定时任务服务接口实现 + * @Reference : + * @Author : yunhao + * @CreateDate : 2019-01-04 15:10 + * @Modify: + **/ +@Service +public class SysLogTaskTimeService implements ISysLogTaskTimeService { + public static final Logger LOGGER = LoggerFactory.getLogger(SysLogTaskTimeService.class); + + @Autowired + private SysLogTaskTimeRepository sysLogTaskTimeRDao; + + @Override + @ApiOperation(value = "添加定时任务日志",notes = "添加定时任务日志") + public void insertSysLogTaskTime(SysLogTaskTime sysLogTaskTime) { + sysLogTaskTimeRDao.insert(sysLogTaskTime); + } + + @Override + @ApiOperation(value = "删除定时任务日志",notes = "删除定时任务日志") + public void deleteSysLogTaskTimeById(Long id) { + sysLogTaskTimeRDao.deleteById(id); + } + + @Override + @ApiOperation(value = "根据id查询定时任务日志",notes = "根据id查询定时任务日志") + public SysLogTaskTime getSysLogTaskTimeById(Long id) { + return sysLogTaskTimeRDao.getById(id); + } + + @Override + @ApiOperation(value = "定时任务日志分页复杂查询",notes = "定时任务日志分页复杂查询") + public ListPager querySysLogTaskTimeByPager(SysLogTaskTime sysLogTaskTime, Pager pager) { + if (sysLogTaskTime == null) { + pager = PagerHelper.getPager(pager,sysLogTaskTimeRDao.listCount()); + return new ListPager(sysLogTaskTimeRDao.listPager(pager),pager); + } else { + Bson bson = CoreBsonPack.packBsonByLogTaskTime(sysLogTaskTime); + pager = PagerHelper.getPager(pager,sysLogTaskTimeRDao.findByBsonCount(bson)); + return new ListPager(sysLogTaskTimeRDao.findByBsonPager(bson,pager,sysLogTaskTime.getOrderByParam() + ,sysLogTaskTime.getAscOrDesc()),pager); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/resources/init/sys-config.xlsx b/modules/i3plus-core-apiservice/src/main/resources/init/sys-config.xlsx index 4b31a2304b56449f52661a133e7b4074bca5fd15..94b84796ae6eccc0eb3eba9c8b65507f95a71bcc 100644 GIT binary patch delta 9723 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 PP=t37+o?-%yzhSiG2}rW delta 9636 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 bL_}x)