From b0fee54f8475336b05c50ef3154c51f60ebd63aa Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期日, 22 六月 2025 17:55:12 +0800
Subject: [PATCH] add:首页配置

---
 src/main/java/com/mzl/flower/service/film/HomeConfigService.java          |   26 +++
 src/main/resources/mapper/film/HomeConfigMapper.xml                       |   17 ++
 src/main/java/com/mzl/flower/web/film/HomeConfigController.java           |   76 ++++++++++
 src/main/java/com/mzl/flower/dto/request/film/HomeConfigDTO.java          |   47 ++++++
 src/main/java/com/mzl/flower/dto/request/film/HomeConfigQueryDTO.java     |   13 +
 src/main/java/com/mzl/flower/dto/response/film/HomeConfigVO.java          |   53 +++++++
 src/main/java/com/mzl/flower/mapper/film/HomeConfigMapper.java            |   32 ++++
 src/main/java/com/mzl/flower/service/film/impl/HomeConfigServiceImpl.java |  114 ++++++++++++++++
 src/main/java/com/mzl/flower/entity/film/HomeConfig.java                  |   34 ++++
 9 files changed, 412 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/mzl/flower/dto/request/film/HomeConfigDTO.java b/src/main/java/com/mzl/flower/dto/request/film/HomeConfigDTO.java
new file mode 100644
index 0000000..d774094
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/request/film/HomeConfigDTO.java
@@ -0,0 +1,47 @@
+package com.mzl.flower.dto.request.film;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class HomeConfigDTO {
+
+    private Long id;
+
+    @ApiModelProperty("主标题")
+    private String mainTitle;
+
+    @ApiModelProperty("副标题")
+    private String subTitle;
+
+    @ApiModelProperty("按钮1文本")
+    private String btnText1;
+
+    @ApiModelProperty("按钮2文本")
+    private String btnText2;
+
+    @ApiModelProperty("按钮1图标")
+    private String btnIcon1;
+
+    @ApiModelProperty("按钮2图标")
+    private String btnIcon2;
+
+    @ApiModelProperty("图标1颜色")
+    private String iconColor1;
+
+    @ApiModelProperty("图标2颜色")
+    private String iconColor2;
+
+    @ApiModelProperty("动作类型")
+    private String actionType;
+
+    @ApiModelProperty("动作目标")
+    private String actionTarget;
+
+    @ApiModelProperty("状态")
+    private Boolean status;
+
+    @ApiModelProperty("版本号")
+    private String version;
+
+}
diff --git a/src/main/java/com/mzl/flower/dto/request/film/HomeConfigQueryDTO.java b/src/main/java/com/mzl/flower/dto/request/film/HomeConfigQueryDTO.java
new file mode 100644
index 0000000..e33499d
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/request/film/HomeConfigQueryDTO.java
@@ -0,0 +1,13 @@
+package com.mzl.flower.dto.request.film;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class HomeConfigQueryDTO {
+    @ApiModelProperty("版本")
+    private String version;
+
+    @ApiModelProperty("状态")
+    private String mainTitle;
+}
diff --git a/src/main/java/com/mzl/flower/dto/response/film/HomeConfigVO.java b/src/main/java/com/mzl/flower/dto/response/film/HomeConfigVO.java
new file mode 100644
index 0000000..2077ea8
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/response/film/HomeConfigVO.java
@@ -0,0 +1,53 @@
+package com.mzl.flower.dto.response.film;
+
+import com.mzl.flower.base.AbstractTransDTO;
+import com.mzl.flower.base.annotation.DictTrans;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class HomeConfigVO extends AbstractTransDTO {
+    private Long id;
+
+    @ApiModelProperty("主标题")
+    private String mainTitle;
+
+    @ApiModelProperty("副标题")
+    private String subTitle;
+
+    @ApiModelProperty("按钮1文本")
+    private String btnText1;
+
+    @ApiModelProperty("按钮2文本")
+    private String btnText2;
+
+    @ApiModelProperty("按钮1图标")
+    private String btnIcon1;
+
+    @ApiModelProperty("按钮2图标")
+    private String btnIcon2;
+
+    @ApiModelProperty("图标1颜色")
+    private String iconColor1;
+
+    @ApiModelProperty("图标2颜色")
+    private String iconColor2;
+
+    @ApiModelProperty("动作类型")
+    private String actionType;
+
+    @ApiModelProperty("动作目标")
+    private String actionTarget;
+
+    @ApiModelProperty("发布状态(COMMON_PUBLISH_STATUS)")
+    @DictTrans(target = "statusStr", codeType = "COMMON_PUBLISH_STATUS")
+    private String status;
+
+    @ApiModelProperty("发布状态(COMMON_PUBLISH_STATUS)")
+    private String statusStr;
+
+    @ApiModelProperty("版本号")
+    private String version;
+}
diff --git a/src/main/java/com/mzl/flower/entity/film/HomeConfig.java b/src/main/java/com/mzl/flower/entity/film/HomeConfig.java
new file mode 100644
index 0000000..25218f2
--- /dev/null
+++ b/src/main/java/com/mzl/flower/entity/film/HomeConfig.java
@@ -0,0 +1,34 @@
+package com.mzl.flower.entity.film;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.mzl.flower.base.BaseAutoEntity;
+import lombok.Data;
+
+
+@Data
+@TableName("home_config")
+public class HomeConfig extends BaseAutoEntity {
+/**
+ * packageName com.mzl.flower.entity.film
+ * @author fanghaowei
+ * @version version2.0
+ * @className HomeConfig
+ * @date 2025/6/19
+ * @description TODO
+ */
+
+    private String mainTitle;
+    private String subTitle;       // 副标题
+    private String btnText1;       // 按钮1文本
+    private String btnText2;       // 按钮2文本
+    private String btnIcon1;       // 按钮1图标
+    private String btnIcon2;       // 按钮2图标
+    private String iconColor1;     // 图标1颜色
+    private String iconColor2;     // 图标2颜色
+    private String actionType;     // 动作类型
+    private String actionTarget;   // 动作目标
+    private String status;         // 状态
+    private String version;        // 版本号
+
+
+}
diff --git a/src/main/java/com/mzl/flower/mapper/film/HomeConfigMapper.java b/src/main/java/com/mzl/flower/mapper/film/HomeConfigMapper.java
new file mode 100644
index 0000000..b493dce
--- /dev/null
+++ b/src/main/java/com/mzl/flower/mapper/film/HomeConfigMapper.java
@@ -0,0 +1,32 @@
+package com.mzl.flower.mapper.film;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mzl.flower.dto.request.film.HomeConfigQueryDTO;
+import com.mzl.flower.dto.response.film.HomeConfigVO;
+import com.mzl.flower.entity.film.HomeConfig;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+/**
+ *
+ * @author generator@Fang
+ * @since 2025-05-29
+ */
+@Repository
+public interface HomeConfigMapper extends BaseMapper<HomeConfig> {
+
+    List<HomeConfigVO> queryPage(@Param("dto")HomeConfigQueryDTO homeConfigQueryDTO, Page page);
+
+    @Select("select * from home_config where status = #{name} and deleted = '0'")
+    List<HomeConfig> queryList(String name);
+
+
+    @Select("select * from home_config where status = 'published' and deleted = '0' limit 1")
+    HomeConfigVO getHomeConfigInfo();
+}
+
diff --git a/src/main/java/com/mzl/flower/service/film/HomeConfigService.java b/src/main/java/com/mzl/flower/service/film/HomeConfigService.java
new file mode 100644
index 0000000..8b1a4e3
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/film/HomeConfigService.java
@@ -0,0 +1,26 @@
+package com.mzl.flower.service.film;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mzl.flower.dto.request.film.HomeConfigDTO;
+import com.mzl.flower.dto.request.film.HomeConfigQueryDTO;
+import com.mzl.flower.dto.response.film.HomeConfigVO;
+import com.mzl.flower.entity.film.HomeConfig;
+
+public interface HomeConfigService extends IService<HomeConfig> {
+
+
+    void saveHomeConfig(HomeConfigDTO homeConfigDTO);
+
+    void updateHomeConfig(HomeConfigDTO homeConfigDTO);
+
+    void deleteHomeConfig(String id);
+
+    Page<HomeConfigVO> queryPage(HomeConfigQueryDTO homeConfigQueryDTO, Page page);
+
+    void changeStatus(Long id);
+
+    HomeConfigVO detail(Long id);
+
+    HomeConfigVO getHomeConfigInfo();
+}
diff --git a/src/main/java/com/mzl/flower/service/film/impl/HomeConfigServiceImpl.java b/src/main/java/com/mzl/flower/service/film/impl/HomeConfigServiceImpl.java
new file mode 100644
index 0000000..ad90f3c
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/film/impl/HomeConfigServiceImpl.java
@@ -0,0 +1,114 @@
+package com.mzl.flower.service.film.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mzl.flower.config.exception.ValidationException;
+import com.mzl.flower.config.security.SecurityUtils;
+import com.mzl.flower.constant.Constants;
+import com.mzl.flower.dto.request.film.HomeConfigDTO;
+import com.mzl.flower.dto.request.film.HomeConfigQueryDTO;
+import com.mzl.flower.dto.response.content.AnnouncementDTO;
+import com.mzl.flower.dto.response.film.HomeConfigVO;
+import com.mzl.flower.entity.content.Announcement;
+import com.mzl.flower.entity.film.HomeConfig;
+import com.mzl.flower.mapper.film.HomeConfigMapper;
+import com.mzl.flower.service.film.HomeConfigService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+
+@Service
+@Transactional
+@RequiredArgsConstructor
+public class HomeConfigServiceImpl extends ServiceImpl<HomeConfigMapper, HomeConfig> implements HomeConfigService {
+
+    @Resource
+    private HomeConfigMapper homeConfigMapper;
+
+    @Override
+    public void saveHomeConfig(HomeConfigDTO homeConfigDTO) {
+        HomeConfig homeConfig = new HomeConfig();
+        BeanUtils.copyProperties(homeConfigDTO, homeConfig);
+        homeConfig.setStatus(Constants.COMMON_PUBLISH_STATUS.unpublished.name());
+        homeConfig.create(SecurityUtils.getUserId());
+        homeConfigMapper.insert(homeConfig);
+    }
+
+    @Override
+    public void updateHomeConfig(HomeConfigDTO homeConfigDTO) {
+        if(homeConfigDTO.getId()==null || homeConfigDTO.getId()==0){
+            throw new ValidationException("id不能为空");
+        }
+        HomeConfig homeConfig = homeConfigMapper.selectById(homeConfigDTO.getId());
+        if(homeConfig==null){
+            throw new ValidationException("找不到id为"+homeConfigDTO.getId()+"的配置");
+        }
+        BeanUtils.copyProperties(homeConfigDTO, homeConfig);
+        homeConfig.update(SecurityUtils.getUserId());
+        homeConfigMapper.updateById(homeConfig);
+    }
+
+    @Override
+    public void deleteHomeConfig(String id) {
+        HomeConfig homeConfig = homeConfigMapper.selectById(id);
+        if (homeConfig == null) {
+            throw new ValidationException("主页配置不存在");
+        }
+        //已发布的不能删除
+        if(Constants.COMMON_PUBLISH_STATUS.published.name().equals(homeConfig.getStatus())){
+            throw new ValidationException("已发布的不能删除");
+        }
+        homeConfigMapper.deleteById(id);
+    }
+
+    @Override
+    public Page<HomeConfigVO> queryPage(HomeConfigQueryDTO homeConfigQueryDTO, Page page) {
+        List<HomeConfigVO> list = homeConfigMapper.queryPage(homeConfigQueryDTO, page);
+        return page.setRecords(list);
+    }
+
+    @Override
+    public void changeStatus(Long id) {
+        HomeConfig homeConfig = homeConfigMapper.selectById(id);
+        if(homeConfig==null){
+            throw new ValidationException("找不到id为"+id+"的公告");
+        }
+        //判断所有列表中是否已经存在已发布
+        List<HomeConfig> list = homeConfigMapper.queryList(Constants.COMMON_PUBLISH_STATUS.published.name());
+        if(list.size()==1 && Constants.COMMON_PUBLISH_STATUS.published.name().equals(homeConfig.getStatus())){
+            homeConfig.setStatus(Constants.COMMON_PUBLISH_STATUS.unpublished.name());
+            homeConfigMapper.updateById(homeConfig);
+        }else {
+            if (list.size() > 0) {
+                throw new ValidationException("已存在已发布");
+            }
+            if (Constants.COMMON_PUBLISH_STATUS.published.name().equals(homeConfig.getStatus())) {
+                homeConfig.setStatus(Constants.COMMON_PUBLISH_STATUS.unpublished.name());
+            } else {
+                homeConfig.setStatus(Constants.COMMON_PUBLISH_STATUS.published.name());
+            }
+            homeConfigMapper.updateById(homeConfig);
+        }
+    }
+
+    @Override
+    public HomeConfigVO detail(Long id) {
+        HomeConfig homeConfig = homeConfigMapper.selectById(id);
+        if(homeConfig==null){
+            return null;
+        }
+        HomeConfigVO vo = new HomeConfigVO();
+        BeanUtils.copyProperties(homeConfig,vo);
+        return vo;
+    }
+
+    @Override
+    public HomeConfigVO getHomeConfigInfo() {
+        return homeConfigMapper.getHomeConfigInfo();
+    }
+}
diff --git a/src/main/java/com/mzl/flower/web/film/HomeConfigController.java b/src/main/java/com/mzl/flower/web/film/HomeConfigController.java
new file mode 100644
index 0000000..0ef2d52
--- /dev/null
+++ b/src/main/java/com/mzl/flower/web/film/HomeConfigController.java
@@ -0,0 +1,76 @@
+package com.mzl.flower.web.film;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mzl.flower.base.BaseController;
+import com.mzl.flower.base.R;
+import com.mzl.flower.base.ReturnDataDTO;
+import com.mzl.flower.dto.request.film.HomeConfigDTO;
+import com.mzl.flower.dto.request.film.HomeConfigQueryDTO;
+import com.mzl.flower.dto.response.content.AnnouncementDTO;
+import com.mzl.flower.dto.response.film.HomeConfigVO;
+import com.mzl.flower.service.film.HomeConfigService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotNull;
+
+
+@Api(value = "主页配置", tags = "主页配置")
+@RestController
+@RequestMapping("/api/home")
+@RequiredArgsConstructor
+public class HomeConfigController extends BaseController {
+
+    private final HomeConfigService homeConfigService;
+
+    @GetMapping("/homeConfig/info")
+    @ApiOperation(value = "主页配置信息", httpMethod = "GET")
+    public ResponseEntity<ReturnDataDTO<HomeConfigVO>> getHomeConfigInfo() {
+        return returnData(R.SUCCESS.getCode(), homeConfigService.getHomeConfigInfo());
+    }
+
+
+    @GetMapping("/homeConfig/list")
+    @ApiOperation(value = "主页配置列表", httpMethod = "GET")
+    public ResponseEntity<ReturnDataDTO<Page<HomeConfigVO>>> getHomeConfigList(Page page, HomeConfigQueryDTO dto) {
+        return returnData(R.SUCCESS.getCode(), homeConfigService.queryPage(dto, page));
+    }
+
+    @GetMapping(value = "/homeConfig/delete")
+    @ApiOperation(value = "删除主页配置 ", httpMethod = "GET", notes = "ID")
+    public ResponseEntity delete(@NotNull(message = "id不能为空") Long id) {
+        homeConfigService.deleteHomeConfig(String.valueOf(id));
+        return returnData(R.SUCCESS.getCode(), null);
+    }
+
+    @PostMapping(value = "/homeConfig/new")
+    @ApiOperation(value = "保存主页配置", httpMethod = "POST")
+    public ResponseEntity insert(@RequestBody HomeConfigDTO homeConfigDTO) {
+        homeConfigService.saveHomeConfig(homeConfigDTO);
+        return returnData(R.SUCCESS.getCode(), null);
+    }
+
+    @PostMapping(value = "/homeConfig/edit")
+    @ApiOperation(value = "更新主页配置", httpMethod = "POST")
+    public ResponseEntity update(@RequestBody HomeConfigDTO homeConfigDTO) {
+        homeConfigService.updateHomeConfig(homeConfigDTO);
+        return returnData(R.SUCCESS.getCode(), null);
+    }
+
+    @GetMapping("/homeConfig/changeStatus")
+    @ApiOperation(value = "修改状态", notes = "修改状态")
+    public ResponseEntity<ReturnDataDTO> changeStatus(@NotNull(message = "id不能为空") Long id) {
+        homeConfigService.changeStatus(id);
+        return returnData(R.SUCCESS.getCode(), null);
+    }
+
+    @GetMapping("/homeConfig/list/view")
+    @ApiOperation(value = "详情", notes = "详情")
+    public ResponseEntity<ReturnDataDTO<HomeConfigVO>> detail(@NotNull(message = "id不能为空") Long id) {
+        return returnData(R.SUCCESS.getCode(),homeConfigService.detail(id));
+    }
+
+}
diff --git a/src/main/resources/mapper/film/HomeConfigMapper.xml b/src/main/resources/mapper/film/HomeConfigMapper.xml
new file mode 100644
index 0000000..a9e2e2a
--- /dev/null
+++ b/src/main/resources/mapper/film/HomeConfigMapper.xml
@@ -0,0 +1,17 @@
+<?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.mzl.flower.mapper.film.HomeConfigMapper">
+
+    <select id="queryPage" resultType="com.mzl.flower.dto.response.film.HomeConfigVO">
+        select t.* from home_config t
+        where t.deleted= 0
+        <if test="dto.version != null and dto.version != ''">
+            and t.version like concat('%', #{dto.version}, '%')
+        </if>
+        <if test="dto.mainTitle != null and dto.mainTitle != ''">
+            and t.main_title = #{dto.mainTitle}
+        </if>
+        order by t.version
+    </select>
+
+</mapper>

--
Gitblit v1.9.3