diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogRoleOperateService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogRoleOperateService.java new file mode 100644 index 0000000..a83d35a --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogRoleOperateService.java @@ -0,0 +1,23 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.platform.bean.SysLogRoleOperate; + +import java.util.List; + +/** + * @Description : 角色变更操作日志 + * @Reference : + * @Author : yujija + * @CreateDate : 2022-12-09 15:21 + * @Modify: + **/ +public interface ISysLogRoleOperateService { + + /** + * 查询指定时间范围内的日志信息 + * @param startDatetime + * @param endDatetime + * @return + */ + List findLogsBetweenDatetime(String startDatetime, String endDatetime); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogUserStatusService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogUserStatusService.java new file mode 100644 index 0000000..d8e2801 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogUserStatusService.java @@ -0,0 +1,23 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.platform.bean.SysLogUserStatus; + +import java.util.List; + +/** + * @Description : 账号状态变更日志 + * @Reference : + * @Author : yujia + * @CreateDate : 2022-12-09 15:20 + * @Modify: + **/ +public interface ISysLogUserStatusService { + + /** + * 查询指定时间范围内的日志信息 + * @param startDatetime + * @param endDatetime + * @return + */ + List findLogsBetweenDatetime(String startDatetime, String endDatetime); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysRoleService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysRoleService.java index 796d2e5..0163d0c 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysRoleService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysRoleService.java @@ -73,4 +73,22 @@ public interface ISysRoleService extends ICrudService { */ @ApiOperation(value = "查询符合条件的角色") List findAllByRoleProperty(SysRole sysRole); + + /** + * 根据sysRole属性 新增用户角色变更日志 + * + * @param sysRole + * @return + */ + @ApiOperation(value = "新增用户角色变更日志") + SysLogRoleOperate insertSysLogRoleOperate(SysRole sysRole, Integer status); + + /** + * 根据sysRole属性 新增用户角色变更日志通过描述 + * + * @param sysRole + * @return + */ + @ApiOperation(value = "新增用户角色变更日志通过描述") + SysLogRoleOperate insertSysLogRoleOperate(SysRole sysRole, String statusDecription); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java index 4817cfd..9aec445 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java @@ -157,6 +157,15 @@ public interface ISysUserService { SysLogUserLogin insertSysLogUserLogin(SysLogUserLogin sysLogUserLogin); /** + * 添加 账号状态变更日志 + * + * @param sysUser + * @return + */ + @ApiOperation(value = "新增账号状态变更日志", notes = "新增账号状态变更日志") + SysLogUserStatus insertSysLogUserStatus(SysUser sysUser, Integer status); + + /** * 查询用户登录日志 * * @param startTime 开始日期 @@ -221,6 +230,22 @@ public interface ISysUserService { List listByUserOrganizeCode(); /** + * 查询所有数据 + * + * @return + */ + @ApiOperation(value = "查询所有用户和角色信息", notes = "查询所有账号信息") + List listWithRole(); + + /** + * 查询所有数据 + * + * @return + */ + @ApiOperation(value = "获取用户状态描述", notes = "获取用户状态描述") + List findSysUserStatusRdd(List userList); + + /** * 根据角色查询用户信息 * * @param roleId 角色ID @@ -467,6 +492,6 @@ public interface ISysUserService { * 查询长时间未登录账号 * @return */ - @ApiOperation(value = "获取批量账号信息", notes = "查询用户信息-批量根据登录名称查询") + @ApiOperation(value = "获取批量长时间未登录账号信息", notes = "查询用户信息-批量根据登录名称查询") List findUserNotLoginLongTime(String startDate, String endDate); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java index 7f32a2e..01de477 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java @@ -1,12 +1,6 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; -import cn.estsh.i3plus.core.api.iservice.busi.ILicenseClickService; -import cn.estsh.i3plus.core.api.iservice.busi.IPersonnelService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysDepartmentService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysOrganizeService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysPositionService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysRoleService; +import cn.estsh.i3plus.core.api.iservice.busi.*; import cn.estsh.i3plus.core.apiservice.util.SysUserPasswordUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; @@ -92,6 +86,9 @@ public class PersonnelController extends CoreBaseController { @Autowired private SysUserPasswordRepository userPasswordRDao; + @Autowired + private ISysUserService sysUserService; + /** * 添加用户信息 * @@ -188,7 +185,8 @@ public class PersonnelController extends CoreBaseController { // 关系 刷新 refreshRef(user, info, model); - + //记录账号变更日志 + sysUserService.insertSysLogUserStatus(user, CommonEnumUtil.USER_STATUS.ESTABLISH.getValue()); endMultiService(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { @@ -521,7 +519,6 @@ public class PersonnelController extends CoreBaseController { if (user != null) { personnelService.deleteSysUserInfo(new Long[]{user.getUserInfoId()}, getSessionUser().getUserName()); personnelService.deleteSysUser(new Long[]{user.getId()}, getSessionUser().getUserName()); - return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } else { return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogRoleChangeController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogRoleChangeController.java index 0b66010..2eedff3 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogRoleChangeController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogRoleChangeController.java @@ -6,21 +6,22 @@ import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.FileContentTypeTool; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.model.common.ExportDataModel; import cn.estsh.i3plus.pojo.platform.bean.SysLogRoleChange; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ImppRedis; import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.alibaba.fastjson.JSON; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.persistence.EntityManager; @@ -58,39 +59,29 @@ public class SysLogRoleChangeController extends CoreBaseController { @Resource(name = CommonConstWords.IMPP_REDIS_RES) private ImppRedis redisRes; - @GetMapping(value = "/export/user-role-change") + @PostMapping(value = "/export/user-role-change") @ApiOperation(value = "导出用户角色变更记录") - public ResultBean exportUserRoleChangedLog(HttpServletResponse response, String startDate, String endDate) { + public ResultBean exportUserRoleChangedLog(@RequestBody ExportDataModel model, HttpServletResponse response) { File file = null; try { - final String ZERO_TIME = " 00:00:00"; - // 获取当月第一天和最后一天 - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); - String firstDay, nextMonthFirstDay; - // 获取前月的第一天 - Calendar cale = Calendar.getInstance(); - cale.setTime(format.parse(startDate)); - cale.add(Calendar.MONTH, 0); - cale.set(Calendar.DAY_OF_MONTH, 1); - firstDay = format.format(cale.getTime()); - // 获取前月的最后一天 - cale = Calendar.getInstance(); - cale.setTime(format.parse(endDate)); - cale.add(Calendar.MONTH, 1); - cale.set(Calendar.DAY_OF_MONTH, 1); - nextMonthFirstDay = format.format(cale.getTime()); + ValidatorBean.checkNotNull("ColName", model.getExportCol()); + ValidatorBean.checkNotNull("startDate", model.getStartDate()); + ValidatorBean.checkNotNull("endDate", model.getEndDate()); - firstDay += ZERO_TIME; - nextMonthFirstDay += ZERO_TIME; + final String ZERO_TIME = " 00:00:00"; + final String LAST_TIME = " 23:59:59"; + StringBuilder startTime = new StringBuilder(model.getStartDate()).append(ZERO_TIME); + StringBuilder endTime = new StringBuilder(model.getEndDate()).append(LAST_TIME); - List logRoleChanges = logRoleChangeService.findLogsBetweenDatetime(firstDay, nextMonthFirstDay); + LinkedHashMap exportColMap = JSON.parseObject(model.getExportCol(), LinkedHashMap.class); + List logRoleChanges = logRoleChangeService.findLogsBetweenDatetime(startTime.toString(), endTime.toString()); ExcelTool excelTool = new ExcelTool(entityManager, redisRes); String fileName = "user-role-changed-" + System.currentTimeMillis() + ".xls"; file = new File(fileName); file.createNewFile(); excelTool.exportData(file, logRoleChanges, SysLogRoleChange.class - , (LinkedHashMap) ExcelTool.getColName(SysLogRoleChange.class)); + , exportColMap); response.setContentType("application/force-download"); // 设置强制下载不打开 response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); // 设置文件名 diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogUserLoginController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogUserLoginController.java index 34b36b9..924a4b7 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogUserLoginController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogUserLoginController.java @@ -10,21 +10,22 @@ import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.model.common.ExportDataModel; import cn.estsh.i3plus.pojo.platform.bean.SysLogUserLogin; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ImppRedis; import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.alibaba.fastjson.JSON; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.persistence.EntityManager; @@ -174,19 +175,28 @@ public class SysLogUserLoginController extends CoreBaseController { } } - @GetMapping(value = "/export/month/user-login") + @PostMapping(value = "/export/month/user-login") @ApiOperation(value = "导出用户登录日志") - public ResultBean exportMonthlyUserLoginReport(HttpServletResponse response, String startTime, String endTime) { + public ResultBean exportMonthlyUserLoginReport(@RequestBody ExportDataModel model, HttpServletResponse response) { File file = null; try { - List sysLogUserLogins = userService.queryUserMonthlyLoginLog(startTime, endTime); + ValidatorBean.checkNotNull("ColName", model.getExportCol()); + ValidatorBean.checkNotNull("startDate", model.getStartDate()); + ValidatorBean.checkNotNull("endDate", model.getEndDate()); + final String ZERO_TIME = " 00:00:00"; + final String LAST_TIME = " 23:59:59"; + StringBuilder startTime = new StringBuilder(model.getStartDate()).append(ZERO_TIME); + StringBuilder endTime = new StringBuilder(model.getEndDate()).append(LAST_TIME); + List sysLogUserLogins = userService.queryUserMonthlyLoginLog(startTime.toString(), endTime.toString()); + + LinkedHashMap exportColMap = JSON.parseObject(model.getExportCol(), LinkedHashMap.class); ExcelTool excelTool = new ExcelTool(entityManager, redisRes); String fileName = "user-login-log-" + System.currentTimeMillis() + ".xls"; file = new File(fileName); file.createNewFile(); excelTool.exportData(file, sysLogUserLogins, SysLogUserLogin.class - , (LinkedHashMap) ExcelTool.getColName(SysLogUserLogin.class)); + , exportColMap); response.setContentType("application/force-download"); // 设置强制下载不打开 response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); // 设置文件名 diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java index 6d087da..9f2e01d 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; import cn.estsh.i3plus.core.api.iservice.busi.IPersonnelService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysLogRoleOperateService; import cn.estsh.i3plus.core.api.iservice.busi.ISysRoleService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; @@ -15,8 +16,10 @@ import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.model.common.ExportDataModel; import cn.estsh.i3plus.pojo.model.platform.SysRoleModel; import cn.estsh.i3plus.pojo.platform.bean.*; +import cn.estsh.i3plus.pojo.platform.repository.SysLogRoleOperateRepository; import cn.estsh.impp.framework.base.controller.CrudBaseController; import cn.estsh.impp.framework.base.service.ICrudService; import cn.estsh.impp.framework.boot.auth.AuthUtil; @@ -25,10 +28,11 @@ import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ImppRedis; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; -import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.JSON; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanWrapper; @@ -39,6 +43,7 @@ import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.management.relation.Role; import javax.persistence.EntityManager; import javax.servlet.http.HttpServletResponse; import java.io.BufferedInputStream; @@ -70,11 +75,63 @@ public class SysRoleController extends CrudBaseController { private IPersonnelService personnelService; @Autowired + private SysLogRoleOperateRepository sysLogRoleOperateRDao; + + @Autowired + private ISysLogRoleOperateService sysLogRoleOperateService; + + @Autowired private EntityManager entityManager; @Resource(name = CommonConstWords.IMPP_REDIS_RES) private ImppRedis redisRes; + @PostMapping({"/insert"}) + @ApiOperation( + value = "新增数据", + notes = "新增数据" + ) + public ResultBean insert(SysRole sysRole) { + try { + sysRole = this.validatorInsertBean(sysRole); + + //新增用户角色操作变更日志 + sysRoleService.insertSysLogRoleOperate(sysRole, CommonEnumUtil.DAO_OPERATE_TYPE.INSERT.getValue()); + return ResultBean.success("操作成功").setResultObject(this.getCrudService().insert(sysRole)).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException var3) { + return ResultBean.fail(var3); + } catch (Exception var4) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(var4); + } + } + + @PutMapping({"/update"}) + @ApiOperation( + value = "修改数据", + notes = "根据ID 修改数据" + ) + public ResultBean update(SysRole sysRole) { + try { + SysRole BeforeSysRole = sysRoleService.get(sysRole.getId()); + sysRole = this.validatorUpdateBean(sysRole); + //新增用户角色操作变更日志 + if (!BeforeSysRole.getName().equals(sysRole.getName())) { + SysLogRoleOperate sysLogRoleOperate = new SysLogRoleOperate(); + sysLogRoleOperate.setRoleId(sysRole.getId()); + sysLogRoleOperate.setOperate(CommonEnumUtil.DAO_OPERATE_TYPE.UPDATE.getDescription()); + StringBuilder context = new StringBuilder(); + context.append("修改角色名称:" + BeforeSysRole.getName() + "->" + sysRole.getName()); + sysLogRoleOperate.setOperateContext(context.toString()); + sysLogRoleOperateRDao.save(sysLogRoleOperate); + } + return ResultBean.success("操作成功").setResultObject(this.getCrudService().update(sysRole)).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException var3) { + return ResultBean.fail(var3); + } catch (Exception var4) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(var4); + } + } + @Override public ICrudService getCrudService() { return sysRoleService; @@ -110,6 +167,24 @@ public class SysRoleController extends CrudBaseController { return role; } + @DeleteMapping({"/delete/{id}"}) + @ApiOperation(value = "删除数据",notes = "根据ID删除数据") + @Override + public ResultBean delete(@PathVariable("id") Long id) { + try { + ValidatorBean.checkNotNull(id, "id不能为空"); + SysRole sysRole = sysRoleService.get(id); + this.getCrudService().delete(new Long[]{id}); + //记录用户角色变更日志 + sysRoleService.insertSysLogRoleOperate(sysRole, CommonEnumUtil.DAO_OPERATE_TYPE.DELETE.getValue()); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException var3) { + return ResultBean.fail(var3); + } catch (Exception var4) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(var4); + } + } + @GetMapping(value = "/list-user") @ApiOperation(value = "查询角色", notes = "查询用户所拥有的角色信息") public ResultBean findSysRoleByUser() { @@ -331,6 +406,7 @@ public class SysRoleController extends CrudBaseController { role.setRoleStatus(status); ConvertBean.modelUpdate(role, getSessionUser()); sysRoleService.update(role); + sysRoleService.insertSysLogRoleOperate(role, CommonEnumUtil.USER_STATUS.valueOfDescription(status)); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { @@ -490,4 +566,58 @@ public class SysRoleController extends CrudBaseController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @PostMapping(value = "/export/role-change") + @ApiOperation(value = "导出角色操作变更日志", notes = "导出角色操作变更日志") + public ResultBean exportUserStatusChange(@RequestBody ExportDataModel model, HttpServletResponse response) { + File file = null; + + try { + ValidatorBean.checkNotNull("ColName", model.getExportCol()); + ValidatorBean.checkNotNull("startDate", model.getStartDate()); + ValidatorBean.checkNotNull("endDate", model.getEndDate()); + + final String ZERO_TIME = " 00:00:00"; + final String LAST_TIME = " 23:59:59"; + StringBuilder startTime = new StringBuilder(model.getStartDate()).append(ZERO_TIME); + StringBuilder endTime = new StringBuilder(model.getEndDate()).append(LAST_TIME); + + LinkedHashMap exportColMap = JSON.parseObject(model.getExportCol(), LinkedHashMap.class); + List list = sysLogRoleOperateService.findLogsBetweenDatetime(startTime.toString(), endTime.toString()); + ExcelTool excelTool = new ExcelTool(entityManager, redisRes); + String fileName = "role-change" + System.currentTimeMillis() + ".xls"; + file = new File(fileName); + file.createNewFile(); + excelTool.exportData(file, list, SysLogRoleOperate.class + , exportColMap); + + response.setContentType("application/force-download"); // 设置强制下载不打开 + response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); // 设置文件名 + response.addHeader("Content-type", FileContentTypeTool.getContentType(StringTool.getStringFileSuffix(fileName, true))); + + // 设置文件名 + try (BufferedInputStream bis = new BufferedInputStream(new DataInputStream(new FileInputStream(file)))) { + 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) { + LOGGER.error("用户长时间未登录日志导出异常", e); + } + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(list); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } finally { + if (file != null) { + FileUtils.deleteQuietly(file); + } + } + } } 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 c4e97b0..28fc120 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,12 +1,6 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; -import cn.estsh.i3plus.core.api.iservice.busi.ICoreMemTreeService; -import cn.estsh.i3plus.core.api.iservice.busi.IPersonnelService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysRoleService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysUserInfoService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysUserPasswordService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; +import cn.estsh.i3plus.core.api.iservice.busi.*; import cn.estsh.i3plus.core.apiservice.util.SysUserPasswordUtil; import cn.estsh.i3plus.icloud.core.sdk.ICoreSysUserCloud; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -79,6 +73,9 @@ public class SysUserController extends CoreBaseController { private ISysUserService sysUserService; @Autowired + private ISysLogUserStatusService sysLogUserStatusService; + + @Autowired private ISysUserInfoService sysUserInfoService; @Autowired @@ -451,12 +448,19 @@ public class SysUserController extends CoreBaseController { @ApiOperation(value = "导出长时间未登录账号", notes = "导出长时间未登录账号") public ResultBean exportUserNotLoginLongTime(@RequestBody ExportDataModel model, HttpServletResponse response) { File file = null; + try { ValidatorBean.checkNotNull("ColName", model.getExportCol()); ValidatorBean.checkNotNull("startDate", model.getStartDate()); ValidatorBean.checkNotNull("endDate", model.getEndDate()); + + final String ZERO_TIME = " 00:00:00"; + final String LAST_TIME = " 23:59:59"; + StringBuilder startTime = new StringBuilder(model.getStartDate()).append(ZERO_TIME); + StringBuilder endTime = new StringBuilder(model.getEndDate()).append(LAST_TIME); + LinkedHashMap exportColMap = JSON.parseObject(model.getExportCol(), LinkedHashMap.class); - List list = sysUserService.findUserNotLoginLongTime(model.getStartDate(), model.getEndDate()); + List list = sysUserService.findUserNotLoginLongTime(startTime.toString(), endTime.toString()); ExcelTool excelTool = new ExcelTool(entityManager, redisRes); String fileName = "user-not-login-long-time" + System.currentTimeMillis() + ".xls"; file = new File(fileName); @@ -494,6 +498,109 @@ public class SysUserController extends CoreBaseController { } } + @PostMapping(value = "/export/all-account-number") + @ApiOperation(value = "导出所有账号信息", notes = "导出所有账号信息") + public ResultBean exportAllAccountNumber(@RequestBody ExportDataModel model, HttpServletResponse response) { + File file = null; + + try { + ValidatorBean.checkNotNull("ColName", model.getExportCol()); + LinkedHashMap exportColMap = JSON.parseObject(model.getExportCol(), LinkedHashMap.class); + //查询所有账号 + List list = sysUserService.listWithRole(); + List sysUserList = sysUserService.findSysUserStatusRdd(list); + + ExcelTool excelTool = new ExcelTool(entityManager, redisRes); + String fileName = "user-not-login-long-time" + System.currentTimeMillis() + ".xls"; + file = new File(fileName); + file.createNewFile(); + excelTool.exportData(file, sysUserList, SysUser.class + , exportColMap); + + response.setContentType("applicatioref-menun/force-download"); // 设置强制下载不打开 + response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); // 设置文件名 + response.addHeader("Content-type", FileContentTypeTool.getContentType(StringTool.getStringFileSuffix(fileName, true))); + + // 设置文件名 + try (BufferedInputStream bis = new BufferedInputStream(new DataInputStream(new FileInputStream(file)))) { + 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) { + LOGGER.error("用户长时间未登录日志导出异常", e); + } + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(list); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } finally { + if (file != null) { + FileUtils.deleteQuietly(file); + } + } + } + + @PostMapping(value = "/export/user-status-change") + @ApiOperation(value = "导出账号状态变更日志", notes = "导出账号状态变更日志") + public ResultBean exportUserStatusChange(@RequestBody ExportDataModel model, HttpServletResponse response) { + File file = null; + + try { + ValidatorBean.checkNotNull("ColName", model.getExportCol()); + ValidatorBean.checkNotNull("startDate", model.getStartDate()); + ValidatorBean.checkNotNull("endDate", model.getEndDate()); + + final String ZERO_TIME = " 00:00:00"; + final String LAST_TIME = " 23:59:59"; + StringBuilder startTime = new StringBuilder(model.getStartDate()).append(ZERO_TIME); + StringBuilder endTime = new StringBuilder(model.getEndDate()).append(LAST_TIME); + + LinkedHashMap exportColMap = JSON.parseObject(model.getExportCol(), LinkedHashMap.class); + List list = sysLogUserStatusService.findLogsBetweenDatetime(startTime.toString(), endTime.toString()); + ExcelTool excelTool = new ExcelTool(entityManager, redisRes); + String fileName = "user-status-change" + System.currentTimeMillis() + ".xls"; + file = new File(fileName); + file.createNewFile(); + excelTool.exportData(file, list, SysLogUserStatus.class + , exportColMap); + + response.setContentType("application/force-download"); // 设置强制下载不打开 + response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); // 设置文件名 + response.addHeader("Content-type", FileContentTypeTool.getContentType(StringTool.getStringFileSuffix(fileName, true))); + + // 设置文件名 + try (BufferedInputStream bis = new BufferedInputStream(new DataInputStream(new FileInputStream(file)))) { + 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) { + LOGGER.error("用户长时间未登录日志导出异常", e); + } + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(list); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } finally { + if (file != null) { + FileUtils.deleteQuietly(file); + } + } + } + /** * 查询系统用户 * diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/PersonnelServiceService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/PersonnelServiceService.java index 50016b6..8a6be3c 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/PersonnelServiceService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/PersonnelServiceService.java @@ -17,6 +17,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.base.shirotoken.UserToken; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.model.platform.UserDetailModel; import cn.estsh.i3plus.pojo.platform.bean.*; import cn.estsh.i3plus.pojo.platform.repository.*; @@ -111,6 +112,9 @@ public class PersonnelServiceService implements IPersonnelService { @Autowired private SysLogRoleChangeRepository logRoleChangeRepository; + @Autowired + private ISysUserService userService; + @Override public SysUser saveSysUser(SysUser user) { LOGGER.info("平台账号 SysUser user:{}", user); @@ -142,12 +146,20 @@ public class PersonnelServiceService implements IPersonnelService { @ApiOperation(value = "删除账号信息") public void deleteSysUser(Long[] userIdList, String userName) { LOGGER.info("平台账号 SysUser userIdList:{}", userIdList); + List sysUsers = userService.findSysUserByIds(userIdList); // 删除账号信息 userRDao.updateValidStatusByPropertyIn("id", userIdList, CommonEnumUtil.IS_VAILD.INVAILD.getValue(), userName); // 删除账号关系 refUserDepartmentRDao.deleteByPropertyIn("userId", userIdList); refUserRoleRDao.deleteByPropertyIn("userId", userIdList); + + //记录账号状态变更日志 + sysUsers.forEach(user -> { + if (!StringUtil.isEmpty(user)) { + userService.insertSysLogUserStatus(user, CommonEnumUtil.USER_STATUS.DELETE.getValue()); + } + }); } @Override diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogRoleOperateService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogRoleOperateService.java new file mode 100644 index 0000000..bb701b1 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogRoleOperateService.java @@ -0,0 +1,38 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLogRoleOperateService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.platform.bean.SysLogRoleOperate; +import cn.estsh.i3plus.pojo.platform.repository.SysLogRoleOperateRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : + * @CreateDate : 2022-12-09 15:26 + * @Modify: + **/ +@Service +public class SysLogRoleOperateService implements ISysLogRoleOperateService { + + @Autowired + private SysLogRoleOperateRepository sysLogRoleOperateRDao; + + /** + * 根据时间区间查询用户角色操作变更日志 + * @param startDatetime + * @param endDatetime + * @return + */ + @Override + public List findLogsBetweenDatetime(String startDatetime, String endDatetime) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.timeBuilder(startDatetime, endDatetime, "createDatetime", true, true, packBean); + return sysLogRoleOperateRDao.findByHqlWhere(packBean); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogUserStatusService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogUserStatusService.java new file mode 100644 index 0000000..77f6854 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogUserStatusService.java @@ -0,0 +1,38 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLogUserStatusService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.platform.bean.SysLogUserStatus; +import cn.estsh.i3plus.pojo.platform.repository.SysLogUserStatusRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 账号状态变更日志 + * @Reference : + * @Author : yujia + * @CreateDate : 2022-12-09 15:26 + * @Modify: + **/ +@Service +public class SysLogUserStatusService implements ISysLogUserStatusService { + + @Autowired + private SysLogUserStatusRepository sysLogUserStatusRDao; + + /** + * 根据时间区间查询账号状态变更日志 + * @param startDatetime + * @param endDatetime + * @return + */ + @Override + public List findLogsBetweenDatetime(String startDatetime, String endDatetime) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.timeBuilder(startDatetime, endDatetime, "createDatetime", true, true, packBean); + return sysLogUserStatusRDao.findByHqlWhere(packBean); + } +} 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 009ed45..f43e1d0 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 @@ -15,11 +15,9 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.HqlPack; -import cn.estsh.i3plus.pojo.platform.bean.SessionUser; -import cn.estsh.i3plus.pojo.platform.bean.SysMenu; -import cn.estsh.i3plus.pojo.platform.bean.SysRefRoleMenu; -import cn.estsh.i3plus.pojo.platform.bean.SysRole; -import cn.estsh.i3plus.pojo.platform.bean.SysUser; +import cn.estsh.i3plus.pojo.base.util.StringUtil; +import cn.estsh.i3plus.pojo.platform.bean.*; +import cn.estsh.i3plus.pojo.platform.repository.SysLogRoleOperateRepository; import cn.estsh.i3plus.pojo.platform.repository.SysRefRoleMenuRepository; import cn.estsh.i3plus.pojo.platform.repository.SysRefUserRoleRepository; import cn.estsh.i3plus.pojo.platform.repository.SysRoleRepository; @@ -70,6 +68,9 @@ public class SysRoleService extends CrudService implements ISysRoleServ private SysRefRoleMenuRepository refRoleMenuRDao; @Autowired + private SysLogRoleOperateRepository sysLogRoleOperateRepository; + + @Autowired private IPersonnelService personnelService; @Autowired @@ -81,6 +82,9 @@ public class SysRoleService extends CrudService implements ISysRoleServ @Autowired private SysRefUserRoleRepository refUserRoleRDao; + @Autowired + private SysLogRoleOperateRepository sysLogRoleOperateRDao; + @Override public BaseRepository getRepository() { return roleRDao; @@ -312,6 +316,33 @@ public class SysRoleService extends CrudService implements ISysRoleServ return roleRDao.findByHqlWhere(packBean); } + @Override + public SysLogRoleOperate insertSysLogRoleOperate(SysRole sysRole, String statusDescription) { + if (StringUtil.isEmpty(sysRole)) { + return null; + } + SysLogRoleOperate sysLogRoleOperate = new SysLogRoleOperate(); + sysLogRoleOperate.setRoleId(sysRole.getId()); + sysLogRoleOperate.setOperate(statusDescription); + sysLogRoleOperate.setOperateContext(sysRole.getName()); + LOGGER.debug("平台用户角色变更操作记录 SysLogRoleOperate sysLogRoleOperate:{}", sysLogRoleOperate); + return null; + } + + @Override + public SysLogRoleOperate insertSysLogRoleOperate(SysRole sysRole, Integer status) { + if (StringUtil.isEmpty(sysRole) || status == CommonEnumUtil.DAO_OPERATE_TYPE.UPDATE.getValue()) { + return null; + } + SysLogRoleOperate sysLogRoleOperate = new SysLogRoleOperate(); + sysLogRoleOperate.setRoleId(sysRole.getId()); + sysLogRoleOperate.setOperate(CommonEnumUtil.DAO_OPERATE_TYPE.valueOfDescription(status)); + sysLogRoleOperate.setOperateContext(sysRole.getName()); + sysLogRoleOperateRDao.insert(sysLogRoleOperate); + LOGGER.debug("平台用户角色变更操作记录 SysLogRoleOperate sysLogRoleOperate:{}", sysLogRoleOperate); + return null; + } + // @Override // public void packAfterRefreshCache() { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java index 2a472c3..7ade305 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java @@ -11,6 +11,7 @@ import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.platform.bean.SysUser; import cn.estsh.i3plus.pojo.platform.bean.SysUserPassword; import cn.estsh.i3plus.pojo.platform.repository.SysUserPasswordRepository; @@ -191,12 +192,13 @@ public class SysUserSavePasswordService extends CrudService imp if(null == user.getUserLoginNum() || user.getUserLoginNum() == 0){ userService.updateUserLoginNum(user.getId(),1); } - userPasswordRDao.updateByProperties( - new String[]{"userId", "isDeleted"}, - new Object[]{user.getId(), CommonEnumUtil.IS_DEAL.NO.getValue()}, - new String[]{"isDeleted", "modifyDatetime", "modifyUser",}, - new Object[]{ - CommonEnumUtil.IS_DEAL.YES.getValue(), TimeTool.getNowTime(true), loginName}); + //暂时去掉删除逻辑(用户修改密码需查询重复次数,isDeleted=1的情况下查不到,导致这个校验不会生效) +// userPasswordRDao.updateByProperties( +// new String[]{"userId", "isDeleted"}, +// new Object[]{user.getId(), CommonEnumUtil.IS_DEAL.NO.getValue()}, +// new String[]{"isDeleted", "modifyDatetime", "modifyUser",}, +// new Object[]{ +// CommonEnumUtil.IS_DEAL.YES.getValue(), TimeTool.getNowTime(true), loginName}); SysUserPassword pwd = new SysUserPassword(); @@ -234,7 +236,7 @@ public class SysUserSavePasswordService extends CrudService imp DdlPreparedPack.getStringEqualPack(password,"userPassword",ddlPackBean); DdlPreparedPack.getNumEqualPack(userId,"userId",ddlPackBean); //当重置密码时间不为空时,查出在重置密码之后所修改的密码 - if(null != user && user.getResetPasswordTime() != null){ + if(null != user && !StringUtil.isEmpty(user.getResetPasswordTime())){ DdlPreparedPack.getStringBiggerPack(user.getResetPasswordTime(), "createDatetime",ddlPackBean); } List byHqlWhere = userPasswordRDao.findByHqlWhere(ddlPackBean); 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 3f7e943..80384ae 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; import cn.estsh.i3plus.core.api.iservice.busi.*; +import cn.estsh.i3plus.core.apiservice.dao.IUserPermissionDao; import cn.estsh.i3plus.core.apiservice.util.SysUserPasswordUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; @@ -19,15 +20,11 @@ import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken; import cn.estsh.i3plus.pojo.base.shirotoken.UserToken; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.model.platform.AndonQueryUserModel; import cn.estsh.i3plus.pojo.model.platform.AndonQueryUserResultModel; import cn.estsh.i3plus.pojo.platform.bean.*; -import cn.estsh.i3plus.pojo.platform.repository.SysLogUserLoginRepository; -import cn.estsh.i3plus.pojo.platform.repository.SysRefUserDepartmentRepository; -import cn.estsh.i3plus.pojo.platform.repository.SysRefUserPositionRepository; -import cn.estsh.i3plus.pojo.platform.repository.SysRefUserRoleRepository; -import cn.estsh.i3plus.pojo.platform.repository.SysUserInfoRepository; -import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository; +import cn.estsh.i3plus.pojo.platform.repository.*; import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.auth.filter.UserFilter; @@ -117,6 +114,12 @@ public class SysUserService implements ISysUserService { @Autowired ISysUserPasswordService userPasswordService; + @Autowired + private IUserPermissionDao userPermissionDao; + + @Autowired + private SysLogUserStatusRepository sysLogUserStatusRDao; + /** * 缓存 */ @@ -292,6 +295,8 @@ public class SysUserService implements ISysUserService { sysUser.setUserStatus(status); sysUser.setModifyUser(user.getUserName()); userRDao.update(sysUser); + //记录账号状态变更日志 + insertSysLogUserStatus(sysUser, null); } @Override @@ -301,6 +306,10 @@ public class SysUserService implements ISysUserService { user.setUserStatus(CommonEnumUtil.USER_STATUS.LOCKING.getValue()); userRDao.save(user); } + List sysUsers = new ArrayList<>(); + sysUsers.add(user); + //记录账号状态变更日志 + insertSysLogUserStatus(user, null); } @Override @@ -311,6 +320,36 @@ public class SysUserService implements ISysUserService { user.setLockType(status); userRDao.save(user); } + //记录账号状态变更日志 + insertSysLogUserStatus(user, null); + } + + private SysLogUserStatus getSysLogUserStatus(SysUser user) { + SysLogUserStatus sysLogUserStatus = new SysLogUserStatus(); + sysLogUserStatus.setUserId(user.getId()); + sysLogUserStatus.setDepartmentId(user.getDepartmentId()); + sysLogUserStatus.setDepartmentNameRdd(user.getDepartmentNameRdd()); + sysLogUserStatus.setLogLoginName(user.getUserLoginName()); + sysLogUserStatus.setUserName(user.getUserName()); + sysLogUserStatus.setUserStatus(user.getUserStatus()); + sysLogUserStatus.setUserStatusRdd(CommonEnumUtil.USER_STATUS.valueOfDescription(user.getUserStatus())); + //获取账号角色信息 + List sysRefUserRoleByUserId = findSysRefUserRoleByUserId(user.getId()); + if (!StringUtil.isEmpty(sysRefUserRoleByUserId)) { + String roleIds = ""; + String roleNames = ""; + for (SysRefUserRole sysRefUserRole : sysRefUserRoleByUserId) { + roleIds += ","+sysRefUserRole.getRoleId(); + roleNames += ","+sysRefUserRole.getRoleNameRdd(); + } + if (!StringUtil.isEmpty(roleNames) && !StringUtil.isEmpty(roleIds)) { + roleIds = roleIds.substring(1); + roleNames = roleNames.substring(1); + } + sysLogUserStatus.setRoleId(roleIds); + sysLogUserStatus.setRoleName(roleNames); + } + return sysLogUserStatus; } @Override @@ -325,6 +364,9 @@ public class SysUserService implements ISysUserService { sysUser.setUserStatus(status); sysUser.setIsValid(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); ConvertBean.modelUpdate(sysUser, user); + + //记录账号状态变更日志 + insertSysLogUserStatus(sysUser, null); } userRDao.saveAll(list); } @@ -509,6 +551,23 @@ public class SysUserService implements ISysUserService { } @Override + @ApiOperation(value = "新增账号状态变更日志", notes = "新增账号状态变更日志") + public SysLogUserStatus insertSysLogUserStatus(SysUser user,Integer status) { + //记录账号状态变更日志 + SysLogUserStatus sysLogUserStatus = getSysLogUserStatus(user); + if (!StringUtil.isEmpty(sysLogUserStatus)) { + LOGGER.debug("平台用户登录记录 SysLogUserStatus sysLogUserStatus:{}", sysLogUserStatus); + if(status != null && status != 0) { + sysLogUserStatus.setUserStatus(status); + sysLogUserStatus.setUserStatusRdd(CommonEnumUtil.USER_STATUS.valueOfDescription(status)); + } + return sysLogUserStatusRDao.insert(sysLogUserStatus); + } + LOGGER.debug("平台用户登录记录失败 SysUser user是否为空:{}", user); + return null; + } + + @Override public List queryUserMonthlyLoginLog(String startTime, String endTime) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(); DdlPreparedPack.timeBuilder(startTime, endTime, "logLoginDateTime", true, false, packBean); @@ -630,6 +689,59 @@ public class SysUserService implements ISysUserService { }); } + /** + * 查询所有数据包含角色信息逗号分割 + * + * @return + */ + @Override + public List listWithRole() { + LOGGER.debug("平台用户 SYS_USER listByUserOrganizeCode"); + List byProperty = userRDao.findByProperty( + new String[]{"isDeleted", "isValid", "organizeCode"}, + new Object[]{ + CommonEnumUtil.IS_DEAL.NO.getValue(), + CommonEnumUtil.IS_VAILD.VAILD.getValue(), + AuthUtil.getOrganize().getOrganizeCode() + }); + byProperty.stream().forEach(user -> { + if(!StringUtil.isEmpty(user)){ + List sysRoleByUser = userPermissionDao.findSysRoleByUser(user); + if (StringUtil.isEmpty(sysRoleByUser)) { + user.setRoleMessage(""); + } else { + String roleMessage = ""; + for (SysRole sysRole : sysRoleByUser) { + if(!StringUtil.isEmpty(sysRole)) { + roleMessage += ","+sysRole.getName(); + } + } + if(!StringUtil.isEmpty(roleMessage)){ + roleMessage = roleMessage.substring(1); + } + user.setRoleMessage(roleMessage); + } + } + }); + return byProperty; + } + + /** + * 获取用户对应的状态描述 + * + * @return + */ + @Override + public List findSysUserStatusRdd(List userList) { + if (!StringUtil.isEmpty(userList)) { + userList.stream().forEach(user -> { + String statusRdd = CommonEnumUtil.USER_STATUS.valueOfDescription(user.getUserStatus()); + user.setUserStatusRdd(statusRdd); + }); + } + return userList; + } + @Override @ApiOperation(value = "查询用户ID 集合", notes = "根据角色Id 查询用户ID集合") public List findSysUserIdListByRoleId(Long roleId) {