点歌相关接口
This commit is contained in:
parent
076c215278
commit
7a15a48e04
|
|
@ -0,0 +1,94 @@
|
||||||
|
package com.czg.controller.admin;
|
||||||
|
|
||||||
|
import com.czg.account.dto.song.BaseShopSongDTO;
|
||||||
|
import com.czg.account.dto.song.ShopSongAddDTO;
|
||||||
|
import com.czg.account.dto.song.ShopSongEditDTO;
|
||||||
|
import com.czg.account.entity.ShopSong;
|
||||||
|
import com.czg.account.service.ShopSongService;
|
||||||
|
import com.czg.annotation.SaAdminCheckPermission;
|
||||||
|
import com.czg.resp.CzgResult;
|
||||||
|
import com.czg.sa.StpKit;
|
||||||
|
import com.czg.utils.PageUtil;
|
||||||
|
import com.mybatisflex.core.paginate.Page;
|
||||||
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点歌相关接口
|
||||||
|
* @author Administrator
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/admin/shopSong")
|
||||||
|
public class ShopSongController {
|
||||||
|
@Resource
|
||||||
|
private ShopSongService shopSongService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点歌页面地址
|
||||||
|
* @return url
|
||||||
|
*/
|
||||||
|
@SaAdminCheckPermission(value = "shopSong:url", name = "点歌页面地址")
|
||||||
|
@GetMapping("/url")
|
||||||
|
public CzgResult<String> getSongUrl(){
|
||||||
|
return CzgResult.success(shopSongService.getSongUrl(StpKit.USER.getShopId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 歌曲列表
|
||||||
|
* @return 分页数据
|
||||||
|
*/
|
||||||
|
@SaAdminCheckPermission(value = "shopSong:list", name = "店铺歌曲查询")
|
||||||
|
@GetMapping
|
||||||
|
public CzgResult<Page<ShopSong>> list(){
|
||||||
|
return CzgResult.success(shopSongService.page(PageUtil.buildPage(), new QueryWrapper().eq(ShopSong::getShopId, StpKit.USER.getShopId()).orderBy(ShopSong::getCreateTime, false)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 歌曲详情
|
||||||
|
* @return 分页数据
|
||||||
|
*/
|
||||||
|
@SaAdminCheckPermission(value = "shopSong:detail", name = "店铺歌曲详情")
|
||||||
|
@GetMapping("/detail")
|
||||||
|
public CzgResult<ShopSong> detail(@RequestParam Integer id){
|
||||||
|
return CzgResult.success(shopSongService.getOne(new QueryWrapper().eq(ShopSong::getShopId, StpKit.USER.getShopId()).eq(ShopSong::getId, id)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 店铺歌曲新增
|
||||||
|
* @param shopSongAddDTO 歌曲数据
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
@SaAdminCheckPermission(value = "shopSong:add", name = "店铺歌曲新增")
|
||||||
|
@PostMapping
|
||||||
|
public CzgResult<Boolean> add(@RequestBody @Validated ShopSongAddDTO shopSongAddDTO){
|
||||||
|
return CzgResult.success(shopSongService.add(StpKit.USER.getShopId(), shopSongAddDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 歌曲修改
|
||||||
|
* @param shopSongEditDTO 修改信息
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
@SaAdminCheckPermission(value = "shopSong:edit", name = "店铺歌曲修改")
|
||||||
|
@PutMapping
|
||||||
|
public CzgResult<Boolean> edit(@RequestBody @Validated ShopSongEditDTO shopSongEditDTO){
|
||||||
|
return CzgResult.success(shopSongService.edit(StpKit.USER.getShopId(), shopSongEditDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 歌曲删除
|
||||||
|
* @param shopSongEditDTO 删除信息
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
@SaAdminCheckPermission(value = "shopSong:del", name = "店铺歌曲删除")
|
||||||
|
@DeleteMapping
|
||||||
|
public CzgResult<Boolean> delete(@RequestBody @Validated BaseShopSongDTO shopSongEditDTO){
|
||||||
|
return CzgResult.success(shopSongService.remove(new QueryWrapper().eq(ShopSong::getShopId, StpKit.USER.getShopId()).eq(ShopSong::getId, shopSongEditDTO.getId())));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -11,6 +11,8 @@ public interface RedisCst {
|
||||||
String LOGIN_CODE = "login:code:";
|
String LOGIN_CODE = "login:code:";
|
||||||
String SYS_LOG_KEY = "sys:log:";
|
String SYS_LOG_KEY = "sys:log:";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* key过期监听
|
* key过期监听
|
||||||
*/
|
*/
|
||||||
|
|
@ -33,6 +35,10 @@ public interface RedisCst {
|
||||||
|
|
||||||
String PRINT_ORDER_DETAIL = "print:order:detail:";
|
String PRINT_ORDER_DETAIL = "print:order:detail:";
|
||||||
|
|
||||||
|
// 点歌地址url
|
||||||
|
String SONG_URL = "song:";
|
||||||
|
|
||||||
|
|
||||||
static String getLockKey(String sign, Object... args) {
|
static String getLockKey(String sign, Object... args) {
|
||||||
StringBuilder key = new StringBuilder(LOCK_KEY + ":" + sign + ":");
|
StringBuilder key = new StringBuilder(LOCK_KEY + ":" + sign + ":");
|
||||||
for (Object arg : args) {
|
for (Object arg : args) {
|
||||||
|
|
@ -51,4 +57,8 @@ public interface RedisCst {
|
||||||
static String getPrintOrderDetailKey(Long orderId, Long detailId) {
|
static String getPrintOrderDetailKey(Long orderId, Long detailId) {
|
||||||
return PRINT_ORDER_DETAIL + orderId + ":" + detailId;
|
return PRINT_ORDER_DETAIL + orderId + ":" + detailId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static String getSongUrlKey(Long shopId) {
|
||||||
|
return SONG_URL + shopId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
package com.czg.account.dto.song;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.DecimalMin;
|
||||||
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点歌-歌曲表 实体类。
|
||||||
|
*
|
||||||
|
* @author zs
|
||||||
|
* @since 2025-03-01
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class BaseShopSongDTO {
|
||||||
|
@NotNull
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
|
||||||
|
package com.czg.account.dto.song;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import com.alibaba.fastjson2.annotation.JSONField;
|
||||||
|
import java.io.Serial;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.DecimalMin;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点歌-歌曲表 实体类。
|
||||||
|
*
|
||||||
|
* @author zs
|
||||||
|
* @since 2025-03-01
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class ShopSongAddDTO{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 歌曲图片
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "歌曲图片不为空")
|
||||||
|
private String img;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 歌曲名称
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "歌曲名称不为空")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原唱歌手
|
||||||
|
*/
|
||||||
|
private String originSinger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 演出歌手id
|
||||||
|
*/
|
||||||
|
private Integer singerId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 演出歌手名称
|
||||||
|
*/
|
||||||
|
@NotEmpty(message = "演出歌手名称不为空")
|
||||||
|
private String singer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单价
|
||||||
|
*/
|
||||||
|
@NotNull(message = "单价不为空")
|
||||||
|
@DecimalMin("0.01")
|
||||||
|
private BigDecimal price;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点播次数
|
||||||
|
*/
|
||||||
|
private Integer salesNumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 歌曲状态:1-开启;0-关闭
|
||||||
|
*/
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
private Integer sort;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
|
||||||
|
package com.czg.account.dto.song;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.*;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点歌-歌曲表 实体类。
|
||||||
|
*
|
||||||
|
* @author zs
|
||||||
|
* @since 2025-03-01
|
||||||
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class ShopSongEditDTO extends BaseShopSongDTO {
|
||||||
|
/**
|
||||||
|
* 歌曲图片
|
||||||
|
*/
|
||||||
|
@Size(min = 1, message = "歌曲图片不为空")
|
||||||
|
private String img;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 歌曲名称
|
||||||
|
*/
|
||||||
|
@Size(min = 1, message = "歌曲名称不为空")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原唱歌手
|
||||||
|
*/
|
||||||
|
private String originSinger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 演出歌手id
|
||||||
|
*/
|
||||||
|
private Integer singerId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 演出歌手名称
|
||||||
|
*/
|
||||||
|
@NotEmpty(message = "演出歌手名称不为空")
|
||||||
|
private String singer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单价
|
||||||
|
*/
|
||||||
|
@DecimalMin("0.01")
|
||||||
|
private BigDecimal price;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点播次数
|
||||||
|
*/
|
||||||
|
private Integer salesNumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 歌曲状态:1-开启;0-关闭
|
||||||
|
*/
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
private Integer sort;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,96 @@
|
||||||
|
package com.czg.account.entity;
|
||||||
|
|
||||||
|
import com.mybatisflex.annotation.Column;
|
||||||
|
import com.mybatisflex.annotation.Id;
|
||||||
|
import com.mybatisflex.annotation.KeyType;
|
||||||
|
import com.mybatisflex.annotation.Table;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点歌-歌曲表 实体类。
|
||||||
|
*
|
||||||
|
* @author zs
|
||||||
|
* @since 2025-03-01
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Table("tb_shop_song")
|
||||||
|
public class ShopSong implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Id(keyType = KeyType.Auto)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 店铺id
|
||||||
|
*/
|
||||||
|
private Long shopId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 歌曲图片
|
||||||
|
*/
|
||||||
|
private String img;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 歌曲名称
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原唱歌手
|
||||||
|
*/
|
||||||
|
private String originSinger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 演出歌手id
|
||||||
|
*/
|
||||||
|
private Integer singerId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 演出歌手名称
|
||||||
|
*/
|
||||||
|
private String singer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单价
|
||||||
|
*/
|
||||||
|
private BigDecimal price;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点播次数
|
||||||
|
*/
|
||||||
|
private Integer salesNumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 歌曲状态:1-开启;0-关闭
|
||||||
|
*/
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
private Integer sort;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
@Column(onInsertValue = "now()")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新时间
|
||||||
|
*/
|
||||||
|
@Column(onInsertValue = "now()", onUpdateValue = "now()")
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
package com.czg.account.service;
|
||||||
|
|
||||||
|
import com.czg.account.dto.song.ShopSongAddDTO;
|
||||||
|
import com.czg.account.dto.song.ShopSongEditDTO;
|
||||||
|
import com.mybatisflex.core.paginate.Page;
|
||||||
|
import com.mybatisflex.core.service.IService;
|
||||||
|
import com.czg.account.entity.ShopSong;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点歌-歌曲表 服务层。
|
||||||
|
*
|
||||||
|
* @author zs
|
||||||
|
* @since 2025-03-01
|
||||||
|
*/
|
||||||
|
public interface ShopSongService extends IService<ShopSong> {
|
||||||
|
|
||||||
|
Boolean add(Long shopId, ShopSongAddDTO shopSongAddDTO);
|
||||||
|
|
||||||
|
Boolean edit(Long shopId, ShopSongEditDTO shopSongEditDTO);
|
||||||
|
|
||||||
|
String getSongUrl(Long shopId);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.czg.service.account.mapper;
|
||||||
|
|
||||||
|
import com.mybatisflex.core.BaseMapper;
|
||||||
|
import com.czg.account.entity.ShopSong;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点歌-歌曲表 映射层。
|
||||||
|
*
|
||||||
|
* @author zs
|
||||||
|
* @since 2025-03-01
|
||||||
|
*/
|
||||||
|
public interface ShopSongMapper extends BaseMapper<ShopSong> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
package com.czg.service.account.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.czg.account.dto.song.ShopSongAddDTO;
|
||||||
|
import com.czg.account.dto.song.ShopSongEditDTO;
|
||||||
|
import com.czg.config.RedisCst;
|
||||||
|
import com.czg.exception.ApiNotPrintException;
|
||||||
|
import com.czg.sa.StpKit;
|
||||||
|
import com.czg.service.RedisService;
|
||||||
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
|
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||||
|
import com.czg.account.entity.ShopSong;
|
||||||
|
import com.czg.account.service.ShopSongService;
|
||||||
|
import com.czg.service.account.mapper.ShopSongMapper;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.apache.commons.lang3.RandomStringUtils;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点歌-歌曲表 服务层实现。
|
||||||
|
*
|
||||||
|
* @author zs
|
||||||
|
* @since 2025-03-01
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class ShopSongServiceImpl extends ServiceImpl<ShopSongMapper, ShopSong> implements ShopSongService{
|
||||||
|
@Resource
|
||||||
|
private RedisService redisService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean add(Long shopId, ShopSongAddDTO shopSongAddDTO) {
|
||||||
|
ShopSong shopSong = BeanUtil.copyProperties(shopSongAddDTO, ShopSong.class);
|
||||||
|
shopSong.setShopId(shopId);
|
||||||
|
return save(shopSong);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean edit(Long shopId, ShopSongEditDTO shopSongEditDTO) {
|
||||||
|
ShopSong shopSong = getOne(new QueryWrapper().eq(ShopSong::getShopId, StpKit.USER.getShopId()).eq(ShopSong::getId, shopSongEditDTO.getId()));
|
||||||
|
if (shopSong == null) {
|
||||||
|
throw new ApiNotPrintException("歌曲列表不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
BeanUtil.copyProperties(shopSongEditDTO, shopSong);
|
||||||
|
return updateById(shopSong);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSongUrl(Long shopId) {
|
||||||
|
String code;
|
||||||
|
String key = RedisCst.getSongUrlKey(shopId);
|
||||||
|
if(redisService.hasKey(key)){
|
||||||
|
code = (String) redisService.get(key);
|
||||||
|
}else {
|
||||||
|
code = RandomStringUtils.randomAlphanumeric(12);
|
||||||
|
redisService.set(key, code);
|
||||||
|
redisService.set(key, shopId);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?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.czg.service.account.mapper.ShopSongMapper">
|
||||||
|
|
||||||
|
</mapper>
|
||||||
Loading…
Reference in New Issue