package com.talentcard.server.business.admin;
|
|
import com.talentcard.server.business.PageResult;
|
import com.talentcard.server.common.ApiResponse;
|
import com.talentcard.server.request.CouponClaimIssueRequest;
|
import com.talentcard.server.request.CouponClaimStatusRequest;
|
import com.talentcard.server.request.CouponManagementSaveRequest;
|
import com.talentcard.server.request.CouponManagementStatusRequest;
|
import com.talentcard.server.service.MerchantCouponManagementService;
|
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
import jakarta.validation.Valid;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.PatchMapping;
|
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.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.time.LocalDate;
|
import java.util.Map;
|
|
@RestController
|
@RequestMapping("/api/admin/benefit-service-config/coupons")
|
@Tag(name = "后台-权益服务配置-优惠券管理", description = "管理优惠券类型、面额、适用商户、有效期、发放批次及领取/使用状态")
|
public class BenefitServiceCouponAdminController {
|
private final MerchantCouponManagementService service;
|
|
public BenefitServiceCouponAdminController(MerchantCouponManagementService service) {
|
this.service = service;
|
}
|
|
@GetMapping
|
@Operation(summary = "分页查询优惠券配置")
|
public ApiResponse<PageResult<Map<String, Object>>> page(
|
@Parameter(description = "适用商户ID") @RequestParam(required = false) Long merchantId,
|
@Parameter(description = "优惠券类型") @RequestParam(required = false) String couponType,
|
@Parameter(description = "发放批次号") @RequestParam(required = false) String batchNo,
|
@Parameter(description = "状态:0下架、1上架") @RequestParam(required = false) Integer status,
|
@Parameter(description = "优惠券或商户名称关键词") @RequestParam(required = false) String keyword,
|
@Parameter(description = "查询指定日期有效的优惠券") @RequestParam(required = false) LocalDate validOn,
|
@RequestParam(defaultValue = "1") int page,
|
@RequestParam(defaultValue = "10") int size) {
|
return ApiResponse.success(service.coupons(merchantId, couponType, batchNo, status, keyword, validOn, page, size));
|
}
|
|
@GetMapping("/{id}")
|
@Operation(summary = "查询优惠券配置详情")
|
public ApiResponse<Map<String, Object>> detail(@PathVariable Long id) {
|
return ApiResponse.success(service.coupon(id));
|
}
|
|
@PostMapping
|
@Operation(summary = "新增优惠券配置")
|
public ApiResponse<Map<String, Object>> create(@Valid @RequestBody CouponManagementSaveRequest request) {
|
return ApiResponse.success(service.createCoupon(request));
|
}
|
|
@PutMapping("/{id}")
|
@Operation(summary = "修改优惠券配置")
|
public ApiResponse<Map<String, Object>> update(@PathVariable Long id,
|
@Valid @RequestBody CouponManagementSaveRequest request) {
|
return ApiResponse.success(service.updateCoupon(id, request));
|
}
|
|
@PatchMapping("/{id}/status")
|
@Operation(summary = "优惠券上架或下架")
|
public ApiResponse<Map<String, Object>> status(@PathVariable Long id,
|
@Valid @RequestBody CouponManagementStatusRequest request) {
|
return ApiResponse.success(service.updateCouponStatus(id, request.status()));
|
}
|
|
@PostMapping("/{id}/claims")
|
@Operation(summary = "后台发放优惠券", description = "按发放批次和发放总量为指定持卡人生成领取记录")
|
public ApiResponse<Map<String, Object>> issue(@PathVariable Long id,
|
@Valid @RequestBody CouponClaimIssueRequest request) {
|
return ApiResponse.success(service.issue(id, request));
|
}
|
|
@GetMapping("/claims")
|
@Operation(summary = "分页查询优惠券领取和使用记录")
|
public ApiResponse<PageResult<Map<String, Object>>> claims(
|
@RequestParam(required = false) Long couponId,
|
@RequestParam(required = false) Long merchantId,
|
@RequestParam(required = false) String batchNo,
|
@Parameter(description = "领取状态:0待领取、1已领取、2已取消") @RequestParam(required = false) Integer claimStatus,
|
@Parameter(description = "使用状态:0未使用、1已使用、2已过期、3已作废") @RequestParam(required = false) Integer useStatus,
|
@Parameter(description = "领取编号/持卡人/手机号/卡号关键词") @RequestParam(required = false) String keyword,
|
@RequestParam(required = false) LocalDate startDate,
|
@RequestParam(required = false) LocalDate endDate,
|
@RequestParam(defaultValue = "1") int page,
|
@RequestParam(defaultValue = "10") int size) {
|
return ApiResponse.success(service.claims(couponId, merchantId, batchNo, claimStatus, useStatus,
|
keyword, startDate, endDate, page, size));
|
}
|
|
@GetMapping("/claims/{claimId}")
|
@Operation(summary = "查询优惠券领取记录详情")
|
public ApiResponse<Map<String, Object>> claim(@PathVariable Long claimId) {
|
return ApiResponse.success(service.claim(claimId));
|
}
|
|
@PatchMapping("/claims/{claimId}/status")
|
@Operation(summary = "维护优惠券领取和使用状态")
|
public ApiResponse<Map<String, Object>> claimStatus(@PathVariable Long claimId,
|
@Valid @RequestBody CouponClaimStatusRequest request) {
|
return ApiResponse.success(service.updateClaimStatus(claimId, request));
|
}
|
}
|