From 3840dea6491826ac42de3d0671a2334ea9430ee0 Mon Sep 17 00:00:00 2001 From: "yunhao.wang" Date: Wed, 28 Nov 2018 20:21:53 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E7=BB=86=E8=8A=82?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/ISysTaskTimeExpressionService.java | 13 ++-- .../api/iservice/busi/ISysTaskTimeService.java | 18 ++++- .../controller/busi/SysTaskTimeController.java | 83 ++++++++-------------- .../busi/SysTaskTimeExpressionController.java | 63 ++++++---------- .../core/apiservice/mq/LetterQueueReceiver.java | 5 +- .../busi/SysTaskTimeExpressionService.java | 10 ++- .../serviceimpl/busi/SysTaskTimeService.java | 21 ++++-- 7 files changed, 104 insertions(+), 109 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeExpressionService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeExpressionService.java index 430e22e..7955212 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeExpressionService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeExpressionService.java @@ -2,10 +2,8 @@ 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.bean.SessionUser; -import cn.estsh.i3plus.pojo.platform.bean.SysFile; -import cn.estsh.i3plus.pojo.platform.bean.SysRole; import cn.estsh.i3plus.pojo.platform.bean.SysTaskTimeExpression; +import io.swagger.annotations.ApiOperation; import java.util.List; @@ -22,12 +20,14 @@ public interface ISysTaskTimeExpressionService { * 修改数据 * @param taskTimeExpression */ + @ApiOperation(value = "修改数据") void updateSysTaskTimeExpression(SysTaskTimeExpression taskTimeExpression); /** - * 根据Key 删除数据 + * 根据id删除数据 * @param id */ + @ApiOperation(value = "根据id删除数据") void deleteSysTaskTimeExpressionById(Long id); /** @@ -35,12 +35,14 @@ public interface ISysTaskTimeExpressionService { * @param taskTimeExpression * @return */ + @ApiOperation(value = "新增数据") SysTaskTimeExpression insertSysTaskTimeExpression(SysTaskTimeExpression taskTimeExpression); /** * 查询所有数据 * @return */ + @ApiOperation(value = "查询所有数据") List listSysTaskTimeExpression(); /** @@ -48,6 +50,7 @@ public interface ISysTaskTimeExpressionService { * @param id * @return */ + @ApiOperation(value = "根据ID 查询任务表达式") SysTaskTimeExpression getSysTaskTimeExpressionById(Long id); /** @@ -56,11 +59,13 @@ public interface ISysTaskTimeExpressionService { * @param pager * @return */ + @ApiOperation(value = "任务表达式查询,分页,排序") ListPager querySysTaskTimeExpressionByPager(SysTaskTimeExpression taskTimeExpression, Pager pager); /** * 任务表达式批量删除 * @param ids */ + @ApiOperation(value = "任务表达式批量删除") void deleteSysTaskTimeExpressionByIds(Long[] ids); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeService.java index 703116e..4f856c5 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeService.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; import cn.estsh.i3plus.pojo.platform.bean.SysTaskTime; import cn.estsh.i3plus.pojo.platform.bean.SysTaskTimeExpression; +import io.swagger.annotations.ApiOperation; import java.util.List; @@ -18,16 +19,18 @@ import java.util.List; public interface ISysTaskTimeService { /** - * 新增数据 + * 新增定时任务 * @param taskTime * @return */ + @ApiOperation(value = "新增定时任务") SysTaskTime insertSysTaskTime(SysTaskTime taskTime, SysTaskTimeExpression taskTimeExpression); /** - * 修改数据 + * 修改定时任务 * @param taskTime */ + @ApiOperation(value = "修改定时任务") void updateSysTaskTime(SysTaskTime taskTime, SysTaskTimeExpression taskTimeExpression); /** @@ -36,18 +39,21 @@ public interface ISysTaskTimeService { * @param status 任务状态 * @param user 当前会话用户 */ + @ApiOperation(value = "修改任务状态") void updateSysTaskTimeStatus(Long id, int status, SessionUser user); /** - * 根据Key 删除数据 + * 根据根据id删除数据 * @param id */ + @ApiOperation(value = "根据根据id删除数据") void deleteSysTaskTimeById(Long id); /** * 查询所有数据 * @return */ + @ApiOperation(value = "查询所有数据") List listSysTaskTime(); /** @@ -55,6 +61,7 @@ public interface ISysTaskTimeService { * @param id * @return */ + @ApiOperation(value = "根据id 数据") SysTaskTime getSysTaskTimeById(Long id); /** @@ -63,12 +70,14 @@ public interface ISysTaskTimeService { * @param pager * @return */ + @ApiOperation(value = "定时任务复制查询,分页,排序") ListPager querySysTaskTimeByPager(SysTaskTime taskTime, Pager pager); /** * 根据id批量删除定时任务 * @param ids */ + @ApiOperation(value = "根据id批量删除定时任务") void deleteSysTaskTimeByIds(Long[] ids); /** @@ -76,6 +85,7 @@ public interface ISysTaskTimeService { * @param ids * */ + @ApiOperation(value = "批量修改定时任务状态") void updateSysTaskTimeStatusByIds(Long[] ids, Integer status); /** @@ -84,11 +94,13 @@ public interface ISysTaskTimeService { * @param name * @param groupName */ + @ApiOperation(value = "修改最后时间") void doSysTaskTimeLastDateByNameAndGroupName(String lastDate,String name,String groupName); /** * 立即执行 * @param id */ + @ApiOperation(value = "立即执行") void executeSysTaskTimeById(Long id); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeController.java index 7adb54f..df606a9 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeController.java @@ -2,14 +2,13 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskTimeExpressionService; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskTimeService; -import cn.estsh.i3plus.platform.common.convert.ConvertBean; 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.*; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskTime; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskTimeExpression; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -75,12 +74,10 @@ public class SysTaskTimeController extends CoreBaseController{ taskTimeService.executeSysTaskTimeById(taskTime.getId()); } return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(taskTime); - } catch (ImppBusiException busExcep) { - LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + }catch(ImppBusiException 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()); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -113,12 +110,10 @@ public class SysTaskTimeController extends CoreBaseController{ taskTimeService.executeSysTaskTimeById(taskTime.getId()); } return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(taskTime); - } catch (ImppBusiException busExcep) { - LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + }catch(ImppBusiException 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()); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -131,12 +126,10 @@ public class SysTaskTimeController extends CoreBaseController{ taskTimeService.deleteSysTaskTimeById(Long.parseLong(id)); return ResultBean.success().setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } catch (ImppBusiException busExcep) { - LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + }catch(ImppBusiException 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()); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -148,12 +141,10 @@ public class SysTaskTimeController extends CoreBaseController{ return ResultBean.success("操作成功") .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) .setResultList(list); - } catch (ImppBusiException busExcep) { - LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + }catch(ImppBusiException 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()); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -169,31 +160,27 @@ public class SysTaskTimeController extends CoreBaseController{ return ResultBean.success("操作成功") .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) .setResultObject(taskTime); - } catch (ImppBusiException busExcep) { - LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + }catch(ImppBusiException 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()); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } - @PutMapping(value = "/status") + @PutMapping(value = "/status/{id}/{status}") @ApiOperation(value = "修改定时任务状态", notes = "根据ID修改定时任务状态") - public ResultBean updateQuartzStatus(String id,int status) { + public ResultBean updateQuartzStatus(@PathVariable("id") String idStr,@PathVariable("status") Integer status) { try { // 数据校验 - ValidatorBean.checkNotNull(id, "功能id 不能为空"); - ValidatorBean.checkNotZero(status, "功能状态不能为空"); + ValidatorBean.checkNotNull(idStr, "id 不能为空"); + ValidatorBean.checkNotZero(status, "状态不能为空"); - taskTimeService.updateSysTaskTimeStatus(Long.parseLong(id),status,AuthUtil.getSessionUser()); + taskTimeService.updateSysTaskTimeStatus(Long.parseLong(idStr),status,AuthUtil.getSessionUser()); return new ResultBean(true); - } catch(ImppBusiException busExcep){ - LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); }catch(Exception e){ - LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}",e.getMessage(),e); - return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -204,11 +191,9 @@ public class SysTaskTimeController extends CoreBaseController{ ListPager taskTimeListPager = taskTimeService.querySysTaskTimeByPager(taskTime,pager); return ResultBean.success("查询成功").setListPager(taskTimeListPager).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()); + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -227,11 +212,9 @@ public class SysTaskTimeController extends CoreBaseController{ taskTimeService.deleteSysTaskTimeByIds(StringTool.getArrayLong(ids)); 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()); + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -251,12 +234,10 @@ public class SysTaskTimeController extends CoreBaseController{ taskTimeService.updateSysTaskTimeStatusByIds(StringTool.getArrayLong(ids),status); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } catch(ImppBusiException busExcep){ - LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); }catch(Exception e){ - LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}",e.getMessage(),e); - return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -269,12 +250,10 @@ public class SysTaskTimeController extends CoreBaseController{ taskTimeService.executeSysTaskTimeById(Long.parseLong(id)); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } catch (ImppBusiException busExcep) { - LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + }catch(ImppBusiException 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()); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } } \ No newline at end of file diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeExpressionController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeExpressionController.java index 5049f3a..808c256 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeExpressionController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeExpressionController.java @@ -50,14 +50,11 @@ public class SysTaskTimeExpressionController extends CoreBaseController{ .notNull("expressionStartDatetime",timeExpression.getExpressionStartDatetime()); taskTimeExpressionService.insertSysTaskTimeExpression(timeExpression); - return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } catch (ImppBusiException busExcep) { - LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + }catch(ImppBusiException 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()); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -74,12 +71,10 @@ public class SysTaskTimeExpressionController extends CoreBaseController{ taskTimeExpressionService.updateSysTaskTimeExpression(timeExpression); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } catch (ImppBusiException busExcep) { - LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + }catch(ImppBusiException 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()); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -92,12 +87,10 @@ public class SysTaskTimeExpressionController extends CoreBaseController{ taskTimeExpressionService.deleteSysTaskTimeExpressionById(Long.parseLong(id)); return ResultBean.success().setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } catch (ImppBusiException busExcep) { - LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + }catch(ImppBusiException 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()); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -106,15 +99,11 @@ public class SysTaskTimeExpressionController extends CoreBaseController{ public ResultBean findSysTaskTimeExpressionAll() { try { List list = taskTimeExpressionService.listSysTaskTimeExpression(); - return ResultBean.success("操作成功") - .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) - .setResultList(list); - } catch (ImppBusiException busExcep) { - LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(list); + }catch(ImppBusiException 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()); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -127,15 +116,11 @@ public class SysTaskTimeExpressionController extends CoreBaseController{ SysTaskTimeExpression taskTimeExpression = taskTimeExpressionService.getSysTaskTimeExpressionById(Long.parseLong(id)); - return ResultBean.success("操作成功") - .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) - .setResultObject(taskTimeExpression); - } catch (ImppBusiException busExcep) { - LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(taskTimeExpression); + }catch(ImppBusiException 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()); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -146,19 +131,17 @@ public class SysTaskTimeExpressionController extends CoreBaseController{ ListPager taskTimeExpressionListPager = taskTimeExpressionService.querySysTaskTimeExpressionByPager(taskTimeExpression,pager); return ResultBean.success("查询成功").setListPager(taskTimeExpressionListPager).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()); + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @DeleteMapping("/batch-delete") @ApiOperation(value = "根据id批量删除时间表达式",notes = "根据id批量删除时间表达式") - public ResultBean deleteSysTaskTimeExpressionByIds(String[] ids){ + public ResultBean deleteSysTaskTimeExpressionByIds(String[] idsStr){ try{ - if(ids.length == 0){ + if(idsStr.length == 0){ throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) @@ -166,14 +149,12 @@ public class SysTaskTimeExpressionController extends CoreBaseController{ .build(); } - taskTimeExpressionService.deleteSysTaskTimeExpressionByIds(StringTool.getArrayLong(ids)); + taskTimeExpressionService.deleteSysTaskTimeExpressionByIds(StringTool.getArrayLong(idsStr)); 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()); + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/LetterQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/LetterQueueReceiver.java index da8aab6..60b7e57 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/LetterQueueReceiver.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/LetterQueueReceiver.java @@ -14,7 +14,6 @@ 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; @@ -44,7 +43,7 @@ public class LetterQueueReceiver { * @param message * 发送:rabbitTemplate.convertAndSend(I3CoreQueueConfig.IMPP_MESSAGE_QUEUE, new SysMessage(....)); */ - @RabbitListener(queues = I3CoreQueueConfig.IMPP_MESSAGE_LETTER_QUEUE) + //@RabbitListener(queues = I3CoreQueueConfig.IMPP_MESSAGE_LETTER_QUEUE) public void processImppMessage(SysMessage msg, Channel channel, Message message) { try { LOGGER.info("【MQ-IMPP_MESSAGE_LETTER_QUEUE】数据接收成功:{}",msg); @@ -82,7 +81,7 @@ public class LetterQueueReceiver { ); } - msg.setMessageSenderNameRdd(StringUtils.join(receiverName, ",")); + msg.setMessageReceiversNameRdd(StringUtils.join(receiverName, ",")); sysMessageService.updateSysMessage(msg); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeExpressionService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeExpressionService.java index 02e610e..69b25df 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeExpressionService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeExpressionService.java @@ -11,6 +11,7 @@ import cn.estsh.i3plus.pojo.platform.repository.SysTaskTimeRepository; 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 io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -37,36 +38,42 @@ public class SysTaskTimeExpressionService implements ISysTaskTimeExpressionServi private SysTaskTimeRepository taskTimeRDao; @Override + @ApiOperation(value = "修改数据") public void updateSysTaskTimeExpression(SysTaskTimeExpression taskTimeExpression) { LOGGER.info("定时任务时间表达式 TASK_TIME_EXPRESSION :{}", taskTimeExpression); taskTimeExpressionRDao.update(taskTimeExpression); } @Override + @ApiOperation(value = "根据id删除数据") public void deleteSysTaskTimeExpressionById(Long id) { LOGGER.info("定时任务时间表达式 TASK_TIME_EXPRESSION :{}", id); taskTimeExpressionRDao.deleteById(id); } @Override + @ApiOperation(value = "新增数据") public SysTaskTimeExpression insertSysTaskTimeExpression(SysTaskTimeExpression taskTimeExpression) { LOGGER.info("定时任务时间表达式 TASK_TIME_EXPRESSION :{}", taskTimeExpression); return taskTimeExpressionRDao.insert(taskTimeExpression); } @Override + @ApiOperation(value = "查询所有数据") public List listSysTaskTimeExpression() { LOGGER.info("定时任务时间表达式 TASK_TIME_EXPRESSION list"); return taskTimeExpressionRDao.list(); } @Override + @ApiOperation(value = "根据ID 查询任务表达式") public SysTaskTimeExpression getSysTaskTimeExpressionById(Long id) { LOGGER.info("定时任务时间表达式 TASK_TIME_EXPRESSION :{}" ,id); return taskTimeExpressionRDao.getById(id); } @Override + @ApiOperation(value = "任务表达式查询,分页,排序") public ListPager querySysTaskTimeExpressionByPager(SysTaskTimeExpression taskTimeExpression, Pager pager) { LOGGER.info("文件表达式 TASK_TIME_EXPRESSION taskTimeExpression:{},Pager:{}",taskTimeExpression,pager); if(taskTimeExpression == null) { @@ -80,9 +87,10 @@ public class SysTaskTimeExpressionService implements ISysTaskTimeExpressionServi } @Override + @ApiOperation(value = "任务表达式批量删除") public void deleteSysTaskTimeExpressionByIds(Long[] ids) { LOGGER.info("文件表达式 SYS_MENU ids:{}", ids); - long count = taskTimeRDao.findByHqlWhereCount(CoreHqlPack.packHqlIds("timeId",ids)); + long count = taskTimeRDao.findByHqlWhereCount(CoreHqlPack.packHqlIds("timeExpressionId",ids)); if(count >= 1){ throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeService.java index ce61014..81e3580 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeService.java @@ -16,6 +16,7 @@ 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 io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.quartz.*; import org.slf4j.Logger; @@ -36,7 +37,7 @@ import java.util.List; * @Modify : **/ @Service -public class SysTaskTimeService implements ISysTaskTimeService { +public class SysTaskTimeService implements ISysTaskTimeService{ public static final Logger LOGGER = LoggerFactory.getLogger(SysTaskTimeService.class); @@ -50,16 +51,16 @@ public class SysTaskTimeService implements ISysTaskTimeService { private Scheduler scheduler; @Override + @ApiOperation(value = "修改定时任务") public void updateSysTaskTime(SysTaskTime taskTime, SysTaskTimeExpression taskTimeExpression) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SysTaskTime oldSysTaskTime = taskTimeRDao.getById(taskTime.getId()); // 更新关系表 - refExpressionTriggerRDao.updateByProperties( - "expressionId",oldSysTaskTime.getTimeExpressionId(), - new String[]{"name","groupName"}, - new String[]{oldSysTaskTime.getName(),taskTime.getGroupName()} + refExpressionTriggerRDao.updateByProperties(new String[]{"triggerName","triggerGroupName"}, + new String[]{oldSysTaskTime.getName(),taskTime.getGroupName()}, + "expressionId",oldSysTaskTime.getTimeExpressionId() ); taskTimeRDao.update(taskTime); @@ -106,6 +107,7 @@ public class SysTaskTimeService implements ISysTaskTimeService { } @Override + @ApiOperation(value = "修改任务状态") public void updateSysTaskTimeStatus(Long id, int status, SessionUser user) { LOGGER.info("定时任务 SYS_MENU id:{} status:{} user:{}", id,status,user); SysTaskTime taskTime = taskTimeRDao.getById(id); @@ -130,6 +132,7 @@ public class SysTaskTimeService implements ISysTaskTimeService { } @Override + @ApiOperation(value = "根据根据id删除数据") public void deleteSysTaskTimeById(Long id) { try { SysTaskTime taskTime = taskTimeRDao.getById(id); @@ -160,6 +163,7 @@ public class SysTaskTimeService implements ISysTaskTimeService { } @Override + @ApiOperation(value = "新增定时任务") public SysTaskTime insertSysTaskTime(SysTaskTime taskTime, SysTaskTimeExpression taskTimeExpression) { try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -226,18 +230,21 @@ public class SysTaskTimeService implements ISysTaskTimeService { } @Override + @ApiOperation(value = "查询所有数据") public List listSysTaskTime() { LOGGER.info("定时任务 TASK_TIME find All"); return taskTimeRDao.findAll(); } @Override + @ApiOperation(value = "根据id 数据") public SysTaskTime getSysTaskTimeById(Long id) { LOGGER.info("定时任务 TASK_TIME find id:{}", id); return taskTimeRDao.getOne(id); } @Override + @ApiOperation(value = "定时任务复制查询,分页,排序") public ListPager querySysTaskTimeByPager(SysTaskTime taskTime, Pager pager) { LOGGER.info("定时任务 TASK_TIME SysTaskTime:{},Pager:{}",taskTime,pager); if(taskTime == null) { @@ -251,12 +258,14 @@ public class SysTaskTimeService implements ISysTaskTimeService { } @Override + @ApiOperation(value = "根据id批量删除定时任务") public void deleteSysTaskTimeByIds(Long[] ids) { LOGGER.info("定时任务 TASK_TIME ids:{}", ids.toString()); taskTimeRDao.deleteByIds(ids); } @Override + @ApiOperation(value = "批量修改定时任务状态") public void updateSysTaskTimeStatusByIds(Long[] ids, Integer status) { LOGGER.info("定时任务 TASK_TIME ids:{},status:{}",ids,status); StringBuffer where = new StringBuffer(); @@ -266,6 +275,7 @@ public class SysTaskTimeService implements ISysTaskTimeService { } @Override + @ApiOperation(value = "修改最后时间") public void doSysTaskTimeLastDateByNameAndGroupName(String lastDate, String name, String groupName) { taskTimeRDao.updateByProperties( new String[]{"name","groupName"},new String[]{name,groupName}, @@ -273,6 +283,7 @@ public class SysTaskTimeService implements ISysTaskTimeService { } @Override + @ApiOperation(value = "立即执行") public void executeSysTaskTimeById(Long id) { SysTaskTime taskTime = taskTimeRDao.getById(id); JobKey jobKey = JobKey.jobKey(taskTime.getName(),taskTime.getGroupName()); From 6ad1b820841a80ce46bf26864fc8203f37435cb1 Mon Sep 17 00:00:00 2001 From: "wei.peng" Date: Thu, 29 Nov 2018 11:35:56 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/init/permission.xlsx | Bin 40942 -> 41235 bytes 1 file changed, 0 insertions(+), 0 deletions(-) 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 19fd927027c639c3ac8091acd336c6513890dd32..08ac3c06dcb0ea75b1ef819b2ba5c161ea5e805a 100644 GIT binary patch delta 23474 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 L9JK41zoPyV$wwjr From 5b154b40df6fde3ae7bc88de709dd3e51283a0ec Mon Sep 17 00:00:00 2001 From: "yunhao.wang" Date: Thu, 29 Nov 2018 21:59:23 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=AD=97=E5=85=B8=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/iservice/busi/ISysDictionaryService.java | 14 ++++++++++++- .../serviceimpl/busi/SysDictionaryService.java | 23 ++++++++++++++++++---- 2 files changed, 32 insertions(+), 5 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 6cdbe5e..c2169df 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 @@ -3,6 +3,7 @@ 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.bean.SysDictionary; +import io.swagger.annotations.ApiOperation; import java.util.List; @@ -19,24 +20,28 @@ public interface ISysDictionaryService { * 添加字典 * @param sysDictionary */ + @ApiOperation(value = "添加字典") void insertSysDictionary(SysDictionary sysDictionary); /** * 根据id删除字典 * @param id */ + @ApiOperation(value = "根据id删除字典") void deleteSysDictionaryById(Long id); /** * 修改字典 * @param sysDictionary */ + @ApiOperation(value = "修改字典") void updateSysDictionary(SysDictionary sysDictionary); /** * 查询所有字典信息 * @return */ + @ApiOperation(value = "查询所有字典信息") List listSysDictionary(); /** @@ -44,6 +49,7 @@ public interface ISysDictionaryService { * @param id * @return */ + @ApiOperation(value = "根据id查询字典信息") SysDictionary getSysDictionaryById(Long id); /** @@ -51,23 +57,27 @@ public interface ISysDictionaryService { * @param parentCode * @return */ + @ApiOperation(value = "根据父级代码查询字典项信息") List findSysDictionaryByParentCode(String parentCode); /** * 字典复杂查询,分页,排序 * 默认查询非顶级字典 */ + @ApiOperation(value = "字典复杂查询,分页,排序",notes = "默认查询非顶级字典") ListPager querySysDictionaryByPager(SysDictionary sysDictionary, Pager pager); /** * 查询顶级字典 */ + @ApiOperation(value = "查询顶级字典") List findSysDictionaryByTop(); /** * 批量删除字典 * @param ids */ + @ApiOperation(value = "批量删除字典") void deleteSysDictionaryByIds(Long[] ids); /** @@ -75,13 +85,15 @@ public interface ISysDictionaryService { * @param fileName * @return */ + @ApiOperation(value = "检出文件名称是否符合系统规范") boolean checkFileName(String fileName); /** - * 根据父节点 已经当前节点CODE 获取字典信息 + * 根据父节点 以及当前节点CODE 获取字典信息 * @param parentCode * @param code * @return */ + @ApiOperation(value = "根据父节点 以及当前节点CODE 获取字典信息") SysDictionary getSysDictionaryByParentCodeAndCode(String parentCode,String code); } 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 dc9f430..aa8469b 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 @@ -14,6 +14,7 @@ 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 io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -36,9 +37,11 @@ public class SysDictionaryService implements ISysDictionaryService { private SysDictionaryRepository sysDictionaryRDao; @Override + @ApiOperation(value = "添加字典") public void insertSysDictionary(SysDictionary sysDictionary) { - long repeatCount = sysDictionaryRDao.findByPropertyCount("dictionaryCode",sysDictionary.getDictionaryCode()); - if (repeatCount > 0){ + long repeatCodeCount = sysDictionaryRDao.findByPropertyCount("dictionaryCode",sysDictionary.getDictionaryCode()); + long repeatValueCount = sysDictionaryRDao.findByPropertyCount("dictionaryValue",sysDictionary.getDictionaryValue()); + if (repeatCodeCount > 0 || repeatValueCount > 0){ throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.IO_EXCEPTION.getCode()) @@ -64,17 +67,21 @@ public class SysDictionaryService implements ISysDictionaryService { } @Override + @ApiOperation(value = "根据id删除字典") public void deleteSysDictionaryById(Long id) { LOGGER.info("字典 SYS_DICTIONARY id:{}",id); sysDictionaryRDao.deleteById(id); } @Override + @ApiOperation(value = "修改字典") public void updateSysDictionary(SysDictionary sysDictionary) { // 校验唯一 String hqlPack = CoreHqlPack.packHqlSysDictionaryCode(sysDictionary); - long repeatCount = sysDictionaryRDao.findByHqlWhereCount(hqlPack); - if (repeatCount > 0){ + long repeatCodeCount = sysDictionaryRDao.findByHqlWhereCount(hqlPack); + hqlPack = CoreHqlPack.packHqlSysDictionaryValue(sysDictionary); + long repeatValueCount = sysDictionaryRDao.findByHqlWhereCount(hqlPack); + if (repeatCodeCount > 0 || repeatValueCount > 0){ throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) @@ -98,24 +105,28 @@ public class SysDictionaryService implements ISysDictionaryService { } @Override + @ApiOperation(value = "查询所有字典信息") public List listSysDictionary() { LOGGER.info("字典 SYS_DICTIONARY list"); return sysDictionaryRDao.list(); } @Override + @ApiOperation(value = "根据id查询字典信息") public SysDictionary getSysDictionaryById(Long id) { LOGGER.info("字典 SYS_DICTIONARY id:{}",id); return sysDictionaryRDao.getById(id); } @Override + @ApiOperation(value = "根据父级代码查询字典项信息") public List findSysDictionaryByParentCode(String parentCode) { LOGGER.info("字典 SYS_DICTIONARY parentCode:{}",parentCode); return sysDictionaryRDao.findByProperty("parentCodeRdd",parentCode); } @Override + @ApiOperation(value = "字典复杂查询,分页,排序",notes = "默认查询非顶级字典") public ListPager querySysDictionaryByPager(SysDictionary sysDictionary, Pager pager) { sysDictionary = sysDictionary == null ? new SysDictionary():sysDictionary; @@ -125,18 +136,21 @@ public class SysDictionaryService implements ISysDictionaryService { } @Override + @ApiOperation(value = "查询顶级字典") public List findSysDictionaryByTop() { LOGGER.info("字典 SYS_DICTIONARY parentId:{}", CommonEnumUtil.PARENT.DEFAULT.getValue()); return sysDictionaryRDao.findByProperty("parentId",(long)CommonEnumUtil.PARENT.DEFAULT.getValue()); } @Override + @ApiOperation(value = "批量删除字典") public void deleteSysDictionaryByIds(Long[] ids) { LOGGER.info("字典 SYS_DICTIONARY ids:{}", ids.toString()); sysDictionaryRDao.deleteByIds(ids); } @Override + @ApiOperation(value = "检出文件名称是否符合系统规范") public boolean checkFileName(String fileName) { List list = findSysDictionaryByParentCode(CommonConstWords.DICTIONARY_FILE_TYPE); @@ -153,6 +167,7 @@ public class SysDictionaryService implements ISysDictionaryService { } @Override + @ApiOperation(value = "根据父节点 以及当前节点CODE 获取字典信息") public SysDictionary getSysDictionaryByParentCodeAndCode(String parentCode, String code) { List list = sysDictionaryRDao.findByProperty(new String[]{"parentCodeRdd","dictionaryCode"}, new Object[]{parentCode,code}); From 28b17c83a6004893d960ff3c78306fc655a1ce5a Mon Sep 17 00:00:00 2001 From: "wei.peng" Date: Fri, 30 Nov 2018 00:01:20 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/iservice/base/ISystemLoginService.java | 3 + .../apiservice/controller/DemoCloudController.java | 254 ++++++++++----------- .../apiservice/controller/base/AuthController.java | 11 +- .../controller/busi/SysUserController.java | 5 +- .../controller/busi/SysUserInfoController.java | 2 +- .../serviceimpl/base/SystemLoginService.java | 50 +++- .../serviceimpl/busi/SysDepartmentService.java | 5 +- .../serviceimpl/busi/SysRoleService.java | 2 +- .../serviceimpl/busi/SysUserService.java | 7 +- 9 files changed, 198 insertions(+), 141 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java index f79a54c..68bc0ca 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken; import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken; import cn.estsh.i3plus.pojo.base.shirotoken.UserToken; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; import java.util.List; @@ -25,4 +26,6 @@ public interface ISystemLoginService { SessionUser queryCheckAdminLogin(AdminToken authenticationToken); SessionUser queryCheckSaAdminLogin(SaAdminToken authenticationToken); + + Integer doLoginPasswordError(SysUser user); } 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 fee0cc9..f1909a8 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 @@ -1,127 +1,127 @@ -package cn.estsh.i3plus.core.apiservice.controller; - -import cn.estsh.i3plus.icloud.core.sdk.ICoreDemoCloud; -import cn.estsh.i3plus.icloud.wms.sdk.IWmsDemoCloud; -import cn.estsh.i3plus.pojo.base.bean.BaseBean; -import cn.estsh.i3plus.pojo.base.bean.BaseModelBean; -import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; -import cn.estsh.i3plus.pojo.base.common.Pager; -import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; -import cn.estsh.i3plus.pojo.platform.bean.SysRole; -import cn.estsh.i3plus.pojo.platform.bean.SysUser; -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.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -@RestController -@RequestMapping("/impp/cloud") -@Api(description="分布式服务测试") -public class DemoCloudController { - - private static final Logger LOGGER = LoggerFactory.getLogger(DemoCloudController.class); - - @Value("${server.port}") - private String serverPort; - - @Value("${eureka.instance.ip-address}") - private String ipAddress; - - @Autowired - ICoreDemoCloud iCoreDemoCloud; - - @Autowired - IWmsDemoCloud iWmsDemoCloud; - - @GetMapping(value="/test") - @ApiOperation(value="core测试",notes = "core测试") - public ResultBean testCore(String test) { - LOGGER.info("{}:{},【impp-core接受数据】{}",ipAddress,serverPort,test); - return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } - - @GetMapping(value="/test-wms") - @ApiOperation(value="wms测试",notes = "wms测试") - public ResultBean testWms(String test) { - LOGGER.info("【{}:{},impp-core接受数据 -> wms】{}",ipAddress,serverPort,test); - - BaseResultBean result = iWmsDemoCloud.testWms(test); - if(result.isSuccess()){ - return ResultBean.success("wms返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - }else{ - LOGGER.error("无法调用wms服务:{}",result.getErrorMsg()); - return ResultBean.fail("调用wms服务出错:" + result.getErrorMsg()); - } - } - - @GetMapping(value="/test-get") - @ApiOperation(value="测试get",notes = "测试get") - public ResultBean testFeignGet(String test) { - LOGGER.info("【impp-core-get接受数据】{}" ,test); - return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } - - @PostMapping(value="/test-post") - @ApiOperation(value="测试post",notes = "测试post") - public ResultBean testFeignPost(String test) { - LOGGER.info("【impp-core-post接受数据】{}" ,test); - return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } - - @PutMapping(value="/test-put") - @ApiOperation(value="put接受数据",notes = "put接受数据") - public ResultBean testPut(String test,String name) { - LOGGER.info("【impp-core-put接受数据】param1:{},param2:{}", test,name); - return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } - - @DeleteMapping(value="/test-delete") - @ApiOperation(value="delete接受数据",notes = "delete接受数据") - public ResultBean testDelete( - @RequestBody Pager pager, - @RequestParam("test") String test) { - LOGGER.info("【impp-core-delete接受数据】pager:{},test:{}",pager,test); - return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } - - @PutMapping(value="/test-cloud-put") - @ApiOperation(value="测试cloudput",notes = "测试cloudput") - public ResultBean putTestCloud(String test,String name) { - LOGGER.info("【impp-core-put接受数据】test:{},name:{}",test,name); - return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } - - @PostMapping(value="/test-object") - @ApiOperation(value="测试单对象") - public ResultBean testObject(@RequestBody Pager pager) { - LOGGER.info("【impp-core-object接受数据】{}" ,pager); - return ResultBean.success("返回:" + pager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } - - @PostMapping(value="/test-map") - @ApiOperation(value="测试get",notes = "测试get") - public ResultBean testFeignMap(@RequestBody Map map) { - LOGGER.info("【impp-core-map接受数据】{}" ,map); - return ResultBean.success("返回:" + map).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } - - @PostMapping(value="/test-arr") - @ApiOperation(value="测试arr",notes = "测试arr") - public ResultBean testFeignArr(@RequestBody String[] arr) { - LOGGER.info("【impp-core-arr接受数据】{}" ,arr); - return ResultBean.success("返回:" + arr).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } - - @PostMapping(value="/test-more-object") - @ApiOperation(value="测试多对象模型",notes = "测试多对象模型") - public ResultBean testFeignMoreObj(@RequestBody BaseModelBean roleBean) { - LOGGER.info("【impp-core-more-obj接受多对象模型】objBean:{},pager:{}" ,roleBean.getObj(),roleBean.getPager()); - return ResultBean.success("返回:" + roleBean).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } -} +//package cn.estsh.i3plus.core.apiservice.controller; +// +//import cn.estsh.i3plus.icloud.core.sdk.ICoreDemoCloud; +//import cn.estsh.i3plus.icloud.wms.sdk.IWmsDemoCloud; +//import cn.estsh.i3plus.pojo.base.bean.BaseBean; +//import cn.estsh.i3plus.pojo.base.bean.BaseModelBean; +//import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; +//import cn.estsh.i3plus.pojo.base.common.Pager; +//import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +//import cn.estsh.i3plus.pojo.platform.bean.SysRole; +//import cn.estsh.i3plus.pojo.platform.bean.SysUser; +//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.beans.factory.annotation.Value; +//import org.springframework.web.bind.annotation.*; +// +//import java.util.Map; +// +//@RestController +//@RequestMapping("/impp/cloud") +//@Api(description="分布式服务测试") +//public class DemoCloudController { +// +// private static final Logger LOGGER = LoggerFactory.getLogger(DemoCloudController.class); +// +// @Value("${server.port}") +// private String serverPort; +// +// @Value("${eureka.instance.ip-address}") +// private String ipAddress; +// +// @Autowired +// ICoreDemoCloud iCoreDemoCloud; +// +// @Autowired +// IWmsDemoCloud iWmsDemoCloud; +// +// @GetMapping(value="/test") +// @ApiOperation(value="core测试",notes = "core测试") +// public ResultBean testCore(String test) { +// LOGGER.info("{}:{},【impp-core接受数据】{}",ipAddress,serverPort,test); +// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); +// } +// +// @GetMapping(value="/test-wms") +// @ApiOperation(value="wms测试",notes = "wms测试") +// public ResultBean testWms(String test) { +// LOGGER.info("【{}:{},impp-core接受数据 -> wms】{}",ipAddress,serverPort,test); +// +// BaseResultBean result = iWmsDemoCloud.testWms(test); +// if(result.isSuccess()){ +// return ResultBean.success("wms返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); +// }else{ +// LOGGER.error("无法调用wms服务:{}",result.getErrorMsg()); +// return ResultBean.fail("调用wms服务出错:" + result.getErrorMsg()); +// } +// } +// +// @GetMapping(value="/test-get") +// @ApiOperation(value="测试get",notes = "测试get") +// public ResultBean testFeignGet(String test) { +// LOGGER.info("【impp-core-get接受数据】{}" ,test); +// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); +// } +// +// @PostMapping(value="/test-post") +// @ApiOperation(value="测试post",notes = "测试post") +// public ResultBean testFeignPost(String test) { +// LOGGER.info("【impp-core-post接受数据】{}" ,test); +// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); +// } +// +// @PutMapping(value="/test-put") +// @ApiOperation(value="put接受数据",notes = "put接受数据") +// public ResultBean testPut(String test,String name) { +// LOGGER.info("【impp-core-put接受数据】param1:{},param2:{}", test,name); +// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); +// } +// +// @DeleteMapping(value="/test-delete") +// @ApiOperation(value="delete接受数据",notes = "delete接受数据") +// public ResultBean testDelete( +// @RequestBody Pager pager, +// @RequestParam("test") String test) { +// LOGGER.info("【impp-core-delete接受数据】pager:{},test:{}",pager,test); +// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); +// } +// +// @PutMapping(value="/test-cloud-put") +// @ApiOperation(value="测试cloudput",notes = "测试cloudput") +// public ResultBean putTestCloud(String test,String name) { +// LOGGER.info("【impp-core-put接受数据】test:{},name:{}",test,name); +// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); +// } +// +// @PostMapping(value="/test-object") +// @ApiOperation(value="测试单对象") +// public ResultBean testObject(@RequestBody Pager pager) { +// LOGGER.info("【impp-core-object接受数据】{}" ,pager); +// return ResultBean.success("返回:" + pager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); +// } +// +// @PostMapping(value="/test-map") +// @ApiOperation(value="测试get",notes = "测试get") +// public ResultBean testFeignMap(@RequestBody Map map) { +// LOGGER.info("【impp-core-map接受数据】{}" ,map); +// return ResultBean.success("返回:" + map).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); +// } +// +// @PostMapping(value="/test-arr") +// @ApiOperation(value="测试arr",notes = "测试arr") +// public ResultBean testFeignArr(@RequestBody String[] arr) { +// LOGGER.info("【impp-core-arr接受数据】{}" ,arr); +// return ResultBean.success("返回:" + arr).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); +// } +// +// @PostMapping(value="/test-more-object") +// @ApiOperation(value="测试多对象模型",notes = "测试多对象模型") +// public ResultBean testFeignMoreObj(@RequestBody BaseModelBean roleBean) { +// LOGGER.info("【impp-core-more-obj接受多对象模型】objBean:{},pager:{}" ,roleBean.getObj(),roleBean.getPager()); +// return ResultBean.success("返回:" + roleBean).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); +// } +//} 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 311f2c4..6e37732 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 @@ -71,8 +71,15 @@ public class AuthController extends CoreBaseController { result.setUrl("/"); return result; }catch (AuthenticationException e) { - ResultBean result = ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); - result.setErrorMsg(e.getMessage()); + ResultBean result = ResultBean.fail(); + Throwable cause = e.getCause(); + if(cause instanceof ImppBusiException ){ + ImppBusiException exception = (ImppBusiException) cause; + result.setErrorMsg(exception.getMessage() + exception.getErrorSolution()); + }else { + result = ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + result.setErrorMsg(e.getMessage()); + } return result; }catch (ImppBusiException e) { return ResultBean.fail(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 d5f2815..90e6358 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 @@ -47,9 +47,6 @@ public class SysUserController extends CoreBaseController{ public static final Logger LOGGER = LoggerFactory.getLogger(SysUserController.class); - @Resource(name="redisCore") - private ImppRedis redisCore; - @Autowired private ISysUserService sysUserService; @@ -93,7 +90,7 @@ public class SysUserController extends CoreBaseController{ //新增初始化 sysUser.setUserName(userInfo.getName()); - sysUser.setUserStatus(CommonEnumUtil.USER_STATUS.NORMAL.getValue()); + sysUser.setUserStatus(CommonEnumUtil.USER_STATUS.ENABLE.getValue()); sysUser.setDepartmentId(userInfo.getDepartmentId()); sysUser.setDepartmentNameRdd(userInfo.getDepartmentNameRdd()); sysUser.setIsValid(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); 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 c886886..23895c4 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,7 +72,7 @@ public class SysUserInfoController extends CoreBaseController{ .checkNotZero("positionId",userInfo.getPositionId()); ConvertBean.modelInitialize(userInfo,user); - userInfo.setUserInfoStatus(CommonEnumUtil.USER_STATUS.NORMAL.getValue()); + userInfo.setUserInfoStatus(CommonEnumUtil.USER_STATUS.ENABLE.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/serviceimpl/base/SystemLoginService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java index bd6f2d0..c7d3736 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.base; import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; import cn.estsh.i3plus.platform.common.tool.EncryptTool; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken; import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken; @@ -12,12 +13,17 @@ import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ImppRedis; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authc.AuthenticationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; /** * @Description : 用户登陆方法 @@ -33,6 +39,12 @@ public class SystemLoginService implements ISystemLoginService { @Autowired private SysUserRepository sysUserRDao; + /** + * 核心的缓存 + */ + @Resource(name="redisCore") + protected ImppRedis redisCore; + @Override public SessionUser queryUserLogin(String loginName, String loginPwd, String languageCode) { //生成令牌 @@ -79,6 +91,26 @@ public class SystemLoginService implements ISystemLoginService { return packSessionUser(user,CommonEnumUtil.USER_TYPE.SA.getCode(),saAdminToken.getLanguageCode()); } + @Override +// @Transactional(propagation = Propagation.NOT_SUPPORTED) + public Integer doLoginPasswordError(SysUser user) { + String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getId(); +// Object redisValue = redisCore.getObject(redisKey); + Object redisValue = AuthUtil.getSessionAttribute(redisKey); + Integer num = redisValue == null ? 1 : Integer.parseInt(redisValue.toString()) + 1; + + + if(num >= CommonConstWords.USER_LOGIN_ERROR_MAX_NUM){ + user.setUserStatus(CommonEnumUtil.USER_STATUS.LOCKING.getValue()); + redisCore.putObject(redisKey,num,0); // 账号锁定后移除锁 + sysUserRDao.update(user); + } + + redisCore.putObject(redisKey,num,24 * 60 * 60); + AuthUtil.setSessionObject(redisKey,num); + return num; + } + /** * 根据用户名密码查询用户 * @param loginName @@ -90,15 +122,29 @@ public class SystemLoginService implements ISystemLoginService { if(user == null){ //用户不存在 throw new AuthenticationException("用户不存在"); }else { - try { // 密码加密 + if(user.getUserStatus() != CommonEnumUtil.USER_STATUS.ENABLE.getValue()){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.LOGIN_USER_NAME_EXCEPTION.getCode()) + .setErrorDetail("账号状态:"+CommonEnumUtil.USER_STATUS.valueOf(user.getUserStatus())) + .setErrorSolution("请联系管理员") + .build(); + } + try { + // 密码加密 pwd = EncryptTool.hexMD5(pwd); } catch (Exception e) { LOGGER.error("登录密码加密出错。"); throw new AuthenticationException("登陆密码错误"); +// doLoginPasswordError( user); +// throw new AuthenticationException("密码输入错误。如果输错次数超过"+CommonConstWords.USER_LOGIN_ERROR_MAX_NUM+"次,用户将被锁定。"); } if (!StringUtils.equals(user.getUserLoginPassword(), pwd)) { //密码不符 throw new AuthenticationException("登陆密码错误"); +// doLoginPasswordError( user); +// throw new AuthenticationException("密码输入错误。如果输错次数超过"+CommonConstWords.USER_LOGIN_ERROR_MAX_NUM+"次,用户将被锁定。"); } + return user; } } @@ -120,4 +166,6 @@ public class SystemLoginService implements ISystemLoginService { return sessionUser; } + + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java index d9757fe..c925343 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java @@ -151,9 +151,10 @@ public class SysDepartmentService implements ISysDepartmentService { LOGGER.info("部门信息 DEPARTMENT department:{}",department); departmentRDao.update(department); // 修改冗余信息 - // 修改冗余信息 departmentRDao.updateByProperties("parentId",department.getId(), - "parentNameRdd",department.getName()); + new String[]{"parentNameRdd", "organizeId", "organizeNameRdd"}, + new Object[]{department.getName(), department.getOrganizeId(), department.getOrganizeNameRdd()}); + } @Override diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java index 1db47e2..be17ad7 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java @@ -68,7 +68,7 @@ public class SysRoleService implements ISysRoleService { StringBuffer where = new StringBuffer(); HqlPack.getInPack(StringUtils.join( ids,","), "id", where); - sysRoleRDao.updateByHqlWhere(where.toString(), "roleStatusId", status); + sysRoleRDao.updateByHqlWhere(where.toString(), "roleStatus", status); } @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 7fb2785..aa58aed 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 @@ -90,6 +90,7 @@ public class SysUserService implements ISysUserService { .build(); } + packSessionUser(sessionUser, user, user.getUserType(), languageCode); AuthUtil.setSessionUser(sessionUser); refreshUserLoginInformation(user.getId()); @@ -379,7 +380,7 @@ public class SysUserService implements ISysUserService { public void checkSysUserOnly(SysUser user) { if(user != null){ // 登录名唯一教研 - if(checkSysUserLoginName(user.getUserLoginName(),user.getId())){ + if(!checkSysUserLoginName(user.getUserLoginName(), user.getId() == null ? 0 : user.getId())){ throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) @@ -389,7 +390,7 @@ public class SysUserService implements ISysUserService { } // 登录名唯一教研 - if(checkSysUserEmail(user.getUserEmail(),user.getId())){ + if(!checkSysUserEmail(user.getUserEmail(),user.getId() == null ? 0 : user.getId())){ throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) @@ -399,7 +400,7 @@ public class SysUserService implements ISysUserService { } // 登录名唯一教研 - if(checkSysUserPhone(user.getUserPhone(),user.getId())){ + if(!checkSysUserPhone(user.getUserPhone(),user.getId() == null ? 0 : user.getId())){ throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) From e1233e936140239f45a6c7c23dfdf182599f87f2 Mon Sep 17 00:00:00 2001 From: "wei.peng" Date: Fri, 30 Nov 2018 01:48:58 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/core/apiservice/controller/busi/SysUserController.java | 6 +++--- .../i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java | 2 +- .../i3plus/core/apiservice/serviceimpl/busi/SysUserService.java | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) 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 90e6358..aff3dd1 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 @@ -446,17 +446,17 @@ public class SysUserController extends CoreBaseController{ sysUserService.updateSysUser(user); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }else { - return ResultBean.success("操作失败") + return ResultBean.fail("操作失败") .setCode(ResourceEnumUtil.MESSAGE.FAIL.getCode()) .setErrorMsg("请勿修改邮箱信息"); } }else { - return ResultBean.success("操作失败") + return ResultBean.fail("操作失败") .setCode(ResourceEnumUtil.MESSAGE.FAIL.getCode()) .setErrorMsg("验证码错误请重新输入"); } }else { - return ResultBean.success("操作失败") + return ResultBean.fail("操作失败") .setCode(ResourceEnumUtil.MESSAGE.FAIL.getCode()) .setErrorMsg("验证码已过期"); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java index c7d3736..7e523bb 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java @@ -101,7 +101,7 @@ public class SystemLoginService implements ISystemLoginService { if(num >= CommonConstWords.USER_LOGIN_ERROR_MAX_NUM){ - user.setUserStatus(CommonEnumUtil.USER_STATUS.LOCKING.getValue()); +// user.setUserStatus(CommonEnumUtil.USER_STATUS.LOCKING.getValue()); redisCore.putObject(redisKey,num,0); // 账号锁定后移除锁 sysUserRDao.update(user); } 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 aa58aed..81506f5 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 @@ -333,7 +333,7 @@ public class SysUserService implements ISysUserService { int count; if(id > 0){ StringBuffer sw = new StringBuffer(); - HqlPack.getStringEqualPackOr(userLoginName,"userLoginName",sw); + HqlPack.getStringEqualPack(userLoginName,"userLoginName",sw); HqlPack.getNumNOEqualPack(id,"id",sw); count = sysUserRDao.findByHqlWhereCount(sw.toString()); @@ -349,7 +349,7 @@ public class SysUserService implements ISysUserService { int count; if(id > 0){ StringBuffer sw = new StringBuffer(); - HqlPack.getStringEqualPackOr(email,"userEmail",sw); + HqlPack.getStringEqualPack(email,"userEmail",sw); HqlPack.getNumNOEqualPack(id,"id",sw); count = sysUserRDao.findByHqlWhereCount(sw.toString()); @@ -365,7 +365,7 @@ public class SysUserService implements ISysUserService { int count; if(id > 0){ StringBuffer sw = new StringBuffer(); - HqlPack.getStringEqualPackOr(phone,"userPhone",sw); + HqlPack.getStringEqualPack(phone,"userPhone",sw); HqlPack.getNumNOEqualPack(id,"id",sw); count = sysUserRDao.findByHqlWhereCount(sw.toString());