From 589c6dee0b129bb85f6c02d9733c095fe99b7aa5 Mon Sep 17 00:00:00 2001 From: jieyuu <645634619@qq.com> Date: Wed, 7 Aug 2024 11:14:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=BC=80=E5=90=AF=E4=BA=8B=E5=8A=A1=20=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=88=B8=E8=AE=B0=E5=BD=95=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/net/jieyuu/CouponApplication.java | 2 + .../controller/CouponRecordController.java | 38 ++++++++- .../jieyuu/service/CouponRecordService.java | 33 ++++++++ .../service/impl/CouponRecordServiceImpl.java | 74 +++++++++++++++++ .../service/impl/CouponServiceImpl.java | 14 +--- .../java/net/jieyuu/vo/CouponRecordVO.java | 79 +++++++++++++++++++ .../src/main/java/net/jieyuu/vo/CouponVO.java | 2 - 7 files changed, 226 insertions(+), 16 deletions(-) create mode 100644 xdclass-coupon-service/src/main/java/net/jieyuu/service/CouponRecordService.java create mode 100644 xdclass-coupon-service/src/main/java/net/jieyuu/service/impl/CouponRecordServiceImpl.java create mode 100644 xdclass-coupon-service/src/main/java/net/jieyuu/vo/CouponRecordVO.java diff --git a/xdclass-coupon-service/src/main/java/net/jieyuu/CouponApplication.java b/xdclass-coupon-service/src/main/java/net/jieyuu/CouponApplication.java index d048e3d..c22754d 100644 --- a/xdclass-coupon-service/src/main/java/net/jieyuu/CouponApplication.java +++ b/xdclass-coupon-service/src/main/java/net/jieyuu/CouponApplication.java @@ -3,8 +3,10 @@ package net.jieyuu; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.transaction.annotation.EnableTransactionManagement; @SpringBootApplication +@EnableTransactionManagement @MapperScan("net.jieyuu.mapper") public class CouponApplication { public static void main(String[] args) { diff --git a/xdclass-coupon-service/src/main/java/net/jieyuu/controller/CouponRecordController.java b/xdclass-coupon-service/src/main/java/net/jieyuu/controller/CouponRecordController.java index db12e9f..de7be52 100644 --- a/xdclass-coupon-service/src/main/java/net/jieyuu/controller/CouponRecordController.java +++ b/xdclass-coupon-service/src/main/java/net/jieyuu/controller/CouponRecordController.java @@ -1,21 +1,51 @@ package net.jieyuu.controller; -import org.springframework.web.bind.annotation.RequestMapping; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import net.jieyuu.enums.BizCodeEnum; +import net.jieyuu.service.CouponRecordService; +import net.jieyuu.utils.JsonData; +import net.jieyuu.vo.CouponRecordVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; -import org.springframework.web.bind.annotation.RestController; +import java.util.Map; /** *

- * 前端控制器 + * 前端控制器 *

* * @author jieyuu * @since 2024-07-15 */ @RestController -@RequestMapping("/couponRecordDO") +@RequestMapping("/api/coupon_record/v1") public class CouponRecordController { + @Autowired + private CouponRecordService couponRecordService; + + @ApiOperation(value = "个人优惠券分页") + @GetMapping("page") + public JsonData page(@ApiParam("当前页") + @RequestParam(value = "page", defaultValue = "1") int page, + @ApiParam("显示多少条") + @RequestParam(value = "size", defaultValue = "20") int size) { + Map pageResult = couponRecordService.page(page, size); + return JsonData.buildSuccess(pageResult); + } + + + @ApiOperation("获取优惠券详情") + @GetMapping("detail/{record_id}") + public JsonData getCouponRecordDetail(@ApiParam("记录id") @PathVariable("record_id") long recordId) { + CouponRecordVO couponRecordVO = couponRecordService.findById(recordId); + + return couponRecordVO == null ? JsonData.buildResult(BizCodeEnum.COUPON_NO_EXITS) : JsonData.buildSuccess(couponRecordVO); + } + + } diff --git a/xdclass-coupon-service/src/main/java/net/jieyuu/service/CouponRecordService.java b/xdclass-coupon-service/src/main/java/net/jieyuu/service/CouponRecordService.java new file mode 100644 index 0000000..21b275f --- /dev/null +++ b/xdclass-coupon-service/src/main/java/net/jieyuu/service/CouponRecordService.java @@ -0,0 +1,33 @@ +package net.jieyuu.service; + +import net.jieyuu.model.CouponRecordDO; +import com.baomidou.mybatisplus.extension.service.IService; +import net.jieyuu.vo.CouponRecordVO; + +import java.util.Map; + +/** + *

+ * 服务类 + *

+ * + * @author jieyuu + * @since 2024-07-15 + */ +public interface CouponRecordService extends IService { + /** + * 分页查询领券记录 + * @param page + * @param size + * @return + */ + public Mappage(int page, int size); + + /** + * 根据id查询详情 + * @param recordId + * @return + */ + CouponRecordVO findById(long recordId); + +} diff --git a/xdclass-coupon-service/src/main/java/net/jieyuu/service/impl/CouponRecordServiceImpl.java b/xdclass-coupon-service/src/main/java/net/jieyuu/service/impl/CouponRecordServiceImpl.java new file mode 100644 index 0000000..65fccc1 --- /dev/null +++ b/xdclass-coupon-service/src/main/java/net/jieyuu/service/impl/CouponRecordServiceImpl.java @@ -0,0 +1,74 @@ +package net.jieyuu.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.jieyuu.interceptor.LoginInterceptor; +import net.jieyuu.model.CouponRecordDO; +import net.jieyuu.mapper.CouponRecordMapper; +import net.jieyuu.model.LoginUser; +import net.jieyuu.service.CouponRecordService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import net.jieyuu.vo.CouponRecordVO; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author jieyuu + * @since 2024-07-15 + */ +@Service +public class CouponRecordServiceImpl extends ServiceImpl implements CouponRecordService { + + @Autowired + private CouponRecordMapper couponRecordMapper; + + @Override + public Map page(int page, int size) { + LoginUser loginUser = LoginInterceptor.threadLocal.get(); + + Page pageInfo = new Page<>(page, size); + + IPage couponDOIPage = couponRecordMapper.selectPage(pageInfo, new QueryWrapper() + .eq("user_id", loginUser.getId()) + .orderByDesc("create_time")); + + Map pageMap = new HashMap<>(3); + + pageMap.put("total_record", couponDOIPage.getTotal()); + pageMap.put("total_page", couponDOIPage.getPages()); + pageMap.put("current_data", couponDOIPage.getRecords().stream().map(obj -> beanProcess(obj)).collect(Collectors.toList())); + + return pageMap; + } + + @Override + public CouponRecordVO findById(long recordId) { + LoginUser loginUser = LoginInterceptor.threadLocal.get(); + CouponRecordDO couponRecordDO = couponRecordMapper.selectOne(new QueryWrapper() + .eq("id", recordId) + .eq("user_id", loginUser.getId())); + + if (couponRecordDO == null) { + return null; + } + + return beanProcess(couponRecordDO); + } + + private CouponRecordVO beanProcess(CouponRecordDO couponRecordDO) { + CouponRecordVO couponRecordVO = new CouponRecordVO(); + BeanUtils.copyProperties(couponRecordDO, couponRecordVO); + + return couponRecordVO; + } +} diff --git a/xdclass-coupon-service/src/main/java/net/jieyuu/service/impl/CouponServiceImpl.java b/xdclass-coupon-service/src/main/java/net/jieyuu/service/impl/CouponServiceImpl.java index 321421f..2e2a764 100644 --- a/xdclass-coupon-service/src/main/java/net/jieyuu/service/impl/CouponServiceImpl.java +++ b/xdclass-coupon-service/src/main/java/net/jieyuu/service/impl/CouponServiceImpl.java @@ -16,7 +16,6 @@ import net.jieyuu.mapper.CouponMapper; import net.jieyuu.model.CouponRecordDO; import net.jieyuu.model.LoginUser; import net.jieyuu.service.CouponService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import net.jieyuu.utils.CommonUtil; import net.jieyuu.utils.JsonData; import net.jieyuu.vo.CouponVO; @@ -24,16 +23,12 @@ import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.stereotype.Service; - -import java.time.Duration; -import java.util.Arrays; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -46,6 +41,7 @@ import java.util.stream.Collectors; */ @Service @Slf4j + public class CouponServiceImpl implements CouponService { @Autowired @@ -54,9 +50,6 @@ public class CouponServiceImpl implements CouponService { @Autowired private CouponRecordMapper couponRecordMapper; - @Autowired - private StringRedisTemplate redisTemplate; - @Autowired private RedissonClient redissonClient; @@ -90,6 +83,7 @@ public class CouponServiceImpl implements CouponService { * @return */ @Override + @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public JsonData addCoupon(long couponId, CouponCategoryEnum category) { LoginUser loginUser = LoginInterceptor.threadLocal.get(); diff --git a/xdclass-coupon-service/src/main/java/net/jieyuu/vo/CouponRecordVO.java b/xdclass-coupon-service/src/main/java/net/jieyuu/vo/CouponRecordVO.java new file mode 100644 index 0000000..44c7c8d --- /dev/null +++ b/xdclass-coupon-service/src/main/java/net/jieyuu/vo/CouponRecordVO.java @@ -0,0 +1,79 @@ +package net.jieyuu.vo; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + + +@Data +public class CouponRecordVO implements Serializable { + + private Long id; + + /** + * 优惠券id + */ + @JsonProperty("coupon_id") + private Long couponId; + + /** + * 使用状态 可用 NEW,已使用USED,过期 EXPIRED; + */ + @JsonProperty("use_state") + private String useState; + + /** + * 用户id + */ + @JsonProperty("user_id") + private Long userId; + + /** + * 用户昵称 + */ + @JsonProperty("user_name") + private String userName; + + /** + * 优惠券标题 + */ + @JsonProperty("coupon_title") + private String couponTitle; + + /** + * 优惠券开始有效时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", locale = "zh", timezone = "GMT+8") + @JsonProperty("start_time") + private Date startTime; + + /** + * 优惠券失效时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", locale = "zh", timezone = "GMT+8") + @JsonProperty("end_time") + private Date endTime; + + /** + * 订单id + */ + @JsonProperty("order_id") + private Long orderId; + + /** + * 抵扣价格 + */ + private BigDecimal price; + + /** + * 满多少才可以使用 + */ + @JsonProperty("condition_price") + private BigDecimal conditionPrice; + + +} diff --git a/xdclass-coupon-service/src/main/java/net/jieyuu/vo/CouponVO.java b/xdclass-coupon-service/src/main/java/net/jieyuu/vo/CouponVO.java index 289c601..0249e56 100644 --- a/xdclass-coupon-service/src/main/java/net/jieyuu/vo/CouponVO.java +++ b/xdclass-coupon-service/src/main/java/net/jieyuu/vo/CouponVO.java @@ -1,7 +1,5 @@ package net.jieyuu.vo; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data;