平台导出-优化

yun-zuoyi
yanyujia 2 years ago
parent 339ad1f58c
commit d3724eec04

@ -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<SysLogRoleOperate> findLogsBetweenDatetime(String startDatetime, String endDatetime);
}

@ -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<SysLogUserStatus> findLogsBetweenDatetime(String startDatetime, String endDatetime);
}

@ -73,4 +73,22 @@ public interface ISysRoleService extends ICrudService<SysRole> {
*/
@ApiOperation(value = "查询符合条件的角色")
List<SysRole> 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);
}

@ -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<SysUser> listByUserOrganizeCode();
/**
*
*
* @return
*/
@ApiOperation(value = "查询所有用户和角色信息", notes = "查询所有账号信息")
List<SysUser> listWithRole();
/**
*
*
* @return
*/
@ApiOperation(value = "获取用户状态描述", notes = "获取用户状态描述")
List<SysUser> findSysUserStatusRdd(List<SysUser> userList);
/**
*
*
* @param roleId ID
@ -467,6 +492,6 @@ public interface ISysUserService {
*
* @return
*/
@ApiOperation(value = "获取批量账号信息", notes = "查询用户信息-批量根据登录名称查询")
@ApiOperation(value = "获取批量长时间未登录账号信息", notes = "查询用户信息-批量根据登录名称查询")
List<SysUser> findUserNotLoginLongTime(String startDate, String endDate);
}

@ -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());

@ -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<SysLogRoleChange> logRoleChanges = logRoleChangeService.findLogsBetweenDatetime(firstDay, nextMonthFirstDay);
LinkedHashMap<String, String> exportColMap = JSON.parseObject(model.getExportCol(), LinkedHashMap.class);
List<SysLogRoleChange> 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<String, String>) ExcelTool.getColName(SysLogRoleChange.class));
, exportColMap);
response.setContentType("application/force-download"); // 设置强制下载不打开
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); // 设置文件名

@ -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<SysLogUserLogin> 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<SysLogUserLogin> sysLogUserLogins = userService.queryUserMonthlyLoginLog(startTime.toString(), endTime.toString());
LinkedHashMap<String, String> 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<String, String>) ExcelTool.getColName(SysLogUserLogin.class));
, exportColMap);
response.setContentType("application/force-download"); // 设置强制下载不打开
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); // 设置文件名

@ -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<SysRole> {
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<SysRole> {
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<SysRole> {
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<SysRole> {
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<String, String> exportColMap = JSON.parseObject(model.getExportCol(), LinkedHashMap.class);
List<SysLogRoleOperate> 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);
}
}
}
}

@ -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<String, String> exportColMap = JSON.parseObject(model.getExportCol(), LinkedHashMap.class);
List<SysUser> list = sysUserService.findUserNotLoginLongTime(model.getStartDate(), model.getEndDate());
List<SysUser> 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<String, String> exportColMap = JSON.parseObject(model.getExportCol(), LinkedHashMap.class);
//查询所有账号
List<SysUser> list = sysUserService.listWithRole();
List<SysUser> 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<String, String> exportColMap = JSON.parseObject(model.getExportCol(), LinkedHashMap.class);
List<SysLogUserStatus> 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);
}
}
}
/**
*
*

@ -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<SysUser> 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

@ -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<SysLogRoleOperate> findLogsBetweenDatetime(String startDatetime, String endDatetime) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.timeBuilder(startDatetime, endDatetime, "createDatetime", true, true, packBean);
return sysLogRoleOperateRDao.findByHqlWhere(packBean);
}
}

@ -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<SysLogUserStatus> findLogsBetweenDatetime(String startDatetime, String endDatetime) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.timeBuilder(startDatetime, endDatetime, "createDatetime", true, true, packBean);
return sysLogUserStatusRDao.findByHqlWhere(packBean);
}
}

@ -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<SysRole> implements ISysRoleServ
private SysRefRoleMenuRepository refRoleMenuRDao;
@Autowired
private SysLogRoleOperateRepository sysLogRoleOperateRepository;
@Autowired
private IPersonnelService personnelService;
@Autowired
@ -81,6 +82,9 @@ public class SysRoleService extends CrudService<SysRole> implements ISysRoleServ
@Autowired
private SysRefUserRoleRepository refUserRoleRDao;
@Autowired
private SysLogRoleOperateRepository sysLogRoleOperateRDao;
@Override
public BaseRepository<SysRole, Long> getRepository() {
return roleRDao;
@ -312,6 +316,33 @@ public class SysRoleService extends CrudService<SysRole> 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() {

@ -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<SysUserPassword> 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<SysUserPassword> 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<SysUserPassword> byHqlWhere = userPasswordRDao.findByHqlWhere(ddlPackBean);

@ -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<SysUser> 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<SysRefUserRole> 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<SysLogUserLogin> 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<SysUser> listWithRole() {
LOGGER.debug("平台用户 SYS_USER listByUserOrganizeCode");
List<SysUser> 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<SysRole> 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<SysUser> findSysUserStatusRdd(List<SysUser> 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<Long> findSysUserIdListByRoleId(Long roleId) {

Loading…
Cancel
Save