diff --git a/server/like-admin/src/main/java/com/mdd/admin/controller/system/SystemAuthAdminController.java b/server/like-admin/src/main/java/com/mdd/admin/controller/system/SystemAuthAdminController.java index cb432978..df861457 100644 --- a/server/like-admin/src/main/java/com/mdd/admin/controller/system/SystemAuthAdminController.java +++ b/server/like-admin/src/main/java/com/mdd/admin/controller/system/SystemAuthAdminController.java @@ -1,5 +1,6 @@ package com.mdd.admin.controller.system; +import com.alibaba.fastjson2.JSONObject; import com.mdd.admin.LikeAdminThreadLocal; import com.mdd.admin.aop.Log; import com.mdd.common.aop.NotPower; @@ -15,6 +16,7 @@ import com.mdd.admin.vo.system.SystemAuthAdminListedVo; import com.mdd.admin.vo.system.SystemAuthAdminSelvesVo; import com.mdd.common.core.AjaxResult; import com.mdd.common.core.PageResult; +import com.mdd.common.util.StringUtils; import com.mdd.common.validator.annotation.IDMust; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -33,10 +35,20 @@ public class SystemAuthAdminController { @GetMapping("/lists") @ApiOperation(value="管理员列表") - public AjaxResult> list(@Validated PageValidate pageValidate, + public AjaxResult list(@Validated PageValidate pageValidate, @Validated SystemAdminSearchValidate searchValidate) { - PageResult list = iSystemAuthAdminService.list(pageValidate, searchValidate); - return AjaxResult.success(list); + if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(1)) { + JSONObject ret = iSystemAuthAdminService.getExportData(pageValidate, searchValidate); + return AjaxResult.success(ret); + } else if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(2)) { + String path = iSystemAuthAdminService.export(searchValidate); + return AjaxResult.success(new JSONObject() {{ + put("url", path); + }}); + } else { + PageResult list = iSystemAuthAdminService.list(pageValidate, searchValidate); + return AjaxResult.success(list); + } } @NotPower diff --git a/server/like-admin/src/main/java/com/mdd/admin/service/admin/IAdminService.java b/server/like-admin/src/main/java/com/mdd/admin/service/admin/IAdminService.java index 57f9f3ae..bccb9658 100644 --- a/server/like-admin/src/main/java/com/mdd/admin/service/admin/IAdminService.java +++ b/server/like-admin/src/main/java/com/mdd/admin/service/admin/IAdminService.java @@ -1,5 +1,6 @@ package com.mdd.admin.service.admin; +import com.alibaba.fastjson2.JSONObject; import com.mdd.admin.validate.commons.PageValidate; import com.mdd.admin.validate.system.SystemAdminCreateValidate; import com.mdd.admin.validate.system.SystemAdminSearchValidate; @@ -94,4 +95,15 @@ public interface IAdminService { * @return */ AdminMySelfVo mySelf(Integer id, List roleIds); + + /** + * 返回导出格式 + * @return + */ + JSONObject getExportData(PageValidate pageValidate, SystemAdminSearchValidate searchValidate); + + /** + * 导出 + */ + String export(SystemAdminSearchValidate searchValidate); } diff --git a/server/like-admin/src/main/java/com/mdd/admin/service/impl/admin/AdminServiceImpl.java b/server/like-admin/src/main/java/com/mdd/admin/service/impl/admin/AdminServiceImpl.java index 93c2890c..117e6c46 100644 --- a/server/like-admin/src/main/java/com/mdd/admin/service/impl/admin/AdminServiceImpl.java +++ b/server/like-admin/src/main/java/com/mdd/admin/service/impl/admin/AdminServiceImpl.java @@ -1,6 +1,9 @@ package com.mdd.admin.service.impl.admin; import cn.dev33.satoken.stp.StpUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.support.ExcelTypeEnum; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Assert; @@ -14,9 +17,12 @@ import com.mdd.admin.validate.system.SystemAdminCreateValidate; import com.mdd.admin.validate.system.SystemAdminSearchValidate; import com.mdd.admin.validate.system.SystemAdminUpInfoValidate; import com.mdd.admin.validate.system.SystemAdminUpdateValidate; +import com.mdd.admin.validate.user.UserSearchValidate; import com.mdd.admin.vo.auth.AdminMySelfVo; import com.mdd.admin.vo.auth.AuthMySelfVo; import com.mdd.admin.vo.system.*; +import com.mdd.admin.vo.user.UserListExportVo; +import com.mdd.admin.vo.user.UserVo; import com.mdd.common.core.PageResult; import com.mdd.common.entity.admin.Admin; import com.mdd.common.entity.admin.Dept; @@ -34,6 +40,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.io.File; import java.util.*; /** @@ -505,4 +512,136 @@ public class AdminServiceImpl implements IAdminService { return ret; } + @Override + public JSONObject getExportData(PageValidate pageValidate, SystemAdminSearchValidate searchValidate) { + Integer page = pageValidate.getPage_no(); + Integer limit = pageValidate.getPage_size(); + PageResult userVoPageResult = this.list(pageValidate, searchValidate); + JSONObject ret = ToolUtils.getExportData(userVoPageResult.getCount(), limit, searchValidate.getPage_start(), searchValidate.getPage_end(),"管理员记录列表"); + return ret; + } + + @Override + public String export(SystemAdminSearchValidate searchValidate) { + PageValidate pageValidate = new PageValidate(); + if (StringUtils.isNotNull(searchValidate.getPage_start())) { + pageValidate.setPage_no(searchValidate.getPage_start()); + } else { + pageValidate.setPage_no(1); + } + + if (StringUtils.isNotNull(searchValidate.getPage_end()) && StringUtils.isNotNull(searchValidate.getPage_size())) { + pageValidate.setPage_size(searchValidate.getPage_end() * searchValidate.getPage_size()); + } else { + pageValidate.setPage_size(20); + } + Boolean isAll = StringUtils.isNull(searchValidate.getPage_type()) || searchValidate.getPage_type().equals(0) ? true : false; + List excellist = this.getExcellist(isAll, pageValidate, searchValidate); + String fileName = StringUtils.isNull(searchValidate.getFile_name()) ? ToolUtils.makeUUID() : searchValidate.getFile_name(); + String folderPath = "/excel/export/"+ TimeUtils.timestampToDay(System.currentTimeMillis() / 1000) +"/" ; + String path = folderPath + fileName +".xlsx"; + String filePath = YmlUtils.get("like.upload-directory") + path; + File folder = new File(YmlUtils.get("like.upload-directory") + folderPath); + if (!folder.exists()) { + if (!folder.mkdirs()) { + throw new OperateException("创建文件夹失败"); + } + } + EasyExcel.write(filePath) + .head(SystemAuthAdminListedExportVo.class) + .excelType(ExcelTypeEnum.XLSX) + .sheet("管理员记录") + .doWrite(excellist); + return UrlUtils.toAbsoluteUrl(path); + } + + private List getExcellist(boolean isAll, PageValidate pageValidate, SystemAdminSearchValidate searchValidate) { + Integer page = pageValidate.getPage_no(); + Integer limit = pageValidate.getPage_size(); + + MPJQueryWrapper mpjQueryWrapper = new MPJQueryWrapper<>(); + mpjQueryWrapper.select("distinct t.id,t.account,t.name,t.avatar," + + "t.multipoint_login," + + "t.disable,t.login_ip,t.login_time,t.create_time,t.update_time") + .leftJoin("la_admin_role lar ON lar.admin_id = t.id") + .isNull("t.delete_time") + .orderByDesc(Arrays.asList("t.id")); + + + systemAuthAdminMapper.setSearch(mpjQueryWrapper, searchValidate, new String[]{ + "like:account:str", + "like:name:str" + }); + + if (StringUtils.isNotNull(searchValidate.getRole_id())) { + mpjQueryWrapper.in("lar.role_id", searchValidate.getRole_id()); + } + + List retList = new ArrayList<>(); + if (isAll) { + retList = systemAuthAdminMapper.selectJoinList(SystemAuthAdminListedExportVo.class, mpjQueryWrapper); + } else { + IPage iPage = systemAuthAdminMapper.selectJoinPage( + new Page<>(page, limit), + SystemAuthAdminListedExportVo.class, + mpjQueryWrapper); + retList = iPage.getRecords(); + } + + for (SystemAuthAdminListedExportVo vo : retList) { + if (vo.getId().equals(1)) { + vo.setRoleName("系统管理员"); + vo.setDeptName("-"); + } else { + + List roles = systemAuthRoleMapper.getByAdminId(vo.getId()); + List roleIds = new ArrayList<>(); + List roleNames = new ArrayList<>(); + if (!roles.isEmpty()) { + roles.forEach(item-> { + roleIds.add(item.getId()); + roleNames.add(item.getName()); + + }); + vo.setRoleId(roleIds); + vo.setRoleName(StringUtils.join(roleNames, ",")); + } + + + List jobs = jobsMapper.getByAdminId(vo.getId()); + List jobsId = new ArrayList<>(); + List jobsNames = new ArrayList<>(); + if (!jobs.isEmpty()) { + jobs.forEach(item-> { + jobsId.add(item.getId()); + jobsNames.add(item.getName()); + }); + vo.setJobsId(jobsId); + vo.setJobsName(StringUtils.join(jobsNames, ",")); + } + + + List depts = deptMapper.getByAdminId(vo.getId()); + List deptIds = new ArrayList<>(); + List deptNames = new ArrayList<>(); + if (!depts.isEmpty()) { + depts.forEach(item-> { + deptIds.add(item.getId()); + deptNames.add(item.getName()); + }); + vo.setDeptId(deptIds); + vo.setDeptName(StringUtils.join(deptNames, ",")); + + } + } + + + vo.setDisableDesc(vo.getDisable() != null && vo.getDisable().equals(0) ? "启用" : "禁用"); + vo.setAvatar(UrlUtils.toAbsoluteUrl(vo.getAvatar())); + vo.setCreateTime(TimeUtils.timestampToDate(vo.getCreateTime())); + vo.setUpdateTime(TimeUtils.timestampToDate(vo.getUpdateTime())); + vo.setLoginTime(TimeUtils.timestampToDate(vo.getLoginTime())); + } + return retList; + } } diff --git a/server/like-admin/src/main/java/com/mdd/admin/validate/system/SystemAdminSearchValidate.java b/server/like-admin/src/main/java/com/mdd/admin/validate/system/SystemAdminSearchValidate.java index 62103461..ab822c76 100644 --- a/server/like-admin/src/main/java/com/mdd/admin/validate/system/SystemAdminSearchValidate.java +++ b/server/like-admin/src/main/java/com/mdd/admin/validate/system/SystemAdminSearchValidate.java @@ -21,4 +21,21 @@ public class SystemAdminSearchValidate implements Serializable { @ApiModelProperty(value = "角色ID") private Integer role_id; + @ApiModelProperty(value = "导出信息") + private Integer export; + @ApiModelProperty(value = "file_name") + private String file_name; + + @ApiModelProperty(value = "page_start") + private Integer page_start; + + @ApiModelProperty(value = "page_end") + private Integer page_end; + + @ApiModelProperty(value = "page_size") + private Integer page_size; + + @ApiModelProperty(value = "page_type") + private Integer page_type; + } diff --git a/server/like-admin/src/main/java/com/mdd/admin/vo/system/JobsExportVo.java b/server/like-admin/src/main/java/com/mdd/admin/vo/system/JobsExportVo.java index 40757ae4..90ba932f 100644 --- a/server/like-admin/src/main/java/com/mdd/admin/vo/system/JobsExportVo.java +++ b/server/like-admin/src/main/java/com/mdd/admin/vo/system/JobsExportVo.java @@ -9,7 +9,7 @@ import lombok.Data; import java.io.Serializable; @Data -@ApiModel("系统岗位Vo") +@ApiModel("系统岗位导出Vo") public class JobsExportVo implements Serializable { private static final long serialVersionUID = 1L; diff --git a/server/like-admin/src/main/java/com/mdd/admin/vo/system/SystemAuthAdminListedExportVo.java b/server/like-admin/src/main/java/com/mdd/admin/vo/system/SystemAuthAdminListedExportVo.java new file mode 100644 index 00000000..5d8925c6 --- /dev/null +++ b/server/like-admin/src/main/java/com/mdd/admin/vo/system/SystemAuthAdminListedExportVo.java @@ -0,0 +1,108 @@ +package com.mdd.admin.vo.system; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +@ApiModel("管理员导出列表Vo") +public class SystemAuthAdminListedExportVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + @ExcelProperty("主键") + @ColumnWidth(50) + private Integer id; + + @ApiModelProperty(value = "账号") + @ExcelProperty("账号") + @ColumnWidth(50) + private String account; + + @ApiModelProperty(value = "昵称") + @ExcelProperty("昵称") + @ColumnWidth(50) + private String name; + + @ApiModelProperty(value = "头像") + @ExcelProperty("头像") + @ColumnWidth(50) + private String avatar; + + @ApiModelProperty(value = "部门") + @ExcelProperty("部门") + @ColumnWidth(50) + private String deptName; + + @ApiModelProperty(value = "部门") + @ExcelProperty("部门") + @ColumnWidth(50) + private String roleName; + + @ApiModelProperty(value = "部门") + @ExcelProperty("部门") + @ColumnWidth(50) + private String jobsName; + + @ApiModelProperty(value = "角色ID") + @ExcelProperty("角色ID") + @ColumnWidth(50) + private List roleId; + + @ApiModelProperty(value = "部门ID") + @ExcelProperty("部门ID") + @ColumnWidth(50) + private List deptId; + + @ApiModelProperty(value = "岗位ID") + @ExcelProperty("ID") + @ColumnWidth(50) + private List jobsId; + + @ApiModelProperty(value = "多端登录: [0=否, 1=是]") + @ExcelProperty("多端登录: [0=否, 1=是]") + @ColumnWidth(50) + private Integer multipointLogin; + + @ApiModelProperty(value = "是否禁用: [0=否, 1=是]") + @ExcelProperty("是否禁用: [0=否, 1=是]") + @ColumnWidth(50) + private Integer disable; + + @ApiModelProperty(value = "是否禁用") + @ExcelProperty("是否禁用") + @ColumnWidth(50) + private String disableDesc; + + @ApiModelProperty(value = "root") + @ExcelProperty("root") + @ColumnWidth(50) + private Integer root; + + @ApiModelProperty(value = "最后登录IP") + @ExcelProperty("最后登录IP") + @ColumnWidth(50) + private String loginIp; + + @ApiModelProperty(value = "最后登录时间") + @ExcelProperty("最后登录时间") + @ColumnWidth(50) + private String loginTime; + + @ApiModelProperty(value = "创建时间") + @ExcelProperty("创建时间") + @ColumnWidth(50) + private String createTime; + + @ApiModelProperty(value = "更新时间") + @ExcelProperty("更新时间") + @ColumnWidth(50) + private String updateTime; + +}