shikeyin
2024-01-11 65da8373531677b1c37a98f53eaa30c892f35e5a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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<S_user_core> 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<FileInfo> onAcquireFileInfoList(List<String> ids) {
        if(StringUtils.isEmptyList(ids)){
            return null;
        }
        MapSqlParameterSource sqlParameterSource = new MapSqlParameterSource();
        sqlParameterSource.addValue("ids", ids);
        List<SfAttachment> 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<FileInfo> 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;
 
}