Browse Source

feat(business): 添加广告管理、banner图和用户反馈模块

- 新增广告管理实体类Advertising及对应CRUD接口
- 新增小程序banner图实体类BannerInfo及对应CRUD接口
- 新增用户反馈实体类UserFeedback及对应CRUD接口
- 实现各模块的controller、service、mapper、converter及VO/FORM对象
- 配置MyBatis映射文件支持广告管理和banner图分页查询
- 使用MapStruct实现对象转换,集成Spring Security权限控制
- 提供Swagger文档注解便于接口调试与说明
wzq 3 weeks ago
parent
commit
f2db156582
30 changed files with 1551 additions and 0 deletions
  1. 81 0
      src/main/java/com/zsElectric/boot/business/controller/AdvertisingController.java
  2. 81 0
      src/main/java/com/zsElectric/boot/business/controller/BannerInfoController.java
  3. 74 0
      src/main/java/com/zsElectric/boot/business/controller/UserFeedbackController.java
  4. 20 0
      src/main/java/com/zsElectric/boot/business/converter/AdvertisingConverter.java
  5. 20 0
      src/main/java/com/zsElectric/boot/business/converter/BannerInfoConverter.java
  6. 20 0
      src/main/java/com/zsElectric/boot/business/converter/UserFeedbackConverter.java
  7. 28 0
      src/main/java/com/zsElectric/boot/business/mapper/AdvertisingMapper.java
  8. 28 0
      src/main/java/com/zsElectric/boot/business/mapper/BannerInfoMapper.java
  9. 28 0
      src/main/java/com/zsElectric/boot/business/mapper/UserFeedbackMapper.java
  10. 56 0
      src/main/java/com/zsElectric/boot/business/model/entity/Advertising.java
  11. 56 0
      src/main/java/com/zsElectric/boot/business/model/entity/BannerInfo.java
  12. 69 0
      src/main/java/com/zsElectric/boot/business/model/entity/UserFeedback.java
  13. 72 0
      src/main/java/com/zsElectric/boot/business/model/form/AdvertisingForm.java
  14. 71 0
      src/main/java/com/zsElectric/boot/business/model/form/BannerInfoForm.java
  15. 78 0
      src/main/java/com/zsElectric/boot/business/model/form/UserFeedbackForm.java
  16. 21 0
      src/main/java/com/zsElectric/boot/business/model/query/AdvertisingQuery.java
  17. 21 0
      src/main/java/com/zsElectric/boot/business/model/query/BannerInfoQuery.java
  18. 21 0
      src/main/java/com/zsElectric/boot/business/model/query/UserFeedbackQuery.java
  19. 49 0
      src/main/java/com/zsElectric/boot/business/model/vo/AdvertisingVO.java
  20. 49 0
      src/main/java/com/zsElectric/boot/business/model/vo/BannerInfoVO.java
  21. 53 0
      src/main/java/com/zsElectric/boot/business/model/vo/UserFeedbackVO.java
  22. 58 0
      src/main/java/com/zsElectric/boot/business/service/AdvertisingService.java
  23. 58 0
      src/main/java/com/zsElectric/boot/business/service/BannerInfoService.java
  24. 51 0
      src/main/java/com/zsElectric/boot/business/service/UserFeedbackService.java
  25. 103 0
      src/main/java/com/zsElectric/boot/business/service/impl/AdvertisingServiceImpl.java
  26. 103 0
      src/main/java/com/zsElectric/boot/business/service/impl/BannerInfoServiceImpl.java
  27. 102 0
      src/main/java/com/zsElectric/boot/business/service/impl/UserFeedbackServiceImpl.java
  28. 26 0
      src/main/resources/mapper/business/AdvertisingMapper.xml
  29. 26 0
      src/main/resources/mapper/business/BannerInfoMapper.xml
  30. 28 0
      src/main/resources/mapper/business/UserFeedbackMapper.xml

+ 81 - 0
src/main/java/com/zsElectric/boot/business/controller/AdvertisingController.java

@@ -0,0 +1,81 @@
+package com.zsElectric.boot.business.controller;
+
+import com.zsElectric.boot.business.service.AdvertisingService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zsElectric.boot.business.model.form.AdvertisingForm;
+import com.zsElectric.boot.business.model.query.AdvertisingQuery;
+import com.zsElectric.boot.business.model.vo.AdvertisingVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zsElectric.boot.core.web.PageResult;
+import com.zsElectric.boot.core.web.Result;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import jakarta.validation.Valid;
+
+/**
+ * 广告管理前端控制层
+ *
+ * @author wzq
+ * @since 2025-11-26 15:57
+ */
+@Tag(name = "广告管理接口")
+@RestController
+@RequestMapping("/api/v1/advertising")
+@RequiredArgsConstructor
+public class AdvertisingController  {
+
+    private final AdvertisingService advertisingService;
+
+    @Operation(summary = "广告管理分页列表")
+    @GetMapping("/page")
+    @PreAuthorize("@ss.hasPerm('business:advertising:query')")
+    public PageResult<AdvertisingVO> getAdvertisingPage(AdvertisingQuery queryParams ) {
+        IPage<AdvertisingVO> result = advertisingService.getAdvertisingPage(queryParams);
+        return PageResult.success(result);
+    }
+
+    @Operation(summary = "新增广告管理")
+    @PostMapping
+    @PreAuthorize("@ss.hasPerm('business:advertising:add')")
+    public Result<Void> saveAdvertising(@RequestBody @Valid AdvertisingForm formData ) {
+        boolean result = advertisingService.saveAdvertising(formData);
+        return Result.judge(result);
+    }
+
+    @Operation(summary = "获取广告管理表单数据")
+    @GetMapping("/{id}/form")
+    @PreAuthorize("@ss.hasPerm('business:advertising:edit')")
+    public Result<AdvertisingForm> getAdvertisingForm(
+        @Parameter(description = "广告管理ID") @PathVariable Long id
+    ) {
+        AdvertisingForm formData = advertisingService.getAdvertisingFormData(id);
+        return Result.success(formData);
+    }
+
+    @Operation(summary = "修改广告管理")
+    @PutMapping(value = "/{id}")
+    @PreAuthorize("@ss.hasPerm('business:advertising:edit')")
+    public Result<Void> updateAdvertising(
+            @Parameter(description = "广告管理ID") @PathVariable Long id,
+            @RequestBody @Validated AdvertisingForm formData
+    ) {
+        boolean result = advertisingService.updateAdvertising(id, formData);
+        return Result.judge(result);
+    }
+
+    @Operation(summary = "删除广告管理")
+    @DeleteMapping("/{ids}")
+    @PreAuthorize("@ss.hasPerm('business:advertising:delete')")
+    public Result<Void> deleteAdvertisings(
+        @Parameter(description = "广告管理ID,多个以英文逗号(,)分割") @PathVariable String ids
+    ) {
+        boolean result = advertisingService.deleteAdvertisings(ids);
+        return Result.judge(result);
+    }
+}

+ 81 - 0
src/main/java/com/zsElectric/boot/business/controller/BannerInfoController.java

@@ -0,0 +1,81 @@
+package com.zsElectric.boot.business.controller;
+
+import com.zsElectric.boot.business.service.BannerInfoService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zsElectric.boot.business.model.form.BannerInfoForm;
+import com.zsElectric.boot.business.model.query.BannerInfoQuery;
+import com.zsElectric.boot.business.model.vo.BannerInfoVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zsElectric.boot.core.web.PageResult;
+import com.zsElectric.boot.core.web.Result;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import jakarta.validation.Valid;
+
+/**
+ * 小程序banner图前端控制层
+ *
+ * @author wzq
+ * @since 2025-11-26 15:59
+ */
+@Tag(name = "小程序banner图接口")
+@RestController
+@RequestMapping("/api/v1/banner-info")
+@RequiredArgsConstructor
+public class BannerInfoController  {
+
+    private final BannerInfoService bannerInfoService;
+
+    @Operation(summary = "小程序banner图分页列表")
+    @GetMapping("/page")
+    @PreAuthorize("@ss.hasPerm('business:banner-info:query')")
+    public PageResult<BannerInfoVO> getBannerInfoPage(BannerInfoQuery queryParams ) {
+        IPage<BannerInfoVO> result = bannerInfoService.getBannerInfoPage(queryParams);
+        return PageResult.success(result);
+    }
+
+    @Operation(summary = "新增小程序banner图")
+    @PostMapping
+    @PreAuthorize("@ss.hasPerm('business:banner-info:add')")
+    public Result<Void> saveBannerInfo(@RequestBody @Valid BannerInfoForm formData ) {
+        boolean result = bannerInfoService.saveBannerInfo(formData);
+        return Result.judge(result);
+    }
+
+    @Operation(summary = "获取小程序banner图表单数据")
+    @GetMapping("/{id}/form")
+    @PreAuthorize("@ss.hasPerm('business:banner-info:edit')")
+    public Result<BannerInfoForm> getBannerInfoForm(
+        @Parameter(description = "小程序banner图ID") @PathVariable Long id
+    ) {
+        BannerInfoForm formData = bannerInfoService.getBannerInfoFormData(id);
+        return Result.success(formData);
+    }
+
+    @Operation(summary = "修改小程序banner图")
+    @PutMapping(value = "/{id}")
+    @PreAuthorize("@ss.hasPerm('business:banner-info:edit')")
+    public Result<Void> updateBannerInfo(
+            @Parameter(description = "小程序banner图ID") @PathVariable Long id,
+            @RequestBody @Validated BannerInfoForm formData
+    ) {
+        boolean result = bannerInfoService.updateBannerInfo(id, formData);
+        return Result.judge(result);
+    }
+
+    @Operation(summary = "删除小程序banner图")
+    @DeleteMapping("/{ids}")
+    @PreAuthorize("@ss.hasPerm('business:banner-info:delete')")
+    public Result<Void> deleteBannerInfos(
+        @Parameter(description = "小程序banner图ID,多个以英文逗号(,)分割") @PathVariable String ids
+    ) {
+        boolean result = bannerInfoService.deleteBannerInfos(ids);
+        return Result.judge(result);
+    }
+}

+ 74 - 0
src/main/java/com/zsElectric/boot/business/controller/UserFeedbackController.java

@@ -0,0 +1,74 @@
+package com.zsElectric.boot.business.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zsElectric.boot.business.model.form.UserFeedbackForm;
+import com.zsElectric.boot.business.model.query.UserFeedbackQuery;
+import com.zsElectric.boot.business.model.vo.UserFeedbackVO;
+import com.zsElectric.boot.business.service.UserFeedbackService;
+import com.zsElectric.boot.core.web.PageResult;
+import com.zsElectric.boot.core.web.Result;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@Tag(name = "v2.0 用户反馈")
+@RestController
+@RequestMapping("/api/v1/userFeedback")
+@RequiredArgsConstructor
+public class UserFeedbackController {
+
+    private final UserFeedbackService userFeedbackService;
+
+    @Operation(summary = "用户反馈分页列表")
+    @GetMapping("/page")
+    @PreAuthorize("@ss.hasPerm('business:user-feedback:query')")
+    public PageResult<UserFeedbackVO> getUserFeedbackPage(UserFeedbackQuery queryParams ) {
+        IPage<UserFeedbackVO> result = userFeedbackService.getUserFeedbackPage(queryParams);
+        return PageResult.success(result);
+    }
+
+    @Operation(summary = "新增用户反馈")
+    @PostMapping
+    @PreAuthorize("@ss.hasPerm('business:user-feedback:add')")
+    public Result<Void> saveUserFeedback(@RequestBody @Valid UserFeedbackForm formData ) {
+        boolean result = userFeedbackService.saveUserFeedback(formData);
+        return Result.judge(result);
+    }
+
+    @Operation(summary = "获取用户反馈表单数据")
+    @GetMapping("/{id}/form")
+    @PreAuthorize("@ss.hasPerm('business:user-feedback:edit')")
+    public Result<UserFeedbackForm> getUserFeedbackForm(
+            @Parameter(description = "用户反馈ID") @PathVariable Long id
+    ) {
+        UserFeedbackForm formData = userFeedbackService.getUserFeedbackFormData(id);
+        return Result.success(formData);
+    }
+
+    @Operation(summary = "修改用户反馈")
+    @PutMapping(value = "/{id}")
+    @PreAuthorize("@ss.hasPerm('business:user-feedback:edit')")
+    public Result<Void> updateUserFeedback(
+            @Parameter(description = "用户反馈ID") @PathVariable Long id,
+            @RequestBody @Validated UserFeedbackForm formData
+    ) {
+        boolean result = userFeedbackService.updateUserFeedback(id, formData);
+        return Result.judge(result);
+    }
+
+    @Operation(summary = "删除用户反馈")
+    @DeleteMapping("/{ids}")
+    @PreAuthorize("@ss.hasPerm('business:user-feedback:delete')")
+    public Result<Void> deleteUserFeedbacks(
+            @Parameter(description = "用户反馈ID,多个以英文逗号(,)分割") @PathVariable String ids
+    ) {
+        boolean result = userFeedbackService.deleteUserFeedbacks(ids);
+        return Result.judge(result);
+    }
+}
+

+ 20 - 0
src/main/java/com/zsElectric/boot/business/converter/AdvertisingConverter.java

@@ -0,0 +1,20 @@
+package com.zsElectric.boot.business.converter;
+
+import org.mapstruct.Mapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zsElectric.boot.business.model.entity.Advertising;
+import com.zsElectric.boot.business.model.form.AdvertisingForm;
+
+/**
+ * 广告管理对象转换器
+ *
+ * @author wzq
+ * @since 2025-11-26 15:57
+ */
+@Mapper(componentModel = "spring")
+public interface AdvertisingConverter{
+
+    AdvertisingForm toForm(Advertising entity);
+
+    Advertising toEntity(AdvertisingForm formData);
+}

+ 20 - 0
src/main/java/com/zsElectric/boot/business/converter/BannerInfoConverter.java

@@ -0,0 +1,20 @@
+package com.zsElectric.boot.business.converter;
+
+import org.mapstruct.Mapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zsElectric.boot.business.model.entity.BannerInfo;
+import com.zsElectric.boot.business.model.form.BannerInfoForm;
+
+/**
+ * 小程序banner图对象转换器
+ *
+ * @author wzq
+ * @since 2025-11-26 15:59
+ */
+@Mapper(componentModel = "spring")
+public interface BannerInfoConverter{
+
+    BannerInfoForm toForm(BannerInfo entity);
+
+    BannerInfo toEntity(BannerInfoForm formData);
+}

+ 20 - 0
src/main/java/com/zsElectric/boot/business/converter/UserFeedbackConverter.java

@@ -0,0 +1,20 @@
+package com.zsElectric.boot.business.converter;
+
+import org.mapstruct.Mapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zsElectric.boot.business.model.entity.UserFeedback;
+import com.zsElectric.boot.business.model.form.UserFeedbackForm;
+
+/**
+ * 用户反馈对象转换器
+ *
+ * @author wzq
+ * @since 2025-11-26 15:34
+ */
+@Mapper(componentModel = "spring")
+public interface UserFeedbackConverter{
+
+    UserFeedbackForm toForm(UserFeedback entity);
+
+    UserFeedback toEntity(UserFeedbackForm formData);
+}

+ 28 - 0
src/main/java/com/zsElectric/boot/business/mapper/AdvertisingMapper.java

@@ -0,0 +1,28 @@
+package com.zsElectric.boot.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zsElectric.boot.business.model.entity.Advertising;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zsElectric.boot.business.model.query.AdvertisingQuery;
+import com.zsElectric.boot.business.model.vo.AdvertisingVO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 广告管理Mapper接口
+ *
+ * @author wzq
+ * @since 2025-11-26 15:57
+ */
+@Mapper
+public interface AdvertisingMapper extends BaseMapper<Advertising> {
+
+    /**
+     * 获取广告管理分页数据
+     *
+     * @param page 分页对象
+     * @param queryParams 查询参数
+     * @return {@link Page<AdvertisingVO>} 广告管理分页列表
+     */
+    Page<AdvertisingVO> getAdvertisingPage(Page<AdvertisingVO> page, AdvertisingQuery queryParams);
+
+}

+ 28 - 0
src/main/java/com/zsElectric/boot/business/mapper/BannerInfoMapper.java

@@ -0,0 +1,28 @@
+package com.zsElectric.boot.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zsElectric.boot.business.model.entity.BannerInfo;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zsElectric.boot.business.model.query.BannerInfoQuery;
+import com.zsElectric.boot.business.model.vo.BannerInfoVO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 小程序banner图Mapper接口
+ *
+ * @author wzq
+ * @since 2025-11-26 15:59
+ */
+@Mapper
+public interface BannerInfoMapper extends BaseMapper<BannerInfo> {
+
+    /**
+     * 获取小程序banner图分页数据
+     *
+     * @param page 分页对象
+     * @param queryParams 查询参数
+     * @return {@link Page<BannerInfoVO>} 小程序banner图分页列表
+     */
+    Page<BannerInfoVO> getBannerInfoPage(Page<BannerInfoVO> page, BannerInfoQuery queryParams);
+
+}

+ 28 - 0
src/main/java/com/zsElectric/boot/business/mapper/UserFeedbackMapper.java

@@ -0,0 +1,28 @@
+package com.zsElectric.boot.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zsElectric.boot.business.model.entity.UserFeedback;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zsElectric.boot.business.model.query.UserFeedbackQuery;
+import com.zsElectric.boot.business.model.vo.UserFeedbackVO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 用户反馈Mapper接口
+ *
+ * @author wzq
+ * @since 2025-11-26 15:37
+ */
+@Mapper
+public interface UserFeedbackMapper extends BaseMapper<UserFeedback> {
+
+    /**
+     * 获取用户反馈分页数据
+     *
+     * @param page 分页对象
+     * @param queryParams 查询参数
+     * @return {@link Page<UserFeedbackVO>} 用户反馈分页列表
+     */
+    Page<UserFeedbackVO> getUserFeedbackPage(Page<UserFeedbackVO> page, UserFeedbackQuery queryParams);
+
+}

+ 56 - 0
src/main/java/com/zsElectric/boot/business/model/entity/Advertising.java

@@ -0,0 +1,56 @@
+package com.zsElectric.boot.business.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+ * 广告管理实体对象
+ *
+ * @author wzq
+ * @since 2025-11-26 15:57
+ */
+@Getter
+@Setter
+@TableName("c_advertising")
+public class Advertising extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 标题
+     */
+    private String name;
+    /**
+     * 状态 (0-禁用 1-启用)
+     */
+    private Integer status;
+    /**
+     * 排序
+     */
+    private Integer sort;
+    /**
+     * 广告位置  1.首页弹框
+     */
+    private Integer position;
+    /**
+     * 图片
+     */
+    private String picture;
+    /**
+     * 跳转路径
+     */
+    private String skipUrl;
+    /**
+     * 创建人ID
+     */
+    private Long createBy;
+    /**
+     * 更新人ID
+     */
+    private Long updateBy;
+    /**
+     * 逻辑删除标识(0-未删除 1-已删除)
+     */
+    private Integer isDeleted;
+}

+ 56 - 0
src/main/java/com/zsElectric/boot/business/model/entity/BannerInfo.java

@@ -0,0 +1,56 @@
+package com.zsElectric.boot.business.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+ * 小程序banner图实体对象
+ *
+ * @author wzq
+ * @since 2025-11-26 15:59
+ */
+@Getter
+@Setter
+@TableName("c_banner_info")
+public class BannerInfo extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * banner图片
+     */
+    private String picture;
+    /**
+     * 是否跳转 0-不跳转 1-跳转 
+     */
+    private Integer orJump;
+    /**
+     * 跳转小程序appid
+     */
+    private String jumpAppid;
+    /**
+     * 跳转页面
+     */
+    private String jumpPage;
+    /**
+     * 排序 越大越靠前
+     */
+    private Integer sort;
+    /**
+     * 状态 0-禁用 1-启用
+     */
+    private Integer status;
+    /**
+     * 创建人
+     */
+    private String createBy;
+    /**
+     * 更新人
+     */
+    private String updateBy;
+    /**
+     * 逻辑删除标识(0-未删除 1-已删除)
+     */
+    private Integer isDeleted;
+}

+ 69 - 0
src/main/java/com/zsElectric/boot/business/model/entity/UserFeedback.java

@@ -0,0 +1,69 @@
+package com.zsElectric.boot.business.model.entity;
+
+import com.zsElectric.boot.common.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * 用户反馈实体对象
+ *
+ * @author wzq
+ * @since 2025-11-26 15:37
+ */
+@Data
+@Accessors(chain = true)
+@TableName("c_user_feedback")
+@EqualsAndHashCode(callSuper = true)
+public class UserFeedback extends BaseEntity {
+
+    /**
+     * 问题类型(1投诉吐槽,2功能异常,3体验问题,4功能建议,9其他 )
+     */
+    private Integer type;
+    /**
+     * 问题描述
+     */
+    private String describe;
+    /**
+     * 相关图片地址
+     */
+    private String filesUrl;
+    /**
+     * 联系方式(手机号或者邮箱)
+     */
+    private String contactWay;
+    /**
+     * 答复信息
+     */
+    private String reply;
+    /**
+     * 用户编号
+     */
+    private Long userId;
+    /**
+     * 回复时间
+     */
+    private LocalDateTime replyTime;
+    /**
+     * 0未回复,1已回复
+     */
+    private Integer replyStatus;
+    /**
+     * 创建人ID
+     */
+    private Long createBy;
+    /**
+     * 更新人ID
+     */
+    private Long updateBy;
+    /**
+     * 逻辑删除标识(0-未删除 1-已删除)
+     */
+    private Integer isDeleted;
+}

+ 72 - 0
src/main/java/com/zsElectric/boot/business/model/form/AdvertisingForm.java

@@ -0,0 +1,72 @@
+package com.zsElectric.boot.business.model.form;
+
+import java.io.Serial;
+import java.io.Serializable;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.time.LocalDateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.*;
+
+/**
+ * 广告管理表单对象
+ *
+ * @author wzq
+ * @since 2025-11-26 15:57
+ */
+@Getter
+@Setter
+@Schema(description = "广告管理表单对象")
+public class AdvertisingForm implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "主键")
+    @NotNull(message = "主键不能为空")
+    private Long id;
+
+    @Schema(description = "标题")
+    @NotBlank(message = "标题不能为空")
+    @Size(max=50, message="标题长度不能超过50个字符")
+    private String name;
+
+    @Schema(description = "状态 (0-禁用 1-启用)")
+    @NotNull(message = "状态 (0-禁用 1-启用)不能为空")
+    private Integer status;
+
+    @Schema(description = "排序")
+    @NotNull(message = "排序不能为空")
+    private Integer sort;
+
+    @Schema(description = "广告位置  1.首页弹框")
+    private Integer position;
+
+    @Schema(description = "图片")
+    @Size(max=255, message="图片长度不能超过255个字符")
+    private String picture;
+
+    @Schema(description = "跳转路径")
+    @Size(max=255, message="跳转路径长度不能超过255个字符")
+    private String skipUrl;
+
+    @Schema(description = "创建时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @Schema(description = "创建人ID")
+    private Long createBy;
+
+    @Schema(description = "更新时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @Schema(description = "更新人ID")
+    private Long updateBy;
+
+    @Schema(description = "逻辑删除标识(0-未删除 1-已删除)")
+    private Integer isDeleted;
+
+
+}

+ 71 - 0
src/main/java/com/zsElectric/boot/business/model/form/BannerInfoForm.java

@@ -0,0 +1,71 @@
+package com.zsElectric.boot.business.model.form;
+
+import java.io.Serial;
+import java.io.Serializable;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.time.LocalDateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.*;
+
+/**
+ * 小程序banner图表单对象
+ *
+ * @author wzq
+ * @since 2025-11-26 15:59
+ */
+@Getter
+@Setter
+@Schema(description = "小程序banner图表单对象")
+public class BannerInfoForm implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "主键")
+    @NotNull(message = "主键不能为空")
+    private Long id;
+
+    @Schema(description = "banner图片")
+    @Size(max=255, message="banner图片长度不能超过255个字符")
+    private String picture;
+
+    @Schema(description = "是否跳转 0-不跳转 1-跳转 ")
+    private Integer orJump;
+
+    @Schema(description = "跳转小程序appid")
+    @Size(max=50, message="跳转小程序appid长度不能超过50个字符")
+    private String jumpAppid;
+
+    @Schema(description = "跳转页面")
+    @Size(max=255, message="跳转页面长度不能超过255个字符")
+    private String jumpPage;
+
+    @Schema(description = "排序 越大越靠前")
+    private Integer sort;
+
+    @Schema(description = "状态 0-禁用 1-启用")
+    private Integer status;
+
+    @Schema(description = "创建时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @Schema(description = "创建人")
+    @Size(max=64, message="创建人长度不能超过64个字符")
+    private String createBy;
+
+    @Schema(description = "更新时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @Schema(description = "更新人")
+    @Size(max=64, message="更新人长度不能超过64个字符")
+    private String updateBy;
+
+    @Schema(description = "逻辑删除标识(0-未删除 1-已删除)")
+    private Integer isDeleted;
+
+
+}

+ 78 - 0
src/main/java/com/zsElectric/boot/business/model/form/UserFeedbackForm.java

@@ -0,0 +1,78 @@
+package com.zsElectric.boot.business.model.form;
+
+import java.io.Serial;
+import java.io.Serializable;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.time.LocalDateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.*;
+
+/**
+ * 用户反馈表单对象
+ *
+ * @author wzq
+ * @since 2025-11-26 15:37
+ */
+@Getter
+@Setter
+@Schema(description = "用户反馈表单对象")
+public class UserFeedbackForm implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "主键")
+    @NotNull(message = "主键不能为空")
+    private Long id;
+
+    @Schema(description = "问题类型(1投诉吐槽,2功能异常,3体验问题,4功能建议,9其他 )")
+    @NotNull(message = "问题类型(1投诉吐槽,2功能异常,3体验问题,4功能建议,9其他 )不能为空")
+    private Integer type;
+
+    @Schema(description = "问题描述")
+    @Size(max=500, message="问题描述长度不能超过500个字符")
+    private String describe;
+
+    @Schema(description = "相关图片地址")
+    @Size(max=600, message="相关图片地址长度不能超过600个字符")
+    private String filesUrl;
+
+    @Schema(description = "联系方式(手机号或者邮箱)")
+    @Size(max=255, message="联系方式(手机号或者邮箱)长度不能超过255个字符")
+    private String contactWay;
+
+    @Schema(description = "答复信息")
+    @Size(max=500, message="答复信息长度不能超过500个字符")
+    private String reply;
+
+    @Schema(description = "用户编号")
+    private Long userId;
+
+    @Schema(description = "回复时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime replyTime;
+
+    @Schema(description = "0未回复,1已回复")
+    private Integer replyStatus;
+
+    @Schema(description = "创建时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @Schema(description = "创建人ID")
+    private Long createBy;
+
+    @Schema(description = "更新时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @Schema(description = "更新人ID")
+    private Long updateBy;
+
+    @Schema(description = "逻辑删除标识(0-未删除 1-已删除)")
+    private Integer isDeleted;
+
+
+}

+ 21 - 0
src/main/java/com/zsElectric/boot/business/model/query/AdvertisingQuery.java

@@ -0,0 +1,21 @@
+package com.zsElectric.boot.business.model.query;
+
+import com.zsElectric.boot.common.base.BasePageQuery;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 广告管理分页查询对象
+ *
+ * @author wzq
+ * @since 2025-11-26 15:57
+ */
+@Schema(description ="广告管理查询对象")
+@Getter
+@Setter
+public class AdvertisingQuery extends BasePageQuery {
+
+}

+ 21 - 0
src/main/java/com/zsElectric/boot/business/model/query/BannerInfoQuery.java

@@ -0,0 +1,21 @@
+package com.zsElectric.boot.business.model.query;
+
+import com.zsElectric.boot.common.base.BasePageQuery;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 小程序banner图分页查询对象
+ *
+ * @author wzq
+ * @since 2025-11-26 15:59
+ */
+@Schema(description ="小程序banner图查询对象")
+@Getter
+@Setter
+public class BannerInfoQuery extends BasePageQuery {
+
+}

+ 21 - 0
src/main/java/com/zsElectric/boot/business/model/query/UserFeedbackQuery.java

@@ -0,0 +1,21 @@
+package com.zsElectric.boot.business.model.query;
+
+import com.zsElectric.boot.common.base.BasePageQuery;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 用户反馈分页查询对象
+ *
+ * @author wzq
+ * @since 2025-11-26 15:37
+ */
+@Schema(description ="用户反馈查询对象")
+@Getter
+@Setter
+public class UserFeedbackQuery extends BasePageQuery {
+
+}

+ 49 - 0
src/main/java/com/zsElectric/boot/business/model/vo/AdvertisingVO.java

@@ -0,0 +1,49 @@
+package com.zsElectric.boot.business.model.vo;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.time.LocalDateTime;
+
+/**
+ * 广告管理视图对象
+ *
+ * @author wzq
+ * @since 2025-11-26 15:57
+ */
+@Getter
+@Setter
+@Schema( description = "广告管理视图对象")
+public class AdvertisingVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "主键")
+    private Long id;
+    @Schema(description = "标题")
+    private String name;
+    @Schema(description = "状态 (0-禁用 1-启用)")
+    private Integer status;
+    @Schema(description = "排序")
+    private Integer sort;
+    @Schema(description = "广告位置  1.首页弹框")
+    private Integer position;
+    @Schema(description = "图片")
+    private String picture;
+    @Schema(description = "跳转路径")
+    private String skipUrl;
+    @Schema(description = "创建时间")
+    private LocalDateTime createTime;
+    @Schema(description = "创建人ID")
+    private Long createBy;
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+    @Schema(description = "更新人ID")
+    private Long updateBy;
+    @Schema(description = "逻辑删除标识(0-未删除 1-已删除)")
+    private Integer isDeleted;
+}

+ 49 - 0
src/main/java/com/zsElectric/boot/business/model/vo/BannerInfoVO.java

@@ -0,0 +1,49 @@
+package com.zsElectric.boot.business.model.vo;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.time.LocalDateTime;
+
+/**
+ * 小程序banner图视图对象
+ *
+ * @author wzq
+ * @since 2025-11-26 15:59
+ */
+@Getter
+@Setter
+@Schema( description = "小程序banner图视图对象")
+public class BannerInfoVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "主键")
+    private Long id;
+    @Schema(description = "banner图片")
+    private String picture;
+    @Schema(description = "是否跳转 0-不跳转 1-跳转 ")
+    private Integer orJump;
+    @Schema(description = "跳转小程序appid")
+    private String jumpAppid;
+    @Schema(description = "跳转页面")
+    private String jumpPage;
+    @Schema(description = "排序 越大越靠前")
+    private Integer sort;
+    @Schema(description = "状态 0-禁用 1-启用")
+    private Integer status;
+    @Schema(description = "创建时间")
+    private LocalDateTime createTime;
+    @Schema(description = "创建人")
+    private String createBy;
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+    @Schema(description = "更新人")
+    private String updateBy;
+    @Schema(description = "逻辑删除标识(0-未删除 1-已删除)")
+    private Integer isDeleted;
+}

+ 53 - 0
src/main/java/com/zsElectric/boot/business/model/vo/UserFeedbackVO.java

@@ -0,0 +1,53 @@
+package com.zsElectric.boot.business.model.vo;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.time.LocalDateTime;
+
+/**
+ * 用户反馈视图对象
+ *
+ * @author wzq
+ * @since 2025-11-26 15:37
+ */
+@Getter
+@Setter
+@Schema( description = "用户反馈视图对象")
+public class UserFeedbackVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "主键")
+    private Long id;
+    @Schema(description = "问题类型(1投诉吐槽,2功能异常,3体验问题,4功能建议,9其他 )")
+    private Integer type;
+    @Schema(description = "问题描述")
+    private String describe;
+    @Schema(description = "相关图片地址")
+    private String filesUrl;
+    @Schema(description = "联系方式(手机号或者邮箱)")
+    private String contactWay;
+    @Schema(description = "答复信息")
+    private String reply;
+    @Schema(description = "用户编号")
+    private Long userId;
+    @Schema(description = "回复时间")
+    private LocalDateTime replyTime;
+    @Schema(description = "0未回复,1已回复")
+    private Integer replyStatus;
+    @Schema(description = "创建时间")
+    private LocalDateTime createTime;
+    @Schema(description = "创建人ID")
+    private Long createBy;
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+    @Schema(description = "更新人ID")
+    private Long updateBy;
+    @Schema(description = "逻辑删除标识(0-未删除 1-已删除)")
+    private Integer isDeleted;
+}

+ 58 - 0
src/main/java/com/zsElectric/boot/business/service/AdvertisingService.java

@@ -0,0 +1,58 @@
+package com.zsElectric.boot.business.service;
+
+import com.zsElectric.boot.business.model.entity.Advertising;
+import com.zsElectric.boot.business.model.form.AdvertisingForm;
+import com.zsElectric.boot.business.model.query.AdvertisingQuery;
+import com.zsElectric.boot.business.model.vo.AdvertisingVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 广告管理服务类
+ *
+ * @author wzq
+ * @since 2025-11-26 15:57
+ */
+public interface AdvertisingService extends IService<Advertising> {
+
+    /**
+     *广告管理分页列表
+     *
+     * @return {@link IPage<AdvertisingVO>} 广告管理分页列表
+     */
+    IPage<AdvertisingVO> getAdvertisingPage(AdvertisingQuery queryParams);
+
+    /**
+     * 获取广告管理表单数据
+     *
+     * @param id 广告管理ID
+     * @return 广告管理表单数据
+     */
+     AdvertisingForm getAdvertisingFormData(Long id);
+
+    /**
+     * 新增广告管理
+     *
+     * @param formData 广告管理表单对象
+     * @return 是否新增成功
+     */
+    boolean saveAdvertising(AdvertisingForm formData);
+
+    /**
+     * 修改广告管理
+     *
+     * @param id   广告管理ID
+     * @param formData 广告管理表单对象
+     * @return 是否修改成功
+     */
+    boolean updateAdvertising(Long id, AdvertisingForm formData);
+
+    /**
+     * 删除广告管理
+     *
+     * @param ids 广告管理ID,多个以英文逗号(,)分割
+     * @return 是否删除成功
+     */
+    boolean deleteAdvertisings(String ids);
+
+}

+ 58 - 0
src/main/java/com/zsElectric/boot/business/service/BannerInfoService.java

@@ -0,0 +1,58 @@
+package com.zsElectric.boot.business.service;
+
+import com.zsElectric.boot.business.model.entity.BannerInfo;
+import com.zsElectric.boot.business.model.form.BannerInfoForm;
+import com.zsElectric.boot.business.model.query.BannerInfoQuery;
+import com.zsElectric.boot.business.model.vo.BannerInfoVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 小程序banner图服务类
+ *
+ * @author wzq
+ * @since 2025-11-26 15:59
+ */
+public interface BannerInfoService extends IService<BannerInfo> {
+
+    /**
+     *小程序banner图分页列表
+     *
+     * @return {@link IPage<BannerInfoVO>} 小程序banner图分页列表
+     */
+    IPage<BannerInfoVO> getBannerInfoPage(BannerInfoQuery queryParams);
+
+    /**
+     * 获取小程序banner图表单数据
+     *
+     * @param id 小程序banner图ID
+     * @return 小程序banner图表单数据
+     */
+     BannerInfoForm getBannerInfoFormData(Long id);
+
+    /**
+     * 新增小程序banner图
+     *
+     * @param formData 小程序banner图表单对象
+     * @return 是否新增成功
+     */
+    boolean saveBannerInfo(BannerInfoForm formData);
+
+    /**
+     * 修改小程序banner图
+     *
+     * @param id   小程序banner图ID
+     * @param formData 小程序banner图表单对象
+     * @return 是否修改成功
+     */
+    boolean updateBannerInfo(Long id, BannerInfoForm formData);
+
+    /**
+     * 删除小程序banner图
+     *
+     * @param ids 小程序banner图ID,多个以英文逗号(,)分割
+     * @return 是否删除成功
+     */
+    boolean deleteBannerInfos(String ids);
+
+}

+ 51 - 0
src/main/java/com/zsElectric/boot/business/service/UserFeedbackService.java

@@ -0,0 +1,51 @@
+package com.zsElectric.boot.business.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zsElectric.boot.business.model.entity.UserFeedback;
+import com.zsElectric.boot.business.model.form.UserFeedbackForm;
+import com.zsElectric.boot.business.model.query.UserFeedbackQuery;
+import com.zsElectric.boot.business.model.vo.UserFeedbackVO;
+
+public interface UserFeedbackService extends IService<UserFeedback> {
+
+    /**
+     *用户反馈分页列表
+     *
+     * @return {@link IPage < UserFeedbackVO >} 用户反馈分页列表
+     */
+    IPage<UserFeedbackVO> getUserFeedbackPage(UserFeedbackQuery queryParams);
+
+    /**
+     * 获取用户反馈表单数据
+     *
+     * @param id 用户反馈ID
+     * @return 用户反馈表单数据
+     */
+    UserFeedbackForm getUserFeedbackFormData(Long id);
+
+    /**
+     * 新增用户反馈
+     *
+     * @param formData 用户反馈表单对象
+     * @return 是否新增成功
+     */
+    boolean saveUserFeedback(UserFeedbackForm formData);
+
+    /**
+     * 修改用户反馈
+     *
+     * @param id   用户反馈ID
+     * @param formData 用户反馈表单对象
+     * @return 是否修改成功
+     */
+    boolean updateUserFeedback(Long id, UserFeedbackForm formData);
+
+    /**
+     * 删除用户反馈
+     *
+     * @param ids 用户反馈ID,多个以英文逗号(,)分割
+     * @return 是否删除成功
+     */
+    boolean deleteUserFeedbacks(String ids);
+}

+ 103 - 0
src/main/java/com/zsElectric/boot/business/service/impl/AdvertisingServiceImpl.java

@@ -0,0 +1,103 @@
+package com.zsElectric.boot.business.service.impl;
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zsElectric.boot.business.mapper.AdvertisingMapper;
+import com.zsElectric.boot.business.service.AdvertisingService;
+import com.zsElectric.boot.business.model.entity.Advertising;
+import com.zsElectric.boot.business.model.form.AdvertisingForm;
+import com.zsElectric.boot.business.model.query.AdvertisingQuery;
+import com.zsElectric.boot.business.model.vo.AdvertisingVO;
+import com.zsElectric.boot.business.converter.AdvertisingConverter;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.StrUtil;
+
+/**
+ * 广告管理服务实现类
+ *
+ * @author wzq
+ * @since 2025-11-26 15:57
+ */
+@Service
+@RequiredArgsConstructor
+public class AdvertisingServiceImpl extends ServiceImpl<AdvertisingMapper, Advertising> implements AdvertisingService {
+
+    private final AdvertisingConverter advertisingConverter;
+
+    /**
+    * 获取广告管理分页列表
+    *
+    * @param queryParams 查询参数
+    * @return {@link IPage<AdvertisingVO>} 广告管理分页列表
+    */
+    @Override
+    public IPage<AdvertisingVO> getAdvertisingPage(AdvertisingQuery queryParams) {
+        Page<AdvertisingVO> pageVO = this.baseMapper.getAdvertisingPage(
+                new Page<>(queryParams.getPageNum(), queryParams.getPageSize()),
+                queryParams
+        );
+        return pageVO;
+    }
+    
+    /**
+     * 获取广告管理表单数据
+     *
+     * @param id 广告管理ID
+     * @return 广告管理表单数据
+     */
+    @Override
+    public AdvertisingForm getAdvertisingFormData(Long id) {
+        Advertising entity = this.getById(id);
+        return advertisingConverter.toForm(entity);
+    }
+    
+    /**
+     * 新增广告管理
+     *
+     * @param formData 广告管理表单对象
+     * @return 是否新增成功
+     */
+    @Override
+    public boolean saveAdvertising(AdvertisingForm formData) {
+        Advertising entity = advertisingConverter.toEntity(formData);
+        return this.save(entity);
+    }
+    
+    /**
+     * 更新广告管理
+     *
+     * @param id   广告管理ID
+     * @param formData 广告管理表单对象
+     * @return 是否修改成功
+     */
+    @Override
+    public boolean updateAdvertising(Long id,AdvertisingForm formData) {
+        Advertising entity = advertisingConverter.toEntity(formData);
+        return this.updateById(entity);
+    }
+    
+    /**
+     * 删除广告管理
+     *
+     * @param ids 广告管理ID,多个以英文逗号(,)分割
+     * @return 是否删除成功
+     */
+    @Override
+    public boolean deleteAdvertisings(String ids) {
+        Assert.isTrue(StrUtil.isNotBlank(ids), "删除的广告管理数据为空");
+        // 逻辑删除
+        List<Long> idList = Arrays.stream(ids.split(","))
+                .map(Long::parseLong)
+                .toList();
+        return this.removeByIds(idList);
+    }
+
+}

+ 103 - 0
src/main/java/com/zsElectric/boot/business/service/impl/BannerInfoServiceImpl.java

@@ -0,0 +1,103 @@
+package com.zsElectric.boot.business.service.impl;
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zsElectric.boot.business.mapper.BannerInfoMapper;
+import com.zsElectric.boot.business.service.BannerInfoService;
+import com.zsElectric.boot.business.model.entity.BannerInfo;
+import com.zsElectric.boot.business.model.form.BannerInfoForm;
+import com.zsElectric.boot.business.model.query.BannerInfoQuery;
+import com.zsElectric.boot.business.model.vo.BannerInfoVO;
+import com.zsElectric.boot.business.converter.BannerInfoConverter;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.StrUtil;
+
+/**
+ * 小程序banner图服务实现类
+ *
+ * @author wzq
+ * @since 2025-11-26 15:59
+ */
+@Service
+@RequiredArgsConstructor
+public class BannerInfoServiceImpl extends ServiceImpl<BannerInfoMapper, BannerInfo> implements BannerInfoService {
+
+    private final BannerInfoConverter bannerInfoConverter;
+
+    /**
+    * 获取小程序banner图分页列表
+    *
+    * @param queryParams 查询参数
+    * @return {@link IPage<BannerInfoVO>} 小程序banner图分页列表
+    */
+    @Override
+    public IPage<BannerInfoVO> getBannerInfoPage(BannerInfoQuery queryParams) {
+        Page<BannerInfoVO> pageVO = this.baseMapper.getBannerInfoPage(
+                new Page<>(queryParams.getPageNum(), queryParams.getPageSize()),
+                queryParams
+        );
+        return pageVO;
+    }
+    
+    /**
+     * 获取小程序banner图表单数据
+     *
+     * @param id 小程序banner图ID
+     * @return 小程序banner图表单数据
+     */
+    @Override
+    public BannerInfoForm getBannerInfoFormData(Long id) {
+        BannerInfo entity = this.getById(id);
+        return bannerInfoConverter.toForm(entity);
+    }
+    
+    /**
+     * 新增小程序banner图
+     *
+     * @param formData 小程序banner图表单对象
+     * @return 是否新增成功
+     */
+    @Override
+    public boolean saveBannerInfo(BannerInfoForm formData) {
+        BannerInfo entity = bannerInfoConverter.toEntity(formData);
+        return this.save(entity);
+    }
+    
+    /**
+     * 更新小程序banner图
+     *
+     * @param id   小程序banner图ID
+     * @param formData 小程序banner图表单对象
+     * @return 是否修改成功
+     */
+    @Override
+    public boolean updateBannerInfo(Long id,BannerInfoForm formData) {
+        BannerInfo entity = bannerInfoConverter.toEntity(formData);
+        return this.updateById(entity);
+    }
+    
+    /**
+     * 删除小程序banner图
+     *
+     * @param ids 小程序banner图ID,多个以英文逗号(,)分割
+     * @return 是否删除成功
+     */
+    @Override
+    public boolean deleteBannerInfos(String ids) {
+        Assert.isTrue(StrUtil.isNotBlank(ids), "删除的小程序banner图数据为空");
+        // 逻辑删除
+        List<Long> idList = Arrays.stream(ids.split(","))
+                .map(Long::parseLong)
+                .toList();
+        return this.removeByIds(idList);
+    }
+
+}

+ 102 - 0
src/main/java/com/zsElectric/boot/business/service/impl/UserFeedbackServiceImpl.java

@@ -0,0 +1,102 @@
+package com.zsElectric.boot.business.service.impl;
+
+import com.zsElectric.boot.business.service.UserFeedbackService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zsElectric.boot.business.mapper.UserFeedbackMapper;
+import com.zsElectric.boot.business.model.entity.UserFeedback;
+import com.zsElectric.boot.business.model.form.UserFeedbackForm;
+import com.zsElectric.boot.business.model.query.UserFeedbackQuery;
+import com.zsElectric.boot.business.model.vo.UserFeedbackVO;
+import com.zsElectric.boot.business.converter.UserFeedbackConverter;
+
+import java.util.Arrays;
+import java.util.List;
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.StrUtil;
+
+/**
+ * 用户反馈服务实现类
+ *
+ * @author wzq
+ * @since 2025-11-26 15:37
+ */
+@Service
+@RequiredArgsConstructor
+public class UserFeedbackServiceImpl extends ServiceImpl<UserFeedbackMapper, UserFeedback> implements UserFeedbackService {
+
+    private final UserFeedbackConverter userFeedbackConverter;
+
+    /**
+    * 获取用户反馈分页列表
+    *
+    * @param queryParams 查询参数
+    * @return {@link IPage<UserFeedbackVO>} 用户反馈分页列表
+    */
+    @Override
+    public IPage<UserFeedbackVO> getUserFeedbackPage(UserFeedbackQuery queryParams) {
+        Page<UserFeedbackVO> pageVO = this.baseMapper.getUserFeedbackPage(
+                new Page<>(queryParams.getPageNum(), queryParams.getPageSize()),
+                queryParams
+        );
+        return pageVO;
+    }
+    
+    /**
+     * 获取用户反馈表单数据
+     *
+     * @param id 用户反馈ID
+     * @return 用户反馈表单数据
+     */
+    @Override
+    public UserFeedbackForm getUserFeedbackFormData(Long id) {
+        UserFeedback entity = this.getById(id);
+        return userFeedbackConverter.toForm(entity);
+    }
+    
+    /**
+     * 新增用户反馈
+     *
+     * @param formData 用户反馈表单对象
+     * @return 是否新增成功
+     */
+    @Override
+    public boolean saveUserFeedback(UserFeedbackForm formData) {
+        UserFeedback entity = userFeedbackConverter.toEntity(formData);
+        return this.save(entity);
+    }
+    
+    /**
+     * 更新用户反馈
+     *
+     * @param id   用户反馈ID
+     * @param formData 用户反馈表单对象
+     * @return 是否修改成功
+     */
+    @Override
+    public boolean updateUserFeedback(Long id,UserFeedbackForm formData) {
+        UserFeedback entity = userFeedbackConverter.toEntity(formData);
+        return this.updateById(entity);
+    }
+    
+    /**
+     * 删除用户反馈
+     *
+     * @param ids 用户反馈ID,多个以英文逗号(,)分割
+     * @return 是否删除成功
+     */
+    @Override
+    public boolean deleteUserFeedbacks(String ids) {
+        Assert.isTrue(StrUtil.isNotBlank(ids), "删除的用户反馈数据为空");
+        // 逻辑删除
+        List<Long> idList = Arrays.stream(ids.split(","))
+                .map(Long::parseLong)
+                .toList();
+        return this.removeByIds(idList);
+    }
+
+}

+ 26 - 0
src/main/resources/mapper/business/AdvertisingMapper.xml

@@ -0,0 +1,26 @@
+<?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.zsElectric.boot.business.mapper.AdvertisingMapper">
+
+    <!-- 获取广告管理分页列表 -->
+    <select id="getAdvertisingPage" resultType="com.zsElectric.boot.business.model.vo.AdvertisingVO">
+        SELECT
+                id,
+                name,
+                status,
+                sort,
+                position,
+                picture,
+                skip_url,
+                create_time,
+                create_by,
+                update_time,
+                update_by,
+                is_deleted
+        FROM
+            c_advertising
+        <where>
+        </where>
+    </select>
+
+</mapper>

+ 26 - 0
src/main/resources/mapper/business/BannerInfoMapper.xml

@@ -0,0 +1,26 @@
+<?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.zsElectric.boot.business.mapper.BannerInfoMapper">
+
+    <!-- 获取小程序banner图分页列表 -->
+    <select id="getBannerInfoPage" resultType="com.zsElectric.boot.business.model.vo.BannerInfoVO">
+        SELECT
+                id,
+                picture,
+                or_jump,
+                jump_appid,
+                jump_page,
+                sort,
+                status,
+                create_time,
+                create_by,
+                update_time,
+                update_by,
+                is_deleted
+        FROM
+            c_banner_info
+        <where>
+        </where>
+    </select>
+
+</mapper>

+ 28 - 0
src/main/resources/mapper/business/UserFeedbackMapper.xml

@@ -0,0 +1,28 @@
+<?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.zsElectric.boot.business.mapper.UserFeedbackMapper">
+
+    <!-- 获取用户反馈分页列表 -->
+    <select id="getUserFeedbackPage" resultType="com.zsElectric.boot.business.model.vo.UserFeedbackVO">
+        SELECT
+                id,
+                type,
+                describe,
+                files_url,
+                contact_way,
+                reply,
+                user_id,
+                reply_time,
+                reply_status,
+                create_time,
+                create_by,
+                update_time,
+                update_by,
+                is_deleted
+        FROM
+            c_user_feedback
+        <where>
+        </where>
+    </select>
+
+</mapper>