瀏覽代碼

转码代码提交

liweifan 3 年之前
父節點
當前提交
4112af3dda

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreChangeLogDao.java

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.SysMusicScoreChangeLog;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface SysMusicScoreChangeLogDao extends BaseDAO<Integer, SysMusicScoreChangeLog> {
+
+}

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreDao.java

@@ -1,7 +1,9 @@
 package com.ym.mec.biz.dal.dao;
 
 
+import com.ym.mec.biz.dal.dto.SysMusicScoreTranscod;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.entity.SysMusicScoreAccompaniment;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
@@ -12,4 +14,9 @@ public interface SysMusicScoreDao extends BaseDAO<Integer, SysMusicScore> {
     List<SysMusicScore> findByIds(@Param("musicScoreIds") String musicScoreIds);
 
     int countBuyCategoriesIds(@Param("categoriesIds") String delCategoriesIds);
+
+    SysMusicScoreTranscod getTranscod(@Param("sysMusicScoreId") Integer sysMusicScoreId);
+
+    int updateAccompanimentBySongId(@Param("param") SysMusicScoreAccompaniment param);
+
 }

+ 56 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SysMusicScoreTranscod.java

@@ -0,0 +1,56 @@
+package com.ym.mec.biz.dal.dto;
+
+public class SysMusicScoreTranscod {
+    //sys_music_score.id
+    private Integer id;
+    //伴奏MP3
+    private String url;
+    //伴奏MP3(含节拍器)
+    private String  metronomeUrl;
+
+    //原音MP3
+    private String mp3Url;
+    //原音MP3(含节拍器)
+    private String  metronomeMp3Url;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getMetronomeUrl() {
+        return metronomeUrl;
+    }
+
+    public void setMetronomeUrl(String metronomeUrl) {
+        this.metronomeUrl = metronomeUrl;
+    }
+
+    public String getMp3Url() {
+        return mp3Url;
+    }
+
+    public void setMp3Url(String mp3Url) {
+        this.mp3Url = mp3Url;
+    }
+
+    public String getMetronomeMp3Url() {
+        return metronomeMp3Url;
+    }
+
+    public void setMetronomeMp3Url(String metronomeMp3Url) {
+        this.metronomeMp3Url = metronomeMp3Url;
+    }
+}

+ 66 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScoreChangeLog.java

@@ -0,0 +1,66 @@
+package com.ym.mec.biz.dal.entity;
+
+import java.util.Date;
+
+/**
+ * 对应数据库表(sys_music_score_change_log):
+ */
+public class SysMusicScoreChangeLog {
+
+    private Integer id;
+
+    /**
+     * 曲库表id
+     */
+    private Integer sysMusicScoreId;
+    /**
+     * 修改前
+     */
+    private String changeBefore;
+    /**
+     * 修改后
+     */
+    private String changeAfter;
+
+    private Date createTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getSysMusicScoreId() {
+        return sysMusicScoreId;
+    }
+
+    public void setSysMusicScoreId(Integer sysMusicScoreId) {
+        this.sysMusicScoreId = sysMusicScoreId;
+    }
+
+    public String getChangeBefore() {
+        return changeBefore;
+    }
+
+    public void setChangeBefore(String changeBefore) {
+        this.changeBefore = changeBefore;
+    }
+
+    public String getChangeAfter() {
+        return changeAfter;
+    }
+
+    public void setChangeAfter(String changeAfter) {
+        this.changeAfter = changeAfter;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreService.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service;
 
 
 import com.ym.mec.biz.dal.dto.MusicScoreDto;
+import com.ym.mec.biz.dal.dto.SysMusicScoreTranscod;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
 import com.ym.mec.common.page.PageInfo;
@@ -18,4 +19,6 @@ public interface SysMusicScoreService extends BaseService<Integer, SysMusicScore
     PageInfo<SysMusicScore> queryMusicScorePage(SysExamSongQueryInfo queryInfo);
     
     PageInfo<SysMusicScore> queryMusicScorePageInfo(SysExamSongQueryInfo queryInfo);
+
+    void transcod(Integer sysMusicScoreId);
 }

+ 325 - 195
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreServiceImpl.java

@@ -3,6 +3,10 @@ package com.ym.mec.biz.service.impl;
 
 import static com.ym.mec.biz.dal.enums.ClientTypeEnum.SMART_PRACTICE;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -12,17 +16,23 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.SysMusicScoreTranscod;
+import com.ym.mec.biz.dal.entity.SysMusicScoreChangeLog;
+import com.ym.mec.biz.service.UploadFileService;
+import com.ym.mec.common.entity.UploadReturnBean;
+import com.ym.mec.common.service.IdGeneratorService;
+import com.ym.mec.util.file.FileUtil;
+import com.ym.mec.util.shell.ScriptUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.commons.util.IdUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.SubjectDao;
-import com.ym.mec.biz.dal.dao.SysMusicScoreAccompanimentDao;
-import com.ym.mec.biz.dal.dao.SysMusicScoreCategoriesDao;
-import com.ym.mec.biz.dal.dao.SysMusicScoreDao;
 import com.ym.mec.biz.dal.dto.MusicScoreDto;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.entity.SysMusicScoreAccompaniment;
@@ -38,196 +48,316 @@ import com.ym.mec.util.collection.MapUtil;
 
 @Service
 public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicScore> implements SysMusicScoreService {
-	
-	@Autowired
-	private SysMusicScoreDao sysMusicScoreDao;
-	@Autowired
-	private SysMusicScoreAccompanimentDao sysMusicScoreAccompanimentDao;
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
-	@Autowired
-	private SysMusicScoreCategoriesDao sysMusicScoreCategoriesDao;
-	@Autowired
-	private SubjectDao subjectDao;
-	@Autowired
-	private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
-
-	@Override
-	public BaseDAO<Integer, SysMusicScore> getDAO() {
-		return sysMusicScoreDao;
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void updateMusicScore(MusicScoreDto musicScoreDto) {
-		SysMusicScore sysMusicScore = musicScoreDto.getSysMusicScore();
-		sysMusicScoreDao.update(sysMusicScore);
-		List<Integer> delExamSongAccompanimentIds = musicScoreDto.getDelExamSongAccompanimentIds();
-		if(delExamSongAccompanimentIds != null && delExamSongAccompanimentIds.size() > 0){
-			sysMusicScoreAccompanimentDao.batchDel(delExamSongAccompanimentIds);
-		}
-		List<SysMusicScoreAccompaniment> sysMusicScoreAccompaniments = musicScoreDto.getSysMusicScoreAccompaniments();
-		if(sysMusicScoreAccompaniments != null && sysMusicScoreAccompaniments.size() > 0){
-			List<Integer> subjectIdList = sysMusicScoreAccompaniments.stream().map(e -> e.getSubjectId()).collect(Collectors.toList());
-			subjectIdList.removeAll(Collections.singleton(null));
-			if(subjectIdList.size() > 0){
-				List<Integer> idList = sysMusicScoreAccompaniments.stream().map(e -> e.getId()).collect(Collectors.toList());
-				List<Integer> subjectIds = sysMusicScoreAccompanimentDao.findSubjectByMusicScoreId(sysMusicScore.getId(),idList);
-				int subjectSize = subjectIds.size() + subjectIdList.size();
-				subjectIdList.addAll(subjectIds);
-				int size = new HashSet<>(subjectIdList).size();
-				if(size < subjectSize){
-					throw new BizException("操作失败:请勿提交重复的伴奏声部");
-				}
-			}
-			//获取需要修改的伴奏
-			List<SysMusicScoreAccompaniment> updateCollect = sysMusicScoreAccompaniments.stream().filter(e -> e.getId() != null).collect(Collectors.toList());
-			if(updateCollect.size() > 0){
-				sysMusicScoreAccompanimentDao.batchUpdate(updateCollect,sysMusicScore.getIsOpenMetronome());
-			}
-			//获取需要新增的伴奏
-			List<SysMusicScoreAccompaniment> addCollect = sysMusicScoreAccompaniments.stream().filter(e -> e.getId() == null).collect(Collectors.toList());
-			if(addCollect.size() > 0){
-				sysMusicScoreAccompanimentDao.batchInsert(addCollect,sysMusicScore.getId(),sysMusicScore.getIsOpenMetronome());
-			}
-		}
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void add(MusicScoreDto musicScoreDto) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if(sysUser == null){
-			throw new BizException("请登录");
-		}
-		SysMusicScore sysMusicScore = musicScoreDto.getSysMusicScore();
-		sysMusicScore.setCreateUserId(sysUser.getId());
-		sysMusicScoreDao.insert(sysMusicScore);
-		List<SysMusicScoreAccompaniment> sysMusicScoreAccompaniments = musicScoreDto.getSysMusicScoreAccompaniments();
-		if(sysMusicScoreAccompaniments != null && sysMusicScoreAccompaniments.size() > 0){
-			sysMusicScoreAccompaniments.forEach(e -> {
-				e.setIsOpenMetronome(sysMusicScore.getIsOpenMetronome());
-			});
-			sysMusicScoreAccompanimentDao.batchInsert(sysMusicScoreAccompaniments,sysMusicScore.getId(),sysMusicScore.getIsOpenMetronome());
-		}
-		Integer categoriesId = sysMusicScore.getMusicScoreCategoriesId();
-		if(categoriesId != null && sysMusicScore.getClientType() == SMART_PRACTICE){
-			while (true){
-				SysMusicScoreCategories categories = sysMusicScoreCategoriesDao.get(categoriesId);
-				if(categories.getParentId() == 0){
-					categories.setMusicScoreNum(categories.getMusicScoreNum() + 1);
-					sysMusicScoreCategoriesDao.update(categories);
-					return;
-				}
-				categoriesId = categories.getParentId();
-			}
-		}
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void del(Integer id) {
-		SysMusicScore sysMusicScore = sysMusicScoreDao.get(id);
-		if(sysMusicScore == null){
-			throw new BizException("曲目不存在");
-		}
-		sysMusicScoreDao.delete(id);
-		sysMusicScoreAccompanimentDao.deleteBySongId(id);
-		Integer categoriesId = sysMusicScore.getMusicScoreCategoriesId();
-		if(categoriesId != null && sysMusicScore.getClientType() == SMART_PRACTICE){
-			while (true){
-				SysMusicScoreCategories categories = sysMusicScoreCategoriesDao.get(categoriesId);
-				if(categories.getParentId() == 0){
-					Integer musicScoreNum = categories.getMusicScoreNum() - 1;
-					if(musicScoreNum < 0){
-						musicScoreNum = 0;
-					}
-					categories.setMusicScoreNum(musicScoreNum);
-					sysMusicScoreCategoriesDao.update(categories);
-					return;
-				}
-				categoriesId = categories.getParentId();
-			}
-		}
-	}
-
-	private String getParentTreeName(Integer categoriesId){
-		StringBuffer sb = new StringBuffer();
-		while (true){
-			SysMusicScoreCategories categories = sysMusicScoreCategoriesDao.get(categoriesId);
-			if(sb.length() == 0){
-				sb.append(categories.getName());
-			}else {
-				sb.insert(0,"/");
-				sb.insert(0,categories.getName());
-			}
-			if(categories.getParentId() == 0){
-				return sb.toString();
-			}
-			categoriesId = categories.getParentId();
-		}
-	}
-
-	@Override
-	public PageInfo<SysMusicScore> queryMusicScorePage(SysExamSongQueryInfo queryInfo) {
-		PageInfo<SysMusicScore> sysMusicScorePageInfo = queryPage(queryInfo);
-		List<SysMusicScore> rows = sysMusicScorePageInfo.getRows();
-		if(rows != null && rows.size() > 0){
-			Set<Integer> categoriesIds = rows.stream().map(e -> e.getMusicScoreCategoriesId()).collect(Collectors.toSet());
-			//获取分部列表
-			Map<Integer,String> organMap = MapUtil.convertMybatisMap(sysMusicScoreCategoriesDao.queryOrganByIds(categoriesIds));
-			//获取声部列表
-			Set<Integer> subjectIds = rows.stream().map(e -> e.getSubjectId()).collect(Collectors.toSet());
-			subjectIds.removeAll(Collections.singleton(null));
-			Map<Long, String> subjectMap = new HashMap();
-			if(subjectIds.size() > 0){
-				subjectMap = MapUtil.convertMybatisMap(subjectDao.findBySubjecIds(StringUtils.join(subjectIds, ",")));
-			}
-			Map<Integer,String> map = new HashMap<>(categoriesIds.size());
-			for (Integer categoriesId : categoriesIds) {
-				map.put(categoriesId,getParentTreeName(categoriesId));
-			}
-			for (SysMusicScore row : rows) {
-				row.setCategoriesName(map.get(row.getMusicScoreCategoriesId()));
-				row.setOrganName(organMap.get(row.getMusicScoreCategoriesId()));
-				row.setSubjectName(subjectMap.get(row.getSubjectId()));
-			}
-		}
-		return sysMusicScorePageInfo;
-	}
-
-	@Override
-	public PageInfo<SysMusicScore> queryMusicScorePageInfo(SysExamSongQueryInfo queryInfo) {
-		if(queryInfo.getCategoriesId() != null){
-			List<Integer> categoriesIdList = new ArrayList<>();
-			Integer categoriesId = null;
-			if(StringUtils.isNotEmpty(queryInfo.getCategoriesId())){
-				categoriesId = Integer.parseInt(queryInfo.getCategoriesId());
-			}
-			//List<SysMusicScoreCategories> scoreCategories = sysMusicScoreCategoriesService.queryTree(musicScoreQueryInfo);
-			
-			SysMusicScoreCategories sysMusicScoreCategories = sysMusicScoreCategoriesService.get(categoriesId);
-			
-			if(sysMusicScoreCategories == null){
-				throw new BizException("分类找不到");
-			}
-			categoriesIdList.add(categoriesId);
-			sysMusicScoreCategories = sysMusicScoreCategoriesService.getChildTree(sysMusicScoreCategories);
-			getAllCategoryIdList(categoriesIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
-			
-			queryInfo.setCategoriesIdList(categoriesIdList);
-		}
-		return this.queryPage(queryInfo);
-	}
-    
-    private void getAllCategoryIdList(List<Integer> categoryIdList, List<SysMusicScoreCategories> sysMusicScoreCategoriesList){
-    	
-    	if(sysMusicScoreCategoriesList != null && sysMusicScoreCategoriesList.size() > 0){
-    		for(SysMusicScoreCategories sysMusicScoreCategories : sysMusicScoreCategoriesList){
-    			categoryIdList.add(sysMusicScoreCategories.getId());
-    			getAllCategoryIdList(categoryIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
-    		}
-    	}
-    	
+
+    @Autowired
+    private SysMusicScoreDao sysMusicScoreDao;
+    @Autowired
+    private SysMusicScoreAccompanimentDao sysMusicScoreAccompanimentDao;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private SysMusicScoreCategoriesDao sysMusicScoreCategoriesDao;
+    @Autowired
+    private SubjectDao subjectDao;
+    @Autowired
+    private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
+    @Autowired
+    private SysMusicScoreChangeLogDao sysMusicScoreChangeLogDao;
+    @Autowired
+    private IdGeneratorService idGeneratorService;
+    @Autowired
+    private UploadFileService uploadFileService;
+
+    @Override
+    public BaseDAO<Integer, SysMusicScore> getDAO() {
+        return sysMusicScoreDao;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateMusicScore(MusicScoreDto musicScoreDto) {
+        SysMusicScore sysMusicScore = musicScoreDto.getSysMusicScore();
+        sysMusicScoreDao.update(sysMusicScore);
+        List<Integer> delExamSongAccompanimentIds = musicScoreDto.getDelExamSongAccompanimentIds();
+        if (delExamSongAccompanimentIds != null && delExamSongAccompanimentIds.size() > 0) {
+            sysMusicScoreAccompanimentDao.batchDel(delExamSongAccompanimentIds);
+        }
+        List<SysMusicScoreAccompaniment> sysMusicScoreAccompaniments = musicScoreDto.getSysMusicScoreAccompaniments();
+        if (sysMusicScoreAccompaniments != null && sysMusicScoreAccompaniments.size() > 0) {
+            List<Integer> subjectIdList = sysMusicScoreAccompaniments.stream().map(e -> e.getSubjectId()).collect(Collectors.toList());
+            subjectIdList.removeAll(Collections.singleton(null));
+            if (subjectIdList.size() > 0) {
+                List<Integer> idList = sysMusicScoreAccompaniments.stream().map(e -> e.getId()).collect(Collectors.toList());
+                List<Integer> subjectIds = sysMusicScoreAccompanimentDao.findSubjectByMusicScoreId(sysMusicScore.getId(), idList);
+                int subjectSize = subjectIds.size() + subjectIdList.size();
+                subjectIdList.addAll(subjectIds);
+                int size = new HashSet<>(subjectIdList).size();
+                if (size < subjectSize) {
+                    throw new BizException("操作失败:请勿提交重复的伴奏声部");
+                }
+            }
+            //获取需要修改的伴奏
+            List<SysMusicScoreAccompaniment> updateCollect = sysMusicScoreAccompaniments.stream().filter(e -> e.getId() != null).collect(Collectors.toList());
+            if (updateCollect.size() > 0) {
+                sysMusicScoreAccompanimentDao.batchUpdate(updateCollect, sysMusicScore.getIsOpenMetronome());
+            }
+            //获取需要新增的伴奏
+            List<SysMusicScoreAccompaniment> addCollect = sysMusicScoreAccompaniments.stream().filter(e -> e.getId() == null).collect(Collectors.toList());
+            if (addCollect.size() > 0) {
+                sysMusicScoreAccompanimentDao.batchInsert(addCollect, sysMusicScore.getId(), sysMusicScore.getIsOpenMetronome());
+            }
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void add(MusicScoreDto musicScoreDto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("请登录");
+        }
+        SysMusicScore sysMusicScore = musicScoreDto.getSysMusicScore();
+        sysMusicScore.setCreateUserId(sysUser.getId());
+        sysMusicScoreDao.insert(sysMusicScore);
+        List<SysMusicScoreAccompaniment> sysMusicScoreAccompaniments = musicScoreDto.getSysMusicScoreAccompaniments();
+        if (sysMusicScoreAccompaniments != null && sysMusicScoreAccompaniments.size() > 0) {
+            sysMusicScoreAccompaniments.forEach(e -> {
+                e.setIsOpenMetronome(sysMusicScore.getIsOpenMetronome());
+            });
+            sysMusicScoreAccompanimentDao.batchInsert(sysMusicScoreAccompaniments, sysMusicScore.getId(), sysMusicScore.getIsOpenMetronome());
+        }
+        Integer categoriesId = sysMusicScore.getMusicScoreCategoriesId();
+        if (categoriesId != null && sysMusicScore.getClientType() == SMART_PRACTICE) {
+            while (true) {
+                SysMusicScoreCategories categories = sysMusicScoreCategoriesDao.get(categoriesId);
+                if (categories.getParentId() == 0) {
+                    categories.setMusicScoreNum(categories.getMusicScoreNum() + 1);
+                    sysMusicScoreCategoriesDao.update(categories);
+                    return;
+                }
+                categoriesId = categories.getParentId();
+            }
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void del(Integer id) {
+        SysMusicScore sysMusicScore = sysMusicScoreDao.get(id);
+        if (sysMusicScore == null) {
+            throw new BizException("曲目不存在");
+        }
+        sysMusicScoreDao.delete(id);
+        sysMusicScoreAccompanimentDao.deleteBySongId(id);
+        Integer categoriesId = sysMusicScore.getMusicScoreCategoriesId();
+        if (categoriesId != null && sysMusicScore.getClientType() == SMART_PRACTICE) {
+            while (true) {
+                SysMusicScoreCategories categories = sysMusicScoreCategoriesDao.get(categoriesId);
+                if (categories.getParentId() == 0) {
+                    Integer musicScoreNum = categories.getMusicScoreNum() - 1;
+                    if (musicScoreNum < 0) {
+                        musicScoreNum = 0;
+                    }
+                    categories.setMusicScoreNum(musicScoreNum);
+                    sysMusicScoreCategoriesDao.update(categories);
+                    return;
+                }
+                categoriesId = categories.getParentId();
+            }
+        }
+    }
+
+    private String getParentTreeName(Integer categoriesId) {
+        StringBuffer sb = new StringBuffer();
+        while (true) {
+            SysMusicScoreCategories categories = sysMusicScoreCategoriesDao.get(categoriesId);
+            if (sb.length() == 0) {
+                sb.append(categories.getName());
+            } else {
+                sb.insert(0, "/");
+                sb.insert(0, categories.getName());
+            }
+            if (categories.getParentId() == 0) {
+                return sb.toString();
+            }
+            categoriesId = categories.getParentId();
+        }
+    }
+
+    @Override
+    public PageInfo<SysMusicScore> queryMusicScorePage(SysExamSongQueryInfo queryInfo) {
+        PageInfo<SysMusicScore> sysMusicScorePageInfo = queryPage(queryInfo);
+        List<SysMusicScore> rows = sysMusicScorePageInfo.getRows();
+        if (rows != null && rows.size() > 0) {
+            Set<Integer> categoriesIds = rows.stream().map(e -> e.getMusicScoreCategoriesId()).collect(Collectors.toSet());
+            //获取分部列表
+            Map<Integer, String> organMap = MapUtil.convertMybatisMap(sysMusicScoreCategoriesDao.queryOrganByIds(categoriesIds));
+            //获取声部列表
+            Set<Integer> subjectIds = rows.stream().map(e -> e.getSubjectId()).collect(Collectors.toSet());
+            subjectIds.removeAll(Collections.singleton(null));
+            Map<Long, String> subjectMap = new HashMap();
+            if (subjectIds.size() > 0) {
+                subjectMap = MapUtil.convertMybatisMap(subjectDao.findBySubjecIds(StringUtils.join(subjectIds, ",")));
+            }
+            Map<Integer, String> map = new HashMap<>(categoriesIds.size());
+            for (Integer categoriesId : categoriesIds) {
+                map.put(categoriesId, getParentTreeName(categoriesId));
+            }
+            for (SysMusicScore row : rows) {
+                row.setCategoriesName(map.get(row.getMusicScoreCategoriesId()));
+                row.setOrganName(organMap.get(row.getMusicScoreCategoriesId()));
+                row.setSubjectName(subjectMap.get(row.getSubjectId()));
+            }
+        }
+        return sysMusicScorePageInfo;
+    }
+
+    @Override
+    public PageInfo<SysMusicScore> queryMusicScorePageInfo(SysExamSongQueryInfo queryInfo) {
+        if (queryInfo.getCategoriesId() != null) {
+            List<Integer> categoriesIdList = new ArrayList<>();
+            Integer categoriesId = null;
+            if (StringUtils.isNotEmpty(queryInfo.getCategoriesId())) {
+                categoriesId = Integer.parseInt(queryInfo.getCategoriesId());
+            }
+            //List<SysMusicScoreCategories> scoreCategories = sysMusicScoreCategoriesService.queryTree(musicScoreQueryInfo);
+
+            SysMusicScoreCategories sysMusicScoreCategories = sysMusicScoreCategoriesService.get(categoriesId);
+
+            if (sysMusicScoreCategories == null) {
+                throw new BizException("分类找不到");
+            }
+            categoriesIdList.add(categoriesId);
+            sysMusicScoreCategories = sysMusicScoreCategoriesService.getChildTree(sysMusicScoreCategories);
+            getAllCategoryIdList(categoriesIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
+
+            queryInfo.setCategoriesIdList(categoriesIdList);
+        }
+        return this.queryPage(queryInfo);
+    }
+
+    @Override
+    public void transcod(Integer sysMusicScoreId) {
+        SysMusicScoreTranscod obj = sysMusicScoreDao.getTranscod(sysMusicScoreId);
+        if (obj == null) {
+            throw new BizException("曲目信息不存在");
+        }
+        //
+        String old = JSONObject.toJSONString(obj);
+
+        if (StringUtils.isNotEmpty(obj.getUrl())) {
+            obj.setUrl(doTranscod(obj.getUrl()));
+        }
+        if (StringUtils.isNotEmpty(obj.getMetronomeUrl())) {
+            obj.setMetronomeUrl(doTranscod(obj.getMetronomeUrl()));
+        }
+        if (StringUtils.isNotEmpty(obj.getMp3Url())) {
+            obj.setMp3Url(doTranscod(obj.getMp3Url()));
+        }
+        if (StringUtils.isNotEmpty(obj.getMetronomeMp3Url())) {
+            obj.setMetronomeMp3Url(doTranscod(obj.getMetronomeMp3Url()));
+        }
+        String now = JSONObject.toJSONString(obj);
+
+        //更新obj
+        SysMusicScore sysMusicScore = new SysMusicScore();
+        sysMusicScore.setId(obj.getId());
+        sysMusicScore.setUrl(obj.getUrl());
+        sysMusicScore.setMetronomeUrl(obj.getMetronomeUrl());
+        sysMusicScoreDao.update(sysMusicScore);
+
+        SysMusicScoreAccompaniment accompaniment = new SysMusicScoreAccompaniment();
+        accompaniment.setExamSongId(obj.getId());
+        accompaniment.setMp3Url(obj.getMp3Url());
+        accompaniment.setMetronomeMp3Url(obj.getMetronomeMp3Url());
+        sysMusicScoreDao.updateAccompanimentBySongId(accompaniment);
+
+        //记录日志
+        SysMusicScoreChangeLog log = new SysMusicScoreChangeLog();
+        log.setSysMusicScoreId(obj.getId());
+        log.setChangeBefore(old);
+        log.setChangeAfter(now);
+        sysMusicScoreChangeLogDao.insert(log);
+    }
+
+    /**
+     * 进行转码
+     *
+     * @param fileUrl
+     * @return
+     */
+    private String doTranscod(String fileUrl){
+        String transcodUrl = "";
+        //文件扩展名
+        String expand = FileUtil.getFileExpandByPath(fileUrl);
+        //将远程文件写入本地临时文件路径
+        String tempFileName = getTempFileName(expand);
+        File tempFile = new File(tempFileName);
+        //转码后文件路径
+        String tempTranscodFileName = getTempFileName(expand);
+        try {
+            URL url = new URL(fileUrl);
+            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+            //设置超时间为3秒
+            conn.setConnectTimeout(3 * 1000);
+            //防止屏蔽程序抓取而返回403错误
+            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+
+            FileUtil.inputStreamToFile(conn.getInputStream(), tempFile);
+
+            String script = "ffmpeg -i " + tempFileName + " -vn -c:a libmp3lame -b:a 192k -ac 2 " + tempTranscodFileName;
+            int i = ScriptUtil.callScript(script);
+            if (i == 0) {
+                //转码成功
+                FileInputStream inputStream = new FileInputStream(tempTranscodFileName);
+                UploadReturnBean uploadReturnBean = uploadFileService.uploadFile(inputStream, expand);
+                transcodUrl = uploadReturnBean.getUrl();
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            //删除服务器中的文件
+            /*if(tempFile.exists()){
+                tempFile.delete();
+            }
+            File tempTranscodFile = new File(tempTranscodFileName);
+            if(tempTranscodFile.exists()){
+                tempTranscodFile.delete();
+            }*/
+        }
+        return transcodUrl;
+    }
+
+    /**
+     * 通过网络文件路径获取临时文件路径
+     *
+     * @param fileUrl
+     * @return
+     */
+    String tempPath = "/usr/temp";
+
+    private String getTempFileName(String expand) {
+        //没有目录则创建
+        File file = new File(tempPath);
+        if (file.exists()) {
+            file.mkdirs();
+        }
+        //.mp3
+        String fileName = tempPath + File.separator + idGeneratorService.generatorId("tempFile");
+        if (StringUtils.isNotEmpty(expand)) {
+            fileName += "." + expand;
+        }
+        return fileName;
+    }
+
+    private void getAllCategoryIdList(List<Integer> categoryIdList, List<SysMusicScoreCategories> sysMusicScoreCategoriesList) {
+
+        if (sysMusicScoreCategoriesList != null && sysMusicScoreCategoriesList.size() > 0) {
+            for (SysMusicScoreCategories sysMusicScoreCategories : sysMusicScoreCategoriesList) {
+                categoryIdList.add(sysMusicScoreCategories.getId());
+                getAllCategoryIdList(categoryIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
+            }
+        }
+
     }
 }

+ 3 - 1
mec-biz/src/main/resources/config/mybatis/SysMusicScoreAccompanimentMapper.xml

@@ -141,7 +141,9 @@
 	
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="SysMusicScoreAccompaniment" parameterType="map">
-		SELECT sesa.*,ses.name_,ses.type_,ses.url_,s.name_ subject_name_,sesc.name_ categories_name_,sesc.id_ categories_id_,sesc.parent_id_ parent_categories_id_,ses.client_type_,
+		SELECT
+		    sesa.*,ses.name_,ses.type_,ses.url_,
+		       s.name_ subject_name_,sesc.name_ categories_name_,sesc.id_ categories_id_,sesc.parent_id_ parent_categories_id_,ses.client_type_,
 		ses.rank_ids_,ses.render_from_,ses.enable_evaluation_,ses.metronome_url_,ses.midi_url_,ses.play_mode_,ses.render_from_
 		FROM sys_music_score ses
 		LEFT JOIN sys_music_score_accompaniment sesa ON ses.id_ = sesa.exam_song_id_

+ 73 - 0
mec-biz/src/main/resources/config/mybatis/SysMusicScoreChangeLogMapper.xml

@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.SysMusicScoreChangeLogDao">
+	<resultMap type="com.ym.mec.biz.dal.entity.SysMusicScoreChangeLog" id="SysMusicScoreChangeLog">
+		<result column="id_" property="id" />
+		<result column="sys_music_score_id_" property="sysMusicScoreId" />
+		<result column="change_before_" property="changeBefore" />
+		<result column="change_after_" property="changeAfter" />
+		<result column="create_time_" property="createTime" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="SysMusicScoreChangeLog" >
+		SELECT * FROM sys_music_score_change_log WHERE id_ = #{id}
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="SysMusicScoreChangeLog">
+		SELECT * FROM sys_music_score_change_log ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysMusicScoreChangeLog" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO sys_music_score_change_log (sys_music_score_id_,change_before_,change_after_,create_time_)
+		VALUES(#{sysMusicScoreId},#{changeBefore},#{changeAfter},now())
+	</insert>
+
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.SysMusicScoreChangeLog">
+		UPDATE sys_music_score_change_log
+		<set>
+			<if test="sysMusicScoreId != null">
+				sys_music_score_id_ = #{sysMusicScoreId},
+			</if>
+			<if test="changeBefore != null and changeBefore != ''">
+				change_before_ = #{changeBefore},
+			</if>
+			<if test="changeAfter != null  and changeAfter != ''">
+				change_after_ = #{changeAfter},
+			</if>
+		</set>
+		WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		delete from sys_music_score_change_log WHERE id_ = #{id}
+	</delete>
+
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="SysMusicScoreChangeLog" parameterType="map">
+		SELECT t.*
+		FROM sys_music_score_change_log t
+		<include refid="queryPageSql"/>
+		<include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT count(1) FROM sys_music_score_change_log t
+		<include refid="queryPageSql"/>
+	</select>
+
+	<sql id="queryPageSql">
+		<where>
+
+		</where>
+	</sql>
+</mapper>

+ 81 - 52
mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml

@@ -60,57 +60,61 @@
 
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.SysMusicScore">
-		UPDATE sys_music_score <set>
-		<if test="showFlag != null">
-			show_flag_ = #{showFlag},
-		</if>
-		<if test="clientType != null">
-			client_type_ = #{clientType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-		</if>
-			rank_ids_ = #{rankIds},
-		<if test="renderFrom != null">
-			render_from_ = #{renderFrom},
-		</if>
-		<if test="enableEvaluation != null">
-			enable_evaluation_ = #{enableEvaluation},
-		</if>
-		<if test="order != null">
-			order_ = #{order},
-		</if>
-		<if test="delFlag != null">
-			del_flag_ = #{delFlag},
-		</if>
-		<if test="musicScoreCategoriesId != null">
-			music_score_categories_id_ = #{musicScoreCategoriesId},
-		</if>
-		<if test="createUserId != null">
-			create_user_id_ = #{createUserId},
-		</if>
-			metronome_url_ = #{metronomeUrl},midi_url_ = #{midiUrl},
+		UPDATE sys_music_score
+		<set>
+			<if test="showFlag != null">
+				show_flag_ = #{showFlag},
+			</if>
+			<if test="clientType != null">
+				client_type_ = #{clientType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+			</if>
+				rank_ids_ = #{rankIds},
+			<if test="renderFrom != null">
+				render_from_ = #{renderFrom},
+			</if>
+			<if test="enableEvaluation != null">
+				enable_evaluation_ = #{enableEvaluation},
+			</if>
+			<if test="order != null">
+				order_ = #{order},
+			</if>
+			<if test="delFlag != null">
+				del_flag_ = #{delFlag},
+			</if>
+			<if test="musicScoreCategoriesId != null">
+				music_score_categories_id_ = #{musicScoreCategoriesId},
+			</if>
+			<if test="createUserId != null">
+				create_user_id_ = #{createUserId},
+			</if>
+			<if test="midiUrl != null and midiUrl != ''">
+				midi_url_ = #{midiUrl},
+			</if>
+			metronome_url_ = #{metronomeUrl},
 			url_ = #{url},
-		<if test="subjectIds != null and subjectIds != ''">
-			subject_ids_ = #{subjectIds},
-		</if>
-		<if test="type != null">
-			type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-		</if>
-		<if test="name != null and name != ''">
-			name_ = #{name},
-		</if>
-		<if test="speed != null">
-			speed_ = #{speed},
-		</if>
-		<if test="playMode != null">
-			play_mode_ = #{playMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-		</if>
-		<if test="museScoreUrl != null">
-			muse_score_url_ = #{museScoreUrl},
-		</if>
-		<if test="museScoreMemo != null">
-			muse_score_memo_ = #{museScoreMemo},
-		</if>
-			update_time_ = NOW()
-	</set>
+			<if test="subjectIds != null and subjectIds != ''">
+				subject_ids_ = #{subjectIds},
+			</if>
+			<if test="type != null">
+				type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+			</if>
+			<if test="name != null and name != ''">
+				name_ = #{name},
+			</if>
+			<if test="speed != null">
+				speed_ = #{speed},
+			</if>
+			<if test="playMode != null">
+				play_mode_ = #{playMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+			</if>
+			<if test="museScoreUrl != null">
+				muse_score_url_ = #{museScoreUrl},
+			</if>
+			<if test="museScoreMemo != null">
+				muse_score_memo_ = #{museScoreMemo},
+			</if>
+				update_time_ = NOW()
+		</set>
 		WHERE id_ = #{id}
 	</update>
 	
@@ -118,7 +122,7 @@
 	<update id="delete" >
 		UPDATE sys_music_score SET del_flag_ = 1 WHERE id_ = #{id}
 	</update>
-	
+
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="SysMusicScore" parameterType="map">
 		SELECT ses.*,su.real_name_ create_user_name_,smsc.name_ categories_name_,smsc.id_ categories_id_,
@@ -146,7 +150,32 @@
     <select id="countBuyCategoriesIds" resultType="java.lang.Integer">
 		SELECT COUNT(0) FROM sys_music_score WHERE FIND_IN_SET(music_score_categories_id_,#{categoriesIds}) AND del_flag_ = 0
 	</select>
-    <sql id="queryPageSql">
+    <select id="getTranscod" resultType="com.ym.mec.biz.dal.dto.SysMusicScoreTranscod">
+		select
+			t.id_ as id,
+		   	t.url_ as url,
+		   	t.metronome_url_ as metronomeUrl,
+			smsa.mp3_url_ as mp3Url,
+		    smsa.metronome_mp3_url_ as metronomeMp3Url
+		from sys_music_score t
+		left join sys_music_score_accompaniment smsa on t.id_ = smsa.exam_song_id_ and smsa.del_flag_ = 0
+		where t.del_flag_ = 0 and t.id_ = #{sysMusicScoreId}
+	</select>
+
+	<update id="updateAccompanimentBySongId">
+		update sys_music_score_accompaniment t
+		<set>
+			<if test="param.mp3Url != null and param.mp3Url != ''">
+				t.mp3_url_ = #{param.mp3Url},
+			</if>
+			<if test="param.metronomeMp3Url != null and param.metronomeMp3Url != ''">
+				t.metronome_mp3_url_ = #{param.metronomeMp3Url},
+			</if>
+		</set>
+		where t.exam_song_id_ = #{param.examSongId} and t.del_flag_ = 0
+	</update>
+
+	<sql id="queryPageSql">
 		<where>
 			ses.del_flag_ = 0
 			<!-- <if test="organId != null and organId != null">

+ 1 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/dal/BaseDAO.java

@@ -68,4 +68,5 @@ public interface BaseDAO<PK extends Serializable, T>{
 	 * @return
 	 */
 	public int queryCount(Map<String, Object> params);
+
 }

+ 0 - 1
mec-common/common-core/src/main/java/com/ym/mec/common/service/impl/BaseServiceImpl.java

@@ -81,7 +81,6 @@ public abstract class BaseServiceImpl<PK extends Serializable, T> implements Bas
 	 * @return
 	 */
 	public List<T> findAll(Map<String, Object> params) {
-		
 		final String TENANT_ID = "tenantId";
 		
 		if(!params.containsKey(TENANT_ID)){

+ 52 - 0
mec-util/src/main/java/com/ym/mec/util/file/FileUtil.java

@@ -0,0 +1,52 @@
+package com.ym.mec.util.file;
+
+
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public class FileUtil {
+
+    public static String getFileExpandByPath(String filePath) {
+        int i = filePath.lastIndexOf(".");
+        if (i > 0) {
+            return filePath.substring(+1);
+        }
+        return "";
+    }
+
+    public static File multipartFileToFile(MultipartFile file) {
+        File toFile = null;
+        InputStream ins = null;
+        try {
+            ins = file.getInputStream();
+            toFile = new File(file.getOriginalFilename());
+            inputStreamToFile(ins, toFile);
+            ins.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return toFile;
+    }
+
+    public static void inputStreamToFile(InputStream ins, File file) {
+        try {
+            OutputStream os = new FileOutputStream(file);
+            int bytesRead = 0;
+            byte[] buffer = new byte[8192];
+            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
+                os.write(buffer, 0, bytesRead);
+            }
+            os.close();
+            ins.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+}

+ 86 - 0
mec-util/src/main/java/com/ym/mec/util/shell/ScriptUtil.java

@@ -0,0 +1,86 @@
+package com.ym.mec.util.shell;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+public class ScriptUtil {
+    private final static Logger log = LoggerFactory.getLogger(ScriptUtil.class);
+    /**
+     * 调用shell脚本
+     *
+     * @param cmd
+     */
+    public static int callScript(String cmd) {
+        Runtime run = Runtime.getRuntime();
+        //执行结果
+        int result = 1;
+        try {
+            Process p = run.exec(cmd);
+            InputStream ins = p.getInputStream();
+            InputStream ers = p.getErrorStream();
+            //启动两个线程,一个线程负责读标准输出流,另一个负责读标准错误流
+            new Thread() {
+                public void run() {
+                    BufferedReader br1 = new BufferedReader(new InputStreamReader(ins));
+                    try {
+                        String line1 = null;
+                        while ((line1 = br1.readLine()) != null) {
+                            if (line1 != null) {
+                            }
+                        }
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    } finally {
+                        try {
+                            ins.close();
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                }
+            }.start();
+
+            new Thread() {
+                public void run() {
+                    BufferedReader br2 = new BufferedReader(new InputStreamReader(ers));
+                    try {
+                        String line2 = null;
+                        while ((line2 = br2.readLine()) != null) {
+                            if (line2 != null) {
+                            }
+                        }
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    } finally {
+                        try {
+                            ers.close();
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                }
+            }.start();
+
+            //等待shell脚本结果
+            int execStatus = p.waitFor();
+            log.info("执行runtime的脚本end");
+
+
+            log.info("shell脚本执行结果--execStatus =" + execStatus);
+
+
+            result = execStatus;
+            log.info("返回值为result=" + result);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+}

+ 9 - 1
mec-web/src/main/java/com/ym/mec/web/controller/SysMusicScoreController.java

@@ -1,5 +1,6 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.biz.dal.dto.SysMusicScoreTranscod;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
@@ -118,6 +119,13 @@ public class SysMusicScoreController extends BaseController {
     			getAllCategoryIdList(categoryIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
     		}
     	}
-    	
+    }
+
+    @ApiOperation(value = "转码")
+    @PostMapping("/transcod")
+    @PreAuthorize("@pcs.hasPermissions('sysMusicScore/transcod')")
+    public Object transcod(Integer sysMusicScoreId) {
+        sysMusicScoreService.transcod(sysMusicScoreId);
+        return succeed();
     }
 }