tsurumure 5 mesiacov pred
rodič
commit
ac7b830bb4

+ 3 - 3
db/cms_banner_i18n.sql

@@ -11,9 +11,9 @@ CREATE TABLE `cms_banner_i18n` (
     `banner_id` BIGINT NOT NULL COMMENT '幻灯片ID',
     `language` VARCHAR(10) NOT NULL COMMENT '语种',
     `title` VARCHAR(255) NOT NULL COMMENT '幻灯片标题',
-    `link` VARCHAR(500) COMMENT '链接',
-    `image` VARCHAR(500) NOT NULL COMMENT '图片',
-    `image_thumb` VARCHAR(500) NOT NULL COMMENT '图片 (缩略图)'
+    `link` VARCHAR(1000) COMMENT '链接',
+    `image` VARCHAR(1000) NOT NULL COMMENT '图片',
+    `image_thumb` VARCHAR(1000) NOT NULL COMMENT '图片 (缩略图)'
 ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='幻灯片表 (翻译)';
 
 INSERT INTO cms_banner_i18n(banner_id, language, title, link, image, image_thumb) VALUES

+ 3 - 0
db/sys_dictionary.sql

@@ -30,6 +30,9 @@ INSERT INTO sys_dictionary(category_value, key_value, key_translation, key_trans
     ('MenuType', 1, '菜单', 'Menu'),
     ('MenuType', 2, '按钮', 'Button'),
 
+    ('CmsBannerType', 1, '首页幻灯片', 'Home Banner'),
+    ('CmsBannerType', 2, '内页幻灯片', 'Page Banner'),
+
     -- -1:本地, 1:腾讯云, 2:阿里云, 3.抖音云
     ('UploadTarget', -1, '本地', 'Local'),
     ('UploadTarget', 1, '腾讯云', 'Tencent Cos'),

+ 2 - 2
src/main/java/com/backendsys/modules/cms/article/service/impl/ArticleCategoryServiceImpl.java

@@ -104,8 +104,8 @@ public class ArticleCategoryServiceImpl implements ArticleCategoryService {
 
         Long article_category_id = articleCategory.getArticle_category_id();
 
-        ArticleCategory articleDetail = articleCategoryDao.selectById(article_category_id);
-        if (articleDetail == null) throw new CustException("资讯分类不存在");
+        ArticleCategory detail = articleCategoryDao.selectById(article_category_id);
+        if (detail == null) throw new CustException("资讯分类不存在");
 
         articleCategoryDao.deleteById(article_category_id);
         articleCategoryI18nDao.delete(new QueryWrapper<ArticleCategoryI18n>().eq("article_category_id", article_category_id));

+ 1 - 2
src/main/java/com/backendsys/modules/cms/article/service/impl/ArticleServiceImpl.java

@@ -67,9 +67,8 @@ public class ArticleServiceImpl implements ArticleService {
         article.setUser_id(httpRequestUtil.getUserId());
         articleDao.insert(article);
 
-        Long article_id = article.getId();
-
         // 批量插入 (翻译字段)
+        Long article_id = article.getId();
         List<ArticleI18n> translations = article.getTranslations().stream()
             .peek(item -> { ValidationUtil.validateObject(item, ArticleI18n.Create.class); })
             .map(item -> { item.setArticle_id(article_id); return item; })

+ 16 - 21
src/main/java/com/backendsys/modules/cms/banner/controller/BannerController.java

@@ -1,16 +1,15 @@
 package com.backendsys.modules.cms.banner.controller;
 
-import com.backendsys.modules.cms.article.entity.Article;
 import com.backendsys.modules.cms.banner.entity.Banner;
 import com.backendsys.modules.cms.banner.service.BannerService;
+import com.backendsys.modules.common.aspect.SysLog;
 import com.backendsys.modules.common.utils.Result;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 @Validated
 @RestController
@@ -30,39 +29,35 @@ public class BannerController {
     @Operation(summary = "获取幻灯片详情")
     @PreAuthorize("@sr.hasPermission('10.1.1')")
     @GetMapping("/api/cms/banner/getBannerDetail")
-    public Result getBannerDetail(@Validated(Article.Detail.class) Banner banner) {
+    public Result getBannerDetail(@Validated(Banner.Detail.class) Banner banner) {
         return Result.success().put("data", bannerService.selectBannerDetail(banner));
     }
 
-    /*
-
-    @PreAuthorize("@sr.hasPermission('10.1.1')")
-    @QueryNullCheck(serviceClass = CmsBannerService.class, serviceMethod = "queryBannerDetail", argField = "banner_id", message = "幻灯片不存在")
-    @GetMapping("/api/cms/banner/getBannerDetail")
-    public Result getBannerDetail(@Validated(CmsBannerDTO.Detail.class) CmsBannerDTO cmsBannerDTO) {
-        return Result.success(QueryNullCheckAspect.getQueryResult());
-    }
-
+    @SysLog("创建幻灯片")
+    @Operation(summary = "创建幻灯片")
     @PreAuthorize("@sr.hasPermission('10.1.2')")
     @PostMapping("/api/cms/banner/createBanner")
-    public Result createBanner(@Validated(CmsBannerDTO.Create.class) @RequestBody CmsBannerDTO cmsBannerDTO) {
-        return Result.success(cmsBannerService.insertBanner(cmsBannerDTO), "创建成功");
+    public Result createBanner(@Validated(Banner.Create.class) @RequestBody Banner banner) {
+        return Result.success().put("data", bannerService.insertBanner(banner));
     }
 
+    @SysLog("编辑资讯")
+    @Operation(summary = "编辑资讯")
     @PreAuthorize("@sr.hasPermission('10.1.3')")
-    @QueryNullCheck(serviceClass = CmsBannerService.class, serviceMethod = "queryBannerDetail", argField = "banner_id", message = "幻灯片不存在")
     @PutMapping("/api/cms/banner/updateBanner")
-    public Result updateBanner(@Validated(CmsBannerDTO.Update.class) @RequestBody CmsBannerDTO cmsBannerDTO) {
-        return Result.success(cmsBannerService.updateBanner(cmsBannerDTO), "更新成功");
+    public Result updateBanner(@Validated(Banner.Update.class) @RequestBody Banner banner) {
+        return Result.success().put("data", bannerService.updateBanner(banner));
     }
 
+    @SysLog("删除资讯")
+    @Operation(summary = "删除资讯")
     @PreAuthorize("@sr.hasPermission('10.1.4')")
-    @QueryNullCheck(serviceClass = CmsBannerService.class, serviceMethod = "queryBannerDetail", argField = "banner_id", message = "幻灯片不存在")
     @DeleteMapping("/api/cms/banner/deleteBanner")
-    public Result deleteBanner(@Validated(CmsBannerDTO.Delete.class) @RequestBody CmsBannerDTO cmsBannerDTO) {
-        return Result.success(cmsBannerService.deleteBanner(cmsBannerDTO), "删除成功");
+    public Result deleteBanner(@Validated(Banner.Delete.class) @RequestBody Banner banner) {
+        return Result.success().put("data", bannerService.deleteBanner(banner));
     }
 
+    /*
     @GetMapping("/api/public/cms/banner/getBanner")
     public Result getPublicBanner(@Validated PageDTO pageDTO, @Validated CmsBannerDTO cmsBannerDTO) {
         cmsBannerDTO.setStatus(1); // 已启用

+ 13 - 0
src/main/java/com/backendsys/modules/cms/banner/dao/BannerI18nDao.java

@@ -0,0 +1,13 @@
+package com.backendsys.modules.cms.banner.dao;
+
+import com.backendsys.modules.cms.banner.entity.BannerI18n;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface BannerI18nDao extends BaseMapper<BannerI18n> {
+    int insertBatch(List<BannerI18n> translations);
+    int updateBatch(List<BannerI18n> translations);
+}

+ 2 - 0
src/main/java/com/backendsys/modules/cms/banner/entity/Banner.java

@@ -24,6 +24,8 @@ public class Banner {
     private String lang;
     @TableId(type = IdType.AUTO)
     private Long id;
+
+    @TableField("id")
     @NotNull(message="banner_id 不能为空", groups = { Detail.class, Update.class, Delete.class })
     private Long banner_id;
 

+ 3 - 3
src/main/java/com/backendsys/modules/cms/banner/entity/BannerI18n.java

@@ -29,12 +29,12 @@ public class BannerI18n {
     @Size(max = 20, message = "资讯标题长度不超过 {max} 字符", groups = { Create.class, Update.class })
     @NotNull(message="幻灯片标题不能为空", groups = { Create.class, Update.class })
     private String title;
-    @Size(max = 500, message = "链接路径长度不超过 {max} 字符", groups = { Create.class, Update.class})
+    @Size(max = 1000, message = "链接路径长度不超过 {max} 字符", groups = { Create.class, Update.class})
     private String link;
-    @Size(max = 500, message = "图片路径长度不超过 {max} 字符", groups = { Create.class, Update.class})
+    @Size(max = 1000, message = "图片路径长度不超过 {max} 字符", groups = { Create.class, Update.class})
     @NotNull(message="图片路径不能为空", groups = { Create.class, Update.class })
     private String image;
-    @Size(max = 500, message = "图片(缩略图)路径长度不超过 {max} 字符", groups = { Create.class, Update.class})
+    @Size(max = 1000, message = "图片(缩略图)路径长度不超过 {max} 字符", groups = { Create.class, Update.class})
     @NotNull(message="图片(缩略图)路径不能为空", groups = { Create.class, Update.class })
     private String image_thumb;
 

+ 6 - 1
src/main/java/com/backendsys/modules/cms/banner/service/BannerService.java

@@ -11,5 +11,10 @@ public interface BannerService {
     PageEntity selectBannerList(Banner banner);
     // 获取幻灯片详情
     Map<String, Object> selectBannerDetail(Banner banner);
-
+    // 创建幻灯片
+    Map<String, Object> insertBanner(Banner banner);
+    // 编辑幻灯片
+    Map<String, Object> updateBanner(Banner banner);
+    // 删除幻灯片
+    Map<String, Object> deleteBanner(Banner banner);
 }

+ 83 - 1
src/main/java/com/backendsys/modules/cms/banner/service/impl/BannerServiceImpl.java

@@ -1,23 +1,32 @@
 package com.backendsys.modules.cms.banner.service.impl;
 
+import com.backendsys.exception.CustException;
 import com.backendsys.modules.cms.article.entity.Article;
 import com.backendsys.modules.cms.banner.dao.BannerDao;
+import com.backendsys.modules.cms.banner.dao.BannerI18nDao;
 import com.backendsys.modules.cms.banner.entity.Banner;
+import com.backendsys.modules.cms.banner.entity.BannerI18n;
 import com.backendsys.modules.cms.banner.service.BannerService;
+import com.backendsys.modules.common.utils.ValidationUtil;
 import com.backendsys.utils.response.PageEntity;
 import com.backendsys.utils.response.PageInfoResult;
 import com.backendsys.utils.v2.PageUtils;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class BannerServiceImpl implements BannerService {
 
     @Autowired
     private BannerDao bannerDao;
+    @Autowired
+    private BannerI18nDao bannerI18nDao;
 
     /**
      * 获取幻灯片列表
@@ -29,10 +38,83 @@ public class BannerServiceImpl implements BannerService {
         return new PageInfoResult(list).toEntity();
     }
 
-    // 获取幻灯片详情
+    /**
+     * 获取幻灯片详情
+     */
     @Override
     public Map<String, Object> selectBannerDetail(Banner banner) {
         return bannerDao.selectBannerDetail(banner);
     }
 
+
+    /**
+     * 创建幻灯片
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> insertBanner(Banner banner) {
+
+        // 插入
+        bannerDao.insert(banner);
+
+        // 批量插入 (翻译字段)
+        Long banner_id = banner.getId();
+        List<BannerI18n> translations = banner.getTranslations().stream()
+            .peek(item -> { ValidationUtil.validateObject(item, BannerI18n.Create.class); })
+            .map(item -> { item.setBanner_id(banner_id); return item; })
+            .collect(Collectors.toList());
+        bannerI18nDao.insertBatch(translations);
+
+        return Map.of("banner_id", banner_id);
+    }
+
+    /**
+     * 编辑幻灯片
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> updateBanner(Banner banner) {
+
+        System.out.println(banner);
+
+        Long banner_id = banner.getBanner_id();
+
+        Banner detail = bannerDao.selectById(banner_id);
+        if (detail == null) throw new CustException("幻灯片不存在");
+
+        // 更新
+        banner.setId(banner_id);
+        bannerDao.updateById(banner);
+
+        // 批量更新 (翻译字段)
+        List<BannerI18n> translations = banner.getTranslations().stream()
+            .peek(item -> { ValidationUtil.validateObject(item, BannerI18n.Create.class); })
+            .map(item -> { item.setBanner_id(banner_id); return item; })
+            .collect(Collectors.toList());
+
+        System.out.println(translations);
+
+        bannerI18nDao.updateBatch(translations);
+
+        return Map.of("banner_id", banner_id);
+    }
+
+    /**
+     * 删除幻灯片
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> deleteBanner(Banner banner) {
+
+        Long banner_id = banner.getBanner_id();
+
+        Banner detail = bannerDao.selectById(banner_id);
+        if (detail == null) throw new CustException("幻灯片不存在");
+
+        bannerDao.deleteById(banner_id);
+        bannerI18nDao.delete(new QueryWrapper<BannerI18n>().eq("banner_id", banner_id));
+
+        return Map.of("banner_id", banner_id);
+    }
+
 }

+ 1 - 1
src/main/resources/mapper/cms/article/ArticleDao.xml

@@ -127,7 +127,7 @@
 
     <!-- 查 详情 -->
     <select id="selectArticleDetail" resultMap="resultMapArticleDetail">
-         SELECT <include refid="includeArticleDetail" />
+        SELECT <include refid="includeArticleDetail" />
         FROM cms_article a
         <include refid="leftJoinCategory" />
         <include refid="leftJoinUser" />

+ 4 - 0
src/main/resources/mapper/cms/banner/BannerDao.xml

@@ -55,6 +55,10 @@
     <resultMap id="resultMapBannerDetail" type="java.util.LinkedHashMap">
         <id property="id" column="id" jdbcType="BIGINT" />
         <result property="banner_id" column="banner_id" javaType="java.lang.Long" />
+        <result property="title" column="title" />
+        <result property="link" column="link" />
+        <result property="image" column="image" />
+        <result property="image_thumb" column="image_thumb" />
         <result property="type" column="type" javaType="java.lang.Integer" />
         <result property="sort" column="sort" javaType="java.lang.Integer" />
         <result property="status" column="status" javaType="java.lang.Integer" />

+ 40 - 0
src/main/resources/mapper/cms/banner/BannerI18nDao.xml

@@ -0,0 +1,40 @@
+<?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.backendsys.modules.cms.banner.dao.BannerI18nDao">
+
+    <!-- 批量插入 -->
+    <insert id="insertBatch" parameterType="java.util.List">
+        INSERT INTO cms_banner_i18n (
+            banner_id, language, title, link, image, image_thumb
+        )
+        VALUES
+        <foreach collection="translations" item="item" separator=",">
+        (
+            #{item.banner_id}, #{item.language}, #{item.title}, #{item.link}, #{item.image}, #{item.image_thumb}
+        )
+        </foreach>
+    </insert>
+
+    <!-- 批量更新 -->
+    <update id="updateBatch" parameterType="com.backendsys.modules.cms.banner.entity.BannerI18n">
+        <foreach collection="translations" item="item" separator=";">
+            UPDATE cms_banner_i18n
+            <set>
+                <trim suffixOverrides="," suffix=" ">
+                    title = #{item.title},
+                    <if test="item.link != null and item.link != ''">
+                        link = #{item.link},
+                    </if>
+                    <if test="item.image != null and item.image != ''">
+                        image = #{item.image},
+                    </if>
+                    <if test="item.image_thumb != null and item.image_thumb != ''">
+                        image_thumb = #{item.image_thumb},
+                    </if>
+                </trim>
+            </set>
+            WHERE banner_id = #{item.banner_id} AND language = #{item.language}
+        </foreach>
+    </update>
+
+</mapper>