浏览代码

增加作品编辑关联

xiewj 2 年之前
父节点
当前提交
212495fd20

+ 28 - 0
720yun_fd_manage/gis_common/src/main/java/com/gis/common/constant/SomeDataConstant.java

@@ -0,0 +1,28 @@
+package com.gis.common.constant;
+
+/**
+ * @author Xiewj
+ * @date 2023/4/25
+ */
+public class SomeDataConstant {
+   //热点
+   public final static String hot = "hot";
+   //开场封面
+   public final static String coverInfo = "coverInfo";
+   //自定义遮罩 地面
+   public final static String customMask_earth = "customMask_earth";
+   //自定义遮罩 天空
+   public final static String customMask_sky = "customMask_sky";
+   //背景音乐
+   public final static String backgroundMusic = "background_music";
+   //讲解音频
+   public final static String explanation_audio = "explanation_audio";
+   //logo
+   public final static String logo = "logo";
+   //开场提示 pc端
+   public final static String pcIcon = "pc_icon";
+   //开场提示 APP端
+
+   public final static String appIcon = "app_icon";
+
+}

+ 9 - 1
720yun_fd_manage/gis_common/src/main/java/com/gis/common/util/RegexUtil.java

@@ -1,5 +1,6 @@
 package com.gis.common.util;
 
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.pinyin.PinyinUtil;
 import org.apache.commons.lang3.StringUtils;
 
@@ -44,7 +45,14 @@ public class RegexUtil {
         return str;
     }
 
-
+    public static String escapeChar(String before){
+        if(StrUtil.isNotBlank(before)){
+            before = before.replaceAll("\\\\", "\\\\\\\\");
+            before = before.replaceAll("_", "\\\\_");
+            before = before.replaceAll("%", "\\\\%");
+        }
+        return before ;
+    }
 
     public static void main(String[] args) {
         String str = "我·是 中—国(人), 你-在{干嘛}--哈—哈。 ddd.jpg";

+ 2 - 3
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/entity/WorkHotsFodderEntity.java

@@ -1,7 +1,5 @@
 package com.gis.domain.entity;
 
-import com.alibaba.fastjson.annotation.JSONField;
-import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.persistence.Entity;
@@ -20,9 +18,10 @@ public class WorkHotsFodderEntity extends BaseEntity implements Serializable {
         private String title;
         private String name;
 
-        private Long FodderId;
+        private Long fodderId;
 
         private String sceneCode;
+        private String type;
 
 
 }

+ 3 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/DirService.java

@@ -5,6 +5,8 @@ import com.gis.domain.dto.DirDto;
 import com.gis.domain.dto.DirMoveDto;
 import com.gis.domain.entity.DirEntity;
 
+import java.util.List;
+
 /**
  * Created by owen on 2022/12/1 0001 15:22
  */
@@ -18,5 +20,6 @@ public interface DirService extends IBaseService<DirEntity, Long>{
     Result remove(Long id);
 
     DirEntity findByIdAndName(Long parentId,String name);
+    List<DirEntity> findByParentId(Long parentId);
 
 }

+ 14 - 4
720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkHotsFodderService.java

@@ -3,19 +3,29 @@ package com.gis.service;
 
 import com.gis.domain.entity.WorkHotsFodderEntity;
 
-import java.util.List;
-
 
 /**
  * Created by owen on 2020/3/11 0011 16:14
  */
 public interface WorkHotsFodderService extends IBaseService<WorkHotsFodderEntity, Long> {
 
-    WorkHotsFodderEntity findBySceneCodeAndWorkIdAndTitleAndNameAndFodderId(String sceneCode, String workId, String hotspotTitle,String name,long FodderId);
+    WorkHotsFodderEntity findBySceneCodeAndWorkIdAndTitleAndNameAndFodderIdAndType(String sceneCode,
+                                                                            String workId,
+                                                                            String hotspotTitle,
+                                                                            String name,
+                                                                            long FodderId,
+                                                                                   String type);
+    WorkHotsFodderEntity findByWorkIdAndFodderIdAndType(
+                                                                                   String workId,
+
+                                                                                   long FodderId,
+                                                                                   String type);
 
 
     boolean getCountByDirId(String dirIds);
     boolean getCountByFodderId(Long fodderId);
 
-    void removeBySceneCodeAndWorkIdAndTitleAndName(String sceneCode, String workId,String name);
+    void removeBySceneCodeAndWorkIdAndType(String sceneCode, String workId, String type);
+    void removeByWorkIdAndType(String workId,  String type);
+    void removeBySceneCodeWorkIdAndType(String sceneCode,String workId,  String type);
 }

+ 66 - 9
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/DirServiceImpl.java

@@ -1,5 +1,7 @@
 package com.gis.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.gis.common.constant.ErrorEnum;
@@ -21,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import tk.mybatis.mapper.entity.Condition;
 
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -81,25 +84,72 @@ public class DirServiceImpl extends IBaseServiceImpl<DirEntity, Long> implements
 
     @Override
     public Result move(DirMoveDto param) {
-        String[] split = param.getDirIds().split(",");
-        for (String s : split) {
-            DirEntity byId = this.findById(Long.valueOf(s));
-            log.info("文件夹名称查询{}",byId);
-            DirEntity byIdAndName = findByIdAndName(param.getParentId(), byId.getName());
-            if (ObjectUtil.isNotNull(byIdAndName)){
-                log.info("{}",byIdAndName);
-                throw new BaseRuntimeException(ErrorEnum.FAILURE_CODE_3104.code(), ErrorEnum.FAILURE_CODE_3104.message());
+        if (StrUtil.isNotEmpty(param.getDirIds())) {
+            String[] split = param.getDirIds().split(",");
+            for (String s : split) {
+                DirEntity byId = this.findById(Long.valueOf(s));
+                log.info("文件夹名称查询{}",byId);
+                DirEntity byIdAndName = findByIdAndName(param.getParentId(), byId.getName());
+                if (ObjectUtil.isNotNull(byIdAndName)){
+                    log.info("{}",byIdAndName);
+                    throw new BaseRuntimeException(ErrorEnum.FAILURE_CODE_3104.code(), ErrorEnum.FAILURE_CODE_3104.message());
 
+                }
             }
         }
+
         // 移动目录
-        this.updateParentId(param.getParentId(), param.getDirIds(), param.getAncestors());
+//        this.updateParentId(param.getParentId(), param.getDirIds(), param.getAncestors());
+
+
+        if (StrUtil.isNotEmpty(param.getDirIds())){
+            //移动子目录
+            if (param.getDirIds().contains(",")){
+                String[] split1 = param.getDirIds().split(",");
+                for (String s : split1) {
+                    //移动最外层
+                    DirEntity parentDir = findById(Long.valueOf(s));
+                    parentDir.setParentId(param.getParentId());
+                    parentDir.setAncestors(param.getAncestors());
+                    this.update(parentDir);
+                    List<DirEntity> dirEntities = findByParentId(Long.valueOf(s));
+                    getChildIdSetAncestors(dirEntities,parentDir);
+
+                }
+            }else {
+
+                DirEntity parentDir = findById(Long.valueOf(param.getDirIds()));
+                parentDir.setParentId(param.getParentId());
+                parentDir.setAncestors(param.getAncestors());
+                this.update(parentDir);
+                List<DirEntity> dirEntities = findByParentId(Long.valueOf(param.getDirIds()));
+                getChildIdSetAncestors(dirEntities,parentDir);
+
+            }
+        }
+
+
+
         // 移动素材
         fodderService.updateDirId(param.getParentId(), param.getFodderIds());
 
         return Result.success();
     }
 
+    private void getChildIdSetAncestors(List<DirEntity> dirEntities,DirEntity parentDir) {
+        for (DirEntity dirEntity : dirEntities) {
+            //子节点修改为父节点的setAncestors
+            dirEntity.setAncestors(parentDir.getAncestors()+","+parentDir.getId());
+            this.update(dirEntity);
+            log.info("修改子节点setAncestors 为{}",parentDir.getAncestors()+","+parentDir.getId());
+            List<DirEntity> child = findByParentId(dirEntity.getId());
+            if (CollectionUtil.isNotEmpty(child)){
+                getChildIdSetAncestors(child,dirEntity);
+            }
+
+        }
+    }
+
     @Override
     public DirEntity findByIdAndName(Long parentId, String name) {
         DirEntity parm=new DirEntity();
@@ -108,6 +158,13 @@ public class DirServiceImpl extends IBaseServiceImpl<DirEntity, Long> implements
         return getBaseMapper().selectOne(parm);
     }
 
+    @Override
+    public List<DirEntity>  findByParentId(Long parentId) {
+        Condition condition = new Condition(DirEntity.class);
+        condition.createCriteria().andEqualTo("parentId", parentId);
+        return getBaseMapper().selectByCondition(condition);
+    }
+
     /**
      * 删除目录
      * 若删除的文件夹包括图片、视频、音频,可直接删除

+ 11 - 7
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/FodderServiceImpl.java

@@ -214,7 +214,7 @@ public class FodderServiceImpl extends IBaseServiceImpl<FodderEntity, Long> impl
             log.info("iconPath:" + iconPath);
 
             entity.setOssPath(ossUrl);
-            entity.setIcon(iconPath);
+//            entity.setIcon(iconPath);
             entity.setUserId(phone);
             entity.setFileSize(size + "");
             entity.setDpi(getDpi(file, type));
@@ -415,8 +415,10 @@ public class FodderServiceImpl extends IBaseServiceImpl<FodderEntity, Long> impl
 
         // 搜索是互斥关系
         if (StrUtil.isNotBlank(searchKey)){
-            searchKey = RegexUtil.sqlReplaceSpecialStr(searchKey);
-            builder.append(" and a.name like '%").append(searchKey).append("%'");
+            searchKey = RegexUtil.escapeChar(searchKey);
+            if (StrUtil.isNotEmpty(searchKey)){
+                builder.append(" and a.name like '%").append(searchKey).append("%'");
+            }
         } else {
             if (dirId != null && dirId > 1){
                 builder.append(" and a.parent_id=").append(dirId);
@@ -440,8 +442,10 @@ public class FodderServiceImpl extends IBaseServiceImpl<FodderEntity, Long> impl
 
 
         if (StrUtil.isNotBlank(searchKey)){
-            searchKey = RegexUtil.sqlReplaceSpecialStr(searchKey);
-            builder.append(" and a.name like '%").append(searchKey).append("%'");
+            searchKey = RegexUtil.escapeChar(searchKey);
+            if (StrUtil.isNotEmpty(searchKey)) {
+                builder.append(" and a.name like '%").append(searchKey).append("%'");
+            }
         } else {
             // dirId为空或者为1 :根目录
             if (dirId != null && dirId > 1){
@@ -552,7 +556,7 @@ public class FodderServiceImpl extends IBaseServiceImpl<FodderEntity, Long> impl
         builder.append(" and a.type='").append(param.getType()).append("'");
         String searchKey = param.getSearchKey();
         if (StrUtil.isNotBlank(searchKey)){
-            searchKey = RegexUtil.sqlReplaceSpecialStr(searchKey);
+            searchKey = RegexUtil.escapeChar(searchKey);
           builder.append(" and a.name like '%").append(searchKey).append("%'");
         }
 
@@ -570,7 +574,7 @@ public class FodderServiceImpl extends IBaseServiceImpl<FodderEntity, Long> impl
         condition.and().andEqualTo("userId", userName);
         condition.and().andEqualTo("type", param.getType());
         if (StrUtil.isNotBlank(searchKey)){
-            searchKey = RegexUtil.sqlReplaceSpecialStr(searchKey);
+            searchKey = RegexUtil.escapeChar(searchKey);
             condition.and().andLike("name", "%"+searchKey+"%");
         }
         List<DirEntity> dirs = dirService.findAll(condition, "create_time desc");

+ 33 - 40
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkHotsFodderServiceImpl.java

@@ -1,50 +1,13 @@
 package com.gis.service.impl;
 
-import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.gis.common.constant.ConfigConstant;
-import com.gis.common.constant.ErrorEnum;
-import com.gis.common.constant.RedisConstant;
-import com.gis.common.exception.BaseRuntimeException;
-import com.gis.common.util.*;
-import com.gis.domain.dto.*;
-import com.gis.domain.entity.FodderEntity;
-import com.gis.domain.entity.WorkEntity;
 import com.gis.domain.entity.WorkHotsFodderEntity;
-import com.gis.domain.vo.ReportWorkVo;
 import com.gis.mapper.IBaseMapper;
-import com.gis.mapper.IBaseStrMapper;
 import com.gis.mapper.WorkHotsFodderMapper;
-import com.gis.mapper.WorkMapper;
-import com.gis.oss.util.FileAndOssUtil;
-import com.gis.oss.util.FileUtils;
-import com.gis.oss.util.QrCodeUtils;
-import com.gis.service.FodderService;
 import com.gis.service.WorkHotsFodderService;
-import com.gis.service.WorkService;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.http.HttpResponse;
-import org.apache.http.util.EntityUtils;
-import org.junit.Test;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-import tk.mybatis.mapper.entity.Condition;
-
-import java.io.IOException;
-import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
 
 
 /**
@@ -64,7 +27,7 @@ public class WorkHotsFodderServiceImpl extends IBaseServiceImpl<WorkHotsFodderEn
     }
 
     @Override
-    public WorkHotsFodderEntity findBySceneCodeAndWorkIdAndTitleAndNameAndFodderId(String sceneCode, String workId, String hotspotTitle,String name,long fodderId) {
+    public WorkHotsFodderEntity findBySceneCodeAndWorkIdAndTitleAndNameAndFodderIdAndType(String sceneCode, String workId, String hotspotTitle,String name,long fodderId,String type) {
         WorkHotsFodderEntity one=new WorkHotsFodderEntity();
         one.setSceneCode(sceneCode);
         one.setWorkId(workId);
@@ -72,6 +35,17 @@ public class WorkHotsFodderServiceImpl extends IBaseServiceImpl<WorkHotsFodderEn
         one.setName(name);
         one.setFodderId(fodderId);
         one.setIsDelete(0);
+        one.setType(type);
+        return getBaseMapper().selectOne(one);
+    }
+
+    @Override
+    public WorkHotsFodderEntity findByWorkIdAndFodderIdAndType( String workId, long fodderId, String type) {
+        WorkHotsFodderEntity one=new WorkHotsFodderEntity();
+        one.setWorkId(workId);
+        one.setFodderId(fodderId);
+        one.setIsDelete(0);
+        one.setType(type);
         return getBaseMapper().selectOne(one);
     }
 
@@ -92,12 +66,31 @@ public class WorkHotsFodderServiceImpl extends IBaseServiceImpl<WorkHotsFodderEn
     }
 
     @Override
-    public void removeBySceneCodeAndWorkIdAndTitleAndName(String sceneCode, String workId, String name) {
+    public void removeBySceneCodeAndWorkIdAndType(String sceneCode, String workId, String type) {
+        WorkHotsFodderEntity one=new WorkHotsFodderEntity();
+        one.setSceneCode(sceneCode);
+        one.setWorkId(workId);
+        one.setIsDelete(0);
+        one.setType(type);
+        getBaseMapper().delete(one)   ;
+    }
+
+    @Override
+    public void removeByWorkIdAndType(String workId,  String type) {
+        WorkHotsFodderEntity one=new WorkHotsFodderEntity();
+        one.setWorkId(workId);
+        one.setIsDelete(0);
+        one.setType(type);
+        getBaseMapper().delete(one)   ;
+    }
+
+    @Override
+    public void removeBySceneCodeWorkIdAndType(String sceneCode, String workId, String type) {
         WorkHotsFodderEntity one=new WorkHotsFodderEntity();
         one.setSceneCode(sceneCode);
         one.setWorkId(workId);
-        one.setName(name);
         one.setIsDelete(0);
+        one.setType(type);
         getBaseMapper().delete(one)   ;
     }
 }

+ 94 - 4
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkServiceImpl.java

@@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.gis.common.constant.ConfigConstant;
 import com.gis.common.constant.ErrorEnum;
 import com.gis.common.constant.RedisConstant;
+import com.gis.common.constant.SomeDataConstant;
 import com.gis.common.exception.BaseRuntimeException;
 import com.gis.common.util.*;
 import com.gis.domain.dto.*;
@@ -503,6 +504,52 @@ public class WorkServiceImpl extends IBaseStrServiceImpl<WorkEntity, String> imp
         String sceneCodes = getSceneCodes(scenes);
         //保存热点的素材到表里面
         saveHotsFodderId(scenes,entity.getId());
+
+        JSONObject coverInfo = someDataJson.getJSONObject("coverInfo");
+        if (coverInfo.containsKey("fodderId")){
+            JSONArray fodderId = coverInfo.getJSONArray("fodderId");
+            if (fodderId.size()>0){
+                //需要更新时候,先删除关联,在保存关联
+                workHotsFodderService.removeByWorkIdAndType(entity.getId(), SomeDataConstant.coverInfo);
+            }
+            for (Object id : fodderId) {
+                saveOrEditFodder(entity, id,SomeDataConstant.coverInfo);
+            }
+        }
+
+
+        JSONObject customMask = someDataJson.getJSONObject("customMask");
+        JSONObject earth= customMask.getJSONObject("earth");
+        JSONObject sky=customMask.getJSONObject("sky");
+            if (earth.containsKey("fodderId")&&ObjectUtil.isNotNull(earth.getLong("fodderId"))){
+                workHotsFodderService.removeByWorkIdAndType(entity.getId(), SomeDataConstant.customMask_earth);
+                 saveOrEditFodder(entity, earth.getLong("fodderId"),SomeDataConstant.customMask_earth);
+        }
+        if (sky.containsKey("fodderId")&&ObjectUtil.isNotNull(sky.getLong("fodderId"))){
+                workHotsFodderService.removeByWorkIdAndType(entity.getId(), SomeDataConstant.customMask_sky);
+                saveOrEditFodder(entity, sky.getLong("fodderId"),SomeDataConstant.customMask_sky);
+        }
+
+        JSONObject backgroundMusic = someDataJson.getJSONObject("backgroundMusic");
+        if (backgroundMusic.containsKey("id")&&ObjectUtil.isNotNull(backgroundMusic.getLong("id"))){
+            workHotsFodderService.removeByWorkIdAndType(entity.getId(), SomeDataConstant.backgroundMusic);
+            saveOrEditFodder(entity, backgroundMusic.getLong("id"),SomeDataConstant.backgroundMusic);
+        }
+        if (someDataJson.containsKey("logoId")&&ObjectUtil.isNotNull(someDataJson.getLong("logoId"))){
+            workHotsFodderService.removeByWorkIdAndType(entity.getId(), SomeDataConstant.logo);
+            saveOrEditFodder(entity, someDataJson.getLong("id"),SomeDataConstant.logo);
+        }
+        if (someDataJson.containsKey("pcIconId")&&ObjectUtil.isNotNull(someDataJson.getLong("pcIconId"))){
+            workHotsFodderService.removeByWorkIdAndType(entity.getId(), SomeDataConstant.pcIcon);
+            saveOrEditFodder(entity, someDataJson.getLong("pcIconId"),SomeDataConstant.pcIcon);
+        }
+
+        if (someDataJson.containsKey("appIconId")&&ObjectUtil.isNotNull(someDataJson.getLong("appIconId"))){
+            workHotsFodderService.removeByWorkIdAndType(entity.getId(), SomeDataConstant.appIcon);
+            saveOrEditFodder(entity, someDataJson.getLong("appIconId"),SomeDataConstant.appIcon);
+        }
+
+
         entity.setSceneCodes(sceneCodes);
         // 2022-12-19 作品类型
         String type = getTypeBySceneCodes(sceneCodes);
@@ -526,6 +573,21 @@ public class WorkServiceImpl extends IBaseStrServiceImpl<WorkEntity, String> imp
 
     }
 
+    private void saveOrEditFodder(WorkEntity entity, Object id,String type) {
+        WorkHotsFodderEntity workHotsFodderEntity= workHotsFodderService.findByWorkIdAndFodderIdAndType(entity.getId(),Long.valueOf(String.valueOf(id)), type);
+        if (ObjectUtil.isNotNull(workHotsFodderEntity)){
+            workHotsFodderEntity.setFodderId(Long.valueOf(String.valueOf(id)));
+            workHotsFodderEntity.setWorkId(entity.getId());
+            workHotsFodderService.update(workHotsFodderEntity);
+        }else {
+            workHotsFodderEntity=new WorkHotsFodderEntity();
+            workHotsFodderEntity.setFodderId(Long.valueOf(String.valueOf(id)));
+            workHotsFodderEntity.setWorkId(entity.getId());
+            workHotsFodderEntity.setType(type);
+            workHotsFodderService.save(workHotsFodderEntity);
+        }
+    }
+
     /**
      * someDataToJson
      * @param param someDataStr
@@ -547,16 +609,17 @@ public class WorkServiceImpl extends IBaseStrServiceImpl<WorkEntity, String> imp
         return join;
     }
     /**
-     * 保存当前作品引用的素材
+     * 保存当前作品热点引用的素材
      * @param param
      */
     private void saveHotsFodderId(String param,String workId){
         JSONArray array = JSONArray.parseArray(param);
         for (Object o : array) {
             JSONObject parse = JSONObject.parseObject(o.toString());
+            String sceneCode= parse.getString("sceneCode");
+
             if (parse.containsKey("someData")) {
                 JSONObject someData = parse.getJSONObject("someData");
-                String sceneCode= parse.getString("sceneCode");
                 log.info("素材包含someData,进行热点处理");
                     if (someData.containsKey("hotspots")){
                         JSONArray hotspots = someData.getJSONArray("hotspots");
@@ -569,16 +632,17 @@ public class WorkServiceImpl extends IBaseStrServiceImpl<WorkEntity, String> imp
 
                             if (fodderId.size()>0){
                                 //需要更新时候,先删除关联,在保存关联
-                                workHotsFodderService.removeBySceneCodeAndWorkIdAndTitleAndName(sceneCode,workId,name);
+                                workHotsFodderService.removeBySceneCodeAndWorkIdAndType(sceneCode,workId, SomeDataConstant.hot);
                             }
                             for (Object id : fodderId) {
-                                WorkHotsFodderEntity entity= workHotsFodderService.findBySceneCodeAndWorkIdAndTitleAndNameAndFodderId(sceneCode,workId,hotspotTitle,name,Long.valueOf(String.valueOf(id)));
+                                WorkHotsFodderEntity entity= workHotsFodderService.findBySceneCodeAndWorkIdAndTitleAndNameAndFodderIdAndType(sceneCode,workId,hotspotTitle,name,Long.valueOf(String.valueOf(id)), SomeDataConstant.hot);
                                 if (ObjectUtil.isNotNull(entity)){
                                     entity.setSceneCode(sceneCode);
                                     entity.setFodderId(Long.valueOf(String.valueOf(id)));
                                     entity.setWorkId(workId);
                                     entity.setTitle(hotspotTitle);
                                     entity.setName(name);
+                                    entity.setType(SomeDataConstant.hot);
                                     workHotsFodderService.update(entity);
                                 }else {
                                     entity=new WorkHotsFodderEntity();
@@ -587,6 +651,7 @@ public class WorkServiceImpl extends IBaseStrServiceImpl<WorkEntity, String> imp
                                     entity.setWorkId(workId);
                                     entity.setTitle(hotspotTitle);
                                     entity.setName(name);
+                                    entity.setType(SomeDataConstant.hot);
                                     workHotsFodderService.save(entity);
 
                                 }
@@ -597,7 +662,32 @@ public class WorkServiceImpl extends IBaseStrServiceImpl<WorkEntity, String> imp
                         }
                 }
             }
+            if (parse.containsKey("explanation")){
+                JSONObject explanation = parse.getJSONObject("explanation");
+                if (explanation.containsKey("audioId")&&ObjectUtil.isNotNull(explanation.getLong("audioId"))){
+                    Long audioId = explanation.getLong("audioId");
+                    String audioName = explanation.getString("audioName");
+                    workHotsFodderService.removeBySceneCodeWorkIdAndType(sceneCode,workId, SomeDataConstant.explanation_audio);
+                    WorkHotsFodderEntity workHotsFodderEntity= workHotsFodderService.findByWorkIdAndFodderIdAndType(workId,audioId, SomeDataConstant.explanation_audio);
+                    if (ObjectUtil.isNotNull(workHotsFodderEntity)){
+                        workHotsFodderEntity.setSceneCode(sceneCode);
+                        workHotsFodderEntity.setFodderId(audioId);
+                        workHotsFodderEntity.setWorkId(workId);
+                        workHotsFodderEntity.setName(audioName);
+                        workHotsFodderEntity.setType(SomeDataConstant.explanation_audio);
+                        workHotsFodderService.update(workHotsFodderEntity);
+                    }else {
+                        workHotsFodderEntity=new WorkHotsFodderEntity();
+                        workHotsFodderEntity.setSceneCode(sceneCode);
+                        workHotsFodderEntity.setFodderId(audioId);
+                        workHotsFodderEntity.setWorkId(workId);
+                        workHotsFodderEntity.setName(audioName);
+                        workHotsFodderEntity.setType(SomeDataConstant.explanation_audio);
+                        workHotsFodderService.save(workHotsFodderEntity);
 
+                    }
+                }
+            }
         }
     }
     /**