소스 검색

查询用户优惠券接口开发

qizai 1 년 전
부모
커밋
aee40c5eda

+ 185 - 0
src/main/java/com/chelvc/cloud/maintain/controller/CouponController.java

@@ -0,0 +1,185 @@
+package com.chelvc.cloud.maintain.controller;
+
+import com.chelvc.cloud.maintain.copier.CouponCopier;
+import com.chelvc.cloud.maintain.vo.CouponVO;
+import com.chelvc.cloud.vehicle.api.dto.CouponDTO;
+import com.chelvc.cloud.vehicle.api.param.CouponModifyParam;
+import com.chelvc.cloud.vehicle.api.param.CouponPagingParam;
+import com.chelvc.cloud.vehicle.api.service.CouponService;
+import com.chelvc.framework.base.annotation.ResponseWrapping;
+import com.chelvc.framework.common.model.Pagination;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.util.CollectionUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import javax.validation.constraints.Min;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 优惠券接口
+ *
+ * @author qizai
+ * @date 2023/9/8
+ */
+@Validated
+@RestController
+@ResponseWrapping
+public class CouponController {
+    @DubboReference
+    private CouponService couponService;
+
+    /**
+     * 新增优惠券
+     *
+     * @param param 新增参数
+     * @return 优惠券主键
+     */
+    @PostMapping("/coupon")
+    public Long addCoupon(@RequestBody @Valid CouponModifyParam param) {
+        return this.couponService.addCoupon(param);
+    }
+
+    /**
+     * 修改优惠券
+     *
+     * @param id    优惠券主键
+     * @param param 修改参数
+     */
+    @PutMapping("/coupon/{id}")
+    public void updateCoupon(@PathVariable("id") @Min(value = 1, message = "优惠券主键不能小于1") Long id,
+                             @RequestBody @Valid CouponModifyParam param) {
+        this.couponService.updateCoupon(id, param);
+    }
+
+    /**
+     * 获取优惠券信息
+     *
+     * @param id 优惠券主键
+     * @return 优惠券信息
+     */
+    @GetMapping("/coupon/{id}")
+    public CouponVO getCoupon(@PathVariable("id") @Min(value = 1, message = "优惠券主键不能小于1") Long id) {
+        return this.convert(this.couponService.getCoupon(id));
+    }
+
+    /**
+     * 查询优惠券分页
+     *
+     * @param param 查询参数
+     * @return 优惠券分页信息
+     */
+    @GetMapping("/coupon/paging")
+    public Pagination<CouponVO> getCouponPaging(@Valid CouponPagingParam param) {
+        Pagination<CouponDTO> pagination = this.couponService.getCouponPaging(param);
+        List<CouponDTO> records = pagination.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return Pagination.empty();
+        }
+
+        // 构建优惠券信息
+        List<CouponVO> coupons = records.stream().map(this::convert).collect(Collectors.toList());
+        return pagination.convert(coupons);
+    }
+
+    /**
+     * 根据商家ID查询优惠券分页
+     *
+     * @param merchantId 商家ID
+     * @param param 查询参数
+     * @return 优惠券分页信息
+     */
+    @GetMapping("/coupon/{merchantId}/paging")
+    public Pagination<CouponVO> listCoupons(@PathVariable("merchantId") @Min(value = 1, message = "优惠券主键不能小于1")
+                                                    Long merchantId, @Valid CouponPagingParam param) {
+        Pagination<CouponDTO> pagination = this.couponService.getMerchantCouponPaging(merchantId, param);
+        List<CouponDTO> records = pagination.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return Pagination.empty();
+        }
+
+        // 构建优惠券信息
+        List<CouponVO> coupons = records.stream().map(this::convert).collect(Collectors.toList());
+        return pagination.convert(coupons);
+    }
+
+    /**
+     * 自动领取优惠券
+     *
+     */
+    @PostMapping("/coupon/autoCollect")
+    public void autoCollectCoupons() {
+
+    }
+
+    /**
+     * 会员领取优惠券
+     *
+     * @param id 优惠券主键
+     */
+    @GetMapping("/coupon/collect/{id}")
+    public void collectCoupon(@PathVariable("id") @Min(value = 1, message = "优惠券主键不能小于1") Long id) {
+
+    }
+
+    /**
+     * 查询可领取优惠券列表
+     *
+     * @param param 查询参数
+     * @return 优惠券分页信息
+     */
+    @GetMapping("/coupon/availablePaging")
+    public Pagination<CouponVO> getAvailableCouponPaging(@Valid CouponPagingParam param) {
+        return null;
+    }
+
+    /**
+     * 查询当前会员的优惠券列表
+     *
+     * @param param 查询参数
+     * @return 优惠券分页信息
+     */
+    @GetMapping("/coupon/ownedPaging")
+    public Pagination<CouponVO> getMemberCouponPaging(@Valid CouponPagingParam param) {
+        return null;
+    }
+
+    /**
+     * 查询当前会员的对于当前商品可使用的优惠券列表
+     *
+     * @param param 查询参数
+     * @return 优惠券分页信息
+     */
+    @GetMapping("/coupon/usablePaging")
+    public Pagination<CouponVO> getUsableCouponPaging(@Valid CouponPagingParam param) {
+        return null;
+    }
+
+    /**
+     * 删除优惠券
+     *
+     * @param id    优惠券主键
+     */
+    @DeleteMapping("/coupon/{id}")
+    public void deleteCoupon(@PathVariable("id") @Min(value = 1, message = "优惠券主键不能小于1") Long id) {
+
+    }
+
+    /**
+     * 转换优惠券
+     *
+     * @param coupon 优惠券DTO
+     * @return 优惠券VO
+     */
+    private CouponVO convert(CouponDTO coupon) {
+        return CouponCopier.INSTANCE.copying(coupon);
+    }
+}

+ 109 - 0
src/main/java/com/chelvc/cloud/maintain/controller/UserCouponController.java

@@ -0,0 +1,109 @@
+package com.chelvc.cloud.maintain.controller;
+
+import com.chelvc.cloud.maintain.copier.UserCouponCopier;
+import com.chelvc.cloud.maintain.vo.UserCouponVO;
+import com.chelvc.cloud.vehicle.api.dto.UserCouponDTO;
+import com.chelvc.cloud.vehicle.api.param.UserCouponModifyParam;
+import com.chelvc.cloud.vehicle.api.param.UserCouponPagingParam;
+import com.chelvc.cloud.vehicle.api.param.UserCouponQueryParam;
+import com.chelvc.cloud.vehicle.api.service.UserCouponService;
+import com.chelvc.framework.base.annotation.ResponseWrapping;
+import com.chelvc.framework.common.model.Pagination;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.util.CollectionUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import javax.validation.constraints.Min;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 优惠券领取记录接口
+ *
+ * @author qizai
+ * @Date 2023/9/8
+ **/
+@Validated
+@RestController
+@ResponseWrapping
+public class UserCouponController {
+    @DubboReference
+    private UserCouponService userCouponService;
+
+    /**
+     * 领取优惠券
+     *
+     * @param param 新增参数
+     * @return 优惠券领取记录主键
+     */
+    @PostMapping("/usercoupon/claim")
+    public Long claimUserCoupon(@RequestBody @Valid UserCouponModifyParam param) {
+        return this.userCouponService.addUserCoupon(param);
+    }
+
+    /**
+     * 获取用户优惠券列表
+     *
+     * @param param 查询参数
+     * @return 用户优惠券信息列表
+     */
+    @GetMapping("/usercoupons")
+    public List<UserCouponVO> listUserCoupons(@Valid UserCouponQueryParam param) {
+        List<UserCouponDTO> userCoupons = this.userCouponService.listUserCoupons(param);
+        if (CollectionUtils.isEmpty(userCoupons)) {
+            return Collections.emptyList();
+        }
+        return userCoupons
+                .stream()
+                .map(o -> UserCouponCopier.INSTANCE.copying(o, o.getCouponDTO()))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 获取优惠券领取记录信息
+     *
+     * @param id 优惠券领取记录主键
+     * @return 优惠券领取记录信息
+     */
+    @GetMapping("/usercoupon/{id}")
+    public UserCouponVO getCoupon(@PathVariable("id") @Min(value = 1, message = "优惠券领取记录主键不能小于1") Long id) {
+        UserCouponVO couponGain = this.convert(this.userCouponService.getUserCoupon(id));
+        return couponGain;
+    }
+
+    /**
+     * 查询优惠券领取记录分页
+     *
+     * @param param 查询参数
+     * @return 优惠券领取记录分页信息
+     */
+    @GetMapping("/couponGain/paging")
+    public Pagination<UserCouponVO> getUserCouponPaging(@Valid UserCouponPagingParam param) {
+        Pagination<UserCouponDTO> pagination = this.userCouponService.getUserCouponPaging(param);
+        List<UserCouponDTO> records = pagination.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return Pagination.empty();
+        }
+
+        // 构建优惠券领取记录信息
+        List<UserCouponVO> couponGains = records.stream().map(this::convert).collect(Collectors.toList());
+        return pagination.convert(couponGains);
+    }
+
+    /**
+     * 转换优惠券领取记录
+     *
+     * @param userCoupon 优惠券领取记录DTO
+     * @return 优惠券领取记录VO
+     */
+    private UserCouponVO convert(UserCouponDTO userCoupon) {
+        return UserCouponCopier.INSTANCE.copying(userCoupon);
+    }
+}

+ 45 - 0
src/main/java/com/chelvc/cloud/maintain/copier/CouponCopier.java

@@ -0,0 +1,45 @@
+package com.chelvc.cloud.maintain.copier;
+
+import com.chelvc.cloud.maintain.vo.CouponVO;
+import com.chelvc.cloud.vehicle.api.dto.CouponDTO;
+import org.mapstruct.Builder;
+import org.mapstruct.IterableMapping;
+import org.mapstruct.Mapper;
+import org.mapstruct.Named;
+import org.mapstruct.factory.Mappers;
+
+import java.util.Collection;
+import java.util.List;
+
+
+/**
+ * 优惠券对象拷贝接口
+ *
+ * @author qizai
+ * @Date 2023/9/8
+ **/
+@Mapper(builder = @Builder(disableBuilder = true))
+public interface CouponCopier {
+    /**
+     * 对象拷贝接口实例
+     */
+    CouponCopier INSTANCE = Mappers.getMapper(CouponCopier.class);
+
+    /**
+     * 优惠券拷贝
+     *
+     * @param coupon 优惠券DTO
+     * @return 优惠券VO
+     */
+    @Named("dto2vo")
+    CouponVO copying(CouponDTO coupon);
+
+    /**
+     * 优惠券拷贝
+     *
+     * @param coupons 优惠券集合
+     * @return 优惠券列表
+     */
+    @IterableMapping(qualifiedByName = "dto2vo")
+    List<CouponVO> copying(Collection<CouponDTO> coupons);
+}

+ 50 - 0
src/main/java/com/chelvc/cloud/maintain/copier/UserCouponCopier.java

@@ -0,0 +1,50 @@
+package com.chelvc.cloud.maintain.copier;
+
+import com.chelvc.cloud.maintain.vo.CouponVO;
+import com.chelvc.cloud.maintain.vo.UserCouponVO;
+import com.chelvc.cloud.vehicle.api.dto.CouponDTO;
+import com.chelvc.cloud.vehicle.api.dto.UserCouponDTO;
+import org.mapstruct.Builder;
+import org.mapstruct.IterableMapping;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.Named;
+import org.mapstruct.factory.Mappers;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 优惠券领取记录对象拷贝接口
+ *
+ * @author qizai
+ * @Date 2023/9/8
+ **/
+@Mapper(builder = @Builder(disableBuilder = true))
+public interface UserCouponCopier {
+    /**
+     * 对象拷贝接口实例
+     */
+    UserCouponCopier INSTANCE = Mappers.getMapper(UserCouponCopier.class);
+
+    /**
+     * 优惠券领取记录拷贝
+     *
+     * @param userCoupon 优惠券领取记录DTO
+     * @return 优惠券领取记录VO
+     */
+    UserCouponVO copying(UserCouponDTO userCoupon);
+
+    /**
+     * 优惠券领取记录拷贝
+     *
+     * @param userCoupons 优惠券领取记录集合
+     * @return 优惠券领取记录列表
+     */
+    List<UserCouponVO> copying(Collection<UserCouponDTO> userCoupons);
+
+    @Mapping(source = "userCoupon.id", target = "id")
+    @Mapping(source = "userCoupon.type", target = "type")
+    @Mapping(source = "coupon", target = "couponVO")
+    UserCouponVO copying(UserCouponDTO userCoupon, CouponDTO coupon);
+}

+ 10 - 0
src/main/java/com/chelvc/cloud/maintain/vo/CouponVO.java

@@ -27,6 +27,11 @@ public class CouponVO implements Serializable {
      */
     private Long id;
 
+    /**
+     * 商家ID
+     */
+    private Long merchantId;
+
     /**
      * 优惠券类型
      */
@@ -57,4 +62,9 @@ public class CouponVO implements Serializable {
      * 过期时间
      */
     private Date expiration;
+
+    /**
+     * 优惠券描述
+     */
+    private String description;
 }

+ 47 - 0
src/main/java/com/chelvc/cloud/maintain/vo/UserCouponVO.java

@@ -0,0 +1,47 @@
+package com.chelvc.cloud.maintain.vo;
+
+import com.chelvc.cloud.vehicle.api.constant.CouponType;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 优惠券领取记录
+ *
+ * @author qizai
+ * @date 2023/9/8
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserCouponVO implements Serializable {
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 优惠券id
+     */
+    private Long couponId;
+
+    /**
+     * 优惠券类型
+     */
+    private CouponType type;
+
+    /**
+     * 优惠券
+     */
+    private CouponVO couponVO;
+}