派生自 projectDept/qhighschool

胡仁荣
2023-07-18 885290e4d0d0c7fad3f538d901c616e49c3d6985
src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java
@@ -6,6 +6,11 @@
import javax.annotation.PostConstruct;
import com.obs.services.ObsClient;
import com.obs.services.model.HttpMethodEnum;
import com.obs.services.model.TemporarySignatureRequest;
import com.obs.services.model.TemporarySignatureResponse;
import com.qxueyou.scc.config.HweiOBSConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.annotation.Scheduled;
@@ -30,9 +35,9 @@
import com.qxueyou.scc.teach.subject.service.impl.SubjectLectureService;
/**
 * 资源服务
 * 资源服务
 *
 * @author 夏德虎
 * @author 夏德虎
 */
@Service
public class ResService extends CommonAppService implements IResService {
@@ -46,12 +51,15 @@
    @Autowired
    private ApplicationContext appContext;
    @Autowired
    private HweiOBSConfig hweiOBSConfig;
    @Autowired
    private IClassLectureService classLectureService;
    /**
     * 各类型资源服务实现
     * 各类型资源服务实现
     */
    private Map<String, IResItemService> resItemServiceMap = new HashMap<String, IResItemService>(6);
@@ -87,7 +95,7 @@
        res.setCoverPageUrl(coverPageUrl);
        res.setItemDestId(resItemId);
        res.setName(name);
        res.setStatus(Res.STATUS_CONVER);
        res.setStatus(Res.STATUS_DRAFT);
        res.setType(type);
        res.setResDirId(dirId);
        res.setRemark(remark);
@@ -109,7 +117,7 @@
            TraceUtils.setCreateTrace(res);
            res.setItemDestId(resItemId);
            res.setName(name);
            res.setStatus(Res.STATUS_CONVER);
            res.setStatus(Res.STATUS_DRAFT);
            res.setType(type);
            res.setLibId(dir.getLibId());
            res.setResDirId(dirId);
@@ -129,7 +137,7 @@
        Res res = read(Res.class, resId);
        resItemServiceMap.get(res.getType()).update(res.getItemDestId(), name);
//        resItemServiceMap.get(res.getType()).update(res.getItemDestId(), name);
        TraceUtils.setUpdateTrace(res);
        res.setName(name);
@@ -157,7 +165,7 @@
    }
    /**
     * @param resId 资源id
     * @param resId 资源id
     * @return
     */
    private Result delete(String resId) {
@@ -258,9 +266,9 @@
        ResLib lib = this.getResLib(libType, ownerId);
        StringBuffer hql = new StringBuffer(
                "from Res where deleteFlag is false and name like ? and libId=? and status=? order by updateTime desc");
                "from Res where deleteFlag is false and name like ? and libId like ? and status=? order by updateTime desc");
        List<Object> args = CollectionUtils.newList(keyword + "%", lib == null ? null : lib.getLibId(),Res.STATUS_DRAFT);
        List<Object> args = CollectionUtils.newList(keyword + "%", lib == null ? "%" : lib.getLibId() + "%",Res.STATUS_DRAFT);
        if (!StringUtils.isEmpty(resType)) {
            hql.append(" and type=?");
@@ -276,9 +284,9 @@
    public int listResCountByLib(String libType, String ownerId, String text, String resType) {
        ResLib lib = this.getResLib(libType, ownerId);
        StringBuffer hql = new StringBuffer("from Res where deleteFlag is false and libId=? order by updateTime desc");
        StringBuffer hql = new StringBuffer("from Res where deleteFlag is false and libId like ? order by updateTime desc");
        List<Object> args = CollectionUtils.newList(null == lib ? null : lib.getLibId());
        List<Object> args = CollectionUtils.newList(null == lib ? "%" : lib.getLibId()+"%");
        if (!StringUtils.isEmpty(resType)) {
            hql.append(" and type=?");
@@ -306,17 +314,27 @@
    public Result readAccessPath(String resId, String attribute) {
        Res res = read(Res.class, resId);
        Object path = Res.FILE_TYPE_VIDEO.equals(res.getType())?JSONObject.parse(resItemServiceMap.get(res.getType()).readAccessPath(res.getItemDestId(), attribute)):CollectionUtils.newObjectMap("path", resItemServiceMap.get(res.getType()).readAccessPath(res.getItemDestId(), attribute));
        if(Res.FILE_TYPE_DOC.equals(res.getType())) {
//        Object path = Res.FILE_TYPE_VIDEO.equals(res.getType())? JSONObject.parse(resItemServiceMap.get(res.getType()).readAccessPath(res.getItemDestId(), attribute)):CollectionUtils.newObjectMap("path", resItemServiceMap.get(res.getType()).readAccessPath(res.getItemDestId(), attribute));
        Object path = Res.FILE_TYPE_VIDEO.equals(res.getType())? resItemServiceMap.get(res.getType()).readAccessPath(res.getItemDestId(), attribute):resItemServiceMap.get(res.getType()).readAccessPath(res.getItemDestId(), attribute);
//        if(Res.FILE_TYPE_DOC.equals(res.getType())) {
//            return new Result(true, "success",
//                     CollectionUtils.newObjectMap("path", path, "name", res.getName(), "coverPageUrl", res.getCoverPageUrl(), "size",
//                           this.classLectureService.readDocPageCount(res.getItemDestId())));//文件的页数
//        }else {
        // URL有效期,3600秒
        long expireSeconds = 3600L;
        TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expireSeconds);
        //设置桶名,一般都是写在配置里,这里直接赋值即可
        request.setBucketName(hweiOBSConfig.getBucketName());
        //这里相当于设置你上传到obs的文件路
        request.setObjectKey((String) path);
        ObsClient obsClient = new ObsClient(hweiOBSConfig.getAccessKey(),hweiOBSConfig.getSecurityKey(),hweiOBSConfig.getEndPoint());
        TemporarySignatureResponse temporarySignatureResponse=obsClient.createTemporarySignature(request);
            return new Result(true, "success",
                     CollectionUtils.newObjectMap("path", path, "name", res.getName(), "coverPageUrl", res.getCoverPageUrl(), "size",
                           this.classLectureService.readDocPageCount(res.getItemDestId())));//文件的页数
        }else {
            return new Result(true, "success",
                     CollectionUtils.newObjectMap("path", path, "name", res.getName(), "coverPageUrl", res.getCoverPageUrl(), "size", 0));
        }
                     CollectionUtils.newObjectMap("path", temporarySignatureResponse.getSignedUrl(), "name", res.getName(), "coverPageUrl", res.getCoverPageUrl(), "size", 0));
//        }
    }
    @Override
@@ -359,7 +377,7 @@
    public Result deleteDir(String[] dirIds) {
        for (String dirId : dirIds) {
            deleteFile4Dir(dirId);// 删除对应的文件
            deleteFile4Dir(dirId);// 删除对应的文件
            deleteDir(dirId);
        }
@@ -378,9 +396,9 @@
    }
    /**
     * 删除资源库文件夹对应删除文件
     * 删除资源库文件夹对应删除文件
     *
     * @param dirId 文件夹id
     * @param dirId 文件夹id
     */
    @Override
    public void deleteFile4Dir(String dirId) {
@@ -392,7 +410,7 @@
    @Override
    public ResDir doGetRootDir(String type, String ownerId) {
        ResLib lib = getResLib(type, ownerId);
        // 无资源库则初始化,并返回根节点
        // 无资源库则初始化,并返回根节点
        if (lib == null) {
            Result result = initResLib(type, ownerId);
            return read(ResDir.class, result.getDataT("rootDirId"));
@@ -410,11 +428,11 @@
    private List<ResDir> doGetChildDirsInner(String parentDirId, String type) {
        // 根节点的处理
        // 根节点的处理
        if (StringUtils.isEmpty(parentDirId)) {
            ResLib lib = getResLib(type, ClientUtils.getUserId());
            // 无资源库则初始化,并返回根节点
            // 无资源库则初始化,并返回根节点
            if (lib == null) {
                Result result = initUserLib();
                return CollectionUtils.newList(ResDir.class, read(ResDir.class, result.getDataT("rootDirId")));
@@ -453,7 +471,7 @@
        if (lib == null) {
            Result result = addDir(RES_DIR_ROOT, "根目录");
            Result result = addDir(RES_DIR_ROOT, "根目录");
            lib = new ResLib();
@@ -500,7 +518,7 @@
    }
    /**
     * 定时器监控转码完成后设置同步res表的状态
     * 定时器监控转码完成后设置同步res表的状态
     */
    @Scheduled(cron = "0/2 * * * * ?")
    public void doTimer() {