记得上下班打卡 | git大法好,push需谨慎

Commit 4575268b authored by wangyifan's avatar wangyifan

1.5 需求

parent 46a09ccb
package com.liquidnet.service.kylin.dto.param;
import com.liquidnet.service.kylin.entity.KylinArtist;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import java.time.LocalDateTime;
import java.util.List;
/**
* 艺人管理参数
*
* @author system
* @since 2026-02-04
*/
@Data
@ApiModel("艺人管理参数")
public class ArtistParam {
@ApiModelProperty(value = "艺人ID")
private String artistId;
@ApiModelProperty(value = "艺人名称")
private String artistName;
@ApiModelProperty(value = "艺人类型 1音乐人 2艺术家 3厂牌 4品牌方")
private Integer artistType;
@ApiModelProperty(value = "艺人头像")
private String avatarUrl;
@ApiModelProperty(value = "艺人简介")
private String introduction;
@ApiModelProperty(value = "艺人相册图片列表")
private List<String> albumImages;
@ApiModelProperty(value = "排序权重")
private Integer sort;
@ApiModelProperty(value = "状态 0禁用 1启用")
private Integer status;
@ApiModelProperty(value = "批量操作的ID列表")
private List<String> ids;
public KylinArtist getFields(String artistId, LocalDateTime createdAt) {
KylinArtist kylinArtist = new KylinArtist();
BeanUtils.copyProperties(this, kylinArtist);
if (artistId != null) {
kylinArtist.setArtistId(artistId);
}
if (createdAt != null) {
kylinArtist.setCreatedAt(createdAt);
}
kylinArtist.setUpdatedAt(LocalDateTime.now());
// 设置默认值
if (kylinArtist.getStatus() == null) {
kylinArtist.setStatus(1);
}
if (kylinArtist.getSort() == null) {
kylinArtist.setSort(0);
}
return kylinArtist;
}
}
package com.liquidnet.service.kylin.dto.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 艺人搜索参数
*
* @author system
* @since 2026-02-04
*/
@Data
@ApiModel("艺人搜索参数")
public class ArtistSearchParam {
@ApiModelProperty(value = "艺人名称")
private String artistName;
@ApiModelProperty(value = "艺人ID")
private String artistId;
@ApiModelProperty(value = "艺人类型 1音乐人 2艺术家 3厂牌 4品牌方")
private Integer artistType;
@ApiModelProperty(value = "开始日期")
private String beginDate;
@ApiModelProperty(value = "结束日期")
private String endDate;
@ApiModelProperty(value = "当前页码")
private Integer pageNum = 1;
@ApiModelProperty(value = "每页数量")
private Integer pageSize = 10;
}
package com.liquidnet.service.kylin.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 艺人详情VO
*
* @author system
* @since 2026-02-04
*/
@Data
@ApiModel("艺人详情VO")
public class ArtistVo {
@ApiModelProperty(value = "艺人ID")
private String artistId;
@ApiModelProperty(value = "艺人名称")
private String artistName;
@ApiModelProperty(value = "艺人类型 1音乐人 2艺术家 3厂牌 4品牌方")
private Integer artistType;
@ApiModelProperty(value = "艺人类型名称")
private String artistTypeName;
@ApiModelProperty(value = "艺人头像")
private String avatarUrl;
@ApiModelProperty(value = "艺人简介")
private String introduction;
@ApiModelProperty(value = "艺人相册图片列表")
private List<String> albumImages;
@ApiModelProperty(value = "关联演出")
private List<PerformanceVo> performanceVoList;
@ApiModelProperty(value = "关联商品")
private List<ProductVo> productVoList;
@ApiModelProperty(value = "排序权重")
private Integer sort;
@ApiModelProperty(value = "状态")
private Integer status;
@ApiModelProperty(value = "创建时间")
private String createdAt;
@ApiModelProperty(value = "更新时间")
private String updatedAt;
@Data
@ApiModel("演出VO")
public static class PerformanceVo{
@ApiModelProperty("演出ID")
private String performanceId;
@ApiModelProperty("演出名称")
private String title;
@ApiModelProperty("演出开始时间")
private String timeStart;
}
@Data
@ApiModel("商品VO")
private static class ProductVo {
}
}
package com.liquidnet.service.kylin.service.admin;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.kylin.entity.KylinArtist;
/**
* <p>
* 艺人管理 服务类
* </p>
*
* @author liquidnet
* @since 2026-02-04
*/
public interface IKylinArtistService extends IService<KylinArtist> {
}
package com.liquidnet.client.admin.web.controller.zhengzai.kylin;
import com.github.pagehelper.PageInfo;
import com.liquidnet.client.admin.common.annotation.Log;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.enums.BusinessType;
import com.liquidnet.client.admin.zhengzai.kylin.service.impl.KylinArtistServiceImpl;
import com.liquidnet.service.kylin.dao.KylinArtistDao;
import com.liquidnet.service.kylin.dto.param.ArtistParam;
import com.liquidnet.service.kylin.dto.param.ArtistSearchParam;
import com.liquidnet.service.kylin.dto.vo.ArtistVo;
import io.swagger.annotations.Api;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 艺人管理 后端管理控制器
* </p>
*
* @author liquidnet
* @since 2026-02-04
*/
@Api(tags = "艺人管理")
@Controller
@RequestMapping("/kylin/artist")
public class KylinArtistController extends BaseController {
private final String prefix = "zhengzai/kylin/artist";
@Value("${liquidnet.client.admin.platformUrl}")
private String platformUrl;
@Autowired
private KylinArtistServiceImpl kylinArtistService;
@GetMapping("/create")
@RequiresPermissions("kylin:artist:create")
public String create(ModelMap mmap) {
mmap.put("platformUrl", platformUrl);
return prefix + "/create";
}
@GetMapping("/update/{artistId}")
@RequiresPermissions("kylin:artist:update")
public String update(@PathVariable("artistId") String artistId, ModelMap mmap) {
ArtistVo result = kylinArtistService.detail(artistId);
mmap.put("ArtistVo", result);
mmap.put("platformUrl", platformUrl);
return prefix + "/update";
}
@RequiresPermissions("kylin:artist:list")
@GetMapping()
public String artists() {
return prefix + "/artists";
}
@RequiresPermissions("kylin:artist:detail")
@GetMapping("/detail/{artistId}")
public String detail(@PathVariable("artistId") String artistId, ModelMap mmap) {
ArtistVo result = kylinArtistService.detail(artistId);
mmap.put("ArtistVo", result);
return prefix + "/detail";
}
@RequiresPermissions("kylin:artist:list")
@PostMapping("list")
@ResponseBody
public TableDataInfo artistList(ArtistSearchParam param) {
PageInfo<KylinArtistDao> result = kylinArtistService.artistList(param);
return getDataTable(result.getList());
}
@Log(title = "创建艺人", businessType = BusinessType.INSERT)
@RequiresPermissions("kylin:artist:create")
@PostMapping("create")
@ResponseBody
public AjaxResult createSave(ArtistParam param, String albumImagesJson) {
// 校验艺人名称是否已存在
Boolean exists = kylinArtistService.checkArtistNameExists(param.getArtistName(), null);
if (exists) {
return error("艺人名称已存在,不可重复创建");
}
// 解析相册图片JSON数组
if (albumImagesJson != null && !albumImagesJson.isEmpty() && !albumImagesJson.equals("[]")) {
try {
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
List<String> albumImages = mapper.readValue(albumImagesJson,
mapper.getTypeFactory().constructCollectionType(List.class, String.class));
param.setAlbumImages(albumImages);
} catch (Exception e) {
return error("相册图片数据格式错误");
}
}
Boolean res = kylinArtistService.create(param);
if (res) {
return success();
} else {
return error("添加艺人失败");
}
}
@Log(title = "修改艺人", businessType = BusinessType.UPDATE)
@RequiresPermissions("kylin:artist:update")
@PostMapping("update")
@ResponseBody
public AjaxResult updateSave(ArtistParam param, String albumImagesJson) {
// 校验艺人名称是否已被其他艺人使用
Boolean exists = kylinArtistService.checkArtistNameExists(param.getArtistName(), param.getArtistId());
if (exists) {
return error("艺人名称已被其他艺人使用");
}
// 解析相册图片JSON数组
if (albumImagesJson != null && !albumImagesJson.isEmpty() && !albumImagesJson.equals("[]")) {
try {
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
List<String> albumImages = mapper.readValue(albumImagesJson,
mapper.getTypeFactory().constructCollectionType(List.class, String.class));
param.setAlbumImages(albumImages);
} catch (Exception e) {
return error("相册图片数据格式错误");
}
}
Boolean res = kylinArtistService.update(param);
if (res) {
return success();
} else {
return error("修改艺人失败");
}
}
@Log(title = "删除艺人", businessType = BusinessType.DELETE)
@RequiresPermissions("kylin:artist:delete")
@PostMapping("delete")
@ResponseBody
public AjaxResult delete(ArtistParam param) {
List<String> artistIds = param.getIds();
Boolean result = kylinArtistService.delete(artistIds);
if (result) {
return success("删除成功");
} else {
return error("删除失败");
}
}
/**
* 检查艺人名称是否存在
*/
@PostMapping("checkName")
@ResponseBody
public AjaxResult checkArtistName(String artistName, String artistId) {
Boolean exists = kylinArtistService.checkArtistNameExists(artistName, artistId);
if (exists) {
return error("艺人名称已存在");
}
return success();
}
}
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('艺人列表')"/>
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="formId">
<div class="select-list">
<ul>
<li>
<label>艺人名称:</label>
<input type="text" name="artistName" placeholder="请输入艺人名称"/>
</li>
<li>
<label>艺人类型:</label>
<select name="artistType">
<option value="">全部</option>
<option value="1">音乐人</option>
<option value="2">艺术家</option>
<option value="3">厂牌</option>
<option value="4">品牌方</option>
</select>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i
class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="kylin:artist:create">
<i class="fa fa-plus"></i> 添加
</a>
</div>
<div class="col-sm-12 select-table table-bordered">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer"/>
<script th:inline="javascript">
var updateFlag = [[${@permission.hasPermi('kylin:artist:update')}]];
var removeFlag = [[${@permission.hasPermi('kylin:artist:delete')}]];
var detailFlag = [[${@permission.hasPermi('kylin:artist:detail')}]];
var prefix = ctx + "kylin/artist";
$(function () {
var options = {
url: prefix + "/list",
updateUrl: prefix + "/update/{id}",
createUrl: prefix + "/create",
removeUrl: prefix + "/delete",
detailUrl: prefix + "/detail/{id}",
modalName: "艺人",
columns: [
{
field: 'artistId',
title: '艺人ID'
},
{
field: 'avatarUrl',
title: '艺人头像',
formatter: function(value, row, index) {
return $.table.imageView(value, "80", "80");
}
},
{
field: 'artistName',
title: '艺人名称'
},
{
field: 'artistTypeName',
title: '艺人类型',
},
{
field: 'createdAt',
title: '艺人入驻时间',
formatter: function(value, row, index) {
if (value) {
var date = new Date(value);
return date.getFullYear() + '-' +
String(date.getMonth() + 1).padStart(2, '0') + '-' +
String(date.getDate()).padStart(2, '0') + ' ' +
String(date.getHours()).padStart(2, '0') + ':' +
String(date.getMinutes()).padStart(2, '0') + ':' +
String(date.getSeconds()).padStart(2, '0');
}
return '';
}
},
{
field: 'performanceCount',
title: '关联演出',
formatter: function(value, row, index) {
return value || 0;
}
},
{
field: 'productCount',
title: '关联商品',
formatter: function(value, row, index) {
return value || 0;
}
},
{
title: '操作',
align: 'center',
formatter: function (value, row, index) {
var actions = [];
actions.push('<a class="btn btn-info btn-xs ' + detailFlag + '" href="javascript:void(0)" onclick="$.operate.detail(\'' + row.artistId + '\')"><i class="fa fa-eye"></i>详情</a> ');
actions.push('<a class="btn btn-success btn-xs ' + updateFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.artistId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
return actions.join('');
}
}]
};
$.table.init(options);
});
// 单条删除
function removeArtist(id) {
$.operate.remove(id, "删除后该艺人信息将无法被引用,也无法找回,确认要将该艺人删除吗?");
}
</script>
</body>
</html>
package com.liquidnet.client.admin.zhengzai.kylin.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.liquidnet.commons.lang.util.BeanUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.kylin.dao.KylinArtistDao;
import com.liquidnet.service.kylin.dto.param.ArtistParam;
import com.liquidnet.service.kylin.dto.param.ArtistSearchParam;
import com.liquidnet.service.kylin.dto.vo.ArtistVo;
import com.liquidnet.service.kylin.entity.KylinArtist;
import com.liquidnet.service.kylin.entity.KylinArtistAlbum;
import com.liquidnet.service.kylin.mapper.KylinArtistAlbumMapper;
import com.liquidnet.service.kylin.mapper.KylinArtistMapper;
import com.liquidnet.service.kylin.mapper.KylinArtistPerformanceMapper;
import com.liquidnet.service.kylin.service.admin.IKylinArtistService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
* 艺人管理 服务实现类
* </p>
*
* @author liquidnet
* @since 2026-02-04
*/
@Slf4j
@Service
public class KylinArtistServiceImpl extends ServiceImpl<KylinArtistMapper, KylinArtist> implements IKylinArtistService {
@Autowired
private KylinArtistMapper artistMapper;
@Autowired
private KylinArtistAlbumMapper artistAlbumMapper;
@Autowired
private KylinArtistPerformanceMapper artistPerformanceMapper;
/**
* 创建艺人
*/
@Transactional(rollbackFor = Exception.class)
public Boolean create(ArtistParam param) {
try {
// 校验艺人名称是否已存在
KylinArtist existArtist = artistMapper.selectByArtistName(param.getArtistName());
if (existArtist != null) {
log.warn("艺人名称已存在: {}", param.getArtistName());
return false;
}
String artistId = IDGenerator.nextSnowId();
LocalDateTime createdAt = LocalDateTime.now();
// 保存艺人基本信息
KylinArtist kylinArtist = param.getFields(artistId, createdAt);
artistMapper.insert(kylinArtist);
// 保存相册图片
if (param.getAlbumImages() != null && !param.getAlbumImages().isEmpty()) {
saveAlbumImages(artistId, param.getAlbumImages());
}
return true;
} catch (Exception e) {
log.error("创建艺人失败", e);
throw new RuntimeException("创建艺人失败", e);
}
}
/**
* 修改艺人
*/
@Transactional(rollbackFor = Exception.class)
public Boolean update(ArtistParam param) {
try {
String artistId = param.getArtistId();
// 校验艺人名称是否已被其他艺人使用
KylinArtist existArtist = artistMapper.selectByArtistName(param.getArtistName());
if (existArtist != null && !existArtist.getArtistId().equals(artistId)) {
log.warn("艺人名称已被其他艺人使用: {}", param.getArtistName());
return false;
}
LocalDateTime updatedAt = LocalDateTime.now();
// 更新艺人基本信息
KylinArtist params = param.getFields(null, null);
params.setUpdatedAt(updatedAt);
artistMapper.update(params, new UpdateWrapper<KylinArtist>().eq("artist_id", artistId));
// 删除旧的相册图片(逻辑删除)
artistAlbumMapper.deleteByArtistId(artistId);
// 保存新的相册图片
if (param.getAlbumImages() != null && !param.getAlbumImages().isEmpty()) {
saveAlbumImages(artistId, param.getAlbumImages());
}
return true;
} catch (Exception e) {
log.error("修改艺人失败", e);
throw new RuntimeException("修改艺人失败", e);
}
}
/**
* 艺人详情
*/
public ArtistVo detail(String artistId) {
KylinArtist data = artistMapper.selectOne(
new UpdateWrapper<KylinArtist>().eq("artist_id", artistId).eq("status", 1)
);
ArtistVo artistVo = new ArtistVo();
if (data != null) {
BeanUtils.copyProperties(data, artistVo);
// 设置艺人类型名称
if (data.getArtistType() != null) {
String typeName = "";
switch (data.getArtistType()) {
case 1: typeName = "音乐人"; break;
case 2: typeName = "艺术家"; break;
case 3: typeName = "厂牌"; break;
case 4: typeName = "品牌方"; break;
default: typeName = "未知"; break;
}
artistVo.setArtistTypeName(typeName);
}
// 查询相册图片
List<KylinArtistAlbum> albumList = artistAlbumMapper.selectByArtistId(artistId);
if (albumList != null && !albumList.isEmpty()) {
List<String> imageUrls = albumList.stream()
.map(KylinArtistAlbum::getImageUrl)
.collect(Collectors.toList());
artistVo.setAlbumImages(imageUrls);
}
// 格式化时间显示
if (data.getCreatedAt() != null) {
artistVo.setCreatedAt(DateUtil.Formatter.yyyyMMddHHmmss.format(data.getCreatedAt()));
}
if (data.getUpdatedAt() != null) {
artistVo.setUpdatedAt(DateUtil.Formatter.yyyyMMddHHmmss.format(data.getUpdatedAt()));
}
// TODO 设置关联演出
artistVo.setPerformanceVoList(Collections.EMPTY_LIST);
} else {
log.error("[detail] query artist is null, artistId: {}", artistId);
return null;
}
return artistVo;
}
/**
* 艺人列表
*/
public PageInfo<KylinArtistDao> artistList(ArtistSearchParam param) {
PageInfo<KylinArtistDao> pageInfoTmp = null;
try {
PageHelper.startPage(param.getPageNum(), param.getPageSize());
Map<String, Object> paramMap = BeanUtil.convertBeanToMap(param);
log.info("艺人列表查询参数: {}", paramMap);
List<KylinArtistDao> list = artistMapper.searchArtistList(paramMap);
pageInfoTmp = new PageInfo<>(list);
} catch (Exception e) {
log.error("获取艺人列表失败", e);
return new PageInfo<>();
}
return pageInfoTmp;
}
/**
* 删除艺人(逻辑删除)
*/
@Transactional(rollbackFor = Exception.class)
public Boolean delete(List<String> artistIds) {
try {
LocalDateTime updatedAt = LocalDateTime.now();
// 删除艺人基本信息
KylinArtist kylinArtist = new KylinArtist();
kylinArtist.setUpdatedAt(updatedAt);
kylinArtist.setStatus(0);
artistMapper.update(
kylinArtist,
new UpdateWrapper<KylinArtist>().in("artist_id", artistIds)
);
// 删除相册图片
for (String artistId : artistIds) {
artistAlbumMapper.deleteByArtistId(artistId);
}
return true;
} catch (Exception e) {
log.error("删除艺人失败", e);
throw new RuntimeException("删除艺人失败", e);
}
}
/**
* 检查艺人名称是否存在
*/
public Boolean checkArtistNameExists(String artistName, String artistId) {
KylinArtist existArtist = artistMapper.selectByArtistName(artistName);
if (existArtist == null) {
return false;
}
// 如果是编辑操作,排除自己
if (artistId != null && existArtist.getArtistId().equals(artistId)) {
return false;
}
return true;
}
/**
* 保存相册图片
*/
private void saveAlbumImages(String artistId, List<String> imageUrls) {
LocalDateTime now = LocalDateTime.now();
int sort = imageUrls.size();
for (String imageUrl : imageUrls) {
KylinArtistAlbum album = new KylinArtistAlbum();
album.setAlbumId(IDGenerator.nextSnowId());
album.setArtistId(artistId);
album.setImageUrl(imageUrl);
album.setSort(sort--);
album.setStatus(1);
album.setCreatedAt(now);
album.setUpdatedAt(now);
artistAlbumMapper.insert(album);
}
}
}
package com.liquidnet.service.kylin.dao;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 艺人管理DAO - 用于列表展示
* </p>
*
* @author liquidnet
* @since 2026-02-04
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class KylinArtistDao implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 艺人ID
*/
private String artistId;
/**
* 艺人名称
*/
private String artistName;
/**
* 艺人类型 1音乐人 2艺术家 3厂牌 4品牌方
*/
private Integer artistType;
/**
* 艺人类型名称
*/
private String artistTypeName;
/**
* 艺人头像
*/
private String avatarUrl;
/**
* 艺人简介
*/
private String introduction;
/**
* 关联演出数量
*/
private Integer performanceCount;
/**
* 关联商品数量
*/
private Integer productCount;
/**
* 创建时间
*/
private LocalDateTime createdAt;
}
package com.liquidnet.service.kylin.dao;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper = false)
public class KylinArtistPerformanceDao implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 艺人ID
*/
private String artistId;
/**
* 艺人名称
*/
private String artistName;
/**
* 艺人头像
*/
private String artistUrl;
/**
* 演出ID
*/
private String performanceId;
/**
* 艺人在演出排序 越大越靠前
*/
private Integer sort;
/**
* 演出标题
*/
private String title;
/**
* 演出开始时间
*/
private String timeStart;
}
package com.liquidnet.service.kylin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 艺人管理表
* </p>
*
* @author liquidnet
* @since 2026-02-04
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class KylinArtist implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Integer mid;
/**
* 艺人ID
*/
private String artistId;
/**
* 艺人名称
*/
private String artistName;
/**
* 艺人类型 1音乐人 2艺术家 3厂牌 4品牌方
*/
private Integer artistType;
/**
* 艺人头像
*/
private String avatarUrl;
/**
* 艺人简介
*/
private String introduction;
/**
* 状态 1启用 0禁用
*/
private Integer status;
/**
* 排序权重
*/
private Integer sort;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 修改时间
*/
private LocalDateTime updatedAt;
private static final KylinArtist obj = new KylinArtist();
public static KylinArtist getNew() {
try {
return (KylinArtist) obj.clone();
} catch (CloneNotSupportedException e) {
return new KylinArtist();
}
}
}
package com.liquidnet.service.kylin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 艺人相册表
* </p>
*
* @author liquidnet
* @since 2026-02-04
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class KylinArtistAlbum implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Integer mid;
/**
* 相册ID
*/
private String albumId;
/**
* 艺人ID
*/
private String artistId;
/**
* 图片地址
*/
private String imageUrl;
/**
* 排序权重
*/
private Integer sort;
/**
* 状态 1启用 0禁用
*/
private Integer status;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 修改时间
*/
private LocalDateTime updatedAt;
private static final KylinArtistAlbum obj = new KylinArtistAlbum();
public static KylinArtistAlbum getNew() {
try {
return (KylinArtistAlbum) obj.clone();
} catch (CloneNotSupportedException e) {
return new KylinArtistAlbum();
}
}
}
package com.liquidnet.service.kylin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@EqualsAndHashCode(callSuper = false)
public class KylinArtistPerformance implements Serializable{
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 关联 kylin_artist.artist_id
*/
private String artistId;
/**
* 关联 kylin_performances.performances_id
*/
private String performancesId;
/**
* 该艺人在本演出中的排序权重,越大越靠前
*/
private Integer sort;
/**
*创建时间
*/
private LocalDateTime createdAt;
/**
*更新时间
*/
private LocalDateTime updatedAt;
}
package com.liquidnet.service.kylin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.kylin.entity.KylinArtistAlbum;
import java.util.List;
public interface KylinArtistAlbumMapper extends BaseMapper<KylinArtistAlbum> {
/**
* 根据艺人ID查询相册列表
*/
List<KylinArtistAlbum> selectByArtistId(String artistId);
/**
* 根据艺人ID删除相册(逻辑删除)
*/
int deleteByArtistId(String artistId);
}
package com.liquidnet.service.kylin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.kylin.dao.KylinArtistDao;
import com.liquidnet.service.kylin.entity.KylinArtist;
import java.util.List;
import java.util.Map;
public interface KylinArtistMapper extends BaseMapper<KylinArtist> {
/**
* 搜索艺人列表
*/
List<KylinArtistDao> searchArtistList(Map<String, Object> paramMap);
/**
* 根据艺人名称查询是否存在
*/
KylinArtist selectByArtistName(String artistName);
}
package com.liquidnet.service.kylin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.kylin.dao.KylinArtistPerformanceDao;
import com.liquidnet.service.kylin.entity.KylinArtistPerformance;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface KylinArtistPerformanceMapper extends BaseMapper<KylinArtistPerformance> {
/**
* 根据艺人ID查询关联的演出信息
*
* @param artistId 艺人ID
* @return 演出信息列表
*/
List<KylinArtistPerformanceDao> selectPerformancesByArtistId(@Param("artistId") String artistId);
}
<?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.liquidnet.service.kylin.mapper.KylinArtistAlbumMapper">
<!-- 根据艺人ID查询相册列表 -->
<select id="selectByArtistId" parameterType="java.lang.String" resultType="com.liquidnet.service.kylin.entity.KylinArtistAlbum">
SELECT
mid,
album_id,
artist_id,
image_url,
sort,
status,
created_at,
updated_at
FROM kylin_artist_album
WHERE artist_id = #{artistId} AND status = 1
ORDER BY sort DESC, mid DESC
</select>
<!-- 根据艺人ID删除相册(逻辑删除) -->
<update id="deleteByArtistId" parameterType="java.lang.String">
UPDATE kylin_artist_album
SET status = 0, updated_at = NOW()
WHERE artist_id = #{artistId}
</update>
</mapper>
<?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.liquidnet.service.kylin.mapper.KylinArtistMapper">
<!-- 搜索艺人列表 -->
<select id="searchArtistList" parameterType="java.util.Map" resultType="com.liquidnet.service.kylin.dao.KylinArtistDao">
SELECT
a.artist_id,
a.artist_name,
a.artist_type,
CASE a.artist_type
WHEN 1 THEN '音乐人'
WHEN 2 THEN '艺术家'
WHEN 3 THEN '厂牌'
WHEN 4 THEN '品牌方'
ELSE '未知'
END as artist_type_name,
a.avatar_url,
a.introduction,
a.created_at
FROM kylin_artist a
<where>
a.status = 1
<if test="artistName != null and artistName != ''">
AND a.artist_name LIKE CONCAT('%', #{artistName}, '%')
</if>
<if test="artistType != null and artistType != ''">
AND a.artist_type = #{artistType}
</if>
</where>
ORDER BY a.sort DESC, a.mid DESC
</select>
<!-- 根据艺人名称查询是否存在 -->
<select id="selectByArtistName" parameterType="java.lang.String" resultType="com.liquidnet.service.kylin.entity.KylinArtist">
SELECT * FROM kylin_artist
WHERE artist_name = #{artistName} AND status = 1
LIMIT 1
</select>
</mapper>
<?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.liquidnet.service.kylin.mapper.KylinArtistPerformanceMapper">
<select id="selectPerformancesByArtistId" parameterType="java.lang.String" resultType="com.liquidnet.service.kylin.dao.KylinArtistPerformanceDao">
</select>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment