From 727c9bacfafd9c8cc7b5d69b9f35f0afeadbd441 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Thu, 24 Jul 2025 19:46:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mobile/AppCouponController.java | 41 ++++++++++- .../ycwl/basic/mapper/CouponRecordMapper.java | 4 ++ .../mobile/coupon/req/ClaimCouponReq.java | 10 +++ .../req/CouponRecordPageQueryReq.java | 12 ++++ .../resp/CouponRecordPageResp.java | 23 +++++++ .../service/mobile/CouponRecordService.java | 12 ++++ .../mobile/impl/CouponRecordServiceImpl.java | 69 +++++++++++++++++++ .../basic/service/pc/CouponRecordService.java | 10 +++ .../pc/impl/CouponRecordServiceImpl.java | 30 ++++++++ .../service/pc/impl/OrderServiceImpl.java | 1 + .../resources/mapper/CouponRecordMapper.xml | 14 ++++ 11 files changed, 223 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/model/mobile/coupon/req/ClaimCouponReq.java create mode 100644 src/main/java/com/ycwl/basic/model/pc/couponRecord/req/CouponRecordPageQueryReq.java create mode 100644 src/main/java/com/ycwl/basic/model/pc/couponRecord/resp/CouponRecordPageResp.java create mode 100644 src/main/java/com/ycwl/basic/service/mobile/CouponRecordService.java create mode 100644 src/main/java/com/ycwl/basic/service/mobile/impl/CouponRecordServiceImpl.java create mode 100644 src/main/java/com/ycwl/basic/service/pc/CouponRecordService.java create mode 100644 src/main/java/com/ycwl/basic/service/pc/impl/CouponRecordServiceImpl.java diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppCouponController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppCouponController.java index 209dc41..aea2bdb 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppCouponController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppCouponController.java @@ -1,9 +1,44 @@ package com.ycwl.basic.controller.mobile; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.ycwl.basic.model.pc.couponRecord.entity.CouponRecordEntity; +import com.ycwl.basic.service.mobile.CouponRecordService; +import com.ycwl.basic.utils.ApiResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @RestController -@RequestMapping("/api/mobile/controller/v1") +@RequestMapping("/api/mobile/coupon/v1") public class AppCouponController { + + @Autowired + private CouponRecordService couponRecordService; + + /** + * 根据memberId和faceId查找优惠券记录 + */ + @GetMapping("/records") + public ApiResponse> getCouponRecords( + @RequestParam Long memberId, + @RequestParam Long faceId) { + List records = couponRecordService.queryByMemberIdAndFaceId(memberId, faceId); + return ApiResponse.success(records); + } + + /** + * 领取优惠券 + */ + @PostMapping("/claim") + public ApiResponse claimCoupon( + @RequestParam Long memberId, + @RequestParam Long faceId, + @RequestParam Integer type) { + try { + CouponRecordEntity record = couponRecordService.claimCoupon(memberId, faceId, type); + return ApiResponse.success(record); + } catch (RuntimeException e) { + return ApiResponse.fail(e.getMessage()); + } + } } diff --git a/src/main/java/com/ycwl/basic/mapper/CouponRecordMapper.java b/src/main/java/com/ycwl/basic/mapper/CouponRecordMapper.java index c71138e..18715c0 100644 --- a/src/main/java/com/ycwl/basic/mapper/CouponRecordMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/CouponRecordMapper.java @@ -9,4 +9,8 @@ import java.util.List; @Mapper public interface CouponRecordMapper extends BaseMapper { List queryByUserWithGoodsId(Long scenicId, Long memberId, String goodsId); + + List queryByMemberIdAndFaceId(Long memberId, Long faceId); + + CouponRecordEntity queryByMemberIdAndFaceIdAndType(Long memberId, Long faceId, Integer type); } diff --git a/src/main/java/com/ycwl/basic/model/mobile/coupon/req/ClaimCouponReq.java b/src/main/java/com/ycwl/basic/model/mobile/coupon/req/ClaimCouponReq.java new file mode 100644 index 0000000..a15ceb5 --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/mobile/coupon/req/ClaimCouponReq.java @@ -0,0 +1,10 @@ +package com.ycwl.basic.model.mobile.coupon.req; + +import lombok.Data; + +@Data +public class ClaimCouponReq { + private Long memberId; + private Long faceId; + private Integer type; +} \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/model/pc/couponRecord/req/CouponRecordPageQueryReq.java b/src/main/java/com/ycwl/basic/model/pc/couponRecord/req/CouponRecordPageQueryReq.java new file mode 100644 index 0000000..4563883 --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/pc/couponRecord/req/CouponRecordPageQueryReq.java @@ -0,0 +1,12 @@ +package com.ycwl.basic.model.pc.couponRecord.req; + +import lombok.Data; + +@Data +public class CouponRecordPageQueryReq { + private Integer pageNum = 1; + private Integer pageSize = 10; + private Long scenicId; + private String couponName; + private Integer couponType; +} \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/model/pc/couponRecord/resp/CouponRecordPageResp.java b/src/main/java/com/ycwl/basic/model/pc/couponRecord/resp/CouponRecordPageResp.java new file mode 100644 index 0000000..f969f64 --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/pc/couponRecord/resp/CouponRecordPageResp.java @@ -0,0 +1,23 @@ +package com.ycwl.basic.model.pc.couponRecord.resp; + +import lombok.Data; + +import java.util.Date; + +@Data +public class CouponRecordPageResp { + private Integer id; + private Integer couponId; + private String couponName; + private Integer couponType; + private String couponTypeName; + private Long scenicId; + private String scenicName; + private Long memberId; + private Long faceId; + private Integer status; + private String statusName; + private Date createTime; + private Date usedTime; + private Long usedOrderId; +} \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/service/mobile/CouponRecordService.java b/src/main/java/com/ycwl/basic/service/mobile/CouponRecordService.java new file mode 100644 index 0000000..81c7e1e --- /dev/null +++ b/src/main/java/com/ycwl/basic/service/mobile/CouponRecordService.java @@ -0,0 +1,12 @@ +package com.ycwl.basic.service.mobile; + +import com.ycwl.basic.model.pc.couponRecord.entity.CouponRecordEntity; + +import java.util.List; + +public interface CouponRecordService { + + List queryByMemberIdAndFaceId(Long memberId, Long faceId); + + CouponRecordEntity claimCoupon(Long memberId, Long faceId, Integer type); +} \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/service/mobile/impl/CouponRecordServiceImpl.java b/src/main/java/com/ycwl/basic/service/mobile/impl/CouponRecordServiceImpl.java new file mode 100644 index 0000000..b1966fc --- /dev/null +++ b/src/main/java/com/ycwl/basic/service/mobile/impl/CouponRecordServiceImpl.java @@ -0,0 +1,69 @@ +package com.ycwl.basic.service.mobile.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ycwl.basic.mapper.CouponMapper; +import com.ycwl.basic.mapper.CouponRecordMapper; +import com.ycwl.basic.model.pc.coupon.entity.CouponEntity; +import com.ycwl.basic.model.pc.couponRecord.entity.CouponRecordEntity; +import com.ycwl.basic.model.pc.face.entity.FaceEntity; +import com.ycwl.basic.repository.FaceRepository; +import com.ycwl.basic.service.mobile.CouponRecordService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +@Service +public class CouponRecordServiceImpl implements CouponRecordService { + + @Autowired + private CouponRecordMapper couponRecordMapper; + + @Autowired + private CouponMapper couponMapper; + @Autowired + private FaceRepository faceRepository; + + @Override + public List queryByMemberIdAndFaceId(Long memberId, Long faceId) { + return couponRecordMapper.queryByMemberIdAndFaceId(memberId, faceId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public CouponRecordEntity claimCoupon(Long memberId, Long faceId, Integer type) { + // 检查是否已经领取过该类型的优惠券 + CouponRecordEntity existingRecord = couponRecordMapper.queryByMemberIdAndFaceIdAndType(memberId, faceId, type); + if (existingRecord != null) { + throw new RuntimeException("该用户已经领取过此类型的优惠券"); + } + FaceEntity face = faceRepository.getFace(faceId); + if (face == null) { + throw new RuntimeException("人脸数据不存在"); + } + // 查找可用的优惠券 + Long scenicId = face.getScenicId(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("scenic_id", scenicId) + .eq("type", type) + .eq("status", 1); // 开启状态 + CouponEntity coupon = couponMapper.selectOne(queryWrapper); + + if (coupon == null) { + throw new RuntimeException("未找到可领取的优惠券"); + } + + // 创建优惠券记录 + CouponRecordEntity record = new CouponRecordEntity(); + record.setCouponId(coupon.getId()); + record.setMemberId(memberId); + record.setFaceId(faceId); + record.setStatus(0); // 有效状态 + record.setCreateTime(new Date()); + + couponRecordMapper.insert(record); + return record; + } +} \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/service/pc/CouponRecordService.java b/src/main/java/com/ycwl/basic/service/pc/CouponRecordService.java new file mode 100644 index 0000000..b765b2f --- /dev/null +++ b/src/main/java/com/ycwl/basic/service/pc/CouponRecordService.java @@ -0,0 +1,10 @@ +package com.ycwl.basic.service.pc; + +import com.github.pagehelper.PageInfo; +import com.ycwl.basic.model.pc.couponRecord.req.CouponRecordPageQueryReq; +import com.ycwl.basic.model.pc.couponRecord.resp.CouponRecordPageResp; +import com.ycwl.basic.utils.ApiResponse; + +public interface CouponRecordService { + ApiResponse> pageQuery(CouponRecordPageQueryReq query); +} \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/service/pc/impl/CouponRecordServiceImpl.java b/src/main/java/com/ycwl/basic/service/pc/impl/CouponRecordServiceImpl.java new file mode 100644 index 0000000..56fc2ca --- /dev/null +++ b/src/main/java/com/ycwl/basic/service/pc/impl/CouponRecordServiceImpl.java @@ -0,0 +1,30 @@ +package com.ycwl.basic.service.pc.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.ycwl.basic.mapper.CouponRecordMapper; +import com.ycwl.basic.model.pc.couponRecord.entity.CouponRecordEntity; +import com.ycwl.basic.model.pc.couponRecord.req.CouponRecordPageQueryReq; +import com.ycwl.basic.model.pc.couponRecord.resp.CouponRecordPageResp; +import com.ycwl.basic.service.pc.CouponRecordService; +import com.ycwl.basic.utils.ApiResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class CouponRecordServiceImpl extends ServiceImpl implements CouponRecordService { + + @Autowired + private CouponRecordMapper couponRecordMapper; + + @Override + public ApiResponse> pageQuery(CouponRecordPageQueryReq query) { + PageHelper.startPage(query.getPageNum(), query.getPageSize()); + List list = couponRecordMapper.selectByPageQuery(query); + PageInfo pageInfo = new PageInfo<>(list); + return ApiResponse.success(pageInfo); + } +} \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/service/pc/impl/OrderServiceImpl.java b/src/main/java/com/ycwl/basic/service/pc/impl/OrderServiceImpl.java index 1c576ce..9709f33 100644 --- a/src/main/java/com/ycwl/basic/service/pc/impl/OrderServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/pc/impl/OrderServiceImpl.java @@ -524,6 +524,7 @@ public class OrderServiceImpl implements OrderService { order.setCouponId(null); if (couponRecord != null) { if (couponRecord.isUsable()) { + log.info("优惠券可用,优惠券记录ID:{},优惠券ID:{}", couponRecord.getId(), couponRecord.getCouponId()); order.setCouponId(couponRecord.getCouponId()); order.setCouponRecordId(couponRecord.getId()); order.setCouponPrice(couponRecord.getCoupon().calculateDiscountPrice(order.getPrice())); diff --git a/src/main/resources/mapper/CouponRecordMapper.xml b/src/main/resources/mapper/CouponRecordMapper.xml index c5efaf3..244bac0 100644 --- a/src/main/resources/mapper/CouponRecordMapper.xml +++ b/src/main/resources/mapper/CouponRecordMapper.xml @@ -5,4 +5,18 @@ resultType="com.ycwl.basic.model.pc.couponRecord.entity.CouponRecordEntity"> select * from coupon_record where member_id = #{memberId} and coupon_id in (select id from coupon where scenic_id = #{scenicId} and FIND_IN_SET(#{goodsId},config_ids)) + + + + \ No newline at end of file