jyc 2 tygodni temu
rodzic
commit
5de79dc67e

+ 62 - 0
alien-entity/src/main/java/shop/alien/entity/store/LifeClassBanner.java

@@ -0,0 +1,62 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * banner管理
+ * @TableName life_class_banner
+ */
+@TableName(value ="life_class_banner")
+@Data
+@JsonInclude
+@ApiModel(value = "LifeClassBanner对象", description = "banner管理")
+public class LifeClassBanner {
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "排序")
+    private Integer bannerSort;
+
+    @ApiModelProperty(value = "banner标题")
+    private String bannerTitle;
+
+    @ApiModelProperty(value = "banner简介")
+    private String bannerIntroduce;
+
+    @ApiModelProperty(value = "图片url")
+    private String bannerImg;
+
+    @ApiModelProperty(value = "浏览量")
+    private Integer playCount;
+
+    @ApiModelProperty(value = "是否轮播(0:否,1:是)")
+    private Integer playFlag;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    private Integer updatedUserId;
+}

+ 2 - 1
alien-entity/src/main/java/shop/alien/entity/store/LifeClassManage.java

@@ -65,5 +65,6 @@ public class LifeClassManage {
     @TableField(exist = false)
     private String fileName;
 
-
+    @ApiModelProperty(value = "文件介绍")
+    private String classIntroduce;
 }

+ 18 - 0
alien-entity/src/main/java/shop/alien/mapper/LifeClassBannerMapper.java

@@ -0,0 +1,18 @@
+package shop.alien.mapper;
+
+import shop.alien.entity.store.LifeClassBanner;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author youch
+* @description 针对表【life_class_banner(banner管理)】的数据库操作Mapper
+* @createDate 2025-07-18 09:22:21
+* @Entity shop.alien.entity.store.LifeClassBanner
+*/
+public interface LifeClassBannerMapper extends BaseMapper<LifeClassBanner> {
+
+}
+
+
+
+

+ 27 - 0
alien-entity/src/main/resources/mapper/LifeClassBannerMapper.xml

@@ -0,0 +1,27 @@
+<?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="shop.alien.mapper.LifeClassBannerMapper">
+
+    <resultMap id="BaseResultMap" type="shop.alien.entity.store.LifeClassBanner">
+            <id property="id" column="id" />
+            <result property="bannerSort" column="banner_sort" />
+            <result property="bannerTitle" column="banner_title" />
+            <result property="bannerIntroduce" column="banner_introduce" />
+            <result property="bannerImg" column="banner_img" />
+            <result property="playCount" column="play_count" />
+            <result property="playFlag" column="play_flag" />
+            <result property="deleteFlag" column="delete_flag" />
+            <result property="createdTime" column="created_time" />
+            <result property="createdUserId" column="created_user_id" />
+            <result property="updatedTime" column="updated_time" />
+            <result property="updatedUserId" column="updated_user_id" />
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,banner_sort,banner_title,banner_introduce,banner_img,play_count,
+        play_flag,delete_flag,created_time,created_user_id,updated_time,
+        updated_user_id
+    </sql>
+</mapper>

+ 92 - 4
alien-store/src/main/java/shop/alien/store/controller/LifeClassManageController.java

@@ -2,6 +2,7 @@ package shop.alien.store.controller;
 
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -13,7 +14,9 @@ import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import shop.alien.entity.result.R;
+import shop.alien.entity.store.LifeClassBanner;
 import shop.alien.entity.store.LifeClassManage;
+import shop.alien.mapper.LifeClassBannerMapper;
 import shop.alien.mapper.LifeClassManageMapper;
 import shop.alien.store.service.LifeClassManageService;
 import shop.alien.entity.store.excelVo.util.ExcelExporter;
@@ -43,6 +46,8 @@ public class LifeClassManageController {
 
     private final LifeClassManageMapper lifeClassManageMapper;
 
+    private final LifeClassBannerMapper lifeClassBannerMapper;
+
     @GetMapping("/getClassesPages")
     public Map<String, Object> getClassesPages(@RequestParam(defaultValue = "1") int page,
                                                @RequestParam(defaultValue = "10") int size,
@@ -76,10 +81,18 @@ public class LifeClassManageController {
     public Integer addPlayCount(
             @RequestParam String classId) {
         log.info("LifeClassManageController.addPlayCount?classId={}", classId);
-        LambdaUpdateWrapper<LifeClassManage> wrapper = new LambdaUpdateWrapper<>();
-        wrapper.eq(LifeClassManage::getId, classId);
-        wrapper.setSql("play_count = play_count + 1");
-        return lifeClassManageMapper.update(null, wrapper);
+        LifeClassManage lifeClassManage = lifeClassManageMapper.selectById(classId);
+        if (ObjectUtils.isEmpty(lifeClassManage.getPlayCount())) {
+            LifeClassManage classManage = new LifeClassManage();
+            classManage.setId(classId);
+            classManage.setPlayCount(1);
+            return lifeClassManageMapper.updateById(classManage);
+        } else {
+            LambdaUpdateWrapper<LifeClassManage> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(LifeClassManage::getId, classId);
+            wrapper.setSql("play_count = play_count + 1");
+            return lifeClassManageMapper.update(null, wrapper);
+        }
     }
 
     @ApiOperation("课程列表")
@@ -167,5 +180,80 @@ public class LifeClassManageController {
         return response;
     }
 
+    /**
+     * 保存banner轮播图
+     * <p>
+     * 该方法用于添加或更新班级的轮播图信息如果传入的轮播图ID为空,则视为新增轮播图;
+     * 否则,视为更新现有轮播图信息此外,该方法还会检查当前激活的轮播图数量是否已达到上限(4个),
+     * 如果达到上限,则不允许添加新的轮播图,直到有一个轮播图被下架
+     *
+     * @param lifeClassBanner 包含轮播图信息的LifeClassBanner对象
+     * @return 返回一个R对象,表示操作结果如果操作成功,返回成功消息;
+     * 如果操作失败或达到轮播图数量上限,返回相应的错误消息
+     */
+    @ApiOperation("保存banner轮播图")
+    @PostMapping("/saveClassBanner")
+    public R saveClassBanner(@RequestBody LifeClassBanner lifeClassBanner) {
+        // 记录方法调用的日志信息
+        log.info("LifeClassManageController.saveClassBanner?lifeClassBanner={}", lifeClassBanner);
+
+        try {
+            // 判断传入的轮播图ID是否为空,为空则插入新记录,否则更新现有记录
+            if (ObjectUtils.isEmpty(lifeClassBanner.getId())) {
+                lifeClassBannerMapper.insert(lifeClassBanner);
+                return R.success("操作成功");
+            } else {
+                // 检查当前激活的轮播图数量是否达到上限
+                if (ObjectUtils.isNotEmpty(lifeClassBanner.getPlayFlag())) {
+                    if (lifeClassBanner.getPlayFlag() == 1) {
+                        if (lifeClassBannerMapper.selectCount(new LambdaUpdateWrapper<LifeClassBanner>().eq(LifeClassBanner::getPlayFlag, 1).eq(LifeClassBanner::getDeleteFlag, 0)) >= 4) {
+                            return R.fail("轮播图位置已满,请先下架一个后再进行替换");
+                        }
+                    }
+                }
+                lifeClassBannerMapper.updateById(lifeClassBanner);
+                return R.success("操作成功");
+            }
+        } catch (Exception e) {
+            // 捕获异常并返回操作失败的消息
+            return R.fail("操作失败");
+        }
+    }
+
+    @ApiOperation("分页查询banner轮播图")
+    @GetMapping("/getClassBannerPages")
+    public R getClassBannerPages(@RequestParam(defaultValue = "1") int page,
+                                 @RequestParam(defaultValue = "10") int size,
+                                 @RequestParam(required = false) String bannerTitle,
+                                 @RequestParam(required = false) String playFlag) {
+        log.info("LifeClassManageController.getClassBannerPages?page={},size={},bannerTitle={},playFlag={}", page, size, bannerTitle, playFlag);
+        IPage<LifeClassBanner> bannerPages = lifeClassManageService.getClassBannerPages(page, size, bannerTitle, playFlag);
+        return R.data(bannerPages);
+    }
+
+    @ApiOperation("更新banner轮播图")
+    @PostMapping("/updateSort")
+    public R updateSort(@RequestBody List<LifeClassBanner> lifeClassBannerList) {
+        log.info("LifeClassManageController.updateSort?lifeClassBannerList={}", lifeClassBannerList);
+        for (int i = 0; i < lifeClassBannerList.size(); i++) {
+            lifeClassBannerList.get(i).setBannerSort(i + 1);
+            lifeClassBannerMapper.updateById(lifeClassBannerList.get(i));
+        }
+        return R.success("操作成功");
+    }
 
+    @ApiOperation("删除banner轮播图")
+    @PostMapping("/delClassBanner")
+    public R delClassBanner(@RequestParam String id) {
+        // 记录方法调用的日志信息
+        log.info("LifeClassManageController.delClassBanner?id={}", id);
+
+        try {
+            lifeClassBannerMapper.update(null, new LambdaUpdateWrapper<LifeClassBanner>().eq(LifeClassBanner::getId, id).set(LifeClassBanner::getDeleteFlag, 1));
+            return R.success("操作成功");
+        } catch (Exception e) {
+            // 捕获异常并返回操作失败的消息
+            return R.fail("操作失败");
+        }
+    }
 }

+ 13 - 0
alien-store/src/main/java/shop/alien/store/service/LifeClassManageService.java

@@ -4,12 +4,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
+import shop.alien.entity.store.LifeClassBanner;
 import shop.alien.entity.store.LifeClassManage;
+import shop.alien.mapper.LifeClassBannerMapper;
 import shop.alien.mapper.LifeClassManageMapper;
 
 import java.util.Date;
@@ -26,6 +29,7 @@ import java.util.stream.Collectors;
 public class LifeClassManageService {
 
     private final LifeClassManageMapper lifeClassManageMapper;
+    private final LifeClassBannerMapper lifeClassBannerMapper;
 
     public IPage<LifeClassManage> getStores(int page, int size, String className, String classTeacher, String classBigType, String classSmallType) {
         IPage<LifeClassManage> storePage = new Page<>(page, size);
@@ -102,4 +106,13 @@ public class LifeClassManageService {
                 .orderByDesc(LifeClassManage::getCreatedTime);
         return lifeClassManageMapper.selectList(wrapper);
     }
+
+    public IPage<LifeClassBanner> getClassBannerPages(int page, int size, String bannerTitle, String playFlag) {
+        IPage<LifeClassBanner> ipage = new Page<>(page, size);
+        return lifeClassBannerMapper.selectPage(ipage, new LambdaQueryWrapper<LifeClassBanner>()
+                .like(null != bannerTitle && !bannerTitle.isEmpty(), LifeClassBanner::getBannerTitle, bannerTitle)
+                .eq(ObjectUtils.isNotEmpty(playFlag), LifeClassBanner::getPlayFlag, playFlag)
+                .eq(LifeClassBanner::getDeleteFlag, 0).orderByDesc(LifeClassBanner::getPlayFlag)
+                .orderByAsc(LifeClassBanner::getBannerSort));
+    }
 }