febs-common/febs-common-core/pom.xml
@@ -100,5 +100,10 @@ <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.5.8</version> </dependency> </dependencies> </project> febs-common/febs-common-core/src/main/java/cc/mrbird/febs/common/core/utils/MyUtil.java
New file @@ -0,0 +1,114 @@ package cc.mrbird.febs.common.core.utils; import cc.mrbird.febs.common.core.entity.system.Dic; import cc.mrbird.febs.common.core.exception.FebsException; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Dict; import lombok.extern.slf4j.Slf4j; import org.springframework.web.multipart.MultipartFile; import cn.hutool.core.io.FileUtil; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @Slf4j public class MyUtil { public static void download(HttpServletRequest request, HttpServletResponse response, List<File> files , List<String> fileName){ //设置压缩包的名字 //解决不同浏览器压缩包名字含有中文时乱码的问题 String downloadName ="PersonnelInformation-" + DateUtil.format(new Date(), "yyyyMMddhhmmsss") + ".zip"; String agent = request.getHeader("USER-AGENT"); try { if (agent.contains("MSIE") || agent.contains("Trident")) { downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8"); } else { downloadName = new String(downloadName.getBytes("UTF-8"), "ISO-8859-1"); } } catch (Exception e) { e.printStackTrace(); } response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\""); //设置压缩流:直接写入response,实现边压缩边下载 ZipOutputStream zipos = null; try { zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream())); //设置压缩方法 zipos.setMethod(ZipOutputStream.DEFLATED); } catch (Exception e) { log.error("设置压缩流出现异常" + e); e.printStackTrace(); } //循环将文件写入压缩流 DataOutputStream os = null; for (int i = 0; i < files.size(); i++) { File file = files.get(i); try { //添加ZipEntry,并ZipEntry中写入文件流 //这里,加上i是防止要下载的文件有重名的导致下载失败 zipos.putNextEntry(new ZipEntry(fileName.get(i))); os = new DataOutputStream(zipos); InputStream is = new FileInputStream(file); byte[] b = new byte[100]; int length; while ((length = is.read(b)) != -1) { os.write(b, 0, length); } is.close(); zipos.closeEntry(); } catch (IOException e) { log.error("循环将文件写入压缩流出现异常" + e.getMessage()); e.printStackTrace(); } } //关闭流 try { os.flush(); os.close(); zipos.close(); } catch (IOException e) { log.error("关闭流现异常" + e.getMessage()); e.printStackTrace(); } } public static Dict filesUpload(MultipartFile file, String uploadPpath, String nextIdStr) throws FebsException, IOException { if (file.isEmpty()) { throw new FebsException("上传的文件不能为空!请重新上传"); } if (file.getSize() <= 0) { throw new FebsException("上传的文件大小需要大于0kb"); } if (file.getSize() > 50 * 1024* 1024) { throw new FebsException("上传的文件大于50M"); } if (!FileUtil.exist(uploadPpath)) { FileUtil.mkdir(uploadPpath); } //原本名字 String fileName = file.getOriginalFilename(); String suffix = ""; if (fileName.indexOf(".") > 0) { //后缀 suffix = fileName.substring(fileName.indexOf("."), fileName.length()); } //生成新的名字 String newName = nextIdStr + suffix; //上传 file.transferTo(new File(uploadPpath + newName)); return Dict.create().set("fileName",fileName).set("suffix",suffix).set("newName",newName); } } febs-server/febs-server-hr/pom.xml
@@ -58,23 +58,29 @@ <version>2.2-RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.5.8</version> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.tld</include> <include>**/*.yml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.tld</include> </includes> <filtering>false</filtering> </resource> febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/controller/EmpAccessoryController.java
@@ -12,8 +12,13 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.util.Map; /** @@ -46,9 +51,9 @@ @PostMapping @PreAuthorize("hasAuthority('empAccessory:add')") public void addEmpAccessory(@Valid EmpAccessory empAccessory) throws FebsException { public void addEmpAccessory(@NotNull(message = "{required}") Long labelid,@NotNull(message = "{required}") Long empId, MultipartFile file) throws FebsException { try { this.empAccessoryService.createEmpAccessory(empAccessory); this.empAccessoryService.createEmpAccessory(labelid,file,empId); } catch (Exception e) { String message = "新增EmpAccessory失败"; log.error(message, e); @@ -58,9 +63,9 @@ @DeleteMapping @PreAuthorize("hasAuthority('empAccessory:delete')") public void deleteEmpAccessory(EmpAccessory empAccessory) throws FebsException { public void deleteEmpAccessory(@NotBlank(message = "{required}") String accessoryids) throws FebsException { try { this.empAccessoryService.deleteEmpAccessory(empAccessory); this.empAccessoryService.deleteEmpAccessory(accessoryids); } catch (Exception e) { String message = "删除EmpAccessory失败"; log.error(message, e); @@ -79,4 +84,17 @@ throw new FebsException(message); } } @PostMapping("/download") @PreAuthorize("hasAuthority('empAccessory:download')") public void download(@NotBlank(message = "{required}") String accessoryids, HttpServletRequest request, HttpServletResponse response) throws FebsException { try { this.empAccessoryService.download(accessoryids,request,response); } catch (Exception e) { String message = "下载文件失败"; log.error(message, e); throw new FebsException(message); } } } febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/controller/FilesUploadController.java
@@ -50,7 +50,7 @@ @PostMapping @PreAuthorize("hasAuthority('filesUpload:add')") public void addFilesUpload(@NotNull(message = "{required}") Long folderid, MultipartFile file, HttpServletRequest request) throws FebsException { public void addFilesUpload(@NotNull(message = "{required}") Long folderid, MultipartFile file) throws FebsException { try { this.filesUploadService.createFilesUpload(folderid, file); } catch (Exception e) { @@ -96,4 +96,16 @@ throw new FebsException(message); } } @PostMapping("/mvFiles") @PreAuthorize("hasAuthority('filesUpload:mv')") public void mvFiles(@NotBlank(message = "{required}") String fileids,@NotNull(message = "{required}") Long folderid) throws FebsException { try { this.filesUploadService.mvFiles(fileids,folderid); } catch (Exception e) { String message = "修改FilesUpload失败"; log.error(message, e); throw new FebsException(message); } } } febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/entity/EmpAccessory.java
@@ -20,14 +20,8 @@ /** * 附件Id */ @TableId(value = "accessoryId", type = IdType.AUTO) @TableId(value = "accessoryId") private Long accessoryid; /** * 处罚数量 */ @TableField("cf") private Integer cf; /** * 记录创建时间 @@ -42,17 +36,27 @@ private String creator; /** * 辞职申请数量 */ @TableField("czsq") private Integer czsq; /** * 记录删除标志。0-未删除 1-已删除,默认0 */ @TableField("delFlag") private Integer delFlag = 0; /** * 记录最后更新人 */ @TableField("modifier") private String modifier; /** * 记录最后更新时间 */ @TableField("modifyTime") private Date modifytime; /** * 记录版本号,用来进行乐观锁控制 */ @TableField("version") private Integer version; /** * 员工Id */ @TableField("empId") febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/mapper/EmpAccessoryMapper.xml
@@ -7,7 +7,7 @@ (select dept_Name from t_dept as dept where dept.dept_Id= a.deptId) as deptName,a.jobName,',(SELECT GROUP_CONCAT(DISTINCT CONCAT( '(SELECT COUNT(1) FROM t_emp_accessory accessory inner join t_label label where label.labelId=accessory.labelId and accessory.delFlag = 0 and label.delFlag = 0) AS ''', '(SELECT COUNT(1) FROM t_emp_accessory accessory inner join t_label label where label.labelId=accessory.labelId and accessory.delFlag = 0 and label.delFlag = 0 and a.empId = accessory.empId and label.labelCode = ''',label.labelCode,''') AS ''', label.labelCode, '''' ) ) febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/properties/FebsServerHrProperties.java
@@ -16,5 +16,8 @@ /** * 文件上传地址 */ private String uploadPpath = "D:/upload/hr/"; private String uploadCommonPath = "C:/upload/hr/commonfile/"; private String uploadSinglePath = "C:/upload/hr/singlefile/"; } febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/IEmpAccessoryService.java
@@ -2,11 +2,16 @@ import cc.mrbird.febs.common.core.entity.QueryRequest; import cc.mrbird.febs.common.core.exception.FebsException; import cc.mrbird.febs.server.hr.entity.EmpAccessory; import cc.mrbird.febs.server.hr.vo.EmpAccessoryVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; import java.util.Map; @@ -36,10 +41,8 @@ /** * 新增 * * @param empAccessory empAccessory */ void createEmpAccessory(EmpAccessory empAccessory); void createEmpAccessory(Long labelid, MultipartFile file,Long empId) throws FebsException, IOException; /** * 修改 @@ -51,7 +54,8 @@ /** * 删除 * * @param empAccessory empAccessory */ void deleteEmpAccessory(EmpAccessory empAccessory); void deleteEmpAccessory(String accessoryids); void download(String accessoryids, HttpServletRequest request, HttpServletResponse response); } febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/IFilesUploadService.java
@@ -57,4 +57,6 @@ void deleteFilesUpload(String fileids); void download(String fileids, HttpServletRequest request, HttpServletResponse response); void mvFiles(String fileids,Long folderid); } febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/ILabelService.java
@@ -2,6 +2,7 @@ import cc.mrbird.febs.common.core.entity.QueryRequest; import cc.mrbird.febs.common.core.exception.FebsException; import cc.mrbird.febs.server.hr.entity.Label; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -37,7 +38,7 @@ * * @param label label */ void createLabel(Label label); void createLabel(Label label) throws FebsException; /** * 修改 febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/EmpAccessoryServiceImpl.java
@@ -1,11 +1,24 @@ package cc.mrbird.febs.server.hr.service.impl; import cc.mrbird.febs.server.hr.entity.EmpAccessory; import cc.mrbird.febs.common.core.constant.ModuleCode; import cc.mrbird.febs.common.core.exception.FebsException; import cc.mrbird.febs.common.core.utils.FebsUtil; import cc.mrbird.febs.common.core.utils.MyUtil; import cc.mrbird.febs.common.core.utils.SequenceUtil; import cc.mrbird.febs.server.hr.entity.*; import cc.mrbird.febs.server.hr.mapper.EmpAccessoryMapper; import cc.mrbird.febs.server.hr.properties.FebsServerHrProperties; import cc.mrbird.febs.server.hr.service.IEmpAccessoryService; import cc.mrbird.febs.server.hr.service.IEmpBaseInfoService; import cc.mrbird.febs.server.hr.service.ILabelService; import cc.mrbird.febs.server.hr.vo.EmpAccessoryVO; import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Propagation; @@ -15,9 +28,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cc.mrbird.febs.common.core.entity.QueryRequest; import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.util.*; /** * 附件管理 Service实现 @@ -31,6 +48,15 @@ public class EmpAccessoryServiceImpl extends ServiceImpl<EmpAccessoryMapper, EmpAccessory> implements IEmpAccessoryService { private final EmpAccessoryMapper empAccessoryMapper; private final FebsServerHrProperties properties; private final String operatorId = Optional.ofNullable(FebsUtil.getCurrentUser()) .map(u -> u.getUserId().toString()) .orElse("1"); private final IEmpBaseInfoService empBaseInfoService; /** * 参数2为数据中心ID 参数1为终端ID */ private Snowflake snowflake = IdUtil.getSnowflake(ModuleCode.HR_FIlE, 1); @Override public IPage<Map<String,Object>> findEmpAccessorys(QueryRequest request, EmpAccessoryVO vo) { @@ -99,14 +125,39 @@ @Override public List<EmpAccessory> findEmpAccessorys(EmpAccessory empAccessory) { LambdaQueryWrapper<EmpAccessory> queryWrapper = new LambdaQueryWrapper<>(); // TODO 设置查询条件 queryWrapper.eq(EmpAccessory::getDelFlag,0); if (null != empAccessory.getLabelid()) { queryWrapper.eq(EmpAccessory::getLabelid, empAccessory.getLabelid()); } if (StrUtil.isNotBlank(empAccessory.getFilesname())) { queryWrapper.like(EmpAccessory::getFilesname, empAccessory.getFilesname()); } if (null != empAccessory.getEmpid()) { queryWrapper.eq(EmpAccessory::getEmpid, empAccessory.getEmpid()); } return this.baseMapper.selectList(queryWrapper); } @Override @Transactional(rollbackFor = Exception.class) public void createEmpAccessory(EmpAccessory empAccessory) { this.save(empAccessory); public void createEmpAccessory(Long labelid, MultipartFile file,Long empId) throws FebsException, IOException { EmpBaseInfo empBaseInfo = empBaseInfoService.getById(empId); String nameAndCertificateNumb = empBaseInfo.getEmpName()+"_"+empBaseInfo.getCertificateNumb()+"/"; Dict dict = MyUtil.filesUpload(file,properties.getUploadSinglePath()+nameAndCertificateNumb,snowflake.nextIdStr()); EmpAccessory accessory = new EmpAccessory(); accessory.setCreatetime(new Date()); accessory.setCreator(operatorId); accessory.setDelFlag(0); accessory.setEmpid(empId); accessory.setFilesaddress(dict.getStr("newName")); accessory.setFilesformat(StrUtil.isBlank(dict.getStr("suffix")) ? dict.getStr("suffix") : dict.getStr("suffix").substring(1)); accessory.setAccessoryid(SequenceUtil.generateId(0L, ModuleCode.HR_FIlE)); accessory.setFilesname(dict.getStr("fileName")); accessory.setLabelid(labelid); accessory.setModifier(operatorId); accessory.setModifytime(new Date()); accessory.setVersion(0); this.save(accessory); } @Override @@ -117,9 +168,41 @@ @Override @Transactional(rollbackFor = Exception.class) public void deleteEmpAccessory(EmpAccessory empAccessory) { LambdaQueryWrapper<EmpAccessory> wapper = new LambdaQueryWrapper<>(); // TODO 设置删除条件 this.remove(wapper); public void deleteEmpAccessory(String accessoryids) { String[] arr = accessoryids.split(","); LambdaUpdateWrapper<EmpAccessory> wapper = new LambdaUpdateWrapper<>(); wapper.in(EmpAccessory::getAccessoryid,arr); EmpAccessory accessory = new EmpAccessory(); accessory.setModifier(operatorId); accessory.setModifytime(new Date()); accessory.setDelFlag(1); this.update(accessory,wapper); LambdaQueryWrapper<EmpAccessory> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(EmpAccessory::getAccessoryid,arr); List<EmpAccessory> list = this.list(queryWrapper); list.parallelStream().forEach(i-> { EmpBaseInfo empBaseInfo = empBaseInfoService.getById(i.getEmpid()); String nameAndCertificateNumb = empBaseInfo.getEmpName()+"_"+empBaseInfo.getCertificateNumb()+"/"; FileUtil.del(properties.getUploadSinglePath()+nameAndCertificateNumb+"/" + i.getFilesaddress()); }); } @Override public void download(String accessoryids, HttpServletRequest request, HttpServletResponse response) { String[] arr = accessoryids.split(","); List<File> files = new ArrayList<>(); List<String> fileName = new ArrayList<>(); Arrays.stream(arr).forEach(i -> { EmpAccessory accessory = this.getById(i); EmpBaseInfo empBaseInfo = empBaseInfoService.getById(accessory.getEmpid()); String nameAndCertificateNumb = empBaseInfo.getEmpName()+"_"+empBaseInfo.getCertificateNumb()+"/"; files.add(new File(properties.getUploadSinglePath() + nameAndCertificateNumb + accessory.getFilesaddress())); fileName.add(accessory.getFilesname()); }); MyUtil.download(request, response, files, fileName); } } febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/FilesUploadServiceImpl.java
@@ -6,15 +6,16 @@ import cc.mrbird.febs.common.core.constant.ModuleCode; import cc.mrbird.febs.common.core.exception.FebsException; import cc.mrbird.febs.common.core.utils.FebsUtil; import cc.mrbird.febs.common.core.utils.MyUtil; import cc.mrbird.febs.common.core.utils.SequenceUtil; import cc.mrbird.febs.server.hr.entity.FilesUpload; import cc.mrbird.febs.server.hr.entity.Folder; import cc.mrbird.febs.server.hr.mapper.FilesUploadMapper; import cc.mrbird.febs.server.hr.properties.FebsServerHrProperties; import cc.mrbird.febs.server.hr.service.IFilesUploadService; import cn.hutool.core.date.DateUtil; import cc.mrbird.febs.server.hr.service.IFolderService; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.file.FileWriter; import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; @@ -32,8 +33,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * 文件上传 Service实现 @@ -46,7 +45,7 @@ @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public class FilesUploadServiceImpl extends ServiceImpl<FilesUploadMapper, FilesUpload> implements IFilesUploadService { private final FilesUploadMapper filesUploadMapper; private final IFolderService iFolderService; private final FebsServerHrProperties properties; private final String operatorId = Optional.ofNullable(FebsUtil.getCurrentUser()) .map(u -> u.getUserId().toString()) @@ -80,38 +79,16 @@ @Override @Transactional(rollbackFor = Exception.class) public void createFilesUpload(Long folderid, MultipartFile file) throws FebsException, IOException { if (file.isEmpty()) { throw new FebsException("上传的文件不能为空!请重新上传"); } if (file.getSize() <= 0) { throw new FebsException("上传的文件大小需要大于0kb"); } if (file.getSize() > 50 * 1024* 1024) { throw new FebsException("上传的文件大于50M"); } if (!FileUtil.exist(properties.getUploadPpath())) { FileUtil.mkdir(properties.getUploadPpath()); } //原本名字 String fileName = file.getOriginalFilename(); String suffix = ""; if (fileName.indexOf(".") > 0) { //后缀 suffix = fileName.substring(fileName.indexOf("."), fileName.length()); } //生成新的名字 String newName = snowflake.nextIdStr() + suffix; //上传 file.transferTo(new File(properties.getUploadPpath() + newName)); Folder folder = iFolderService.getById(folderid); Dict dict = MyUtil.filesUpload(file, properties.getUploadCommonPath() + folder.getFoldername() + "/", snowflake.nextIdStr()); FilesUpload filesUpload = new FilesUpload(); filesUpload.setCreatetime(new Date()); filesUpload.setCreator(operatorId); filesUpload.setDelFlag(0); filesUpload.setFilesaddress(newName); filesUpload.setFilesformat(StrUtil.isBlank(suffix) ? suffix : suffix.substring(1)); filesUpload.setFilesaddress(dict.getStr("newName")); filesUpload.setFilesformat(StrUtil.isBlank(dict.getStr("suffix")) ? dict.getStr("suffix") : dict.getStr("suffix").substring(1)); filesUpload.setFilesid(SequenceUtil.generateId(0L, ModuleCode.HR_FIlE)); filesUpload.setFilesname(fileName); filesUpload.setFilesname(dict.getStr("fileName")); filesUpload.setFolderid(folderid); filesUpload.setModifier(operatorId); filesUpload.setModifytime(new Date()); @@ -130,13 +107,20 @@ public void deleteFilesUpload(String fileids) { String[] arr = fileids.split(","); LambdaUpdateWrapper<FilesUpload> wapper = new LambdaUpdateWrapper<>(); wapper.in(FilesUpload::getFilesid,arr).setSql("delFlag = 1"); this.update(wapper); wapper.in(FilesUpload::getFilesid, arr); FilesUpload filesUpload = new FilesUpload(); filesUpload.setModifier(operatorId); filesUpload.setModifytime(new Date()); filesUpload.setDelFlag(1); this.update(filesUpload,wapper); LambdaQueryWrapper<FilesUpload> queryWrapper = new LambdaQueryWrapper<>(); wapper.in(FilesUpload::getFilesid,arr); queryWrapper.in(FilesUpload::getFilesid, arr); List<FilesUpload> list = this.list(queryWrapper); list.parallelStream().forEach(i-> FileUtil.del(properties.getUploadPpath() + i.getFilesaddress())); list.parallelStream().forEach(i -> { Folder folder = iFolderService.getById(i.getFolderid()); FileUtil.del(properties.getUploadCommonPath() + folder.getFoldername() + "/" + i.getFilesaddress()); }); } @@ -147,71 +131,39 @@ List<String> fileName = new ArrayList<>(); Arrays.stream(arr).forEach(i -> { FilesUpload filesUpload = this.getById(i); files.add(new File(properties.getUploadPpath() + filesUpload.getFilesaddress())); Folder folder = iFolderService.getById(filesUpload.getFolderid()); files.add(new File(properties.getUploadCommonPath() + folder.getFoldername() + "/" + filesUpload.getFilesaddress())); fileName.add(filesUpload.getFilesname()); }); //设置压缩包的名字 //解决不同浏览器压缩包名字含有中文时乱码的问题 String downloadName ="PersonnelInformation-" + DateUtil.format(new Date(), "yyyyMMddhhmmsss") + ".zip"; String agent = request.getHeader("USER-AGENT"); try { if (agent.contains("MSIE") || agent.contains("Trident")) { downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8"); } else { downloadName = new String(downloadName.getBytes("UTF-8"), "ISO-8859-1"); } } catch (Exception e) { e.printStackTrace(); } response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\""); //设置压缩流:直接写入response,实现边压缩边下载 ZipOutputStream zipos = null; try { zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream())); //设置压缩方法 zipos.setMethod(ZipOutputStream.DEFLATED); } catch (Exception e) { log.error("设置压缩流出现异常" + e.getMessage()); e.printStackTrace(); } //循环将文件写入压缩流 DataOutputStream os = null; for (int i = 0; i < files.size(); i++) { File file = files.get(i); try { //添加ZipEntry,并ZipEntry中写入文件流 //这里,加上i是防止要下载的文件有重名的导致下载失败 zipos.putNextEntry(new ZipEntry(fileName.get(i))); os = new DataOutputStream(zipos); InputStream is = new FileInputStream(file); byte[] b = new byte[100]; int length; while ((length = is.read(b)) != -1) { os.write(b, 0, length); } is.close(); zipos.closeEntry(); } catch (IOException e) { log.error("循环将文件写入压缩流出现异常" + e.getMessage()); e.printStackTrace(); } } //关闭流 try { os.flush(); os.close(); zipos.close(); } catch (IOException e) { log.error("关闭流现异常" + e.getMessage()); e.printStackTrace(); } MyUtil.download(request, response, files, fileName); } @Override public void mvFiles(String fileids,Long folderid) { String[] arr = fileids.split(","); LambdaQueryWrapper<FilesUpload> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(FilesUpload::getFilesid, arr); List<FilesUpload> list = this.list(queryWrapper); list.parallelStream().forEach(i -> { Folder folder = iFolderService.getById(i.getFolderid()); Folder newfolder = iFolderService.getById(folderid); File oldfile = new File(properties.getUploadCommonPath() + folder.getFoldername() + "/" + i.getFilesaddress()); File newfile = new File(properties.getUploadCommonPath() + newfolder.getFoldername() + "/" + i.getFilesaddress()); FileUtil.move(oldfile,newfile,true); }); LambdaUpdateWrapper<FilesUpload> wapper = new LambdaUpdateWrapper<>(); wapper.in(FilesUpload::getFilesid, arr); FilesUpload filesUpload = new FilesUpload(); filesUpload.setModifier(operatorId); filesUpload.setModifytime(new Date()); filesUpload.setDelFlag(1); filesUpload.setFolderid(folderid); this.update(filesUpload,wapper); } } febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/FolderServiceImpl.java
@@ -73,7 +73,11 @@ @Transactional(rollbackFor = Exception.class) public void deleteFolder(Folder folder) { LambdaUpdateWrapper<Folder> wapper = new LambdaUpdateWrapper<>(); wapper.eq(Folder::getFolderid,folder.getFolderid()).setSql("delFlag = 1"); this.update(wapper); wapper.eq(Folder::getFolderid,folder.getFolderid()); Folder updatefolder = new Folder(); updatefolder.setModifier(operatorId); updatefolder.setModifytime(new Date()); updatefolder.setDelFlag(1); this.update(updatefolder,wapper); } } febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/LabelServiceImpl.java
@@ -1,12 +1,14 @@ package cc.mrbird.febs.server.hr.service.impl; import cc.mrbird.febs.common.core.constant.ModuleCode; import cc.mrbird.febs.common.core.exception.FebsException; import cc.mrbird.febs.common.core.utils.FebsUtil; import cc.mrbird.febs.common.core.utils.SequenceUtil; import cc.mrbird.febs.server.hr.entity.Folder; import cc.mrbird.febs.server.hr.entity.Label; import cc.mrbird.febs.server.hr.mapper.LabelMapper; import cc.mrbird.febs.server.hr.service.ILabelService; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -55,7 +57,16 @@ @Override @Transactional(rollbackFor = Exception.class) public void createLabel(Label label) { public void createLabel(Label label) throws FebsException { LambdaQueryWrapper<Label> queryWrapper = new LambdaQueryWrapper(); queryWrapper.eq(Label::getLabelname,label.getLabelname()).or().eq(Label::getLabelcode,label.getLabelcode()); Label l = this.getOne(queryWrapper); if(StrUtil.equals(label.getLabelname(),l.getLabelname())){ throw new FebsException("标签名字重复"); }else if(StrUtil.equals(label.getLabelcode(),l.getLabelcode())){ throw new FebsException("标签code重复"); } label.setLabelid(SequenceUtil.generateId(0L, ModuleCode.HR_FIlE)); label.setCreator(operatorId); label.setModifier(operatorId); @@ -75,7 +86,11 @@ @Transactional(rollbackFor = Exception.class) public void deleteLabel(Label label) { LambdaUpdateWrapper<Label> wapper = new LambdaUpdateWrapper<>(); wapper.eq(Label::getLabelid,label.getLabelid()).setSql("delFlag = 1"); wapper.eq(Label::getLabelid,label.getLabelid()); Label updateLabel = new Label(); updateLabel.setModifier(operatorId); updateLabel.setModifytime(new Date()); updateLabel.setDelFlag(1); this.update(wapper); } } febs-server/febs-server-hr/src/main/resources/bootstrap.yml
@@ -6,7 +6,7 @@ config: server-addr: ${nacos.url}:8848 group: DEFAULT_GROUP prefix: febs-server-Hr prefix: febs-server-hr file-extension: yaml discovery: server-addr: ${nacos.url}:8848 febs-server/febs-server-hr/src/main/resources/febs-server-hr.properties
@@ -1,2 +1,2 @@ # 批量插入单次最大值,比如配置为1000,那么数据库插入1000条数据commit一次 febs.server.hr.uploadPpath=C:/upload/hr/ febs.server.hr.uploadCommonPath=C:/upload/hr/commonfile/ febs.server.hr.uploadSinglePath=C:/upload/hr/singlefile/