图片上传
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"))
|
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth, requiresPermissions = @RequiresPermissions("worker:ein:insert"))
|
||||||
@PostMapping("/insert")
|
@PostMapping("/insert")
|
||||||
@SysLog(title = "新增人员入场", businessType = OperaType.UPDATE, logType = 0, module = "施工人员->出入场管理->人员入场管理", details = "新增人员入场")
|
@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 {
|
try {
|
||||||
params= Sm4Utils.decrypt(params);
|
params= Sm4Utils.decrypt(params);
|
||||||
fileMsg= Sm4Utils.decrypt(fileMsg);
|
fileMsg= Sm4Utils.decrypt(fileMsg);
|
||||||
List<WebFileDto> listFile = FastJsonHelper.jsonArrStrToBeanList(fileMsg, WebFileDto.class);
|
List<WebFileDto> listFile = FastJsonHelper.jsonArrStrToBeanList(fileMsg, WebFileDto.class);
|
||||||
// 验证对应关系
|
if(files != null && files.length > 0){
|
||||||
if (listFile.size() != files.length) {
|
// 验证对应关系
|
||||||
logger.error("文件信息:{}文件数量:{}", listFile.size(), files.length);
|
if (listFile.size() != files.length) {
|
||||||
throw new IllegalArgumentException("文件信息与文件数量不匹配");
|
logger.error("文件信息:{}文件数量:{}", listFile.size(), files.length);
|
||||||
}
|
throw new IllegalArgumentException("文件信息与文件数量不匹配");
|
||||||
//先将数据对应关系处理还
|
}
|
||||||
for (int i = 0; i < listFile.size(); i++) {
|
//先将数据对应关系处理还
|
||||||
listFile.get(i).setFile(files[i]);
|
for (int i = 0; i < listFile.size(); i++) {
|
||||||
|
listFile.get(i).setFile(files[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
PmWorker o = FastJsonHelper.jsonStrToBean(params, PmWorker.class);
|
PmWorker o = FastJsonHelper.jsonStrToBean(params, PmWorker.class);
|
||||||
return service.insert(o,listFile);
|
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;
|
package com.bonus.bmw.domain.vo;
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.bonus.common.core.annotation.Excel;
|
import com.bonus.common.core.annotation.Excel;
|
||||||
import com.bonus.system.api.model.UploadFileVo;
|
import com.bonus.system.api.model.UploadFileVo;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 人员基础信息表
|
* 人员基础信息表
|
||||||
*/
|
*/
|
||||||
|
|
@ -196,4 +196,6 @@ public class PmWorker {
|
||||||
|
|
||||||
private String isShanghai;
|
private String isShanghai;
|
||||||
|
|
||||||
|
private String facePhotoBase64;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ import javax.validation.Validator;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.Period;
|
import java.time.Period;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
@ -107,16 +108,28 @@ public class PmWorkerServiceImpl implements PmWorkerService{
|
||||||
record.setCreateUser(SecurityUtils.getLoginUser().getSysUser().getUserName());
|
record.setCreateUser(SecurityUtils.getLoginUser().getSysUser().getUserName());
|
||||||
int insert = mapper.insert(record);
|
int insert = mapper.insert(record);
|
||||||
if(insert > 0){
|
if(insert > 0){
|
||||||
List<WebFileDto> collect = fileMsg.stream().filter(data -> "faceImg".equals(data.getName())).collect(Collectors.toList());
|
List<UploadFileVo> uploadFileVos = new ArrayList<>();
|
||||||
//组装数据
|
boolean isBase64 = false;
|
||||||
MultipartFile[] workerFiles = new MultipartFile[collect.size()];
|
MultipartFile facePhoto = null;
|
||||||
String[] type = new String[collect.size()];
|
//判断是否上传base64人脸,优先base64
|
||||||
for (int i = 0; i < collect.size(); i++) {
|
if(StringUtils.isNotEmpty(record.getFacePhotoBase64())){
|
||||||
workerFiles[i] = collect.get(i).getFile();
|
//人脸的数据添加
|
||||||
type[i] = collect.get(i).getType();
|
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);
|
addWorkerEinData(record,fileMsg);
|
||||||
//下发人脸到考勤机
|
//下发人脸到考勤机
|
||||||
|
|
@ -127,11 +140,15 @@ public class PmWorkerServiceImpl implements PmWorkerService{
|
||||||
sb.append("人员下发考勤机失败--");
|
sb.append("人员下发考勤机失败--");
|
||||||
}
|
}
|
||||||
//下发人脸到人脸库
|
//下发人脸到人脸库
|
||||||
if(!collect.isEmpty()){
|
if(!uploadFileVos.isEmpty()){
|
||||||
FaceRecognitionBean faceRecognitionBean = new FaceRecognitionBean();
|
FaceRecognitionBean faceRecognitionBean = new FaceRecognitionBean();
|
||||||
faceRecognitionBean.setUniqueKey(record.getIdNumber());
|
faceRecognitionBean.setUniqueKey(record.getIdNumber());
|
||||||
faceRecognitionBean.setOptMode("add");
|
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);
|
int update = mapper.updateByPrimaryKey(record);
|
||||||
//人脸照片是否修改
|
//人脸照片是否修改
|
||||||
List<WebFileDto> collect = fileMsg.stream().filter(data -> "faceImg".equals(data.getName())).collect(Collectors.toList());
|
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, "");
|
String s = fileUploadUtils.delFileListById("", record.getId().toString(), Constants.FILE_UPLOAD_WORKER, "");
|
||||||
//组装数据
|
List<UploadFileVo> uploadFileVos = new ArrayList<>();
|
||||||
MultipartFile[] workerFiles = new MultipartFile[collect.size()];
|
boolean isBase64 = false;
|
||||||
String[] type = new String[collect.size()];
|
MultipartFile facePhoto = null;
|
||||||
for (int i = 0; i < collect.size(); i++) {
|
if(record.getFacePhotoBase64() != null){
|
||||||
workerFiles[i] = collect.get(i).getFile();
|
//判断是否上传base64人脸,优先base64
|
||||||
type[i] = collect.get(i).getType();
|
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 {
|
try {
|
||||||
if(record.getEinStatus() == 1){
|
if(record.getEinStatus() == 1){
|
||||||
|
|
@ -304,10 +332,16 @@ public class PmWorkerServiceImpl implements PmWorkerService{
|
||||||
sb.append("人员下发考勤机失败--");
|
sb.append("人员下发考勤机失败--");
|
||||||
}
|
}
|
||||||
//下发人脸到人脸库
|
//下发人脸到人脸库
|
||||||
FaceRecognitionBean faceRecognitionBean = new FaceRecognitionBean();
|
if(!uploadFileVos.isEmpty()){
|
||||||
faceRecognitionBean.setUniqueKey(record.getIdNumber());
|
FaceRecognitionBean faceRecognitionBean = new FaceRecognitionBean();
|
||||||
faceRecognitionBean.setOptMode("add");
|
faceRecognitionBean.setUniqueKey(record.getIdNumber());
|
||||||
sb.append(appRecognitionService.uploadFaceRecognition(collect.get(0).getFile(), faceRecognitionBean));
|
faceRecognitionBean.setOptMode("add");
|
||||||
|
if(isBase64){
|
||||||
|
sb.append(appRecognitionService.uploadFaceRecognition(record.getFacePhotoBase64(), faceRecognitionBean));
|
||||||
|
}else{
|
||||||
|
sb.append(appRecognitionService.uploadFaceRecognition(facePhoto, faceRecognitionBean));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(record.getEinStatus() == 1){
|
if(record.getEinStatus() == 1){
|
||||||
//已经入过场了
|
//已经入过场了
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -35,10 +34,17 @@ public class FileUtilsServiceImpl {
|
||||||
private FileUtilMapper mapper;
|
private FileUtilMapper mapper;
|
||||||
|
|
||||||
public UploadFileVo upload(String sourceTable, String sourceId, String sourceType,String prefix,String bast64,String bucketName) {
|
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();
|
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.setSourceId(sourceId);
|
||||||
vo.setSourceTable(sourceTable);
|
vo.setSourceTable(sourceTable);
|
||||||
vo.setSourceType(sourceType);
|
vo.setSourceType(sourceType);
|
||||||
|
|
@ -46,24 +52,19 @@ public class FileUtilsServiceImpl {
|
||||||
prefix=floor;
|
prefix=floor;
|
||||||
}
|
}
|
||||||
String originFileName = "bast64";
|
String originFileName = "bast64";
|
||||||
String day= DateUtils.getCurrentYear();
|
String day= DateUtils.getCurrentDay();
|
||||||
String month=DateUtils.getCurrentMonth();
|
String month=DateUtils.getCurrentMonth();
|
||||||
String year=DateUtils.getCurrentYear();
|
String year=DateUtils.getCurrentYear();
|
||||||
String uuid = StringUtils.randomUUID();
|
String uuid = StringUtils.randomUUID();
|
||||||
String suffix=getBase64Type(bast64);
|
suffix=getBase64Type(bast64);
|
||||||
// String suffix=StringUtils.substringAfterLast(originFileName, ".");
|
|
||||||
// 解码Base64字符串
|
|
||||||
byte[] decodedBytes = Base64.getDecoder().decode(bast64);
|
String fileName=uuid+".jpeg";
|
||||||
// 计算文件大小
|
|
||||||
int fileSizeInBytes = decodedBytes.length;
|
|
||||||
double kilobytes = fileSizeInBytes / 1024.0;
|
|
||||||
long size=Long.parseLong(String.valueOf(kilobytes));
|
|
||||||
String fileName=uuid+"."+suffix;
|
|
||||||
String filePath=prefix+"/"+year+"/"+month+"/"+day+"/"+fileName;
|
String filePath=prefix+"/"+year+"/"+month+"/"+day+"/"+fileName;
|
||||||
vo.setFilePath(filePath);
|
vo.setFilePath(filePath);
|
||||||
vo.setOriginFileName(fileName);
|
vo.setOriginFileName(fileName);
|
||||||
vo.setFileName(fileName);
|
vo.setFileName(fileName);
|
||||||
vo.setFileSize(size);
|
|
||||||
vo.setOriginFileName(originFileName);
|
vo.setOriginFileName(originFileName);
|
||||||
if(StringHelper.isNullOrEmptyString(bucketName)){
|
if(StringHelper.isNullOrEmptyString(bucketName)){
|
||||||
bucketName=minioConfig.getBucketName();
|
bucketName=minioConfig.getBucketName();
|
||||||
|
|
@ -104,7 +105,7 @@ public class FileUtilsServiceImpl {
|
||||||
prefix=floor;
|
prefix=floor;
|
||||||
}
|
}
|
||||||
String originFileName = file.getOriginalFilename();
|
String originFileName = file.getOriginalFilename();
|
||||||
String day= DateUtils.getCurrentYear();
|
String day= DateUtils.getCurrentDay();
|
||||||
String month=DateUtils.getCurrentMonth();
|
String month=DateUtils.getCurrentMonth();
|
||||||
String year=DateUtils.getCurrentYear();
|
String year=DateUtils.getCurrentYear();
|
||||||
String uuid = StringUtils.randomUUID();
|
String uuid = StringUtils.randomUUID();
|
||||||
|
|
@ -148,7 +149,7 @@ public class FileUtilsServiceImpl {
|
||||||
if(StringHelper.isNullOrEmptyString(prefix)){
|
if(StringHelper.isNullOrEmptyString(prefix)){
|
||||||
prefix=floor;
|
prefix=floor;
|
||||||
}
|
}
|
||||||
String day= DateUtils.getCurrentYear();
|
String day= DateUtils.getCurrentDay();
|
||||||
String month=DateUtils.getCurrentMonth();
|
String month=DateUtils.getCurrentMonth();
|
||||||
String year=DateUtils.getCurrentYear();
|
String year=DateUtils.getCurrentYear();
|
||||||
if(StringHelper.isNullOrEmptyString(bucketName)){
|
if(StringHelper.isNullOrEmptyString(bucketName)){
|
||||||
|
|
@ -194,7 +195,7 @@ public class FileUtilsServiceImpl {
|
||||||
if(StringHelper.isNullOrEmptyString(prefix)){
|
if(StringHelper.isNullOrEmptyString(prefix)){
|
||||||
prefix=floor;
|
prefix=floor;
|
||||||
}
|
}
|
||||||
String day= DateUtils.getCurrentYear();
|
String day= DateUtils.getCurrentDay();
|
||||||
String month=DateUtils.getCurrentMonth();
|
String month=DateUtils.getCurrentMonth();
|
||||||
String year=DateUtils.getCurrentYear();
|
String year=DateUtils.getCurrentYear();
|
||||||
if(StringHelper.isNullOrEmptyString(bucketName)){
|
if(StringHelper.isNullOrEmptyString(bucketName)){
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue