diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppCouponController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppCouponController.java
new file mode 100644
index 0000000..209dc41
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/controller/mobile/AppCouponController.java
@@ -0,0 +1,9 @@
+package com.ycwl.basic.controller.mobile;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/api/mobile/controller/v1")
+public class AppCouponController {
+}
diff --git a/src/main/java/com/ycwl/basic/controller/pc/CouponController.java b/src/main/java/com/ycwl/basic/controller/pc/CouponController.java
new file mode 100644
index 0000000..4667a19
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/controller/pc/CouponController.java
@@ -0,0 +1,61 @@
+package com.ycwl.basic.controller.pc;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.ycwl.basic.model.pc.coupon.entity.CouponEntity;
+import com.ycwl.basic.model.pc.coupon.req.CouponQueryReq;
+import com.ycwl.basic.model.pc.coupon.resp.CouponRespVO;
+import com.ycwl.basic.service.pc.CouponService;
+import com.ycwl.basic.utils.ApiResponse;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/coupon/v1")
+@Api(tags = "优惠券管理")
+public class CouponController {
+    @Autowired
+    private CouponService couponService;
+
+    @ApiOperation("新增优惠券")
+    @PostMapping("/add")
+    public ApiResponse<Integer> add(@RequestBody CouponEntity coupon) {
+        return ApiResponse.success(couponService.add(coupon));
+    }
+
+    @ApiOperation("更新优惠券")
+    @PostMapping("/update/{id}")
+    public ApiResponse<Boolean> update(@PathVariable Integer id, @RequestBody CouponEntity coupon) {
+        coupon.setId(id);
+        return ApiResponse.success(couponService.update(coupon));
+    }
+
+    @PutMapping("/updateStatus/{id}")
+    public ApiResponse<Boolean> updateStatus(@PathVariable Integer id) {
+        return ApiResponse.success(couponService.updateStatus(id));
+    }
+
+    @ApiOperation("删除优惠券")
+    @DeleteMapping("/delete/{id}")
+    public ApiResponse<Boolean> delete(@PathVariable Integer id) {
+        return ApiResponse.success(couponService.delete(id));
+    }
+
+    @ApiOperation("根据ID查询优惠券")
+    @GetMapping("/get/{id}")
+    public ApiResponse<CouponEntity> getById(@PathVariable Integer id) {
+        return ApiResponse.success(couponService.getById(id));
+    }
+
+    @ApiOperation("分页查询优惠券列表")
+    @PostMapping("/page")
+    public ApiResponse<PageInfo<CouponRespVO>> list(@RequestBody CouponQueryReq couponQuery) {
+        PageHelper.startPage(couponQuery.getPageNum(), couponQuery.getPageSize());
+        List<CouponRespVO> list = couponService.list(couponQuery);
+        PageInfo<CouponRespVO> pageInfo = new PageInfo<>(list);
+        return ApiResponse.success(pageInfo);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ycwl/basic/mapper/CouponMapper.java b/src/main/java/com/ycwl/basic/mapper/CouponMapper.java
new file mode 100644
index 0000000..3e97b8c
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/mapper/CouponMapper.java
@@ -0,0 +1,15 @@
+package com.ycwl.basic.mapper;
+import com.ycwl.basic.model.pc.coupon.entity.CouponEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycwl.basic.model.pc.coupon.req.CouponQueryReq;
+import com.ycwl.basic.model.pc.coupon.resp.CouponRespVO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface CouponMapper extends BaseMapper<CouponEntity> {
+    List<CouponRespVO> selectByQuery(CouponQueryReq query);
+
+    int updateStatus(Integer id);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ycwl/basic/model/pc/coupon/entity/CouponEntity.java b/src/main/java/com/ycwl/basic/model/pc/coupon/entity/CouponEntity.java
new file mode 100644
index 0000000..cb2ae0b
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/model/pc/coupon/entity/CouponEntity.java
@@ -0,0 +1,39 @@
+package com.ycwl.basic.model.pc.coupon.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@TableName("coupon")
+public class CouponEntity {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    private Long scenicId;
+    
+    // 新增优惠券名称字段
+    private String name;
+    
+    /**
+     * 优惠券类别,0:普通优惠券;1:第一次推送;2:第二次;3:第三次
+     */
+    private Integer type;
+    /**
+     * 价格配置ID,逗号分隔字符串
+     */
+    private String configIds;
+    /**
+     * 0降价,1打折
+     */
+    private Integer discountType;
+    private BigDecimal discountPrice;
+    /**
+     * 状态:0不开启;1开启
+     */
+    private Integer status;
+    private Date createAt;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ycwl/basic/model/pc/coupon/req/CouponQueryReq.java b/src/main/java/com/ycwl/basic/model/pc/coupon/req/CouponQueryReq.java
new file mode 100644
index 0000000..94b1959
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/model/pc/coupon/req/CouponQueryReq.java
@@ -0,0 +1,33 @@
+package com.ycwl.basic.model.pc.coupon.req;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.ycwl.basic.model.common.BaseQueryParameterReq;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel("优惠券查询请求参数")
+public class CouponQueryReq extends BaseQueryParameterReq {
+    @ApiModelProperty("景区ID")
+    private Long scenicId;
+    private String name;
+
+    @ApiModelProperty("优惠券类型:0普通/1首次推送/2二次/3三次")
+    private Integer type;
+    
+    @ApiModelProperty("折扣类型:0降价/1打折")
+    private Integer discountType;
+    
+    @ApiModelProperty("状态:0关闭/1开启")
+    private Integer status;
+    
+    @ApiModelProperty("创建时间起始")
+    private Date createAtStart;
+    
+    @ApiModelProperty("创建时间结束")
+    private Date createAtEnd;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ycwl/basic/model/pc/coupon/resp/CouponRespVO.java b/src/main/java/com/ycwl/basic/model/pc/coupon/resp/CouponRespVO.java
new file mode 100644
index 0000000..3f537ff
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/model/pc/coupon/resp/CouponRespVO.java
@@ -0,0 +1,34 @@
+package com.ycwl.basic.model.pc.coupon.resp;
+
+import lombok.Data;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class CouponRespVO {
+    private Integer id;
+    private Long scenicId;
+    private String scenicName;
+    
+    // 新增优惠券名称字段
+    private String name;
+    
+    /**
+     * 优惠券类别,0:普通优惠券;1:第一次推送;2:第二次;3:第三次
+     */
+    private Integer type;
+    /**
+     * 价格配置ID,逗号分隔字符串
+     */
+    private String configIds;
+    /**
+     * 0降价,1打折
+     */
+    private Integer discountType;
+    private BigDecimal discountPrice;
+    /**
+     * 状态:0不开启;1开启
+     */
+    private Integer status;
+    private Date createAt;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/CouponServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/CouponServiceImpl.java
new file mode 100644
index 0000000..e86c13f
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/service/impl/pc/CouponServiceImpl.java
@@ -0,0 +1,49 @@
+package com.ycwl.basic.service.impl.pc;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycwl.basic.mapper.CouponMapper;
+import com.ycwl.basic.model.pc.coupon.entity.CouponEntity;
+import com.ycwl.basic.model.pc.coupon.req.CouponQueryReq;
+import com.ycwl.basic.model.pc.coupon.resp.CouponRespVO;
+import com.ycwl.basic.service.pc.CouponService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class CouponServiceImpl extends ServiceImpl<CouponMapper, CouponEntity> implements CouponService {
+
+    @Autowired
+    private CouponMapper couponMapper;
+
+    @Override
+    public Integer add(CouponEntity coupon) {
+        return couponMapper.insert(coupon);
+    }
+
+    @Override
+    public Boolean update(CouponEntity coupon) {
+        return couponMapper.updateById(coupon) > 0;
+    }
+
+    @Override
+    public Boolean delete(Integer id) {
+        return removeById(id);
+    }
+
+    @Override
+    public CouponEntity getById(Integer id) {
+        return couponMapper.selectById(id);
+    }
+
+    @Override
+    public List<CouponRespVO> list(CouponQueryReq query) {
+        List<CouponRespVO> list = couponMapper.selectByQuery(query);
+        return list;
+    }
+
+    @Override
+    public Boolean updateStatus(Integer id) {
+        return couponMapper.updateStatus(id) > 0;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ycwl/basic/service/pc/CouponService.java b/src/main/java/com/ycwl/basic/service/pc/CouponService.java
new file mode 100644
index 0000000..53ae4f7
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/service/pc/CouponService.java
@@ -0,0 +1,17 @@
+package com.ycwl.basic.service.pc;
+
+import com.ycwl.basic.model.pc.coupon.entity.CouponEntity;
+import com.ycwl.basic.model.pc.coupon.req.CouponQueryReq;
+import com.ycwl.basic.model.pc.coupon.resp.CouponRespVO;
+
+import java.util.List;
+
+public interface CouponService {
+    Integer add(CouponEntity coupon);
+    Boolean update(CouponEntity coupon);
+    Boolean delete(Integer id);
+    CouponEntity getById(Integer id);
+    List<CouponRespVO> list(CouponQueryReq query);
+
+    Boolean updateStatus(Integer id);
+}
\ No newline at end of file
diff --git a/src/main/resources/mapper/CouponMapper.xml b/src/main/resources/mapper/CouponMapper.xml
new file mode 100644
index 0000000..288e926
--- /dev/null
+++ b/src/main/resources/mapper/CouponMapper.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ycwl.basic.mapper.CouponMapper">
+    <update id="updateStatus">
+        UPDATE coupon
+        SET status = IF(status = 1, 0, 1)
+        WHERE id = #{id}
+    </update>
+    <select id="selectByQuery" resultType="com.ycwl.basic.model.pc.coupon.resp.CouponRespVO">
+        SELECT
+        c.id, scenic_id AS scenicId, s.name as scenicName,
+        c.name AS name,
+        config_ids AS configIds, discount_price AS discountPrice,
+        type, discount_type AS discountType,
+        c.status, c.create_at
+        FROM coupon c
+        LEFT JOIN scenic s ON c.scenic_id = s.id
+        <where>
+            <if test="scenicId != null">AND scenic_id = #{scenicId}</if>
+            <if test="name != null and name != ''">AND c.name = concat('%',#{name},'%')</if>
+            <if test="type != null">AND type = #{type}</if>
+            <if test="discountType != null">AND discount_type = #{discountType}</if>
+            <if test="status != null">AND c.status = #{status}</if>
+            <if test="createAtStart != null">AND create_time >= #{createAtStart}</if>
+            <if test="createAtEnd != null">AND create_time &lt;= #{createAtEnd}
+            </if>
+        </where>
+        ORDER BY create_time DESC
+    </select>
+</mapper>
\ No newline at end of file