package com.ycwl.basic.controller.mobile; import com.ycwl.basic.model.mobile.claim.ClaimReq; import com.ycwl.basic.model.mobile.claim.ClaimResp; import com.ycwl.basic.model.pc.face.entity.FaceEntity; import com.ycwl.basic.pricing.dto.CouponClaimRequest; import com.ycwl.basic.pricing.dto.CouponClaimResult; import com.ycwl.basic.pricing.dto.req.VoucherPrintReq; import com.ycwl.basic.pricing.dto.resp.VoucherPrintResp; import com.ycwl.basic.pricing.service.ICouponService; import com.ycwl.basic.pricing.service.VoucherPrintService; import com.ycwl.basic.repository.FaceRepository; import com.ycwl.basic.repository.ScenicRepository; import com.ycwl.basic.util.ScenicConfigManager; import com.ycwl.basic.utils.ApiResponse; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/mobile/claim/v1") @AllArgsConstructor public class AppClaimController { private final FaceRepository faceRepository; private final ScenicRepository scenicRepository; private final VoucherPrintService voucherPrintService; private final ICouponService couponService; @PostMapping("tryClaim") public ApiResponse tryClaim(@RequestBody ClaimReq req) { FaceEntity face = faceRepository.getFace(req.getFaceId()); if (face == null) { return ApiResponse.fail("请选择人脸"); } ClaimResp claimResp = new ClaimResp(); ScenicConfigManager scenicConfig = scenicRepository.getScenicConfigManager(face.getScenicId()); if (Boolean.TRUE.equals(scenicConfig.getBoolean("voucher_enable"))) { // 可以领券 VoucherPrintResp voucherPrintResp = voucherPrintService.queryPrintedVoucher(face.getId()); if (voucherPrintResp == null) { // 打印 if (req.getMorphId() != null) { voucherPrintResp = voucherPrintService.printVoucherTicket(new VoucherPrintReq(face.getId(), req.getMorphId(), face.getScenicId())); } } if (voucherPrintResp != null) { claimResp.setHasCoupon(false); claimResp.setHasPrint(true); claimResp.setPrintCode(voucherPrintResp.getCode()); claimResp.setPrintType(voucherPrintResp.getType()); return ApiResponse.success(claimResp); } } if (Boolean.TRUE.equals(scenicConfig.getBoolean("booking_enable"))) { VoucherPrintResp voucherPrintResp = voucherPrintService.queryPrintedVoucher(face.getId()); if (voucherPrintResp == null) { // 打印 if (req.getMorphId() != null) { voucherPrintResp = voucherPrintService.printBookingTicket(new VoucherPrintReq(face.getId(), req.getMorphId(), face.getScenicId())); } } if (voucherPrintResp != null) { claimResp.setHasCoupon(false); claimResp.setHasPrint(true); claimResp.setPrintCode(voucherPrintResp.getCode()); claimResp.setPrintType(voucherPrintResp.getType()); return ApiResponse.success(claimResp); } } if (req.getType() != null) { // 第几次进入 Integer couponId = scenicConfig.getInteger("coupon_id_for_type_" + req.getType()); if (couponId != null) { // 可以领券 CouponClaimRequest request = new CouponClaimRequest(face.getMemberId(), Long.valueOf(couponId)); CouponClaimResult claimResult = couponService.claimCoupon(request); if (claimResult.isSuccess()) { // 领到了 claimResp.setHasCoupon(true); claimResp.setCouponDesc(scenicConfig.getString("coupon_desc_for_type_" + req.getType(), "专属折扣券")); claimResp.setCouponCountdown(scenicConfig.getString("coupon_countdown_for_type_" + req.getType(), "送你优惠,保存美好!")); return ApiResponse.success(claimResp); } } } return ApiResponse.fail("异常"); } }