图片上传
This commit is contained in:
parent
b000f4a841
commit
fb37f83e5b
|
|
@ -65,19 +65,21 @@ public class PmWorkerController extends BaseController {
|
|||
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth, requiresPermissions = @RequiresPermissions("worker:ein:insert"))
|
||||
@PostMapping("/insert")
|
||||
@SysLog(title = "新增人员入场", businessType = OperaType.UPDATE, logType = 0, module = "施工人员->出入场管理->人员入场管理", details = "新增人员入场")
|
||||
public AjaxResult insert(@RequestParam(value = "files") MultipartFile[] files,@RequestParam(value = "fileMsg") String fileMsg, @RequestParam(value = "params")String params) {
|
||||
public AjaxResult insert(@RequestParam(value = "files",required = false) MultipartFile[] files,@RequestParam(value = "fileMsg",required = false) String fileMsg, @RequestParam(value = "params")String params) {
|
||||
try {
|
||||
params= Sm4Utils.decrypt(params);
|
||||
fileMsg= Sm4Utils.decrypt(fileMsg);
|
||||
List<WebFileDto> listFile = FastJsonHelper.jsonArrStrToBeanList(fileMsg, WebFileDto.class);
|
||||
// 验证对应关系
|
||||
if (listFile.size() != files.length) {
|
||||
logger.error("文件信息:{}文件数量:{}", listFile.size(), files.length);
|
||||
throw new IllegalArgumentException("文件信息与文件数量不匹配");
|
||||
}
|
||||
//先将数据对应关系处理还
|
||||
for (int i = 0; i < listFile.size(); i++) {
|
||||
listFile.get(i).setFile(files[i]);
|
||||
if(files != null && files.length > 0){
|
||||
// 验证对应关系
|
||||
if (listFile.size() != files.length) {
|
||||
logger.error("文件信息:{}文件数量:{}", listFile.size(), files.length);
|
||||
throw new IllegalArgumentException("文件信息与文件数量不匹配");
|
||||
}
|
||||
//先将数据对应关系处理还
|
||||
for (int i = 0; i < listFile.size(); i++) {
|
||||
listFile.get(i).setFile(files[i]);
|
||||
}
|
||||
}
|
||||
PmWorker o = FastJsonHelper.jsonStrToBean(params, PmWorker.class);
|
||||
return service.insert(o,listFile);
|
||||
|
|
@ -210,6 +212,59 @@ public class PmWorkerController extends BaseController {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 人脸照片合格检测
|
||||
* @param base64file
|
||||
* @return
|
||||
*/
|
||||
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth, requiresPermissions = @RequiresPermissions("worker:ein:face"))
|
||||
@PostMapping("/faceDetectionBase64")
|
||||
@SysLog(title = "人脸照片合格检测", businessType = OperaType.UPDATE, logType = 0, module = "施工人员->出入场管理->人员入场管理", details = "人脸照片合格检测")
|
||||
public AjaxResult faceDetection(@RequestParam(value = "file") String base64file) {
|
||||
if (base64file == null || base64file.isEmpty()) {
|
||||
return AjaxResult.error("文件为空");
|
||||
}
|
||||
File tempFile = null;
|
||||
try {
|
||||
// 解码base64数据
|
||||
String base64Data = base64file;
|
||||
if (base64file.startsWith("data:image")) {
|
||||
// 如果是data URL格式,提取base64部分
|
||||
base64Data = base64file.substring(base64file.indexOf(",") + 1);
|
||||
}
|
||||
// 确定文件扩展名(简单处理,可根据实际需求调整)
|
||||
String suffix = ".jpg"; // 默认jpg格式
|
||||
if (base64file.contains("png")) {
|
||||
suffix = ".png";
|
||||
} else if (base64file.contains("jpeg")) {
|
||||
suffix = ".jpeg";
|
||||
}
|
||||
// 创建临时文件
|
||||
tempFile = Files.createTempFile("temp-image-", suffix).toFile();
|
||||
tempFile.deleteOnExit(); // JVM退出时自动删除
|
||||
// 将base64数据写入临时文件
|
||||
byte[] imageBytes = java.util.Base64.getDecoder().decode(base64Data);
|
||||
java.nio.file.Files.write(tempFile.toPath(), imageBytes);
|
||||
|
||||
ArcFaceHelper arcFaceHelper = new ArcFaceHelper();
|
||||
// 调用原方法,传入临时文件的路径
|
||||
String faceFeatures = arcFaceHelper.getIsFaceImage(tempFile.getAbsolutePath());
|
||||
String[] split = faceFeatures.split(",");
|
||||
if ("200".equals(split[0])){
|
||||
return AjaxResult.success(split[1]);
|
||||
}else{
|
||||
return AjaxResult.error(split[1]);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// 处理异常(如磁盘满、权限不足等)
|
||||
e.printStackTrace();
|
||||
return AjaxResult.error("人脸检测失败:"+e.getMessage());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return AjaxResult.error("人脸检测失败:"+e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 人员信息导出
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
package com.bonus.bmw.domain.vo;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.bonus.common.core.annotation.Excel;
|
||||
import com.bonus.system.api.model.UploadFileVo;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 人员基础信息表
|
||||
*/
|
||||
|
|
@ -196,4 +196,6 @@ public class PmWorker {
|
|||
|
||||
private String isShanghai;
|
||||
|
||||
private String facePhotoBase64;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ import javax.validation.Validator;
|
|||
import java.time.LocalDate;
|
||||
import java.time.Period;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
@ -107,16 +108,28 @@ public class PmWorkerServiceImpl implements PmWorkerService{
|
|||
record.setCreateUser(SecurityUtils.getLoginUser().getSysUser().getUserName());
|
||||
int insert = mapper.insert(record);
|
||||
if(insert > 0){
|
||||
List<WebFileDto> collect = fileMsg.stream().filter(data -> "faceImg".equals(data.getName())).collect(Collectors.toList());
|
||||
//组装数据
|
||||
MultipartFile[] workerFiles = new MultipartFile[collect.size()];
|
||||
String[] type = new String[collect.size()];
|
||||
for (int i = 0; i < collect.size(); i++) {
|
||||
workerFiles[i] = collect.get(i).getFile();
|
||||
type[i] = collect.get(i).getType();
|
||||
List<UploadFileVo> uploadFileVos = new ArrayList<>();
|
||||
boolean isBase64 = false;
|
||||
MultipartFile facePhoto = null;
|
||||
//判断是否上传base64人脸,优先base64
|
||||
if(StringUtils.isNotEmpty(record.getFacePhotoBase64())){
|
||||
//人脸的数据添加
|
||||
UploadFileVo uploadFileVo = fileUploadUtils.uploadBast64(record.getFacePhotoBase64(), Constants.FILE_UPLOAD_WORKER, record.getId().toString(), "人脸照片","", "");
|
||||
uploadFileVos.add(uploadFileVo);
|
||||
isBase64 = true;
|
||||
}else{
|
||||
List<WebFileDto> collect = fileMsg.stream().filter(data -> "faceImg".equals(data.getName())).collect(Collectors.toList());
|
||||
//组装数据
|
||||
MultipartFile[] workerFiles = new MultipartFile[collect.size()];
|
||||
String[] type = new String[collect.size()];
|
||||
for (int i = 0; i < collect.size(); i++) {
|
||||
workerFiles[i] = collect.get(i).getFile();
|
||||
type[i] = collect.get(i).getType();
|
||||
}
|
||||
//人脸的数据添加
|
||||
uploadFileVos = fileUploadUtils.uploadFile(workerFiles, Constants.FILE_UPLOAD_WORKER, record.getId().toString(), type,"", "");
|
||||
facePhoto = collect.get(0).getFile();
|
||||
}
|
||||
//人脸的数据添加
|
||||
List<UploadFileVo> uploadFileVos = fileUploadUtils.uploadFile(workerFiles, Constants.FILE_UPLOAD_WORKER, record.getId().toString(), type,"", "");
|
||||
//入场相关数据添加
|
||||
addWorkerEinData(record,fileMsg);
|
||||
//下发人脸到考勤机
|
||||
|
|
@ -127,11 +140,15 @@ public class PmWorkerServiceImpl implements PmWorkerService{
|
|||
sb.append("人员下发考勤机失败--");
|
||||
}
|
||||
//下发人脸到人脸库
|
||||
if(!collect.isEmpty()){
|
||||
if(!uploadFileVos.isEmpty()){
|
||||
FaceRecognitionBean faceRecognitionBean = new FaceRecognitionBean();
|
||||
faceRecognitionBean.setUniqueKey(record.getIdNumber());
|
||||
faceRecognitionBean.setOptMode("add");
|
||||
sb.append(appRecognitionService.uploadFaceRecognition(collect.get(0).getFile(), faceRecognitionBean));
|
||||
if(isBase64){
|
||||
sb.append(appRecognitionService.uploadFaceRecognition(record.getFacePhotoBase64(), faceRecognitionBean));
|
||||
}else{
|
||||
sb.append(appRecognitionService.uploadFaceRecognition(facePhoto, faceRecognitionBean));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -279,17 +296,28 @@ public class PmWorkerServiceImpl implements PmWorkerService{
|
|||
int update = mapper.updateByPrimaryKey(record);
|
||||
//人脸照片是否修改
|
||||
List<WebFileDto> collect = fileMsg.stream().filter(data -> "faceImg".equals(data.getName())).collect(Collectors.toList());
|
||||
if(!collect.isEmpty()){
|
||||
if(!collect.isEmpty() || record.getFacePhotoBase64() != null){
|
||||
String s = fileUploadUtils.delFileListById("", record.getId().toString(), Constants.FILE_UPLOAD_WORKER, "");
|
||||
//组装数据
|
||||
MultipartFile[] workerFiles = new MultipartFile[collect.size()];
|
||||
String[] type = new String[collect.size()];
|
||||
for (int i = 0; i < collect.size(); i++) {
|
||||
workerFiles[i] = collect.get(i).getFile();
|
||||
type[i] = collect.get(i).getType();
|
||||
List<UploadFileVo> uploadFileVos = new ArrayList<>();
|
||||
boolean isBase64 = false;
|
||||
MultipartFile facePhoto = null;
|
||||
if(record.getFacePhotoBase64() != null){
|
||||
//判断是否上传base64人脸,优先base64
|
||||
UploadFileVo uploadFileVo = fileUploadUtils.uploadBast64(record.getFacePhotoBase64(), Constants.FILE_UPLOAD_WORKER, record.getId().toString(), "人脸照片","", "");
|
||||
uploadFileVos.add(uploadFileVo);
|
||||
isBase64 = true;
|
||||
}else{
|
||||
//组装数据
|
||||
MultipartFile[] workerFiles = new MultipartFile[collect.size()];
|
||||
String[] type = new String[collect.size()];
|
||||
for (int i = 0; i < collect.size(); i++) {
|
||||
workerFiles[i] = collect.get(i).getFile();
|
||||
type[i] = collect.get(i).getType();
|
||||
}
|
||||
//人脸的数据添加
|
||||
uploadFileVos = fileUploadUtils.uploadFile(workerFiles, Constants.FILE_UPLOAD_WORKER, record.getId().toString(), type,"", "");
|
||||
facePhoto = collect.get(0).getFile();
|
||||
}
|
||||
//人脸的数据添加
|
||||
List<UploadFileVo> uploadFileVos = fileUploadUtils.uploadFile(workerFiles, Constants.FILE_UPLOAD_WORKER, record.getId().toString(), type,"", "");
|
||||
//下发人脸到考勤机
|
||||
try {
|
||||
if(record.getEinStatus() == 1){
|
||||
|
|
@ -304,10 +332,16 @@ public class PmWorkerServiceImpl implements PmWorkerService{
|
|||
sb.append("人员下发考勤机失败--");
|
||||
}
|
||||
//下发人脸到人脸库
|
||||
FaceRecognitionBean faceRecognitionBean = new FaceRecognitionBean();
|
||||
faceRecognitionBean.setUniqueKey(record.getIdNumber());
|
||||
faceRecognitionBean.setOptMode("add");
|
||||
sb.append(appRecognitionService.uploadFaceRecognition(collect.get(0).getFile(), faceRecognitionBean));
|
||||
if(!uploadFileVos.isEmpty()){
|
||||
FaceRecognitionBean faceRecognitionBean = new FaceRecognitionBean();
|
||||
faceRecognitionBean.setUniqueKey(record.getIdNumber());
|
||||
faceRecognitionBean.setOptMode("add");
|
||||
if(isBase64){
|
||||
sb.append(appRecognitionService.uploadFaceRecognition(record.getFacePhotoBase64(), faceRecognitionBean));
|
||||
}else{
|
||||
sb.append(appRecognitionService.uploadFaceRecognition(facePhoto, faceRecognitionBean));
|
||||
}
|
||||
}
|
||||
}
|
||||
if(record.getEinStatus() == 1){
|
||||
//已经入过场了
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
|
|
@ -35,10 +34,17 @@ public class FileUtilsServiceImpl {
|
|||
private FileUtilMapper mapper;
|
||||
|
||||
public UploadFileVo upload(String sourceTable, String sourceId, String sourceType,String prefix,String bast64,String bucketName) {
|
||||
if(bast64.contains(",")){
|
||||
bast64 = bast64.split(",")[1];
|
||||
}
|
||||
UploadFileVo vo=new UploadFileVo();
|
||||
String suffix;
|
||||
if(bast64.contains(",")){
|
||||
String de = bast64.split(",")[1];
|
||||
byte[] decodedBytes = Base64.getDecoder().decode(de);
|
||||
// 计算文件大小
|
||||
int fileSizeInBytes = decodedBytes.length;
|
||||
long size = (long) Math.ceil(fileSizeInBytes / 1024.0); // 向上取整并保持long类型
|
||||
vo.setFileSize(size);
|
||||
}
|
||||
|
||||
vo.setSourceId(sourceId);
|
||||
vo.setSourceTable(sourceTable);
|
||||
vo.setSourceType(sourceType);
|
||||
|
|
@ -46,24 +52,19 @@ public class FileUtilsServiceImpl {
|
|||
prefix=floor;
|
||||
}
|
||||
String originFileName = "bast64";
|
||||
String day= DateUtils.getCurrentYear();
|
||||
String day= DateUtils.getCurrentDay();
|
||||
String month=DateUtils.getCurrentMonth();
|
||||
String year=DateUtils.getCurrentYear();
|
||||
String uuid = StringUtils.randomUUID();
|
||||
String suffix=getBase64Type(bast64);
|
||||
// String suffix=StringUtils.substringAfterLast(originFileName, ".");
|
||||
// 解码Base64字符串
|
||||
byte[] decodedBytes = Base64.getDecoder().decode(bast64);
|
||||
// 计算文件大小
|
||||
int fileSizeInBytes = decodedBytes.length;
|
||||
double kilobytes = fileSizeInBytes / 1024.0;
|
||||
long size=Long.parseLong(String.valueOf(kilobytes));
|
||||
String fileName=uuid+"."+suffix;
|
||||
suffix=getBase64Type(bast64);
|
||||
|
||||
|
||||
String fileName=uuid+".jpeg";
|
||||
String filePath=prefix+"/"+year+"/"+month+"/"+day+"/"+fileName;
|
||||
vo.setFilePath(filePath);
|
||||
vo.setOriginFileName(fileName);
|
||||
vo.setFileName(fileName);
|
||||
vo.setFileSize(size);
|
||||
|
||||
vo.setOriginFileName(originFileName);
|
||||
if(StringHelper.isNullOrEmptyString(bucketName)){
|
||||
bucketName=minioConfig.getBucketName();
|
||||
|
|
@ -104,7 +105,7 @@ public class FileUtilsServiceImpl {
|
|||
prefix=floor;
|
||||
}
|
||||
String originFileName = file.getOriginalFilename();
|
||||
String day= DateUtils.getCurrentYear();
|
||||
String day= DateUtils.getCurrentDay();
|
||||
String month=DateUtils.getCurrentMonth();
|
||||
String year=DateUtils.getCurrentYear();
|
||||
String uuid = StringUtils.randomUUID();
|
||||
|
|
@ -148,7 +149,7 @@ public class FileUtilsServiceImpl {
|
|||
if(StringHelper.isNullOrEmptyString(prefix)){
|
||||
prefix=floor;
|
||||
}
|
||||
String day= DateUtils.getCurrentYear();
|
||||
String day= DateUtils.getCurrentDay();
|
||||
String month=DateUtils.getCurrentMonth();
|
||||
String year=DateUtils.getCurrentYear();
|
||||
if(StringHelper.isNullOrEmptyString(bucketName)){
|
||||
|
|
@ -194,7 +195,7 @@ public class FileUtilsServiceImpl {
|
|||
if(StringHelper.isNullOrEmptyString(prefix)){
|
||||
prefix=floor;
|
||||
}
|
||||
String day= DateUtils.getCurrentYear();
|
||||
String day= DateUtils.getCurrentDay();
|
||||
String month=DateUtils.getCurrentMonth();
|
||||
String year=DateUtils.getCurrentYear();
|
||||
if(StringHelper.isNullOrEmptyString(bucketName)){
|
||||
|
|
|
|||
Loading…
Reference in New Issue