Commit fea41b40 authored by 李家智's avatar 李家智
Browse files

export excel by jxsl

parent 7a72fead
......@@ -12,7 +12,16 @@
</parent>
<dependencies>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-poi</artifactId>
<version>1.0.14</version>
</dependency>
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>admin-core</artifactId>
......
package com.ibeetl.admin.console.service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.beetl.sql.core.engine.PageQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -11,11 +13,16 @@ import org.springframework.transaction.annotation.Transactional;
import com.ibeetl.admin.console.dao.UserConsoleDao;
import com.ibeetl.admin.console.exception.DeletedException;
import com.ibeetl.admin.console.exception.NoResourceException;
import com.ibeetl.admin.console.web.dto.UserExcelData;
import com.ibeetl.admin.console.web.query.UserRoleQuery;
import com.ibeetl.admin.core.conf.PasswordConfig.PasswordEncryptService;
import com.ibeetl.admin.core.entity.CoreDict;
import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.entity.CoreUserRole;
import com.ibeetl.admin.core.rbac.tree.OrgItem;
import com.ibeetl.admin.core.service.BaseService;
import com.ibeetl.admin.core.service.CoreDictService;
import com.ibeetl.admin.core.service.CorePlatformService;
import com.ibeetl.admin.core.util.PlatformException;
import com.ibeetl.admin.core.util.enums.DelFlagEnum;
import com.ibeetl.admin.core.util.enums.GeneralStateEnum;
......@@ -26,10 +33,15 @@ public class UserConsoleService extends BaseService<CoreUser> {
@Autowired
UserConsoleDao userDao;
@Autowired
PasswordEncryptService passwordEncryptService;
@Autowired
CoreDictService dictService;
@Autowired
CorePlatformService platformService;
/**
* 根据条件查询
*
......@@ -53,11 +65,11 @@ public class UserConsoleService extends BaseService<CoreUser> {
throw new PlatformException("保存用户信息失败,用户已经存在");
}
user.setCreateTime(new Date());
user.setState(GeneralStateEnum.ENABLE.getValue());
user.setState(GeneralStateEnum.ENABLE.getValue());
user.setPassword(passwordEncryptService.password(user.getPassword()));
user.setDelFlag(DelFlagEnum.NORMAL.getValue());
userDao.insert(user,true);
userDao.insert(user, true);
}
/**
......@@ -90,7 +102,7 @@ public class UserConsoleService extends BaseService<CoreUser> {
if (user == null) {
throw new NoResourceException("用户不存在!");
}
if (user.getDelFlag()==DelFlagEnum.DELETED.getValue()) {
if (user.getDelFlag() == DelFlagEnum.DELETED.getValue()) {
throw new DeletedException("用户已被删除!");
}
user = new CoreUser();
......@@ -138,27 +150,54 @@ public class UserConsoleService extends BaseService<CoreUser> {
user.setUpdateTime(new Date());
return userDao.updateTemplateById(user);
}
public List<CoreUserRole> getUserRoles(UserRoleQuery roleQuery) {
return userDao.queryUserRole(roleQuery.getUserId(), roleQuery.getOrgId(), roleQuery.getRoleId());
}
public void deleteUserRoles(List<Long> ids) {
// 考虑到这个操作较少使用,就不做批处理优化了
for (Long id : ids) {
sqlManager.deleteById(CoreUserRole.class, id);
}
}
public void saveUserRole(CoreUserRole userRole) {
long queryCount = sqlManager.templateCount(userRole);
if (queryCount > 0) {
throw new PlatformException("已存在用户角色关系");
}
sqlManager.insert(userRole);
}
public List<CoreUserRole> getUserRoles(UserRoleQuery roleQuery) {
return userDao.queryUserRole(roleQuery.getUserId(),roleQuery.getOrgId(),roleQuery.getRoleId());
}
public void deleteUserRoles(List<Long> ids) {
//考虑到这个操作较少使用,就不做批处理优化了
for (Long id : ids) {
sqlManager.deleteById(CoreUserRole.class, id);
}
}
public void saveUserRole(CoreUserRole userRole) {
long queryCount = sqlManager.templateCount(userRole);
if (queryCount > 0) {
throw new PlatformException("已存在用户角色关系");
}
sqlManager.insert(userRole);
}
public List<UserExcelData> queryExcel(PageQuery<CoreUser> query) {
PageQuery<CoreUser> ret = userDao.queryByCondtion(query);
List<CoreUser> list = ret.getList();
OrgItem orgRoot = platformService.buildOrg();
List<UserExcelData> items = new ArrayList<>();
for(CoreUser user:list) {
UserExcelData userItem = new UserExcelData();
userItem.setCode(user.getCode());
userItem.setId(user.getId());
userItem.setName(user.getName());
CoreDict dict = dictService.findCoreDict(user.getState());
userItem.setStateText(dict.getName());
if(StringUtils.isNotEmpty(user.getJobType1())){
dict = dictService.findCoreDict(user.getJobType1());
userItem.setJobType1Text(dict.getName());
}
String orgName = orgRoot.findChild(user.getOrgId()).getName();
userItem.setOrgText(orgName);
items.add(userItem);
}
return items;
}
}
package com.ibeetl.admin.console.web;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.beetl.sql.core.engine.PageQuery;
import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
......@@ -18,16 +26,19 @@ import org.springframework.web.servlet.ModelAndView;
import com.ibeetl.admin.console.service.OrgConsoleService;
import com.ibeetl.admin.console.service.RoleConsoleService;
import com.ibeetl.admin.console.service.UserConsoleService;
import com.ibeetl.admin.console.web.dto.UserExcelData;
import com.ibeetl.admin.console.web.query.UserQuery;
import com.ibeetl.admin.console.web.query.UserRoleQuery;
import com.ibeetl.admin.core.annotation.Function;
import com.ibeetl.admin.core.annotation.Query;
import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.entity.CoreUserRole;
import com.ibeetl.admin.core.file.FileItem;
import com.ibeetl.admin.core.file.FileService;
import com.ibeetl.admin.core.service.CorePlatformService;
import com.ibeetl.admin.core.util.AnnotationUtil;
import com.ibeetl.admin.core.util.ConvertUtil;
import com.ibeetl.admin.core.util.DictUtil;
import com.ibeetl.admin.core.util.PlatformException;
import com.ibeetl.admin.core.util.ValidateConfig;
import com.ibeetl.admin.core.util.enums.GeneralStateEnum;
import com.ibeetl.admin.core.web.JsonResult;
......@@ -53,7 +64,9 @@ public class UserConsoleController {
@Autowired
OrgConsoleService orgConsoleService;
@Autowired
DictUtil dictUtil;
FileService fileService;
/* 页面 */
......@@ -263,5 +276,35 @@ public class UserConsoleController {
this.platformService.clearFunctionCache();
return JsonResult.success();
}
@GetMapping(MODEL + "/excel/export.json")
@Function("user.export")
public JsonResult export(HttpServletResponse response,UserQuery condtion) {
String excelTemplate ="excelTemplates/admin/user/user_collection_template.xls";
PageQuery<CoreUser> page = condtion.getPageQuery();
//取出全部符合条件的
page.setPageSize(Integer.MAX_VALUE);
page.setPageNumber(1);
page.setTotalRow(Integer.MAX_VALUE);
List<UserExcelData> users =userConsoleService.queryExcel(page);
try(InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(excelTemplate)) {
if(is==null) {
throw new PlatformException("模板资源不存在:"+excelTemplate);
}
FileItem item = fileService.createFileTemp("user_collection.xls");
OutputStream os = item.openOutpuStream();
Context context = new Context();
context.putVar("users", users);
JxlsHelper.getInstance().processTemplate(is, os, context);
return JsonResult.success(item.getId());
} catch (IOException e) {
throw new PlatformException(e.getMessage());
}
}
}
package com.ibeetl.admin.console.web.dto;
import javax.validation.constraints.NotBlank;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ibeetl.admin.core.annotation.Dict;
/**
* excel导出需要的模板数据
* @author Administrator
*
*/
public class UserExcelData {
protected Long id;
private String code;
private String name;
private String orgText;
private String password;
private String stateText;
private String jobType1Text;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOrgText() {
return orgText;
}
public void setOrgText(String orgText) {
this.orgText = orgText;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getStateText() {
return stateText;
}
public void setStateText(String stateText) {
this.stateText = stateText;
}
public String getJobType1Text() {
return jobType1Text;
}
public void setJobType1Text(String jobType1Text) {
this.jobType1Text = jobType1Text;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
......@@ -123,7 +123,15 @@ layui.define([ 'form', 'laydate', 'table','userApi' ], function(exports) {
var url = "/admin/user/changePassword.do?id="+data.id;
Common.openDlg(url,"用户管理>更改密码");
}
},
exportUsers:function(){
Common.openConfirm("确认要导出这些用户?",function(){
userApi.exportUsers($("#searchForm"),function(){
Common.info("导出成功")
})
})
}
};
$('.ext-toolbar').on('click', function() {
var type = $(this).data('type');
......
......@@ -28,6 +28,12 @@ layui.define([], function(exports) {
callback();
})
},
exportUsers:function(form,callback){
var formPara = form.serializeJson();
Common.post("/admin/user/excel/export.json", formPara, function() {
callback();
})
}
};
......
......@@ -9,6 +9,8 @@
<layui:accessButton function="user.role" action="userRole">操作角色</layui:accessButton>
<layui:accessButton function="user.role" action="userRole">流程角色</layui:accessButton>
<layui:accessButton function="user.password" action="changePassword">修改密码</layui:accessButton>
<layui:accessButton function="user.export" action="export">导出</layui:accessButton>
<layui:accessButton function="user.import" action="import">导入</layui:accessButton>
</div>
<table id="userTable" lay-filter="userTable"></table>
......
package com.ibeetl.admin.core.conf;
import java.io.File;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import com.ibeetl.admin.core.file.FileService;
import com.ibeetl.admin.core.file.LocaFileService;
@Configuration
@ConditionalOnMissingBean(FileService.class)
public class FileSystemConfig {
@Autowired
Environment env;
@Bean
public FileService getFileService() {
String root = env.getProperty("localFile.root");
if(StringUtils.isEmpty(root)) {
String userDir = System.getProperty("user.dir");
root = userDir+File.separator+"filesystem";
}
File f = new File(root);
if(!f.exists()) {
f.mkdirs();
}
return new LocaFileService(root);
}
}
package com.ibeetl.admin.core.file;
import java.io.OutputStream;
public abstract class FileItem {
String name;
String id;
public abstract OutputStream openOutpuStream();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
package com.ibeetl.admin.core.file;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 文件持久化,默认为文件系统,可以扩展到fastfds等
* @author xiandafu
*
*/
public interface FileService {
/**
* 得到一个临时文件操作
* @param name
* @return
*/
public FileItem createFileTemp(String name);
public FileItem getFileItem(String id);
/**
*
* @param url
* @param os
*/
public void copyTemp(String url,OutputStream os);
}
package com.ibeetl.admin.core.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import com.ibeetl.admin.core.util.PlatformException;
public class LocaFileService implements FileService {
String root = null;
public LocaFileService(String root) {
this.root = root;
}
@Override
public FileItem getFileItem(String id) {
FileItem item = new LocalFileItem();
item.setId(id);
item.setName(parseName(id));
return item;
}
@Override
public FileItem createFileTemp(String name) {
FileItem item = new LocalFileItem();
String fileName = name + "." + this.suffixTemp();
item.setId(fileName);
item.setName(name);
return item;
}
@Override
public void copyTemp(String id,OutputStream os) {
File file = new File(root + File.separator + id);
FileInputStream input = null;
try {
input = new FileInputStream(file);
byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buf)) > 0) {
os.write(buf, 0, bytesRead);
}
file.delete();
}catch(Exception ex) {
throw new PlatformException("下载文件失败"+ex);
}
finally {
try {
input.close();
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private String suffixTemp() {
// TODO,改成唯一算法
return System.currentTimeMillis() + "" + new Random().nextInt(10000)+".temp";
}
private String parseName(String id) {
String[] array = id.split("\\.");
return array[0]+"."+array[1];
}
class LocalFileItem extends FileItem{
public OutputStream openOutpuStream() {
File file = new File(root + File.separator + id);
try {
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
return fos;
} catch (IOException e) {
throw new PlatformException("Open stream error "+id);
}
}
}
}
package com.ibeetl.admin.core.util;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.http.HttpServletResponse;
public class FileDownloadUtil {
public static OutputStream getDownLoad(HttpServletResponse response,String fileName) throws IOException {
response.setContentType("text/html; charset = UTF-8");
response.setHeader("Content-Disposition", "attachment; filename="+fileName);
return response.getOutputStream();
}
}
package com.ibeetl.admin.core.web;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
import com.ibeetl.admin.core.file.FileItem;
import com.ibeetl.admin.core.file.FileService;
@Controller
public class FileSystemContorller {
private final Log log = LogFactory.getLog(this.getClass());
private static final String MODEL = "/core/file";
FileService fileService;
@GetMapping(MODEL + "/get.do")
public ModelAndView index(HttpServletResponse response,String id) throws IOException {
response.setContentType("text/html; charset = UTF-8");
FileItem fileItem = fileService.getFileItem(id);
response.setHeader("Content-Disposition", "attachment; filename="+fileItem.getName());
fileService.copyTemp(id, response.getOutputStream());
return null;
}
}
......@@ -66,11 +66,7 @@
<version>2.1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>xlsunit</artifactId>
<version>1.0.8</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment