From 7a15a48e04dba6fc669e68ba349bd018bea7cf0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Sat, 1 Mar 2025 11:21:23 +0800 Subject: [PATCH] =?UTF-8?q?=E7=82=B9=E6=AD=8C=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/ShopSongController.java | 94 ++++++++++++++++++ .../main/java/com/czg/config/RedisCst.java | 10 ++ .../czg/account/dto/song/BaseShopSongDTO.java | 25 +++++ .../czg/account/dto/song/ShopSongAddDTO.java | 77 +++++++++++++++ .../czg/account/dto/song/ShopSongEditDTO.java | 68 +++++++++++++ .../java/com/czg/account/entity/ShopSong.java | 96 +++++++++++++++++++ .../czg/account/service/ShopSongService.java | 22 +++++ .../account/mapper/ShopSongMapper.java | 14 +++ .../service/impl/ShopSongServiceImpl.java | 63 ++++++++++++ .../main/resources/mapper/ShopSongMapper.xml | 7 ++ 10 files changed, 476 insertions(+) create mode 100644 cash-api/account-server/src/main/java/com/czg/controller/admin/ShopSongController.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/song/BaseShopSongDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/song/ShopSongAddDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/song/ShopSongEditDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopSong.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopSongService.java create mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopSongMapper.java create mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopSongServiceImpl.java create mode 100644 cash-service/account-service/src/main/resources/mapper/ShopSongMapper.xml diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopSongController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopSongController.java new file mode 100644 index 00000000..749cc8c6 --- /dev/null +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopSongController.java @@ -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 getSongUrl(){ + return CzgResult.success(shopSongService.getSongUrl(StpKit.USER.getShopId())); + } + + /** + * 歌曲列表 + * @return 分页数据 + */ + @SaAdminCheckPermission(value = "shopSong:list", name = "店铺歌曲查询") + @GetMapping + public CzgResult> 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 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 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 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 delete(@RequestBody @Validated BaseShopSongDTO shopSongEditDTO){ + return CzgResult.success(shopSongService.remove(new QueryWrapper().eq(ShopSong::getShopId, StpKit.USER.getShopId()).eq(ShopSong::getId, shopSongEditDTO.getId()))); + } + + +} diff --git a/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java b/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java index 50658b01..4f57a0ab 100644 --- a/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java +++ b/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java @@ -11,6 +11,8 @@ public interface RedisCst { String LOGIN_CODE = "login:code:"; String SYS_LOG_KEY = "sys:log:"; + + /** * key过期监听 */ @@ -33,6 +35,10 @@ public interface RedisCst { String PRINT_ORDER_DETAIL = "print:order:detail:"; + // 点歌地址url + String SONG_URL = "song:"; + + static String getLockKey(String sign, Object... args) { StringBuilder key = new StringBuilder(LOCK_KEY + ":" + sign + ":"); for (Object arg : args) { @@ -51,4 +57,8 @@ public interface RedisCst { static String getPrintOrderDetailKey(Long orderId, Long detailId) { return PRINT_ORDER_DETAIL + orderId + ":" + detailId; } + + static String getSongUrlKey(Long shopId) { + return SONG_URL + shopId; + } } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/song/BaseShopSongDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/song/BaseShopSongDTO.java new file mode 100644 index 00000000..67cfe146 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/song/BaseShopSongDTO.java @@ -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; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/song/ShopSongAddDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/song/ShopSongAddDTO.java new file mode 100644 index 00000000..7010715a --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/song/ShopSongAddDTO.java @@ -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; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/song/ShopSongEditDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/song/ShopSongEditDTO.java new file mode 100644 index 00000000..a3461b5e --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/song/ShopSongEditDTO.java @@ -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; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopSong.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopSong.java new file mode 100644 index 00000000..d2a2f2cf --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopSong.java @@ -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; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopSongService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopSongService.java new file mode 100644 index 00000000..86bc1263 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopSongService.java @@ -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 { + + Boolean add(Long shopId, ShopSongAddDTO shopSongAddDTO); + + Boolean edit(Long shopId, ShopSongEditDTO shopSongEditDTO); + + String getSongUrl(Long shopId); +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopSongMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopSongMapper.java new file mode 100644 index 00000000..ce4b3eaf --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopSongMapper.java @@ -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 { + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopSongServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopSongServiceImpl.java new file mode 100644 index 00000000..9fae7740 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopSongServiceImpl.java @@ -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 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; + } +} diff --git a/cash-service/account-service/src/main/resources/mapper/ShopSongMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopSongMapper.xml new file mode 100644 index 00000000..54f31af3 --- /dev/null +++ b/cash-service/account-service/src/main/resources/mapper/ShopSongMapper.xml @@ -0,0 +1,7 @@ + + + + +