Эх сурвалжийг харах

平台优惠券相关接口

ssk 3 сар өмнө
parent
commit
3643d72317

+ 1 - 1
alien-entity/src/main/java/shop/alien/entity/store/LifeDiscountCoupon.java

@@ -77,7 +77,7 @@ public class LifeDiscountCoupon extends Model<LifeDiscountCoupon> {
     @TableField("minimum_spending_amount")
     private BigDecimal minimumSpendingAmount;
 
-    @ApiModelProperty(value = "类型   1-优惠券  2-红包")
+    @ApiModelProperty(value = "类型   1-优惠券  2-红包 3-平台优惠券")
     @TableField("type")
     private Integer type;
 

+ 1 - 1
alien-entity/src/main/java/shop/alien/entity/store/dto/LifeDiscountCouponDto.java

@@ -66,7 +66,7 @@ public class LifeDiscountCouponDto {
     @ApiModelProperty(value = "最低消费")
     private BigDecimal minimumSpendingAmount;
 
-    @ApiModelProperty(value = "类型   1-优惠券  2-红包")
+    @ApiModelProperty(value = "类型   1-优惠券  2-红包 3-平台优惠券")
     private Integer type;
 
     @ApiModelProperty(value = "收藏可领(0:否,1:是)")

+ 21 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeDiscountCouponPlatformVo.java

@@ -0,0 +1,21 @@
+package shop.alien.entity.store.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import shop.alien.entity.store.LifeDiscountCoupon;
+
+/**
+ * 平台优惠券Vo
+ *
+ * @author ssk
+ * @version 1.0
+ * @date 2025/9/12 9:00
+ */
+@Data
+public class LifeDiscountCouponPlatformVo extends LifeDiscountCoupon {
+
+    @ApiModelProperty(value = "商铺名称")
+    @TableField("store_name")
+    private String storeName;
+}

+ 32 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeDiscountCouponUserWebVo.java

@@ -0,0 +1,32 @@
+package shop.alien.entity.store.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import shop.alien.entity.store.LifeDiscountCouponUser;
+
+/**
+ * web端查询发放记录
+ *
+ * @author ssk
+ * @version 1.0
+ * @date 2025/9/15 10:42
+ */
+@JsonInclude
+@Data
+public class LifeDiscountCouponUserWebVo extends LifeDiscountCouponUser {
+
+    @ApiModelProperty(value = "用户姓名")
+    @TableField("user_name")
+    private String userName;
+
+    @ApiModelProperty(value = "真实姓名")
+    @TableField("real_name")
+    private String realName;
+
+    @ApiModelProperty(value = "手机号")
+    @TableField("user_phone")
+    private String userPhone;
+
+}

+ 25 - 0
alien-entity/src/main/java/shop/alien/mapper/LifeDiscountCouponMapper.java

@@ -1,7 +1,13 @@
 package shop.alien.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import shop.alien.entity.store.LifeDiscountCoupon;
+import shop.alien.entity.store.vo.LifeDiscountCouponPlatformVo;
 
 /**
  * <p>
@@ -13,4 +19,23 @@ import shop.alien.entity.store.LifeDiscountCoupon;
  */
 public interface LifeDiscountCouponMapper extends BaseMapper<LifeDiscountCoupon> {
 
+    /**
+     * 分页查询优惠券关联店铺
+     *
+     * @param iPage        分页
+     * @param queryWrapper 查询条件
+     * @return IPage<LifeDiscountCouponVo>
+     */
+    @Select("select a.*, b.store_name  from life_discount_coupon a left join store_info b on a.store_id = b.id ${ew.customSqlSegment}")
+    IPage<LifeDiscountCouponPlatformVo> selectPageList(IPage<LifeDiscountCouponPlatformVo> iPage, @Param(Constants.WRAPPER) QueryWrapper<LifeDiscountCouponPlatformVo> queryWrapper);
+
+    /**
+     * 查询平台优惠券详情
+     *
+     * @param id 柱间, 妈的就叫这个吧! 哈西辣妈!
+     * @return LifeDiscountCouponPlatformVo
+     */
+    @Select("select a.*, b.store_name  from life_discount_coupon a left join store_info b on a.store_id = b.id where a.store_id= #{id}")
+    LifeDiscountCouponPlatformVo getOnePlatformCoupon(@Param("id") Integer id);
+
 }

+ 16 - 0
alien-entity/src/main/java/shop/alien/mapper/LifeDiscountCouponUserMapper.java

@@ -1,7 +1,13 @@
 package shop.alien.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import shop.alien.entity.store.LifeDiscountCouponUser;
+import shop.alien.entity.store.vo.LifeDiscountCouponUserWebVo;
 
 /**
  * <p>
@@ -13,4 +19,14 @@ import shop.alien.entity.store.LifeDiscountCouponUser;
  */
 public interface LifeDiscountCouponUserMapper extends BaseMapper<LifeDiscountCouponUser> {
 
+    /**
+     * 分页查询已发放的优惠券记录
+     *
+     * @param iPage        分页
+     * @param queryWrapper 查询条件
+     * @return IPage<LifeDiscountCouponVo>
+     */
+    @Select("select a.*, b.user_name, b.real_name, b.user_phone from life_discount_coupon_user a left join life_user b on a.user_id = b.id ${ew.customSqlSegment}")
+    IPage<LifeDiscountCouponUserWebVo> selectPageList(IPage<LifeDiscountCouponUserWebVo> iPage, @Param(Constants.WRAPPER) QueryWrapper<LifeDiscountCouponUserWebVo> queryWrapper);
+
 }

+ 126 - 14
alien-store/src/main/java/shop/alien/store/controller/LifeDiscountCouponController.java

@@ -6,10 +6,12 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 import shop.alien.entity.result.R;
+import shop.alien.entity.store.LifeDiscountCoupon;
 import shop.alien.entity.store.UserLoginInfo;
 import shop.alien.entity.store.dto.LifeDiscountCouponDto;
 import shop.alien.entity.store.dto.LifeDiscountCouponUserDto;
 import shop.alien.entity.store.vo.LifeCouponStatusVo;
+import shop.alien.entity.store.vo.LifeDiscountCouponUserWebVo;
 import shop.alien.entity.store.vo.LifeDiscountCouponVo;
 import shop.alien.store.service.LifeDiscountCouponService;
 import shop.alien.store.service.LifeDiscountCouponUserService;
@@ -41,7 +43,7 @@ public class LifeDiscountCouponController {
     private final LifeDiscountCouponUserService lifeDiscountCouponUserService;
 
     @ApiOperation("发布优惠券")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 1)
     @PostMapping("/addDiscountCoupon")
     public R<Boolean> addDiscountCoupon(@ApiIgnore @TokenInfo UserLoginInfo userLoginInfo, @RequestBody LifeDiscountCouponDto lifeDiscountCouponDto) {
         log.info("LifeDiscountCouponController.addDiscountCoupon?lifeDiscountCoupon={}", lifeDiscountCouponDto.toString());
@@ -75,7 +77,7 @@ public class LifeDiscountCouponController {
     }
 
     @ApiOperation("删除优惠券信息")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 3)
     @DeleteMapping("/deleteDiscountCoupon/{id}")
     public R<Boolean> deleteDiscountCoupon(@PathVariable("id") Integer id) {
         log.info("LifeDiscountCouponController.deleteDiscountCoupon?id={}", id);
@@ -92,7 +94,7 @@ public class LifeDiscountCouponController {
     }
 
     @ApiOperation("切换优惠券进行状态")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 4)
     @PutMapping("/cutDiscountCouponStatus")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "counponId", value = "优惠券id", dataType = "String", paramType = "query", required = true)
@@ -112,7 +114,7 @@ public class LifeDiscountCouponController {
     }
 
     @ApiOperation("获取该优惠券的明细信息")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 5)
     @GetMapping("/getCounponDetailById")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "counponId", value = "优惠券id", dataType = "String", paramType = "query", required = true)
@@ -130,7 +132,7 @@ public class LifeDiscountCouponController {
     }
 
     @ApiOperation("领取优惠券")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 6)
     @PostMapping("/receiveCoupon")
     public R<Boolean> receiveCoupon(@ApiIgnore @TokenInfo UserLoginInfo userLoginInfo, @RequestBody LifeDiscountCouponUserDto lifeDiscountCouponUserDto) {
         log.info("LifeDiscountCouponController.receiveCoupon?lifeDiscountCouponUserDto={}", lifeDiscountCouponUserDto.toString());
@@ -138,7 +140,7 @@ public class LifeDiscountCouponController {
     }
 
     @ApiOperation("获取该用户该店铺优惠券列表")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 7)
     @GetMapping("/getStoreUserCouponList")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "storeId", value = "商户id", dataType = "String", paramType = "query", required = true)
@@ -156,7 +158,7 @@ public class LifeDiscountCouponController {
     }
 
     @ApiOperation("获取该用户该店铺优惠券已领可用不可用列表")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 8)
     @GetMapping("/getStoreUserUsableCouponList")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "storeId", value = "商户id", dataType = "String", paramType = "query", required = true),
@@ -177,7 +179,7 @@ public class LifeDiscountCouponController {
 
 
     @ApiOperation("获取该用户所有的优惠券列表")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 9)
     @GetMapping("/getUserCouponList")
     @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "分页页数", dataType = "String", paramType = "query", required = true),
             @ApiImplicitParam(name = "size", value = "分页条数", dataType = "String", paramType = "query", required = true),
@@ -198,7 +200,7 @@ public class LifeDiscountCouponController {
     }
 
     @ApiOperation("获取该店铺所有优惠券(分页), 好友优惠券")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 10)
     @GetMapping("/getStoreAllCouponList")
     @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "分页页数", dataType = "String", paramType = "query", required = true),
             @ApiImplicitParam(name = "size", value = "分页条数", dataType = "String", paramType = "query", required = true),
@@ -215,7 +217,7 @@ public class LifeDiscountCouponController {
                                                                 @RequestParam(value = "couponName", required = false) String couponName,
                                                                 @RequestParam(value = "tab") String tab,
                                                                 @RequestParam(value = "couponsFromType", defaultValue = "1") int couponsFromType,
-                                                                @RequestParam(value = "couponStatus", defaultValue = "1",required = false) int couponStatus
+                                                                @RequestParam(value = "couponStatus", defaultValue = "1", required = false) int couponStatus
     ) {
         log.info("LifeDiscountCouponController.getStoreAllCouponList?storeId={}, couponName={}, tab={}, page={}, size={}, couponStatus={}", storeId, couponName, tab, page, size, couponStatus);
         try {
@@ -228,7 +230,7 @@ public class LifeDiscountCouponController {
     }
 
     @ApiOperation("获取该店铺所有优惠券(不分页)")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 11)
     @GetMapping("/getStoreAllCouponListPaginateNot")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "storeId", value = "商户id", dataType = "String", paramType = "query", required = true)
@@ -236,7 +238,7 @@ public class LifeDiscountCouponController {
     public R<List<LifeDiscountCouponVo>> getStoreAllCouponListPaginateNot(@ApiIgnore @TokenInfo UserLoginInfo userLoginInfo,
                                                                           @RequestParam(value = "storeId") String storeId,
                                                                           @RequestParam(value = "status", required = false) String status,
-                                                                          @RequestParam(value = "couponStatus", defaultValue = "1",required = false) int couponStatus
+                                                                          @RequestParam(value = "couponStatus", defaultValue = "1", required = false) int couponStatus
     ) {
         log.info("LifeDiscountCouponController.getStoreAllCouponListPaginateNot?storeId={},status={}, couponStatus={}", storeId, status, couponStatus);
         try {
@@ -249,7 +251,7 @@ public class LifeDiscountCouponController {
     }
 
     @ApiOperation("获取该优惠券使用规则")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 12)
     @GetMapping("/getCouponRule")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "couponId", value = "优惠券id", dataType = "String", paramType = "query", required = true),
@@ -267,7 +269,7 @@ public class LifeDiscountCouponController {
     }
 
     @ApiOperation("获取优惠券状态")
-    @ApiOperationSupport(order = 1)
+    @ApiOperationSupport(order = 13)
     @GetMapping("/getCouponStatus")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "couponId", value = "优惠券id", dataType = "String", paramType = "query", required = true),
@@ -283,4 +285,114 @@ public class LifeDiscountCouponController {
         }
     }
 
+    /**
+     * 获取平台优惠券列表
+     *
+     * @param pageNum    分页页码
+     * @param pageSize   分页大小
+     * @param name       优惠券名称
+     * @param createDate 创建时间
+     * @param couponType 类型:(1,优惠券 2,红包 3,平台优惠券)
+     * @return IPage<LifeDiscountCouponVo>
+     */
+    @ApiOperation("获取平台优惠券列表-web")
+    @ApiOperationSupport(order = 14)
+    @GetMapping("/getPlatformCouponList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", value = "店铺名称", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "店铺名称", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "name", value = "优惠券名称", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "createDate", value = "创建时间", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "couponType", value = "类型:(1:优惠券, 2:红包, 3:平台优惠券)", dataType = "String", paramType = "query")
+    })
+    public R<IPage<LifeDiscountCoupon>> getPlatformCouponList(@RequestParam(defaultValue = "1") Integer pageNum,
+                                                              @RequestParam(defaultValue = "10") Integer pageSize,
+                                                              @RequestParam(value = "name") String name,
+                                                              @RequestParam(value = "createDate") String createDate,
+                                                              @RequestParam(value = "couponType", defaultValue = "3") Integer couponType) {
+        return R.data(lifeDiscountCouponService.getPlatformCouponList(pageNum, pageSize, name, createDate, couponType));
+    }
+
+    @ApiOperation("新增平台优惠券-web")
+    @ApiOperationSupport(order = 15)
+    @PostMapping("/addPlatformCoupon")
+    private R<Boolean> addPlatformCoupon(@RequestBody LifeDiscountCoupon lifeDiscountCoupon) {
+        return R.status(lifeDiscountCouponService.addPlatformCoupon(lifeDiscountCoupon));
+    }
+
+    @ApiOperation("查询平台优惠券详情-web")
+    @ApiOperationSupport(order = 16)
+    @GetMapping("/getOnePlatformCoupon")
+    @ApiImplicitParam(name = "id", value = "主键", dataType = "Integer", paramType = "query", required = true)
+    private R<LifeDiscountCoupon> getOnePlatformCoupon(@RequestParam(value = "id") Integer id) {
+        return R.data(lifeDiscountCouponService.getOnePlatformCoupon(id));
+    }
+
+    /**
+     * 发放平台优惠券
+     *
+     * @param userIds  用户主键List
+     * @param couponId 优惠券id
+     * @return boolean
+     */
+    @ApiOperation("发放平台优惠券-web")
+    @ApiOperationSupport(order = 17)
+    @GetMapping("/issuePlatformCoupon")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "userIds", value = "用户主键List", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "couponId", value = "优惠券id", dataType = "Integer", paramType = "query", required = true)
+    })
+    private R<Boolean> issuePlatformCoupon(@RequestParam(value = "userIds") List<Integer> userIds, @RequestParam(value = "couponId") Integer couponId) {
+        return R.status(lifeDiscountCouponService.issuePlatformCoupon(userIds, couponId));
+    }
+
+    /**
+     * 收回平台优惠券
+     *
+     * @param couponId 优惠券id
+     * @return boolean
+     */
+    @ApiOperation("收回平台优惠券-web")
+    @ApiOperationSupport(order = 18)
+    @GetMapping("/recoverPlatformCoupon")
+    @ApiImplicitParam(name = "couponId", value = "优惠券id", dataType = "Integer", paramType = "query", required = true)
+    private R<Boolean> recoverPlatformCoupon(@RequestParam(value = "couponId") Integer couponId) {
+        return R.status(lifeDiscountCouponService.recoverPlatformCoupon(couponId));
+    }
+
+    /**
+     * 删除平台优惠券
+     *
+     * @param couponId 优惠券id
+     * @return boolean
+     */
+    @ApiOperation("删除平台优惠券-web")
+    @ApiOperationSupport(order = 19)
+    @GetMapping("/deletePlatformCoupon")
+    @ApiImplicitParam(name = "couponId", value = "优惠券id", dataType = "Integer", paramType = "query", required = true)
+    private R<Boolean> deletePlatformCoupon(@RequestParam(value = "couponId") Integer couponId) {
+        if (lifeDiscountCouponService.deletePlatformCoupon(couponId)) {
+            return R.success("删除成功");
+        }
+        return R.fail("删除失败, 该券已发放, 请先收回");
+    }
+
+    @ApiOperation("分页查询该券发放记录-web")
+    @ApiOperationSupport(order = 20)
+    @GetMapping("/getPlatformCouponLogList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", value = "店铺名称", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "店铺名称", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "userName", value = "用户名", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "couponId", value = "优惠券id", dataType = "String", paramType = "query")
+    })
+    public R<IPage<LifeDiscountCouponUserWebVo>> getPlatformCouponLogList(@RequestParam(defaultValue = "1") Integer pageNum,
+                                                                          @RequestParam(defaultValue = "10") Integer pageSize,
+                                                                          @RequestParam(value = "userName") String userName,
+                                                                          @RequestParam(value = "phone") String phone,
+                                                                          @RequestParam(value = "couponId") Integer couponId) {
+        return R.data(lifeDiscountCouponService.getPlatformCouponLogList(pageNum, pageSize, userName, phone, couponId));
+    }
+
 }

+ 82 - 12
alien-store/src/main/java/shop/alien/store/service/LifeDiscountCouponService.java

@@ -2,10 +2,14 @@ package shop.alien.store.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 import shop.alien.entity.store.LifeDiscountCoupon;
 import shop.alien.entity.store.UserLoginInfo;
 import shop.alien.entity.store.dto.LifeDiscountCouponDto;
 import shop.alien.entity.store.vo.LifeCouponStatusVo;
+import shop.alien.entity.store.vo.LifeDiscountCouponPlatformVo;
+import shop.alien.entity.store.vo.LifeDiscountCouponUserWebVo;
 import shop.alien.entity.store.vo.LifeDiscountCouponVo;
 
 import java.math.BigDecimal;
@@ -25,60 +29,126 @@ public interface LifeDiscountCouponService extends IService<LifeDiscountCoupon>
     /**
      * 发布优惠券
      */
-    public boolean addDiscountCoupon(LifeDiscountCouponDto lifeDiscountCouponDto);
+    boolean addDiscountCoupon(LifeDiscountCouponDto lifeDiscountCouponDto);
 
     /**
      * 修改优惠券
      */
-    public boolean editDiscountCoupon(LifeDiscountCouponDto lifeDiscountCouponDto);
+    boolean editDiscountCoupon(LifeDiscountCouponDto lifeDiscountCouponDto);
 
     /**
      * 删除优惠券
      */
-    public boolean deleteDiscountCoupon(Integer id);
+    boolean deleteDiscountCoupon(Integer id);
 
     /**
      * 切换优惠券进行状态
      */
-    public boolean cutDiscountCouponStatus(String counponId);
+    boolean cutDiscountCouponStatus(String counponId);
 
     /**
      * 获取该优惠券的明细信息
      */
-    public LifeDiscountCouponVo getCounponDetailById(String counponId, UserLoginInfo userLoginInfo);
+    LifeDiscountCouponVo getCounponDetailById(String counponId, UserLoginInfo userLoginInfo);
 
     /**
      * 获取该用户该店铺优惠券列表
      */
-    public List<LifeDiscountCouponVo> getStoreUserCouponList(String storeId, UserLoginInfo userLoginInfo);
+    List<LifeDiscountCouponVo> getStoreUserCouponList(String storeId, UserLoginInfo userLoginInfo);
 
     /**
      * 获取该用户该店铺优惠券列表
      */
-    public Map getStoreUserUsableCouponList(String storeId, UserLoginInfo userLoginInfo, BigDecimal amount);
+    Map getStoreUserUsableCouponList(String storeId, UserLoginInfo userLoginInfo, BigDecimal amount);
 
     /**
      * 获取该用户优惠券列表
      */
-    public List<LifeDiscountCouponVo> getUserCouponList(UserLoginInfo userLoginInfo, int page, int size, String tabType);
+    List<LifeDiscountCouponVo> getUserCouponList(UserLoginInfo userLoginInfo, int page, int size, String tabType);
 
     /**
      * 获取所有优惠券列表(分页)
      */
-    public IPage<LifeDiscountCouponVo> getStoreAllCouponList(String storeId, UserLoginInfo userLoginInfo, int page, int size, String couponName, String tab, int couponsFromType, int couponStatus);
+    IPage<LifeDiscountCouponVo> getStoreAllCouponList(String storeId, UserLoginInfo userLoginInfo, int page, int size, String couponName, String tab, int couponsFromType, int couponStatus);
 
     /**
      * 获取所有优惠券列表(不分页)
      */
-    public List<LifeDiscountCouponVo> getStoreAllCouponListPaginateNot(String status, String storeId, UserLoginInfo userLoginInfo, int couponStatus);
+    List<LifeDiscountCouponVo> getStoreAllCouponListPaginateNot(String status, String storeId, UserLoginInfo userLoginInfo, int couponStatus);
 
     /**
      * 获取优惠券规则
      */
-    public String getCouponRule(String couponId, UserLoginInfo userLoginInfo);
+    String getCouponRule(String couponId, UserLoginInfo userLoginInfo);
 
     /**
      * 获取优惠券状态
      */
-    public LifeCouponStatusVo getCouponStatus(String couponId);
+    LifeCouponStatusVo getCouponStatus(String couponId);
+
+    /**
+     * 获取平台优惠券列表
+     *
+     * @param pageNum    分页页码
+     * @param pageSize   分页大小
+     * @param name       优惠券名称
+     * @param createDate 创建时间
+     * @param couponType 类型:(1:优惠券, 2:红包, 3:平台优惠券)
+     * @return IPage<LifeDiscountCouponPlatformVo>
+     */
+    IPage<LifeDiscountCoupon> getPlatformCouponList(Integer pageNum, Integer pageSize, String name, String createDate, Integer couponType);
+
+    /**
+     * 新增平台优惠券
+     *
+     * @param lifeDiscountCoupon 优惠券实体
+     * @return boolean
+     */
+    boolean addPlatformCoupon(@RequestBody LifeDiscountCoupon lifeDiscountCoupon);
+
+
+    /**
+     * 查询平台优惠券详情
+     *
+     * @param id 柱间, 妈的就叫这个吧! 哈西辣妈!
+     * @return LifeDiscountCouponPlatformVo
+     */
+    LifeDiscountCoupon getOnePlatformCoupon(Integer id);
+
+    /**
+     * 发放平台优惠券
+     *
+     * @param userIds  用户主键List
+     * @param couponId 优惠券id
+     * @return boolean
+     */
+    boolean issuePlatformCoupon(List<Integer> userIds, Integer couponId);
+
+    /**
+     * 收回平台优惠券
+     *
+     * @param couponId 优惠券id
+     * @return boolean
+     */
+    boolean recoverPlatformCoupon(Integer couponId);
+
+    /**
+     * 删除平台优惠券
+     *
+     * @param couponId 优惠券id
+     * @return boolean
+     */
+    boolean deletePlatformCoupon(Integer couponId);
+
+    /**
+     * 分页查询该券发放记录
+     *
+     * @param pageNum  分页页码
+     * @param pageSize 分页大小
+     * @param userName 用户名
+     * @param phone    手机号
+     * @param couponId 优惠券id
+     * @return IPage<LifeDiscountCouponUserWebVo>
+     */
+    IPage<LifeDiscountCouponUserWebVo> getPlatformCouponLogList(Integer pageNum, Integer pageSize, String userName, String phone, Integer couponId);
 }

+ 169 - 123
alien-store/src/main/java/shop/alien/store/service/impl/LifeDiscountCouponServiceImpl.java

@@ -15,10 +15,12 @@ import shop.alien.entity.store.*;
 import shop.alien.entity.store.dto.LifeDiscountCouponDto;
 import shop.alien.entity.store.vo.LifeCouponStatusVo;
 import shop.alien.entity.store.vo.LifeDiscountCouponStoreFriendVo;
+import shop.alien.entity.store.vo.LifeDiscountCouponUserWebVo;
 import shop.alien.entity.store.vo.LifeDiscountCouponVo;
 import shop.alien.mapper.*;
 import shop.alien.store.service.LifeDiscountCouponQuantumRulesService;
 import shop.alien.store.service.LifeDiscountCouponService;
+import shop.alien.store.service.LifeDiscountCouponUserService;
 import shop.alien.util.common.constant.DiscountCouponEnum;
 
 import java.math.BigDecimal;
@@ -58,14 +60,13 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
 
     private final EssentialHolidayComparisonMapper essentialHolidayComparisonMapper;
 
-    private final LifeCouponMapper lifeCouponMapper;
-
     private final LifeDiscountCouponStoreFriendMapper lifeDiscountCouponStoreFriendMapper;
 
     private final StoreInfoMapper storeInfoMapper;
 
     private final LifeDiscountCouponQuantumRulesService lifeDiscountCouponQuantumRulesService;
 
+    private final LifeDiscountCouponUserService lifeDiscountCouponUserService;
 
     @Override
     public boolean addDiscountCoupon(LifeDiscountCouponDto lifeDiscountCouponDto) {
@@ -92,14 +93,12 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
 
             // 设置有效期
             String specifiedDay = lifeDiscountCoupon.getSpecifiedDay();
-            if(!StringUtils.isEmpty(specifiedDay)){
+            if (!StringUtils.isEmpty(specifiedDay)) {
                 int sDay = Integer.parseInt(specifiedDay);
-                if(sDay > 0 && lifeDiscountCouponDto.getEndGetDate() != null){
+                if (sDay > 0 && lifeDiscountCouponDto.getEndGetDate() != null) {
                     Date endGetDate = Date.from(lifeDiscountCouponDto.getEndGetDate().atStartOfDay(ZoneId.systemDefault()).toInstant());
                     Date validDate = addDaysToDateJava8(endGetDate, sDay);
-                    LocalDate validDateLocalDate = validDate.toInstant()
-                            .atZone(ZoneId.systemDefault())
-                            .toLocalDate();
+                    LocalDate validDateLocalDate = validDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
                     lifeDiscountCoupon.setValidDate(validDateLocalDate);
                 }
             }
@@ -109,7 +108,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
             LifeDiscountCouponUnavailableRules lifeDiscountCouponUnavailableRules = new LifeDiscountCouponUnavailableRules();
             lifeDiscountCouponUnavailableRules.setDiscountCouponId(lifeDiscountCoupon.getId());
             lifeDiscountCouponUnavailableRules.setUnavailableRuleType(DiscountCouponEnum.WEEKDAY_UNAVAILABLE.getValue());
-            if(CollectionUtils.isNotEmpty(lifeDiscountCouponDto.getWeeklyDisabledList())) {
+            if (CollectionUtils.isNotEmpty(lifeDiscountCouponDto.getWeeklyDisabledList())) {
                 lifeDiscountCouponDto.getWeeklyDisabledList().forEach(weeklyDisabled -> {
                     lifeDiscountCouponUnavailableRules.setUnavailableRuleValue(weeklyDisabled);
                     lifeDiscountCouponUnavailableRulesMapper.insert(lifeDiscountCouponUnavailableRules);
@@ -118,7 +117,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
 
             //节假日规则保存
             lifeDiscountCouponUnavailableRules.setUnavailableRuleType(DiscountCouponEnum.HOLIDAY_UNAVAILABLE.getValue());
-            if(CollectionUtils.isNotEmpty(lifeDiscountCouponDto.getHolidayDisabledList())){
+            if (CollectionUtils.isNotEmpty(lifeDiscountCouponDto.getHolidayDisabledList())) {
                 lifeDiscountCouponDto.getHolidayDisabledList().forEach(holidayDisabled -> {
                     lifeDiscountCouponUnavailableRules.setUnavailableRuleValue(holidayDisabled);
                     lifeDiscountCouponUnavailableRulesMapper.insert(lifeDiscountCouponUnavailableRules);
@@ -129,25 +128,25 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
             lifeDiscountCouponUnavailableRules.setUnavailableRuleType(DiscountCouponEnum.CLAIM_RULE.getValue());
             String claimRule = lifeDiscountCouponDto.getClaimRule();
             //领取规则为自定义时,获取自定义数量
-            if (claimRule != null && claimRule.equals(DiscountCouponEnum.CUSTOMIZE.getValue())){
+            if (claimRule != null && claimRule.equals(DiscountCouponEnum.CUSTOMIZE.getValue())) {
                 lifeDiscountCouponUnavailableRules.setCustomizeValue(lifeDiscountCouponDto.getClaimRuleCustomizeValue());
             }
             lifeDiscountCouponUnavailableRules.setUnavailableRuleValue(lifeDiscountCouponDto.getClaimRule());
             lifeDiscountCouponUnavailableRulesMapper.insert(lifeDiscountCouponUnavailableRules);
 
             //指定时间段可用规则
-            List<LifeDiscountCouponQuantumRules> availableTimeQuantumList =  lifeDiscountCouponDto.getAvailableTimeQuantum();
-            if(CollectionUtils.isNotEmpty(availableTimeQuantumList)){
-                availableTimeQuantumList.forEach(availableTimeQuantum->{
+            List<LifeDiscountCouponQuantumRules> availableTimeQuantumList = lifeDiscountCouponDto.getAvailableTimeQuantum();
+            if (CollectionUtils.isNotEmpty(availableTimeQuantumList)) {
+                availableTimeQuantumList.forEach(availableTimeQuantum -> {
                     availableTimeQuantum.setDiscountCouponId(lifeDiscountCoupon.getId());
                 });
                 lifeDiscountCouponQuantumRulesService.saveBatch(availableTimeQuantumList);
             }
 
             //自定义时间段不可用规则
-            List<LifeDiscountCouponQuantumRules> customizeUnavailableTimeQuantumList =  lifeDiscountCouponDto.getCustomizeUnavailableTimeQuantum();
-            if(CollectionUtils.isNotEmpty(customizeUnavailableTimeQuantumList)) {
-                customizeUnavailableTimeQuantumList.forEach(customizeUnavailableTimeQuantum->{
+            List<LifeDiscountCouponQuantumRules> customizeUnavailableTimeQuantumList = lifeDiscountCouponDto.getCustomizeUnavailableTimeQuantum();
+            if (CollectionUtils.isNotEmpty(customizeUnavailableTimeQuantumList)) {
+                customizeUnavailableTimeQuantumList.forEach(customizeUnavailableTimeQuantum -> {
                     customizeUnavailableTimeQuantum.setDiscountCouponId(lifeDiscountCoupon.getId());
                 });
                 lifeDiscountCouponQuantumRulesService.saveBatch(customizeUnavailableTimeQuantumList);
@@ -187,14 +186,12 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
 
             // 设置有效期
             String specifiedDay = lifeDiscountCouponDto.getSpecifiedDay();
-            if(!StringUtils.isEmpty(specifiedDay)){
+            if (!StringUtils.isEmpty(specifiedDay)) {
                 int sDay = Integer.parseInt(specifiedDay);
-                if(sDay > 0 && lifeDiscountCouponDto.getEndGetDate() != null) {
+                if (sDay > 0 && lifeDiscountCouponDto.getEndGetDate() != null) {
                     Date endGetDate = Date.from(lifeDiscountCouponDto.getEndGetDate().atStartOfDay(ZoneId.systemDefault()).toInstant());
                     Date validDate = addDaysToDateJava8(endGetDate, sDay);
-                    LocalDate validDateLocalDate = validDate.toInstant()
-                            .atZone(ZoneId.systemDefault())
-                            .toLocalDate();
+                    LocalDate validDateLocalDate = validDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
                     lifeDiscountCoupon.setValidDate(validDateLocalDate);
                 }
             }
@@ -210,7 +207,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
             LifeDiscountCouponUnavailableRules lifeDiscountCouponUnavailableRules = new LifeDiscountCouponUnavailableRules();
             lifeDiscountCouponUnavailableRules.setDiscountCouponId(lifeDiscountCoupon.getId());
             lifeDiscountCouponUnavailableRules.setUnavailableRuleType(DiscountCouponEnum.WEEKDAY_UNAVAILABLE.getValue());
-            if(CollectionUtils.isNotEmpty(lifeDiscountCouponDto.getWeeklyDisabledList())) {
+            if (CollectionUtils.isNotEmpty(lifeDiscountCouponDto.getWeeklyDisabledList())) {
                 lifeDiscountCouponDto.getWeeklyDisabledList().forEach(weeklyDisabled -> {
                     lifeDiscountCouponUnavailableRules.setUnavailableRuleValue(weeklyDisabled);
                     lifeDiscountCouponUnavailableRulesMapper.insert(lifeDiscountCouponUnavailableRules);
@@ -219,7 +216,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
 
             //节假日规则保存
             lifeDiscountCouponUnavailableRules.setUnavailableRuleType(DiscountCouponEnum.HOLIDAY_UNAVAILABLE.getValue());
-            if(CollectionUtils.isNotEmpty(lifeDiscountCouponDto.getHolidayDisabledList())){
+            if (CollectionUtils.isNotEmpty(lifeDiscountCouponDto.getHolidayDisabledList())) {
                 lifeDiscountCouponDto.getHolidayDisabledList().forEach(holidayDisabled -> {
                     lifeDiscountCouponUnavailableRules.setUnavailableRuleValue(holidayDisabled);
                     lifeDiscountCouponUnavailableRulesMapper.insert(lifeDiscountCouponUnavailableRules);
@@ -237,17 +234,17 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
             lifeDiscountCouponQuantumRulesMapper.delete(lifeDiscountCouponQuantumRulesLambdaQueryWrapper);
 
             // 保存指定时间段可用规则
-            List<LifeDiscountCouponQuantumRules> availableTimeQuantumList =  lifeDiscountCouponDto.getAvailableTimeQuantum();
-            if(CollectionUtils.isNotEmpty(availableTimeQuantumList)){
-                availableTimeQuantumList.forEach(availableTimeQuantum->{
+            List<LifeDiscountCouponQuantumRules> availableTimeQuantumList = lifeDiscountCouponDto.getAvailableTimeQuantum();
+            if (CollectionUtils.isNotEmpty(availableTimeQuantumList)) {
+                availableTimeQuantumList.forEach(availableTimeQuantum -> {
                     availableTimeQuantum.setDiscountCouponId(lifeDiscountCoupon.getId());
                 });
                 lifeDiscountCouponQuantumRulesService.saveBatch(availableTimeQuantumList);
             }
             // 保存自定义时间段不可用规则
-            List<LifeDiscountCouponQuantumRules> customizeUnavailableTimeQuantumList =  lifeDiscountCouponDto.getCustomizeUnavailableTimeQuantum();
-            if(CollectionUtils.isNotEmpty(customizeUnavailableTimeQuantumList)) {
-                customizeUnavailableTimeQuantumList.forEach(customizeUnavailableTimeQuantum->{
+            List<LifeDiscountCouponQuantumRules> customizeUnavailableTimeQuantumList = lifeDiscountCouponDto.getCustomizeUnavailableTimeQuantum();
+            if (CollectionUtils.isNotEmpty(customizeUnavailableTimeQuantumList)) {
+                customizeUnavailableTimeQuantumList.forEach(customizeUnavailableTimeQuantum -> {
                     customizeUnavailableTimeQuantum.setDiscountCouponId(lifeDiscountCoupon.getId());
                 });
                 lifeDiscountCouponQuantumRulesService.saveBatch(customizeUnavailableTimeQuantumList);
@@ -265,23 +262,21 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
         //删除优惠券表信息
         lifeDiscountCouponMapper.deleteById(id);
         //删除优惠券规则信息
-        lifeDiscountCouponUnavailableRulesMapper.delete(new LambdaQueryWrapper<LifeDiscountCouponUnavailableRules>()
-                .eq(LifeDiscountCouponUnavailableRules::getDiscountCouponId, id));
+        lifeDiscountCouponUnavailableRulesMapper.delete(new LambdaQueryWrapper<LifeDiscountCouponUnavailableRules>().eq(LifeDiscountCouponUnavailableRules::getDiscountCouponId, id));
         return true;
     }
 
     @Override
     public boolean cutDiscountCouponStatus(String counponId) {
         LifeDiscountCoupon lifeDiscountCoupon = lifeDiscountCouponMapper.selectById(counponId);
-        if(lifeDiscountCoupon.getGetStatus() == Integer.parseInt(DiscountCouponEnum.NO_GET.getValue())){
+        if (lifeDiscountCoupon.getGetStatus() == Integer.parseInt(DiscountCouponEnum.NO_GET.getValue())) {
             Date now = new Date();
             Instant instant = now.toInstant();
             ZoneId zoneId = ZoneId.systemDefault();
             LocalDate localNow = instant.atZone(zoneId).toLocalDate();
             lifeDiscountCoupon.setBeginGetDate(localNow);
         }
-        lifeDiscountCoupon.setGetStatus(lifeDiscountCoupon.getGetStatus() == Integer.parseInt(DiscountCouponEnum.NO_GET.getValue())
-                ? Integer.parseInt(DiscountCouponEnum.CAN_GET.getValue()) : Integer.parseInt(DiscountCouponEnum.NO_GET.getValue()));
+        lifeDiscountCoupon.setGetStatus(lifeDiscountCoupon.getGetStatus() == Integer.parseInt(DiscountCouponEnum.NO_GET.getValue()) ? Integer.parseInt(DiscountCouponEnum.CAN_GET.getValue()) : Integer.parseInt(DiscountCouponEnum.NO_GET.getValue()));
         lifeDiscountCouponMapper.updateById(lifeDiscountCoupon);
         return true;
     }
@@ -321,11 +316,11 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
         List<LifeDiscountCouponQuantumRules> lifeDiscountCouponQuantumRulesList = lifeDiscountCouponQuantumRulesMapper.selectList(quantumRulesLambdaQueryWrapper);
         List<LifeDiscountCouponQuantumRules> availableTimeQuantumList = new ArrayList<>();
         List<LifeDiscountCouponQuantumRules> customizeUnavailableTimeQuantumList = new ArrayList<>();
-        for(LifeDiscountCouponQuantumRules lifeDiscountCouponQuantumRules : lifeDiscountCouponQuantumRulesList) {
-            if(lifeDiscountCouponQuantumRules.getTimeQuantumType().equals(DiscountCouponEnum.AVAILABLE_TIME_QUANTUM.getValue())) {
+        for (LifeDiscountCouponQuantumRules lifeDiscountCouponQuantumRules : lifeDiscountCouponQuantumRulesList) {
+            if (lifeDiscountCouponQuantumRules.getTimeQuantumType().equals(DiscountCouponEnum.AVAILABLE_TIME_QUANTUM.getValue())) {
                 availableTimeQuantumList.add(lifeDiscountCouponQuantumRules);
             }
-            if(lifeDiscountCouponQuantumRules.getTimeQuantumType().equals(DiscountCouponEnum.UNAVAILABLE_TIME_QUANTUM.getValue())) {
+            if (lifeDiscountCouponQuantumRules.getTimeQuantumType().equals(DiscountCouponEnum.UNAVAILABLE_TIME_QUANTUM.getValue())) {
                 customizeUnavailableTimeQuantumList.add(lifeDiscountCouponQuantumRules);
             }
         }
@@ -350,13 +345,8 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
     public List<LifeDiscountCouponVo> getStoreUserCouponList(String storeId, UserLoginInfo userLoginInfo) {
         List<LifeDiscountCouponVo> lifeDiscountCouponVos = new ArrayList<>();
         //根据店铺id查询该店铺的优惠券,状态是开启领取的券
-        List<LifeDiscountCoupon> lifeDiscountCoupons = lifeDiscountCouponMapper.selectList(
-                new LambdaQueryWrapper<LifeDiscountCoupon>()
-                        .eq(LifeDiscountCoupon::getStoreId, storeId)
-                        .eq(LifeDiscountCoupon::getGetStatus, "1")
-                        .gt(LifeDiscountCoupon::getSingleQty, 0) //还有库存
-                        .ge(LifeDiscountCoupon::getEndGetDate, new Date())
-                        .orderByDesc(LifeDiscountCoupon::getCreatedTime));
+        List<LifeDiscountCoupon> lifeDiscountCoupons = lifeDiscountCouponMapper.selectList(new LambdaQueryWrapper<LifeDiscountCoupon>().eq(LifeDiscountCoupon::getStoreId, storeId).eq(LifeDiscountCoupon::getGetStatus, "1").gt(LifeDiscountCoupon::getSingleQty, 0) //还有库存
+                .ge(LifeDiscountCoupon::getEndGetDate, new Date()).orderByDesc(LifeDiscountCoupon::getCreatedTime));
         //根据优惠券列表查询该优惠券是否领取过
         for (LifeDiscountCoupon lifeDiscountCoupon : lifeDiscountCoupons) {
             LifeDiscountCouponVo lifeDiscountCouponVo = new LifeDiscountCouponVo();
@@ -414,13 +404,11 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
                     lifeDiscountCouponVo.setExpirationTime(lifeDiscountCouponUser.getExpirationTime());
                 }
             }
-            if(!StringUtils.isEmpty(specifiedDay)){
+            if (!StringUtils.isEmpty(specifiedDay)) {
                 int sDay = Integer.parseInt(specifiedDay);
-                if(sDay > 0 && receiveDay != null){
+                if (sDay > 0 && receiveDay != null) {
                     Date validDate = addDaysToDateJava8(receiveDay, sDay);
-                    LocalDate validDateLocalDate = validDate.toInstant()
-                            .atZone(ZoneId.systemDefault())
-                            .toLocalDate();
+                    LocalDate validDateLocalDate = validDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
                     lifeDiscountCouponVo.setValidDate(validDateLocalDate);
                 } else {
                     lifeDiscountCouponVo.setValidDate(null);
@@ -541,13 +529,11 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
             if (lifeDiscountCouponUnavailableRules.size() > 0) {
                 forbiddenRule += HOLIDAY_RULE_TITLE;
             }
-            List<String> holidCoupnDis = lifeDiscountCouponUnavailableRules.stream()
-                    .map(rule -> rule.getUnavailableRuleValue()).collect(Collectors.toList());
+            List<String> holidCoupnDis = lifeDiscountCouponUnavailableRules.stream().map(rule -> rule.getUnavailableRuleValue()).collect(Collectors.toList());
             forbiddenRule += String.join(", ", holidCoupnDis);
             for (LifeDiscountCouponUnavailableRules lifeDiscountCouponUnavailableRule : lifeDiscountCouponUnavailableRules) {
                 //如果当日为节假日,并且该券该节假日也禁用,则该券禁用
-                if (StringUtils.isEmpty(festivalName)
-                        && festivalName.equals(lifeDiscountCouponUnavailableRule.getUnavailableRuleValue())) {
+                if (StringUtils.isEmpty(festivalName) && festivalName.equals(lifeDiscountCouponUnavailableRule.getUnavailableRuleValue())) {
                     lifeDiscountCouponVo.setDisabledStatus(false);
                 }
             }
@@ -562,8 +548,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
             if (weekLifeDiscountCouponUnavailableRules.size() > 0) {
                 forbiddenRule += WEEK_RULE_TITLE;
             }
-            List<String> weekCoupnDis = weekLifeDiscountCouponUnavailableRules.stream()
-                    .map(rule -> rule.getUnavailableRuleValue()).collect(Collectors.toList());
+            List<String> weekCoupnDis = weekLifeDiscountCouponUnavailableRules.stream().map(rule -> rule.getUnavailableRuleValue()).collect(Collectors.toList());
             forbiddenRule += String.join(", ", weekCoupnDis);
             for (LifeDiscountCouponUnavailableRules lifeDiscountCouponUnavailableRule : lifeDiscountCouponUnavailableRules) {
                 //该券该周中日也禁用,则该券禁用
@@ -636,10 +621,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
         // 计算七日前的日期
         LocalDateTime sevenDaysAgo = localNow.minusDays(7);
         // 将七日前的时间设置为凌晨 0 点 0 分 0 秒 0 纳秒
-        LocalDateTime sevenDaysAgoMidnight = sevenDaysAgo.withHour(0)
-                .withMinute(0)
-                .withSecond(0)
-                .withNano(0);
+        LocalDateTime sevenDaysAgoMidnight = sevenDaysAgo.withHour(0).withMinute(0).withSecond(0).withNano(0);
         //判断分页类型
         if (tabType.equals(DiscountCouponEnum.ALL.getValue())) {
             //如果已过期 过期日期大于今天
@@ -687,8 +669,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
             return lifeDiscountCouponVos;
         }
         for (LifeDiscountCouponUser lifeDiscountCouponUser : lifeDiscountCouponUserIPage.getRecords()) {
-            LifeDiscountCoupon lifeDiscountCouponOne = lifeDiscountCoupons.stream().filter(lifeDiscountCoupon ->
-                    lifeDiscountCoupon.getId().equals(lifeDiscountCouponUser.getCouponId())).collect(Collectors.toList()).get(0);
+            LifeDiscountCoupon lifeDiscountCouponOne = lifeDiscountCoupons.stream().filter(lifeDiscountCoupon -> lifeDiscountCoupon.getId().equals(lifeDiscountCouponUser.getCouponId())).collect(Collectors.toList()).get(0);
             StoreInfo storeInfoOne = storeInfoList.stream().filter(storeInfo -> storeInfo.getId().toString().equals(lifeDiscountCouponOne.getStoreId())).collect(Collectors.toList()).get(0);
             LifeDiscountCouponVo lifeDiscountCouponVo = new LifeDiscountCouponVo();
             lifeDiscountCouponVo.setBusinessSection(storeInfoOne.getBusinessSection());
@@ -698,14 +679,12 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
             lifeDiscountCouponVo.setExpirationTime(lifeDiscountCouponUser.getExpirationTime());
             // 设置有效期
             String specifiedDay = lifeDiscountCouponOne.getSpecifiedDay();
-            if(!StringUtils.isEmpty(specifiedDay)){
+            if (!StringUtils.isEmpty(specifiedDay)) {
                 int sDay = Integer.parseInt(specifiedDay);
-                if(sDay > 0){
+                if (sDay > 0) {
                     Date receiveDay = lifeDiscountCouponUser.getReceiveTime();
                     Date validDate = addDaysToDateJava8(receiveDay, sDay);
-                    LocalDate validDateLocalDate = validDate.toInstant()
-                            .atZone(ZoneId.systemDefault())
-                            .toLocalDate();
+                    LocalDate validDateLocalDate = validDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
                     lifeDiscountCouponVo.setValidDate(validDateLocalDate);
                 }
             }
@@ -770,7 +749,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
                 Instant instant = now.toInstant();
                 ZoneId zoneId = ZoneId.systemDefault();
                 LocalDate localNow = instant.atZone(zoneId).toLocalDate();
-                if(!StringUtils.isEmpty(lifeDiscountCoupon.getBeginGetDate()) && !StringUtils.isEmpty(lifeDiscountCoupon.getEndGetDate())) {
+                if (!StringUtils.isEmpty(lifeDiscountCoupon.getBeginGetDate()) && !StringUtils.isEmpty(lifeDiscountCoupon.getEndGetDate())) {
                     int startResult = localNow.compareTo(lifeDiscountCoupon.getBeginGetDate());
                     int endResult = localNow.compareTo(lifeDiscountCoupon.getEndGetDate());
                     //如果当前时间小于开始时间
@@ -786,7 +765,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
                         lifeDiscountCouponVo.setStatus(Integer.parseInt(DiscountCouponEnum.UNDER_WAY.getValue()));
                     }
                 } else {
-                    if(lifeDiscountCoupon.getCouponStatus() == 0){
+                    if (lifeDiscountCoupon.getCouponStatus() == 0) {
                         //如果为草稿则状态为未开始
                         lifeDiscountCouponVo.setStatus(Integer.parseInt(DiscountCouponEnum.HAVE_NOT_STARTED.getValue()));
                     } else {
@@ -850,7 +829,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
                 Instant instant = now.toInstant();
                 ZoneId zoneId = ZoneId.systemDefault();
                 LocalDate localNow = instant.atZone(zoneId).toLocalDate();
-                if(!StringUtils.isEmpty(record.getBeginGetDate()) && !StringUtils.isEmpty(record.getEndGetDate())) {
+                if (!StringUtils.isEmpty(record.getBeginGetDate()) && !StringUtils.isEmpty(record.getEndGetDate())) {
                     int startResult = localNow.compareTo(record.getBeginGetDate());
                     int endResult = localNow.compareTo(record.getEndGetDate());
                     //如果当前时间小于开始时间
@@ -866,7 +845,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
                         record.setStatus(Integer.parseInt(DiscountCouponEnum.UNDER_WAY.getValue()));
                     }
                 } else {
-                    if(record.getCouponStatus() == 0){
+                    if (record.getCouponStatus() == 0) {
                         //如果为草稿则状态为未开始
                         record.setStatus(Integer.parseInt(DiscountCouponEnum.HAVE_NOT_STARTED.getValue()));
                     } else {
@@ -899,13 +878,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
     public List<LifeDiscountCouponVo> getStoreAllCouponListPaginateNot(String status, String storeId, UserLoginInfo userLoginInfo, int couponStatus) {
         List<LifeDiscountCouponVo> lifeDiscountCouponVos = new ArrayList<>();
         //根据店铺id查询该店铺的优惠券,状态是开启领取的券
-        List<LifeDiscountCoupon> lifeDiscountCoupons = lifeDiscountCouponMapper.selectList(
-                new LambdaQueryWrapper<LifeDiscountCoupon>()
-                        .eq(LifeDiscountCoupon::getStoreId, storeId)
-                        .eq(LifeDiscountCoupon::getCouponStatus, couponStatus)
-                        .ne(LifeDiscountCoupon::getSingleQty, 0)
-                        .orderByDesc(LifeDiscountCoupon::getCreatedTime)
-        );
+        List<LifeDiscountCoupon> lifeDiscountCoupons = lifeDiscountCouponMapper.selectList(new LambdaQueryWrapper<LifeDiscountCoupon>().eq(LifeDiscountCoupon::getStoreId, storeId).eq(LifeDiscountCoupon::getCouponStatus, couponStatus).ne(LifeDiscountCoupon::getSingleQty, 0).orderByDesc(LifeDiscountCoupon::getCreatedTime));
         for (LifeDiscountCoupon lifeDiscountCoupon : lifeDiscountCoupons) {
             LifeDiscountCouponVo lifeDiscountCouponVo = new LifeDiscountCouponVo();
             lifeDiscountCouponVo.setCouponId(lifeDiscountCoupon.getId());
@@ -916,7 +889,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
             Instant instant = now.toInstant();
             ZoneId zoneId = ZoneId.systemDefault();
             LocalDate localNow = instant.atZone(zoneId).toLocalDate();
-            if(!StringUtils.isEmpty(lifeDiscountCoupon.getBeginGetDate()) && !StringUtils.isEmpty(lifeDiscountCoupon.getEndGetDate())) {
+            if (!StringUtils.isEmpty(lifeDiscountCoupon.getBeginGetDate()) && !StringUtils.isEmpty(lifeDiscountCoupon.getEndGetDate())) {
                 int startResult = localNow.compareTo(lifeDiscountCoupon.getBeginGetDate());
                 int endResult = localNow.compareTo(lifeDiscountCoupon.getEndGetDate());
                 //如果当前时间小于开始时间
@@ -1016,13 +989,11 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
         if (lifeDiscountCouponUnavailableRules.size() > 0) {
             forbiddenRule += HOLIDAY_RULE_TITLE;
         }
-        List<String> holidCoupnDis = lifeDiscountCouponUnavailableRules.stream()
-                .map(rule -> rule.getUnavailableRuleValue()).collect(Collectors.toList());
+        List<String> holidCoupnDis = lifeDiscountCouponUnavailableRules.stream().map(rule -> rule.getUnavailableRuleValue()).collect(Collectors.toList());
         forbiddenRule += String.join(", ", holidCoupnDis);
         for (LifeDiscountCouponUnavailableRules lifeDiscountCouponUnavailableRule : lifeDiscountCouponUnavailableRules) {
             //如果当日为节假日,并且该券该节假日也禁用,则该券禁用
-            if (StringUtils.isEmpty(festivalName)
-                    && festivalName.equals(lifeDiscountCouponUnavailableRule.getUnavailableRuleValue())) {
+            if (StringUtils.isEmpty(festivalName) && festivalName.equals(lifeDiscountCouponUnavailableRule.getUnavailableRuleValue())) {
                 lifeDiscountCouponVo.setDisabledStatus(false);
             }
         }
@@ -1037,8 +1008,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
         if (weekLifeDiscountCouponUnavailableRules.size() > 0) {
             forbiddenRule += WEEK_RULE_TITLE;
         }
-        List<String> weekCoupnDis = weekLifeDiscountCouponUnavailableRules.stream()
-                .map(rule -> rule.getUnavailableRuleValue()).collect(Collectors.toList());
+        List<String> weekCoupnDis = weekLifeDiscountCouponUnavailableRules.stream().map(rule -> rule.getUnavailableRuleValue()).collect(Collectors.toList());
         forbiddenRule += String.join(", ", weekCoupnDis);
         for (LifeDiscountCouponUnavailableRules lifeDiscountCouponUnavailableRule : lifeDiscountCouponUnavailableRules) {
             //该券该周中日也禁用,则该券禁用
@@ -1076,7 +1046,7 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
                 lifeCouponStatusVo.setCouponId(couponId);
                 lifeCouponStatusVo.setSingleQty(lifeDiscountCoupon.getSingleQty());
             } else {
-                    // 可选:设置默认值或标记状态为无效
+                // 可选:设置默认值或标记状态为无效
                 lifeCouponStatusVo.setSingleQty(0); // 或其他默认逻辑
             }
             return lifeCouponStatusVo;
@@ -1086,43 +1056,119 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
         }
     }
 
-//    private static final String API_URL = "https://date.nager.at/api/v3/PublicHolidays/{year}/{countryCode}";
-//    private static final String COUNTRY_CODE = "CN";
-//    public static void get() throws Exception {
-//        String dateStr = "2025-01-29";
-//        LocalDate currentDate = LocalDate.parse(dateStr);
-//        System.out.println("转换后的 LocalDate: " + currentDate);
-//        int year = currentDate.getYear();
-//        RestTemplate restTemplate = new RestTemplate();
-//        ResponseEntity<Holiday[]> response = restTemplate.getForEntity(
-//                API_URL,
-//                Holiday[].class,
-//                year,
-//                COUNTRY_CODE
-//        );
-//        List<Holiday> holidays = Arrays.asList(response.getBody());
-//        for (Holiday holiday : holidays) {
-//            System.out.println(holiday.getDate() + ":" + holiday.getName());
-//            if (holiday.getDate().equals(currentDate.toString())) {
-//                System.out.println(currentDate + " 是 " + holiday.getName());
-////                return;
-//            }
-//        }
-//        System.out.println(currentDate + " 不是指定的节假日");
-//    }
-//    public static class Holiday {
-//        private String date;
-//        private String name;
-//        public String getDate() {
-//            return date;
-//        }
-//        public String getName() {
-//            return name;
-//        }
-//    }
-//
-//    public static void main(String[] args) throws Exception {
-//        get();
-//    }
+    /**
+     * 获取平台优惠券列表
+     *
+     * @param pageNum    分页页码
+     * @param pageSize   分页大小
+     * @param name       优惠券名称
+     * @param createDate 创建时间
+     * @param couponType 类型:(1:优惠券, 2:红包, 3:平台优惠券)
+     * @return IPage<LifeDiscountCoupon>
+     */
+    @Override
+    public IPage<LifeDiscountCoupon> getPlatformCouponList(Integer pageNum, Integer pageSize, String name, String createDate, Integer couponType) {
+        IPage<LifeDiscountCoupon> iPage = new Page<>(pageNum, pageSize);
+        return lifeDiscountCouponMapper.selectPage(iPage, new LambdaQueryWrapper<LifeDiscountCoupon>()
+                .eq(LifeDiscountCoupon::getType, 3)
+                .like(!StringUtils.isEmpty(name), LifeDiscountCoupon::getName, name)
+                .between(!StringUtils.isEmpty(createDate), LifeDiscountCoupon::getCreatedTime, createDate + " 00:00:00", createDate + " 23:59:59"));
+    }
+
+    /**
+     * 新增平台优惠券
+     *
+     * @param lifeDiscountCoupon 优惠券实体
+     * @return boolean
+     */
+    @Override
+    public boolean addPlatformCoupon(LifeDiscountCoupon lifeDiscountCoupon) {
+        lifeDiscountCoupon.setType(3);
+        lifeDiscountCoupon.setGetStatus(1);
+        return this.save(lifeDiscountCoupon);
+    }
+
+    /**
+     * 查询平台优惠券详情
+     *
+     * @param id 柱间, 妈的就叫这个吧! 哈西辣妈!
+     * @return LifeDiscountCoupon
+     */
+    @Override
+    public LifeDiscountCoupon getOnePlatformCoupon(Integer id) {
+        return this.getById(id);
+    }
+
+    /**
+     * 发放平台优惠券
+     *
+     * @param userIds  用户主键List
+     * @param couponId 优惠券id
+     * @return boolean
+     */
+    @Override
+    public boolean issuePlatformCoupon(List<Integer> userIds, Integer couponId) {
+        LifeDiscountCoupon lifeDiscountCoupon = this.getById(couponId);
+        List<LifeDiscountCouponUser> lifeDiscountCouponUsers = new ArrayList<>();
+        for (Integer userId : userIds) {
+            LifeDiscountCouponUser lifeDiscountCouponUser = new LifeDiscountCouponUser();
+            lifeDiscountCouponUser.setUserId(userId);
+            lifeDiscountCouponUser.setCouponId(couponId);
+            lifeDiscountCouponUser.setReceiveTime(new Date());
+            lifeDiscountCouponUser.setExpirationTime(lifeDiscountCoupon.getEndDate());
+            lifeDiscountCouponUser.setStatus(0);
+            lifeDiscountCouponUser.setDeleteFlag(0);
+            lifeDiscountCouponUser.setCreatedTime(new Date());
+            lifeDiscountCouponUsers.add(lifeDiscountCouponUser);
+        }
+        return lifeDiscountCouponUserService.saveBatch(lifeDiscountCouponUsers);
+    }
+
+    /**
+     * 收回平台优惠券
+     *
+     * @param couponId 优惠券id
+     * @return boolean
+     */
+    @Override
+    public boolean recoverPlatformCoupon(Integer couponId) {
+        return lifeDiscountCouponUserService.remove(new LambdaQueryWrapper<LifeDiscountCouponUser>().eq(LifeDiscountCouponUser::getCouponId, couponId)) && this.updateById(new LifeDiscountCoupon().setId(couponId).setGetStatus(0));
+    }
+
+    /**
+     * 删除平台优惠券
+     *
+     * @param couponId 优惠券id
+     * @return boolean
+     */
+    @Override
+    public boolean deletePlatformCoupon(Integer couponId) {
+        int count = lifeDiscountCouponUserService.count(new LambdaQueryWrapper<LifeDiscountCouponUser>().eq(LifeDiscountCouponUser::getCouponId, couponId));
+        if (count > 0) {
+            return false;
+        } else {
+            return this.removeById(couponId);
+        }
+    }
+
+    /**
+     * 分页查询该券发放记录
+     *
+     * @param pageNum  分页页码
+     * @param pageSize 分页大小
+     * @param userName 用户名
+     * @param phone    手机号
+     * @param couponId 优惠券id
+     * @return IPage<LifeDiscountCouponUserWebVo>
+     */
+    @Override
+    public IPage<LifeDiscountCouponUserWebVo> getPlatformCouponLogList(Integer pageNum, Integer pageSize, String userName, String phone, Integer couponId) {
+        IPage<LifeDiscountCouponUserWebVo> iPage = new Page<>(pageNum, pageSize);
+        return lifeDiscountCouponUserMapper.selectPageList(iPage, new QueryWrapper<LifeDiscountCouponUserWebVo>()
+                .eq(!StringUtils.isEmpty(couponId), "a.coupon_id", couponId)
+                .like(!StringUtils.isEmpty(userName), "b.real_name", userName)
+                .like(!StringUtils.isEmpty(phone), "b.user_phone", phone));
+    }
+
 
 }