Преглед на файлове

add advertisement module
fix some bug

Mr.qian преди 1 седмица
родител
ревизия
32a8e1c5b1

+ 107 - 0
mall-service/src/main/java/com/txz/mall/controller/AdvertisementController.java

@@ -0,0 +1,107 @@
+package com.txz.mall.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.UserUtil;
+import com.txz.mall.model.Advertisement;
+import com.txz.mall.service.AdvertisementService;
+import com.txz.mall.web.param.BasePageParam;
+import com.txz.mall.web.ro.AdvRO;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * [后台]广告
+ *
+ * @author: MTD®️
+ * @date: 2025/9/19
+ */
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("adv")
+public class AdvertisementController {
+    
+    private final AdvertisementService advertisementService;
+    
+    /**
+     * 分页查询
+     */
+    @GetMapping("page")
+    public Result<Page<Advertisement>> page(BasePageParam page, String queryStr) {
+        PageHelper.startPage(page.getPage(), page.getSize());
+        return Result.success(
+                new PageInfo<>(advertisementService.list(Wrappers.<Advertisement>lambdaQuery()
+                        .like(StrUtil.isNotBlank(queryStr), Advertisement::getTitle, queryStr)
+                        .eq(Advertisement::getDelFlag, Boolean.FALSE)
+                        .orderByAsc(Advertisement::getSerialNo)
+                        .orderByDesc(Advertisement::getCreateTime)
+                ))
+        );
+    }
+    
+    /**
+     * 新增
+     */
+    @PostMapping("save")
+    public Result save(@Validated({AdvRO.Add.class}) @RequestBody AdvRO ro, HttpServletRequest request) {
+        Advertisement addInfo = BeanUtil.copyProperties(ro, Advertisement.class);
+        UserUtil.getTokenUser(request);
+        addInfo.setDelFlag(Boolean.FALSE);
+        addInfo.setCreateUserId(UserUtil.getAdminUserId(request));
+        advertisementService.save(addInfo);
+        return Result.success();
+    }
+    
+    /**
+     * 详情
+     */
+    @GetMapping("info/{id:^\\d+$}")
+    public Result<Advertisement> info(@PathVariable("id") Long id) {
+        Advertisement info = advertisementService.getById(id);
+        if (ObjectUtil.isEmpty(info) || info.getDelFlag()) {
+            return Result.fail("数据不存在");
+        }
+        return Result.success(info);
+    }
+    
+    /**
+     * 删除
+     */
+    @DeleteMapping("delete/{id:^\\d+$}")
+    public Result delete(@PathVariable("id") Long id) {
+        advertisementService.update(Wrappers.<Advertisement>lambdaUpdate()
+                .eq(Advertisement::getId, id)
+                .set(Advertisement::getDelFlag, Boolean.TRUE)
+        );
+        return Result.success();
+    }
+    
+    /**
+     * 更新
+     */
+    @PatchMapping("update/{id:^\\d+$}")
+    public Result update(@Validated({AdvRO.Update.class}) @RequestBody AdvRO ro, @PathVariable("id") Long id, HttpServletRequest request) {
+        Advertisement info = advertisementService.getById(id);
+        if (ObjectUtil.isEmpty(info)) {
+            return Result.fail("数据不存在");
+        }
+        if (info.getDelFlag()) {
+            return Result.fail("数据已删除");
+        }
+        BeanUtil.copyProperties(ro, info);
+        info.setUpdateUserId(UserUtil.getAdminUserId(request));
+        advertisementService.updateById(info);
+        return Result.success();
+    }
+    
+}

+ 14 - 6
mall-service/src/main/java/com/txz/mall/controller/NoticeController.java

@@ -5,7 +5,10 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import com.txz.mall.core.Result;
+import com.txz.mall.core.UserUtil;
 import com.txz.mall.model.OtherNotice;
 import com.txz.mall.service.NoticeService;
 import com.txz.mall.service.OtherNoticeService;
@@ -16,6 +19,8 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * [后台]通知模板
  *
@@ -36,9 +41,9 @@ public class NoticeController {
      */
     @GetMapping("page")
     public Result<Page<OtherNotice>> page(BasePageParam page, String queryStr) {
-        Page queryPage = new Page(page.getPage(), page.getSize());
+        PageHelper.startPage(page.getPage(), page.getSize());
         return Result.success(
-                otherNoticeService.page(queryPage, Wrappers.<OtherNotice>lambdaQuery()
+                new PageInfo<>(otherNoticeService.list(Wrappers.<OtherNotice>lambdaQuery()
                         .and(StrUtil.isNotBlank(queryStr),
                                 item -> item
                                         .like(OtherNotice::getTitle, queryStr)
@@ -46,7 +51,8 @@ public class NoticeController {
                                         .like(OtherNotice::getMessage, queryStr)
                         )
                         .eq(OtherNotice::getIsDelete, Boolean.FALSE)
-                )
+                        .orderByDesc(OtherNotice::getCreateTime)
+                ))
         );
     }
     
@@ -54,8 +60,9 @@ public class NoticeController {
      * 新增
      */
     @PostMapping("save")
-    public Result save(@Validated({OtherNoticeRO.Add.class}) @RequestBody OtherNoticeRO ro) {
+    public Result save(@Validated({OtherNoticeRO.Add.class}) @RequestBody OtherNoticeRO ro, HttpServletRequest request) {
         OtherNotice otherNotice = BeanUtil.copyProperties(ro, OtherNotice.class);
+        otherNotice.setCreateUserId(UserUtil.getAdminUserId(request));
         otherNoticeService.save(otherNotice);
         return Result.success();
     }
@@ -66,7 +73,7 @@ public class NoticeController {
     @GetMapping("info/{id:^\\d+$}")
     public Result info(@PathVariable("id") Long id) {
         OtherNotice info = otherNoticeService.getById(id);
-        if (ObjectUtil.isEmpty(info)) {
+        if (ObjectUtil.isEmpty(info) || info.getIsDelete() == 1) {
             return Result.fail("数据不存在");
         }
         return Result.success(info);
@@ -85,7 +92,7 @@ public class NoticeController {
      * 更新
      */
     @PatchMapping("update/{id:^\\d+$}")
-    public Result update(@Validated({OtherNoticeRO.Update.class}) @RequestBody OtherNoticeRO ro, @PathVariable("id") Long id) {
+    public Result update(@Validated({OtherNoticeRO.Update.class}) @RequestBody OtherNoticeRO ro, @PathVariable("id") Long id, HttpServletRequest request) {
         OtherNotice info = otherNoticeService.getById(id);
         if (ObjectUtil.isEmpty(info)) {
             return Result.fail("数据不存在");
@@ -94,6 +101,7 @@ public class NoticeController {
             return Result.fail("数据已删除");
         }
         BeanUtil.copyProperties(ro, info);
+        info.setUpdateUserId(UserUtil.getAdminUserId(request));
         otherNoticeService.updateById(info);
         return Result.success();
     }

+ 43 - 26
mall-service/src/main/java/com/txz/mall/core/UserUtil.java

@@ -1,6 +1,8 @@
 package com.txz.mall.core;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import dto.AdminUserDTO;
 import org.springframework.stereotype.Component;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.context.request.RequestContextHolder;
@@ -16,26 +18,27 @@ import javax.servlet.http.HttpServletRequest;
  */
 @Component
 public class UserUtil {
-
+    
     @Resource
-    private  RedisUtil redisUtil;
-
-//    @Resource
-//    private UserService userService;
-
-
+    private RedisUtil redisUtil;
+    
+    //    @Resource
+    //    private UserService userService;
+    
+    
     private static UserUtil instance;
-
+    
     // 3. 私有化构造器,防止被实例化
-    private UserUtil() {}
-
+    private UserUtil() {
+    }
+    
     // 4. 初始化时将实例赋值给静态变量,使静态方法能访问注入的资源
     @PostConstruct
     public void init() {
         instance = this;
     }
-
-
+    
+    
     /**
      * {"id":1,"name":"admin",
      * "loginAccount":"admin",
@@ -49,11 +52,13 @@ public class UserUtil {
      * "createUserId":"1",
      * "updateUserId":"admin",
      * "token":"f3813140-f2a4-457b-8382-e3e049bfe705"}
+     *
      * @param request
+     *
      * @return
      */
     public static JSONObject getTokenUser(HttpServletRequest request) {
-        if (request == null){
+        if (request == null) {
             ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
             if (null != sra) {
                 request = sra.getRequest();
@@ -61,24 +66,36 @@ public class UserUtil {
                 return null;
             }
         }
-//        instance.redisUtil.set("888","777");
-//
-//
-//
-//        Object o = instance.redisUtil.get("888");
-
+        //        instance.redisUtil.set("888","777");
+        //
+        //
+        //
+        //        Object o = instance.redisUtil.get("888");
+        
         String token = request.getHeader("accessToken");
-
-        String key ="backstage_UserConfig_"+token;
-      //  CacheKey key = CacheKey.generateKey(CacheType.UserConfig, token);
-       String user = (String)instance.redisUtil.get(key);
+        
+        String key = "backstage_UserConfig_" + token;
+        //  CacheKey key = CacheKey.generateKey(CacheType.UserConfig, token);
+        String user = (String) instance.redisUtil.get(key);
         if (ObjectUtils.isEmpty(user)) {
             throw new ServiceException("用户未登陆");
         }
-
+        
         JSONObject jsonObject = (JSONObject) JSONObject.parseObject(user);
-
-
+        
+        
         return jsonObject;
     }
+    
+    public static AdminUserDTO getAdminUser(HttpServletRequest request) {
+        JSONObject jsonObject = getTokenUser(request);
+        AdminUserDTO loginUser = JSON.toJavaObject(jsonObject, AdminUserDTO.class);
+        return loginUser;
+    }
+    
+    public static Long getAdminUserId(HttpServletRequest request) {
+        JSONObject jsonObject = getTokenUser(request);
+        AdminUserDTO loginUser = JSON.toJavaObject(jsonObject, AdminUserDTO.class);
+        return loginUser.getId();
+    }
 }

+ 13 - 0
mall-service/src/main/java/com/txz/mall/dao/AdvertisementMapper.java

@@ -0,0 +1,13 @@
+package com.txz.mall.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.txz.mall.model.Advertisement;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/19
+ */
+@Mapper
+public interface AdvertisementMapper extends BaseMapper<Advertisement> {
+}

+ 37 - 0
mall-service/src/main/java/com/txz/mall/enums/AdvLinkTypeEnum.java

@@ -0,0 +1,37 @@
+package com.txz.mall.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/19
+ */
+@AllArgsConstructor
+public enum AdvLinkTypeEnum {
+    
+    /**
+     * 内链
+     */
+    IN("IN", "内链"),
+    
+    /**
+     * 外链
+     */
+    OUT("OUT", "外链"),
+    
+    ;
+    
+    @EnumValue
+    @JsonValue
+    @Getter
+    @Setter
+    private String data;
+    
+    @Getter
+    @Setter
+    private String desc;
+}

+ 32 - 0
mall-service/src/main/java/com/txz/mall/enums/AdvTypeEnum.java

@@ -0,0 +1,32 @@
+package com.txz.mall.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/19
+ */
+@AllArgsConstructor
+public enum AdvTypeEnum {
+    
+    /**
+     * 首页广告
+     */
+    INDEX("INDEX", "首页广告"),
+    
+    ;
+    
+    @EnumValue
+    @JsonValue
+    @Getter
+    @Setter
+    private String data;
+    
+    @Getter
+    @Setter
+    private String desc;
+}

+ 89 - 0
mall-service/src/main/java/com/txz/mall/model/Advertisement.java

@@ -0,0 +1,89 @@
+package com.txz.mall.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.txz.mall.enums.AdvLinkTypeEnum;
+import com.txz.mall.enums.AdvTypeEnum;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/19
+ */
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("m_advertisement")
+@EqualsAndHashCode(callSuper = true)
+public class Advertisement extends Model<Advertisement> {
+    
+    /**
+     * 组合数据ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    
+    /**
+     * 广告类型
+     */
+    private AdvTypeEnum advType;
+    
+    /**
+     * 图片地址
+     */
+    private String advImage;
+    
+    /**
+     * 广告标题
+     */
+    private String title;
+    
+    /**
+     * 内链:in
+     * 外链:out
+     */
+    private AdvLinkTypeEnum linkType;
+    
+    /**
+     * 跳转地址
+     */
+    private String link;
+    
+    /**
+     * 排序
+     */
+    private Integer serialNo = 0;
+    
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+    
+    /**
+     * 创建人id
+     */
+    private Long createUserId;
+    
+    /**
+     * 更新人id
+     */
+    private Long updateUserId;
+    
+    /**
+     * 删除标识
+     */
+    private Boolean delFlag;
+}

+ 10 - 0
mall-service/src/main/java/com/txz/mall/model/OtherNotice.java

@@ -54,4 +54,14 @@ public class OtherNotice extends Model<OtherNotice> {
      * 更新时间
      */
     private Date updateTime;
+    
+    /**
+     * 创建人
+     */
+    private Long createUserId;
+
+    /**
+     * 更新人
+     */
+    private Long updateUserId;
 }

+ 12 - 0
mall-service/src/main/java/com/txz/mall/service/AdvertisementService.java

@@ -0,0 +1,12 @@
+package com.txz.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.txz.mall.model.Advertisement;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/19
+ */
+
+public interface AdvertisementService extends IService<Advertisement> {
+}

+ 19 - 0
mall-service/src/main/java/com/txz/mall/service/impl/AdvertisementServiceImpl.java

@@ -0,0 +1,19 @@
+package com.txz.mall.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.txz.mall.dao.AdvertisementMapper;
+import com.txz.mall.model.Advertisement;
+import com.txz.mall.service.AdvertisementService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/19
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class AdvertisementServiceImpl extends ServiceImpl<AdvertisementMapper, Advertisement> implements AdvertisementService {
+}

+ 59 - 0
mall-service/src/main/java/com/txz/mall/web/ro/AdvRO.java

@@ -0,0 +1,59 @@
+package com.txz.mall.web.ro;
+
+import com.txz.mall.enums.AdvLinkTypeEnum;
+import com.txz.mall.enums.AdvTypeEnum;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/8/26
+ */
+@Data
+public class AdvRO {
+    
+    /**
+     * 广告类型
+     */
+    @NotNull(groups = {Add.class, Update.class}, message = "广告类型不能为空")
+    private AdvTypeEnum advType;
+    
+    /**
+     * 图片地址
+     */
+    @NotBlank(groups = {Add.class, Update.class}, message = "图片地址不能为空")
+    private String advImage;
+    
+    /**
+     * 广告标题
+     */
+    @NotBlank(groups = {Add.class, Update.class}, message = "广告标题不能为空")
+    private String title;
+    
+    /**
+     * 内链:in
+     * 外链:out
+     */
+    @NotNull(groups = {Add.class, Update.class}, message = "链接类型不能为空")
+    private AdvLinkTypeEnum linkType;
+    
+    /**
+     * 跳转地址
+     */
+    private String link;
+    
+    /**
+     * 排序
+     */
+    @NotNull(groups = {Add.class, Update.class}, message = "排序不能为空")
+    private Integer serialNo = 0;
+    
+    public interface Add {
+    }
+    
+    public interface Update {
+    }
+    
+}

+ 76 - 0
mall-service/src/main/java/dto/AdminUserDTO.java

@@ -0,0 +1,76 @@
+package dto;
+
+import lombok.Data;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/19
+ */
+@Data
+public class AdminUserDTO {
+    
+    /**
+     * 用户ID
+     */
+    private Long id;
+    
+    /**
+     * 用户名
+     */
+    private String name;
+    
+    /**
+     * 登录账号
+     */
+    private String loginAccount;
+    
+    /**
+     * 密码
+     */
+    private String password;
+    
+    /**
+     * 盐值
+     */
+    private String salt;
+    
+    /**
+     * 手机号码
+     */
+    private String phoneNo;
+    
+    /**
+     * 邮箱
+     */
+    private String email;
+    
+    /**
+     * 状态 0:正常 1:禁用
+     */
+    private String status;
+    
+    /**
+     * 创建时间
+     */
+    private Long createTime;
+    
+    /**
+     * 更新时间
+     */
+    private Long updateTime;
+    
+    /**
+     * 创建人ID
+     */
+    private String createUserId;
+    
+    /**
+     * 更新人ID
+     */
+    private String updateUserId;
+    
+    /**
+     * token
+     */
+    private String token;
+}