From 568b5575dc05f562cec8216241b942952e9723d6 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期一, 17 二月 2025 10:07:55 +0800
Subject: [PATCH] jtt808初始化

---
 server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java               |  162 ++++++
 server/db/business.discount_log.permissions.sql                                               |    6 
 server/services/src/main/java/com/doumee/service/business/impl/DiscountServiceImpl.java       |  203 +++++++
 server/db/business.discount.permissions.sql                                                   |    6 
 server/db/business.discount_member.permissions.sql                                            |    6 
 server/services/src/main/java/com/doumee/service/business/DiscountMemberService.java          |   97 +++
 server/platform/src/main/java/com/doumee/api/business/DiscountController.java                 |   90 +++
 server/services/src/main/java/com/doumee/dao/business/model/DiscountLog.java                  |   82 +++
 server/services/src/main/java/com/doumee/service/business/DiscountService.java                |   97 +++
 server/services/src/main/java/com/doumee/dao/business/DiscountLogMapper.java                  |   12 
 server/services/src/main/java/com/doumee/dao/business/DiscountMapper.java                     |   12 
 server/services/src/main/java/com/doumee/dao/business/DiscountMemberMapper.java               |   12 
 server/platform/src/main/java/com/doumee/api/business/DiscountMemberController.java           |   90 +++
 server/services/src/main/java/com/doumee/service/business/impl/DiscountLogServiceImpl.java    |  151 +++++
 server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java |  212 +++++++
 server/platform/src/main/java/com/doumee/api/business/DiscountLogController.java              |   90 +++
 server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java                   |    9 
 server/services/src/main/java/com/doumee/service/business/DiscountLogService.java             |   97 +++
 server/services/src/main/java/com/doumee/dao/business/model/Discount.java                     |  150 +++++
 19 files changed, 1,581 insertions(+), 3 deletions(-)

diff --git a/server/db/business.discount.permissions.sql b/server/db/business.discount.permissions.sql
new file mode 100644
index 0000000..64c590c
--- /dev/null
+++ b/server/db/business.discount.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discount:create', '鏂板缓楠戣濂楅淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discount:delete', '鍒犻櫎楠戣濂楅淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discount:update', '淇敼楠戣濂楅淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discount:query', '鏌ヨ楠戣濂楅淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discount:exportExcel', '瀵煎嚭楠戣濂楅淇℃伅琛�(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.discount_log.permissions.sql b/server/db/business.discount_log.permissions.sql
new file mode 100644
index 0000000..2e73527
--- /dev/null
+++ b/server/db/business.discount_log.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discountlog:create', '鏂板缓鐢ㄦ埛濂楅鍗′娇鐢ㄨ皟鏁存棩蹇楄〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discountlog:delete', '鍒犻櫎鐢ㄦ埛濂楅鍗′娇鐢ㄨ皟鏁存棩蹇楄〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discountlog:update', '淇敼鐢ㄦ埛濂楅鍗′娇鐢ㄨ皟鏁存棩蹇楄〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discountlog:query', '鏌ヨ鐢ㄦ埛濂楅鍗′娇鐢ㄨ皟鏁存棩蹇楄〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discountlog:exportExcel', '瀵煎嚭鐢ㄦ埛濂楅鍗′娇鐢ㄨ皟鏁存棩蹇楄〃(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.discount_member.permissions.sql b/server/db/business.discount_member.permissions.sql
new file mode 100644
index 0000000..1943ff8
--- /dev/null
+++ b/server/db/business.discount_member.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discountmember:create', '鏂板缓鐢ㄦ埛楠戣濂楅鍗″叧鑱旇〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discountmember:delete', '鍒犻櫎鐢ㄦ埛楠戣濂楅鍗″叧鑱旇〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discountmember:update', '淇敼鐢ㄦ埛楠戣濂楅鍗″叧鑱旇〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discountmember:query', '鏌ヨ鐢ㄦ埛楠戣濂楅鍗″叧鑱旇〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:discountmember:exportExcel', '瀵煎嚭鐢ㄦ埛楠戣濂楅鍗″叧鑱旇〃(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/platform/src/main/java/com/doumee/api/business/DiscountController.java b/server/platform/src/main/java/com/doumee/api/business/DiscountController.java
new file mode 100644
index 0000000..5da9753
--- /dev/null
+++ b/server/platform/src/main/java/com/doumee/api/business/DiscountController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.dao.business.model.Discount;
+import com.doumee.service.business.DiscountService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+@Api(tags = "楠戣濂楅淇℃伅琛�")
+@RestController
+@RequestMapping("/business/discount")
+public class DiscountController extends BaseController {
+
+    @Autowired
+    private DiscountService discountService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:discount:create")
+    public ApiResponse create(@RequestBody Discount discount) {
+        return ApiResponse.success(discountService.create(discount));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:discount:delete")
+    public ApiResponse deleteById(@PathVariable String id) {
+        discountService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:discount:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<String> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(id);
+        }
+        discountService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:discount:update")
+    public ApiResponse updateById(@RequestBody Discount discount) {
+        discountService.updateById(discount);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:discount:query")
+    public ApiResponse<PageData<Discount>> findPage (@RequestBody PageWrap<Discount> pageWrap) {
+        return ApiResponse.success(discountService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:discount:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Discount> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Discount.class).export(discountService.findPage(pageWrap).getRecords(), "楠戣濂楅淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:discount:query")
+    public ApiResponse findById(@PathVariable String id) {
+        return ApiResponse.success(discountService.findById(id));
+    }
+}
diff --git a/server/platform/src/main/java/com/doumee/api/business/DiscountLogController.java b/server/platform/src/main/java/com/doumee/api/business/DiscountLogController.java
new file mode 100644
index 0000000..343f500
--- /dev/null
+++ b/server/platform/src/main/java/com/doumee/api/business/DiscountLogController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.dao.business.model.DiscountLog;
+import com.doumee.service.business.DiscountLogService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+@Api(tags = "鐢ㄦ埛濂楅鍗′娇鐢ㄨ皟鏁存棩蹇楄〃")
+@RestController
+@RequestMapping("/business/discountLog")
+public class DiscountLogController extends BaseController {
+
+    @Autowired
+    private DiscountLogService discountLogService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:discountlog:create")
+    public ApiResponse create(@RequestBody DiscountLog discountLog) {
+        return ApiResponse.success(discountLogService.create(discountLog));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:discountlog:delete")
+    public ApiResponse deleteById(@PathVariable String id) {
+        discountLogService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:discountlog:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<String> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(id);
+        }
+        discountLogService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:discountlog:update")
+    public ApiResponse updateById(@RequestBody DiscountLog discountLog) {
+        discountLogService.updateById(discountLog);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:discountlog:query")
+    public ApiResponse<PageData<DiscountLog>> findPage (@RequestBody PageWrap<DiscountLog> pageWrap) {
+        return ApiResponse.success(discountLogService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:discountlog:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<DiscountLog> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(DiscountLog.class).export(discountLogService.findPage(pageWrap).getRecords(), "鐢ㄦ埛濂楅鍗′娇鐢ㄨ皟鏁存棩蹇楄〃", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:discountlog:query")
+    public ApiResponse findById(@PathVariable String id) {
+        return ApiResponse.success(discountLogService.findById(id));
+    }
+}
diff --git a/server/platform/src/main/java/com/doumee/api/business/DiscountMemberController.java b/server/platform/src/main/java/com/doumee/api/business/DiscountMemberController.java
new file mode 100644
index 0000000..c429612
--- /dev/null
+++ b/server/platform/src/main/java/com/doumee/api/business/DiscountMemberController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.dao.business.model.DiscountMember;
+import com.doumee.service.business.DiscountMemberService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+@Api(tags = "鐢ㄦ埛楠戣濂楅鍗″叧鑱旇〃")
+@RestController
+@RequestMapping("/business/discountMember")
+public class DiscountMemberController extends BaseController {
+
+    @Autowired
+    private DiscountMemberService discountMemberService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:discountmember:create")
+    public ApiResponse create(@RequestBody DiscountMember discountMember) {
+        return ApiResponse.success(discountMemberService.create(discountMember));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:discountmember:delete")
+    public ApiResponse deleteById(@PathVariable String id) {
+        discountMemberService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:discountmember:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<String> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(id);
+        }
+        discountMemberService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:discountmember:update")
+    public ApiResponse updateById(@RequestBody DiscountMember discountMember) {
+        discountMemberService.updateById(discountMember);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:discountmember:query")
+    public ApiResponse<PageData<DiscountMember>> findPage (@RequestBody PageWrap<DiscountMember> pageWrap) {
+        return ApiResponse.success(discountMemberService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:discountmember:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<DiscountMember> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(DiscountMember.class).export(discountMemberService.findPage(pageWrap).getRecords(), "鐢ㄦ埛楠戣濂楅鍗″叧鑱旇〃", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:discountmember:query")
+    public ApiResponse findById(@PathVariable String id) {
+        return ApiResponse.success(discountMemberService.findById(id));
+    }
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/DiscountLogMapper.java b/server/services/src/main/java/com/doumee/dao/business/DiscountLogMapper.java
new file mode 100644
index 0000000..471c3b1
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/DiscountLogMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.DiscountLog;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+public interface DiscountLogMapper extends BaseMapper<DiscountLog> {
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/DiscountMapper.java b/server/services/src/main/java/com/doumee/dao/business/DiscountMapper.java
new file mode 100644
index 0000000..847061b
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/DiscountMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.Discount;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+public interface DiscountMapper extends BaseMapper<Discount> {
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/DiscountMemberMapper.java b/server/services/src/main/java/com/doumee/dao/business/DiscountMemberMapper.java
new file mode 100644
index 0000000..664aa29
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/DiscountMemberMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.DiscountMember;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+public interface DiscountMemberMapper extends BaseMapper<DiscountMember> {
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Discount.java b/server/services/src/main/java/com/doumee/dao/business/model/Discount.java
new file mode 100644
index 0000000..8ee8eef
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Discount.java
@@ -0,0 +1,150 @@
+package com.doumee.dao.business.model;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import java.math.BigDecimal;
+
+/**
+ * 楠戣濂楅淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+@Data
+@ApiModel("楠戣濂楅淇℃伅琛�")
+@TableName("\"discount\"")
+public class Discount {
+
+    @ApiModelProperty(value = "缂栫爜")
+    @ExcelColumn(name="缂栫爜")
+    private String id;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    @ExcelColumn(name="鍒涘缓浜�")
+    private String creator;
+
+    @ApiModelProperty(value = "缂栬緫鏃堕棿")
+    @ExcelColumn(name="缂栬緫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "缂栬緫浜�")
+    @ExcelColumn(name="缂栬緫浜�")
+    private String editor;
+
+    @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "1")
+    @ExcelColumn(name="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String info;
+
+    @ApiModelProperty(value = "鍚嶇О")
+    @ExcelColumn(name="鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "绫诲瀷 0鏈熼檺鍗� 1娆″崱", example = "1")
+    @ExcelColumn(name="绫诲瀷 0鏈熼檺鍗� 1娆″崱")
+    private Integer type;
+
+    @ApiModelProperty(value = "姣忔棩楠戣闄愬埗绫诲瀷 0涓嶉檺鍒� 1闄愬埗", example = "1")
+    @ExcelColumn(name="姣忔棩楠戣闄愬埗绫诲瀷 0涓嶉檺鍒� 1闄愬埗")
+    private Integer limitType;
+
+    @ApiModelProperty(value = "姣忔棩楠戣闄愬埗鏃堕棿锛堝垎閽燂級", example = "1")
+    @ExcelColumn(name="姣忔棩楠戣闄愬埗鏃堕棿锛堝垎閽燂級")
+    private Integer limitTime;
+
+    @ApiModelProperty(value = "閿�鍞环锛堝厓锛�", example = "1")
+    @ExcelColumn(name="閿�鍞环锛堝厓锛�")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "鍒掔嚎浠凤紙鍏冿級", example = "1")
+    @ExcelColumn(name="鍒掔嚎浠凤紙鍏冿級")
+    private BigDecimal linePrice;
+
+    @ApiModelProperty(value = "閿�鍞笭閬� 0灏忕▼搴�", example = "1")
+    @ExcelColumn(name="閿�鍞笭閬� 0灏忕▼搴�")
+    private Integer channel;
+
+    @ApiModelProperty(value = "濂楅鍥剧墖")
+    @ExcelColumn(name="濂楅鍥剧墖")
+    private String imgurl;
+
+    @ApiModelProperty(value = "绠�浠�")
+    @ExcelColumn(name="绠�浠�")
+    private String descs;
+
+    @ApiModelProperty(value = "鎻忚堪")
+    @ExcelColumn(name="鎻忚堪")
+    private String content;
+
+    @ApiModelProperty(value = "閿�鍞紑濮嬫棩鏈�")
+    @ExcelColumn(name="閿�鍞紑濮嬫棩鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startDate;
+
+    @ApiModelProperty(value = "閿�鍞粨鏉熸棩鏈�")
+    @ExcelColumn(name="閿�鍞粨鏉熸棩鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endDate;
+
+    @ApiModelProperty(value = "浣跨敤鏃堕棿绫诲瀷 0鍥哄畾鏃堕棿娈� 1璐拱鍚庣敓鏁� 2鎸囧畾鏃ユ湡鐢熸晥", example = "1")
+    @ExcelColumn(name="浣跨敤鏃堕棿绫诲瀷 0鍥哄畾鏃堕棿娈� 1璐拱鍚庣敓鏁� 2鎸囧畾鏃ユ湡鐢熸晥")
+    private Integer useType;
+
+    @ApiModelProperty(value = "浣跨敤寮�濮嬫棩鏈�")
+    @ExcelColumn(name="浣跨敤寮�濮嬫棩鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date useStartDate;
+
+    @ApiModelProperty(value = "浣跨敤缁撴潫鏃ユ湡")
+    @ExcelColumn(name="浣跨敤缁撴潫鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date useEndDate;
+
+    @ApiModelProperty(value = "浣跨敤鏈夋晥澶╂暟", example = "1")
+    @ExcelColumn(name="浣跨敤鏈夋晥澶╂暟")
+    private Integer useDays;
+
+    @ApiModelProperty(value = "鑺傚亣鏃ユ槸鍚﹀彲浠� 0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鑺傚亣鏃ユ槸鍚﹀彲浠� 0鍚� 1鏄�")
+    private Integer useHoliday;
+
+    @ApiModelProperty(value = "宸ヤ綔鏃ユ槸鍚﹀彲浠� 0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="宸ヤ綔鏃ユ槸鍚﹀彲浠� 0鍚� 1鏄�")
+    private Integer useWorkday;
+
+    @ApiModelProperty(value = "閿�閲忔�婚檺棰�", example = "1")
+    @ExcelColumn(name="閿�閲忔�婚檺棰�")
+    private Integer saleLimit;
+
+    @ApiModelProperty(value = "閿�閲忔瘡澶╅檺棰�", example = "1")
+    @ExcelColumn(name="閿�閲忔瘡澶╅檺棰�")
+    private Integer saleDayLimit;
+
+    @ApiModelProperty(value = "鐘舵�� 0姝e父 1鍋滅敤", example = "1")
+    @ExcelColumn(name="鐘舵�� 0姝e父 1鍋滅敤")
+    private Integer status;
+
+    @ApiModelProperty(value = "鏄惁鏀寔鑷杞﹁鍗� 0涓嶆敮鎸� 1鏀寔", example = "1")
+    @ExcelColumn(name="鏄惁鏀寔鑷杞﹁鍗� 0涓嶆敮鎸� 1鏀寔")
+    private Integer isbike;
+
+    @ApiModelProperty(value = "鏄惁鏀寔鐢靛姩杞� 0涓嶆敮鎸� 1鏀寔", example = "1")
+    @ExcelColumn(name="鏄惁鏀寔鐢靛姩杞� 0涓嶆敮鎸� 1鏀寔")
+    private Integer iselecbike;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/DiscountLog.java b/server/services/src/main/java/com/doumee/dao/business/model/DiscountLog.java
new file mode 100644
index 0000000..ff473bf
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/DiscountLog.java
@@ -0,0 +1,82 @@
+package com.doumee.dao.business.model;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import java.math.BigDecimal;
+
+/**
+ * 鐢ㄦ埛濂楅鍗′娇鐢ㄨ皟鏁存棩蹇楄〃
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+@Data
+@ApiModel("鐢ㄦ埛濂楅鍗′娇鐢ㄨ皟鏁存棩蹇楄〃")
+@TableName("\"discount_log\"")
+public class DiscountLog {
+
+    @ApiModelProperty(value = "缂栫爜")
+    @ExcelColumn(name="缂栫爜")
+    private String id;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    @ExcelColumn(name="鍒涘缓浜�")
+    private String creator;
+
+    @ApiModelProperty(value = "缂栬緫鏃堕棿")
+    @ExcelColumn(name="缂栬緫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "缂栬緫浜�")
+    @ExcelColumn(name="缂栬緫浜�")
+    private String editor;
+
+    @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "1")
+    @ExcelColumn(name="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String info;
+
+    @ApiModelProperty(value = "鐢ㄦ埛濂楅鍗$紪鐮侊紙鍏宠仈discount_member)")
+    @ExcelColumn(name="鐢ㄦ埛濂楅鍗$紪鐮侊紙鍏宠仈discount_member)")
+    private String discountMemberId;
+
+    @ApiModelProperty(value = "鎿嶄綔绫诲瀷 0鐢ㄦ埛楠戣浣跨敤 1骞冲彴浣滃簾 2骞冲彴璋冩暣", example = "1")
+    @ExcelColumn(name="鎿嶄綔绫诲瀷 0鐢ㄦ埛楠戣浣跨敤 1骞冲彴浣滃簾 2骞冲彴璋冩暣")
+    private Integer type;
+
+    @ApiModelProperty(value = "鎶垫墸楠戣鏃堕暱锛堝垎閽燂級", example = "1")
+    @ExcelColumn(name="鎶垫墸楠戣鏃堕暱锛堝垎閽燂級")
+    private Integer rideTime;
+
+    @ApiModelProperty(value = "鎶垫墸閲戦锛堝厓锛�", example = "1")
+    @ExcelColumn(name="鎶垫墸閲戦锛堝厓锛�")
+    private BigDecimal ridePrice;
+
+    @ApiModelProperty(value = "璋冩暣澶囨敞")
+    @ExcelColumn(name="璋冩暣澶囨敞")
+    private String editInfo;
+
+    @ApiModelProperty(value = "鏈夋晥鏈熷鍔犲ぉ鏁�", example = "1")
+    @ExcelColumn(name="鏈夋晥鏈熷鍔犲ぉ鏁�")
+    private Integer editDays;
+
+    @ApiModelProperty(value = "鍏宠仈璁㈠崟缂栫爜(鍏宠仈goodsorder锛�")
+    @ExcelColumn(name="鍏宠仈璁㈠崟缂栫爜(鍏宠仈goodsorder锛�")
+    private String goodsorderId;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java b/server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java
new file mode 100644
index 0000000..b00dd03
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java
@@ -0,0 +1,162 @@
+package com.doumee.dao.business.model;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import java.math.BigDecimal;
+
+/**
+ * 鐢ㄦ埛楠戣濂楅鍗″叧鑱旇〃
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+@Data
+@ApiModel("鐢ㄦ埛楠戣濂楅鍗″叧鑱旇〃")
+@TableName("\"discount_member\"")
+public class DiscountMember {
+
+    @ApiModelProperty(value = "缂栫爜")
+    @ExcelColumn(name="缂栫爜")
+    private String id;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    @ExcelColumn(name="鍒涘缓浜�")
+    private String creator;
+
+    @ApiModelProperty(value = "缂栬緫鏃堕棿")
+    @ExcelColumn(name="缂栬緫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "缂栬緫浜�")
+    @ExcelColumn(name="缂栬緫浜�")
+    private String editor;
+
+    @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "1")
+    @ExcelColumn(name="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String info;
+
+    @ApiModelProperty(value = "绁ㄥ彿")
+    @ExcelColumn(name="绁ㄥ彿")
+    private String code;
+
+    @ApiModelProperty(value = "鍚嶇О")
+    @ExcelColumn(name="鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "绫诲瀷 0鏈熼檺鍗� 1娆″崱", example = "1")
+    @ExcelColumn(name="绫诲瀷 0鏈熼檺鍗� 1娆″崱")
+    private Integer type;
+
+    @ApiModelProperty(value = "姣忔棩楠戣闄愬埗绫诲瀷 0涓嶉檺鍒� 1闄愬埗", example = "1")
+    @ExcelColumn(name="姣忔棩楠戣闄愬埗绫诲瀷 0涓嶉檺鍒� 1闄愬埗")
+    private Integer limitType;
+
+    @ApiModelProperty(value = "姣忔棩楠戣闄愬埗鏃堕棿锛堝垎閽燂級", example = "1")
+    @ExcelColumn(name="姣忔棩楠戣闄愬埗鏃堕棿锛堝垎閽燂級")
+    private Integer limitTime;
+
+    @ApiModelProperty(value = "閿�鍞环锛堝厓锛�", example = "1")
+    @ExcelColumn(name="閿�鍞环锛堝厓锛�")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "鍒掔嚎浠凤紙鍏冿級", example = "1")
+    @ExcelColumn(name="鍒掔嚎浠凤紙鍏冿級")
+    private BigDecimal linePrice;
+
+    @ApiModelProperty(value = "閿�鍞笭閬� 0灏忕▼搴�", example = "1")
+    @ExcelColumn(name="閿�鍞笭閬� 0灏忕▼搴�")
+    private Integer channel;
+
+    @ApiModelProperty(value = "濂楅鍥剧墖")
+    @ExcelColumn(name="濂楅鍥剧墖")
+    private String imgurl;
+
+    @ApiModelProperty(value = "绠�浠�")
+    @ExcelColumn(name="绠�浠�")
+    private String descs;
+
+    @ApiModelProperty(value = "鎻忚堪")
+    @ExcelColumn(name="鎻忚堪")
+    private String content;
+
+    @ApiModelProperty(value = "閿�鍞紑濮嬫棩鏈�")
+    @ExcelColumn(name="閿�鍞紑濮嬫棩鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startDate;
+
+    @ApiModelProperty(value = "閿�鍞粨鏉熸棩鏈�")
+    @ExcelColumn(name="閿�鍞粨鏉熸棩鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endDate;
+
+    @ApiModelProperty(value = "浣跨敤鏃堕棿绫诲瀷 0鍥哄畾鏃堕棿娈� 1璐拱鍚庣敓鏁� 2鎸囧畾鏃ユ湡鐢熸晥", example = "1")
+    @ExcelColumn(name="浣跨敤鏃堕棿绫诲瀷 0鍥哄畾鏃堕棿娈� 1璐拱鍚庣敓鏁� 2鎸囧畾鏃ユ湡鐢熸晥")
+    private Integer useType;
+
+    @ApiModelProperty(value = "浣跨敤寮�濮嬫棩鏈�")
+    @ExcelColumn(name="浣跨敤寮�濮嬫棩鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date useStartDate;
+
+    @ApiModelProperty(value = "浣跨敤缁撴潫鏃ユ湡")
+    @ExcelColumn(name="浣跨敤缁撴潫鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date useEndDate;
+
+    @ApiModelProperty(value = "浣跨敤鏈夋晥澶╂暟", example = "1")
+    @ExcelColumn(name="浣跨敤鏈夋晥澶╂暟")
+    private Integer useDays;
+
+    @ApiModelProperty(value = "鑺傚亣鏃ユ槸鍚﹀彲浠� 0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鑺傚亣鏃ユ槸鍚﹀彲浠� 0鍚� 1鏄�")
+    private Integer useHoliday;
+
+    @ApiModelProperty(value = "宸ヤ綔鏃ユ槸鍚﹀彲浠� 0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="宸ヤ綔鏃ユ槸鍚﹀彲浠� 0鍚� 1鏄�")
+    private Integer useWorkday;
+
+    @ApiModelProperty(value = "閿�閲忔�婚檺棰�", example = "1")
+    @ExcelColumn(name="閿�閲忔�婚檺棰�")
+    private Integer saleLimit;
+
+    @ApiModelProperty(value = "閿�閲忔瘡澶╅檺棰�", example = "1")
+    @ExcelColumn(name="閿�閲忔瘡澶╅檺棰�")
+    private Integer saleDayLimit;
+
+    @ApiModelProperty(value = "鐘舵�� 0姝e父 1浣滃簾 2杩囨湡鎴栫敤瀹�", example = "1")
+    @ExcelColumn(name="鐘舵�� 0姝e父 1浣滃簾 2杩囨湡鎴栫敤瀹�")
+    private Integer status;
+
+    @ApiModelProperty(value = "鐢ㄦ埛缂栫爜锛堝叧鑱攎ember)")
+    @ExcelColumn(name="鐢ㄦ埛缂栫爜锛堝叧鑱攎ember)")
+    private String memberId;
+
+    @ApiModelProperty(value = "鍏宠仈璁㈠崟缂栫爜(鍏宠仈goodsorder锛�")
+    @ExcelColumn(name="鍏宠仈璁㈠崟缂栫爜(鍏宠仈goodsorder锛�")
+    private String goodsorderId;
+
+    @ApiModelProperty(value = "鏄惁鏀寔鑷杞﹁鍗� 0涓嶆敮鎸� 1鏀寔", example = "1")
+    @ExcelColumn(name="鏄惁鏀寔鑷杞﹁鍗� 0涓嶆敮鎸� 1鏀寔")
+    private Integer isbike;
+
+    @ApiModelProperty(value = "鏄惁鏀寔鐢靛姩杞� 0涓嶆敮鎸� 1鏀寔", example = "1")
+    @ExcelColumn(name="鏄惁鏀寔鐢靛姩杞� 0涓嶆敮鎸� 1鏀寔")
+    private Integer iselecbike;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java b/server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java
index 3fd1618..83c9768 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java
@@ -54,6 +54,12 @@
 
     @ApiModelProperty(value = "鐢ㄦ埛缂栫爜锛堝叧鑱攎ember琛級")
     private String memberId;
+    @ApiModelProperty(value = "鍏宠仈瀵硅薄缂栫爜")
+    private String objId;
+    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0濂楅鍗�")
+    private Integer objType;
+    @ApiModelProperty(value = "浜ゆ槗绫诲瀷 0绉熻溅鎶奸噾 1濂楅鍗¤喘涔�")
+    private Integer type;
 
     @ApiModelProperty(value = "鐢ㄦ埛缂栫爜锛堝叧鑱攎ember琛級")
     @TableField(exist = false)
@@ -81,9 +87,6 @@
     @ApiModelProperty(value = "鏀粯鏃堕棿")
     @ExcelColumn(name="浜ゆ娂閲戞椂闂�",index = 5,width = 10,align = HorizontalAlignment.CENTER,dateFormat = "yyyy-MM-dd HH:mm:ss" )
     private Date payDate;
-
-    @ApiModelProperty(value = "浜ゆ槗绫诲瀷 0绉熻溅鎶奸噾")
-    private Integer type;
 
     @ApiModelProperty(value = "缁撶畻閲戦(鍒嗭級")
     @ExcelColumn(name="缁撶畻閲戦(鍏�)",index = 7,width = 10,align = HorizontalAlignment.CENTER)
diff --git a/server/services/src/main/java/com/doumee/service/business/DiscountLogService.java b/server/services/src/main/java/com/doumee/service/business/DiscountLogService.java
new file mode 100644
index 0000000..b5062a1
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/DiscountLogService.java
@@ -0,0 +1,97 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.DiscountLog;
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛濂楅鍗′娇鐢ㄨ皟鏁存棩蹇楄〃Service瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+public interface DiscountLogService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param discountLog 瀹炰綋瀵硅薄
+     * @return String
+     */
+    String create(DiscountLog discountLog);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(String id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param discountLog 瀹炰綋瀵硅薄
+     */
+    void delete(DiscountLog discountLog);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<String> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param discountLog 瀹炰綋瀵硅薄
+     */
+    void updateById(DiscountLog discountLog);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param discountLogs 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<DiscountLog> discountLogs);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return DiscountLog
+     */
+    DiscountLog findById(String id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param discountLog 瀹炰綋瀵硅薄
+     * @return DiscountLog
+     */
+    DiscountLog findOne(DiscountLog discountLog);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param discountLog 瀹炰綋瀵硅薄
+     * @return List<DiscountLog>
+     */
+    List<DiscountLog> findList(DiscountLog discountLog);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<DiscountLog>
+     */
+    PageData<DiscountLog> findPage(PageWrap<DiscountLog> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param discountLog 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(DiscountLog discountLog);
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/DiscountMemberService.java b/server/services/src/main/java/com/doumee/service/business/DiscountMemberService.java
new file mode 100644
index 0000000..2849dc7
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/DiscountMemberService.java
@@ -0,0 +1,97 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.DiscountMember;
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛楠戣濂楅鍗″叧鑱旇〃Service瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+public interface DiscountMemberService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param discountMember 瀹炰綋瀵硅薄
+     * @return String
+     */
+    String create(DiscountMember discountMember);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(String id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param discountMember 瀹炰綋瀵硅薄
+     */
+    void delete(DiscountMember discountMember);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<String> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param discountMember 瀹炰綋瀵硅薄
+     */
+    void updateById(DiscountMember discountMember);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param discountMembers 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<DiscountMember> discountMembers);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return DiscountMember
+     */
+    DiscountMember findById(String id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param discountMember 瀹炰綋瀵硅薄
+     * @return DiscountMember
+     */
+    DiscountMember findOne(DiscountMember discountMember);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param discountMember 瀹炰綋瀵硅薄
+     * @return List<DiscountMember>
+     */
+    List<DiscountMember> findList(DiscountMember discountMember);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<DiscountMember>
+     */
+    PageData<DiscountMember> findPage(PageWrap<DiscountMember> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param discountMember 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(DiscountMember discountMember);
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/DiscountService.java b/server/services/src/main/java/com/doumee/service/business/DiscountService.java
new file mode 100644
index 0000000..7850adc
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/DiscountService.java
@@ -0,0 +1,97 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Discount;
+import java.util.List;
+
+/**
+ * 楠戣濂楅淇℃伅琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+public interface DiscountService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param discount 瀹炰綋瀵硅薄
+     * @return String
+     */
+    String create(Discount discount);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(String id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param discount 瀹炰綋瀵硅薄
+     */
+    void delete(Discount discount);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<String> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param discount 瀹炰綋瀵硅薄
+     */
+    void updateById(Discount discount);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param discounts 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<Discount> discounts);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return Discount
+     */
+    Discount findById(String id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param discount 瀹炰綋瀵硅薄
+     * @return Discount
+     */
+    Discount findOne(Discount discount);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param discount 瀹炰綋瀵硅薄
+     * @return List<Discount>
+     */
+    List<Discount> findList(Discount discount);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<Discount>
+     */
+    PageData<Discount> findPage(PageWrap<Discount> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param discount 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(Discount discount);
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/DiscountLogServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/DiscountLogServiceImpl.java
new file mode 100644
index 0000000..bebd94a
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/DiscountLogServiceImpl.java
@@ -0,0 +1,151 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.DiscountLogMapper;
+import com.doumee.dao.business.model.DiscountLog;
+import com.doumee.service.business.DiscountLogService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛濂楅鍗′娇鐢ㄨ皟鏁存棩蹇楄〃Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+@Service
+public class DiscountLogServiceImpl implements DiscountLogService {
+
+    @Autowired
+    private DiscountLogMapper discountLogMapper;
+
+    @Override
+    public String create(DiscountLog discountLog) {
+        discountLogMapper.insert(discountLog);
+        return discountLog.getId();
+    }
+
+    @Override
+    public void deleteById(String id) {
+        discountLogMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(DiscountLog discountLog) {
+        UpdateWrapper<DiscountLog> deleteWrapper = new UpdateWrapper<>(discountLog);
+        discountLogMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<String> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        discountLogMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(DiscountLog discountLog) {
+        discountLogMapper.updateById(discountLog);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<DiscountLog> discountLogs) {
+        if (CollectionUtils.isEmpty(discountLogs)) {
+            return;
+        }
+        for (DiscountLog discountLog: discountLogs) {
+            this.updateById(discountLog);
+        }
+    }
+
+    @Override
+    public DiscountLog findById(String id) {
+        return discountLogMapper.selectById(id);
+    }
+
+    @Override
+    public DiscountLog findOne(DiscountLog discountLog) {
+        QueryWrapper<DiscountLog> wrapper = new QueryWrapper<>(discountLog);
+        return discountLogMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<DiscountLog> findList(DiscountLog discountLog) {
+        QueryWrapper<DiscountLog> wrapper = new QueryWrapper<>(discountLog);
+        return discountLogMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<DiscountLog> findPage(PageWrap<DiscountLog> pageWrap) {
+        IPage<DiscountLog> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<DiscountLog> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(DiscountLog::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(DiscountLog::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(DiscountLog::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(DiscountLog::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(DiscountLog::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(DiscountLog::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(DiscountLog::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(DiscountLog::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getInfo() != null) {
+            queryWrapper.lambda().eq(DiscountLog::getInfo, pageWrap.getModel().getInfo());
+        }
+        if (pageWrap.getModel().getDiscountMemberId() != null) {
+            queryWrapper.lambda().eq(DiscountLog::getDiscountMemberId, pageWrap.getModel().getDiscountMemberId());
+        }
+        if (pageWrap.getModel().getType() != null) {
+            queryWrapper.lambda().eq(DiscountLog::getType, pageWrap.getModel().getType());
+        }
+        if (pageWrap.getModel().getRideTime() != null) {
+            queryWrapper.lambda().eq(DiscountLog::getRideTime, pageWrap.getModel().getRideTime());
+        }
+        if (pageWrap.getModel().getRidePrice() != null) {
+            queryWrapper.lambda().eq(DiscountLog::getRidePrice, pageWrap.getModel().getRidePrice());
+        }
+        if (pageWrap.getModel().getEditInfo() != null) {
+            queryWrapper.lambda().eq(DiscountLog::getEditInfo, pageWrap.getModel().getEditInfo());
+        }
+        if (pageWrap.getModel().getEditDays() != null) {
+            queryWrapper.lambda().eq(DiscountLog::getEditDays, pageWrap.getModel().getEditDays());
+        }
+        if (pageWrap.getModel().getGoodsorderId() != null) {
+            queryWrapper.lambda().eq(DiscountLog::getGoodsorderId, pageWrap.getModel().getGoodsorderId());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(discountLogMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(DiscountLog discountLog) {
+        QueryWrapper<DiscountLog> wrapper = new QueryWrapper<>(discountLog);
+        return discountLogMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java
new file mode 100644
index 0000000..135d83f
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java
@@ -0,0 +1,212 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.DiscountMemberMapper;
+import com.doumee.dao.business.model.DiscountMember;
+import com.doumee.service.business.DiscountMemberService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛楠戣濂楅鍗″叧鑱旇〃Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+@Service
+public class DiscountMemberServiceImpl implements DiscountMemberService {
+
+    @Autowired
+    private DiscountMemberMapper discountMemberMapper;
+
+    @Override
+    public String create(DiscountMember discountMember) {
+        discountMemberMapper.insert(discountMember);
+        return discountMember.getId();
+    }
+
+    @Override
+    public void deleteById(String id) {
+        discountMemberMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(DiscountMember discountMember) {
+        UpdateWrapper<DiscountMember> deleteWrapper = new UpdateWrapper<>(discountMember);
+        discountMemberMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<String> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        discountMemberMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(DiscountMember discountMember) {
+        discountMemberMapper.updateById(discountMember);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<DiscountMember> discountMembers) {
+        if (CollectionUtils.isEmpty(discountMembers)) {
+            return;
+        }
+        for (DiscountMember discountMember: discountMembers) {
+            this.updateById(discountMember);
+        }
+    }
+
+    @Override
+    public DiscountMember findById(String id) {
+        return discountMemberMapper.selectById(id);
+    }
+
+    @Override
+    public DiscountMember findOne(DiscountMember discountMember) {
+        QueryWrapper<DiscountMember> wrapper = new QueryWrapper<>(discountMember);
+        return discountMemberMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<DiscountMember> findList(DiscountMember discountMember) {
+        QueryWrapper<DiscountMember> wrapper = new QueryWrapper<>(discountMember);
+        return discountMemberMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<DiscountMember> findPage(PageWrap<DiscountMember> pageWrap) {
+        IPage<DiscountMember> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<DiscountMember> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(DiscountMember::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(DiscountMember::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(DiscountMember::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(DiscountMember::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getInfo() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getInfo, pageWrap.getModel().getInfo());
+        }
+        if (pageWrap.getModel().getCode() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getCode, pageWrap.getModel().getCode());
+        }
+        if (pageWrap.getModel().getName() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getName, pageWrap.getModel().getName());
+        }
+        if (pageWrap.getModel().getType() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getType, pageWrap.getModel().getType());
+        }
+        if (pageWrap.getModel().getLimitType() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getLimitType, pageWrap.getModel().getLimitType());
+        }
+        if (pageWrap.getModel().getLimitTime() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getLimitTime, pageWrap.getModel().getLimitTime());
+        }
+        if (pageWrap.getModel().getPrice() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getPrice, pageWrap.getModel().getPrice());
+        }
+        if (pageWrap.getModel().getLinePrice() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getLinePrice, pageWrap.getModel().getLinePrice());
+        }
+        if (pageWrap.getModel().getChannel() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getChannel, pageWrap.getModel().getChannel());
+        }
+        if (pageWrap.getModel().getImgurl() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getImgurl, pageWrap.getModel().getImgurl());
+        }
+        if (pageWrap.getModel().getDescs() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getDescs, pageWrap.getModel().getDescs());
+        }
+        if (pageWrap.getModel().getContent() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getContent, pageWrap.getModel().getContent());
+        }
+        if (pageWrap.getModel().getStartDate() != null) {
+            queryWrapper.lambda().ge(DiscountMember::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()));
+            queryWrapper.lambda().le(DiscountMember::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getStartDate()));
+        }
+        if (pageWrap.getModel().getEndDate() != null) {
+            queryWrapper.lambda().ge(DiscountMember::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()));
+            queryWrapper.lambda().le(DiscountMember::getEndDate, Utils.Date.getEnd(pageWrap.getModel().getEndDate()));
+        }
+        if (pageWrap.getModel().getUseType() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getUseType, pageWrap.getModel().getUseType());
+        }
+        if (pageWrap.getModel().getUseStartDate() != null) {
+            queryWrapper.lambda().ge(DiscountMember::getUseStartDate, Utils.Date.getStart(pageWrap.getModel().getUseStartDate()));
+            queryWrapper.lambda().le(DiscountMember::getUseStartDate, Utils.Date.getEnd(pageWrap.getModel().getUseStartDate()));
+        }
+        if (pageWrap.getModel().getUseEndDate() != null) {
+            queryWrapper.lambda().ge(DiscountMember::getUseEndDate, Utils.Date.getStart(pageWrap.getModel().getUseEndDate()));
+            queryWrapper.lambda().le(DiscountMember::getUseEndDate, Utils.Date.getEnd(pageWrap.getModel().getUseEndDate()));
+        }
+        if (pageWrap.getModel().getUseDays() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getUseDays, pageWrap.getModel().getUseDays());
+        }
+        if (pageWrap.getModel().getUseHoliday() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getUseHoliday, pageWrap.getModel().getUseHoliday());
+        }
+        if (pageWrap.getModel().getUseWorkday() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getUseWorkday, pageWrap.getModel().getUseWorkday());
+        }
+        if (pageWrap.getModel().getSaleLimit() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getSaleLimit, pageWrap.getModel().getSaleLimit());
+        }
+        if (pageWrap.getModel().getSaleDayLimit() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getSaleDayLimit, pageWrap.getModel().getSaleDayLimit());
+        }
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getStatus, pageWrap.getModel().getStatus());
+        }
+        if (pageWrap.getModel().getMemberId() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getMemberId, pageWrap.getModel().getMemberId());
+        }
+        if (pageWrap.getModel().getGoodsorderId() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getGoodsorderId, pageWrap.getModel().getGoodsorderId());
+        }
+        if (pageWrap.getModel().getIsbike() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getIsbike, pageWrap.getModel().getIsbike());
+        }
+        if (pageWrap.getModel().getIselecbike() != null) {
+            queryWrapper.lambda().eq(DiscountMember::getIselecbike, pageWrap.getModel().getIselecbike());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(discountMemberMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(DiscountMember discountMember) {
+        QueryWrapper<DiscountMember> wrapper = new QueryWrapper<>(discountMember);
+        return discountMemberMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/DiscountServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/DiscountServiceImpl.java
new file mode 100644
index 0000000..6f8073b
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/DiscountServiceImpl.java
@@ -0,0 +1,203 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.DiscountMapper;
+import com.doumee.dao.business.model.Discount;
+import com.doumee.service.business.DiscountService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 楠戣濂楅淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2025/02/17 09:43
+ */
+@Service
+public class DiscountServiceImpl implements DiscountService {
+
+    @Autowired
+    private DiscountMapper discountMapper;
+
+    @Override
+    public String create(Discount discount) {
+        discountMapper.insert(discount);
+        return discount.getId();
+    }
+
+    @Override
+    public void deleteById(String id) {
+        discountMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(Discount discount) {
+        UpdateWrapper<Discount> deleteWrapper = new UpdateWrapper<>(discount);
+        discountMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<String> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        discountMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(Discount discount) {
+        discountMapper.updateById(discount);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<Discount> discounts) {
+        if (CollectionUtils.isEmpty(discounts)) {
+            return;
+        }
+        for (Discount discount: discounts) {
+            this.updateById(discount);
+        }
+    }
+
+    @Override
+    public Discount findById(String id) {
+        return discountMapper.selectById(id);
+    }
+
+    @Override
+    public Discount findOne(Discount discount) {
+        QueryWrapper<Discount> wrapper = new QueryWrapper<>(discount);
+        return discountMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<Discount> findList(Discount discount) {
+        QueryWrapper<Discount> wrapper = new QueryWrapper<>(discount);
+        return discountMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<Discount> findPage(PageWrap<Discount> pageWrap) {
+        IPage<Discount> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<Discount> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(Discount::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(Discount::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(Discount::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(Discount::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(Discount::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(Discount::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(Discount::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(Discount::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getInfo() != null) {
+            queryWrapper.lambda().eq(Discount::getInfo, pageWrap.getModel().getInfo());
+        }
+        if (pageWrap.getModel().getName() != null) {
+            queryWrapper.lambda().eq(Discount::getName, pageWrap.getModel().getName());
+        }
+        if (pageWrap.getModel().getType() != null) {
+            queryWrapper.lambda().eq(Discount::getType, pageWrap.getModel().getType());
+        }
+        if (pageWrap.getModel().getLimitType() != null) {
+            queryWrapper.lambda().eq(Discount::getLimitType, pageWrap.getModel().getLimitType());
+        }
+        if (pageWrap.getModel().getLimitTime() != null) {
+            queryWrapper.lambda().eq(Discount::getLimitTime, pageWrap.getModel().getLimitTime());
+        }
+        if (pageWrap.getModel().getPrice() != null) {
+            queryWrapper.lambda().eq(Discount::getPrice, pageWrap.getModel().getPrice());
+        }
+        if (pageWrap.getModel().getLinePrice() != null) {
+            queryWrapper.lambda().eq(Discount::getLinePrice, pageWrap.getModel().getLinePrice());
+        }
+        if (pageWrap.getModel().getChannel() != null) {
+            queryWrapper.lambda().eq(Discount::getChannel, pageWrap.getModel().getChannel());
+        }
+        if (pageWrap.getModel().getImgurl() != null) {
+            queryWrapper.lambda().eq(Discount::getImgurl, pageWrap.getModel().getImgurl());
+        }
+        if (pageWrap.getModel().getDescs() != null) {
+            queryWrapper.lambda().eq(Discount::getDescs, pageWrap.getModel().getDescs());
+        }
+        if (pageWrap.getModel().getContent() != null) {
+            queryWrapper.lambda().eq(Discount::getContent, pageWrap.getModel().getContent());
+        }
+        if (pageWrap.getModel().getStartDate() != null) {
+            queryWrapper.lambda().ge(Discount::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()));
+            queryWrapper.lambda().le(Discount::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getStartDate()));
+        }
+        if (pageWrap.getModel().getEndDate() != null) {
+            queryWrapper.lambda().ge(Discount::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()));
+            queryWrapper.lambda().le(Discount::getEndDate, Utils.Date.getEnd(pageWrap.getModel().getEndDate()));
+        }
+        if (pageWrap.getModel().getUseType() != null) {
+            queryWrapper.lambda().eq(Discount::getUseType, pageWrap.getModel().getUseType());
+        }
+        if (pageWrap.getModel().getUseStartDate() != null) {
+            queryWrapper.lambda().ge(Discount::getUseStartDate, Utils.Date.getStart(pageWrap.getModel().getUseStartDate()));
+            queryWrapper.lambda().le(Discount::getUseStartDate, Utils.Date.getEnd(pageWrap.getModel().getUseStartDate()));
+        }
+        if (pageWrap.getModel().getUseEndDate() != null) {
+            queryWrapper.lambda().ge(Discount::getUseEndDate, Utils.Date.getStart(pageWrap.getModel().getUseEndDate()));
+            queryWrapper.lambda().le(Discount::getUseEndDate, Utils.Date.getEnd(pageWrap.getModel().getUseEndDate()));
+        }
+        if (pageWrap.getModel().getUseDays() != null) {
+            queryWrapper.lambda().eq(Discount::getUseDays, pageWrap.getModel().getUseDays());
+        }
+        if (pageWrap.getModel().getUseHoliday() != null) {
+            queryWrapper.lambda().eq(Discount::getUseHoliday, pageWrap.getModel().getUseHoliday());
+        }
+        if (pageWrap.getModel().getUseWorkday() != null) {
+            queryWrapper.lambda().eq(Discount::getUseWorkday, pageWrap.getModel().getUseWorkday());
+        }
+        if (pageWrap.getModel().getSaleLimit() != null) {
+            queryWrapper.lambda().eq(Discount::getSaleLimit, pageWrap.getModel().getSaleLimit());
+        }
+        if (pageWrap.getModel().getSaleDayLimit() != null) {
+            queryWrapper.lambda().eq(Discount::getSaleDayLimit, pageWrap.getModel().getSaleDayLimit());
+        }
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.lambda().eq(Discount::getStatus, pageWrap.getModel().getStatus());
+        }
+        if (pageWrap.getModel().getIsbike() != null) {
+            queryWrapper.lambda().eq(Discount::getIsbike, pageWrap.getModel().getIsbike());
+        }
+        if (pageWrap.getModel().getIselecbike() != null) {
+            queryWrapper.lambda().eq(Discount::getIselecbike, pageWrap.getModel().getIselecbike());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(discountMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(Discount discount) {
+        QueryWrapper<Discount> wrapper = new QueryWrapper<>(discount);
+        return discountMapper.selectCount(wrapper);
+    }
+}

--
Gitblit v1.9.3