package com.vci.web.controller; import com.vci.file.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.web.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 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 listFilesByOwnbiz(String ownbizOid, String ownbizBtm){ return listFilesByOwnbizAndClassify(ownbizOid,ownbizBtm,""); } /** * 使用业务数据 和文档类型 获取文件 * @param ownbizOid 业务类型数据 * @param ownbizBtm 业务类型的名称 * @param docClassifyId 文档类型编号 * @return 文件的显示对象,请从data属性中获取 */ @GetMapping("/listFilesByOwnbizAndClassify") public BaseResult listFilesByOwnbizAndClassify(String ownbizOid, String ownbizBtm, String docClassifyId){ List 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 batchListFilesByOwnbizAndClassify(String ownbizOids, String ownbizBtm, String docClassifyId){ List 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 batchListFilesByOids(String oids){ Collection 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 fileOidList = VciBaseUtil.str2List(fileOids); return fileObjectService.releasedFile(fileOidList); } /** * 根据关键信息获取文件信息 * @param keyInfo 文件信息 * @param docClassifyId 文件分类编号 * @return 文件显示对象,取data属性 */ @GetMapping("/listFileObjectByKeyInfo") public BaseResult 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 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 countByKeyInfo(@RequestParam("keyInfo") String keyInfo, @RequestParam("docClassifyId")String docClassifyId){ return BaseResult.success(fileObjectService.countByKeyInfo(VciBaseUtil.str2List(keyInfo),docClassifyId)); } }