浏览代码

Merge branch 'saas' into saas_2022_05_17_activity

hgw 3 年之前
父节点
当前提交
80f81efab8
共有 23 个文件被更改,包括 931 次插入262 次删除
  1. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreChangeLogDao.java
  2. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreDao.java
  3. 44 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SysMusicScoreMetronomeTranscod.java
  4. 47 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SysMusicScoreTranscod.java
  5. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysCoupon.java
  6. 66 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScoreChangeLog.java
  7. 25 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/UseCondition.java
  8. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreService.java
  9. 10 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java
  10. 28 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponCodeServiceImpl.java
  11. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponServiceImpl.java
  12. 351 195
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreServiceImpl.java
  13. 3 0
      mec-biz/src/main/resources/config/mybatis/SysCouponCodeMapper.xml
  14. 5 0
      mec-biz/src/main/resources/config/mybatis/SysCouponIssueRecordMapper.xml
  15. 6 2
      mec-biz/src/main/resources/config/mybatis/SysCouponMapper.xml
  16. 3 1
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreAccompanimentMapper.xml
  17. 73 0
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreChangeLogMapper.xml
  18. 88 52
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml
  19. 1 0
      mec-common/common-core/src/main/java/com/ym/mec/common/dal/BaseDAO.java
  20. 0 1
      mec-common/common-core/src/main/java/com/ym/mec/common/service/impl/BaseServiceImpl.java
  21. 52 0
      mec-util/src/main/java/com/ym/mec/util/file/FileUtil.java
  22. 86 0
      mec-util/src/main/java/com/ym/mec/util/shell/ScriptUtil.java
  23. 9 1
      mec-web/src/main/java/com/ym/mec/web/controller/SysMusicScoreController.java

+ 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> {
+
+}

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

@@ -1,7 +1,10 @@
 package com.ym.mec.biz.dal.dao;
 
 
+import com.ym.mec.biz.dal.dto.SysMusicScoreMetronomeTranscod;
+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 +15,11 @@ 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);
+
+    List<SysMusicScoreMetronomeTranscod> getMetronomeTranscod(@Param("sysMusicScoreId") Integer sysMusicScoreId);
+
+    int updateAccompanimentBySongId(@Param("param") SysMusicScoreAccompaniment param);
+
 }

+ 44 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SysMusicScoreMetronomeTranscod.java

@@ -0,0 +1,44 @@
+package com.ym.mec.biz.dal.dto;
+
+public class SysMusicScoreMetronomeTranscod {
+    //sys_music_score_accompaniment.id_
+    private Integer id;
+    //sys_music_score_accompaniment.exam_song_id_
+    private Integer examSongId;
+    //原音MP3
+    private String mp3Url;
+    //原音MP3(含节拍器)
+    private String  metronomeMp3Url;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getExamSongId() {
+        return examSongId;
+    }
+
+    public void setExamSongId(Integer examSongId) {
+        this.examSongId = examSongId;
+    }
+
+    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;
+    }
+}

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

@@ -0,0 +1,47 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SysMusicScoreTranscod {
+    //sys_music_score.id_
+    private Integer id;
+    //伴奏MP3
+    private String url;
+    //伴奏MP3(含节拍器)
+    private String  metronomeUrl;
+
+    private List<SysMusicScoreMetronomeTranscod> accompanimentList = new ArrayList<>();
+
+    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 List<SysMusicScoreMetronomeTranscod> getAccompanimentList() {
+        return accompanimentList;
+    }
+
+    public void setAccompanimentList(List<SysMusicScoreMetronomeTranscod> accompanimentList) {
+        this.accompanimentList = accompanimentList;
+    }
+}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysCoupon.java

@@ -90,6 +90,18 @@ public class SysCoupon extends BaseEntity implements Serializable{
 	@ApiModelProperty("非数据库字段-可以领取的优惠券数量")
 	private Integer canBeGetNum;
 
+	@ApiModelProperty("领取优惠券条件JSON: {organId:分部id(逗号隔开)}")
+	private String useCondition;
+
+	public String getUseCondition() {
+		return useCondition;
+	}
+
+	public void setUseCondition(String useCondition) {
+		this.useCondition = useCondition;
+	}
+
+
 	public Integer getId() {
 		return id;
 	}

+ 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;
+    }
+}

+ 25 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/UseCondition.java

@@ -0,0 +1,25 @@
+package com.ym.mec.biz.dal.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-24
+ */
+public class UseCondition implements Serializable {
+
+    @ApiModelProperty("分部id(逗号隔开)")
+    private String organId;
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+}

+ 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);
 }

+ 10 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java

@@ -240,16 +240,6 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
     public HttpResponseResult activeBuy(MemberPayParamDto memberPayParamDto) throws Exception {
         SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).orElseThrow(()-> new BizException("请登录"));
         Student student = studentService.getLocked(sysUser.getId());
-        //判断用户是否已存在订单
-        List<StudentPaymentOrder> memberIngOrders = studentPaymentOrderService.queryByCondition(GroupType.LIVE_BUY,null,student.getUserId(), DealStatusEnum.ING,OrderTypeEnum.LIVE_BUY);
-        if (CollectionUtils.isNotEmpty(memberIngOrders)) {
-            HttpResponseResult result = studentPaymentOrderService.checkRepeatPay(memberIngOrders.get(0), memberPayParamDto.getRepeatPay());
-            if (result.getCode() != 200) {
-                return result;
-            }
-            //还原库存
-            liveGoodsService.addGoodsStock(memberPayParamDto.getLiveGoodsId(),memberPayParamDto.getLiveId());
-        }
         String activeConfig = sysConfigDao.findConfigValue("cloud_teacher_active_config");
         List<Cloud2022ActivityDto> cloud2022ActivityDtos = JSONArray.parseArray(activeConfig, Cloud2022ActivityDto.class);
         List<Cloud2022ActivityDto> activityDtos = cloud2022ActivityDtos.stream().
@@ -262,6 +252,16 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
         //判断当前商品是否可以购买(库存、上架状态、是否购买过)
         //如果是云教练商品,那么只能购买一次、如果是免费直播课,那么每次上架只能买一次,总共只能买2次
         if(memberPayParamDto.getLiveGoodsId() == 1){
+            //判断用户是否已存在订单
+            List<StudentPaymentOrder> memberIngOrders = studentPaymentOrderService.queryByCondition(GroupType.LIVE_BUY,null,student.getUserId(), DealStatusEnum.ING,OrderTypeEnum.LIVE_BUY);
+            if (CollectionUtils.isNotEmpty(memberIngOrders)) {
+                HttpResponseResult result = studentPaymentOrderService.checkRepeatPay(memberIngOrders.get(0), memberPayParamDto.getRepeatPay());
+                if (result.getCode() != 200) {
+                    return result;
+                }
+                //还原库存
+                liveGoodsService.addGoodsStock(memberPayParamDto.getLiveGoodsId(),memberPayParamDto.getLiveId());
+            }
             //是否还有购买资格
             activityId = Integer.parseInt(activityDtos.get(0).getActivityId());
             VipGroupActivity vipGroupActivity = Optional.ofNullable(vipGroupActivityDao.get(activityId)).orElseThrow(()-> new BizException("活动不存在"));

+ 28 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponCodeServiceImpl.java

@@ -1,5 +1,8 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 import com.ym.mec.biz.dal.dao.SysCouponCodeDao;
 import com.ym.mec.biz.dal.dao.SysCouponDao;
@@ -45,6 +48,9 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
     @Autowired
     private StudentPaymentOrderDao studentPaymentOrderDao;
 
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
     @Override
     public BaseDAO<Long, SysCouponCode> getDAO() {
         return sysCouponCodeDao;
@@ -121,6 +127,10 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
         optional.filter(c -> c.getStockCount() == -1
                         || (c.getStockCount() > -1 && c.getStockCount() >= c.getConsumeNum() + exchangeNum))
                 .orElseThrow(() -> new BizException("优惠券库存不足!"));
+
+        // 检测学生能否领取优惠券
+        checkUser(userId,sysCoupon);
+
         //校验兑换的最大次数
         if (sysCoupon.getLimitExchangeNum() != -1) {
             int userUserNum = sysCouponCodeDao.countWithUserAndCoupon(userId, couponId);
@@ -132,6 +142,24 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
         return sysCoupon;
     }
 
+
+    private void checkUser(Integer userId, SysCoupon sysCoupon) {
+        SysUser sysUser = sysUserFeignService.queryUserById(userId);
+        if (StringUtils.isBlank(sysCoupon.getUseCondition())) {
+            return;
+        }
+        UseCondition useCondition = JSON.parseObject(sysCoupon.getUseCondition(), UseCondition.class);
+        // 检测分部
+        if (StringUtils.isNotBlank(useCondition.getOrganId())) {
+            List<String> organIdList = Arrays.asList(useCondition.getOrganId().split(","));
+            if (!organIdList.contains(sysUser.getOrganId().toString())) {
+                throw new BizException("学生不在优惠券适用分部");
+            }
+
+        }
+    }
+
+
     private void opsCoupon(Integer userId, SysCouponCode sysCouponCode, Integer couponId, Integer exchangeNum, SysCoupon sysCoupon) {
         Integer tenantId = TenantContextHolder.getTenantId();
         Date now = new Date();

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponServiceImpl.java

@@ -72,6 +72,7 @@ public class SysCouponServiceImpl extends BaseServiceImpl<Integer, SysCoupon> im
             if (oldCoupon.getStockCount() - oldCoupon.getConsumeNum() > oldCoupon.getWarningStockNum()) {
                 oldCoupon.setWarningStatus(0);
             }
+            oldCoupon.setUseCondition(sysCoupon.getUseCondition());
             sysCouponDao.update(oldCoupon);
         } else {
             switch (sysCoupon.getType()) {

+ 351 - 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,24 @@ 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.SysMusicScoreMetronomeTranscod;
+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 +49,341 @@ 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("曲目信息不存在");
+        }
+        List<SysMusicScoreMetronomeTranscod> metronomeTranscod = sysMusicScoreDao.getMetronomeTranscod(sysMusicScoreId);
+        obj.setAccompanimentList(metronomeTranscod);
+        //
+        String old = JSONObject.toJSONString(obj);
+        boolean flag = false;
+        String url = doTranscod(obj.getUrl());
+        if (StringUtils.isNotEmpty(url)) {
+            obj.setUrl(url);
+            flag = true;
+        }
+        String metronomeUrl = doTranscod(obj.getMetronomeUrl());
+        if (StringUtils.isNotEmpty(metronomeUrl)) {
+            obj.setMetronomeUrl(metronomeUrl);
+            flag = true;
+        }
+        if (flag) {
+            //更新obj
+            SysMusicScore sysMusicScore = new SysMusicScore();
+            sysMusicScore.setId(obj.getId());
+            sysMusicScore.setUrl(obj.getUrl());
+            sysMusicScore.setMetronomeUrl(obj.getMetronomeUrl());
+            sysMusicScoreDao.update(sysMusicScore);
+        }
+
+        for (SysMusicScoreMetronomeTranscod o : metronomeTranscod) {
+            Boolean subFlag = false;
+            String mp3Url = doTranscod(o.getMp3Url());
+            if (StringUtils.isNotEmpty(mp3Url)) {
+                o.setMp3Url(mp3Url);
+                flag = true;
+                subFlag = true;
+            }
+            String metronomeMp3Url = doTranscod(o.getMetronomeMp3Url());
+            if (StringUtils.isNotEmpty(metronomeMp3Url)) {
+                o.setMetronomeMp3Url(metronomeMp3Url);
+                flag = true;
+                subFlag = true;
+            }
+            if (subFlag) {
+                SysMusicScoreAccompaniment accompaniment = new SysMusicScoreAccompaniment();
+                accompaniment.setExamSongId(o.getId());
+                accompaniment.setMp3Url(o.getMp3Url());
+                accompaniment.setMetronomeMp3Url(o.getMetronomeMp3Url());
+                sysMusicScoreDao.updateAccompanimentBySongId(accompaniment);
+            }
+        }
+        if (!flag) {
+            return;
+        }
+        obj.setAccompanimentList(metronomeTranscod);
+        String now = JSONObject.toJSONString(obj);
+
+        //记录日志
+        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 = "";
+        if (StringUtils.isEmpty(fileUrl)) {
+            return 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 320k -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 - 0
mec-biz/src/main/resources/config/mybatis/SysCouponCodeMapper.xml

@@ -175,6 +175,9 @@
 			</if>
 			<if test="organId!=null">
 				AND su.organ_id_=#{organId}
+				and (find_in_set(#{organId},JSON_UNQUOTE(json_extract(sc.use_condition_,'$.organId')))
+				or JSON_UNQUOTE(json_extract(sc.use_condition_,'$.organId')) is null
+				or JSON_UNQUOTE(json_extract(sc.use_condition_,'$.organId')) = "")
 			</if>
 			<if test="search!=null and search!=''">
 				AND (scc.user_id_=#{search} OR su.phone_=#{search} OR su.username_ LIKE CONCAT('%', #{search}, '%'))

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/SysCouponIssueRecordMapper.xml

@@ -164,6 +164,8 @@
              WHERE usage_status_  <![CDATA[ <> ]]> 2 AND user_id_ = #{userId}
              GROUP BY coupon_id_) AS b
             ON a.id_ = b.coupon_id_
+        join
+        (select organ_id_ from sys_user where id_ = #{userId}) c
         WHERE issuance_type_ = 0
           AND status_ = 1
           AND tenant_id_ = #{tenantId}
@@ -173,6 +175,9 @@
                     stock_count_ > consume_num_
                 OR stock_count_ = - 1
             )
+        and (find_in_set(c.organ_id_,JSON_UNQUOTE(json_extract(a.use_condition_,'$.organId')))
+        or JSON_UNQUOTE(json_extract(a.use_condition_,'$.organId')) is null
+        or JSON_UNQUOTE(json_extract(a.use_condition_,'$.organId')) = "")
     </select>
 
 </mapper>

+ 6 - 2
mec-biz/src/main/resources/config/mybatis/SysCouponMapper.xml

@@ -30,6 +30,7 @@
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
         <result column="tenant_id_" property="tenantId"/>
+		<result column="use_condition_" property="useCondition"/>
 	</resultMap>
 
 	<!-- 根据主键查询一条记录 -->
@@ -46,13 +47,13 @@
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysCoupon" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO sys_coupon (id_,name_,description_,status_,issuance_type_,type_,type_detail_,face_value_,full_amount_,limit_exchange_num_,effective_type_,deadline_,
 		                        effective_start_time_, effective_expire_time_,end_date_,start_date_,stock_count_,consume_num_,warning_stock_num_,
-		                        create_time_,update_time_,tenant_id_)
+		                        create_time_,update_time_,tenant_id_,use_condition_)
 		                        VALUES(#{id},#{name},#{description},#{status},#{issuanceType},
 		                               #{type, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 		                               #{typeDetail},#{faceValue},#{fullAmount},#{limitExchangeNum},
 		                               #{effectiveType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{deadline},
 		                               #{effectiveStartTime},#{effectiveExpireTime},#{endDate},#{startDate},#{stockCount},#{consumeNum},#{warningStockNum},
-		                               NOW(), NOW(),#{tenantId})
+		                               NOW(), NOW(),#{tenantId},#{useCondition})
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->
@@ -102,6 +103,9 @@
 			<if test="warningStatus != null">
 				warning_status_ = #{warningStatus},
 			</if>
+			<if test="useCondition != null">
+				use_condition_ = #{useCondition},
+			</if>
 				update_time_ = NOW()
 		</set>
 		WHERE id_ = #{id} and tenant_id_ = #{tenantId}

+ 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>

+ 88 - 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,39 @@
     <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
+		from sys_music_score t
+		where t.del_flag_ = 0 and t.id_ = #{sysMusicScoreId}
+	</select>
+
+	<select id="getMetronomeTranscod" resultType="com.ym.mec.biz.dal.dto.SysMusicScoreMetronomeTranscod">
+		select
+			smsa.id_ as id,
+			smsa.exam_song_id_ as examSongId,
+			smsa.mp3_url_ as mp3Url,
+			smsa.metronome_mp3_url_ as metronomeMp3Url
+		from sys_music_score_accompaniment smsa
+		where smsa.del_flag_ = 0 and smsa.exam_song_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();
     }
 }