diff --git a/src/main/java/com/cultural/heritage/controller/address/ContactsController.java b/src/main/java/com/cultural/heritage/controller/address/ContactsController.java new file mode 100644 index 0000000..2088062 --- /dev/null +++ b/src/main/java/com/cultural/heritage/controller/address/ContactsController.java @@ -0,0 +1,24 @@ +package com.cultural.heritage.controller.address; + +import com.cultural.heritage.service.address.ContactsService; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/contacts") +@Slf4j +@Tag(name = "联系人接口") +public class ContactsController { + + + @Resource + private ContactsService contactsService; + + + + +} diff --git a/src/main/java/com/cultural/heritage/controller/good/CouponController.java b/src/main/java/com/cultural/heritage/controller/good/CouponController.java index 3526030..600c00d 100644 --- a/src/main/java/com/cultural/heritage/controller/good/CouponController.java +++ b/src/main/java/com/cultural/heritage/controller/good/CouponController.java @@ -12,13 +12,20 @@ import com.cultural.heritage.model.dto.CommonRequest; import com.cultural.heritage.model.dto.coupon.CouponAddRequest; import com.cultural.heritage.model.dto.coupon.CouponQueryRequest; import com.cultural.heritage.model.dto.coupon.CouponUpdateRequest; +import com.cultural.heritage.model.dto.exchange.ExchangeAddRequest; import com.cultural.heritage.model.entity.Coupon; +import com.cultural.heritage.model.entity.Exchange; +import com.cultural.heritage.model.entity.User; +import com.cultural.heritage.model.entity.UserCoupon; import com.cultural.heritage.service.good.CouponService; +import com.cultural.heritage.service.good.ExchangeService; +import com.cultural.heritage.service.good.UserCouponService; import com.cultural.heritage.service.user.UserService; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.xml.transform.Result; @@ -39,6 +46,14 @@ public class CouponController { private UserService userService; + @Resource + private UserCouponService userCouponService; + + + @Resource + private ExchangeService exchangeService; + + /** * 添加优惠券 * @param couponAddRequest 优惠券添加请求体 @@ -113,8 +128,63 @@ public class CouponController { } + /** + * 积分兑换优惠券 + * @param exchangeAddRequest 兑换记录添加请求体 + * @return 是否兑换成功 + */ + @PostMapping("/exchange") + @Transactional + public BaseResponse<Boolean> pointsExchangeCoupon(@RequestBody ExchangeAddRequest exchangeAddRequest) { + if (exchangeAddRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + // 更新用户积分 + Long userId = exchangeAddRequest.getUserId(); + Integer requirePoints = exchangeAddRequest.getRequirePoints(); + Integer quantity = exchangeAddRequest.getQuantity(); + if (userId <= 0) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + User user = userService.getById(userId); + ThrowUtils.throwIf(user == null, ErrorCode.NOT_FOUND_ERROR); + int residual = user.getPoints() - requirePoints * quantity; + if (residual < 0) { + throw new BusinessException(ErrorCode.OPERATION_ERROR, "积分不足"); + } + user.setPoints(residual); + boolean save = userService.updateById(user); + ThrowUtils.throwIf(!save, ErrorCode.OPERATION_ERROR); + // 插入一条兑换记录 + Exchange exchange = new Exchange(); + BeanUtils.copyProperties(exchangeAddRequest, exchange); + boolean result = exchangeService.save(exchange); + ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR); + //给当前用户添加优惠券 + UserCoupon userCoupon = new UserCoupon(); + BeanUtils.copyProperties(exchangeAddRequest, userCoupon); + boolean couponResult = userCouponService.save(userCoupon); + ThrowUtils.throwIf(!couponResult, ErrorCode.OPERATION_ERROR); + return ResultUtils.success(true, "兑换成功"); + } + /** + * 用户删除兑换记录 + * @param commonRequest 兑换记录删除请求体 + * @return 是否兑换成功 + */ + @PostMapping("/delRecord") + public BaseResponse<Boolean> deleteExchangeRecord(@RequestBody CommonRequest commonRequest) { + if (commonRequest == null || commonRequest.getId() <= 0) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + Long id = commonRequest.getId(); + boolean result = exchangeService.removeById(id); + ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR); + return ResultUtils.success(true, "删除兑换记录成功"); + } + } diff --git a/src/main/java/com/cultural/heritage/mapper/ContactsMapper.java b/src/main/java/com/cultural/heritage/mapper/ContactsMapper.java new file mode 100644 index 0000000..54a4c9e --- /dev/null +++ b/src/main/java/com/cultural/heritage/mapper/ContactsMapper.java @@ -0,0 +1,7 @@ +package com.cultural.heritage.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cultural.heritage.model.entity.Contacts; + +public interface ContactsMapper extends BaseMapper<Contacts> { +} diff --git a/src/main/java/com/cultural/heritage/mapper/ExchangeMapper.java b/src/main/java/com/cultural/heritage/mapper/ExchangeMapper.java new file mode 100644 index 0000000..5dd7b27 --- /dev/null +++ b/src/main/java/com/cultural/heritage/mapper/ExchangeMapper.java @@ -0,0 +1,7 @@ +package com.cultural.heritage.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cultural.heritage.model.entity.Exchange; + +public interface ExchangeMapper extends BaseMapper<Exchange> { +} diff --git a/src/main/java/com/cultural/heritage/mapper/UserCouponMapper.java b/src/main/java/com/cultural/heritage/mapper/UserCouponMapper.java new file mode 100644 index 0000000..c153c23 --- /dev/null +++ b/src/main/java/com/cultural/heritage/mapper/UserCouponMapper.java @@ -0,0 +1,8 @@ +package com.cultural.heritage.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cultural.heritage.model.entity.UserCoupon; + +public interface UserCouponMapper extends BaseMapper<UserCoupon> { + +} diff --git a/src/main/java/com/cultural/heritage/model/dto/exchange/ExchangeAddRequest.java b/src/main/java/com/cultural/heritage/model/dto/exchange/ExchangeAddRequest.java new file mode 100644 index 0000000..fbd027b --- /dev/null +++ b/src/main/java/com/cultural/heritage/model/dto/exchange/ExchangeAddRequest.java @@ -0,0 +1,42 @@ +package com.cultural.heritage.model.dto.exchange; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + +/** + * 积分兑换优惠券请求 + */ +@Data +public class ExchangeAddRequest implements Serializable { + + + /** + * 用户id + */ + private Long userId; + + /** + * 优惠券id + */ + private Long couponId; + + /** + * 数量 + */ + private Integer quantity; + + /** + * 优惠券积分价格 + */ + private Integer requirePoints; + + + @Serial + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/cultural/heritage/model/entity/Address.java b/src/main/java/com/cultural/heritage/model/entity/Address.java index d781909..8052a46 100644 --- a/src/main/java/com/cultural/heritage/model/entity/Address.java +++ b/src/main/java/com/cultural/heritage/model/entity/Address.java @@ -10,8 +10,8 @@ import java.io.Serializable; import java.util.Date; /** - * 地址表 - * @TableName address + * 地址 + * @TableName address */ @Data @TableName("address") diff --git a/src/main/java/com/cultural/heritage/model/entity/Category.java b/src/main/java/com/cultural/heritage/model/entity/Category.java index 2165be2..179ebb6 100644 --- a/src/main/java/com/cultural/heritage/model/entity/Category.java +++ b/src/main/java/com/cultural/heritage/model/entity/Category.java @@ -11,8 +11,8 @@ import java.io.Serializable; import java.util.Date; /** - * 商品类别表 - * @TableName category + * 商品类别 + * @TableName category */ @Data @TableName("category") diff --git a/src/main/java/com/cultural/heritage/model/entity/Contacts.java b/src/main/java/com/cultural/heritage/model/entity/Contacts.java new file mode 100644 index 0000000..70ea6d6 --- /dev/null +++ b/src/main/java/com/cultural/heritage/model/entity/Contacts.java @@ -0,0 +1,67 @@ +package com.cultural.heritage.model.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 联系人 + * @TableName contacts + */ +@Data +@TableName("contacts") +public class Contacts implements Serializable { + + /** + * 联系人id + */ + @TableId(type = IdType.AUTO) + private Long id; + + + /** + * 联系人姓名 + */ + private String name; + + + /** + * 联系人手机号 + */ + private String phone; + + + /** + * 用户id + */ + private Long userId; + + /** + * 是否默认 + */ + private Integer isDefault; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 是否删除 + */ + private Integer isDelete; + + + @Serial + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/cultural/heritage/model/entity/Coupon.java b/src/main/java/com/cultural/heritage/model/entity/Coupon.java index 4414792..a69cc44 100644 --- a/src/main/java/com/cultural/heritage/model/entity/Coupon.java +++ b/src/main/java/com/cultural/heritage/model/entity/Coupon.java @@ -12,7 +12,7 @@ import java.io.Serializable; import java.util.Date; /** - * 优惠券列表 + * 优惠券 * @TableName coupon */ @Data diff --git a/src/main/java/com/cultural/heritage/model/entity/Exchange.java b/src/main/java/com/cultural/heritage/model/entity/Exchange.java new file mode 100644 index 0000000..84b7995 --- /dev/null +++ b/src/main/java/com/cultural/heritage/model/entity/Exchange.java @@ -0,0 +1,67 @@ +package com.cultural.heritage.model.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 积分兑换记录 + * @TableName exchange_record + */ +@Data +@TableName("exchange_record") +public class Exchange implements Serializable { + + + /** + * 兑换记录id + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 用户id + */ + private Long userId; + + /** + * 优惠券id + */ + private Long couponId; + + /** + * 数量 + */ + private Integer quantity; + + /** + * 优惠券积分价格 + */ + private Integer requirePoints; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + + /** + * 是否删除 + */ + private Integer isDelete; + + + + @Serial + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/cultural/heritage/model/entity/Good.java b/src/main/java/com/cultural/heritage/model/entity/Good.java index 77d7113..9394c20 100644 --- a/src/main/java/com/cultural/heritage/model/entity/Good.java +++ b/src/main/java/com/cultural/heritage/model/entity/Good.java @@ -11,7 +11,7 @@ import java.io.Serial; import java.util.Date; /** - * 商品表 + * 商品 * @TableName good */ @TableName(value = "good") diff --git a/src/main/java/com/cultural/heritage/model/entity/User.java b/src/main/java/com/cultural/heritage/model/entity/User.java index d8942f4..2c7524b 100644 --- a/src/main/java/com/cultural/heritage/model/entity/User.java +++ b/src/main/java/com/cultural/heritage/model/entity/User.java @@ -11,7 +11,7 @@ import java.io.Serializable; import java.util.Date; /** - * 用户表 + * 用户 * @TableName user */ @TableName(value = "user") diff --git a/src/main/java/com/cultural/heritage/model/entity/UserCoupon.java b/src/main/java/com/cultural/heritage/model/entity/UserCoupon.java new file mode 100644 index 0000000..11eee30 --- /dev/null +++ b/src/main/java/com/cultural/heritage/model/entity/UserCoupon.java @@ -0,0 +1,55 @@ +package com.cultural.heritage.model.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 用户优惠券表 + * @TableName user_coupon + */ +@Data +@TableName("user_coupon") +public class UserCoupon implements Serializable { + + /** + * id + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 用户id + */ + private Long userId; + + /** + * 优惠券id + */ + private Long couponId; + + /** + * 优惠券状态(0, 1, 2分别代表未使用,已使用,已过期) + */ + private Integer status; + + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + + @Serial + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/cultural/heritage/service/address/ContactsService.java b/src/main/java/com/cultural/heritage/service/address/ContactsService.java new file mode 100644 index 0000000..d1121ad --- /dev/null +++ b/src/main/java/com/cultural/heritage/service/address/ContactsService.java @@ -0,0 +1,7 @@ +package com.cultural.heritage.service.address; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.cultural.heritage.model.entity.Contacts; + +public interface ContactsService extends IService<Contacts> { +} diff --git a/src/main/java/com/cultural/heritage/service/address/impl/ContactsServiceImpl.java b/src/main/java/com/cultural/heritage/service/address/impl/ContactsServiceImpl.java new file mode 100644 index 0000000..bb6b82f --- /dev/null +++ b/src/main/java/com/cultural/heritage/service/address/impl/ContactsServiceImpl.java @@ -0,0 +1,12 @@ +package com.cultural.heritage.service.address.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cultural.heritage.mapper.ContactsMapper; +import com.cultural.heritage.model.entity.Contacts; +import com.cultural.heritage.service.address.ContactsService; +import org.springframework.stereotype.Service; + +@Service +public class ContactsServiceImpl extends ServiceImpl<ContactsMapper, Contacts> implements ContactsService { + +} diff --git a/src/main/java/com/cultural/heritage/service/good/ExchangeService.java b/src/main/java/com/cultural/heritage/service/good/ExchangeService.java new file mode 100644 index 0000000..d9e9bbd --- /dev/null +++ b/src/main/java/com/cultural/heritage/service/good/ExchangeService.java @@ -0,0 +1,7 @@ +package com.cultural.heritage.service.good; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.cultural.heritage.model.entity.Exchange; + +public interface ExchangeService extends IService<Exchange> { +} diff --git a/src/main/java/com/cultural/heritage/service/good/UserCouponService.java b/src/main/java/com/cultural/heritage/service/good/UserCouponService.java new file mode 100644 index 0000000..220bc28 --- /dev/null +++ b/src/main/java/com/cultural/heritage/service/good/UserCouponService.java @@ -0,0 +1,7 @@ +package com.cultural.heritage.service.good; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.cultural.heritage.model.entity.UserCoupon; + +public interface UserCouponService extends IService<UserCoupon> { +} diff --git a/src/main/java/com/cultural/heritage/service/good/impl/ExchangeServiceImpl.java b/src/main/java/com/cultural/heritage/service/good/impl/ExchangeServiceImpl.java new file mode 100644 index 0000000..9b9ea23 --- /dev/null +++ b/src/main/java/com/cultural/heritage/service/good/impl/ExchangeServiceImpl.java @@ -0,0 +1,11 @@ +package com.cultural.heritage.service.good.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cultural.heritage.mapper.ExchangeMapper; +import com.cultural.heritage.model.entity.Exchange; +import com.cultural.heritage.service.good.ExchangeService; +import org.springframework.stereotype.Service; + +@Service +public class ExchangeServiceImpl extends ServiceImpl<ExchangeMapper, Exchange> implements ExchangeService{ +} diff --git a/src/main/java/com/cultural/heritage/service/good/impl/UserCouponServiceImpl.java b/src/main/java/com/cultural/heritage/service/good/impl/UserCouponServiceImpl.java new file mode 100644 index 0000000..82ff262 --- /dev/null +++ b/src/main/java/com/cultural/heritage/service/good/impl/UserCouponServiceImpl.java @@ -0,0 +1,11 @@ +package com.cultural.heritage.service.good.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cultural.heritage.mapper.UserCouponMapper; +import com.cultural.heritage.model.entity.UserCoupon; +import com.cultural.heritage.service.good.UserCouponService; +import org.springframework.stereotype.Service; + +@Service +public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCoupon> implements UserCouponService { +} diff --git a/src/main/resources/mapper/ContactsMapper.xml b/src/main/resources/mapper/ContactsMapper.xml new file mode 100644 index 0000000..cddfd61 --- /dev/null +++ b/src/main/resources/mapper/ContactsMapper.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.cultural.heritage.mapper.ContactsMapper"> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/ExchangeMapper.xml b/src/main/resources/mapper/ExchangeMapper.xml new file mode 100644 index 0000000..aa91bdb --- /dev/null +++ b/src/main/resources/mapper/ExchangeMapper.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.cultural.heritage.mapper.ExchangeMapper"> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/UserCouponMapper.xml b/src/main/resources/mapper/UserCouponMapper.xml new file mode 100644 index 0000000..109cd9e --- /dev/null +++ b/src/main/resources/mapper/UserCouponMapper.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.cultural.heritage.mapper.UserCouponMapper"> + +</mapper> \ No newline at end of file