diff --git a/luoo_music/src/main/java/com/luoo/music/MusicApplication.java b/luoo_music/src/main/java/com/luoo/music/MusicApplication.java index ee147ed..23c708f 100644 --- a/luoo_music/src/main/java/com/luoo/music/MusicApplication.java +++ b/luoo_music/src/main/java/com/luoo/music/MusicApplication.java @@ -1,12 +1,9 @@ package com.luoo.music; -import java.net.InetAddress; -import java.net.UnknownHostException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @@ -14,10 +11,13 @@ import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.core.env.Environment; - import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import util.IdWorker; import util.JwtUtil; + +import java.net.InetAddress; +import java.net.UnknownHostException; + @SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient diff --git a/luoo_music/src/main/java/com/luoo/music/controller/CMSJournalController.java b/luoo_music/src/main/java/com/luoo/music/controller/CMSJournalController.java index 05d0830..fd3629f 100644 --- a/luoo_music/src/main/java/com/luoo/music/controller/CMSJournalController.java +++ b/luoo_music/src/main/java/com/luoo/music/controller/CMSJournalController.java @@ -3,6 +3,7 @@ package com.luoo.music.controller; import api.PageResult; import api.Result; import com.luoo.music.request.cms.JournalAddModel; +import com.luoo.music.request.cms.JournalPublishReq; import com.luoo.music.request.cms.JournalQueryModel; import com.luoo.music.response.cms.JournalVO; import com.luoo.music.service.CMSJournalService; @@ -14,6 +15,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.validation.Valid; + /** * @author locust */ @@ -39,7 +42,7 @@ public class CMSJournalController { @ApiOperation(value = "新增期刊", notes = "新增期刊") @RequestMapping(value = "/add", method = RequestMethod.POST) public Result add(@ApiParam(value = "Header中的token信息", required = true) @RequestHeader("Admin-Token") String token, - @ApiParam(value = "期刊信息", required = true) @RequestBody JournalAddModel addModel){ + @ApiParam(value = "期刊信息", required = true) @Valid @RequestBody JournalAddModel addModel){ return journalService.add(token, addModel); } @@ -59,16 +62,15 @@ public class CMSJournalController { @ApiOperation(value = "发布期刊", notes = "发布期刊") @RequestMapping(value="/publish/{id}",method= RequestMethod.PUT) - public Result publish(@PathVariable String id, - @ApiParam(value = "是否定时发布,0:否,1:是", required = true) @RequestParam("isScheduled") String isScheduled, - @ApiParam(value = "定时发布时间") @RequestParam("state") String pubTime){ - return journalService.publish(id, isScheduled, pubTime); + public Result publish(@ApiParam(value = "期刊ID", required = true) @PathVariable String id, + @ApiParam(value = "期刊发布请求对象", required = true) @RequestBody JournalPublishReq queryModel){ + return journalService.publish(id, queryModel); } @ApiOperation(value = "更新期刊启停状态", notes = "更新期刊启停状态") @RequestMapping(value="/update/state/{id}",method= RequestMethod.PUT) public Result updateColumnState(@ApiParam(value = "期刊ID", required = true) @PathVariable String id, - @ApiParam(value = "期刊启停状态,0:停用,1:启用", required = true) @RequestParam("state") String state){ + @ApiParam(value = "期刊启停状态,0:停用,1:启用", required = true) @RequestBody String state){ return journalService.updateJournalState(id, state); } @@ -78,7 +80,7 @@ public class CMSJournalController { return journalService.deleteById(id); } - @ApiOperation(value = "上传期刊封面", notes = "上传期刊封面") + @ApiOperation(value = "上传封面", notes = "上传封面") @RequestMapping(value = "/upload/image", method = RequestMethod.POST) public Result batchUpload(@ApiParam(value = "封面图片文件", required = true) @RequestParam("file") MultipartFile file) { return s3Service.upload(file, Boolean.FALSE); diff --git a/luoo_music/src/main/java/com/luoo/music/controller/CMSSongController.java b/luoo_music/src/main/java/com/luoo/music/controller/CMSSongController.java index d2d5698..d6a77fa 100644 --- a/luoo_music/src/main/java/com/luoo/music/controller/CMSSongController.java +++ b/luoo_music/src/main/java/com/luoo/music/controller/CMSSongController.java @@ -60,7 +60,7 @@ public class CMSSongController { @ApiOperation(value = "更新歌曲启停状态", notes = "更新歌曲启停状态") @RequestMapping(value="/update/state/{id}",method= RequestMethod.PUT) public Result updateSongState(@ApiParam(value = "歌曲ID", required = true) @PathVariable String id, - @ApiParam(value = "歌曲状态,0:停用,1:启用", required = true) @RequestParam("state") String state){ + @ApiParam(value = "歌曲状态,0:停用,1:启用", required = true) @RequestBody String state){ return songService.updateSongState(id, state); } @@ -73,8 +73,8 @@ public class CMSSongController { @ApiOperation(value = "更新歌曲歌词", notes = "更新歌曲歌词") @RequestMapping(value="/update/lyric/{id}",method= RequestMethod.PUT) public Result updateSongLyric(@ApiParam(value = "歌曲ID", required = true) @PathVariable String id, - @ApiParam(value = "歌曲歌词信息", required = true) @RequestBody SongAddModel updateModel){ - return songService.updateSongLyric(id, updateModel.getLyric()); + @ApiParam(value = "歌曲歌词信息", required = true) @RequestBody String lyric){ + return songService.updateSongLyric(id, lyric); } diff --git a/luoo_music/src/main/java/com/luoo/music/dao/JournalDao.java b/luoo_music/src/main/java/com/luoo/music/dao/JournalDao.java index fad706a..1babe1f 100644 --- a/luoo_music/src/main/java/com/luoo/music/dao/JournalDao.java +++ b/luoo_music/src/main/java/com/luoo/music/dao/JournalDao.java @@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.List; @@ -16,23 +17,26 @@ import java.util.Set; */ public interface JournalDao extends JpaRepository,JpaSpecificationExecutor{ - List findByJournalNo(String journalNo); + List findByJournalNo(String journalNo); List findByJournalNoIn(Set journalNos); List findByIdIn(Set ids); @Modifying + @Transactional @Query("UPDATE Journal j SET j.state = '1', j.pubTime = :pubTime WHERE j.id = :id") int updatePubById(@Param("id") String id, @Param("pubTime") LocalDateTime pubTime); @Modifying + @Transactional @Query("UPDATE Journal j SET j.isScheduled = '1', j.pubTime = :pubTime WHERE j.id = :id") int updateScheduledPubById(@Param("id") String id, @Param("pubTime") LocalDateTime pubTime); @Modifying + @Transactional @Query("UPDATE Journal j SET j.state = :state WHERE j.id = :id") int updateJournalState(@Param("id") String id, @Param("state") String state); } diff --git a/luoo_music/src/main/java/com/luoo/music/dao/JournalSongDao.java b/luoo_music/src/main/java/com/luoo/music/dao/JournalSongDao.java index a66fd04..c65d41d 100644 --- a/luoo_music/src/main/java/com/luoo/music/dao/JournalSongDao.java +++ b/luoo_music/src/main/java/com/luoo/music/dao/JournalSongDao.java @@ -1,27 +1,29 @@ package com.luoo.music.dao; import com.luoo.music.pojo.JournalSong; -import com.luoo.music.pojo.JournalSongCount; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Map; /** * @author locust */ public interface JournalSongDao extends JpaRepository, JpaSpecificationExecutor { - @Query("SELECT js.journalNo, COUNT(js) AS songCount FROM JournalSong js WHERE js.journalNo IN :journalNos GROUP BY js.journalNo") - List findSongCountByJournalNos(@Param("journalNos") List journalNos); + @Query("SELECT js.journalNo AS journalNo, COUNT(js) AS songCount FROM JournalSong js WHERE js.journalNo IN :journalNos GROUP BY js.journalNo") + List> findSongCountByJournalNos(@Param("journalNos") List journalNos); @Query("SELECT js FROM JournalSong js WHERE js.journalNo = :journalNo ORDER BY js.songNo") List findByJournalNo(@Param("journalNo") String journalNo); @Modifying + @Transactional @Query("DELETE FROM JournalSong js WHERE js.journalNo = :journalNo") int deleteByJournalNo(@Param("journalNo") String journalNo); @@ -35,6 +37,7 @@ public interface JournalSongDao extends JpaRepository, JpaSp List findBySongId(@Param("songId") String songId); @Modifying + @Transactional @Query("DELETE FROM JournalSong js WHERE js.songId = :songId") int deleteBySongId(@Param("songId") String songId); } diff --git a/luoo_music/src/main/java/com/luoo/music/dao/JournalTagDao.java b/luoo_music/src/main/java/com/luoo/music/dao/JournalTagDao.java index 87449c4..059ea83 100644 --- a/luoo_music/src/main/java/com/luoo/music/dao/JournalTagDao.java +++ b/luoo_music/src/main/java/com/luoo/music/dao/JournalTagDao.java @@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -24,6 +25,7 @@ public interface JournalTagDao extends JpaRepository, JpaSpec List findTagsByJournalId(@Param("journalId") String journalId); @Modifying + @Transactional @Query("DELETE FROM JournalTag jt WHERE jt.journalId = :journalId") int deleteByJournalId(@Param("journalId") String journalId); } diff --git a/luoo_music/src/main/java/com/luoo/music/dao/SongInfoDao.java b/luoo_music/src/main/java/com/luoo/music/dao/SongInfoDao.java index d3bb7bb..d0d5ae1 100644 --- a/luoo_music/src/main/java/com/luoo/music/dao/SongInfoDao.java +++ b/luoo_music/src/main/java/com/luoo/music/dao/SongInfoDao.java @@ -6,9 +6,9 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; import java.util.List; -import java.util.Set; /** * @author locust @@ -16,10 +16,12 @@ import java.util.Set; public interface SongInfoDao extends JpaRepository, JpaSpecificationExecutor { @Modifying + @Transactional @Query("UPDATE SongInfo s SET s.state = :state WHERE s.id = :id") int updateSongState(@Param("id") String id, @Param("state") String state); @Modifying + @Transactional @Query("UPDATE SongInfo s SET s.lyric = :lyric WHERE s.id = :id") int updateSongLyric(@Param("id") String id, @Param("lyric") String lyric); diff --git a/luoo_music/src/main/java/com/luoo/music/dao/SongTagDao.java b/luoo_music/src/main/java/com/luoo/music/dao/SongTagDao.java index 7491c13..2d6f574 100644 --- a/luoo_music/src/main/java/com/luoo/music/dao/SongTagDao.java +++ b/luoo_music/src/main/java/com/luoo/music/dao/SongTagDao.java @@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -14,13 +15,14 @@ import java.util.List; */ public interface SongTagDao extends JpaRepository, JpaSpecificationExecutor { - @Query("SELECT st.tagId FROM SongTag st WHERE st.songId = :id") - List findTagsBySongId(@Param("id") String id); + @Query("SELECT st.tagId FROM SongTag st WHERE st.songId = :songId") + List findTagIdsBySongId(@Param("songId") String songId); - @Query("SELECT st FROM SongTag st WHERE st.songId IN :ids ORDER BY st.id ") - List findBySongId(@Param("ids") List ids); + @Query("SELECT st FROM SongTag st WHERE st.songId IN :songIds ORDER BY st.id ") + List findBySongIds(@Param("songIds") List songIds); @Modifying - @Query("DELETE FROM SongTag st WHERE st.songId = :id") - int deleteBySongId(@Param("id") String id); + @Transactional + @Query("DELETE FROM SongTag st WHERE st.songId = :songId") + int deleteBySongId(@Param("songId") String songId); } diff --git a/luoo_music/src/main/java/com/luoo/music/pojo/Journal.java b/luoo_music/src/main/java/com/luoo/music/pojo/Journal.java index a0fa22a..b46980c 100644 --- a/luoo_music/src/main/java/com/luoo/music/pojo/Journal.java +++ b/luoo_music/src/main/java/com/luoo/music/pojo/Journal.java @@ -60,11 +60,11 @@ public class Journal implements Serializable{ /** * 浏览量 */ - private Integer visits; + private Long visits; /** * 评论量 */ - private Integer comment; + private Long comment; /** * 发布时间 */ diff --git a/luoo_music/src/main/java/com/luoo/music/pojo/JournalSongCount.java b/luoo_music/src/main/java/com/luoo/music/pojo/JournalSongCount.java deleted file mode 100644 index 2784add..0000000 --- a/luoo_music/src/main/java/com/luoo/music/pojo/JournalSongCount.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.luoo.music.pojo; - -/** - * 自定义对象 - * @author locust - */ -public interface JournalSongCount { - - String getJournalNo(); - - Long getSongCount(); -} diff --git a/luoo_music/src/main/java/com/luoo/music/request/cms/JournalAddModel.java b/luoo_music/src/main/java/com/luoo/music/request/cms/JournalAddModel.java index 078df15..c38cd0d 100644 --- a/luoo_music/src/main/java/com/luoo/music/request/cms/JournalAddModel.java +++ b/luoo_music/src/main/java/com/luoo/music/request/cms/JournalAddModel.java @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.constraints.NotBlank; import java.util.List; /** @@ -13,9 +14,11 @@ import java.util.List; @ApiModel(value = "增加或修改期刊对象") public class JournalAddModel { + @NotBlank(message = "期刊的期刊必填") @ApiModelProperty(value = "期刊编号") private String journalNo; + @NotBlank(message = "期刊的标题必填") @ApiModelProperty(value = "期刊标题") private String title; @@ -25,12 +28,14 @@ public class JournalAddModel { @ApiModelProperty(value = "发布人ID") private String userId; + @NotBlank(message = "期刊的封面必填") @ApiModelProperty(value = "期刊封面路径") private String image; @ApiModelProperty(value = "关联歌曲,音乐ID") private List songs; + @NotBlank(message = "期刊的文案必填") @ApiModelProperty(value = "期刊内容") private String content; } diff --git a/luoo_music/src/main/java/com/luoo/music/request/cms/JournalPublishReq.java b/luoo_music/src/main/java/com/luoo/music/request/cms/JournalPublishReq.java new file mode 100644 index 0000000..1f7fbcb --- /dev/null +++ b/luoo_music/src/main/java/com/luoo/music/request/cms/JournalPublishReq.java @@ -0,0 +1,19 @@ +package com.luoo.music.request.cms; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author locust + */ +@Data +@ApiModel(value = "期刊发布请求对象") +public class JournalPublishReq { + + @ApiModelProperty(value = "是否定时发布,0:否,1:是") + private String isScheduled; + + @ApiModelProperty(value = "定时发布时间,yyyy-MM-dd HH:mm:ss") + private String pubTime; +} diff --git a/luoo_music/src/main/java/com/luoo/music/request/cms/JournalQueryModel.java b/luoo_music/src/main/java/com/luoo/music/request/cms/JournalQueryModel.java index 9e423cf..72d050b 100644 --- a/luoo_music/src/main/java/com/luoo/music/request/cms/JournalQueryModel.java +++ b/luoo_music/src/main/java/com/luoo/music/request/cms/JournalQueryModel.java @@ -28,6 +28,6 @@ public class JournalQueryModel { @ApiModelProperty(value = "结束时间") private String end; - @ApiModelProperty(value = "标签ID") + @ApiModelProperty(value = "标签ID, 各种类型的标签") private List tags; } diff --git a/luoo_music/src/main/java/com/luoo/music/request/cms/SongAddModel.java b/luoo_music/src/main/java/com/luoo/music/request/cms/SongAddModel.java index a6e2a2d..1caa4de 100644 --- a/luoo_music/src/main/java/com/luoo/music/request/cms/SongAddModel.java +++ b/luoo_music/src/main/java/com/luoo/music/request/cms/SongAddModel.java @@ -42,4 +42,7 @@ public class SongAddModel { @ApiModelProperty(value = "歌曲时长") private Long duration; + + @ApiModelProperty(value = "歌曲状态,0:停用,1:启用") + private String state; } diff --git a/luoo_music/src/main/java/com/luoo/music/response/cms/JournalVO.java b/luoo_music/src/main/java/com/luoo/music/response/cms/JournalVO.java index 17cb351..5bbd874 100644 --- a/luoo_music/src/main/java/com/luoo/music/response/cms/JournalVO.java +++ b/luoo_music/src/main/java/com/luoo/music/response/cms/JournalVO.java @@ -26,17 +26,17 @@ public class JournalVO { @ApiModelProperty(value = "期刊封面") private String image; - @ApiModelProperty(value = "期刊标签") + @ApiModelProperty(value = "期刊标签, 标签ID的一个集合") private List tag; @ApiModelProperty(value = "歌曲数") - private long songCount; + private Long songCount; @ApiModelProperty(value = "评论数") - private long comment; + private Long comment; @ApiModelProperty(value = "播放数") - private long visits; + private Long visits; @ApiModelProperty(value = "发布作者id") private String userId; diff --git a/luoo_music/src/main/java/com/luoo/music/service/CMSJournalService.java b/luoo_music/src/main/java/com/luoo/music/service/CMSJournalService.java index ac3f3ff..c5e70aa 100644 --- a/luoo_music/src/main/java/com/luoo/music/service/CMSJournalService.java +++ b/luoo_music/src/main/java/com/luoo/music/service/CMSJournalService.java @@ -5,13 +5,14 @@ import api.Result; import com.luoo.music.dao.*; import com.luoo.music.pojo.*; import com.luoo.music.request.cms.JournalAddModel; +import com.luoo.music.request.cms.JournalPublishReq; import com.luoo.music.request.cms.JournalQueryModel; import com.luoo.music.response.cms.JournalVO; import com.luoo.music.response.cms.SongVO; import com.luoo.music.util.Constants; -import com.luoo.music.util.UploadUtil; import dto.UserLoginDto; import org.apache.commons.lang.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -26,9 +27,7 @@ import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; -import java.io.File; import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -55,8 +54,6 @@ public class CMSJournalService { @Autowired private JwtUtil jwtUtil; - private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - /** * 分页 + 条件检索 @@ -93,15 +90,15 @@ public class CMSJournalService { response.setJournalNo(Constants.JOURNAL_NO_PREF + item.getJournalNo()); response.setTitle(item.getTitle()); response.setImage(item.getImage()); - response.setCreateTime(item.getCreateTime().format(formatter)); + response.setCreateTime(item.getCreateTime().format(Constants.formatter)); response.setState(item.getState()); response.setIsPublish(item.getIsPublish()); if (!Objects.isNull(item.getPubTime())) { - response.setPubTime(item.getPubTime().format(formatter)); + response.setPubTime(item.getPubTime().format(Constants.formatter)); } response.setUserId(item.getUserId()); response.setUserName(item.getUserName()); - response.setSongCount(songCountMap.get(item.getId())); + response.setSongCount(songCountMap.get(item.getJournalNo())); response.setTag(journalTagMap.get(item.getId())); response.setVisits(item.getVisits()); response.setComment(item.getComment()); @@ -157,8 +154,11 @@ public class CMSJournalService { private Map songCountInfo(List journalNos) { Map songCountMap = new HashMap<>(); if (!CollectionUtils.isEmpty(journalNos)) { - List journalSongCountList = journalSongDao.findSongCountByJournalNos(journalNos); - songCountMap = journalSongCountList.stream().collect(Collectors.toMap(JournalSongCount::getJournalNo, JournalSongCount::getSongCount)); + List> journalSongCountList = journalSongDao.findSongCountByJournalNos(journalNos); + songCountMap = journalSongCountList.stream() + .collect(Collectors.toMap( + map -> String.valueOf(map.get("journalNo")), + map -> Long.valueOf(String.valueOf(map.get("songCount"))))); } return songCountMap; } @@ -201,7 +201,8 @@ public class CMSJournalService { if (byJournalNo.size() > 0) { return Result.failed("保存失败,期刊编号已存在"); } - String image = moveJournalImage(param); + String srcKey = param.getImage().substring(param.getImage().indexOf(Constants.TEMP_KEY_PREFIX)); + String image = moveJournalImage(srcKey, param); if (StringUtils.isNotBlank(image)) { Journal journal = buildJournal(null, param, token); String id = String.valueOf(idWorker.nextId()); @@ -220,12 +221,11 @@ public class CMSJournalService { * @param param * @return */ - private String moveJournalImage(JournalAddModel param) { + private String moveJournalImage(String srcKey, JournalAddModel param) { String image = param.getImage(); - String srcKey = image.substring(image.indexOf(Constants.TEMP_KEY_PREFIX)); String suffix = image.substring(image.lastIndexOf(Constants.DOT)); - String destKeySuffix = String.format("%05d/00%s", param.getJournalNo(), suffix); - String destKey = Constants.IMAGE_KEY_PREFIX + destKeySuffix; + String destKeySuffix = String.format("%05d/00%s", Integer.parseInt(param.getJournalNo()), suffix); + String destKey = Constants.IMAGE_KEY_PREFIX + destKeySuffix; int copy = s3Service.copy(Constants.BUCKET, srcKey, destKey); if (copy > 0) { return destKeySuffix; @@ -248,10 +248,12 @@ public class CMSJournalService { journal.setJournalNo(param.getJournalNo()); journal.setTitle(param.getTitle()); journal.setContent(param.getContent()); - UserLoginDto user = jwtUtil.getUserLoginDto(token); - journal.setUserId(user.getUserId()); - journal.setUserName(user.getNickName()); - journal.setUserType(user.getRoles()); + if (StringUtils.isNotBlank(token)) { + UserLoginDto user = jwtUtil.getUserLoginDto(token); + journal.setUserId(user.getUserId()); + journal.setUserName(user.getNickName()); + journal.setUserType(user.getRoles()); + } return journal; } @@ -358,16 +360,28 @@ public class CMSJournalService { if (byJournalNo.size() > 0) { return Result.failed("更新失败,期刊编号已存在"); } - Journal journal = buildJournal(id, param, token); Journal oldJournal = journalDao.findById(id).get(); - String image = null; + Journal journal = buildJournal(id, param, token); + String srcKey = null; if (param.getImage().contains(Constants.TEMP_KEY_PREFIX)) { - image = moveJournalImage(param); + srcKey = param.getImage().substring(param.getImage().indexOf(Constants.TEMP_KEY_PREFIX)); + } else { + if (!oldJournal.getJournalNo().equals(param.getJournalNo())) { + srcKey = param.getImage().substring(param.getImage().indexOf(Constants.IMAGE_KEY_PREFIX)); + } + } + if (StringUtils.isNotBlank(srcKey)) { + String image = moveJournalImage(srcKey, param); if (StringUtils.isBlank(image)) { Result.failed("更新失败"); } + journal.setImage(image); } - journal.setImage(image); + journal.setState(oldJournal.getState()); + journal.setIsPublish(oldJournal.getIsPublish()); + journal.setIsScheduled(oldJournal.getIsScheduled()); + journal.setVisits(oldJournal.getVisits()); + journal.setComment(oldJournal.getComment()); journalDao.save(journal); batchDeleteJournalRelatesInfo(id, oldJournal.getJournalNo()); batchSaveJournalRelatesInfo(id, param); @@ -387,19 +401,21 @@ public class CMSJournalService { /** * 发布期刊 * @param id - * @param scheduled - * @param pubTimeStr + * @param queryModel * @return */ - public Result publish(String id, String scheduled, String pubTimeStr) { + public Result publish(String id, JournalPublishReq queryModel) { + String scheduled = queryModel.getIsScheduled(); + String pubTimeStr = queryModel.getPubTime(); LocalDateTime pubTime = LocalDateTime.now(); if ("1".equals(scheduled)) { if (StringUtils.isNotBlank(pubTimeStr)){ - pubTime = LocalDateTime.parse(pubTimeStr, formatter); + pubTime = LocalDateTime.parse(pubTimeStr, Constants.formatter); journalDao.updateScheduledPubById(id, pubTime); } + } else { + journalDao.updatePubById(id, pubTime); } - journalDao.updatePubById(id, pubTime); return Result.success(); } @@ -411,7 +427,7 @@ public class CMSJournalService { */ public Result updateJournalState(String id, String state) { journalDao.updateJournalState(id, state); - return Result.success("更新成功"); + return Result.success(); } /** diff --git a/luoo_music/src/main/java/com/luoo/music/service/CMSSongService.java b/luoo_music/src/main/java/com/luoo/music/service/CMSSongService.java index 9548cb8..c8f2eb5 100644 --- a/luoo_music/src/main/java/com/luoo/music/service/CMSSongService.java +++ b/luoo_music/src/main/java/com/luoo/music/service/CMSSongService.java @@ -25,11 +25,11 @@ import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; -import java.io.*; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -57,8 +57,6 @@ public class CMSSongService { @Autowired private JwtUtil jwtUtil; - private DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); - /** * 分页 + 条件检索 * @param param @@ -96,7 +94,7 @@ public class CMSSongService { response.setSize(CommonUtil.formatSongSize(item.getSize())); response.setDuration(CommonUtil.formatSongDuration(item.getDuration())); response.setJournal(songJournalMap.get(id)); - response.setUpdateTime(df.format(item.getUpdateTime())); + response.setUpdateTime(item.getUpdateTime().format(Constants.formatter)); response.setState(item.getState()); response.setUserId(item.getUserId()); response.setUrl(item.getUrl()); @@ -166,7 +164,7 @@ public class CMSSongService { private Map> buildSongTagInfo(List ids) { Map> result = new HashMap<>(); - List bySongId = songTagDao.findBySongId(ids); + List bySongId = songTagDao.findBySongIds(ids); if (!CollectionUtils.isEmpty(bySongId)) { Set idSet = bySongId.stream().map(SongTag::getTagId).collect(Collectors.toSet()); List tagList = tagDao.findByIdIn(idSet); @@ -217,8 +215,8 @@ public class CMSSongService { song.setUrl(url); song.setImage(image); songDao.save(song); - batchSaveSongRelatesInfo(id, param); - return Result.success("新增成功"); + batchSaveSongTagInfo(id, param); + return Result.success(); } private SongInfo buildSong(String id, SongAddModel param, String token) { @@ -231,10 +229,12 @@ public class CMSSongService { song.setAlbum(param.getAlbum()); song.setSize(param.getSize()); song.setDuration(param.getDuration()); - UserLoginDto user = jwtUtil.getUserLoginDto(token); - song.setUserId(user.getUserId()); - song.setUserName(user.getNickName()); - song.setUserType(user.getRoles()); + if (StringUtils.isNotBlank(token)) { + UserLoginDto user = jwtUtil.getUserLoginDto(token); + song.setUserId(user.getUserId()); + song.setUserName(user.getNickName()); + song.setUserType(user.getRoles()); + } return song; } @@ -269,7 +269,7 @@ public class CMSSongService { * @param id * @param param */ - private void batchSaveSongRelatesInfo(String id, SongAddModel param) { + private void batchSaveSongTagInfo(String id, SongAddModel param) { if (!CollectionUtils.isEmpty(param.getTags())) { List songTagList = new ArrayList<>(); for (String item : param.getTags()) { @@ -283,6 +283,15 @@ public class CMSSongService { } } + /** + * 更新期刊中歌曲的信息 + * @param id + * @param param + */ + private void batchSaveSongJournalInfo(String id, SongAddModel param) { + // TODO + } + /** * 查询曲目详情 * @param id @@ -295,7 +304,7 @@ public class CMSSongService { response.setName(song.getName()); response.setArtist(song.getArtist()); response.setAlbum(song.getAlbum()); - response.setTags(songTagDao.findTagsBySongId(id)); + response.setTags(songTagDao.findTagIdsBySongId(id)); response.setUrl(Constants.SONG_RESOURCE_PREFIX + song.getUrl()); response.setImage(Constants.SONG_RESOURCE_PREFIX + song.getImage()); return Result.success(response); @@ -328,10 +337,12 @@ public class CMSSongService { } song.setImage(image); } + SongInfo oldSong = songDao.findById(id).get(); + song.setState(oldSong.getState()); songDao.save(song); songTagDao.deleteBySongId(id); - batchSaveSongRelatesInfo(id, param); - return Result.success("更新成功"); + batchSaveSongTagInfo(id, param); + return Result.success(); } /** @@ -345,7 +356,7 @@ public class CMSSongService { if ("0".equals(state)) { journalSongDao.deleteBySongId(id); } - return Result.success("更新成功"); + return Result.success(); } /** @@ -389,7 +400,7 @@ public class CMSSongService { s3Service.copy(Constants.BUCKET, key, destLyric); } } - return Result.success("更新成功"); + return Result.success(); } /** @@ -404,7 +415,7 @@ public class CMSSongService { } else { songDao.deleteById(id); songTagDao.deleteBySongId(id); - return Result.success("该歌曲已被删除"); + return Result.success(); } } @@ -422,17 +433,17 @@ public class CMSSongService { String keySuffix = id + "/00" + suffix; String key = Constants.SONG_KEY_PREFIX + keySuffix; int upload = s3Service.upload(Constants.BUCKET, key, file); - if (upload > 1) { + if (upload > 0) { SongInfo song = new SongInfo(); song.setId(id); song.setUrl(keySuffix); song.setSize(file.isEmpty() ? 0L : file.getSize()); - song.setDuration(CommonUtil.getSongDuration(Constants.SONG_RESOURCE_PREFIX + keySuffix)); + song.setDuration(CommonUtil.getSongDuration(file)); songDao.save(song); } } } - return Result.success("上传成功"); + return Result.success(); } private String readLyric(String lyricUrl) { diff --git a/luoo_music/src/main/java/com/luoo/music/service/S3Service.java b/luoo_music/src/main/java/com/luoo/music/service/S3Service.java index 1dbbf44..4ecb070 100644 --- a/luoo_music/src/main/java/com/luoo/music/service/S3Service.java +++ b/luoo_music/src/main/java/com/luoo/music/service/S3Service.java @@ -83,7 +83,7 @@ public class S3Service { resp.setFullUrl(Constants.RESOURCE_PREFIX + key); if (isSong) { resp.setSize(file.isEmpty() ? 0L : file.getSize()); - resp.setDuration(CommonUtil.getSongDuration(Constants.RESOURCE_PREFIX + key)); + resp.setDuration(CommonUtil.getSongDuration(file)); } resp.setFullUrl(Constants.RESOURCE_PREFIX + key); return Result.success(resp); diff --git a/luoo_music/src/main/java/com/luoo/music/util/CommonUtil.java b/luoo_music/src/main/java/com/luoo/music/util/CommonUtil.java index 3e6760d..984aeec 100644 --- a/luoo_music/src/main/java/com/luoo/music/util/CommonUtil.java +++ b/luoo_music/src/main/java/com/luoo/music/util/CommonUtil.java @@ -5,9 +5,8 @@ import org.apache.tika.parser.AutoDetectParser; import org.apache.tika.parser.ParseContext; import org.apache.tika.parser.Parser; import org.apache.tika.sax.BodyContentHandler; +import org.springframework.web.multipart.MultipartFile; -import java.io.File; -import java.io.FileInputStream; import java.io.InputStream; import java.text.DecimalFormat; @@ -18,17 +17,17 @@ public class CommonUtil { /** * 获取歌曲时长 - * @param songPath + * @param file * @return */ - public static long getSongDuration(String songPath) { + public static long getSongDuration(MultipartFile file) { try { - File audioFile = new File(songPath); - InputStream inputStream = new FileInputStream(audioFile); + InputStream inputStream = file.getInputStream(); Parser parser = new AutoDetectParser(); Metadata metadata = new Metadata(); BodyContentHandler handler = new BodyContentHandler(); - parser.parse(inputStream, handler, metadata, new ParseContext()); + ParseContext parseContext = new ParseContext(); + parser.parse(inputStream, handler, metadata, parseContext); String durationString = metadata.get("xmpDM:duration"); long duration = Long.parseLong(durationString); inputStream.close(); @@ -45,8 +44,9 @@ public class CommonUtil { * @return */ public static String formatSongSize(long size){ - DecimalFormat df = new DecimalFormat("#.00"); - String fileSizeString = df.format((double) size / 1048576) + "MB"; + double fileSizeInMB = size / (1024.0 * 1024.0); + DecimalFormat df = new DecimalFormat("0.##"); + String fileSizeString = df.format(fileSizeInMB) + " MB"; return fileSizeString; } diff --git a/luoo_music/src/main/java/com/luoo/music/util/Constants.java b/luoo_music/src/main/java/com/luoo/music/util/Constants.java index 993f04e..5719bb2 100644 --- a/luoo_music/src/main/java/com/luoo/music/util/Constants.java +++ b/luoo_music/src/main/java/com/luoo/music/util/Constants.java @@ -1,11 +1,17 @@ package com.luoo.music.util; +import java.time.format.DateTimeFormatter; + /** * @author locust */ public class Constants { - public static String JOURNAL_NO_PREF = "VOL•"; + // public static String JOURNAL_NO_PREF = "VOL•"; + public static String JOURNAL_NO_PREF = "VOL "; + + public static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + private String SONG_PREF = "song"; diff --git a/luoo_music/src/main/resources/bootstrap.yml b/luoo_music/src/main/resources/bootstrap.yml index 8ee0fb0..57f74fb 100644 --- a/luoo_music/src/main/resources/bootstrap.yml +++ b/luoo_music/src/main/resources/bootstrap.yml @@ -5,4 +5,8 @@ spring: profile: dev label: master uri: http://116.62.145.60:12000 -# uri: http://127.0.0.1:12000 \ No newline at end of file +# uri: http://127.0.0.1:12000 + servlet: + multipart: + max-file-size: 20MB + max-request-size: 200MB \ No newline at end of file