package com.iplatform.file.support; import com.iplatform.base.util.UserUtils; import com.iplatform.file.FileStoreCallback; import com.iplatform.file.service.FileServiceImpl; import com.iplatform.file.util.ImageUtils; import com.iplatform.model.po.S_user_core; import com.iplatform.model.po.SfAttachment; import com.iplatform.model.po.SfAttachment_mapper; import com.walker.file.DefaultFileInfo; import com.walker.file.FileInfo; import com.walker.file.FileStoreType; import com.walker.infrastructure.utils.DateUtils; import com.walker.infrastructure.utils.StringUtils; import com.walker.web.UserPrincipal; import com.walker.web.WebRuntimeException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import java.util.ArrayList; import java.util.List; public class AttachmentJdbcCallback implements FileStoreCallback { protected final transient Logger logger = LoggerFactory.getLogger(getClass()); @Override public void onCallback(FileInfo fileInfo, FileStoreType fileStoreType) { if(logger.isDebugEnabled()){ logger.debug("保存文件:{}", fileInfo); } String fileExt = fileInfo.getFileExt(); SfAttachment attachment = new SfAttachment(); attachment.setAttId(Long.parseLong(fileInfo.getId())); attachment.setCreateTime(DateUtils.getDateTimeNumber()); attachment.setUpdateTime(attachment.getCreateTime()); // 2023-08-01 try{ UserPrincipal userPrincipal = UserUtils.getCurrentUserPrincipal(); if(userPrincipal != null){ attachment.setUserName(userPrincipal.getUserName()); } else { attachment.setUserName("前端用户"); } } catch (WebRuntimeException ex){ logger.debug("未找到当前用户,文件记录人为空"); attachment.setUserName("未知用户"); } attachment.setName(fileInfo.getFileName()); attachment.setSattDir(fileInfo.getUrl()); attachment.setAttType(fileExt); // 这里目前是后缀名,后续可参考电商系统存放:mimeType attachment.setAttSize(fileInfo.getFileSize()); attachment.setFileStoreType(fileStoreType.getIndex()); if(StringUtils.isNotEmpty(fileInfo.getGroupId())){ attachment.setGroupId(fileInfo.getGroupId()); } if(ImageUtils.isImage(fileExt) || ImageUtils.isVideo(fileExt)){ // 暂时存放为1,表示媒体格式 attachment.setImageType(1); } else { // 非媒体格式 attachment.setImageType(0); } // pid 和 owner 需要传过来 attachment.setPid(fileInfo.getBusinessType()); String owner = fileInfo.getOwner(); if(StringUtils.isEmpty(owner)){ attachment.setOwner(-1); } else { attachment.setOwner(Integer.parseInt(owner)); } this.fileService.insert(attachment); } @Override public FileInfo onAcquireFileInfo(String id) { SfAttachment attachment = this.fileService.get(new SfAttachment(Long.parseLong(id))); if(attachment == null){ return null; } return this.toFileInfo(attachment); } @Override public List onAcquireFileInfoList(List ids) { if(StringUtils.isEmptyList(ids)){ return null; } MapSqlParameterSource sqlParameterSource = new MapSqlParameterSource(); sqlParameterSource.addValue("ids", ids); List list = this.fileService.sqlListObjectWhereIn("select * from sf_attachment where att_id in(:ids)" , SfAttachment_mapper.ROW_MAPPER, sqlParameterSource); if(StringUtils.isEmptyList(list)){ return null; } List fileInfoList = new ArrayList<>(list.size()); for(SfAttachment s_file : list){ fileInfoList.add(this.toFileInfo(s_file)); } return fileInfoList; } private FileInfo toFileInfo(SfAttachment attachment){ if(attachment == null){ return null; } DefaultFileInfo fileInfo = new DefaultFileInfo(); fileInfo.setId(String.valueOf(attachment.getAttId())); fileInfo.setFileSize(attachment.getAttSize()); fileInfo.setUrl(attachment.getSattDir()); fileInfo.setFileExt(attachment.getAttType()); fileInfo.setFileName(attachment.getName()); fileInfo.setFileStoreType(FileStoreType.getType(attachment.getFileStoreType())); fileInfo.setGroupId(attachment.getGroupId()); fileInfo.setBusinessType(attachment.getPid()); fileInfo.setOwner(String.valueOf(attachment.getOwner())); return fileInfo; } public void setFileService(FileServiceImpl fileService) { this.fileService = fileService; } private FileServiceImpl fileService; }