瀏覽代碼

add:平台音乐标签

liujunchi 3 年之前
父節點
當前提交
920746238e

+ 2 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import javax.validation.Valid;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment;
+import com.yonge.cooleshow.biz.dal.support.Query;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.BeanUtils;
@@ -113,7 +114,7 @@ public class MusicSheetController extends BaseController {
 
     @ApiOperation(value = "分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/list", consumes="application/json", produces="application/json")
-    public HttpResponseResult<Object> list(@RequestBody MusicSheetDto musicSheetDto) {
+    public HttpResponseResult<Object> list(@RequestBody MusicSheetDto musicSheetDto, Query query) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed("用户信息获取失败");

+ 35 - 32
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicTagController.java

@@ -1,24 +1,22 @@
 package com.yonge.cooleshow.admin.controller;
 
-import java.util.List;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-
+import com.yonge.cooleshow.biz.dal.dto.MusicTagSaveDto;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicTagSearch;
+import com.yonge.cooleshow.biz.dal.service.MusicTagService;
 import com.yonge.cooleshow.biz.dal.support.Condition;
+import com.yonge.cooleshow.biz.dal.vo.MusicTagVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
 import com.yonge.toolset.utils.string.StringUtil;
-import io.swagger.annotations.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
-
-import com.yonge.cooleshow.biz.dal.vo.MusicTagVo;
-import com.yonge.cooleshow.biz.dal.dto.search.MusicTagSearch;
-import com.yonge.cooleshow.biz.dal.entity.MusicTag;
-import com.yonge.cooleshow.biz.dal.service.MusicTagService;
-
 @RestController
 @RequestMapping("/MusicTag")
 @Api(value = "音乐标签表", tags = "音乐标签表")
@@ -32,12 +30,12 @@ public class MusicTagController extends BaseController {
      */
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入musicTag")
-    public HttpResponseResult<MusicTagVo> detail(@PathVariable("id") Long id) {
+    public HttpResponseResult<MusicTagVo> detail(@ApiParam(value = "标签编号", required = true) @PathVariable("id") Long id) {
     	return succeed(musicTagService.detail(id));
 	}
-    
+
     /**
-     * 查询分页
+     * 查询分页tree
      */
     @GetMapping("/page")
     @ApiOperation(value = "查询分页", notes = "传入musicTag")
@@ -45,43 +43,48 @@ public class MusicTagController extends BaseController {
 		IPage<MusicTagVo> pages = musicTagService.selectPage(Condition.getPage(query), query);
         return succeed(Condition.pageInfo(pages));
 	}
-    
+
     /**
 	 * 新增
 	 */
 	@PostMapping("/save")
 	@ApiOperation(value = "新增", notes = "传入musicTag")
-	public HttpResponseResult save(@Valid @RequestBody MusicTag musicTag) {
-    	return status(musicTagService.save(musicTag));
+	public HttpResponseResult<Boolean> save(@Validated(MusicTagSaveDto.Create.class) @RequestBody MusicTagSaveDto musicTagSaveDto) {
+		musicTagService.createMusicTag(musicTagSaveDto);
+		return succeed();
 	}
-    
+
     /**
 	 * 修改
 	 */
 	@PostMapping("/update")
 	@ApiOperation(value = "修改", notes = "传入musicTag")
-	public HttpResponseResult update(@Valid @RequestBody MusicTag musicTag) {
-        return status(musicTagService.updateById(musicTag));
+	public HttpResponseResult<Boolean> update(@Validated(MusicTagSaveDto.Update.class) @RequestBody MusicTagSaveDto musicTagSaveDto) {
+		musicTagService.updateMusicTag(musicTagSaveDto);
+		return succeed();
 	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入musicTag")
-	public HttpResponseResult submit(@RequestBody MusicTag musicTag) {
-        return status(musicTagService.saveOrUpdate(musicTag));
-    }
 
  	/**
 	 * 删除
 	 */
 	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
+	@ApiOperation(value = "逻辑删除", notes = "传入id")
+	public HttpResponseResult<Boolean> remove(@ApiParam(value = "标签编号", required = true) @RequestParam Long id) {
+        if (StringUtil.isEmpty(id)) {
+			return failed("参数不能为空");
+		}
+		return status(musicTagService.del(id));
+	}
+
+	/**
+	 * 启用/停用
+	 */
+	@PostMapping("/state")
+	@ApiOperation(value = "启用/停用", notes = "传入id")
+	public HttpResponseResult<Boolean> state(@ApiParam(value = "标签编号", required = true) @RequestParam Long id) {
+		if (StringUtil.isEmpty(id)) {
 			return failed("参数不能为空");
 		}
-		return status(musicTagService.removeByIds(StringUtil.toLongList(ids)));
+		return status(musicTagService.state(id));
 	}
 }

+ 30 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicTagDao.java

@@ -4,27 +4,49 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.enums.StateEnum;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.MusicTag;
 import com.yonge.cooleshow.biz.dal.vo.MusicTagVo;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicTagSearch;
 
 
-public interface MusicTagDao extends BaseMapper<MusicTag>{
+public interface MusicTagDao extends BaseMapper<MusicTag> {
 	/**
 	 * 查询详情
-     * @author liweifan
-     * @date 2022-03-29 17:47:57
-     * @return: com.yonge.cooleshow.biz.dal.vo.MusicTagVo
+	 *
+	 * @author liweifan
+	 * @date 2022-03-29 17:47:57
+	 * @return: com.yonge.cooleshow.biz.dal.vo.MusicTagVo
 	 */
 	MusicTagVo detail(@Param("id") Long id);
 
 	/**
 	 * 分页查询
-     * @author liweifan
-     * @date 2022-03-29 17:47:57
-     * @return: com.yonge.cooleshow.biz.dal.vo.MusicTagVo
+	 *
+	 * @author liweifan
+	 * @date 2022-03-29 17:47:57
+	 * @return: com.yonge.cooleshow.biz.dal.vo.MusicTagVo
 	 */
 	List<MusicTagVo> selectPage(@Param("page") IPage page, @Param("param") MusicTagSearch musicTag);
-	
+
+	/**
+	 * 根据父级id查询子级列表
+	 *
+	 * @param id        父级id
+	 * @param state     状态
+	 * @param idAndName 标签编号/名称
+	 * @return List
+	 */
+	List<MusicTagVo> getChildren(@Param("id") Long id, @Param("state") StateEnum state, @Param("idAndName") String idAndName);
+
+
+	/**
+	 * 根据父级id集合查询子集标签
+	 *
+	 * @param longList 父级id集合
+	 * @param state    状态
+	 * @return 子集集合
+	 */
+	List<MusicTagVo> getChildrenByParentIdList(@Param("longList") List<Long> longList, @Param("state") StateEnum state);
 }

+ 53 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/MusicTagSaveDto.java

@@ -0,0 +1,53 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.groups.Default;
+
+/**
+ * Description
+ *
+ * @author liujc
+ * @date 2022-03-30
+ */
+public class MusicTagSaveDto {
+
+    public interface Create extends Default{}
+    public interface Update extends Default{}
+
+
+    @ApiModelProperty("标签id ")
+    private Long id;
+
+    @ApiModelProperty("父级标签id ")
+    private Long parentTagId;
+
+    @ApiModelProperty(value = "标签名称 ",required = true)
+    @NotBlank(message = "标签名称不能为空")
+    private String name;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getParentTagId() {
+        return parentTagId;
+    }
+
+    public void setParentTagId(Long parentTagId) {
+        this.parentTagId = parentTagId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 23 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicTagSearch.java

@@ -1,7 +1,9 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
+import com.yonge.cooleshow.biz.dal.enums.StateEnum;
 import com.yonge.cooleshow.biz.dal.support.Query;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 
 /**
  * @Author: liweifan
@@ -11,4 +13,25 @@ import io.swagger.annotations.ApiModel;
 public class MusicTagSearch extends Query{
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty("标签编号/名称")
+	private String idAndName;
+
+	@ApiModelProperty("标签状态(0:启用,1:禁用)")
+	private StateEnum state;
+
+	public String getIdAndName() {
+		return idAndName;
+	}
+
+	public void setIdAndName(String idAndName) {
+		this.idAndName = idAndName;
+	}
+
+	public StateEnum getState() {
+		return state;
+	}
+
+	public void setState(StateEnum state) {
+		this.state = state;
+	}
 }

+ 60 - 16
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicTag.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.yonge.cooleshow.biz.dal.enums.StateEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -21,40 +23,59 @@ public class MusicTag implements Serializable {
 	private static final long serialVersionUID = 1L;
     @ApiModelProperty("标签id ")
     @TableId(value = "id_", type = IdType.AUTO)
-    private Integer id;
+    private Long id;
     @ApiModelProperty("父级标签id ")
 	@TableField(value = "parent_tag_id_")
-    private Integer parentTagId;
-    @ApiModelProperty("标签名称 ")
+    private Long parentTagId;
+
+    @ApiModelProperty(value = "标签名称 ",required = true)
 	@TableField(value = "name_")
     private String name;
+
+    @TableField(value = "state_")
+    @ApiModelProperty(value = "标签状态(0:启用,1:禁用)")
+    private StateEnum state;
+
 	@TableField(value = "del_flag_")
-    private Byte delFlag;
+    @ApiModelProperty(value = "假删标识(0:正常,1:删除)")
+    private YesOrNoEnum delFlag;
+
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date createTime;
+
+
+    @TableField("create_by_")
+    @ApiModelProperty(value = "创建人(后台平台用户)")
+    private Long createBy;  //创建人(老师或者是后台平台用户)
+
 	@TableField(value = "update_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date updateTime;
 
-	public Integer getId() {
+
+    @TableField("update_by_")
+    @ApiModelProperty(value = "更新人(后台平台用户)")
+    private Long updateBy;  //更新人(老师或者是后台平台用户)
+
+	public Long getId() {
         return id;
     }
 
-    public void setId(Integer id) {
+    public void setId(Long id) {
         this.id = id;
     }
-    
-	public Integer getParentTagId() {
+
+	public Long getParentTagId() {
         return parentTagId;
     }
 
-    public void setParentTagId(Integer parentTagId) {
+    public void setParentTagId(Long parentTagId) {
         this.parentTagId = parentTagId;
     }
-    
+
 	public String getName() {
         return name;
     }
@@ -62,15 +83,15 @@ public class MusicTag implements Serializable {
     public void setName(String name) {
         this.name = name;
     }
-    
-	public Byte getDelFlag() {
+
+	public YesOrNoEnum getDelFlag() {
         return delFlag;
     }
 
-    public void setDelFlag(Byte delFlag) {
+    public void setDelFlag(YesOrNoEnum delFlag) {
         this.delFlag = delFlag;
     }
-    
+
 	public Date getCreateTime() {
         return createTime;
     }
@@ -78,7 +99,7 @@ public class MusicTag implements Serializable {
     public void setCreateTime(Date createTime) {
         this.createTime = createTime;
     }
-    
+
 	public Date getUpdateTime() {
         return updateTime;
     }
@@ -86,5 +107,28 @@ public class MusicTag implements Serializable {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
-    
+
+    public StateEnum getState() {
+        return state;
+    }
+
+    public void setState(StateEnum state) {
+        this.state = state;
+    }
+
+    public Long getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(Long createBy) {
+        this.createBy = createBy;
+    }
+
+    public Long getUpdateBy() {
+        return updateBy;
+    }
+
+    public void setUpdateBy(Long updateBy) {
+        this.updateBy = updateBy;
+    }
 }

+ 33 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OpenEnum.java

@@ -0,0 +1,33 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+/**
+ * Description 标签列表是否展开列表
+ *
+ * @author: liujunchi
+ * @date: 2022-03-30
+ */
+public enum OpenEnum implements BaseEnum<Integer, OpenEnum> {
+    OPEN(0,"展开"),
+    CLOSE(1, "不展开");
+    @EnumValue
+    private Integer code;
+
+    private String msg;
+
+    OpenEnum(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    @Override
+    public Integer getCode() {
+        return this.code;
+    }
+}

+ 33 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/StateEnum.java

@@ -0,0 +1,33 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+/**
+ * Description
+ *
+ * @author: liujunchi
+ * @date: 2022-03-30
+ */
+public enum StateEnum implements BaseEnum<Integer, StateEnum> {
+    ENABLE(0,"启用"),
+    STOP(1, "停用");
+    @EnumValue
+    private Integer code;
+
+    private String msg;
+
+    StateEnum(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    @Override
+    public Integer getCode() {
+        return this.code;
+    }
+}

+ 33 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicTagService.java

@@ -2,9 +2,10 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.yonge.cooleshow.biz.dal.vo.MusicTagVo;
+import com.yonge.cooleshow.biz.dal.dto.MusicTagSaveDto;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicTagSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicTag;
+import com.yonge.cooleshow.biz.dal.vo.MusicTagVo;
 
 /**
  * 音乐标签表 服务类
@@ -26,4 +27,35 @@ public interface MusicTagService extends IService<MusicTag>  {
  	 * @date 2022-03-29
      */
     IPage<MusicTagVo> selectPage(IPage<MusicTagVo> page, MusicTagSearch query);
+
+	/**
+	 * 假删除标签
+	 *
+	 * @param musicTagId 标签ID
+	 * @return boolean
+	 */
+    boolean del(Long musicTagId);
+
+	/**
+	 * 启用/停用 标签
+	 *
+	 * @param musicTagId 标签ID
+	 * @return boolean
+	 */
+	boolean state(Long musicTagId);
+
+	/**
+	 * 创建音乐标签
+	 *
+	 * @param musicTagSaveDto 音乐标签信息
+	 */
+    void createMusicTag(MusicTagSaveDto musicTagSaveDto);
+
+	/**
+	 * 修改音乐标签
+	 *
+	 * @param musicTagSaveDto 音乐标签信息
+	 */
+	void updateMusicTag(MusicTagSaveDto musicTagSaveDto);
+
 }

+ 146 - 9
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicTagServiceImpl.java

@@ -1,27 +1,164 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-import com.yonge.cooleshow.biz.dal.entity.MusicTag;
-import com.yonge.cooleshow.biz.dal.vo.MusicTagVo;
-import com.yonge.cooleshow.biz.dal.dto.search.MusicTagSearch;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.MusicTagDao;
+import com.yonge.cooleshow.biz.dal.dto.MusicTagSaveDto;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicTagSearch;
+import com.yonge.cooleshow.biz.dal.entity.MusicTag;
+import com.yonge.cooleshow.biz.dal.enums.OpenEnum;
+import com.yonge.cooleshow.biz.dal.enums.StateEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicTagService;
+import com.yonge.cooleshow.biz.dal.vo.MusicTagVo;
+import com.yonge.cooleshow.common.exception.BizException;
+import jodd.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 
 @Service
 public class MusicTagServiceImpl extends ServiceImpl<MusicTagDao, MusicTag> implements MusicTagService {
 
+
+    @Autowired
+    private MusicTagDao musicTagDao;
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
 	@Override
     public MusicTagVo detail(Long id) {
-        MusicTagVo detail = baseMapper.detail(id);
-        return detail;
+        return baseMapper.detail(id);
     }
-    
+
      @Override
     public IPage<MusicTagVo> selectPage(IPage<MusicTagVo> page, MusicTagSearch query){
-        return page.setRecords(baseMapper.selectPage(page, query));
+         IPage<MusicTagVo> musicTagVoIPage = page.setRecords(baseMapper.selectPage(page, query));
+         // 将父类的id 拿出来,集体查出子集
+         List<Long> longList = musicTagVoIPage
+                 .getRecords()
+                 .stream()
+                 .map(MusicTag::getId)
+                 .collect(Collectors.toList());
+
+         List<MusicTagVo> musicTagVoList = musicTagDao.getChildrenByParentIdList(longList,query.getState());
+
+         // 根据父级id, 将子集分类
+         Map<String, List<MusicTagVo>> musicTagMap = musicTagVoList.stream()
+                                                                .collect(Collectors.groupingBy( vo -> vo.getParentTagId().toString()));
+         musicTagVoIPage.getRecords()
+                 .forEach(musicTagVo -> {
+                     List<MusicTagVo> childrenList = musicTagMap.get(musicTagVo.getId().toString());
+                     // 如果没有按名称查询 或 父级标签包含了名称 , 展示所有子集 标签列表子集收起
+                     if (StringUtil.isBlank(query.getIdAndName()) || musicTagVo.getName().contains(query.getIdAndName())) {
+                         musicTagVo.setChildren(childrenList);
+                     } else {
+                         // 如果名称查询中,父级不包含名称,子集包含,只展示包含的子集,并且默认展开子集列表
+                         musicTagVo.setOpen(OpenEnum.OPEN);
+                         List<MusicTagVo> childrenNameList = childrenList.stream()
+                                                                .filter(vo -> vo.getName()
+                                                                                .contains(query.getIdAndName()))
+                                                                .collect(Collectors.toList());
+                         musicTagVo.setChildren(childrenNameList);
+                     }
+                 });
+         return musicTagVoIPage;
+     }
+
+    @Override
+    public boolean del(Long musicTagId) {
+        MusicTag musicTag = new MusicTag();
+        musicTag.setId(musicTagId);
+        musicTag.setDelFlag(YesOrNoEnum.YES);
+        return this.updateById(musicTag);
+    }
+
+    @Override
+    public boolean state(Long musicTagId) {
+        MusicTag tag = this.getById(musicTagId);
+        if (Objects.isNull(tag)) {
+            throw new BizException("标签信息不存在");
+        }
+        MusicTag musicTag = new MusicTag();
+        musicTag.setId(musicTagId);
+        if (tag.getState().getCode().equals(StateEnum.STOP.getCode())) {
+            musicTag.setState(StateEnum.ENABLE);
+        } else {
+            musicTag.setState(StateEnum.STOP);
+        }
+        return this.updateById(musicTag);
+    }
+
+    @Override
+    public void createMusicTag(MusicTagSaveDto musicTagSaveDto) {
+
+        if (checkNameRepeat(musicTagSaveDto.getName(), musicTagSaveDto.getId())) {
+            throw new BizException("标签名称重复");
+        }
+
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        MusicTag musicTag = new MusicTag();
+        musicTag.setDelFlag(YesOrNoEnum.NO);
+        musicTag.setState(StateEnum.STOP);
+        if (musicTagSaveDto.getParentTagId() == null) {
+            musicTag.setParentTagId(0L);
+        } else {
+            musicTag.setParentTagId(musicTagSaveDto.getParentTagId());
+        }
+        musicTag.setName(musicTagSaveDto.getName());
+        musicTag.setCreateTime(new Date());
+        musicTag.setCreateBy(sysUser.getId());
+        this.save(musicTag);
     }
-	
+
+    /**
+     * 检查标签名称重复
+     *
+     * @param name 名称
+     * @param id 标签id, 更新
+     * @return boolean
+     */
+    private boolean checkNameRepeat(String name,Long id) {
+        LambdaQueryChainWrapper<MusicTag> eq = this.lambdaQuery()
+                                                   .eq(MusicTag::getDelFlag, YesOrNoEnum.NO.getCode())
+                                                   .eq(MusicTag::getName, name);
+        if (id != null) {
+            eq.ne(MusicTag::getId,id);
+        }
+        return eq.count() != 0;
+    }
+
+    @Override
+    public void updateMusicTag(MusicTagSaveDto musicTagSaveDto) {
+
+        if (checkNameRepeat(musicTagSaveDto.getName(), musicTagSaveDto.getId())) {
+            throw new BizException("标签名称重复");
+        }
+
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        MusicTag musicTag = new MusicTag();
+        musicTag.setDelFlag(YesOrNoEnum.NO);
+        musicTag.setId(musicTagSaveDto.getId());
+        if (musicTagSaveDto.getParentTagId() == null) {
+            musicTag.setParentTagId(0L);
+        } else {
+            musicTag.setParentTagId(musicTagSaveDto.getParentTagId());
+        }
+        musicTag.setName(musicTagSaveDto.getName());
+        musicTag.setUpdateTime(new Date());
+        musicTag.setUpdateBy(sysUser.getId());
+        this.updateById(musicTag);
+    }
+
+
 }

+ 37 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicTagVo.java

@@ -1,7 +1,12 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
 import com.yonge.cooleshow.biz.dal.entity.MusicTag;
+import com.yonge.cooleshow.biz.dal.enums.OpenEnum;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * @Author: liweifan
@@ -11,4 +16,36 @@ import io.swagger.annotations.ApiModel;
 public class MusicTagVo extends MusicTag{
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty("更新人")
+	private String updateName;
+
+	@ApiModelProperty("是否展开标签(0:展开,1:不展开)")
+	private OpenEnum open = OpenEnum.CLOSE;
+
+	@ApiModelProperty("二级标签")
+	private List<MusicTagVo> children = new ArrayList<>();
+
+	public OpenEnum getOpen() {
+		return open;
+	}
+
+	public void setOpen(OpenEnum open) {
+		this.open = open;
+	}
+
+	public List<MusicTagVo> getChildren() {
+		return children;
+	}
+
+	public void setChildren(List<MusicTagVo> children) {
+		this.children = children;
+	}
+
+	public String getUpdateName() {
+		return updateName;
+	}
+
+	public void setUpdateName(String updateName) {
+		this.updateName = updateName;
+	}
 }

+ 68 - 8
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicTagMapper.xml

@@ -12,12 +12,15 @@
     
     <!-- 表字段 -->
     <sql id="baseColumns">
-         t.id_
-        , t.parent_tag_id_
-        , t.name_
-        , t.del_flag_
-        , t.create_time_
-        , t.update_time_
+         t.id_ as id
+        , t.parent_tag_id_ as parentTagId
+        , t.name_ as name
+        , t.state_ as state
+        , t.del_flag_ as delFlag
+        , t.create_time_ as createTime
+        , t.update_time_ as updateTime
+        , t.update_by_ as updateBy
+        , t.create_by_ as createBy
         </sql> 
     
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.MusicTagVo">
@@ -27,9 +30,66 @@
         where t.id_ = #{id}
     </select>
     
-    <select id="selectPage" resultMap="BaseResultMap">
+    <select id="selectPage"  resultType="com.yonge.cooleshow.biz.dal.vo.MusicTagVo">
 		SELECT         
-        	<include refid="baseColumns" />
+        	<include refid="baseColumns" />,
+            su.username_ as updateName
 		FROM music_tag t
+        left join sys_user su on t.update_by_ = su.id_
+        <where>
+            t.parent_tag_id_ = 0 and t.del_flag_ = 0
+            <if test="param.state != null">
+                and t.state_ = #{param.state}
+            </if>
+            <if test="param.idAndName != null and param.idAndName != ''">
+                and ( t.id_ like concat( '%',#{param.idAndName},'%') or
+                    t.name_ like  concat ('%',#{param.idAndName},'%') or
+                    exists(select mt.parent_tag_id_ from music_tag mt
+                        where mt.name_ like concat( '%',#{param.idAndName},'%')
+                        and mt.parent_tag_id_ = t.id_ and mt.del_flag_ = 0
+                    )
+                    )
+            </if>
+        </where>
 	</select>
+
+	<select id="getChildren" resultType="com.yonge.cooleshow.biz.dal.vo.MusicTagVo">
+        SELECT
+        <include refid="baseColumns" />,
+        su.username_ as updateName
+        FROM music_tag t
+        left join sys_user su on t.update_by_ = su.id_
+        <where>
+            t.del_flag_ = 0
+            <if test="id != null">
+                and t.parent_tag_id_ = #{id}
+            </if>
+            <if test="state != null">
+                and t.state_ = #{state}
+            </if>
+            <if test="idAndName != null and idAndName != ''">
+                and t.name_ like concat('%',#{idAndName},'%')
+            </if>
+        </where>
+    </select>
+
+	<select id="getChildrenByParentIdList" resultType="com.yonge.cooleshow.biz.dal.vo.MusicTagVo">
+        SELECT
+        <include refid="baseColumns" />,
+        su.username_ as updateName
+        FROM music_tag t
+        left join sys_user su on t.update_by_ = su.id_
+        <where>
+            t.del_flag_ = 0
+            <if test="longList != null and longList.size() != 0">
+                and t.parent_tag_id_ in
+                <foreach collection="longList" close=")" item="item" open="(" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="state != null">
+                and t.state_ = #{state}
+            </if>
+        </where>
+    </select>
 </mapper>