From b125f6f5cd2c81662297fbd1368c45eec2dd19c8 Mon Sep 17 00:00:00 2001 From: yjz <3131811435@qq.com> Date: Tue, 26 Mar 2024 15:43:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86):=20?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=89=8B=E5=86=99=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/SysUserController.java | 5 ++ .../system/service/ISysUserService.java | 9 +++ .../service/impl/SysUserServiceImpl.java | 73 ++++++++++++++++++- 3 files changed, 83 insertions(+), 4 deletions(-) diff --git a/laws-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java b/laws-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java index 05af5afd..502c5e47 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java @@ -336,6 +336,11 @@ public class SysUserController { return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); } + @PostMapping("/importHandStamp") + public Result importHandStamp(MultipartFile file) throws IOException { + return Result.OK(sysUserService.importHandStamp(file)); + } + @GetMapping("/queryById") public Result queryById(@RequestParam(name = "id", required = true) String id) { SysUser sysUser = sysUserService.queryById(id); diff --git a/laws-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java b/laws-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java index df128457..c2115533 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java @@ -12,7 +12,9 @@ import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.model.SysUserSysDepartModel; import org.apache.poi.ss.formula.functions.T; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.Collection; import java.util.List; import java.util.Map; @@ -353,4 +355,11 @@ public interface ISysUserService extends IService { * @return */ SysUser findUserByCalcNameWorkNo(String inspectUser); + + /** + * 导入手写章 + * + * @param file + */ + String importHandStamp(MultipartFile file) throws IOException; } diff --git a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java index 7f62f4e5..3e6abb11 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java @@ -6,20 +6,21 @@ import com.alibaba.fastjson.JSONObject; import com.aliyun.oss.ServiceException; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.api.vo.Result; import com.jero.common.constant.CacheConstant; import com.jero.common.constant.CommonConstant; +import com.jero.common.exception.JeroBootException; import com.jero.common.system.api.ISysBaseAPI; import com.jero.common.system.vo.LoginUser; import com.jero.common.system.vo.SysUserCacheInfo; -import com.jero.common.util.PasswordUtil; -import com.jero.common.util.UUIDGenerator; -import com.jero.common.util.UUIDUtils; -import com.jero.common.util.oConvertUtils; +import com.jero.common.util.*; import com.jero.modules.base.service.BaseCommonService; +import com.jero.modules.oss.entity.OSSFile; +import com.jero.modules.oss.service.IOSSFileService; import com.jero.modules.system.entity.*; import com.jero.modules.system.mapper.*; import com.jero.modules.system.model.SysUserSysDepartModel; @@ -33,10 +34,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.util.*; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; /** *

@@ -66,6 +73,10 @@ public class SysUserServiceImpl extends ServiceImpl impl private SysRoleMapper sysRoleMapper; @Resource private BaseCommonService baseCommonService; + @Autowired + private IOSSFileService ossFileService; + @Autowired + private ISysUserService sysUserService; @Override public IPage queryPage(Page page, List subDepIds, String roleId, QueryWrapper queryWrapper){ @@ -707,6 +718,60 @@ public class SysUserServiceImpl extends ServiceImpl impl return userMapper.findUserByCalcNameWorkNo(inspectUser); } + @Override + public String importHandStamp(MultipartFile file) throws IOException { + if (Objects.isNull(file)){ + throw new JeroBootException("请上传文件!"); + } + int i = 0; + try (ZipInputStream zis = new ZipInputStream(file.getInputStream())) { + ZipEntry zipEntry; + while ((zipEntry = zis.getNextEntry()) != null) { + String name = zipEntry.getName(); + if (!zipEntry.isDirectory() && isImageFile(name)) { + // 查询对应账号 + String userName = name.substring(0, name.indexOf(".")); + SysUser sysUser = sysUserService.getUserByName(userName); + if (Objects.isNull(sysUser)){ + continue; + } + // 获取文件流 + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = zis.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + byte[] fileBytes = outputStream.toByteArray(); + // 上传文件到MinIO + String url = MinioUtil.upload(new ByteArrayInputStream(fileBytes), name); + // 保存到oss + OSSFile ossFile = new OSSFile(); + ossFile.setId(String.valueOf(SnowflakeUtils.snowflake())); + ossFile.setFileName(name); + ossFile.setUrl(url); + ossFileService.save(ossFile); + // 上传手写章 + sysUserService.update(new LambdaUpdateWrapper() + .eq(SysUser::getId, sysUser.getId()) + .set(SysUser::getAvatar, ossFile.getId())); + i++; + } + } + } catch (Exception e) { + log.error(e.getMessage()); + throw new JeroBootException("导入失败!"); + } + return "操作成功,导入手写章" + i + "个"; + } + + private boolean isImageFile(String fileName) { + return fileName.toLowerCase().endsWith(".jpg") + || fileName.toLowerCase().endsWith(".jpeg") + || fileName.toLowerCase().endsWith(".png") + || fileName.toLowerCase().endsWith(".gif") + || fileName.toLowerCase().endsWith(".bmp"); + } @Override @Transactional(rollbackFor = Exception.class)