ludc
2024-12-04 e405b861b9521f5ea38c5402203a5b05988f9de2
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
package com.vci.web.controller;
 
import com.vci.pagemodel.VciFileObjectVO;
import com.vci.starter.web.autoconfigure.AppAutoConfigure;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.BaseQueryObject;
import com.vci.starter.web.pagemodel.BaseResult;
import com.vci.starter.web.pagemodel.DataGrid;
import com.vci.starter.web.util.Md5;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.web.config.WebFilePreviewAutoConfig;
import com.vci.pagemodel.VciFilePreviewConfigVO;
import com.vci.web.service.VciFileObjectServiceI;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 
import java.util.Collection;
import java.util.List;
 
/**
 * 文件查询服务
 * @author weidy
 * @date 2020/8/11
 */
@RestController
@RequestMapping("/vciFileQueryController")
public class VciFileQueryController {
 
    /**
     * 文档的类型 服务
     */
    @Autowired
    private VciFileObjectServiceI fileObjectService;
 
    /**
     * 预览的配置
     */
    @Autowired(required = false)
    private WebFilePreviewAutoConfig filePreviewAutoConfig;
 
    /**
     * 应用的配置
     */
    @Autowired
    private AppAutoConfigure app;
 
    /**
     * 使用业务类型查询文件的信息,提供给页面调用
     * @param baseQueryObject 基本查询对象,分页和排序
     * @param ownbizOid 业务类型数据主键
     * @param ownbizBtm 业务类型名称
     * @return 文件的显示对象
     */
    @GetMapping("/gridFiles")
    public DataGrid<VciFileObjectVO> gridFilesByOwnbiz(BaseQueryObject baseQueryObject, String ownbizOid, String ownbizBtm,String fileDocClassify){
        if(baseQueryObject == null){
            baseQueryObject = new BaseQueryObject();
        }
        return fileObjectService.gridFilesByOwnbiz(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper(),ownbizOid,ownbizBtm,fileDocClassify);
    }
 
    /**
     * 使用业务数据获取文件
     * @param ownbizOid 业务类型数据
     * @param ownbizBtm 业务类型的名称
     * @return 文件的显示对象
     */
    @GetMapping("/listFilesByOwnbiz")
    public BaseResult<VciFileObjectVO> listFilesByOwnbiz(String ownbizOid, String ownbizBtm){
        return listFilesByOwnbizAndClassify(ownbizOid,ownbizBtm,"");
    }
 
    /**
     * 使用业务数据 和文档类型 获取文件
     * @param ownbizOid 业务类型数据
     * @param ownbizBtm 业务类型的名称
     * @param docClassifyId 文档类型编号
     * @return 文件的显示对象,请从data属性中获取
     */
    @GetMapping("/listFilesByOwnbizAndClassify")
    public BaseResult<VciFileObjectVO> listFilesByOwnbizAndClassify(String ownbizOid, String ownbizBtm, String docClassifyId){
        List<VciFileObjectVO> fileObjectVOS = fileObjectService.listFilesByOwnbiz(ownbizOid,ownbizBtm,docClassifyId);
        BaseResult baseResult = BaseResult.success();
        baseResult.setData(fileObjectVOS);
        return baseResult;
    }
 
    /**
     * 批量使用业务数据 和文档类型 获取文件
     * @param ownbizOids 业务类型数据的主键,以逗号分隔,考虑性能的影响,建议不要超过10000个
     * @param ownbizBtm 业务类型的名称
     * @param docClassifyId 文档类型编号
     * @return 文件的显示对象,请从data属性中获取
     */
    @GetMapping("/batchListFilesByOwnbizAndClassify")
    public BaseResult<VciFileObjectVO> batchListFilesByOwnbizAndClassify(String ownbizOids, String ownbizBtm, String docClassifyId){
        List<VciFileObjectVO> fileObjectVOS = fileObjectService.batchListFilesByOwnbizs(VciBaseUtil.str2List(ownbizOids),ownbizBtm,docClassifyId);
        BaseResult baseResult = BaseResult.success();
        baseResult.setData(fileObjectVOS);
        return baseResult;
    }
 
    /**
     * 使用文件主键获取对象
     * @param oid 主键
     * @return 文件显示对象
     */
    @GetMapping("/getFileObjectByOid")
    public VciFileObjectVO getFileObjectByOid(String oid){
        return fileObjectService.getObjectByOid(oid);
    }
 
    /**
     * 批量使用主键获取文件对象
     * @param oids 主键,以逗号分隔,考虑性能的影响,建议不要超过10000个
     * @return 文件显示对象列表
     */
    @GetMapping("/batchListFilesByOids")
    public BaseResult<VciFileObjectVO> batchListFilesByOids(String oids){
        Collection<VciFileObjectVO> fileObjectVOS = fileObjectService.listVciFileObjectByOids(VciBaseUtil.str2List(oids));
        BaseResult baseResult = BaseResult.success();
        baseResult.setData(fileObjectVOS);
        return baseResult;
    }
 
    /**
     * 文件生效
     * @param fileOids 文件的主键
     * @return 执行结果
     */
    @PutMapping("/releasedFileByOid")
    public BaseResult releasedFile(String fileOids){
        List<String> fileOidList = VciBaseUtil.str2List(fileOids);
        return fileObjectService.releasedFile(fileOidList);
    }
 
    /**
     * 根据关键信息获取文件信息
     * @param keyInfo 文件信息
     * @param docClassifyId 文件分类编号
     * @return 文件显示对象,取data属性
     */
    @GetMapping("/listFileObjectByKeyInfo")
    public BaseResult<VciFileObjectVO> listFileObjectByKeyInfo(String keyInfo, String docClassifyId){
        return fileObjectService.listFileObjectByKeyInfo(VciBaseUtil.str2List(keyInfo),docClassifyId);
    }
 
    /**
     * 预览文件
     * @param ownbizOid 业务类型主键
     * @param ownbizBtm 业务类型名称
     * @param fileOid 文件的主键
     * @return 是否可以预览
     */
    @PostMapping("/previewFile")
    public BaseResult previewFile(String ownbizOid, String ownbizBtm, String fileOid){
        //暂时都可以预览
        return BaseResult.success();
    }
 
    /**
     * 预览文件--老版本的
     * @param ownbizOid 业务类型主键
     * @param ownbizBtm 业务类型名称
     * @param fileOid 文件的主键
     * @return 是否可以预览
     */
    @PostMapping("/previewFileOld")
    public BaseResult<VciFilePreviewConfigVO> previewFileOld(String ownbizOid,String ownbizBtm,String fileOid){
        //这个是老的版本的预览使用的,这里就直接写到controller里了,
        //需要根据配置的信息,生成key
        VciBaseUtil.alertNotNull(fileOid,"文件的主键");
        if(fileOid.contains(",")){
            throw new VciBaseException("每次只能针对一个文件进行预览");
        }
        VciFileObjectVO fileObjectVO = fileObjectService.getObjectByOid(fileOid);
        if(fileObjectVO == null || StringUtils.isBlank(fileObjectVO.getOid())){
            throw new VciBaseException("这个文件不存在,无法预览");
        }
 
        if(filePreviewAutoConfig == null || StringUtils.isBlank(filePreviewAutoConfig.getPreviewServiceUrl())) {
            throw new VciBaseException("文件预览服务并没有配置,不支持预览,请联系管理员或者下载文件后查看");
        }
        if(StringUtils.isBlank(app.getPrivateTokenKey())) {
            throw new VciBaseException("配置不正确,请联系管理员检查app.private-token-key的值,注意这个值与文件预览服务里配置的要对应");
        }
        Long invalidTime = filePreviewAutoConfig.getInvalidTime();
        if(invalidTime == null || invalidTime<0){
            invalidTime = 5L;
        }
        invalidTime = System.currentTimeMillis() + invalidTime*60*1000;
        String previewKey = Md5.md5(fileObjectVO.getOid().trim() + "#" + filePreviewAutoConfig.getPreviewSystemKey() + "#" + app.getPrivateTokenKey() + "#" + invalidTime);
        VciFilePreviewConfigVO configVO = new VciFilePreviewConfigVO();
        configVO.setPreviewKey(previewKey);
        configVO.setSystemKey(filePreviewAutoConfig.getPreviewSystemKey());
        configVO.setFileOids(fileOid);
        configVO.setPreviewSystemUrl(filePreviewAutoConfig.getPreviewServiceUrl());
        configVO.setInvalidTime(invalidTime);
        return BaseResult.success(configVO);
    }
 
    /**
     * 使用关键信息统计个数
     * @param keyInfo 关键信息,多个以逗号分隔,
     * @param docClassifyId 文档分类编号
     * @return 个数
     */
    @GetMapping("/countByKeyInfo")
    public BaseResult<Long> countByKeyInfo(@RequestParam("keyInfo") String keyInfo, @RequestParam("docClassifyId")String docClassifyId){
        return BaseResult.success(fileObjectService.countByKeyInfo(VciBaseUtil.str2List(keyInfo),docClassifyId));
    }
 
 
}