From 82dd2dc9e606bfa967b42e93cd64e1592b9d59f7 Mon Sep 17 00:00:00 2001 From: Silliter Date: Wed, 14 Nov 2018 17:44:53 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E5=B7=A5=E5=85=B7=E7=B1=BB=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus-core-apiservice/src/main/resources/application-dev.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties index 1a104b7..1387c33 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties @@ -22,6 +22,7 @@ impp.web.cross = false impp.web.cross.hosts = http://localhost ################ 云配置 ################ +eureka.client.enabled=false #默认主机 eureka.client.serviceUrl.defaultZone:http://192.168.1.123:8000/eureka #本服务实例ID From 0673a88073b446922d36bd6fcaac58a2499d6931 Mon Sep 17 00:00:00 2001 From: "wei.peng" Date: Wed, 14 Nov 2018 17:57:04 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=9B=BE=E5=83=8F?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/iservice/busi/ISysDictionaryService.java | 15 ++++ .../core/api/iservice/busi/ISysFileService.java | 4 +- .../controller/DemoUploadController.java | 29 ++++---- .../controller/busi/SysFileController.java | 87 +++++++++++++++------- .../controller/busi/SysUserInfoController.java | 6 +- .../serviceimpl/busi/SysDictionaryService.java | 28 +++++++ .../serviceimpl/busi/SysFileServiceImpl.java | 8 +- .../serviceimpl/busi/SysUserService.java | 31 +------- 8 files changed, 135 insertions(+), 73 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDictionaryService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDictionaryService.java index cc210a0..0893146 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDictionaryService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDictionaryService.java @@ -69,4 +69,19 @@ public interface ISysDictionaryService { * @param ids */ void deleteSysDictionaryByIds(String[] ids); + + /** + * 检出文件名称是否符合系统规范 + * @param fileName + * @return + */ + boolean checkFileName(String fileName); + + /** + * 根据父节点 已经当前节点CODE 获取字典信息 + * @param parentCode + * @param code + * @return + */ + SysDictionary getSysDictionaryByParentCodeAndCode(String parentCode,String code); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysFileService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysFileService.java index e25b04d..a5b8fa8 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysFileService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysFileService.java @@ -19,7 +19,7 @@ public interface ISysFileService { * 添加文件资源信息 * @param sysFile */ - void insertSysFile(SysFile sysFile); + SysFile insertSysFile(SysFile sysFile); /** * 删除文件资源小新 @@ -44,7 +44,7 @@ public interface ISysFileService { * @param id * @return */ - SysFile getSysFileById(String id); + SysFile getSysFileById(Long id); /** * 文件资源查询,分页,排序 diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoUploadController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoUploadController.java index 99dd35d..53cfbc7 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoUploadController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoUploadController.java @@ -1,12 +1,16 @@ package cn.estsh.i3plus.core.apiservice.controller; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; 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 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.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; @@ -18,7 +22,7 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes; * @CreateDate : 2018-09-28 11:20 * @Modify: **/ -@Controller +@RestController @RequestMapping("/demo-upload") @Api(description="复杂对象服务demo") public class DemoUploadController { @@ -51,19 +55,16 @@ public class DemoUploadController { @PostMapping("/upload") @ApiOperation(value = "文件上传",notes = "文件上传") - public String singleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) { - if (file.isEmpty()) { - redirectAttributes.addFlashAttribute("message", "请选择需要上传的文件。"); - return "redirect:/demo-upload/uploadStatus"; - } + public ResultBean singleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) { try { - // Get the file and save it somewhere - String path = dfsClient.saveFile(file); - redirectAttributes.addFlashAttribute("message","文件上传成功 '" + file.getOriginalFilename() + "'"); - redirectAttributes.addFlashAttribute("path","url路径 '" + path + "'"); - } catch (Exception e) { - LOGGER.error("upload file failed",e); + FastDFSFile dfsFile = dfsClient.saveFile(file); + return ResultBean.success("上传成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(dfsFile); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep.getErrorShow()); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); } - return "redirect:/demo-upload/uploadStatus"; } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java index 326a71b..ee9701b 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java @@ -1,18 +1,24 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; +import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; 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.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; import cn.estsh.i3plus.pojo.platform.bean.SysFile; import cn.estsh.i3plus.pojo.platform.bean.SysMessage; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +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; @@ -21,7 +27,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import java.io.IOException; import java.util.List; /** @@ -40,30 +49,11 @@ public class SysFileController { @Autowired private ISysFileService sysFileService; + @Autowired + private ISysDictionaryService dictionaryService; - @PostMapping(value = "/insert") - @ApiOperation(value = "添加文件资源",notes = "添加文件资源") - public ResultBean insertSysFile(SysFile sysFile){ - try { - // 登录用户 - SessionUser user = AuthUtil.getSessionUser(); - - // 条件校验 - ValidatorBean.beginValid(sysFile).notNull("name",sysFile.getName()); - - // 添加初始化 - ConvertBean.modelInitialize(sysFile,user); - - sysFileService.insertSysFile(sysFile); - return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - }catch(ImppBusiException busExcep){ - LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); - return ResultBean.fail(busExcep.getErrorShow()); - }catch(Exception e){ - LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); - return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); - } - } + @Autowired + private FastDFSClient dfsClient; @PutMapping(value = "/update") @ApiOperation(value = "修改文件资源",notes = "修改文件资源") @@ -122,7 +112,7 @@ public class SysFileController { @ApiOperation(value = "根据id查询文件资源",notes = "根据id查询文件资源") public ResultBean getSysFileById(@PathVariable("id") String id){ try { - SysFile sysFile = sysFileService.getSysFileById(id); + SysFile sysFile = sysFileService.getSysFileById(Long.parseLong(id)); return ResultBean.success("查询成功") .setResultObject(sysFile) .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); @@ -173,6 +163,53 @@ public class SysFileController { } } - /****************** 对文件操作 ******************/ + @PostMapping("/upload") + @ApiOperation(value = "文件上传",notes = "文件上传") + public ResultBean singleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) { + try { + if(file.isEmpty()){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要上传的文件。") + .build(); + } + + boolean checkFileN = dictionaryService.checkFileName(file.getOriginalFilename()); + if(!checkFileN){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_FORMAT.getCode()) + .setErrorDetail("文件格式不支持") + .setErrorSolution("请到字典管理中添加文件类型") + .build(); + } + + + FastDFSFile dfsFile = dfsClient.saveFile(file); + String filePath = dfsClient.getHostUi() + "/" + dfsFile.getDfsGroupName() + "/" + dfsFile.getDfsFileName(); + SysDictionary dictionary = dictionaryService.getSysDictionaryByParentCodeAndCode( + CommonConstWords.DICTIONARY_FILE_TYPE, + StringTool.getStringFileSuffix(file.getOriginalFilename(),false)); + SysFile sysFile = new SysFile(); + sysFile.setDfsGroupName(dfsFile.getDfsGroupName()); + sysFile.setDfsFileName(dfsFile.getDfsFileName()); + sysFile.setFileSize(dfsFile.getContent().length); + sysFile.setFilePath(filePath); + sysFile.setFileOriginalName(file.getOriginalFilename()); + sysFile.setFileTypeId(dictionary.getId()); + sysFile.setFileTypeName(dictionary.getName()); + + SysFile fileDb = sysFileService.insertSysFile(sysFile); + + return ResultBean.success("上传成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(fileDb); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep.getErrorShow()); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } } \ No newline at end of file diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java index a6133af..36bd735 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; import cn.estsh.i3plus.core.api.iservice.busi.IDepartmentService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; import cn.estsh.i3plus.core.api.iservice.busi.ISysUserInfoService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; @@ -8,6 +9,7 @@ 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.Department; +import cn.estsh.i3plus.pojo.platform.bean.SysFile; import cn.estsh.i3plus.pojo.platform.bean.SysUserInfo; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; import cn.estsh.impp.framework.boot.auth.AuthUtil; @@ -45,6 +47,9 @@ public class SysUserInfoController { @Autowired private IDepartmentService departmentService; + @Autowired + private ISysFileService sysFileService; + @PostMapping(value="/insert") @ApiOperation(value="添加用户信息",notes="返回内容添加用户信息") public ResultBean insertSysUserInfo(SysUserInfo userInfo){ @@ -62,7 +67,6 @@ public class SysUserInfoController { ConvertBean.modelInitialize(userInfo,user); SysUserInfo pos = sysUserInfoService.insertSysUserInfo(userInfo); - sysUserInfoService.refreshRefUserDepartment(pos.getId().toString(), new String[]{userInfo.getDepartmentId().toString()}, user.getUserName()); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java index 8ef9222..28d21ba 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java @@ -1,6 +1,8 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; @@ -139,4 +141,30 @@ public class SysDictionaryService implements ISysDictionaryService { sysDictionaryRDao.deleteByIds(array); } + + @Override + public boolean checkFileName(String fileName) { + List list = findSysDictionaryByParentCode(CommonConstWords.DICTIONARY_FILE_TYPE); + + if(list != null && list.size()> 0){ + String suffix = StringTool.getStringFileSuffix(fileName,true); + + for (SysDictionary dictionary : list) { + if(suffix.toUpperCase().equals(dictionary.getDictionaryValue().toUpperCase())){ + return true; + } + } + } + return false; + } + + @Override + public SysDictionary getSysDictionaryByParentCodeAndCode(String parentCode, String code) { + List list = sysDictionaryRDao.findByProperty(new String[]{"redParentCode","dictionaryCode"}, + new Object[]{parentCode,code}); + if(list != null && list.size() > 0){ + return list.get(0); + } + return null; + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysFileServiceImpl.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysFileServiceImpl.java index 7ebb71a..b6ccbdd 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysFileServiceImpl.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysFileServiceImpl.java @@ -29,9 +29,9 @@ public class SysFileServiceImpl implements ISysFileService { public SysFileRepository sysFileRDao; @Override - public void insertSysFile(SysFile sysFile) { + public SysFile insertSysFile(SysFile sysFile) { LOGGER.info("文件资源 SYS_FILE :{}",sysFile); - sysFileRDao.insert(sysFile); + return sysFileRDao.insert(sysFile); } @Override @@ -53,9 +53,9 @@ public class SysFileServiceImpl implements ISysFileService { } @Override - public SysFile getSysFileById(String id) { + public SysFile getSysFileById(Long id) { LOGGER.info("文件资源 SYS_FILE id:{}",id); - return sysFileRDao.getById(Long.parseLong(id)); + return sysFileRDao.getById(id); } @Override diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java index 4ddd263..7420cd2 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; import cn.estsh.i3plus.core.apiservice.dao.IUserPermissionDao; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -71,37 +72,14 @@ public class SysUserService implements ISysUserService { @Autowired private RefUserPositionRepository refUserPositionRDao; + @Autowired + private SysFileRepository sysFileRDao; + @Override public SessionUser queryUserLogin(String loginName, String password, String languageCode) throws AuthenticationException { LOGGER.debug("平台用户 SYS_USER loginName:{} \t password:{} \t languageCode:{}", loginName, password, languageCode); -// SysUser user = this.getSysUserByLoginName(loginName); -// -// if(user == null){ -// throw ImppExceptionBuilder.newInstance() -// .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) -// .setErrorCode(ImppExceptionEnum.LOGIN_USER_NAME_EXCEPTION.getCode()) -// .setErrorDetail("用户名不存在") -// .setErrorSolution("请重新输入用户名") -// .build(); -// } -// -// AuthenticationToken token = null; -// switch (user.getUserTypeId()) { -// case 2: -// token = new AdminToken(loginName, password, languageCode); -// break; -// case 3: -// token = new SaAdminToken(loginName, password, languageCode); -// break; -// default: -// token = new UserToken(loginName, password, languageCode); -// break; -// } -// SessionUser sessionUser = AuthUtil.login(token); - UserToken token = new UserToken(loginName,password,languageCode); - System.out.println("=============" + token); SessionUser sessionUser = AuthUtil.login(token); SysUser user = this.getSysUserByLoginName(loginName); @@ -336,7 +314,6 @@ public class SysUserService implements ISysUserService { * @return */ public SessionUser packSessionUser(SessionUser sessionUser, SysUser user, Integer userType, String languageCode) { - LOGGER.debug("平台用户 SYS_USER user id :{}", user.getId()); SysUserInfo userInfo = sysUserInfoRDao.getById(user.getUserInfoId()); Organize organize = organizeRDao.getById(userInfo.getOrganizeId()); From 59806414b9e7231a49d78f904167be16b933dc14 Mon Sep 17 00:00:00 2001 From: "yunhao.wang" Date: Wed, 14 Nov 2018 20:16:20 +0800 Subject: [PATCH 3/4] =?UTF-8?q?SysFileService=E6=96=B9=E6=B3=95=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E7=B1=BB=E5=9E=8B=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/core/apiservice/serviceimpl/busi/TestSysFileService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysFileService.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysFileService.java index 21e4854..cb886a0 100644 --- a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysFileService.java +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysFileService.java @@ -40,7 +40,7 @@ public class TestSysFileService extends TestBase { @Test @Transactional public void testGetSysFileById() { - SysFile sysFile = sysFileService.getSysFileById("1057110061127700480"); + SysFile sysFile = sysFileService.getSysFileById(1L); System.out.println(JSON.toJSONString(sysFile)); } @@ -74,7 +74,7 @@ public class TestSysFileService extends TestBase { @Test @Transactional public void testUpdateSysFile(){ - SysFile sysFile = sysFileService.getSysFileById("1057110613261684736"); + SysFile sysFile = sysFileService.getSysFileById(1L); sysFile.setName("测试修改"); sysFileService.updateSysFile(sysFile); From ec137693cfbefe254092e40979b2dbda4505f399 Mon Sep 17 00:00:00 2001 From: "yunhao.wang" Date: Thu, 15 Nov 2018 10:05:29 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E5=AE=8C=E6=88=90=20=E8=A1=A8=E8=BE=BE=E5=BC=8F=20=20=20?= =?UTF-8?q?=E5=AE=8C=E6=88=90=20=E9=82=AE=E4=BB=B6=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/api/iservice/busi/ITaskTimeService.java | 31 ++- modules/i3plus-core-apiservice/pom.xml | 5 + .../controller/DemoScheduleController.java | 2 +- .../controller/busi/TaskTimeController.java | 87 ++++++--- .../core/apiservice/schedulejob/DemoJob.java | 17 ++ .../busi/TaskTimeExpressionServiceImpl.java | 5 + .../serviceimpl/busi/TaskTimeServiceImpl.java | 209 ++++++++++++++++++++- .../i3plus/core/apiservice/util/MailUtil.java | 202 ++++++++++++++++++++ .../src/main/resources/mail.properties | 5 + .../serviceimpl/busi/TestTaskTimeService.java | 11 +- .../serviceimpl/busi/TestToolService.java | 4 +- pom.xml | 6 + 12 files changed, 530 insertions(+), 54 deletions(-) create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java create mode 100644 modules/i3plus-core-apiservice/src/main/resources/mail.properties diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITaskTimeService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITaskTimeService.java index 67844e6..d49685c 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITaskTimeService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITaskTimeService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; import cn.estsh.i3plus.pojo.platform.bean.TaskTime; +import cn.estsh.i3plus.pojo.platform.bean.TaskTimeExpression; import java.util.List; @@ -17,10 +18,17 @@ import java.util.List; public interface ITaskTimeService { /** + * 新增数据 + * @param taskTime + * @return + */ + TaskTime insertTaskTime(TaskTime taskTime, TaskTimeExpression taskTimeExpression); + + /** * 修改数据 * @param taskTime */ - void updateTaskTime(TaskTime taskTime); + void updateTaskTime(TaskTime taskTime, TaskTimeExpression taskTimeExpression); /** * 修改任务状态 @@ -37,13 +45,6 @@ public interface ITaskTimeService { void deleteTaskTimeById(String id); /** - * 新增数据 - * @param taskTime - * @return - */ - TaskTime insertTaskTime(TaskTime taskTime); - - /** * 查询所有数据 * @return */ @@ -76,4 +77,18 @@ public interface ITaskTimeService { * */ void updateTaskTimeStatusByIds(String[] ids, Integer status); + + /** + * 修改最后时间 + * @param lastDate + * @param name + * @param groupName + */ + void doTaskTimeLastDateByNameAndGroupName(String lastDate,String name,String groupName); + + /** + * 立即执行 + * @param idStr + */ + void executeTaskTimeById(long idStr); } diff --git a/modules/i3plus-core-apiservice/pom.xml b/modules/i3plus-core-apiservice/pom.xml index 2ff810d..c0374d9 100644 --- a/modules/i3plus-core-apiservice/pom.xml +++ b/modules/i3plus-core-apiservice/pom.xml @@ -112,6 +112,11 @@ junit test + + + javax.mail + mail + diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoScheduleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoScheduleController.java index 5200db6..c269622 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoScheduleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoScheduleController.java @@ -39,7 +39,7 @@ public class DemoScheduleController { System.out.println(ti); } - return new ResultBean(true,""); + return new ResultBean(true,"").setResultList(taskList); } @GetMapping(value="/add-task") diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/TaskTimeController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/TaskTimeController.java index 78bf797..dd92872 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/TaskTimeController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/TaskTimeController.java @@ -46,28 +46,33 @@ public class TaskTimeController { @PostMapping(value = "/insert") @ApiOperation(value = "新增定时任务", notes = "定时任务") - public ResultBean insertTaskTime(TaskTime taskTime) { + public ResultBean insertTaskTime(TaskTime taskTime,Boolean isExecute) { try { // 数据校验 ValidatorBean.beginValid(taskTime) - .notNull("timeId", taskTime.getTimeId()) .notNull("name", taskTime.getName()) - .notNull("timeId",taskTime.getTimeId()) - .notNull("taskMethodTypeId", taskTime.getTaskMethodTypeId()); + .notNull("groupName",taskTime.getGroupName()) + .notNull("timeExpressionId",taskTime.getTimeExpressionId()) + .notNull("taskMethodTypeId", taskTime.getTaskMethodTypeId()) + .notNull("taskPackage",taskTime.getTaskPackage()) + .notNull("taskClass",taskTime.getTaskClass()); - TaskTimeExpression taskTimeExpression = taskTimeExpressionService.getTaskTimeExpressionById(taskTime.getTimeId().toString()); - ValidatorBean.beginValid(taskTimeExpression); + TaskTimeExpression taskTimeExpression = taskTimeExpressionService + .getTaskTimeExpressionById(taskTime.getTimeExpressionId().toString()); + ValidatorBean.checkNotNull(taskTimeExpression,"定时执行策略不存在"); - taskTime.setRedTimeName(taskTimeExpression.getName()); - taskTime.setRedTimeExpression(taskTimeExpression.getExpressionContent()); + taskTime.setTimeExpressionNameRdd(taskTimeExpression.getName()); + taskTime.setTimeExpressionContentRdd(taskTimeExpression.getExpressionContent()); + taskTime.setTaskStartDateTimeRdd(taskTimeExpression.getExpressionStartDatetime()); + taskTime.setTaskEndDateTimeRdd(taskTimeExpression.getExpressionEndDatetime()); taskTime.setTaskStatus(CommonEnumUtil.DATA_STATUS.ENABLE.getValue()); - ConvertBean.modelInitialize(taskTime, AuthUtil.getSessionUser()); - - taskTime = taskTimeService.insertTaskTime(taskTime); - return ResultBean.success("操作成功") - .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) - .setResultObject(taskTime); + taskTime = taskTimeService.insertTaskTime(taskTime,taskTimeExpression); + // 立即执行 + if(isExecute != null && isExecute){ + taskTimeService.executeTaskTimeById(taskTime.getId()); + } + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(taskTime); } catch (ImppBusiException busExcep) { LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); return ResultBean.fail(busExcep.getErrorShow()); @@ -79,31 +84,33 @@ public class TaskTimeController { @PutMapping(value = "/update") @ApiOperation(value = "修改定时任务", notes = "定时任务") - public ResultBean updateTaskTime(TaskTime taskTime) { + public ResultBean updateTaskTime(TaskTime taskTime,Boolean isExecute) { try { // 数据校验 ValidatorBean.beginValid(taskTime) .notNull("id", taskTime.getId()) - .notNull("timeId", taskTime.getTimeId()) .notNull("name", taskTime.getName()) - .notNull("taskMethodTypeId",taskTime.getTaskMethodTypeId()); - - TaskTimeExpression taskTimeExpression = taskTimeExpressionService.getTaskTimeExpressionById(taskTime.getTimeId().toString()); - - // 数据真实性校验 - ValidatorBean.beginValid(taskTimeExpression); + .notNull("groupName",taskTime.getGroupName()) + .notNull("timeExpressionId",taskTime.getTimeExpressionId()) + .notNull("taskMethodTypeId", taskTime.getTaskMethodTypeId()) + .notNull("taskPackage",taskTime.getTaskPackage()) + .notNull("taskClass",taskTime.getTaskClass()); - // 数据冗余 - taskTime.setRedTimeName(taskTimeExpression.getName()); - taskTime.setRedTimeExpression(taskTimeExpression.getExpressionContent()); + TaskTimeExpression taskTimeExpression = taskTimeExpressionService + .getTaskTimeExpressionById(taskTime.getTimeExpressionId().toString()); + ValidatorBean.checkNotNull(taskTimeExpression,"定时执行策略不存在"); - ConvertBean.modelUpdate(taskTime, AuthUtil.getSessionUser()); - - taskTimeService.updateTaskTime(taskTime); + taskTime.setTimeExpressionNameRdd(taskTimeExpression.getName()); + taskTime.setTimeExpressionContentRdd(taskTimeExpression.getExpressionContent()); + taskTime.setTaskStartDateTimeRdd(taskTimeExpression.getExpressionStartDatetime()); + taskTime.setTaskEndDateTimeRdd(taskTimeExpression.getExpressionEndDatetime()); + taskTime.setTaskStatus(CommonEnumUtil.DATA_STATUS.ENABLE.getValue()); - return ResultBean.success("操作成功") - .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) - .setResultObject(taskTime); + taskTimeService.updateTaskTime(taskTime,taskTimeExpression); + if(isExecute != null && isExecute){ + taskTimeService.executeTaskTimeById(taskTime.getId()); + } + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(taskTime); } catch (ImppBusiException busExcep) { LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); return ResultBean.fail(busExcep.getErrorShow()); @@ -250,4 +257,22 @@ public class TaskTimeController { return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); } } + + @GetMapping(value = "/execute/{id}") + @ApiOperation(value = "立即执行", notes = "立即执行") + public ResultBean executeByTaskTimeId(@PathVariable("id") String id) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "定时任务id 不能为空"); + + taskTimeService.executeTaskTimeById(Long.parseLong(id)); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep.getErrorShow()); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/schedulejob/DemoJob.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/schedulejob/DemoJob.java index 6581bb5..050b0da 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/schedulejob/DemoJob.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/schedulejob/DemoJob.java @@ -1,11 +1,19 @@ package cn.estsh.i3plus.core.apiservice.schedulejob; +import cn.estsh.i3plus.core.api.iservice.busi.ITaskTimeService; +import cn.estsh.i3plus.pojo.platform.repository.TaskTimeRepository; import cn.estsh.impp.framework.base.schedule.BaseImppScheduleJob; import cn.estsh.impp.framework.boot.init.ApplicationProperties; import io.swagger.annotations.ApiOperation; import org.quartz.JobExecutionContext; +import org.quartz.Scheduler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import java.text.SimpleDateFormat; +import java.util.Date; /** * @Description : 定时任务 @@ -18,12 +26,21 @@ import org.slf4j.LoggerFactory; public class DemoJob extends BaseImppScheduleJob { public static final Logger LOGGER = LoggerFactory.getLogger(DemoJob.class); + @Autowired + private ITaskTimeService taskTimeService; + public DemoJob() { super(DemoJob.class,"定时任务demo"); } @Override public void executeImppJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:dd"); + + taskTimeService.doTaskTimeLastDateByNameAndGroupName(sdf.format(new Date()), + context.getJobDetail().getKey().getName(), + context.getJobDetail().getKey().getGroup()); + System.out.println("定时任务被执行"); LOGGER.info("projectName:{},port:{}",applicationProperties.getApplicationName(),applicationProperties.getServerPort()); } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TaskTimeExpressionServiceImpl.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TaskTimeExpressionServiceImpl.java index b2dcc26..b17799f 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TaskTimeExpressionServiceImpl.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TaskTimeExpressionServiceImpl.java @@ -12,11 +12,14 @@ import cn.estsh.i3plus.pojo.platform.repository.TaskTimeRepository; import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import org.quartz.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.List; /** @@ -51,6 +54,8 @@ public class TaskTimeExpressionServiceImpl implements ITaskTimeExpressionService @Override public TaskTimeExpression insertTaskTimeExpression(TaskTimeExpression taskTimeExpression) { LOGGER.info("定时任务时间表达式 TASK_TIME_EXPRESSION :{}", taskTimeExpression); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return taskTimeExpressionRDao.insert(taskTimeExpression); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TaskTimeServiceImpl.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TaskTimeServiceImpl.java index e5a5fcc..223baa4 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TaskTimeServiceImpl.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TaskTimeServiceImpl.java @@ -4,16 +4,30 @@ import cn.estsh.i3plus.core.api.iservice.busi.ITaskTimeService; 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.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.platform.bean.RefExpressionTrigger; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; import cn.estsh.i3plus.pojo.platform.bean.TaskTime; +import cn.estsh.i3plus.pojo.platform.bean.TaskTimeExpression; +import cn.estsh.i3plus.pojo.platform.repository.RefExpressionTriggerRepository; import cn.estsh.i3plus.pojo.platform.repository.TaskTimeRepository; import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import org.hibernate.service.spi.ServiceException; +import org.quartz.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashSet; import java.util.List; /** @@ -30,11 +44,65 @@ public class TaskTimeServiceImpl implements ITaskTimeService { @Autowired private TaskTimeRepository taskTimeRDao; + @Autowired + private RefExpressionTriggerRepository refExpressionTriggerRDao; + @Autowired + private Scheduler scheduler; @Override - public void updateTaskTime(TaskTime taskTime) { - LOGGER.info("定时任务 TASK_TIME :{}", taskTime); + public void updateTaskTime(TaskTime taskTime, TaskTimeExpression taskTimeExpression) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + TaskTime oldTaskTime = taskTimeRDao.getById(taskTime.getId()); + + // 更新关系表 + refExpressionTriggerRDao.updateByProperties( + "expressionId",oldTaskTime.getTimeExpressionId(), + new String[]{"name","groupName"}, + new String[]{oldTaskTime.getName(),taskTime.getGroupName()} + ); + taskTimeRDao.update(taskTime); + + try { + TriggerKey triggerKey = TriggerKey.triggerKey(taskTime.getName(),taskTime.getGroupName()); + System.out.println(scheduler.getTrigger(triggerKey)); + + if (!scheduler.checkExists(triggerKey)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("定时任务不存在") + .setErrorSolution("请重新选择") + .build(); + } + + // 添加定时任务与触发器到quartz表中 + CronScheduleBuilder schedBuilder = CronScheduleBuilder + .cronSchedule(taskTimeExpression.getExpressionContent()) + .withMisfireHandlingInstructionDoNothing(); + TriggerBuilder trigger = TriggerBuilder.newTrigger() + .withIdentity(triggerKey) + .withDescription(taskTimeExpression.getExpressionDescription()) + .withSchedule(schedBuilder) + .startAt(sdf.parse(taskTimeExpression.getExpressionStartDatetime())); + if(taskTimeExpression.getExpressionEndDatetime() != null){ + trigger = trigger.endAt(sdf.parse(taskTimeExpression.getExpressionEndDatetime())); + } + + JobKey jobKey = new JobKey(taskTime.getName(), taskTime.getGroupName()); + JobDetail jobDetail = scheduler.getJobDetail(jobKey); + jobDetail.getJobBuilder().withDescription(taskTime.getTaskDescription()); + + HashSet triggerSet = new HashSet<>(); + triggerSet.add(trigger.build()); + + scheduler.scheduleJob(jobDetail, triggerSet, true); + } catch (SchedulerException e) { + e.printStackTrace(); + } catch (ParseException e) { + e.printStackTrace(); + } } @Override @@ -44,18 +112,117 @@ public class TaskTimeServiceImpl implements ITaskTimeService { taskTime.setTaskStatus(status); taskTime.setModifyUser(user.getUserName()); taskTimeRDao.update(taskTime); + + try { + TriggerKey triggerKey = TriggerKey.triggerKey(taskTime.getName(), taskTime.getGroupName()); + if (!scheduler.checkExists(triggerKey)) { + } + + if (status == CommonEnumUtil.DATA_STATUS.ENABLE.getValue()){ + scheduler.resumeTrigger(triggerKey); + } else { + scheduler.pauseTrigger(triggerKey); + } + } catch (SchedulerException e) { + LOGGER.info("重新开始任务-->复杂调度" + e.getMessage()); + e.printStackTrace(); + } } @Override public void deleteTaskTimeById(String id) { - LOGGER.info("定时任务 TASK_TIME Key:{}", id); - taskTimeRDao.deleteById(Long.parseLong(id)); + try { + TaskTime taskTime = taskTimeRDao.getById(Long.parseLong(id)); + ValidatorBean.checkNotNull(taskTime,"定时任务不存在"); + + taskTimeRDao.deleteById(Long.parseLong(id)); + // 删除关系表数据 + refExpressionTriggerRDao.deleteByProperty("expressionId",taskTime.getTimeExpressionId()); + + TriggerKey triggerKey = TriggerKey.triggerKey(taskTime.getName(),taskTime.getGroupName()); + if(scheduler.checkExists(triggerKey)){ + scheduler.pauseTrigger(triggerKey); + scheduler.unscheduleJob(triggerKey); + }else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("定时任务不存在") + .setErrorSolution("请重新选择") + .build(); + } + } catch (SchedulerException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode()) + .build(); + } } @Override - public TaskTime insertTaskTime(TaskTime taskTime) { - LOGGER.info("定时任务 TASK_TIME :{}", taskTime); - return taskTimeRDao.insert(taskTime); + public TaskTime insertTaskTime(TaskTime taskTime, TaskTimeExpression taskTimeExpression) { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 唯一校验 + JobKey jobKey = JobKey.jobKey(taskTime.getName(),taskTime.getGroupName()); + TriggerKey triggerKey = TriggerKey.triggerKey(taskTime.getName(),taskTime.getGroupName()); + if (taskTimeRDao.isExitByProperty(new String[]{"name","groupName"},new String[]{taskTime.getName(),taskTime.getGroupName()}) + || scheduler.checkExists(jobKey) || scheduler.checkExists(triggerKey)){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("定时任务已存在") + .setErrorSolution("请重新输入任务名称和组名称") + .build(); + } + + RefExpressionTrigger refExpressionTrigger = new RefExpressionTrigger(); + refExpressionTrigger.setExpressionId(taskTimeExpression.getId()); + refExpressionTrigger.setTriggerName(taskTime.getName()); + refExpressionTrigger.setTriggerGroupName(taskTime.getGroupName()); + + taskTime = taskTimeRDao.insert(taskTime); + // 添加表达式与触发器关系表 + refExpressionTriggerRDao.insert(refExpressionTrigger); + + // 添加定时任务与触发器到quartz表中 + CronScheduleBuilder schedBuilder = CronScheduleBuilder + .cronSchedule(taskTimeExpression.getExpressionContent()) + .withMisfireHandlingInstructionDoNothing(); + TriggerBuilder trigger = TriggerBuilder.newTrigger() + .withIdentity(triggerKey) + .withDescription(taskTimeExpression.getExpressionDescription()) + .withSchedule(schedBuilder) + .startAt(sdf.parse(taskTimeExpression.getExpressionStartDatetime())); + if(taskTimeExpression.getExpressionEndDatetime() != null){ + trigger = trigger.endAt(sdf.parse(taskTimeExpression.getExpressionEndDatetime())); + } + + Class clazz = (Class) Class.forName(taskTime.getTaskPackage() + "." + taskTime.getTaskClass()); + JobDetail jobDetail = JobBuilder.newJob(clazz).withIdentity(jobKey).withDescription(taskTime.getTaskDescription()).build(); + + scheduler.scheduleJob(jobDetail, trigger.build()); + } catch (SchedulerException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode()) + .build(); + } catch (ParseException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_FORMAT.getCode()) + .setErrorDetail("表达式起止时间错误") + .setErrorSolution("请更改表达式起止时间") + .build(); + } catch (ClassNotFoundException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("定时任务包名及类名不正确") + .setErrorSolution("请重新输入定时任务包名及类名") + .build(); + } + return taskTime; } @Override @@ -104,5 +271,33 @@ public class TaskTimeServiceImpl implements ITaskTimeService { taskTimeRDao.updateByHqlWhere(where.toString(), "taskStatus", status); } + @Override + public void doTaskTimeLastDateByNameAndGroupName(String lastDate, String name, String groupName) { + taskTimeRDao.updateByProperties( + new String[]{"name","groupName"},new String[]{name,groupName}, + "lastRunDateTime",lastDate); + } + @Override + public void executeTaskTimeById(long id) { + TaskTime taskTime = taskTimeRDao.getById(id); + JobKey jobKey = JobKey.jobKey(taskTime.getName(),taskTime.getGroupName()); + try { + if (scheduler.checkExists(jobKey)) { + scheduler.triggerJob(jobKey); + } else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("定时任务不存在") + .setErrorSolution("请重新输入任务名称和组名称") + .build(); + } + } catch (SchedulerException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode()) + .build(); + } + } } 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 new file mode 100644 index 0000000..10e1446 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java @@ -0,0 +1,202 @@ +package cn.estsh.i3plus.core.apiservice.util; + +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.io.support.PropertiesLoaderUtils; +import sun.misc.BASE64Encoder; + +import javax.mail.*; +import javax.mail.internet.AddressException; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeMessage; +import java.io.IOException; +import java.util.Properties; + +/** + * @Description : 邮件工具类 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-14 19:24 + * @Modify: + **/ +public class MailUtil { + public static final Logger LOGGER = LoggerFactory.getLogger(MailUtil.class); + + // 收件人 + private Address[] to = null; + private Address[] cc = null; + private String from = ""; + private String nick = ""; + private String title = ""; + private String content = ""; + private String smtpHost = ""; + private int smtpPort = 25; + private String content_type = ""; + + private String smtpUser = ""; + private String smtpPassword = ""; + private boolean isAuthenticationSMTP = false; + + + //初始化服务器邮箱参数 + public MailUtil() { + try { + Properties mailInfo = PropertiesLoaderUtils.loadAllProperties("mail.properties"); + this.smtpHost = mailInfo.get("mail.host").toString(); + this.smtpPort = Integer.parseInt(mailInfo.get("mail.port").toString()); + this.from = mailInfo.get("mail.user") + ""; + this.nick = mailInfo.get("mail.nick") + ""; + this.smtpUser = mailInfo.get("mail.user") + ""; + this.smtpPassword = mailInfo.get("mail.password") + ""; + this.isAuthenticationSMTP = true; + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 设置收件人地址 + * + * @param aEmail + * 收件人Email地址 + */ + public void setTo(String aEmail) { + String[] s = new String[1]; + s[0] = aEmail; + this.to = getAddress(s); + } + + /** + * 设置多个收件人地址 + * + * @param Emails + * 收件人Email地址 + */ + public void setTo(String[] Emails) { + this.to = getAddress(Emails); + } + + /** + * 设置抄送地址 + * + * @param aEmail + * 抄送地址 + */ + public void setCC(String aEmail) { + String[] s = new String[1]; + s[0] = aEmail; + this.cc = getAddress(s); + } + + /** + * 设置多个抄送地址 + * + * @param Emails + * 抄送地址 + */ + public void setCC(String[] Emails) { + this.cc = getAddress(Emails); + } + + /** + * 设置邮件主题 + * + * @param mailTitle + * 邮件主题 + */ + public void setSubject(String mailTitle) { + this.title = mailTitle; + } + + /** + * 设置邮件文字内容 + * + * @param mailContent + * 邮件文字内容 + */ + public void setBody(String mailContent) { + this.content = mailContent; + } + + /** + * 设置邮件字符类型 + * + * @param contentType + * 请从CommonConstWords.MAIL_MODE_TEXT和MAIL_MODE_HTML中选择 + */ + public void setContentType(String contentType) { + this.content_type = contentType; + } + + private Address[] getAddress(String[] add) { + Address[] a = new Address[add.length]; + for (int i = 0; i < add.length; i++) { + try { + a[i] = new InternetAddress(add[i]); + } catch (AddressException ex) { + ex.printStackTrace(); + } + } + return a; + } + /** + * 发送邮件 + */ + public void send() { + try { + // 乱码 + BASE64Encoder enc = new BASE64Encoder(); + + Properties server = new Properties(); + server.put("mail.smtp.port", String.valueOf(this.smtpPort)); + server.put("mail.smtp.host", this.smtpHost); + if (this.isAuthenticationSMTP) { + server.put("mail.smtp.auth", "true"); + } + + Session conn = Session.getInstance(server, null); + + MimeMessage msg = new MimeMessage(conn); + if (nick != null && !"".equals(nick)) { + msg.setSubject("=?GB2312?B?" + enc.encode(nick.getBytes())+ "?="); + msg.setFrom(new InternetAddress(nick + " <" + from + ">")); + } else { + msg.setFrom(new InternetAddress(this.from)); + } + // 收件人 + if (this.to != null) { + msg.setRecipients(Message.RecipientType.TO, this.to); + } + // 抄送 + if (this.cc != null) { + msg.setRecipients(Message.RecipientType.CC, this.cc); + } + + msg.setSubject("=?GB2312?B?" + enc.encode(this.title.getBytes())+ "?="); + msg.setSubject(this.title); + + // 是HTML格式的邮件 + msg.setContent(this.content, this.content_type); + + msg.saveChanges(); + if (this.isAuthenticationSMTP) { + Transport transport = conn.getTransport("smtp"); + transport.connect(this.smtpHost, this.smtpUser, this.smtpPassword); + transport.sendMessage(msg, msg.getAllRecipients()); + transport.close(); + } else { + Transport.send(msg, msg.getAllRecipients()); + } + LOGGER.info("邮件发送成功"); + } catch (javax.mail.internet.AddressException e) { + e.printStackTrace(); + } catch (MessagingException e) { + e.printStackTrace(); + } + } + + public boolean isHtmlModeMail() { + return this.content_type.equals(CommonConstWords.MAIL_MODE_HTML); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/resources/mail.properties b/modules/i3plus-core-apiservice/src/main/resources/mail.properties new file mode 100644 index 0000000..88178ae --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/resources/mail.properties @@ -0,0 +1,5 @@ +mail.host = smtphm.qiye.163.com +mail.port = 25 +mail.user = dongshang@estsh.com +mail.password = Aa111111 +mail.nick = 东尚消息 \ No newline at end of file diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTaskTimeService.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTaskTimeService.java index 98b07ed..202f728 100644 --- a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTaskTimeService.java +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTaskTimeService.java @@ -56,17 +56,16 @@ public class TestTaskTimeService extends TestBase { public void testInsertTaskTime() { TaskTime taskTime = new TaskTime(); taskTime.setName("时间表达式"); - taskTime.setTimeId(1L); - taskTime.setTaskStartDateTime("2018-01-01 00:00:00"); - taskTime.setTaskEndDateTime("2018-12-31 00:00:00"); - taskTime.setLastRunDateTime("2018-11-03 00:00:00"); + taskTime.setTimeExpressionId(1L); + taskTime.setTaskStartDateTimeRdd("2018-01-01 00:00:00"); + taskTime.setTaskEndDateTimeRdd("2018-12-31 00:00:00"); taskTime.setTaskTypeId(ImppEnumUtil.TASK_METHOD_TYPE.TYPE_GROUP.getValue()); taskTime.setTaskStatus(CommonEnumUtil.DATA_STATUS.ENABLE.getValue()); for (int i = 0; i < 50; i++) { taskTime.setId(null); taskTime.setName("时间表达式"+i); - taskTimeService.insertTaskTime(taskTime); + taskTimeService.insertTaskTime(taskTime,null); } System.out.println(JSON.toJSONString(taskTime)); } @@ -80,7 +79,7 @@ public class TestTaskTimeService extends TestBase { TaskTime taskTime = taskTimeService.getTaskTimeById("1057110613261684736"); taskTime.setName("测试修改"); - taskTimeService.updateTaskTime(taskTime); + taskTimeService.updateTaskTime(taskTime,null); } /** diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestToolService.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestToolService.java index cc14785..29797c2 100644 --- a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestToolService.java +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestToolService.java @@ -78,8 +78,10 @@ public class TestToolService extends TestBase { public void testUpdateTool(){ Tool tool = toolService.getToolById("1057110613261684736"); tool.setName("测试修改"); + if(tool != null){ + toolService.updateTool(tool); + } - toolService.updateTool(tool); } /** diff --git a/pom.xml b/pom.xml index fb6a0f1..98ff20e 100644 --- a/pom.xml +++ b/pom.xml @@ -170,6 +170,12 @@ 4.12 test + + + javax.mail + mail + 1.4.7 +