From 22f9126b2cea7a431a6267c09611a9aea667287e Mon Sep 17 00:00:00 2001 From: "wei.peng" Date: Thu, 22 Nov 2018 21:58:43 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=A1=AB=E5=85=85=E4=BF=A1?= =?UTF-8?q?=E6=81=AFBug=20=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/api/iservice/busi/ISysMessageService.java | 2 +- .../apiservice/controller/DemoCloudController.java | 4 +- .../apiservice/controller/base/AuthController.java | 2 +- .../controller/busi/SysConfigController.java | 18 ++--- .../controller/busi/SysFileController.java | 79 ++++++++++++++++++++- .../controller/busi/SysMessageController.java | 4 +- .../controller/busi/SysUserController.java | 63 ++++++++++++++-- .../controller/busi/SysUserInfoController.java | 1 + .../core/apiservice/mq/MailQueueReceiver.java | 5 +- .../serviceimpl/busi/SysMessageService.java | 2 +- .../serviceimpl/busi/SysUserService.java | 2 +- .../i3plus/core/apiservice/util/MailUtil.java | 2 +- .../src/main/resources/init/permission-test.xlsx | Bin 47201 -> 47208 bytes .../src/main/resources/init/permission.xlsx | Bin 40388 -> 40838 bytes .../serviceimpl/busi/TestExcelPermission.java | 8 +-- .../i3plus/core/apiservice/util/TestMailUtil.java | 2 +- 16 files changed, 158 insertions(+), 36 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java index cb27dd6..9b7003e 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java @@ -86,5 +86,5 @@ public interface ISysMessageService { * @param sysMessage * @return */ - void sendSysMessage(SysMessage sysMessage); + void doSendSysMessage(SysMessage sysMessage); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoCloudController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoCloudController.java index 7ee4fcc..1c402d5 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoCloudController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoCloudController.java @@ -43,12 +43,12 @@ public class DemoCloudController { LOGGER.error("XXXX --> post调用出错:" + e.getMessage(),e); } try { - iCoreDemoCloud.testPut("testPut = " + test,"name"); +// iCoreDemoCloud.testPut("testPut = " + test,"name"); }catch (Exception e){ LOGGER.error("XXXX --> testPut调用出错:" + e.getMessage(),e); } try { - iCoreDemoCloud.testDelete(new Pager(),"delete = " + test); +// iCoreDemoCloud.testDelete(new Pager(),"delete = " + test); }catch (Exception e){ LOGGER.error("XXXX --> delete调用出错:" + e.getMessage(),e); } 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 67a8087..972af9b 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 @@ -70,7 +70,7 @@ public class AuthController extends CoreBaseController { }catch (AuthenticationException e) { return new ResultBean(false,e.getMessage()); }catch (ImppBusiException e) { - return new ResultBean(false,e.getErrorDetail() + ",so:" + e.getErrorSolution()); + return ResultBean.fail(e); }catch (Exception e){ return ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java index d93d1bf..f8d9fa1 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java @@ -58,7 +58,7 @@ public class SysConfigController extends CoreBaseController { sysConfigService.insertSysConfig(sysConfig); return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ - return ResultBean.fail(busExcep.getErrorShow()); + return ResultBean.fail(busExcep); }catch(Exception e){ return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } @@ -71,7 +71,7 @@ public class SysConfigController extends CoreBaseController { sysConfigService.deleteSysConfigById(Long.parseLong(id)); return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ - return ResultBean.fail(busExcep.getErrorShow()); + return ResultBean.fail(busExcep); }catch(Exception e){ return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } @@ -97,7 +97,7 @@ public class SysConfigController extends CoreBaseController { sysConfigService.updateSysConfig(sysConfig); return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ - return ResultBean.fail(busExcep.getErrorShow()); + return ResultBean.fail(busExcep); }catch(Exception e){ return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } @@ -112,7 +112,7 @@ public class SysConfigController extends CoreBaseController { .setResultList(sysConfigList) .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ - return ResultBean.fail(busExcep.getErrorShow()); + return ResultBean.fail(busExcep); }catch(Exception e){ return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } @@ -130,7 +130,7 @@ public class SysConfigController extends CoreBaseController { return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); } }catch(ImppBusiException busExcep){ - return ResultBean.fail(busExcep.getErrorShow()); + return ResultBean.fail(busExcep); }catch(Exception e){ return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } @@ -145,7 +145,7 @@ public class SysConfigController extends CoreBaseController { .setListPager(sysConfigListPager) .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ - return ResultBean.fail(busExcep.getErrorShow()); + return ResultBean.fail(busExcep); }catch(Exception e){ return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } @@ -162,7 +162,7 @@ public class SysConfigController extends CoreBaseController { return ResultBean.success("查询成功").setResultObject(sysConfig).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } }catch(ImppBusiException busExcep){ - return ResultBean.fail(busExcep.getErrorShow()); + return ResultBean.fail(busExcep); }catch(Exception e){ return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } @@ -179,7 +179,7 @@ public class SysConfigController extends CoreBaseController { return ResultBean.success("查询成功").setResultList(sysConfig).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } }catch(ImppBusiException busExcep){ - return ResultBean.fail(busExcep.getErrorShow()); + return ResultBean.fail(busExcep); }catch(Exception e){ return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } @@ -191,7 +191,7 @@ public class SysConfigController extends CoreBaseController { // sysConfigService.update return null; }catch(ImppBusiException busExcep){ - return ResultBean.fail(busExcep.getErrorShow()); + 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/SysFileController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java index 23d213c..61cc61c 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 @@ -2,7 +2,6 @@ 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; @@ -12,7 +11,6 @@ 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.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -27,11 +25,20 @@ import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.FileCopyUtils; 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 javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLConnection; import java.util.List; /** @@ -201,6 +208,8 @@ public class SysFileController extends CoreBaseController{ sysFile.setFileOriginalName(file.getOriginalFilename()); sysFile.setFileTypeId(dictionary.getId()); sysFile.setFileTypeName(dictionary.getName()); + sysFile.setUserId(getSessionUser().getUserId()); + sysFile.setDownloadNum(0); SysFile fileDb = sysFileService.insertSysFile(sysFile); @@ -213,4 +222,68 @@ public class SysFileController extends CoreBaseController{ return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); } } + + @GetMapping("/download/{id}") + @ApiOperation(value = "文件下载",notes = "文件下载") + public ResultBean singleDownload(@PathVariable("id")String id, HttpServletResponse response) { + try { + ValidatorBean.checkIsNumber(id,"文件ID不能为空"); + + SysFile sysFile = sysFileService.getSysFileById(Long.parseLong(id)); + if(sysFile == null){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("文件不存在") + .build(); + } + + InputStream fis = dfsClient.downFile(sysFile.getDfsGroupName(), sysFile.getDfsFileName()); + + if(fis == null){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("文件已过期") + .build(); + } + + response.setContentType("application/force-download");// 设置强制下载不打开 + response.addHeader("Content-Disposition", "attachment;fileName=" + sysFile.getFileOriginalName());// 设置文件名 + response.addHeader("Content-type", "application/octet-stream");// 设置文件名 + + BufferedInputStream bis = null; + try { + bis = new BufferedInputStream(fis); + 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(); + fis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + sysFile.setDownloadNum(sysFile.getDownloadNum() + 1); + return ResultBean.success("下载").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }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/SysMessageController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java index 98b42b1..7e7673e 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java @@ -60,11 +60,11 @@ public class SysMessageController extends CoreBaseController { sysMessage.setMessageSenderId(getSessionUser().getUserId()); sysMessage.setMessageSenderNameRdd(getSessionUser().getUserName()); sysMessage.setMessageSendTime(sdf.format(new Date())); - sysMessage.setMessageContentType(ImppEnumUtil.MESSAGE_CONTENT_TYPE.HTML.getValue()); + sysMessage.setMessageContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.HTML.getValue()); ConvertBean.modelInitialize(sysMessage,getSessionUser()); - sysMessageService.sendSysMessage(sysMessage); + sysMessageService.doSendSysMessage(sysMessage); return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); 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 6ff19e5..fbfd4ca 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 @@ -1,5 +1,6 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; +import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; import cn.estsh.i3plus.core.api.iservice.busi.ISysUserInfoService; import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -8,11 +9,9 @@ import cn.estsh.i3plus.platform.common.tool.StringTool; 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.ImppEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; -import cn.estsh.i3plus.pojo.platform.bean.SessionUser; -import cn.estsh.i3plus.pojo.platform.bean.SysRefUserRole; -import cn.estsh.i3plus.pojo.platform.bean.SysUser; -import cn.estsh.i3plus.pojo.platform.bean.SysUserInfo; +import cn.estsh.i3plus.pojo.platform.bean.*; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -22,6 +21,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.RandomStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -49,6 +49,9 @@ public class SysUserController extends CoreBaseController{ @Autowired private ISysUserInfoService sysUserInfoService; + @Autowired + private ISysMessageService sysMessageService; + @PostMapping(value = "/insert") @ApiOperation(value = "新增用户", notes = "新增系统用户") public ResultBean insertSysUser(SysUser sysUser,String[] roleIds) { @@ -83,6 +86,8 @@ public class SysUserController extends CoreBaseController{ sysUser.setUserStatus(CommonEnumUtil.USER_STATUS.NORMAL.getValue()); sysUser.setDepartmentId(userInfo.getDepartmentId()); sysUser.setDepartmentNameRdd(userInfo.getDepartmentNameRdd()); + sysUser.setIsValid(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + sysUser.setUserLoginNum(0); ConvertBean.modelInitialize(sysUser,AuthUtil.getSessionUser()); SysUser user = sysUserService.insertSysUser(sysUser); @@ -146,6 +151,7 @@ public class SysUserController extends CoreBaseController{ user.setUserLoginPassword(md5); } + user.setUserInfoId(userInfo.getId()); user.setUserName(userInfo.getName()); user.setDepartmentId(userInfo.getDepartmentId()); user.setDepartmentNameRdd(userInfo.getDepartmentNameRdd()); @@ -272,9 +278,9 @@ public class SysUserController extends CoreBaseController{ } } - @DeleteMapping(value = "/delete") - @ApiOperation(value = "删除定时任务", notes = "删除定时任务") - public ResultBean delete(String id) { + @DeleteMapping(value = "/delete/{id}") + @ApiOperation(value = "删除账号", notes = "删除制定账号信息") + public ResultBean delete(@PathVariable("id") String id) { try { // 数据校验 ValidatorBean.checkNotNull(id, "用户id 不能为空"); @@ -333,4 +339,47 @@ public class SysUserController extends CoreBaseController{ } } + @DeleteMapping("/reset-pwd/{id}") + @ApiOperation(value = "密码重置",notes = "根据id重置用户密码") + public ResultBean updateResetPassword(@PathVariable String id){ + try { + SysUser user = sysUserService.getSysUserById(Long.parseLong(id)); + if(user != null){ + String password = RandomStringUtils.random(6, true, false); + user.setUserLoginPassword(EncryptTool.hexMD5(password)); + sysUserService.updateSysUser(user); + + String content = "系统提示:\n" + + "\t"+getSessionUser().getUserName()+"使用密码重置功能帮您重置了【"+user.getUserLoginName()+"】账号的密码," + + "新密码是:"+password+""; + + SysMessage message = new SysMessage(); + message.setMessageTitle("重置密码"); + message.setMessageContent(content); + message.setMessageType(ImppEnumUtil.MESSAGE_TYPE.MAIL.getValue()); + message.setMessageContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.TEXT.getValue()); + message.setMessageSenderId(getSessionUser().getUser().getId()); + message.setMessageSenderNameRdd(getSessionUser().getUserName()); + message.setMessageReceiversId(user.getId().toString()); + message.setMessageReceiversNameRdd(user.getUserName()); + + sysMessageService.doSendSysMessage(message); + + LOGGER.info("系统提示:{} 使用密码重置功能帮{}重置了{}账号的密码,新密码是:{}", + getSessionUser().getUserName(),user.getUserName(),user.getUserLoginName(),password); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else{ + return ResultBean.success("操作失败") + .setCode(ResourceEnumUtil.MESSAGE.FAIL.getCode()) + .setErrorMsg("用户不存在"); + } + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } 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/controller/busi/SysUserInfoController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java index fb68c8a..c886886 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 @@ -72,6 +72,7 @@ public class SysUserInfoController extends CoreBaseController{ .checkNotZero("positionId",userInfo.getPositionId()); ConvertBean.modelInitialize(userInfo,user); + userInfo.setUserInfoStatus(CommonEnumUtil.USER_STATUS.NORMAL.getValue()); SysUserInfo pos = sysUserInfoService.insertSysUserInfo(userInfo); sysUserInfoService.refreshRefUserDepartment(pos.getId(), diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MailQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MailQueueReceiver.java index b99b384..79ebe7f 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MailQueueReceiver.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MailQueueReceiver.java @@ -13,6 +13,7 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -41,7 +42,7 @@ public class MailQueueReceiver { * @param channel * @param message */ - //@RabbitListener(queues = I3CoreQueueConfig.IMPP_MESSAGE_MAIL_QUEUE) +// @RabbitListener(queues = I3CoreQueueConfig.IMPP_MESSAGE_MAIL_QUEUE) public void processImppMail(SysMessage msg, Channel channel, Message message) { try { LOGGER.info("【MQ-IMPP_MESSAGE_MAIL_QUEUE】数据接收成功:{}",msg); @@ -71,7 +72,7 @@ public class MailQueueReceiver { // 发送邮件 mailUtil.setSubject(msg.getMessageTitle()); - mailUtil.setContentType(ImppEnumUtil.MESSAGE_CONTENT_TYPE.valueOfDescription(msg.getMessageContentType())); + mailUtil.setContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.valueOfDescription(msg.getMessageContentType())); mailUtil.setBody(msg.getMessageContent()); mailUtil.setTo(sysUser.getUserEmail()); mailUtil.send(); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java index 112b199..bbddcb7 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java @@ -117,7 +117,7 @@ public class SysMessageService implements ISysMessageService { } @Override - public void sendSysMessage(SysMessage sysMessage) { + public void doSendSysMessage(SysMessage sysMessage) { // 判断消息类型推送到对应的队列 if(ImppEnumUtil.MESSAGE_TYPE.MAIL.getValue() == sysMessage.getMessageType().intValue()){ rabbitTemplate.convertAndSend(I3CoreQueueConfig.IMPP_MESSAGE_MAIL_QUEUE,sysMessage); 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 bde87e0..a6dafe0 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 @@ -327,7 +327,7 @@ public class SysUserService implements ISysUserService { if(userInfo == null){ throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.LOGIN_EXCEPTION.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) .setErrorDetail("用户信息不存在") .setErrorSolution("请联系管理员") .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 index bdb0f88..15d75f0 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 @@ -202,7 +202,7 @@ public class MailUtil { MailUtil mail = new MailUtil(); mail.setTo("yunhao.wang@estsh.com"); mail.setSubject("中文"); - mail.setContentType(ImppEnumUtil.MESSAGE_CONTENT_TYPE.HTML.getDescription()); + mail.setContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.HTML.getDescription()); mail.setBody("内容"); mail.send(); } diff --git a/modules/i3plus-core-apiservice/src/main/resources/init/permission-test.xlsx b/modules/i3plus-core-apiservice/src/main/resources/init/permission-test.xlsx index 7e9ae4d40b2d21dcd314c9a94281e09702191f7d..4b0df172d405b280239cb036bd7bd0ca335fc48a 100644 GIT binary patch delta 17794 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 z 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 delta 17834 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 diff --git a/modules/i3plus-core-apiservice/src/main/resources/init/permission.xlsx b/modules/i3plus-core-apiservice/src/main/resources/init/permission.xlsx index fc8065104c90125125bef2078ac89d0df2663de1..de22f2584ed6bb8e1d1f93fde164e7fc984128c1 100644 GIT binary patch delta 24410 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�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 delta 23955 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 Cq1}4` diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestExcelPermission.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestExcelPermission.java index 04f6020..dd6f15e 100644 --- a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestExcelPermission.java +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestExcelPermission.java @@ -55,8 +55,6 @@ public class TestExcelPermission extends TestBase { @Autowired private SysRefRoleMenuRepository refRoleMenuRDao; - - @Test public void testInit() throws Exception { XSSFWorkbook workbook = getWorkbook(PATH_NAME); @@ -87,9 +85,6 @@ public class TestExcelPermission extends TestBase { } } - - - public List getRefUserRole(List users,List roles){ List result = new ArrayList<>(); if(users != null && roles != null){ @@ -175,6 +170,7 @@ public class TestExcelPermission extends TestBase { obj.setUserEmpNo(row.getCell(2).getStringCellValue()); obj.setUserLoginNum(0); obj.setIsValid(1); + obj.setUserInfoStatus(1); result.add(obj); } @@ -200,6 +196,8 @@ public class TestExcelPermission extends TestBase { role.setId(Long.parseLong(row.getCell(0).getStringCellValue())); role.setName(row.getCell(1).getStringCellValue()); role.setRoleDescription(row.getCell(2).getStringCellValue()); + role.setRoleStatus(1); + role.setIsValid(1); result.add(role); } diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestMailUtil.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestMailUtil.java index 0de9cef..a201dda 100644 --- a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestMailUtil.java +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestMailUtil.java @@ -21,7 +21,7 @@ public class TestMailUtil extends TestBase { public void TestSendMail(){ mailUtil.setTo("yunhao.wang@estsh.com"); mailUtil.setSubject("中文"); - mailUtil.setContentType(ImppEnumUtil.MESSAGE_CONTENT_TYPE.HTML.getDescription()); + mailUtil.setContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.HTML.getDescription()); mailUtil.setBody("内容"); mailUtil.send();