feat(用户管理): 导入手写章

This commit is contained in:
yjz
2024-03-26 15:43:28 +08:00
parent 2982986f60
commit b125f6f5cd
3 changed files with 83 additions and 4 deletions
@@ -336,6 +336,11 @@ public class SysUserController {
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
}
@PostMapping("/importHandStamp")
public Result<T> importHandStamp(MultipartFile file) throws IOException {
return Result.OK(sysUserService.importHandStamp(file));
}
@GetMapping("/queryById")
public Result<SysUser> queryById(@RequestParam(name = "id", required = true) String id) {
SysUser sysUser = sysUserService.queryById(id);
@@ -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<SysUser> {
* @return
*/
SysUser findUserByCalcNameWorkNo(String inspectUser);
/**
* 导入手写章
*
* @param file
*/
String importHandStamp(MultipartFile file) throws IOException;
}
@@ -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;
/**
* <p>
@@ -66,6 +73,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
private SysRoleMapper sysRoleMapper;
@Resource
private BaseCommonService baseCommonService;
@Autowired
private IOSSFileService ossFileService;
@Autowired
private ISysUserService sysUserService;
@Override
public IPage<SysUser> queryPage(Page<SysUser> page, List<String> subDepIds, String roleId, QueryWrapper<SysUser> queryWrapper){
@@ -707,6 +718,60 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> 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<SysUser>()
.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)