attrs;
+
+ @Data
+ public static class Attrs {
+
+ private Long attrId;
+
+ private String attrName;
+
+ private String attrValue;
+
+ }
+
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/utils/Constant.java b/mall-common/src/main/java/com/bookstore/common/utils/Constant.java
new file mode 100644
index 0000000..5e25c3a
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/utils/Constant.java
@@ -0,0 +1,153 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.bookstore.common.utils;
+
+import com.bookstore.common.validator.group.AliyunGroup;
+import com.bookstore.common.validator.group.QcloudGroup;
+import com.bookstore.common.validator.group.QiniuGroup;
+
+
+import java.util.Optional;
+import java.util.stream.Stream;
+
+/**
+ * 常量
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public class Constant {
+ /**
+ * 超级管理员ID
+ */
+ public static final int SUPER_ADMIN = 1;
+ /**
+ * 当前页码
+ */
+ public static final String PAGE = "page";
+ /**
+ * 每页显示记录数
+ */
+ public static final String LIMIT = "limit";
+ /**
+ * 排序字段
+ */
+ public static final String ORDER_FIELD = "sidx";
+ /**
+ * 排序方式
+ */
+ public static final String ORDER = "order";
+ /**
+ * 升序
+ */
+ public static final String ASC = "asc";
+
+ /**
+ * 菜单类型
+ *
+ * @author chenshun
+ * @email sunlightcs@gmail.com
+ * @date 2016年11月15日 下午1:24:29
+ */
+ public enum MenuType {
+ /**
+ * 目录
+ */
+ CATALOG(0),
+ /**
+ * 菜单
+ */
+ MENU(1),
+ /**
+ * 按钮
+ */
+ BUTTON(2);
+
+ private int value;
+
+ MenuType(int value) {
+ this.value = value;
+ }
+
+ public int getValue() {
+ return value;
+ }
+ }
+
+ /**
+ * 定时任务状态
+ *
+ * @author chenshun
+ * @email sunlightcs@gmail.com
+ * @date 2016年12月3日 上午12:07:22
+ */
+ public enum ScheduleStatus {
+ /**
+ * 正常
+ */
+ NORMAL(0),
+ /**
+ * 暂停
+ */
+ PAUSE(1);
+
+ private int value;
+
+ ScheduleStatus(int value) {
+ this.value = value;
+ }
+
+ public int getValue() {
+ return value;
+ }
+ }
+
+ /**
+ * 云服务商
+ */
+ public enum CloudService {
+ /**
+ * 七牛云
+ */
+ QINIU(1, QiniuGroup.class),
+ /**
+ * 阿里云
+ */
+ ALIYUN(2, AliyunGroup.class),
+ /**
+ * 腾讯云
+ */
+ QCLOUD(3, QcloudGroup.class);
+
+ private int value;
+
+ private Class> validatorGroupClass;
+
+ CloudService(int value, Class> validatorGroupClass) {
+ this.value = value;
+ this.validatorGroupClass = validatorGroupClass;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public Class> getValidatorGroupClass() {
+ return this.validatorGroupClass;
+ }
+
+ public static CloudService getByValue(Integer value) {
+ Optional first = Stream.of(CloudService.values()).filter(cs -> value.equals(cs.value)).findFirst();
+ if (!first.isPresent()) {
+ throw new IllegalArgumentException("非法的枚举值:" + value);
+ }
+ return first.get();
+ }
+ }
+
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/utils/PageUtils.java b/mall-common/src/main/java/com/bookstore/common/utils/PageUtils.java
new file mode 100644
index 0000000..6735643
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/utils/PageUtils.java
@@ -0,0 +1,110 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.bookstore.common.utils;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 分页工具类
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public class PageUtils implements Serializable {
+ private static final long serialVersionUID = 1L;
+ /**
+ * 总记录数
+ */
+ private int totalCount;
+ /**
+ * 每页记录数
+ */
+ private int pageSize;
+ /**
+ * 总页数
+ */
+ private int totalPage;
+ /**
+ * 当前页数
+ */
+ private int currPage;
+ /**
+ * 列表数据
+ */
+ private List> list;
+
+ /**
+ * 分页
+ * @param list 列表数据
+ * @param totalCount 总记录数
+ * @param pageSize 每页记录数
+ * @param currPage 当前页数
+ */
+ public PageUtils(List> list, int totalCount, int pageSize, int currPage) {
+ this.list = list;
+ this.totalCount = totalCount;
+ this.pageSize = pageSize;
+ this.currPage = currPage;
+ this.totalPage = (int)Math.ceil((double)totalCount/pageSize);
+ }
+
+ /**
+ * 分页
+ */
+ public PageUtils(IPage> page) {
+ this.list = page.getRecords();
+ this.totalCount = (int)page.getTotal();
+ this.pageSize = (int)page.getSize();
+ this.currPage = (int)page.getCurrent();
+ this.totalPage = (int)page.getPages();
+ }
+
+ public int getTotalCount() {
+ return totalCount;
+ }
+
+ public void setTotalCount(int totalCount) {
+ this.totalCount = totalCount;
+ }
+
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ public int getTotalPage() {
+ return totalPage;
+ }
+
+ public void setTotalPage(int totalPage) {
+ this.totalPage = totalPage;
+ }
+
+ public int getCurrPage() {
+ return currPage;
+ }
+
+ public void setCurrPage(int currPage) {
+ this.currPage = currPage;
+ }
+
+ public List> getList() {
+ return list;
+ }
+
+ public void setList(List> list) {
+ this.list = list;
+ }
+
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/utils/Query.java b/mall-common/src/main/java/com/bookstore/common/utils/Query.java
new file mode 100644
index 0000000..23b1a64
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/utils/Query.java
@@ -0,0 +1,77 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.bookstore.common.utils;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.bookstore.common.xss.SQLFilter;
+import org.apache.commons.lang.StringUtils;
+
+import java.util.Map;
+
+/**
+ * 查询参数
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public class Query {
+
+ public IPage getPage(Map params) {
+ return this.getPage(params, null, false);
+ }
+
+ public IPage getPage(Map params, String defaultOrderField, boolean isAsc) {
+ //分页参数
+ long curPage = 1;
+ long limit = 10;
+
+ if(params.get(Constant.PAGE) != null){
+ curPage = Long.parseLong((String)params.get(Constant.PAGE));
+ }
+ if(params.get(Constant.LIMIT) != null){
+ limit = Long.parseLong((String)params.get(Constant.LIMIT));
+ }
+
+ //分页对象
+ Page page = new Page<>(curPage, limit);
+
+ //分页参数
+ params.put(Constant.PAGE, page);
+
+ //排序字段
+ //防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险)
+ String orderField = SQLFilter.sqlInject((String)params.get(Constant.ORDER_FIELD));
+ String order = (String)params.get(Constant.ORDER);
+
+
+ //前端字段排序
+ if(StringUtils.isNotEmpty(orderField) && StringUtils.isNotEmpty(order)){
+ if(Constant.ASC.equalsIgnoreCase(order)) {
+ return page.addOrder(OrderItem.asc(orderField));
+ }else {
+ return page.addOrder(OrderItem.desc(orderField));
+ }
+ }
+
+ //没有排序字段,则不排序
+ if(StringUtils.isBlank(defaultOrderField)){
+ return page;
+ }
+
+ //默认排序
+ if(isAsc) {
+ page.addOrder(OrderItem.asc(defaultOrderField));
+ }else {
+ page.addOrder(OrderItem.desc(defaultOrderField));
+ }
+
+ return page;
+ }
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/utils/R.java b/mall-common/src/main/java/com/bookstore/common/utils/R.java
new file mode 100644
index 0000000..7ae3bbf
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/utils/R.java
@@ -0,0 +1,83 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.bookstore.common.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.TypeReference;
+import org.apache.http.HttpStatus;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 返回数据
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+//!!!!以后设计R时加上泛型
+public class R extends HashMap {
+ private static final long serialVersionUID = 1L;
+
+ public T getData(TypeReference typeReference) {
+ Object data = get("data");
+ String s = JSON.toJSONString(data);
+ T t = JSON.parseObject(s, typeReference);
+ return t;
+ }
+
+ public R setData(Object data){
+ put("data", data);
+ return this;
+ }
+
+ public R() {
+ put("code", 0);
+ put("msg", "success");
+ }
+
+ public static R error() {
+ return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
+ }
+
+ public static R error(String msg) {
+ return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
+ }
+
+ public static R error(int code, String msg) {
+ R r = new R();
+ r.put("code", code);
+ r.put("msg", msg);
+ return r;
+ }
+
+ public static R ok(String msg) {
+ R r = new R();
+ r.put("msg", msg);
+ return r;
+ }
+
+ public static R ok(Map map) {
+ R r = new R();
+ r.putAll(map);
+ return r;
+ }
+
+ public static R ok() {
+ return new R();
+ }
+
+ public R put(String key, Object value) {
+ super.put(key, value);
+ return this;
+ }
+
+ public Integer getCode() {
+ return (Integer) this.get("code");
+ }
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/utils/RRException.java b/mall-common/src/main/java/com/bookstore/common/utils/RRException.java
new file mode 100644
index 0000000..ebc7dd5
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/utils/RRException.java
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.bookstore.common.utils;
+
+/**
+ * 自定义异常
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public class RRException extends RuntimeException {
+ private static final long serialVersionUID = 1L;
+
+ private String msg;
+ private int code = 500;
+
+ public RRException(String msg) {
+ super(msg);
+ this.msg = msg;
+ }
+
+ public RRException(String msg, Throwable e) {
+ super(msg, e);
+ this.msg = msg;
+ }
+
+ public RRException(String msg, int code) {
+ super(msg);
+ this.msg = msg;
+ this.code = code;
+ }
+
+ public RRException(String msg, int code, Throwable e) {
+ super(msg, e);
+ this.msg = msg;
+ this.code = code;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/valid/AddGroup.java b/mall-common/src/main/java/com/bookstore/common/valid/AddGroup.java
new file mode 100644
index 0000000..4004dd1
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/valid/AddGroup.java
@@ -0,0 +1,5 @@
+package com.bookstore.common.valid;
+
+public interface AddGroup {
+}
+
diff --git a/mall-common/src/main/java/com/bookstore/common/valid/AddShowStatusGroup.java b/mall-common/src/main/java/com/bookstore/common/valid/AddShowStatusGroup.java
new file mode 100644
index 0000000..610d635
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/valid/AddShowStatusGroup.java
@@ -0,0 +1,4 @@
+package com.bookstore.common.valid;
+
+public interface AddShowStatusGroup {
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/valid/ListValue.java b/mall-common/src/main/java/com/bookstore/common/valid/ListValue.java
new file mode 100644
index 0000000..cb26c34
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/valid/ListValue.java
@@ -0,0 +1,21 @@
+package com.bookstore.common.valid;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import javax.validation.constraints.NotNull;
+import java.lang.annotation.*;
+
+@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
+@Retention(RetentionPolicy.RUNTIME)
+@Constraint(validatedBy = {ListValueConstraintValidator.class}) //这里填的是校验器,可以自己编写一个
+@Documented
+
+public @interface ListValue {
+ String message() default "{com.bookstore.common.valid.ListValue.message}"; //会在一个配置文件中取得错误消息,我们用自己的,所以添加一个ValidationMessages.properties
+
+ Class>[] groups() default {};
+
+ Class extends Payload>[] payload() default {};
+
+ int[] vals() default {};
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/valid/ListValueConstraintValidator.java b/mall-common/src/main/java/com/bookstore/common/valid/ListValueConstraintValidator.java
new file mode 100644
index 0000000..ae26a23
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/valid/ListValueConstraintValidator.java
@@ -0,0 +1,38 @@
+package com.bookstore.common.valid;
+
+import org.hibernate.validator.internal.util.annotation.ConstraintAnnotationDescriptor;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import java.util.HashSet;
+import java.util.Set;
+
+public class ListValueConstraintValidator implements ConstraintValidator/*第一个泛型是校验注解,第二个泛型是校验类型*/ {
+
+ private Set set = new HashSet<>();
+
+ //初始化方法,会将详细信息给我门
+ @Override
+ public void initialize(ListValue constraintAnnotation) {
+ ConstraintValidator.super.initialize(constraintAnnotation);
+
+ int[] vals = constraintAnnotation.vals(); //获取数据
+ for (int i =0; i < vals.length; i++) {
+ set.add(vals[i]);
+ }
+ }
+
+ @Override
+
+
+ /*
+ @param value 第一个value是用户提交用于校验的数据
+ @param context
+ @return
+ * */
+ public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) {
+
+ return value == null || set.contains(value);
+ }
+
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/valid/UpdataGroup.java b/mall-common/src/main/java/com/bookstore/common/valid/UpdataGroup.java
new file mode 100644
index 0000000..3d7563c
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/valid/UpdataGroup.java
@@ -0,0 +1,4 @@
+package com.bookstore.common.valid;
+
+public interface UpdataGroup {
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/validator/group/AddGroup.java b/mall-common/src/main/java/com/bookstore/common/validator/group/AddGroup.java
new file mode 100644
index 0000000..ca7fecf
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/validator/group/AddGroup.java
@@ -0,0 +1,17 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.bookstore.common.validator.group;
+
+/**
+ * 新增数据 Group
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public interface AddGroup {
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/validator/group/AliyunGroup.java b/mall-common/src/main/java/com/bookstore/common/validator/group/AliyunGroup.java
new file mode 100644
index 0000000..ef97821
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/validator/group/AliyunGroup.java
@@ -0,0 +1,17 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.bookstore.common.validator.group;
+
+/**
+ * 阿里云
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public interface AliyunGroup {
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/validator/group/Group.java b/mall-common/src/main/java/com/bookstore/common/validator/group/Group.java
new file mode 100644
index 0000000..6c96bee
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/validator/group/Group.java
@@ -0,0 +1,21 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.bookstore.common.validator.group;
+
+import javax.validation.GroupSequence;
+
+/**
+ * 定义校验顺序,如果AddGroup组失败,则UpdateGroup组不会再校验
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@GroupSequence({AddGroup.class, UpdateGroup.class})
+public interface Group {
+
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/validator/group/QcloudGroup.java b/mall-common/src/main/java/com/bookstore/common/validator/group/QcloudGroup.java
new file mode 100644
index 0000000..ac9d797
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/validator/group/QcloudGroup.java
@@ -0,0 +1,17 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.bookstore.common.validator.group;
+
+/**
+ * 腾讯云
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public interface QcloudGroup {
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/validator/group/QiniuGroup.java b/mall-common/src/main/java/com/bookstore/common/validator/group/QiniuGroup.java
new file mode 100644
index 0000000..fafba2f
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/validator/group/QiniuGroup.java
@@ -0,0 +1,17 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.bookstore.common.validator.group;
+
+/**
+ * 七牛
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public interface QiniuGroup {
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/validator/group/UpdateGroup.java b/mall-common/src/main/java/com/bookstore/common/validator/group/UpdateGroup.java
new file mode 100644
index 0000000..6a3b3da
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/validator/group/UpdateGroup.java
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.bookstore.common.validator.group;
+
+/**
+ * 更新数据 Group
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+
+public interface UpdateGroup {
+
+}
diff --git a/mall-common/src/main/java/com/bookstore/common/xss/HTMLFilter.java b/mall-common/src/main/java/com/bookstore/common/xss/HTMLFilter.java
new file mode 100644
index 0000000..99a1272
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/xss/HTMLFilter.java
@@ -0,0 +1,530 @@
+package com.bookstore.common.xss;
+
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.logging.Logger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ *
+ * HTML filtering utility for protecting against XSS (Cross Site Scripting).
+ *
+ * This code is licensed LGPLv3
+ *
+ * This code is a Java port of the original work in PHP by Cal Hendersen.
+ * http://code.iamcal.com/php/lib_filter/
+ *
+ * The trickiest part of the translation was handling the differences in regex handling
+ * between PHP and Java. These resources were helpful in the process:
+ *
+ * http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
+ * http://us2.php.net/manual/en/reference.pcre.pattern.modifiers.php
+ * http://www.regular-expressions.info/modifiers.html
+ *
+ * A note on naming conventions: instance variables are prefixed with a "v"; global
+ * constants are in all caps.
+ *
+ * Sample use:
+ * String input = ...
+ * String clean = new HTMLFilter().filter( input );
+ *
+ * The class is not thread safe. Create a new instance if in doubt.
+ *
+ * If you find bugs or have suggestions on improvement (especially regarding
+ * performance), please contact us. The latest version of this
+ * source, and our contact details, can be found at http://xss-html-filter.sf.net
+ *
+ * @author Joseph O'Connell
+ * @author Cal Hendersen
+ * @author Michael Semb Wever
+ */
+public final class HTMLFilter {
+
+ /** regex flag union representing /si modifiers in php **/
+ private static final int REGEX_FLAGS_SI = Pattern.CASE_INSENSITIVE | Pattern.DOTALL;
+ private static final Pattern P_COMMENTS = Pattern.compile("", Pattern.DOTALL);
+ private static final Pattern P_COMMENT = Pattern.compile("^!--(.*)--$", REGEX_FLAGS_SI);
+ private static final Pattern P_TAGS = Pattern.compile("<(.*?)>", Pattern.DOTALL);
+ private static final Pattern P_END_TAG = Pattern.compile("^/([a-z0-9]+)", REGEX_FLAGS_SI);
+ private static final Pattern P_START_TAG = Pattern.compile("^([a-z0-9]+)(.*?)(/?)$", REGEX_FLAGS_SI);
+ private static final Pattern P_QUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)=([\"'])(.*?)\\2", REGEX_FLAGS_SI);
+ private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)(=)([^\"\\s']+)", REGEX_FLAGS_SI);
+ private static final Pattern P_PROTOCOL = Pattern.compile("^([^:]+):", REGEX_FLAGS_SI);
+ private static final Pattern P_ENTITY = Pattern.compile("(\\d+);?");
+ private static final Pattern P_ENTITY_UNICODE = Pattern.compile("([0-9a-f]+);?");
+ private static final Pattern P_ENCODE = Pattern.compile("%([0-9a-f]{2});?");
+ private static final Pattern P_VALID_ENTITIES = Pattern.compile("&([^&;]*)(?=(;|&|$))");
+ private static final Pattern P_VALID_QUOTES = Pattern.compile("(>|^)([^<]+?)(<|$)", Pattern.DOTALL);
+ private static final Pattern P_END_ARROW = Pattern.compile("^>");
+ private static final Pattern P_BODY_TO_END = Pattern.compile("<([^>]*?)(?=<|$)");
+ private static final Pattern P_XML_CONTENT = Pattern.compile("(^|>)([^<]*?)(?=>)");
+ private static final Pattern P_STRAY_LEFT_ARROW = Pattern.compile("<([^>]*?)(?=<|$)");
+ private static final Pattern P_STRAY_RIGHT_ARROW = Pattern.compile("(^|>)([^<]*?)(?=>)");
+ private static final Pattern P_AMP = Pattern.compile("&");
+ private static final Pattern P_QUOTE = Pattern.compile("<");
+ private static final Pattern P_LEFT_ARROW = Pattern.compile("<");
+ private static final Pattern P_RIGHT_ARROW = Pattern.compile(">");
+ private static final Pattern P_BOTH_ARROWS = Pattern.compile("<>");
+
+ // @xxx could grow large... maybe use sesat's ReferenceMap
+ private static final ConcurrentMap P_REMOVE_PAIR_BLANKS = new ConcurrentHashMap();
+ private static final ConcurrentMap P_REMOVE_SELF_BLANKS = new ConcurrentHashMap();
+
+ /** set of allowed html elements, along with allowed attributes for each element **/
+ private final Map> vAllowed;
+ /** counts of open tags for each (allowable) html element **/
+ private final Map vTagCounts = new HashMap();
+
+ /** html elements which must always be self-closing (e.g. "
") **/
+ private final String[] vSelfClosingTags;
+ /** html elements which must always have separate opening and closing tags (e.g. "") **/
+ private final String[] vNeedClosingTags;
+ /** set of disallowed html elements **/
+ private final String[] vDisallowed;
+ /** attributes which should be checked for valid protocols **/
+ private final String[] vProtocolAtts;
+ /** allowed protocols **/
+ private final String[] vAllowedProtocols;
+ /** tags which should be removed if they contain no content (e.g. "" or "") **/
+ private final String[] vRemoveBlanks;
+ /** entities allowed within html markup **/
+ private final String[] vAllowedEntities;
+ /** flag determining whether comments are allowed in input String. */
+ private final boolean stripComment;
+ private final boolean encodeQuotes;
+ private boolean vDebug = false;
+ /**
+ * flag determining whether to try to make tags when presented with "unbalanced"
+ * angle brackets (e.g. "" becomes " text "). If set to false,
+ * unbalanced angle brackets will be html escaped.
+ */
+ private final boolean alwaysMakeTags;
+
+ /** Default constructor.
+ *
+ */
+ public HTMLFilter() {
+ vAllowed = new HashMap<>();
+
+ final ArrayList a_atts = new ArrayList();
+ a_atts.add("href");
+ a_atts.add("target");
+ vAllowed.put("a", a_atts);
+
+ final ArrayList img_atts = new ArrayList();
+ img_atts.add("src");
+ img_atts.add("width");
+ img_atts.add("height");
+ img_atts.add("alt");
+ vAllowed.put("img", img_atts);
+
+ final ArrayList no_atts = new ArrayList();
+ vAllowed.put("b", no_atts);
+ vAllowed.put("strong", no_atts);
+ vAllowed.put("i", no_atts);
+ vAllowed.put("em", no_atts);
+
+ vSelfClosingTags = new String[]{"img"};
+ vNeedClosingTags = new String[]{"a", "b", "strong", "i", "em"};
+ vDisallowed = new String[]{};
+ vAllowedProtocols = new String[]{"http", "mailto", "https"}; // no ftp.
+ vProtocolAtts = new String[]{"src", "href"};
+ vRemoveBlanks = new String[]{"a", "b", "strong", "i", "em"};
+ vAllowedEntities = new String[]{"amp", "gt", "lt", "quot"};
+ stripComment = true;
+ encodeQuotes = true;
+ alwaysMakeTags = true;
+ }
+
+ /** Set debug flag to true. Otherwise use default settings. See the default constructor.
+ *
+ * @param debug turn debug on with a true argument
+ */
+ public HTMLFilter(final boolean debug) {
+ this();
+ vDebug = debug;
+
+ }
+
+ /** Map-parameter configurable constructor.
+ *
+ * @param conf map containing configuration. keys match field names.
+ */
+ public HTMLFilter(final Map conf) {
+
+ assert conf.containsKey("vAllowed") : "configuration requires vAllowed";
+ assert conf.containsKey("vSelfClosingTags") : "configuration requires vSelfClosingTags";
+ assert conf.containsKey("vNeedClosingTags") : "configuration requires vNeedClosingTags";
+ assert conf.containsKey("vDisallowed") : "configuration requires vDisallowed";
+ assert conf.containsKey("vAllowedProtocols") : "configuration requires vAllowedProtocols";
+ assert conf.containsKey("vProtocolAtts") : "configuration requires vProtocolAtts";
+ assert conf.containsKey("vRemoveBlanks") : "configuration requires vRemoveBlanks";
+ assert conf.containsKey("vAllowedEntities") : "configuration requires vAllowedEntities";
+
+ vAllowed = Collections.unmodifiableMap((HashMap>) conf.get("vAllowed"));
+ vSelfClosingTags = (String[]) conf.get("vSelfClosingTags");
+ vNeedClosingTags = (String[]) conf.get("vNeedClosingTags");
+ vDisallowed = (String[]) conf.get("vDisallowed");
+ vAllowedProtocols = (String[]) conf.get("vAllowedProtocols");
+ vProtocolAtts = (String[]) conf.get("vProtocolAtts");
+ vRemoveBlanks = (String[]) conf.get("vRemoveBlanks");
+ vAllowedEntities = (String[]) conf.get("vAllowedEntities");
+ stripComment = conf.containsKey("stripComment") ? (Boolean) conf.get("stripComment") : true;
+ encodeQuotes = conf.containsKey("encodeQuotes") ? (Boolean) conf.get("encodeQuotes") : true;
+ alwaysMakeTags = conf.containsKey("alwaysMakeTags") ? (Boolean) conf.get("alwaysMakeTags") : true;
+ }
+
+ private void reset() {
+ vTagCounts.clear();
+ }
+
+ private void debug(final String msg) {
+ if (vDebug) {
+ Logger.getAnonymousLogger().info(msg);
+ }
+ }
+
+ //---------------------------------------------------------------
+ // my versions of some PHP library functions
+ public static String chr(final int decimal) {
+ return String.valueOf((char) decimal);
+ }
+
+ public static String htmlSpecialChars(final String s) {
+ String result = s;
+ result = regexReplace(P_AMP, "&", result);
+ result = regexReplace(P_QUOTE, """, result);
+ result = regexReplace(P_LEFT_ARROW, "<", result);
+ result = regexReplace(P_RIGHT_ARROW, ">", result);
+ return result;
+ }
+
+ //---------------------------------------------------------------
+ /**
+ * given a user submitted input String, filter out any invalid or restricted
+ * html.
+ *
+ * @param input text (i.e. submitted by a user) than may contain html
+ * @return "clean" version of input, with only valid, whitelisted html elements allowed
+ */
+ public String filter(final String input) {
+ reset();
+ String s = input;
+
+ debug("************************************************");
+ debug(" INPUT: " + input);
+
+ s = escapeComments(s);
+ debug(" escapeComments: " + s);
+
+ s = balanceHTML(s);
+ debug(" balanceHTML: " + s);
+
+ s = checkTags(s);
+ debug(" checkTags: " + s);
+
+ s = processRemoveBlanks(s);
+ debug("processRemoveBlanks: " + s);
+
+ s = validateEntities(s);
+ debug(" validateEntites: " + s);
+
+ debug("************************************************\n\n");
+ return s;
+ }
+
+ public boolean isAlwaysMakeTags(){
+ return alwaysMakeTags;
+ }
+
+ public boolean isStripComments(){
+ return stripComment;
+ }
+
+ private String escapeComments(final String s) {
+ final Matcher m = P_COMMENTS.matcher(s);
+ final StringBuffer buf = new StringBuffer();
+ if (m.find()) {
+ final String match = m.group(1); //(.*?)
+ m.appendReplacement(buf, Matcher.quoteReplacement(""));
+ }
+ m.appendTail(buf);
+
+ return buf.toString();
+ }
+
+ private String balanceHTML(String s) {
+ if (alwaysMakeTags) {
+ //
+ // try and form html
+ //
+ s = regexReplace(P_END_ARROW, "", s);
+ s = regexReplace(P_BODY_TO_END, "<$1>", s);
+ s = regexReplace(P_XML_CONTENT, "$1<$2", s);
+
+ } else {
+ //
+ // escape stray brackets
+ //
+ s = regexReplace(P_STRAY_LEFT_ARROW, "<$1", s);
+ s = regexReplace(P_STRAY_RIGHT_ARROW, "$1$2><", s);
+
+ //
+ // the last regexp causes '<>' entities to appear
+ // (we need to do a lookahead assertion so that the last bracket can
+ // be used in the next pass of the regexp)
+ //
+ s = regexReplace(P_BOTH_ARROWS, "", s);
+ }
+
+ return s;
+ }
+
+ private String checkTags(String s) {
+ Matcher m = P_TAGS.matcher(s);
+
+ final StringBuffer buf = new StringBuffer();
+ while (m.find()) {
+ String replaceStr = m.group(1);
+ replaceStr = processTag(replaceStr);
+ m.appendReplacement(buf, Matcher.quoteReplacement(replaceStr));
+ }
+ m.appendTail(buf);
+
+ s = buf.toString();
+
+ // these get tallied in processTag
+ // (remember to reset before subsequent calls to filter method)
+ for (String key : vTagCounts.keySet()) {
+ for (int ii = 0; ii < vTagCounts.get(key); ii++) {
+ s += "" + key + ">";
+ }
+ }
+
+ return s;
+ }
+
+ private String processRemoveBlanks(final String s) {
+ String result = s;
+ for (String tag : vRemoveBlanks) {
+ if(!P_REMOVE_PAIR_BLANKS.containsKey(tag)){
+ P_REMOVE_PAIR_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?>" + tag + ">"));
+ }
+ result = regexReplace(P_REMOVE_PAIR_BLANKS.get(tag), "", result);
+ if(!P_REMOVE_SELF_BLANKS.containsKey(tag)){
+ P_REMOVE_SELF_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?/>"));
+ }
+ result = regexReplace(P_REMOVE_SELF_BLANKS.get(tag), "", result);
+ }
+
+ return result;
+ }
+
+ private static String regexReplace(final Pattern regex_pattern, final String replacement, final String s) {
+ Matcher m = regex_pattern.matcher(s);
+ return m.replaceAll(replacement);
+ }
+
+ private String processTag(final String s) {
+ // ending tags
+ Matcher m = P_END_TAG.matcher(s);
+ if (m.find()) {
+ final String name = m.group(1).toLowerCase();
+ if (allowed(name)) {
+ if (!inArray(name, vSelfClosingTags)) {
+ if (vTagCounts.containsKey(name)) {
+ vTagCounts.put(name, vTagCounts.get(name) - 1);
+ return "" + name + ">";
+ }
+ }
+ }
+ }
+
+ // starting tags
+ m = P_START_TAG.matcher(s);
+ if (m.find()) {
+ final String name = m.group(1).toLowerCase();
+ final String body = m.group(2);
+ String ending = m.group(3);
+
+ //debug( "in a starting tag, name='" + name + "'; body='" + body + "'; ending='" + ending + "'" );
+ if (allowed(name)) {
+ String params = "";
+
+ final Matcher m2 = P_QUOTED_ATTRIBUTES.matcher(body);
+ final Matcher m3 = P_UNQUOTED_ATTRIBUTES.matcher(body);
+ final List paramNames = new ArrayList();
+ final List paramValues = new ArrayList();
+ while (m2.find()) {
+ paramNames.add(m2.group(1)); //([a-z0-9]+)
+ paramValues.add(m2.group(3)); //(.*?)
+ }
+ while (m3.find()) {
+ paramNames.add(m3.group(1)); //([a-z0-9]+)
+ paramValues.add(m3.group(3)); //([^\"\\s']+)
+ }
+
+ String paramName, paramValue;
+ for (int ii = 0; ii < paramNames.size(); ii++) {
+ paramName = paramNames.get(ii).toLowerCase();
+ paramValue = paramValues.get(ii);
+
+// debug( "paramName='" + paramName + "'" );
+// debug( "paramValue='" + paramValue + "'" );
+// debug( "allowed? " + vAllowed.get( name ).contains( paramName ) );
+
+ if (allowedAttribute(name, paramName)) {
+ if (inArray(paramName, vProtocolAtts)) {
+ paramValue = processParamProtocol(paramValue);
+ }
+ params += " " + paramName + "=\"" + paramValue + "\"";
+ }
+ }
+
+ if (inArray(name, vSelfClosingTags)) {
+ ending = " /";
+ }
+
+ if (inArray(name, vNeedClosingTags)) {
+ ending = "";
+ }
+
+ if (ending == null || ending.length() < 1) {
+ if (vTagCounts.containsKey(name)) {
+ vTagCounts.put(name, vTagCounts.get(name) + 1);
+ } else {
+ vTagCounts.put(name, 1);
+ }
+ } else {
+ ending = " /";
+ }
+ return "<" + name + params + ending + ">";
+ } else {
+ return "";
+ }
+ }
+
+ // comments
+ m = P_COMMENT.matcher(s);
+ if (!stripComment && m.find()) {
+ return "<" + m.group() + ">";
+ }
+
+ return "";
+ }
+
+ private String processParamProtocol(String s) {
+ s = decodeEntities(s);
+ final Matcher m = P_PROTOCOL.matcher(s);
+ if (m.find()) {
+ final String protocol = m.group(1);
+ if (!inArray(protocol, vAllowedProtocols)) {
+ // bad protocol, turn into local anchor link instead
+ s = "#" + s.substring(protocol.length() + 1, s.length());
+ if (s.startsWith("#//")) {
+ s = "#" + s.substring(3, s.length());
+ }
+ }
+ }
+
+ return s;
+ }
+
+ private String decodeEntities(String s) {
+ StringBuffer buf = new StringBuffer();
+
+ Matcher m = P_ENTITY.matcher(s);
+ while (m.find()) {
+ final String match = m.group(1);
+ final int decimal = Integer.decode(match).intValue();
+ m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal)));
+ }
+ m.appendTail(buf);
+ s = buf.toString();
+
+ buf = new StringBuffer();
+ m = P_ENTITY_UNICODE.matcher(s);
+ while (m.find()) {
+ final String match = m.group(1);
+ final int decimal = Integer.valueOf(match, 16).intValue();
+ m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal)));
+ }
+ m.appendTail(buf);
+ s = buf.toString();
+
+ buf = new StringBuffer();
+ m = P_ENCODE.matcher(s);
+ while (m.find()) {
+ final String match = m.group(1);
+ final int decimal = Integer.valueOf(match, 16).intValue();
+ m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal)));
+ }
+ m.appendTail(buf);
+ s = buf.toString();
+
+ s = validateEntities(s);
+ return s;
+ }
+
+ private String validateEntities(final String s) {
+ StringBuffer buf = new StringBuffer();
+
+ // validate entities throughout the string
+ Matcher m = P_VALID_ENTITIES.matcher(s);
+ while (m.find()) {
+ final String one = m.group(1); //([^&;]*)
+ final String two = m.group(2); //(?=(;|&|$))
+ m.appendReplacement(buf, Matcher.quoteReplacement(checkEntity(one, two)));
+ }
+ m.appendTail(buf);
+
+ return encodeQuotes(buf.toString());
+ }
+
+ private String encodeQuotes(final String s){
+ if(encodeQuotes){
+ StringBuffer buf = new StringBuffer();
+ Matcher m = P_VALID_QUOTES.matcher(s);
+ while (m.find()) {
+ final String one = m.group(1); //(>|^)
+ final String two = m.group(2); //([^<]+?)
+ final String three = m.group(3); //(<|$)
+ m.appendReplacement(buf, Matcher.quoteReplacement(one + regexReplace(P_QUOTE, """, two) + three));
+ }
+ m.appendTail(buf);
+ return buf.toString();
+ }else{
+ return s;
+ }
+ }
+
+ private String checkEntity(final String preamble, final String term) {
+
+ return ";".equals(term) && isValidEntity(preamble)
+ ? '&' + preamble
+ : "&" + preamble;
+ }
+
+ private boolean isValidEntity(final String entity) {
+ return inArray(entity, vAllowedEntities);
+ }
+
+ private static boolean inArray(final String s, final String[] array) {
+ for (String item : array) {
+ if (item != null && item.equals(s)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean allowed(final String name) {
+ return (vAllowed.isEmpty() || vAllowed.containsKey(name)) && !inArray(name, vDisallowed);
+ }
+
+ private boolean allowedAttribute(final String name, final String paramName) {
+ return allowed(name) && (vAllowed.isEmpty() || vAllowed.get(name).contains(paramName));
+ }
+}
\ No newline at end of file
diff --git a/mall-common/src/main/java/com/bookstore/common/xss/SQLFilter.java b/mall-common/src/main/java/com/bookstore/common/xss/SQLFilter.java
new file mode 100644
index 0000000..83cd6af
--- /dev/null
+++ b/mall-common/src/main/java/com/bookstore/common/xss/SQLFilter.java
@@ -0,0 +1,52 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.bookstore.common.xss;
+
+
+
+import com.bookstore.common.utils.RRException;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * SQL过滤
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public class SQLFilter {
+
+ /**
+ * SQL注入过滤
+ * @param str 待验证的字符串
+ */
+ public static String sqlInject(String str){
+ if(StringUtils.isBlank(str)){
+ return null;
+ }
+ //去掉'|"|;|\字符
+ str = StringUtils.replace(str, "'", "");
+ str = StringUtils.replace(str, "\"", "");
+ str = StringUtils.replace(str, ";", "");
+ str = StringUtils.replace(str, "\\", "");
+
+ //转换成小写
+ str = str.toLowerCase();
+
+ //非法字符
+ String[] keywords = {"master", "truncate", "insert", "select", "delete", "update", "declare", "alter", "drop"};
+
+ //判断是否包含非法字符
+ for(String keyword : keywords){
+ if(str.indexOf(keyword) != -1){
+ throw new RRException("包含非法字符");
+ }
+ }
+
+ return str;
+ }
+}
diff --git a/mall-common/src/main/resources/ValidationMessages.properties b/mall-common/src/main/resources/ValidationMessages.properties
new file mode 100644
index 0000000..4402c68
--- /dev/null
+++ b/mall-common/src/main/resources/ValidationMessages.properties
@@ -0,0 +1 @@
+ com.bookstore.common.valid.ListValue.message=必须提交的值
\ No newline at end of file
diff --git a/mall-coupon/.gitattributes b/mall-coupon/.gitattributes
new file mode 100644
index 0000000..3b41682
--- /dev/null
+++ b/mall-coupon/.gitattributes
@@ -0,0 +1,2 @@
+/mvnw text eol=lf
+*.cmd text eol=crlf
diff --git a/mall-coupon/pom.xml b/mall-coupon/pom.xml
new file mode 100644
index 0000000..93bf053
--- /dev/null
+++ b/mall-coupon/pom.xml
@@ -0,0 +1,76 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.7.1
+
+
+ com.bookstore.bookmall
+ book-coupon
+ 0.0.1-SNAPSHOT
+ book-coupon
+ Demo project for Spring Boot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.8
+ 2021.0.8
+
+
+
+ com.bookstore.bookmall
+ mall-common
+ 0.0.1-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/BookCouponApplication.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/BookCouponApplication.java
new file mode 100644
index 0000000..d44fa2c
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/BookCouponApplication.java
@@ -0,0 +1,42 @@
+package com.bookstore.bookmall.coupon;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+
+/*
+* nacos配置中心
+* 1、引入依赖
+*
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+ org.springframework.cloud
+ spring-cloud-starter-bootstrap
+ 3.1.2
+
+ * 2、创建boostrap.properties
+ * # Nacos 配置中心,地址
+ spring.cloud.nacos.config.server-addr=127.0.0.1:8848
+ #查询组
+ spring.config.import=nacos:book-coupon.properties?group=DEFAULT_GROUP
+*3、在配置中心中添加上面 #设置的名字# 的配置文件,如book-coupon.properties
+* 5、动态刷新配置
+* @RefreshScope
+*
+* 微服务创建自己的命名空间,使用配置分组区分环境
+*
+* */
+
+@RefreshScope
+@EnableDiscoveryClient
+@SpringBootApplication
+public class BookCouponApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(BookCouponApplication.class, args);
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/CouponController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/CouponController.java
new file mode 100644
index 0000000..957165b
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/CouponController.java
@@ -0,0 +1,107 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.C;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import com.bookstore.bookmall.coupon.entity.CouponEntity;
+import com.bookstore.bookmall.coupon.service.CouponService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 优惠券信息
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@RestController
+@RequestMapping("coupon/coupon")
+public class CouponController {
+ @Autowired
+ private CouponService couponService;
+
+ @Value("${coupon.user.name}")
+ String name;
+ @Value("${coupon.user.age}")
+ Integer age;
+
+ @RequestMapping("/config")
+ public R test() {
+ return R.ok().put("name", name).put("age", age);
+ }
+
+
+
+ @RequestMapping("/member/list")
+ public R membercoupons() {
+ CouponEntity couponEntity = new CouponEntity();
+ couponEntity.setCouponName("满100减10");
+ return R.ok().put("coupons", Arrays.asList(couponEntity));
+ }
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:coupon:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = couponService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:coupon:info")
+ public R info(@PathVariable("id") Long id){
+ CouponEntity coupon = couponService.getById(id);
+
+ return R.ok().put("coupon", coupon);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("coupon:coupon:save")
+ public R save(@RequestBody CouponEntity coupon){
+ couponService.save(coupon);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:coupon:update")
+ public R update(@RequestBody CouponEntity coupon){
+ couponService.updateById(coupon);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:coupon:delete")
+ public R delete(@RequestBody Long[] ids){
+ couponService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/CouponHistoryController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/CouponHistoryController.java
new file mode 100644
index 0000000..c2d38c2
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/CouponHistoryController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.coupon.entity.CouponHistoryEntity;
+import com.bookstore.bookmall.coupon.service.CouponHistoryService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 优惠券领取历史记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@RestController
+@RequestMapping("coupon/couponhistory")
+public class CouponHistoryController {
+ @Autowired
+ private CouponHistoryService couponHistoryService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:couponhistory:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = couponHistoryService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:couponhistory:info")
+ public R info(@PathVariable("id") Long id){
+ CouponHistoryEntity couponHistory = couponHistoryService.getById(id);
+
+ return R.ok().put("couponHistory", couponHistory);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("coupon:couponhistory:save")
+ public R save(@RequestBody CouponHistoryEntity couponHistory){
+ couponHistoryService.save(couponHistory);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:couponhistory:update")
+ public R update(@RequestBody CouponHistoryEntity couponHistory){
+ couponHistoryService.updateById(couponHistory);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:couponhistory:delete")
+ public R delete(@RequestBody Long[] ids){
+ couponHistoryService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/CouponSpuCategoryRelationController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/CouponSpuCategoryRelationController.java
new file mode 100644
index 0000000..c7d1a0a
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/CouponSpuCategoryRelationController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.coupon.entity.CouponSpuCategoryRelationEntity;
+import com.bookstore.bookmall.coupon.service.CouponSpuCategoryRelationService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 优惠券分类关联
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@RestController
+@RequestMapping("coupon/couponspucategoryrelation")
+public class CouponSpuCategoryRelationController {
+ @Autowired
+ private CouponSpuCategoryRelationService couponSpuCategoryRelationService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:couponspucategoryrelation:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = couponSpuCategoryRelationService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:couponspucategoryrelation:info")
+ public R info(@PathVariable("id") Long id){
+ CouponSpuCategoryRelationEntity couponSpuCategoryRelation = couponSpuCategoryRelationService.getById(id);
+
+ return R.ok().put("couponSpuCategoryRelation", couponSpuCategoryRelation);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("coupon:couponspucategoryrelation:save")
+ public R save(@RequestBody CouponSpuCategoryRelationEntity couponSpuCategoryRelation){
+ couponSpuCategoryRelationService.save(couponSpuCategoryRelation);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:couponspucategoryrelation:update")
+ public R update(@RequestBody CouponSpuCategoryRelationEntity couponSpuCategoryRelation){
+ couponSpuCategoryRelationService.updateById(couponSpuCategoryRelation);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:couponspucategoryrelation:delete")
+ public R delete(@RequestBody Long[] ids){
+ couponSpuCategoryRelationService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/CouponSpuRelationController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/CouponSpuRelationController.java
new file mode 100644
index 0000000..593e9fa
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/CouponSpuRelationController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.coupon.entity.CouponSpuRelationEntity;
+import com.bookstore.bookmall.coupon.service.CouponSpuRelationService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 优惠券与产品关联
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@RestController
+@RequestMapping("coupon/couponspurelation")
+public class CouponSpuRelationController {
+ @Autowired
+ private CouponSpuRelationService couponSpuRelationService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:couponspurelation:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = couponSpuRelationService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:couponspurelation:info")
+ public R info(@PathVariable("id") Long id){
+ CouponSpuRelationEntity couponSpuRelation = couponSpuRelationService.getById(id);
+
+ return R.ok().put("couponSpuRelation", couponSpuRelation);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("coupon:couponspurelation:save")
+ public R save(@RequestBody CouponSpuRelationEntity couponSpuRelation){
+ couponSpuRelationService.save(couponSpuRelation);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:couponspurelation:update")
+ public R update(@RequestBody CouponSpuRelationEntity couponSpuRelation){
+ couponSpuRelationService.updateById(couponSpuRelation);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:couponspurelation:delete")
+ public R delete(@RequestBody Long[] ids){
+ couponSpuRelationService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/HomeAdvController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/HomeAdvController.java
new file mode 100644
index 0000000..98dcd46
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/HomeAdvController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.coupon.entity.HomeAdvEntity;
+import com.bookstore.bookmall.coupon.service.HomeAdvService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 首页轮播广告
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@RestController
+@RequestMapping("coupon/homeadv")
+public class HomeAdvController {
+ @Autowired
+ private HomeAdvService homeAdvService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:homeadv:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = homeAdvService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:homeadv:info")
+ public R info(@PathVariable("id") Long id){
+ HomeAdvEntity homeAdv = homeAdvService.getById(id);
+
+ return R.ok().put("homeAdv", homeAdv);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("coupon:homeadv:save")
+ public R save(@RequestBody HomeAdvEntity homeAdv){
+ homeAdvService.save(homeAdv);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:homeadv:update")
+ public R update(@RequestBody HomeAdvEntity homeAdv){
+ homeAdvService.updateById(homeAdv);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:homeadv:delete")
+ public R delete(@RequestBody Long[] ids){
+ homeAdvService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/HomeSubjectController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/HomeSubjectController.java
new file mode 100644
index 0000000..ef29a27
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/HomeSubjectController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.coupon.entity.HomeSubjectEntity;
+import com.bookstore.bookmall.coupon.service.HomeSubjectService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 首页专题表【jd首页下面很多专题,每个专题链接新的页面,展示专题商品信息】
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@RestController
+@RequestMapping("coupon/homesubject")
+public class HomeSubjectController {
+ @Autowired
+ private HomeSubjectService homeSubjectService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:homesubject:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = homeSubjectService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:homesubject:info")
+ public R info(@PathVariable("id") Long id){
+ HomeSubjectEntity homeSubject = homeSubjectService.getById(id);
+
+ return R.ok().put("homeSubject", homeSubject);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("coupon:homesubject:save")
+ public R save(@RequestBody HomeSubjectEntity homeSubject){
+ homeSubjectService.save(homeSubject);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:homesubject:update")
+ public R update(@RequestBody HomeSubjectEntity homeSubject){
+ homeSubjectService.updateById(homeSubject);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:homesubject:delete")
+ public R delete(@RequestBody Long[] ids){
+ homeSubjectService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/HomeSubjectSpuController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/HomeSubjectSpuController.java
new file mode 100644
index 0000000..6c35b8e
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/HomeSubjectSpuController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.coupon.entity.HomeSubjectSpuEntity;
+import com.bookstore.bookmall.coupon.service.HomeSubjectSpuService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 专题商品
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@RestController
+@RequestMapping("coupon/homesubjectspu")
+public class HomeSubjectSpuController {
+ @Autowired
+ private HomeSubjectSpuService homeSubjectSpuService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:homesubjectspu:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = homeSubjectSpuService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:homesubjectspu:info")
+ public R info(@PathVariable("id") Long id){
+ HomeSubjectSpuEntity homeSubjectSpu = homeSubjectSpuService.getById(id);
+
+ return R.ok().put("homeSubjectSpu", homeSubjectSpu);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("coupon:homesubjectspu:save")
+ public R save(@RequestBody HomeSubjectSpuEntity homeSubjectSpu){
+ homeSubjectSpuService.save(homeSubjectSpu);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:homesubjectspu:update")
+ public R update(@RequestBody HomeSubjectSpuEntity homeSubjectSpu){
+ homeSubjectSpuService.updateById(homeSubjectSpu);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:homesubjectspu:delete")
+ public R delete(@RequestBody Long[] ids){
+ homeSubjectSpuService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/MemberPriceController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/MemberPriceController.java
new file mode 100644
index 0000000..f096e60
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/MemberPriceController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.coupon.entity.MemberPriceEntity;
+import com.bookstore.bookmall.coupon.service.MemberPriceService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 商品会员价格
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@RestController
+@RequestMapping("coupon/memberprice")
+public class MemberPriceController {
+ @Autowired
+ private MemberPriceService memberPriceService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:memberprice:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = memberPriceService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:memberprice:info")
+ public R info(@PathVariable("id") Long id){
+ MemberPriceEntity memberPrice = memberPriceService.getById(id);
+
+ return R.ok().put("memberPrice", memberPrice);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("coupon:memberprice:save")
+ public R save(@RequestBody MemberPriceEntity memberPrice){
+ memberPriceService.save(memberPrice);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:memberprice:update")
+ public R update(@RequestBody MemberPriceEntity memberPrice){
+ memberPriceService.updateById(memberPrice);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:memberprice:delete")
+ public R delete(@RequestBody Long[] ids){
+ memberPriceService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SeckillPromotionController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SeckillPromotionController.java
new file mode 100644
index 0000000..b38e33e
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SeckillPromotionController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.coupon.entity.SeckillPromotionEntity;
+import com.bookstore.bookmall.coupon.service.SeckillPromotionService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 秒杀活动
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@RestController
+@RequestMapping("coupon/seckillpromotion")
+public class SeckillPromotionController {
+ @Autowired
+ private SeckillPromotionService seckillPromotionService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:seckillpromotion:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = seckillPromotionService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:seckillpromotion:info")
+ public R info(@PathVariable("id") Long id){
+ SeckillPromotionEntity seckillPromotion = seckillPromotionService.getById(id);
+
+ return R.ok().put("seckillPromotion", seckillPromotion);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("coupon:seckillpromotion:save")
+ public R save(@RequestBody SeckillPromotionEntity seckillPromotion){
+ seckillPromotionService.save(seckillPromotion);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:seckillpromotion:update")
+ public R update(@RequestBody SeckillPromotionEntity seckillPromotion){
+ seckillPromotionService.updateById(seckillPromotion);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:seckillpromotion:delete")
+ public R delete(@RequestBody Long[] ids){
+ seckillPromotionService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SeckillSessionController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SeckillSessionController.java
new file mode 100644
index 0000000..a051308
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SeckillSessionController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.coupon.entity.SeckillSessionEntity;
+import com.bookstore.bookmall.coupon.service.SeckillSessionService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 秒杀活动场次
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@RestController
+@RequestMapping("coupon/seckillsession")
+public class SeckillSessionController {
+ @Autowired
+ private SeckillSessionService seckillSessionService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:seckillsession:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = seckillSessionService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:seckillsession:info")
+ public R info(@PathVariable("id") Long id){
+ SeckillSessionEntity seckillSession = seckillSessionService.getById(id);
+
+ return R.ok().put("seckillSession", seckillSession);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("coupon:seckillsession:save")
+ public R save(@RequestBody SeckillSessionEntity seckillSession){
+ seckillSessionService.save(seckillSession);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:seckillsession:update")
+ public R update(@RequestBody SeckillSessionEntity seckillSession){
+ seckillSessionService.updateById(seckillSession);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:seckillsession:delete")
+ public R delete(@RequestBody Long[] ids){
+ seckillSessionService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SeckillSkuNoticeController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SeckillSkuNoticeController.java
new file mode 100644
index 0000000..f5dda29
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SeckillSkuNoticeController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.coupon.entity.SeckillSkuNoticeEntity;
+import com.bookstore.bookmall.coupon.service.SeckillSkuNoticeService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 秒杀商品通知订阅
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@RestController
+@RequestMapping("coupon/seckillskunotice")
+public class SeckillSkuNoticeController {
+ @Autowired
+ private SeckillSkuNoticeService seckillSkuNoticeService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:seckillskunotice:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = seckillSkuNoticeService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:seckillskunotice:info")
+ public R info(@PathVariable("id") Long id){
+ SeckillSkuNoticeEntity seckillSkuNotice = seckillSkuNoticeService.getById(id);
+
+ return R.ok().put("seckillSkuNotice", seckillSkuNotice);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("coupon:seckillskunotice:save")
+ public R save(@RequestBody SeckillSkuNoticeEntity seckillSkuNotice){
+ seckillSkuNoticeService.save(seckillSkuNotice);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:seckillskunotice:update")
+ public R update(@RequestBody SeckillSkuNoticeEntity seckillSkuNotice){
+ seckillSkuNoticeService.updateById(seckillSkuNotice);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:seckillskunotice:delete")
+ public R delete(@RequestBody Long[] ids){
+ seckillSkuNoticeService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SeckillSkuRelationController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SeckillSkuRelationController.java
new file mode 100644
index 0000000..46a74c1
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SeckillSkuRelationController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.coupon.entity.SeckillSkuRelationEntity;
+import com.bookstore.bookmall.coupon.service.SeckillSkuRelationService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 秒杀活动商品关联
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@RestController
+@RequestMapping("coupon/seckillskurelation")
+public class SeckillSkuRelationController {
+ @Autowired
+ private SeckillSkuRelationService seckillSkuRelationService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:seckillskurelation:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = seckillSkuRelationService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:seckillskurelation:info")
+ public R info(@PathVariable("id") Long id){
+ SeckillSkuRelationEntity seckillSkuRelation = seckillSkuRelationService.getById(id);
+
+ return R.ok().put("seckillSkuRelation", seckillSkuRelation);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("coupon:seckillskurelation:save")
+ public R save(@RequestBody SeckillSkuRelationEntity seckillSkuRelation){
+ seckillSkuRelationService.save(seckillSkuRelation);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:seckillskurelation:update")
+ public R update(@RequestBody SeckillSkuRelationEntity seckillSkuRelation){
+ seckillSkuRelationService.updateById(seckillSkuRelation);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:seckillskurelation:delete")
+ public R delete(@RequestBody Long[] ids){
+ seckillSkuRelationService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SkuFullReductionController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SkuFullReductionController.java
new file mode 100644
index 0000000..3b747b3
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SkuFullReductionController.java
@@ -0,0 +1,101 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import com.bookstore.common.to.SkuReductionTo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import com.bookstore.bookmall.coupon.entity.SkuFullReductionEntity;
+import com.bookstore.bookmall.coupon.service.SkuFullReductionService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 商品满减信息
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Slf4j
+@RestController
+@RequestMapping("coupon/skufullreduction")
+public class SkuFullReductionController {
+ @Autowired
+ private SkuFullReductionService skuFullReductionService;
+
+
+ @PostMapping("/saveinfo")
+ public R saveInfo(@RequestBody SkuReductionTo to){
+ log.info("Received saveInfo request: {}", to);
+ try {
+ skuFullReductionService.saveSkuReduction(to);
+ return R.ok();
+ } catch (Exception e) {
+ log.error("Failed to save SKU reduction: {}", e.getMessage(), e);
+ return R.error(500, "保存优惠信息失败: " + e.getMessage());
+ }
+ }
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:skufullreduction:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = skuFullReductionService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:skufullreduction:info")
+ public R info(@PathVariable("id") Long id){
+ SkuFullReductionEntity skuFullReduction = skuFullReductionService.getById(id);
+
+ return R.ok().put("skuFullReduction", skuFullReduction);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("coupon:skufullreduction:save")
+ public R save(@RequestBody SkuFullReductionEntity skuFullReduction){
+ skuFullReductionService.save(skuFullReduction);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:skufullreduction:update")
+ public R update(@RequestBody SkuFullReductionEntity skuFullReduction){
+ skuFullReductionService.updateById(skuFullReduction);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:skufullreduction:delete")
+ public R delete(@RequestBody Long[] ids){
+ skuFullReductionService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SkuLadderController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SkuLadderController.java
new file mode 100644
index 0000000..ba772c2
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SkuLadderController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.coupon.entity.SkuLadderEntity;
+import com.bookstore.bookmall.coupon.service.SkuLadderService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 商品阶梯价格
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@RestController
+@RequestMapping("coupon/skuladder")
+public class SkuLadderController {
+ @Autowired
+ private SkuLadderService skuLadderService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:skuladder:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = skuLadderService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:skuladder:info")
+ public R info(@PathVariable("id") Long id){
+ SkuLadderEntity skuLadder = skuLadderService.getById(id);
+
+ return R.ok().put("skuLadder", skuLadder);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("coupon:skuladder:save")
+ public R save(@RequestBody SkuLadderEntity skuLadder){
+ skuLadderService.save(skuLadder);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:skuladder:update")
+ public R update(@RequestBody SkuLadderEntity skuLadder){
+ skuLadderService.updateById(skuLadder);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:skuladder:delete")
+ public R delete(@RequestBody Long[] ids){
+ skuLadderService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SpuBoundsController.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SpuBoundsController.java
new file mode 100644
index 0000000..bb6f17a
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/controller/SpuBoundsController.java
@@ -0,0 +1,86 @@
+package com.bookstore.bookmall.coupon.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import com.bookstore.bookmall.coupon.entity.SpuBoundsEntity;
+import com.bookstore.bookmall.coupon.service.SpuBoundsService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 商品spu积分设置
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@RestController
+@RequestMapping("coupon/spubounds")
+public class SpuBoundsController {
+ @Autowired
+ private SpuBoundsService spuBoundsService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("coupon:spubounds:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = spuBoundsService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("coupon:spubounds:info")
+ public R info(@PathVariable("id") Long id){
+ SpuBoundsEntity spuBounds = spuBoundsService.getById(id);
+
+ return R.ok().put("spuBounds", spuBounds);
+ }
+
+ /**
+ * 保存
+ */
+ @PostMapping("/save")
+ //@RequiresPermissions("coupon:spubounds:save")
+ public R save(@RequestBody SpuBoundsEntity spuBounds){
+ spuBoundsService.save(spuBounds);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("coupon:spubounds:update")
+ public R update(@RequestBody SpuBoundsEntity spuBounds){
+ spuBoundsService.updateById(spuBounds);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("coupon:spubounds:delete")
+ public R delete(@RequestBody Long[] ids){
+ spuBoundsService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/CouponDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/CouponDao.java
new file mode 100644
index 0000000..889f09f
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/CouponDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.CouponEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 优惠券信息
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface CouponDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/CouponHistoryDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/CouponHistoryDao.java
new file mode 100644
index 0000000..1a1aa79
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/CouponHistoryDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.CouponHistoryEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 优惠券领取历史记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface CouponHistoryDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/CouponSpuCategoryRelationDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/CouponSpuCategoryRelationDao.java
new file mode 100644
index 0000000..2455e40
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/CouponSpuCategoryRelationDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.CouponSpuCategoryRelationEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 优惠券分类关联
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface CouponSpuCategoryRelationDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/CouponSpuRelationDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/CouponSpuRelationDao.java
new file mode 100644
index 0000000..78cbdcd
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/CouponSpuRelationDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.CouponSpuRelationEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 优惠券与产品关联
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface CouponSpuRelationDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/HomeAdvDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/HomeAdvDao.java
new file mode 100644
index 0000000..1459346
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/HomeAdvDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.HomeAdvEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 首页轮播广告
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface HomeAdvDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/HomeSubjectDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/HomeSubjectDao.java
new file mode 100644
index 0000000..853c616
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/HomeSubjectDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.HomeSubjectEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 首页专题表【jd首页下面很多专题,每个专题链接新的页面,展示专题商品信息】
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface HomeSubjectDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/HomeSubjectSpuDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/HomeSubjectSpuDao.java
new file mode 100644
index 0000000..4e4ac61
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/HomeSubjectSpuDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.HomeSubjectSpuEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 专题商品
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface HomeSubjectSpuDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/MemberPriceDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/MemberPriceDao.java
new file mode 100644
index 0000000..a1e6c8d
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/MemberPriceDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.MemberPriceEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品会员价格
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface MemberPriceDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SeckillPromotionDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SeckillPromotionDao.java
new file mode 100644
index 0000000..91538f9
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SeckillPromotionDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.SeckillPromotionEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 秒杀活动
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface SeckillPromotionDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SeckillSessionDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SeckillSessionDao.java
new file mode 100644
index 0000000..00a673a
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SeckillSessionDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.SeckillSessionEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 秒杀活动场次
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface SeckillSessionDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SeckillSkuNoticeDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SeckillSkuNoticeDao.java
new file mode 100644
index 0000000..7ac8440
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SeckillSkuNoticeDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.SeckillSkuNoticeEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 秒杀商品通知订阅
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface SeckillSkuNoticeDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SeckillSkuRelationDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SeckillSkuRelationDao.java
new file mode 100644
index 0000000..7456647
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SeckillSkuRelationDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.SeckillSkuRelationEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 秒杀活动商品关联
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface SeckillSkuRelationDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SkuFullReductionDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SkuFullReductionDao.java
new file mode 100644
index 0000000..b5bc26f
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SkuFullReductionDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.SkuFullReductionEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品满减信息
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface SkuFullReductionDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SkuLadderDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SkuLadderDao.java
new file mode 100644
index 0000000..0203817
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SkuLadderDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.SkuLadderEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品阶梯价格
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface SkuLadderDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SpuBoundsDao.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SpuBoundsDao.java
new file mode 100644
index 0000000..f9cea2e
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/dao/SpuBoundsDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.coupon.dao;
+
+import com.bookstore.bookmall.coupon.entity.SpuBoundsEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品spu积分设置
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Mapper
+public interface SpuBoundsDao extends BaseMapper {
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/CouponEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/CouponEntity.java
new file mode 100644
index 0000000..caf599f
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/CouponEntity.java
@@ -0,0 +1,105 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.math.BigDecimal;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 优惠券信息
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_coupon")
+public class CouponEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 优惠卷类型[0->全场赠券;1->会员赠券;2->购物赠券;3->注册赠券]
+ */
+ private Integer couponType;
+ /**
+ * 优惠券图片
+ */
+ private String couponImg;
+ /**
+ * 优惠卷名字
+ */
+ private String couponName;
+ /**
+ * 数量
+ */
+ private Integer num;
+ /**
+ * 金额
+ */
+ private BigDecimal amount;
+ /**
+ * 每人限领张数
+ */
+ private Integer perLimit;
+ /**
+ * 使用门槛
+ */
+ private BigDecimal minPoint;
+ /**
+ * 开始时间
+ */
+ private Date startTime;
+ /**
+ * 结束时间
+ */
+ private Date endTime;
+ /**
+ * 使用类型[0->全场通用;1->指定分类;2->指定商品]
+ */
+ private Integer useType;
+ /**
+ * 备注
+ */
+ private String note;
+ /**
+ * 发行数量
+ */
+ private Integer publishCount;
+ /**
+ * 已使用数量
+ */
+ private Integer useCount;
+ /**
+ * 领取数量
+ */
+ private Integer receiveCount;
+ /**
+ * 可以领取的开始日期
+ */
+ private Date enableStartTime;
+ /**
+ * 可以领取的结束日期
+ */
+ private Date enableEndTime;
+ /**
+ * 优惠码
+ */
+ private String code;
+ /**
+ * 可以领取的会员等级[0->不限等级,其他-对应等级]
+ */
+ private Integer memberLevel;
+ /**
+ * 发布状态[0-未发布,1-已发布]
+ */
+ private Integer publish;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/CouponHistoryEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/CouponHistoryEntity.java
new file mode 100644
index 0000000..5eb1f3b
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/CouponHistoryEntity.java
@@ -0,0 +1,64 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 优惠券领取历史记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_coupon_history")
+public class CouponHistoryEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 优惠券id
+ */
+ private Long couponId;
+ /**
+ * 会员id
+ */
+ private Long memberId;
+ /**
+ * 会员名字
+ */
+ private String memberNickName;
+ /**
+ * 获取方式[0->后台赠送;1->主动领取]
+ */
+ private Integer getType;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+ /**
+ * 使用状态[0->未使用;1->已使用;2->已过期]
+ */
+ private Integer useType;
+ /**
+ * 使用时间
+ */
+ private Date useTime;
+ /**
+ * 订单id
+ */
+ private Long orderId;
+ /**
+ * 订单号
+ */
+ private Long orderSn;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/CouponSpuCategoryRelationEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/CouponSpuCategoryRelationEntity.java
new file mode 100644
index 0000000..8d96866
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/CouponSpuCategoryRelationEntity.java
@@ -0,0 +1,40 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 优惠券分类关联
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_coupon_spu_category_relation")
+public class CouponSpuCategoryRelationEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 优惠券id
+ */
+ private Long couponId;
+ /**
+ * 产品分类id
+ */
+ private Long categoryId;
+ /**
+ * 产品分类名称
+ */
+ private String categoryName;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/CouponSpuRelationEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/CouponSpuRelationEntity.java
new file mode 100644
index 0000000..1f9bcee
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/CouponSpuRelationEntity.java
@@ -0,0 +1,40 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 优惠券与产品关联
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_coupon_spu_relation")
+public class CouponSpuRelationEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 优惠券id
+ */
+ private Long couponId;
+ /**
+ * spu_id
+ */
+ private Long spuId;
+ /**
+ * spu_name
+ */
+ private String spuName;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/HomeAdvEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/HomeAdvEntity.java
new file mode 100644
index 0000000..59de37d
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/HomeAdvEntity.java
@@ -0,0 +1,72 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 首页轮播广告
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_home_adv")
+public class HomeAdvEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 名字
+ */
+ private String name;
+ /**
+ * 图片地址
+ */
+ private String pic;
+ /**
+ * 开始时间
+ */
+ private Date startTime;
+ /**
+ * 结束时间
+ */
+ private Date endTime;
+ /**
+ * 状态
+ */
+ private Integer status;
+ /**
+ * 点击数
+ */
+ private Integer clickCount;
+ /**
+ * 广告详情连接地址
+ */
+ private String url;
+ /**
+ * 备注
+ */
+ private String note;
+ /**
+ * 排序
+ */
+ private Integer sort;
+ /**
+ * 发布者
+ */
+ private Long publisherId;
+ /**
+ * 审核者
+ */
+ private Long authId;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/HomeSubjectEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/HomeSubjectEntity.java
new file mode 100644
index 0000000..3706775
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/HomeSubjectEntity.java
@@ -0,0 +1,56 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 首页专题表【jd首页下面很多专题,每个专题链接新的页面,展示专题商品信息】
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_home_subject")
+public class HomeSubjectEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 专题名字
+ */
+ private String name;
+ /**
+ * 专题标题
+ */
+ private String title;
+ /**
+ * 专题副标题
+ */
+ private String subTitle;
+ /**
+ * 显示状态
+ */
+ private Integer status;
+ /**
+ * 详情连接
+ */
+ private String url;
+ /**
+ * 排序
+ */
+ private Integer sort;
+ /**
+ * 专题图片地址
+ */
+ private String img;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/HomeSubjectSpuEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/HomeSubjectSpuEntity.java
new file mode 100644
index 0000000..e68da80
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/HomeSubjectSpuEntity.java
@@ -0,0 +1,44 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 专题商品
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_home_subject_spu")
+public class HomeSubjectSpuEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 专题名字
+ */
+ private String name;
+ /**
+ * 专题id
+ */
+ private Long subjectId;
+ /**
+ * spu_id
+ */
+ private Long spuId;
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/MemberPriceEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/MemberPriceEntity.java
new file mode 100644
index 0000000..377fc15
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/MemberPriceEntity.java
@@ -0,0 +1,49 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.math.BigDecimal;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 商品会员价格
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_member_price")
+public class MemberPriceEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * sku_id
+ */
+ private Long skuId;
+ /**
+ * 会员等级id
+ */
+ private Long memberLevelId;
+ /**
+ * 会员等级名
+ */
+ private String memberLevelName;
+ /**
+ * 会员对应价格
+ */
+ private BigDecimal memberPrice;
+ /**
+ * 可否叠加其他优惠[0-不可叠加优惠,1-可叠加]
+ */
+ private Integer addOther;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SeckillPromotionEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SeckillPromotionEntity.java
new file mode 100644
index 0000000..bc55e8c
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SeckillPromotionEntity.java
@@ -0,0 +1,52 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 秒杀活动
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_seckill_promotion")
+public class SeckillPromotionEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 活动标题
+ */
+ private String title;
+ /**
+ * 开始日期
+ */
+ private Date startTime;
+ /**
+ * 结束日期
+ */
+ private Date endTime;
+ /**
+ * 上下线状态
+ */
+ private Integer status;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+ /**
+ * 创建人
+ */
+ private Long userId;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SeckillSessionEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SeckillSessionEntity.java
new file mode 100644
index 0000000..ce7c263
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SeckillSessionEntity.java
@@ -0,0 +1,48 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 秒杀活动场次
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_seckill_session")
+public class SeckillSessionEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 场次名称
+ */
+ private String name;
+ /**
+ * 每日开始时间
+ */
+ private Date startTime;
+ /**
+ * 每日结束时间
+ */
+ private Date endTime;
+ /**
+ * 启用状态
+ */
+ private Integer status;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SeckillSkuNoticeEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SeckillSkuNoticeEntity.java
new file mode 100644
index 0000000..0a76d6f
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SeckillSkuNoticeEntity.java
@@ -0,0 +1,52 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 秒杀商品通知订阅
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_seckill_sku_notice")
+public class SeckillSkuNoticeEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * member_id
+ */
+ private Long memberId;
+ /**
+ * sku_id
+ */
+ private Long skuId;
+ /**
+ * 活动场次id
+ */
+ private Long sessionId;
+ /**
+ * 订阅时间
+ */
+ private Date subcribeTime;
+ /**
+ * 发送时间
+ */
+ private Date sendTime;
+ /**
+ * 通知方式[0-短信,1-邮件]
+ */
+ private Integer noticeType;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SeckillSkuRelationEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SeckillSkuRelationEntity.java
new file mode 100644
index 0000000..6d03b7a
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SeckillSkuRelationEntity.java
@@ -0,0 +1,57 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.math.BigDecimal;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 秒杀活动商品关联
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_seckill_sku_relation")
+public class SeckillSkuRelationEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 活动id
+ */
+ private Long promotionId;
+ /**
+ * 活动场次id
+ */
+ private Long promotionSessionId;
+ /**
+ * 商品id
+ */
+ private Long skuId;
+ /**
+ * 秒杀价格
+ */
+ private BigDecimal seckillPrice;
+ /**
+ * 秒杀总量
+ */
+ private BigDecimal seckillCount;
+ /**
+ * 每人限购数量
+ */
+ private BigDecimal seckillLimit;
+ /**
+ * 排序
+ */
+ private Integer seckillSort;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SkuFullReductionEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SkuFullReductionEntity.java
new file mode 100644
index 0000000..05fcaf2
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SkuFullReductionEntity.java
@@ -0,0 +1,45 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.math.BigDecimal;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 商品满减信息
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_sku_full_reduction")
+public class SkuFullReductionEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * spu_id
+ */
+ private Long skuId;
+ /**
+ * 满多少
+ */
+ private BigDecimal fullPrice;
+ /**
+ * 减多少
+ */
+ private BigDecimal reducePrice;
+ /**
+ * 是否参与其他优惠
+ */
+ private Integer addOther;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SkuLadderEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SkuLadderEntity.java
new file mode 100644
index 0000000..9aea2e6
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SkuLadderEntity.java
@@ -0,0 +1,49 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.math.BigDecimal;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 商品阶梯价格
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_sku_ladder")
+public class SkuLadderEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * spu_id
+ */
+ private Long skuId;
+ /**
+ * 满几件
+ */
+ private Integer fullCount;
+ /**
+ * 打几折
+ */
+ private BigDecimal discount;
+ /**
+ * 折后价
+ */
+ private BigDecimal price;
+ /**
+ * 是否叠加其他优惠[0-不可叠加,1-可叠加]
+ */
+ private Integer addOther;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SpuBoundsEntity.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SpuBoundsEntity.java
new file mode 100644
index 0000000..4dd24d7
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/entity/SpuBoundsEntity.java
@@ -0,0 +1,45 @@
+package com.bookstore.bookmall.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.math.BigDecimal;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 商品spu积分设置
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+@Data
+@TableName("sms_spu_bounds")
+public class SpuBoundsEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ *
+ */
+ private Long spuId;
+ /**
+ * 成长积分
+ */
+ private BigDecimal growBounds;
+ /**
+ * 购物积分
+ */
+ private BigDecimal buyBounds;
+ /**
+ * 优惠生效情况[1111(四个状态位,从右到左);0 - 无优惠,成长积分是否赠送;1 - 无优惠,购物积分是否赠送;2 - 有优惠,成长积分是否赠送;3 - 有优惠,购物积分是否赠送【状态位0:不赠送,1:赠送】]
+ */
+ private Integer work;
+
+}
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/CouponHistoryService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/CouponHistoryService.java
new file mode 100644
index 0000000..0a96734
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/CouponHistoryService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.CouponHistoryEntity;
+
+import java.util.Map;
+
+/**
+ * 优惠券领取历史记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface CouponHistoryService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/CouponService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/CouponService.java
new file mode 100644
index 0000000..d4715e5
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/CouponService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.CouponEntity;
+
+import java.util.Map;
+
+/**
+ * 优惠券信息
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface CouponService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/CouponSpuCategoryRelationService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/CouponSpuCategoryRelationService.java
new file mode 100644
index 0000000..4d58b99
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/CouponSpuCategoryRelationService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.CouponSpuCategoryRelationEntity;
+
+import java.util.Map;
+
+/**
+ * 优惠券分类关联
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface CouponSpuCategoryRelationService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/CouponSpuRelationService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/CouponSpuRelationService.java
new file mode 100644
index 0000000..ce114dd
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/CouponSpuRelationService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.CouponSpuRelationEntity;
+
+import java.util.Map;
+
+/**
+ * 优惠券与产品关联
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface CouponSpuRelationService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/HomeAdvService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/HomeAdvService.java
new file mode 100644
index 0000000..ccc1c20
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/HomeAdvService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.HomeAdvEntity;
+
+import java.util.Map;
+
+/**
+ * 首页轮播广告
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface HomeAdvService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/HomeSubjectService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/HomeSubjectService.java
new file mode 100644
index 0000000..7f758de
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/HomeSubjectService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.HomeSubjectEntity;
+
+import java.util.Map;
+
+/**
+ * 首页专题表【jd首页下面很多专题,每个专题链接新的页面,展示专题商品信息】
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface HomeSubjectService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/HomeSubjectSpuService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/HomeSubjectSpuService.java
new file mode 100644
index 0000000..3879f1c
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/HomeSubjectSpuService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.HomeSubjectSpuEntity;
+
+import java.util.Map;
+
+/**
+ * 专题商品
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface HomeSubjectSpuService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/MemberPriceService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/MemberPriceService.java
new file mode 100644
index 0000000..64f76c1
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/MemberPriceService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.MemberPriceEntity;
+
+import java.util.Map;
+
+/**
+ * 商品会员价格
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface MemberPriceService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SeckillPromotionService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SeckillPromotionService.java
new file mode 100644
index 0000000..256a567
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SeckillPromotionService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.SeckillPromotionEntity;
+
+import java.util.Map;
+
+/**
+ * 秒杀活动
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface SeckillPromotionService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SeckillSessionService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SeckillSessionService.java
new file mode 100644
index 0000000..2c85ba5
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SeckillSessionService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.SeckillSessionEntity;
+
+import java.util.Map;
+
+/**
+ * 秒杀活动场次
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface SeckillSessionService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SeckillSkuNoticeService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SeckillSkuNoticeService.java
new file mode 100644
index 0000000..24af1be
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SeckillSkuNoticeService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.SeckillSkuNoticeEntity;
+
+import java.util.Map;
+
+/**
+ * 秒杀商品通知订阅
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface SeckillSkuNoticeService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SeckillSkuRelationService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SeckillSkuRelationService.java
new file mode 100644
index 0000000..b1b917b
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SeckillSkuRelationService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.SeckillSkuRelationEntity;
+
+import java.util.Map;
+
+/**
+ * 秒杀活动商品关联
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface SeckillSkuRelationService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SkuFullReductionService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SkuFullReductionService.java
new file mode 100644
index 0000000..8444836
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SkuFullReductionService.java
@@ -0,0 +1,23 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.to.SkuReductionTo;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.SkuFullReductionEntity;
+
+import java.util.Map;
+
+/**
+ * 商品满减信息
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface SkuFullReductionService extends IService {
+
+ PageUtils queryPage(Map params);
+
+ void saveSkuReduction(SkuReductionTo to);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SkuLadderService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SkuLadderService.java
new file mode 100644
index 0000000..cfe3e9b
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SkuLadderService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.SkuLadderEntity;
+
+import java.util.Map;
+
+/**
+ * 商品阶梯价格
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface SkuLadderService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SpuBoundsService.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SpuBoundsService.java
new file mode 100644
index 0000000..40e4de6
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/SpuBoundsService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.coupon.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.coupon.entity.SpuBoundsEntity;
+
+import java.util.Map;
+
+/**
+ * 商品spu积分设置
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 22:58:13
+ */
+public interface SpuBoundsService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/CouponHistoryServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/CouponHistoryServiceImpl.java
new file mode 100644
index 0000000..543eb27
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/CouponHistoryServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.CouponHistoryDao;
+import com.bookstore.bookmall.coupon.entity.CouponHistoryEntity;
+import com.bookstore.bookmall.coupon.service.CouponHistoryService;
+
+
+@Service("couponHistoryService")
+public class CouponHistoryServiceImpl extends ServiceImpl implements CouponHistoryService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/CouponServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/CouponServiceImpl.java
new file mode 100644
index 0000000..1de0dc7
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/CouponServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.CouponDao;
+import com.bookstore.bookmall.coupon.entity.CouponEntity;
+import com.bookstore.bookmall.coupon.service.CouponService;
+
+
+@Service("couponService")
+public class CouponServiceImpl extends ServiceImpl implements CouponService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/CouponSpuCategoryRelationServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/CouponSpuCategoryRelationServiceImpl.java
new file mode 100644
index 0000000..5715534
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/CouponSpuCategoryRelationServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.CouponSpuCategoryRelationDao;
+import com.bookstore.bookmall.coupon.entity.CouponSpuCategoryRelationEntity;
+import com.bookstore.bookmall.coupon.service.CouponSpuCategoryRelationService;
+
+
+@Service("couponSpuCategoryRelationService")
+public class CouponSpuCategoryRelationServiceImpl extends ServiceImpl implements CouponSpuCategoryRelationService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/CouponSpuRelationServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/CouponSpuRelationServiceImpl.java
new file mode 100644
index 0000000..12dfb94
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/CouponSpuRelationServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.CouponSpuRelationDao;
+import com.bookstore.bookmall.coupon.entity.CouponSpuRelationEntity;
+import com.bookstore.bookmall.coupon.service.CouponSpuRelationService;
+
+
+@Service("couponSpuRelationService")
+public class CouponSpuRelationServiceImpl extends ServiceImpl implements CouponSpuRelationService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/HomeAdvServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/HomeAdvServiceImpl.java
new file mode 100644
index 0000000..f49daa6
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/HomeAdvServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.HomeAdvDao;
+import com.bookstore.bookmall.coupon.entity.HomeAdvEntity;
+import com.bookstore.bookmall.coupon.service.HomeAdvService;
+
+
+@Service("homeAdvService")
+public class HomeAdvServiceImpl extends ServiceImpl implements HomeAdvService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/HomeSubjectServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/HomeSubjectServiceImpl.java
new file mode 100644
index 0000000..8f62563
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/HomeSubjectServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.HomeSubjectDao;
+import com.bookstore.bookmall.coupon.entity.HomeSubjectEntity;
+import com.bookstore.bookmall.coupon.service.HomeSubjectService;
+
+
+@Service("homeSubjectService")
+public class HomeSubjectServiceImpl extends ServiceImpl implements HomeSubjectService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/HomeSubjectSpuServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/HomeSubjectSpuServiceImpl.java
new file mode 100644
index 0000000..6d12b1e
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/HomeSubjectSpuServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.HomeSubjectSpuDao;
+import com.bookstore.bookmall.coupon.entity.HomeSubjectSpuEntity;
+import com.bookstore.bookmall.coupon.service.HomeSubjectSpuService;
+
+
+@Service("homeSubjectSpuService")
+public class HomeSubjectSpuServiceImpl extends ServiceImpl implements HomeSubjectSpuService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/MemberPriceServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/MemberPriceServiceImpl.java
new file mode 100644
index 0000000..02510d0
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/MemberPriceServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.MemberPriceDao;
+import com.bookstore.bookmall.coupon.entity.MemberPriceEntity;
+import com.bookstore.bookmall.coupon.service.MemberPriceService;
+
+
+@Service("memberPriceService")
+public class MemberPriceServiceImpl extends ServiceImpl implements MemberPriceService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SeckillPromotionServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SeckillPromotionServiceImpl.java
new file mode 100644
index 0000000..2e3812a
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SeckillPromotionServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.SeckillPromotionDao;
+import com.bookstore.bookmall.coupon.entity.SeckillPromotionEntity;
+import com.bookstore.bookmall.coupon.service.SeckillPromotionService;
+
+
+@Service("seckillPromotionService")
+public class SeckillPromotionServiceImpl extends ServiceImpl implements SeckillPromotionService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SeckillSessionServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SeckillSessionServiceImpl.java
new file mode 100644
index 0000000..9b6c995
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SeckillSessionServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.SeckillSessionDao;
+import com.bookstore.bookmall.coupon.entity.SeckillSessionEntity;
+import com.bookstore.bookmall.coupon.service.SeckillSessionService;
+
+
+@Service("seckillSessionService")
+public class SeckillSessionServiceImpl extends ServiceImpl implements SeckillSessionService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SeckillSkuNoticeServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SeckillSkuNoticeServiceImpl.java
new file mode 100644
index 0000000..7eca1cb
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SeckillSkuNoticeServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.SeckillSkuNoticeDao;
+import com.bookstore.bookmall.coupon.entity.SeckillSkuNoticeEntity;
+import com.bookstore.bookmall.coupon.service.SeckillSkuNoticeService;
+
+
+@Service("seckillSkuNoticeService")
+public class SeckillSkuNoticeServiceImpl extends ServiceImpl implements SeckillSkuNoticeService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SeckillSkuRelationServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SeckillSkuRelationServiceImpl.java
new file mode 100644
index 0000000..aa9a8e4
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SeckillSkuRelationServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.SeckillSkuRelationDao;
+import com.bookstore.bookmall.coupon.entity.SeckillSkuRelationEntity;
+import com.bookstore.bookmall.coupon.service.SeckillSkuRelationService;
+
+
+@Service("seckillSkuRelationService")
+public class SeckillSkuRelationServiceImpl extends ServiceImpl implements SeckillSkuRelationService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SkuFullReductionServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SkuFullReductionServiceImpl.java
new file mode 100644
index 0000000..bfbff41
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SkuFullReductionServiceImpl.java
@@ -0,0 +1,93 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import com.bookstore.bookmall.coupon.entity.MemberPriceEntity;
+import com.bookstore.bookmall.coupon.entity.SkuLadderEntity;
+import com.bookstore.bookmall.coupon.service.MemberPriceService;
+import com.bookstore.bookmall.coupon.service.SkuLadderService;
+import com.bookstore.common.to.MemberPrice;
+import com.bookstore.common.to.SkuReductionTo;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.SkuFullReductionDao;
+import com.bookstore.bookmall.coupon.entity.SkuFullReductionEntity;
+import com.bookstore.bookmall.coupon.service.SkuFullReductionService;
+
+
+@Service("skuFullReductionService")
+public class SkuFullReductionServiceImpl extends ServiceImpl implements SkuFullReductionService {
+
+ @Autowired
+ SkuLadderService skuLadderService;
+ @Autowired
+ MemberPriceService memberPriceService;
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+ @Override
+ public void saveSkuReduction(SkuReductionTo to) {
+ //sku的优惠满减, 1、sms_sku_ladder 2、sku_full_reduction 3、sms_member_price
+
+ //sms_sku_ladder
+ SkuLadderEntity skuLadderEntity = new SkuLadderEntity();
+ skuLadderEntity.setSkuId(to.getSkuId());
+ skuLadderEntity.setAddOther(to.getCountStatus());
+ skuLadderEntity.setDiscount(to.getDiscount());
+ skuLadderEntity.setFullCount(to.getFullCount());
+ if (skuLadderEntity.getFullCount() >0) {
+ skuLadderService.save(skuLadderEntity);
+ }
+ //sku_full_reduction
+ SkuFullReductionEntity skuFullReductionEntity = new SkuFullReductionEntity();
+ BeanUtils.copyProperties(to, skuFullReductionEntity);
+ if (skuFullReductionEntity.getFullPrice().compareTo(new BigDecimal("0")) == 1) {
+ this.save(skuFullReductionEntity);
+ }
+ //sms_member_price
+ List memberPrice = to.getMemberPrice();
+ if (memberPrice == null || memberPrice.isEmpty()) {
+ log.warn("memberPrice为空");
+ }
+ if (memberPrice != null && !memberPrice.isEmpty()) {
+ List collect = memberPrice.stream().map(item -> {
+ if (item.getId() == null || item.getPrice() == null) {
+ log.error("Invalid MemberPrice: {}");
+ throw new IllegalArgumentException("会员价格信息不完整");
+ }
+ MemberPriceEntity priceEntity = new MemberPriceEntity();
+ priceEntity.setSkuId(to.getSkuId());
+ priceEntity.setMemberLevelId(item.getId());
+ priceEntity.setMemberLevelName(item.getName());
+ priceEntity.setMemberPrice(item.getPrice());
+ priceEntity.setAddOther(1);
+ return priceEntity;
+ }).filter(item->{
+ //true保留,false舍弃
+ return item.getMemberPrice().compareTo(new BigDecimal("0")) == 1;
+ }).collect(Collectors.toList());
+ memberPriceService.saveBatch(collect);
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SkuLadderServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SkuLadderServiceImpl.java
new file mode 100644
index 0000000..8e03748
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SkuLadderServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.SkuLadderDao;
+import com.bookstore.bookmall.coupon.entity.SkuLadderEntity;
+import com.bookstore.bookmall.coupon.service.SkuLadderService;
+
+
+@Service("skuLadderService")
+public class SkuLadderServiceImpl extends ServiceImpl implements SkuLadderService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SpuBoundsServiceImpl.java b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SpuBoundsServiceImpl.java
new file mode 100644
index 0000000..ac0b10c
--- /dev/null
+++ b/mall-coupon/src/main/java/com/bookstore/bookmall/coupon/service/impl/SpuBoundsServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.coupon.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.coupon.dao.SpuBoundsDao;
+import com.bookstore.bookmall.coupon.entity.SpuBoundsEntity;
+import com.bookstore.bookmall.coupon.service.SpuBoundsService;
+
+
+@Service("spuBoundsService")
+public class SpuBoundsServiceImpl extends ServiceImpl implements SpuBoundsService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-coupon/src/main/resources/application.properties b/mall-coupon/src/main/resources/application.properties
new file mode 100644
index 0000000..000e742
--- /dev/null
+++ b/mall-coupon/src/main/resources/application.properties
@@ -0,0 +1,4 @@
+
+
+coupon.user.name = zhangsna
+coupon.user.age = 18
diff --git a/mall-coupon/src/main/resources/application.yml b/mall-coupon/src/main/resources/application.yml
new file mode 100644
index 0000000..5927816
--- /dev/null
+++ b/mall-coupon/src/main/resources/application.yml
@@ -0,0 +1,22 @@
+spring:
+ datasource:
+ username: root
+ password: 7536981
+ url: jdbc:mysql://192.168.88.131:3306/mall_sms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ cloud:
+ nacos:
+ discovery:
+ server-addr: 127.0.0.1:8848
+ application:
+ name: mall-coupon
+
+
+mybatis-plus:
+ config-locations: classpath*:/mapper/**/*.xml #classpath*中的*指的是不止引用自己路径的mapper,依赖的jar包也扫描
+ global-config:
+ db-config:
+ id-type: auto #主键自增
+
+server:
+ port: 7000
\ No newline at end of file
diff --git a/mall-coupon/src/main/resources/bootstrap.properties b/mall-coupon/src/main/resources/bootstrap.properties
new file mode 100644
index 0000000..86b1a4f
--- /dev/null
+++ b/mall-coupon/src/main/resources/bootstrap.properties
@@ -0,0 +1,21 @@
+
+# Nacos 配置中心,地址
+spring.cloud.nacos.config.server-addr=127.0.0.1:8848
+#查询组
+#spring.config.import=nacos:book-coupon.properties?group=DEFAULT_GROUP
+#设置命名空间
+spring.cloud.nacos.config.namespace=23c53425-ed13-49a2-8cb1-4082e9531b1a
+
+spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
+spring.cloud.nacos.config.extension-configs[0].group=dev
+spring.cloud.nacos.config.extension-configs[0].refresh=true
+
+spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
+spring.cloud.nacos.config.extension-configs[1].group=dev
+spring.cloud.nacos.config.extension-configs[1].refresh=true
+
+spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
+spring.cloud.nacos.config.extension-configs[2].group=dev
+spring.cloud.nacos.config.extension-configs[2].refresh=true
+
+
diff --git a/mall-coupon/src/test/java/com/bookstore/bookmall/coupon/BookCouponApplicationTests.java b/mall-coupon/src/test/java/com/bookstore/bookmall/coupon/BookCouponApplicationTests.java
new file mode 100644
index 0000000..0f041cc
--- /dev/null
+++ b/mall-coupon/src/test/java/com/bookstore/bookmall/coupon/BookCouponApplicationTests.java
@@ -0,0 +1,13 @@
+package com.bookstore.bookmall.coupon;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class BookCouponApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}
diff --git a/mall-gateway/.gitattributes b/mall-gateway/.gitattributes
new file mode 100644
index 0000000..3b41682
--- /dev/null
+++ b/mall-gateway/.gitattributes
@@ -0,0 +1,2 @@
+/mvnw text eol=lf
+*.cmd text eol=crlf
diff --git a/mall-gateway/pom.xml b/mall-gateway/pom.xml
new file mode 100644
index 0000000..e666770
--- /dev/null
+++ b/mall-gateway/pom.xml
@@ -0,0 +1,78 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.7.1
+
+
+ com.bookstore.bookmall
+ mall-gateway
+ 0.0.1-SNAPSHOT
+ mall-gateway
+ Demo project for Spring Boot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.8
+ 2021.0.8
+
+
+
+ com.bookstore.bookmall
+ mall-common
+ 0.0.1-SNAPSHOT
+
+
+ org.springframework.cloud
+ spring-cloud-starter-gateway
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/mall-gateway/src/main/java/com/bookstore/bookmall/gateway/MallGatewayApplication.java b/mall-gateway/src/main/java/com/bookstore/bookmall/gateway/MallGatewayApplication.java
new file mode 100644
index 0000000..6124cef
--- /dev/null
+++ b/mall-gateway/src/main/java/com/bookstore/bookmall/gateway/MallGatewayApplication.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.gateway;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+//开启服务发现
+@EnableDiscoveryClient
+@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
+public class MallGatewayApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(MallGatewayApplication.class, args);
+ }
+
+}
diff --git a/mall-gateway/src/main/java/com/bookstore/bookmall/gateway/config/CorsConfig.java b/mall-gateway/src/main/java/com/bookstore/bookmall/gateway/config/CorsConfig.java
new file mode 100644
index 0000000..5679877
--- /dev/null
+++ b/mall-gateway/src/main/java/com/bookstore/bookmall/gateway/config/CorsConfig.java
@@ -0,0 +1,25 @@
+package com.bookstore.bookmall.gateway.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.reactive.CorsWebFilter;
+import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
+
+@Configuration
+public class CorsConfig {
+
+ @Bean
+ public CorsWebFilter corsWebFilter() {
+ CorsConfiguration config = new CorsConfiguration();
+
+ config.addAllowedOriginPattern("*"); // 默认来源
+ config.addAllowedMethod("*");
+ config.addAllowedHeader("*");
+ config.setAllowCredentials(true);
+
+ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+ source.registerCorsConfiguration("/**", config);
+ return new CorsWebFilter(source);
+ }
+}
diff --git a/mall-gateway/src/main/resources/application.properties b/mall-gateway/src/main/resources/application.properties
new file mode 100644
index 0000000..3984214
--- /dev/null
+++ b/mall-gateway/src/main/resources/application.properties
@@ -0,0 +1 @@
+spring.application.name=mall-gateway
diff --git a/mall-gateway/src/main/resources/application.yml b/mall-gateway/src/main/resources/application.yml
new file mode 100644
index 0000000..f7e09bd
--- /dev/null
+++ b/mall-gateway/src/main/resources/application.yml
@@ -0,0 +1,78 @@
+spring:
+ cloud:
+ gateway:
+ routes:
+# - id: test_route
+# uri: https://baidu.com
+# predicates:
+# - Query=url, baidu
+#
+# - id: qq_route
+# uri: https://qq.com
+# predicates:
+# - Query=url, qq
+
+ #精确的路由放在高优先级
+ #商品服务
+ - id: product_route
+ uri: lb://book-product
+ predicates:
+ - Path=/api/product/**
+ filters:
+ - RewritePath=/api/(?.*), /$\{segment}
+
+ #第三方服务
+ - id: third_party_route
+ uri: lb://mall-third-party
+ predicates:
+ - Path=/api/thirdparty/**
+ filters:
+ - RewritePath=/api/thirdparty(?.*), /$\{segment}
+
+ #ware服务
+ - id: ware_route
+ uri: lb://mall-ware
+ predicates:
+ - Path=/api/ware/**
+ filters:
+ - RewritePath=/api/(?.*), /$\{segment}
+
+
+ #member服务
+ - id: member_route
+ uri: lb://book-member
+ predicates:
+ - Path=/api/member/**
+ filters:
+ - RewritePath=/api/(?.*), /$\{segment}
+
+ #renren服务
+ - id: admit_route
+ uri: lb://renren-fast #lb是负载均衡
+ predicates:
+ - Path=/api/**
+ filters:
+ - RewritePath=/api/(?.*), /renren-fast/$\{segment}
+
+ - id: mall_host_route
+ uri: lb://book-product #lb是负载均衡
+ predicates:
+ - Host=mall.com
+
+ - id: mall_search_route
+ uri: lb://mall-search #lb是负载均衡
+ predicates:
+ - Host=search.mall.com
+
+
+
+
+
+ ##前端项目: /api
+ ## http://localhost:88/api/captcha.jpg 如果没有filters会转成 http://renren-fast:88/api/captcha
+ ##想要转成 http://localhost:8080/renren-fast/captcha
+
+
+
+
+
diff --git a/mall-gateway/src/main/resources/bootstrap.properties b/mall-gateway/src/main/resources/bootstrap.properties
new file mode 100644
index 0000000..26cb319
--- /dev/null
+++ b/mall-gateway/src/main/resources/bootstrap.properties
@@ -0,0 +1,3 @@
+spring.cloud.nacos.config.server-addr=127.0.0.1:8848
+spring.cloud.nacos.config.namespace=ae6219bf-ba8f-4608-b356-0a96a9c1b78b
+server.port=88
\ No newline at end of file
diff --git a/mall-gateway/src/test/java/com/bookstore/bookmall/gateway/MallGatewayApplicationTests.java b/mall-gateway/src/test/java/com/bookstore/bookmall/gateway/MallGatewayApplicationTests.java
new file mode 100644
index 0000000..f987060
--- /dev/null
+++ b/mall-gateway/src/test/java/com/bookstore/bookmall/gateway/MallGatewayApplicationTests.java
@@ -0,0 +1,13 @@
+package com.bookstore.bookmall.gateway;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class MallGatewayApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}
diff --git a/mall-member/.gitattributes b/mall-member/.gitattributes
new file mode 100644
index 0000000..3b41682
--- /dev/null
+++ b/mall-member/.gitattributes
@@ -0,0 +1,2 @@
+/mvnw text eol=lf
+*.cmd text eol=crlf
diff --git a/mall-member/pom.xml b/mall-member/pom.xml
new file mode 100644
index 0000000..0265d48
--- /dev/null
+++ b/mall-member/pom.xml
@@ -0,0 +1,81 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.7.1
+
+
+ com.bookstore.bookmall
+ book-member
+ 0.0.1-SNAPSHOT
+ book-member
+ Demo project for Spring Boot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.8
+
+ 2021.0.8
+
+
+
+ com.bookstore.bookmall
+ mall-common
+ 0.0.1-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/BookMemberApplication.java b/mall-member/src/main/java/com/bookstore/bookmall/member/BookMemberApplication.java
new file mode 100644
index 0000000..73d84fc
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/BookMemberApplication.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.member;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+@EnableFeignClients(basePackages = "com.bookstore.bookmall.member.feign")
+@EnableDiscoveryClient
+@SpringBootApplication
+public class BookMemberApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(BookMemberApplication.class, args);
+ }
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/controller/GrowthChangeHistoryController.java b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/GrowthChangeHistoryController.java
new file mode 100644
index 0000000..d2162d4
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/GrowthChangeHistoryController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.member.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.member.entity.GrowthChangeHistoryEntity;
+import com.bookstore.bookmall.member.service.GrowthChangeHistoryService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 成长值变化历史记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@RestController
+@RequestMapping("member/growthchangehistory")
+public class GrowthChangeHistoryController {
+ @Autowired
+ private GrowthChangeHistoryService growthChangeHistoryService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("member:growthchangehistory:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = growthChangeHistoryService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("member:growthchangehistory:info")
+ public R info(@PathVariable("id") Long id){
+ GrowthChangeHistoryEntity growthChangeHistory = growthChangeHistoryService.getById(id);
+
+ return R.ok().put("growthChangeHistory", growthChangeHistory);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("member:growthchangehistory:save")
+ public R save(@RequestBody GrowthChangeHistoryEntity growthChangeHistory){
+ growthChangeHistoryService.save(growthChangeHistory);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("member:growthchangehistory:update")
+ public R update(@RequestBody GrowthChangeHistoryEntity growthChangeHistory){
+ growthChangeHistoryService.updateById(growthChangeHistory);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("member:growthchangehistory:delete")
+ public R delete(@RequestBody Long[] ids){
+ growthChangeHistoryService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/controller/IntegrationChangeHistoryController.java b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/IntegrationChangeHistoryController.java
new file mode 100644
index 0000000..876c239
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/IntegrationChangeHistoryController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.member.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.member.entity.IntegrationChangeHistoryEntity;
+import com.bookstore.bookmall.member.service.IntegrationChangeHistoryService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 积分变化历史记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@RestController
+@RequestMapping("member/integrationchangehistory")
+public class IntegrationChangeHistoryController {
+ @Autowired
+ private IntegrationChangeHistoryService integrationChangeHistoryService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("member:integrationchangehistory:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = integrationChangeHistoryService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("member:integrationchangehistory:info")
+ public R info(@PathVariable("id") Long id){
+ IntegrationChangeHistoryEntity integrationChangeHistory = integrationChangeHistoryService.getById(id);
+
+ return R.ok().put("integrationChangeHistory", integrationChangeHistory);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("member:integrationchangehistory:save")
+ public R save(@RequestBody IntegrationChangeHistoryEntity integrationChangeHistory){
+ integrationChangeHistoryService.save(integrationChangeHistory);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("member:integrationchangehistory:update")
+ public R update(@RequestBody IntegrationChangeHistoryEntity integrationChangeHistory){
+ integrationChangeHistoryService.updateById(integrationChangeHistory);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("member:integrationchangehistory:delete")
+ public R delete(@RequestBody Long[] ids){
+ integrationChangeHistoryService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberCollectSpuController.java b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberCollectSpuController.java
new file mode 100644
index 0000000..834370a
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberCollectSpuController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.member.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.member.entity.MemberCollectSpuEntity;
+import com.bookstore.bookmall.member.service.MemberCollectSpuService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 会员收藏的商品
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@RestController
+@RequestMapping("member/membercollectspu")
+public class MemberCollectSpuController {
+ @Autowired
+ private MemberCollectSpuService memberCollectSpuService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("member:membercollectspu:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = memberCollectSpuService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("member:membercollectspu:info")
+ public R info(@PathVariable("id") Long id){
+ MemberCollectSpuEntity memberCollectSpu = memberCollectSpuService.getById(id);
+
+ return R.ok().put("memberCollectSpu", memberCollectSpu);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("member:membercollectspu:save")
+ public R save(@RequestBody MemberCollectSpuEntity memberCollectSpu){
+ memberCollectSpuService.save(memberCollectSpu);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("member:membercollectspu:update")
+ public R update(@RequestBody MemberCollectSpuEntity memberCollectSpu){
+ memberCollectSpuService.updateById(memberCollectSpu);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("member:membercollectspu:delete")
+ public R delete(@RequestBody Long[] ids){
+ memberCollectSpuService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberCollectSubjectController.java b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberCollectSubjectController.java
new file mode 100644
index 0000000..3bf158d
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberCollectSubjectController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.member.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.member.entity.MemberCollectSubjectEntity;
+import com.bookstore.bookmall.member.service.MemberCollectSubjectService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 会员收藏的专题活动
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@RestController
+@RequestMapping("member/membercollectsubject")
+public class MemberCollectSubjectController {
+ @Autowired
+ private MemberCollectSubjectService memberCollectSubjectService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("member:membercollectsubject:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = memberCollectSubjectService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("member:membercollectsubject:info")
+ public R info(@PathVariable("id") Long id){
+ MemberCollectSubjectEntity memberCollectSubject = memberCollectSubjectService.getById(id);
+
+ return R.ok().put("memberCollectSubject", memberCollectSubject);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("member:membercollectsubject:save")
+ public R save(@RequestBody MemberCollectSubjectEntity memberCollectSubject){
+ memberCollectSubjectService.save(memberCollectSubject);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("member:membercollectsubject:update")
+ public R update(@RequestBody MemberCollectSubjectEntity memberCollectSubject){
+ memberCollectSubjectService.updateById(memberCollectSubject);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("member:membercollectsubject:delete")
+ public R delete(@RequestBody Long[] ids){
+ memberCollectSubjectService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberController.java b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberController.java
new file mode 100644
index 0000000..db23659
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberController.java
@@ -0,0 +1,103 @@
+package com.bookstore.bookmall.member.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import com.bookstore.bookmall.member.feign.CouponFeignService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.member.entity.MemberEntity;
+import com.bookstore.bookmall.member.service.MemberService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 会员
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@RestController
+@RequestMapping("member/member")
+public class MemberController {
+ @Autowired
+ private MemberService memberService;
+
+ @Autowired
+ CouponFeignService couponFeignService;
+
+ @RequestMapping("/coupon")
+ public R test() {
+ MemberEntity memberEntity = new MemberEntity();
+ memberEntity.setNickname("zhangsan");
+
+ R membercoupons = couponFeignService.membercoupons();
+ return R.ok().put("member", memberEntity).put("coupons", membercoupons.get("coupons"));
+ }
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("member:member:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = memberService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("member:member:info")
+ public R info(@PathVariable("id") Long id){
+ MemberEntity member = memberService.getById(id);
+
+ return R.ok().put("member", member);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("member:member:save")
+ public R save(@RequestBody MemberEntity member){
+ memberService.save(member);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("member:member:update")
+ public R update(@RequestBody MemberEntity member){
+ memberService.updateById(member);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("member:member:delete")
+ public R delete(@RequestBody Long[] ids){
+ memberService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberLevelController.java b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberLevelController.java
new file mode 100644
index 0000000..bc58543
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberLevelController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.member.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.member.entity.MemberLevelEntity;
+import com.bookstore.bookmall.member.service.MemberLevelService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 会员等级
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@RestController
+@RequestMapping("member/memberlevel")
+public class MemberLevelController {
+ @Autowired
+ private MemberLevelService memberLevelService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("member:memberlevel:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = memberLevelService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("member:memberlevel:info")
+ public R info(@PathVariable("id") Long id){
+ MemberLevelEntity memberLevel = memberLevelService.getById(id);
+
+ return R.ok().put("memberLevel", memberLevel);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("member:memberlevel:save")
+ public R save(@RequestBody MemberLevelEntity memberLevel){
+ memberLevelService.save(memberLevel);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("member:memberlevel:update")
+ public R update(@RequestBody MemberLevelEntity memberLevel){
+ memberLevelService.updateById(memberLevel);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("member:memberlevel:delete")
+ public R delete(@RequestBody Long[] ids){
+ memberLevelService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberLoginLogController.java b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberLoginLogController.java
new file mode 100644
index 0000000..23dc381
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberLoginLogController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.member.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.member.entity.MemberLoginLogEntity;
+import com.bookstore.bookmall.member.service.MemberLoginLogService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 会员登录记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@RestController
+@RequestMapping("member/memberloginlog")
+public class MemberLoginLogController {
+ @Autowired
+ private MemberLoginLogService memberLoginLogService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("member:memberloginlog:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = memberLoginLogService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("member:memberloginlog:info")
+ public R info(@PathVariable("id") Long id){
+ MemberLoginLogEntity memberLoginLog = memberLoginLogService.getById(id);
+
+ return R.ok().put("memberLoginLog", memberLoginLog);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("member:memberloginlog:save")
+ public R save(@RequestBody MemberLoginLogEntity memberLoginLog){
+ memberLoginLogService.save(memberLoginLog);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("member:memberloginlog:update")
+ public R update(@RequestBody MemberLoginLogEntity memberLoginLog){
+ memberLoginLogService.updateById(memberLoginLog);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("member:memberloginlog:delete")
+ public R delete(@RequestBody Long[] ids){
+ memberLoginLogService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberReceiveAddressController.java b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberReceiveAddressController.java
new file mode 100644
index 0000000..6d7553b
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberReceiveAddressController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.member.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.member.entity.MemberReceiveAddressEntity;
+import com.bookstore.bookmall.member.service.MemberReceiveAddressService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 会员收货地址
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@RestController
+@RequestMapping("member/memberreceiveaddress")
+public class MemberReceiveAddressController {
+ @Autowired
+ private MemberReceiveAddressService memberReceiveAddressService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("member:memberreceiveaddress:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = memberReceiveAddressService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("member:memberreceiveaddress:info")
+ public R info(@PathVariable("id") Long id){
+ MemberReceiveAddressEntity memberReceiveAddress = memberReceiveAddressService.getById(id);
+
+ return R.ok().put("memberReceiveAddress", memberReceiveAddress);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("member:memberreceiveaddress:save")
+ public R save(@RequestBody MemberReceiveAddressEntity memberReceiveAddress){
+ memberReceiveAddressService.save(memberReceiveAddress);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("member:memberreceiveaddress:update")
+ public R update(@RequestBody MemberReceiveAddressEntity memberReceiveAddress){
+ memberReceiveAddressService.updateById(memberReceiveAddress);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("member:memberreceiveaddress:delete")
+ public R delete(@RequestBody Long[] ids){
+ memberReceiveAddressService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberStatisticsInfoController.java b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberStatisticsInfoController.java
new file mode 100644
index 0000000..a48be6b
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/controller/MemberStatisticsInfoController.java
@@ -0,0 +1,90 @@
+package com.bookstore.bookmall.member.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.bookstore.bookmall.member.entity.MemberStatisticsInfoEntity;
+import com.bookstore.bookmall.member.service.MemberStatisticsInfoService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.R;
+
+
+
+/**
+ * 会员统计信息
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@RestController
+@RequestMapping("member/memberstatisticsinfo")
+public class MemberStatisticsInfoController {
+ @Autowired
+ private MemberStatisticsInfoService memberStatisticsInfoService;
+
+ /**
+ * 列表
+ */
+ @RequestMapping("/list")
+ //@RequiresPermissions("member:memberstatisticsinfo:list")
+ public R list(@RequestParam Map params){
+ PageUtils page = memberStatisticsInfoService.queryPage(params);
+
+ return R.ok().put("page", page);
+ }
+
+
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ //@RequiresPermissions("member:memberstatisticsinfo:info")
+ public R info(@PathVariable("id") Long id){
+ MemberStatisticsInfoEntity memberStatisticsInfo = memberStatisticsInfoService.getById(id);
+
+ return R.ok().put("memberStatisticsInfo", memberStatisticsInfo);
+ }
+
+ /**
+ * 保存
+ */
+ @RequestMapping("/save")
+ //@RequiresPermissions("member:memberstatisticsinfo:save")
+ public R save(@RequestBody MemberStatisticsInfoEntity memberStatisticsInfo){
+ memberStatisticsInfoService.save(memberStatisticsInfo);
+
+ return R.ok();
+ }
+
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ //@RequiresPermissions("member:memberstatisticsinfo:update")
+ public R update(@RequestBody MemberStatisticsInfoEntity memberStatisticsInfo){
+ memberStatisticsInfoService.updateById(memberStatisticsInfo);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @RequestMapping("/delete")
+ //@RequiresPermissions("member:memberstatisticsinfo:delete")
+ public R delete(@RequestBody Long[] ids){
+ memberStatisticsInfoService.removeByIds(Arrays.asList(ids));
+
+ return R.ok();
+ }
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/dao/GrowthChangeHistoryDao.java b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/GrowthChangeHistoryDao.java
new file mode 100644
index 0000000..3bad79c
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/GrowthChangeHistoryDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.member.dao;
+
+import com.bookstore.bookmall.member.entity.GrowthChangeHistoryEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 成长值变化历史记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Mapper
+public interface GrowthChangeHistoryDao extends BaseMapper {
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/dao/IntegrationChangeHistoryDao.java b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/IntegrationChangeHistoryDao.java
new file mode 100644
index 0000000..ff10c99
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/IntegrationChangeHistoryDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.member.dao;
+
+import com.bookstore.bookmall.member.entity.IntegrationChangeHistoryEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 积分变化历史记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Mapper
+public interface IntegrationChangeHistoryDao extends BaseMapper {
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberCollectSpuDao.java b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberCollectSpuDao.java
new file mode 100644
index 0000000..2201e66
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberCollectSpuDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.member.dao;
+
+import com.bookstore.bookmall.member.entity.MemberCollectSpuEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 会员收藏的商品
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Mapper
+public interface MemberCollectSpuDao extends BaseMapper {
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberCollectSubjectDao.java b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberCollectSubjectDao.java
new file mode 100644
index 0000000..df71a65
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberCollectSubjectDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.member.dao;
+
+import com.bookstore.bookmall.member.entity.MemberCollectSubjectEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 会员收藏的专题活动
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Mapper
+public interface MemberCollectSubjectDao extends BaseMapper {
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberDao.java b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberDao.java
new file mode 100644
index 0000000..02416cb
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.member.dao;
+
+import com.bookstore.bookmall.member.entity.MemberEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 会员
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Mapper
+public interface MemberDao extends BaseMapper {
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberLevelDao.java b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberLevelDao.java
new file mode 100644
index 0000000..0315f9c
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberLevelDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.member.dao;
+
+import com.bookstore.bookmall.member.entity.MemberLevelEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 会员等级
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Mapper
+public interface MemberLevelDao extends BaseMapper {
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberLoginLogDao.java b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberLoginLogDao.java
new file mode 100644
index 0000000..fb2ccff
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberLoginLogDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.member.dao;
+
+import com.bookstore.bookmall.member.entity.MemberLoginLogEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 会员登录记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Mapper
+public interface MemberLoginLogDao extends BaseMapper {
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberReceiveAddressDao.java b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberReceiveAddressDao.java
new file mode 100644
index 0000000..0bfec73
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberReceiveAddressDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.member.dao;
+
+import com.bookstore.bookmall.member.entity.MemberReceiveAddressEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 会员收货地址
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Mapper
+public interface MemberReceiveAddressDao extends BaseMapper {
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberStatisticsInfoDao.java b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberStatisticsInfoDao.java
new file mode 100644
index 0000000..0884895
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/dao/MemberStatisticsInfoDao.java
@@ -0,0 +1,17 @@
+package com.bookstore.bookmall.member.dao;
+
+import com.bookstore.bookmall.member.entity.MemberStatisticsInfoEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 会员统计信息
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Mapper
+public interface MemberStatisticsInfoDao extends BaseMapper {
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/entity/GrowthChangeHistoryEntity.java b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/GrowthChangeHistoryEntity.java
new file mode 100644
index 0000000..f029f9f
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/GrowthChangeHistoryEntity.java
@@ -0,0 +1,48 @@
+package com.bookstore.bookmall.member.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 成长值变化历史记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Data
+@TableName("ums_growth_change_history")
+public class GrowthChangeHistoryEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * member_id
+ */
+ private Long memberId;
+ /**
+ * create_time
+ */
+ private Date createTime;
+ /**
+ * 改变的值(正负计数)
+ */
+ private Integer changeCount;
+ /**
+ * 备注
+ */
+ private String note;
+ /**
+ * 积分来源[0-购物,1-管理员修改]
+ */
+ private Integer sourceType;
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/entity/IntegrationChangeHistoryEntity.java b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/IntegrationChangeHistoryEntity.java
new file mode 100644
index 0000000..9bb6e0d
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/IntegrationChangeHistoryEntity.java
@@ -0,0 +1,48 @@
+package com.bookstore.bookmall.member.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 积分变化历史记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Data
+@TableName("ums_integration_change_history")
+public class IntegrationChangeHistoryEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * member_id
+ */
+ private Long memberId;
+ /**
+ * create_time
+ */
+ private Date createTime;
+ /**
+ * 变化的值
+ */
+ private Integer changeCount;
+ /**
+ * 备注
+ */
+ private String note;
+ /**
+ * 来源[0->购物;1->管理员修改;2->活动]
+ */
+ private Integer sourceTyoe;
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberCollectSpuEntity.java b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberCollectSpuEntity.java
new file mode 100644
index 0000000..f22628d
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberCollectSpuEntity.java
@@ -0,0 +1,48 @@
+package com.bookstore.bookmall.member.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 会员收藏的商品
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Data
+@TableName("ums_member_collect_spu")
+public class MemberCollectSpuEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 会员id
+ */
+ private Long memberId;
+ /**
+ * spu_id
+ */
+ private Long spuId;
+ /**
+ * spu_name
+ */
+ private String spuName;
+ /**
+ * spu_img
+ */
+ private String spuImg;
+ /**
+ * create_time
+ */
+ private Date createTime;
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberCollectSubjectEntity.java b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberCollectSubjectEntity.java
new file mode 100644
index 0000000..27e3699
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberCollectSubjectEntity.java
@@ -0,0 +1,44 @@
+package com.bookstore.bookmall.member.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 会员收藏的专题活动
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Data
+@TableName("ums_member_collect_subject")
+public class MemberCollectSubjectEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * subject_id
+ */
+ private Long subjectId;
+ /**
+ * subject_name
+ */
+ private String subjectName;
+ /**
+ * subject_img
+ */
+ private String subjectImg;
+ /**
+ * 活动url
+ */
+ private String subjectUrll;
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberEntity.java b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberEntity.java
new file mode 100644
index 0000000..24afec0
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberEntity.java
@@ -0,0 +1,96 @@
+package com.bookstore.bookmall.member.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 会员
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Data
+@TableName("ums_member")
+public class MemberEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 会员等级id
+ */
+ private Long levelId;
+ /**
+ * 用户名
+ */
+ private String username;
+ /**
+ * 密码
+ */
+ private String password;
+ /**
+ * 昵称
+ */
+ private String nickname;
+ /**
+ * 手机号码
+ */
+ private String mobile;
+ /**
+ * 邮箱
+ */
+ private String email;
+ /**
+ * 头像
+ */
+ private String header;
+ /**
+ * 性别
+ */
+ private Integer gender;
+ /**
+ * 生日
+ */
+ private Date birth;
+ /**
+ * 所在城市
+ */
+ private String city;
+ /**
+ * 职业
+ */
+ private String job;
+ /**
+ * 个性签名
+ */
+ private String sign;
+ /**
+ * 用户来源
+ */
+ private Integer sourceType;
+ /**
+ * 积分
+ */
+ private Integer integration;
+ /**
+ * 成长值
+ */
+ private Integer growth;
+ /**
+ * 启用状态
+ */
+ private Integer status;
+ /**
+ * 注册时间
+ */
+ private Date createTime;
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberLevelEntity.java b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberLevelEntity.java
new file mode 100644
index 0000000..17334f7
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberLevelEntity.java
@@ -0,0 +1,65 @@
+package com.bookstore.bookmall.member.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.math.BigDecimal;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 会员等级
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Data
+@TableName("ums_member_level")
+public class MemberLevelEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 等级名称
+ */
+ private String name;
+ /**
+ * 等级需要的成长值
+ */
+ private Integer growthPoint;
+ /**
+ * 是否为默认等级[0->不是;1->是]
+ */
+ private Integer defaultStatus;
+ /**
+ * 免运费标准
+ */
+ private BigDecimal freeFreightPoint;
+ /**
+ * 每次评价获取的成长值
+ */
+ private Integer commentGrowthPoint;
+ /**
+ * 是否有免邮特权
+ */
+ private Integer priviledgeFreeFreight;
+ /**
+ * 是否有会员价格特权
+ */
+ private Integer priviledgeMemberPrice;
+ /**
+ * 是否有生日特权
+ */
+ private Integer priviledgeBirthday;
+ /**
+ * 备注
+ */
+ private String note;
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberLoginLogEntity.java b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberLoginLogEntity.java
new file mode 100644
index 0000000..202526b
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberLoginLogEntity.java
@@ -0,0 +1,48 @@
+package com.bookstore.bookmall.member.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 会员登录记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Data
+@TableName("ums_member_login_log")
+public class MemberLoginLogEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * member_id
+ */
+ private Long memberId;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+ /**
+ * ip
+ */
+ private String ip;
+ /**
+ * city
+ */
+ private String city;
+ /**
+ * 登录类型[1-web,2-app]
+ */
+ private Integer loginType;
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberReceiveAddressEntity.java b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberReceiveAddressEntity.java
new file mode 100644
index 0000000..74dc688
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberReceiveAddressEntity.java
@@ -0,0 +1,68 @@
+package com.bookstore.bookmall.member.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 会员收货地址
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Data
+@TableName("ums_member_receive_address")
+public class MemberReceiveAddressEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * member_id
+ */
+ private Long memberId;
+ /**
+ * 收货人姓名
+ */
+ private String name;
+ /**
+ * 电话
+ */
+ private String phone;
+ /**
+ * 邮政编码
+ */
+ private String postCode;
+ /**
+ * 省份/直辖市
+ */
+ private String province;
+ /**
+ * 城市
+ */
+ private String city;
+ /**
+ * 区
+ */
+ private String region;
+ /**
+ * 详细地址(街道)
+ */
+ private String detailAddress;
+ /**
+ * 省市区代码
+ */
+ private String areacode;
+ /**
+ * 是否默认
+ */
+ private Integer defaultStatus;
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberStatisticsInfoEntity.java b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberStatisticsInfoEntity.java
new file mode 100644
index 0000000..5dcd716
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/entity/MemberStatisticsInfoEntity.java
@@ -0,0 +1,85 @@
+package com.bookstore.bookmall.member.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.math.BigDecimal;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 会员统计信息
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+@Data
+@TableName("ums_member_statistics_info")
+public class MemberStatisticsInfoEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 会员id
+ */
+ private Long memberId;
+ /**
+ * 累计消费金额
+ */
+ private BigDecimal consumeAmount;
+ /**
+ * 累计优惠金额
+ */
+ private BigDecimal couponAmount;
+ /**
+ * 订单数量
+ */
+ private Integer orderCount;
+ /**
+ * 优惠券数量
+ */
+ private Integer couponCount;
+ /**
+ * 评价数
+ */
+ private Integer commentCount;
+ /**
+ * 退货数量
+ */
+ private Integer returnOrderCount;
+ /**
+ * 登录次数
+ */
+ private Integer loginCount;
+ /**
+ * 关注数量
+ */
+ private Integer attendCount;
+ /**
+ * 粉丝数量
+ */
+ private Integer fansCount;
+ /**
+ * 收藏的商品数量
+ */
+ private Integer collectProductCount;
+ /**
+ * 收藏的专题活动数量
+ */
+ private Integer collectSubjectCount;
+ /**
+ * 收藏的评论数量
+ */
+ private Integer collectCommentCount;
+ /**
+ * 邀请的朋友数量
+ */
+ private Integer inviteFriendCount;
+
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/feign/CouponFeignService.java b/mall-member/src/main/java/com/bookstore/bookmall/member/feign/CouponFeignService.java
new file mode 100644
index 0000000..bbf035e
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/feign/CouponFeignService.java
@@ -0,0 +1,12 @@
+package com.bookstore.bookmall.member.feign;
+
+import com.bookstore.common.utils.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@FeignClient(name = "book-coupon")
+public interface CouponFeignService {
+
+ @RequestMapping("/coupon/coupon/member/list")
+ public R membercoupons();
+}
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/GrowthChangeHistoryService.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/GrowthChangeHistoryService.java
new file mode 100644
index 0000000..15935e5
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/GrowthChangeHistoryService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.member.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.member.entity.GrowthChangeHistoryEntity;
+
+import java.util.Map;
+
+/**
+ * 成长值变化历史记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+public interface GrowthChangeHistoryService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/IntegrationChangeHistoryService.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/IntegrationChangeHistoryService.java
new file mode 100644
index 0000000..32c351e
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/IntegrationChangeHistoryService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.member.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.member.entity.IntegrationChangeHistoryEntity;
+
+import java.util.Map;
+
+/**
+ * 积分变化历史记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+public interface IntegrationChangeHistoryService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberCollectSpuService.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberCollectSpuService.java
new file mode 100644
index 0000000..7d9214f
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberCollectSpuService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.member.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.member.entity.MemberCollectSpuEntity;
+
+import java.util.Map;
+
+/**
+ * 会员收藏的商品
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+public interface MemberCollectSpuService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberCollectSubjectService.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberCollectSubjectService.java
new file mode 100644
index 0000000..859c190
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberCollectSubjectService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.member.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.member.entity.MemberCollectSubjectEntity;
+
+import java.util.Map;
+
+/**
+ * 会员收藏的专题活动
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+public interface MemberCollectSubjectService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberLevelService.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberLevelService.java
new file mode 100644
index 0000000..4a65a8f
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberLevelService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.member.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.member.entity.MemberLevelEntity;
+
+import java.util.Map;
+
+/**
+ * 会员等级
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+public interface MemberLevelService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberLoginLogService.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberLoginLogService.java
new file mode 100644
index 0000000..f7d9286
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberLoginLogService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.member.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.member.entity.MemberLoginLogEntity;
+
+import java.util.Map;
+
+/**
+ * 会员登录记录
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+public interface MemberLoginLogService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberReceiveAddressService.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberReceiveAddressService.java
new file mode 100644
index 0000000..e6d2a01
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberReceiveAddressService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.member.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.member.entity.MemberReceiveAddressEntity;
+
+import java.util.Map;
+
+/**
+ * 会员收货地址
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+public interface MemberReceiveAddressService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberService.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberService.java
new file mode 100644
index 0000000..16cffaa
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.member.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.member.entity.MemberEntity;
+
+import java.util.Map;
+
+/**
+ * 会员
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+public interface MemberService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberStatisticsInfoService.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberStatisticsInfoService.java
new file mode 100644
index 0000000..739a93a
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/MemberStatisticsInfoService.java
@@ -0,0 +1,20 @@
+package com.bookstore.bookmall.member.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.bookmall.member.entity.MemberStatisticsInfoEntity;
+
+import java.util.Map;
+
+/**
+ * 会员统计信息
+ *
+ * @author dy
+ * @email 2073699128@qq.com
+ * @date 2025-07-10 23:12:48
+ */
+public interface MemberStatisticsInfoService extends IService {
+
+ PageUtils queryPage(Map params);
+}
+
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/GrowthChangeHistoryServiceImpl.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/GrowthChangeHistoryServiceImpl.java
new file mode 100644
index 0000000..14a3ee3
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/GrowthChangeHistoryServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.member.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.member.dao.GrowthChangeHistoryDao;
+import com.bookstore.bookmall.member.entity.GrowthChangeHistoryEntity;
+import com.bookstore.bookmall.member.service.GrowthChangeHistoryService;
+
+
+@Service("growthChangeHistoryService")
+public class GrowthChangeHistoryServiceImpl extends ServiceImpl implements GrowthChangeHistoryService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/IntegrationChangeHistoryServiceImpl.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/IntegrationChangeHistoryServiceImpl.java
new file mode 100644
index 0000000..633472a
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/IntegrationChangeHistoryServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.member.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.member.dao.IntegrationChangeHistoryDao;
+import com.bookstore.bookmall.member.entity.IntegrationChangeHistoryEntity;
+import com.bookstore.bookmall.member.service.IntegrationChangeHistoryService;
+
+
+@Service("integrationChangeHistoryService")
+public class IntegrationChangeHistoryServiceImpl extends ServiceImpl implements IntegrationChangeHistoryService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberCollectSpuServiceImpl.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberCollectSpuServiceImpl.java
new file mode 100644
index 0000000..5a36d27
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberCollectSpuServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.member.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.member.dao.MemberCollectSpuDao;
+import com.bookstore.bookmall.member.entity.MemberCollectSpuEntity;
+import com.bookstore.bookmall.member.service.MemberCollectSpuService;
+
+
+@Service("memberCollectSpuService")
+public class MemberCollectSpuServiceImpl extends ServiceImpl implements MemberCollectSpuService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberCollectSubjectServiceImpl.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberCollectSubjectServiceImpl.java
new file mode 100644
index 0000000..1517481
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberCollectSubjectServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.member.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.member.dao.MemberCollectSubjectDao;
+import com.bookstore.bookmall.member.entity.MemberCollectSubjectEntity;
+import com.bookstore.bookmall.member.service.MemberCollectSubjectService;
+
+
+@Service("memberCollectSubjectService")
+public class MemberCollectSubjectServiceImpl extends ServiceImpl implements MemberCollectSubjectService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberLevelServiceImpl.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberLevelServiceImpl.java
new file mode 100644
index 0000000..67e490f
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberLevelServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.member.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.member.dao.MemberLevelDao;
+import com.bookstore.bookmall.member.entity.MemberLevelEntity;
+import com.bookstore.bookmall.member.service.MemberLevelService;
+
+
+@Service("memberLevelService")
+public class MemberLevelServiceImpl extends ServiceImpl implements MemberLevelService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberLoginLogServiceImpl.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberLoginLogServiceImpl.java
new file mode 100644
index 0000000..312a2d3
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberLoginLogServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.member.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.member.dao.MemberLoginLogDao;
+import com.bookstore.bookmall.member.entity.MemberLoginLogEntity;
+import com.bookstore.bookmall.member.service.MemberLoginLogService;
+
+
+@Service("memberLoginLogService")
+public class MemberLoginLogServiceImpl extends ServiceImpl implements MemberLoginLogService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberReceiveAddressServiceImpl.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberReceiveAddressServiceImpl.java
new file mode 100644
index 0000000..de66831
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberReceiveAddressServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.member.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.member.dao.MemberReceiveAddressDao;
+import com.bookstore.bookmall.member.entity.MemberReceiveAddressEntity;
+import com.bookstore.bookmall.member.service.MemberReceiveAddressService;
+
+
+@Service("memberReceiveAddressService")
+public class MemberReceiveAddressServiceImpl extends ServiceImpl implements MemberReceiveAddressService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberServiceImpl.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberServiceImpl.java
new file mode 100644
index 0000000..4908b09
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.member.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.member.dao.MemberDao;
+import com.bookstore.bookmall.member.entity.MemberEntity;
+import com.bookstore.bookmall.member.service.MemberService;
+
+
+@Service("memberService")
+public class MemberServiceImpl extends ServiceImpl implements MemberService {
+
+ @Override
+ public PageUtils queryPage(Map params) {
+ IPage page = this.page(
+ new Query().getPage(params),
+ new QueryWrapper()
+ );
+
+ return new PageUtils(page);
+ }
+
+}
\ No newline at end of file
diff --git a/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberStatisticsInfoServiceImpl.java b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberStatisticsInfoServiceImpl.java
new file mode 100644
index 0000000..059ad9f
--- /dev/null
+++ b/mall-member/src/main/java/com/bookstore/bookmall/member/service/impl/MemberStatisticsInfoServiceImpl.java
@@ -0,0 +1,29 @@
+package com.bookstore.bookmall.member.service.impl;
+
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bookstore.common.utils.PageUtils;
+import com.bookstore.common.utils.Query;
+
+import com.bookstore.bookmall.member.dao.MemberStatisticsInfoDao;
+import com.bookstore.bookmall.member.entity.MemberStatisticsInfoEntity;
+import com.bookstore.bookmall.member.service.MemberStatisticsInfoService;
+
+
+@Service("memberStatisticsInfoService")
+public class MemberStatisticsInfoServiceImpl extends ServiceImpl