diff --git a/ruoyi-generator/src/test/java/com/ruoyi/generator/ApplicationTest.java b/ruoyi-generator/src/test/java/com/ruoyi/generator/ApplicationTest.java index 35fdc6e..603cf97 100644 --- a/ruoyi-generator/src/test/java/com/ruoyi/generator/ApplicationTest.java +++ b/ruoyi-generator/src/test/java/com/ruoyi/generator/ApplicationTest.java @@ -39,7 +39,8 @@ public class ApplicationTest { // "oms_order_operate_history", // "oms_aftersale", // "oms_aftersale_item" - "act_integral_history" + "act_coupon_activity", + "act_member_coupon" ); // 查询表信息 List tableList = genTableService.selectGenTableByName(tableNames); diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/act/controller/CouponActivityController.java b/ruoyi-mall/src/main/java/com/cyl/manager/act/controller/CouponActivityController.java new file mode 100644 index 0000000..7b2beb1 --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/act/controller/CouponActivityController.java @@ -0,0 +1,77 @@ +package com.cyl.manager.act.controller; + +import java.util.List; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Page; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.enums.BusinessType; +import com.cyl.manager.act.convert.CouponActivityConvert; +import com.cyl.manager.act.domain.entity.CouponActivity; +import com.cyl.manager.act.domain.query.CouponActivityQuery; +import com.cyl.manager.act.service.CouponActivityService; +import com.cyl.manager.act.domain.vo.CouponActivityVO; +import com.ruoyi.common.utils.poi.ExcelUtil; +/** + * 优惠券活动表Controller + * + * @author zcc + * @date 2024-03-22 + */ +@Api(description ="优惠券活动表接口列表") +@RestController +@RequestMapping("/act/couponActivity") +public class CouponActivityController extends BaseController { + @Autowired + private CouponActivityService service; + @Autowired + private CouponActivityConvert convert; + + @ApiOperation("查询优惠券活动表列表") + @PostMapping("/list") + public ResponseEntity> list(@RequestBody CouponActivityQuery query, Pageable page) { + return ResponseEntity.ok(service.selectList(query, page)); + } + + @ApiOperation("获取优惠券活动表详细信息") + @GetMapping(value = "/{id}") + public ResponseEntity getInfo(@PathVariable("id") Long id) { + return ResponseEntity.ok(service.selectById(id)); + } + + @ApiOperation("新增优惠券活动表") + @Log(title = "优惠券活动表", businessType = BusinessType.INSERT) + @PostMapping + public ResponseEntity add(@RequestBody CouponActivity couponActivity) { + return ResponseEntity.ok(service.insert(couponActivity)); + } + + @ApiOperation("修改优惠券活动表") + @Log(title = "优惠券活动表", businessType = BusinessType.UPDATE) + @PutMapping + public ResponseEntity edit(@RequestBody CouponActivity couponActivity) { + return ResponseEntity.ok(service.update(couponActivity)); + } + + @ApiOperation("删除优惠券活动表") + @Log(title = "优惠券活动表", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public ResponseEntity remove(@PathVariable Long id) { + return ResponseEntity.ok(service.deleteById(id)); + } +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/act/controller/MemberCouponController.java b/ruoyi-mall/src/main/java/com/cyl/manager/act/controller/MemberCouponController.java new file mode 100644 index 0000000..ee4a238 --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/act/controller/MemberCouponController.java @@ -0,0 +1,77 @@ +package com.cyl.manager.act.controller; + +import java.util.List; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Page; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.enums.BusinessType; +import com.cyl.manager.act.convert.MemberCouponConvert; +import com.cyl.manager.act.domain.entity.MemberCoupon; +import com.cyl.manager.act.domain.query.MemberCouponQuery; +import com.cyl.manager.act.service.MemberCouponService; +import com.cyl.manager.act.domain.vo.MemberCouponVO; +import com.ruoyi.common.utils.poi.ExcelUtil; +/** + * 用户领券记录Controller + * + * @author zcc + * @date 2024-03-22 + */ +@Api(description ="用户领券记录接口列表") +@RestController +@RequestMapping("/act/memberCoupon") +public class MemberCouponController extends BaseController { + @Autowired + private MemberCouponService service; + @Autowired + private MemberCouponConvert convert; + + @ApiOperation("查询用户领券记录列表") + @PostMapping("/list") + public ResponseEntity> list(@RequestBody MemberCouponQuery query, Pageable page) { + return ResponseEntity.ok(service.selectList(query, page)); + } + + @ApiOperation("获取用户领券记录详细信息") + @GetMapping(value = "/{id}") + public ResponseEntity getInfo(@PathVariable("id") Long id) { + return ResponseEntity.ok(service.selectById(id)); + } + + @ApiOperation("新增用户领券记录") + @Log(title = "用户领券记录", businessType = BusinessType.INSERT) + @PostMapping + public ResponseEntity add(@RequestBody MemberCoupon memberCoupon) { + return ResponseEntity.ok(service.insert(memberCoupon)); + } + + @ApiOperation("修改用户领券记录") + @Log(title = "用户领券记录", businessType = BusinessType.UPDATE) + @PutMapping + public ResponseEntity edit(@RequestBody MemberCoupon memberCoupon) { + return ResponseEntity.ok(service.update(memberCoupon)); + } + + @ApiOperation("删除用户领券记录") + @Log(title = "用户领券记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public ResponseEntity remove(@PathVariable Long id) { + return ResponseEntity.ok(service.deleteById(id)); + } +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/act/convert/CouponActivityConvert.java b/ruoyi-mall/src/main/java/com/cyl/manager/act/convert/CouponActivityConvert.java new file mode 100644 index 0000000..d74b7f9 --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/act/convert/CouponActivityConvert.java @@ -0,0 +1,16 @@ +package com.cyl.manager.act.convert; + +import org.mapstruct.Mapper; +import com.cyl.manager.act.domain.entity.CouponActivity; +import com.cyl.manager.act.domain.vo.CouponActivityVO; +import java.util.List; +/** + * 优惠券活动表 DO <=> DTO <=> VO / BO / Query + * + * @author zcc + */ +@Mapper(componentModel = "spring") +public interface CouponActivityConvert { + + List dos2vos(List list); +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/act/convert/MemberCouponConvert.java b/ruoyi-mall/src/main/java/com/cyl/manager/act/convert/MemberCouponConvert.java new file mode 100644 index 0000000..f61508f --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/act/convert/MemberCouponConvert.java @@ -0,0 +1,16 @@ +package com.cyl.manager.act.convert; + +import org.mapstruct.Mapper; +import com.cyl.manager.act.domain.entity.MemberCoupon; +import com.cyl.manager.act.domain.vo.MemberCouponVO; +import java.util.List; +/** + * 用户领券记录 DO <=> DTO <=> VO / BO / Query + * + * @author zcc + */ +@Mapper(componentModel = "spring") +public interface MemberCouponConvert { + + List dos2vos(List list); +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/entity/CouponActivity.java b/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/entity/CouponActivity.java new file mode 100644 index 0000000..c91822f --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/entity/CouponActivity.java @@ -0,0 +1,82 @@ +package com.cyl.manager.act.domain.entity; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 优惠券活动表对象 act_coupon_activity + * + * @author zcc + */ +@ApiModel(description="优惠券活动表对象") +@Data +@TableName("act_coupon_activity") +public class CouponActivity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("ID") + private Long id; + + @ApiModelProperty("活动名称") + @Excel(name = "活动名称") + private String title; + + @ApiModelProperty("使用范围 1全场通用 2指定商品可用 3指定商品不可用") + @Excel(name = "使用范围 1全场通用 2指定商品可用 3指定商品不可用") + private Integer useScope; + + @ApiModelProperty("商品id集合,逗号分隔") + @Excel(name = "商品id集合,逗号分隔") + private String productIds; + + @ApiModelProperty("发行总数") + @Excel(name = "发行总数") + private Integer totalCount; + + @ApiModelProperty("剩余总数") + @Excel(name = "剩余总数") + private Integer leftCount; + + @ApiModelProperty("每人限领") + @Excel(name = "每人限领") + private Integer userLimit; + + @ApiModelProperty("优惠券金额") + @Excel(name = "优惠券金额") + private BigDecimal couponAmount; + + @ApiModelProperty("最低消费金额") + @Excel(name = "最低消费金额") + private BigDecimal minAmount; + + @ApiModelProperty("要兑换的积分") + @Excel(name = "要兑换的积分") + private BigDecimal useIntegral; + + @ApiModelProperty("1免费兑换 2积分兑换") + @Excel(name = "1免费兑换 2积分兑换") + private Integer couponType; + + @ApiModelProperty("活动开始时间") + @Excel(name = "活动开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime beginTime; + + @ApiModelProperty("活动结束时间") + @Excel(name = "活动结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime endTime; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("修改时间") + private LocalDateTime updateTime; + +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/entity/MemberCoupon.java b/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/entity/MemberCoupon.java new file mode 100644 index 0000000..cb3f51d --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/entity/MemberCoupon.java @@ -0,0 +1,83 @@ +package com.cyl.manager.act.domain.entity; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 用户领券记录对象 act_member_coupon + * + * @author zcc + */ +@ApiModel(description="用户领券记录对象") +@Data +@TableName("act_member_coupon") +public class MemberCoupon { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("ID") + private Long id; + + @ApiModelProperty("活动id") + @Excel(name = "活动id") + private Long couponActivityId; + + @ApiModelProperty("用户id") + @Excel(name = "用户id") + private Long memberId; + + @ApiModelProperty("活动名称") + @Excel(name = "活动名称") + private String title; + + @ApiModelProperty("使用范围 1全场通用 2指定商品可用 3指定商品不可用") + @Excel(name = "使用范围 1全场通用 2指定商品可用 3指定商品不可用") + private Integer useScope; + + @ApiModelProperty("商品id集合,逗号分隔") + @Excel(name = "商品id集合,逗号分隔") + private String productIds; + + @ApiModelProperty("优惠券金额") + @Excel(name = "优惠券金额") + private BigDecimal couponAmount; + + @ApiModelProperty("最低消费金额") + @Excel(name = "最低消费金额") + private BigDecimal minAmount; + + @ApiModelProperty("要兑换的积分") + @Excel(name = "要兑换的积分") + private BigDecimal useIntegral; + + @ApiModelProperty("1免费兑换 2积分兑换") + @Excel(name = "1免费兑换 2积分兑换") + private Integer couponType; + + @ApiModelProperty("券开始时间") + @Excel(name = "券开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime beginTime; + + @ApiModelProperty("券结束时间") + @Excel(name = "券结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime endTime; + + @ApiModelProperty("0未使用 1已使用") + @Excel(name = "0未使用 1已使用") + private Integer useStatus; + + @ApiModelProperty("订单id") + @Excel(name = "订单id") + private Long orderId; + + @ApiModelProperty("使用时间") + @Excel(name = "使用时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime useTime; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/query/CouponActivityQuery.java b/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/query/CouponActivityQuery.java new file mode 100644 index 0000000..1f95855 --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/query/CouponActivityQuery.java @@ -0,0 +1,27 @@ +package com.cyl.manager.act.domain.query; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import lombok.Data; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 优惠券活动表 查询 对象 + * + * @author zcc + */ +@ApiModel(description="优惠券活动表 查询 对象") +@Data +public class CouponActivityQuery { + @ApiModelProperty("活动名称 精确匹配") + private String title; + + @ApiModelProperty("使用范围 1全场通用 2指定商品可用 3指定商品不可用 精确匹配") + private Integer useScope; + + + @ApiModelProperty("1免费兑换 2积分兑换 精确匹配") + private Integer couponType; + +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/query/MemberCouponQuery.java b/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/query/MemberCouponQuery.java new file mode 100644 index 0000000..731b3f6 --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/query/MemberCouponQuery.java @@ -0,0 +1,27 @@ +package com.cyl.manager.act.domain.query; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import lombok.Data; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 用户领券记录 查询 对象 + * + * @author zcc + */ +@ApiModel(description="用户领券记录 查询 对象") +@Data +public class MemberCouponQuery { + @ApiModelProperty("活动id 精确匹配") + private Long couponActivityId; + + @ApiModelProperty("用户id 精确匹配") + private Long memberId; + + @ApiModelProperty("0未使用 1已使用 精确匹配") + private Integer useStatus; + + +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/vo/CouponActivityVO.java b/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/vo/CouponActivityVO.java new file mode 100644 index 0000000..0ebd274 --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/vo/CouponActivityVO.java @@ -0,0 +1,97 @@ +package com.cyl.manager.act.domain.vo; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +import com.cyl.manager.pms.domain.entity.Product; +import com.ruoyi.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +/** + * 优惠券活动表 数据视图对象 + * + * @author zcc + */ +@Data +public class CouponActivityVO { + /** + * ID + */ + private Long id; + /** + * 活动名称 + */ + @Excel(name = "活动名称") + private String title; + /** + * 使用范围 1全场通用 2指定商品可用 3指定商品不可用 + */ + @Excel(name = "使用范围 1全场通用 2指定商品可用 3指定商品不可用") + private Integer useScope; + /** + * 商品id集合,逗号分隔 + */ + @Excel(name = "商品id集合,逗号分隔") + private String productIds; + /** + * 发行总数 + */ + @Excel(name = "发行总数") + private Integer totalCount; + /** + * 剩余总数 + */ + @Excel(name = "剩余总数") + private Integer leftCount; + /** + * 每人限领 + */ + @Excel(name = "每人限领") + private Integer userLimit; + /** + * 优惠券金额 + */ + @Excel(name = "优惠券金额") + private BigDecimal couponAmount; + /** + * 最低消费金额 + */ + @Excel(name = "最低消费金额") + private BigDecimal minAmount; + /** + * 要兑换的积分 + */ + @Excel(name = "要兑换的积分") + private BigDecimal useIntegral; + /** + * 1免费兑换 2积分兑换 + */ + @Excel(name = "1免费兑换 2积分兑换") + private Integer couponType; + /** + * 活动开始时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "活动开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime beginTime; + /** + * 活动结束时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "活动结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime endTime; + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + + private List productList; + + private Integer useCount; +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/vo/MemberCouponVO.java b/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/vo/MemberCouponVO.java new file mode 100644 index 0000000..0848236 --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/act/domain/vo/MemberCouponVO.java @@ -0,0 +1,70 @@ +package com.cyl.manager.act.domain.vo; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import com.ruoyi.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +/** + * 用户领券记录 数据视图对象 + * + * @author zcc + */ +@Data +public class MemberCouponVO { + /** ID */ + private Long id; + /** 活动id */ + @Excel(name = "活动id") + private Long couponActivityId; + /** 用户id */ + @Excel(name = "用户id") + private Long memberId; + /** 活动名称 */ + @Excel(name = "活动名称") + private String title; + /** 使用范围 1全场通用 2指定商品可用 3指定商品不可用 */ + @Excel(name = "使用范围 1全场通用 2指定商品可用 3指定商品不可用") + private Integer useScope; + /** 商品id集合,逗号分隔 */ + @Excel(name = "商品id集合,逗号分隔") + private String productIds; + /** 优惠券金额 */ + @Excel(name = "优惠券金额") + private BigDecimal couponAmount; + /** 最低消费金额 */ + @Excel(name = "最低消费金额") + private BigDecimal minAmount; + /** 要兑换的积分 */ + @Excel(name = "要兑换的积分") + private BigDecimal useIntegral; + /** 1免费兑换 2积分兑换 */ + @Excel(name = "1免费兑换 2积分兑换") + private Integer couponType; + /** 券开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "券开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime beginTime; + /** 券结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "券结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime endTime; + /** 0未使用 1已使用 */ + @Excel(name = "0未使用 1已使用") + private Integer useStatus; + /** 订单id */ + @Excel(name = "订单id") + private Long orderId; + /** 使用时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "使用时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime useTime; + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + private String nickname; + private String phone; + private String avatar; + +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/act/mapper/CouponActivityMapper.java b/ruoyi-mall/src/main/java/com/cyl/manager/act/mapper/CouponActivityMapper.java new file mode 100644 index 0000000..c0da5fa --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/act/mapper/CouponActivityMapper.java @@ -0,0 +1,20 @@ +package com.cyl.manager.act.mapper; + +import java.util.List; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cyl.manager.act.domain.entity.CouponActivity; + +/** + * 优惠券活动表Mapper接口 + * + * @author zcc + */ +public interface CouponActivityMapper extends BaseMapper { + /** + * 查询优惠券活动表列表 + * + * @param couponActivity 优惠券活动表 + * @return 优惠券活动表集合 + */ + List selectByEntity(CouponActivity couponActivity); +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/act/mapper/MemberCouponMapper.java b/ruoyi-mall/src/main/java/com/cyl/manager/act/mapper/MemberCouponMapper.java new file mode 100644 index 0000000..fe2d5bb --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/act/mapper/MemberCouponMapper.java @@ -0,0 +1,27 @@ +package com.cyl.manager.act.mapper; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Stream; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cyl.manager.act.domain.entity.MemberCoupon; +import com.cyl.manager.act.domain.vo.CouponActivityVO; +import org.apache.ibatis.annotations.Param; + +/** + * 用户领券记录Mapper接口 + * + * @author zcc + */ +public interface MemberCouponMapper extends BaseMapper { + /** + * 查询用户领券记录列表 + * + * @param memberCoupon 用户领券记录 + * @return 用户领券记录集合 + */ + List selectByEntity(MemberCoupon memberCoupon); + + List countUseCoupon(@Param("couponIds") Collection couponIds); +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/act/service/CouponActivityService.java b/ruoyi-mall/src/main/java/com/cyl/manager/act/service/CouponActivityService.java new file mode 100644 index 0000000..c63226d --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/act/service/CouponActivityService.java @@ -0,0 +1,149 @@ +package com.cyl.manager.act.service; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.cyl.manager.act.domain.entity.MemberCoupon; +import com.cyl.manager.act.domain.vo.CouponActivityVO; +import com.cyl.manager.act.mapper.MemberCouponMapper; +import com.cyl.manager.pms.domain.entity.Product; +import com.cyl.manager.pms.mapper.ProductMapper; +import com.github.pagehelper.PageHelper; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import com.cyl.manager.act.mapper.CouponActivityMapper; +import com.cyl.manager.act.domain.entity.CouponActivity; +import com.cyl.manager.act.domain.query.CouponActivityQuery; + +/** + * 优惠券活动表Service业务层处理 + * + * @author zcc + */ +@Service +public class CouponActivityService { + @Autowired + private CouponActivityMapper couponActivityMapper; + @Autowired + private MemberCouponMapper memberCouponMapper; + @Autowired + private ProductMapper productMapper; + + /** + * 查询优惠券活动表 + * + * @param id 优惠券活动表主键 + * @return 优惠券活动表 + */ + public CouponActivity selectById(Long id) { + return couponActivityMapper.selectById(id); + } + + /** + * 查询优惠券活动表列表 + * + * @param query 查询条件 + * @param page 分页条件 + * @return 优惠券活动表 + */ + public Page selectList(CouponActivityQuery query, Pageable page) { + PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize()); + QueryWrapper qw = new QueryWrapper<>(); + String title = query.getTitle(); + if (!StringUtils.isEmpty(title)) { + qw.like("title", "%".concat(title.trim()).concat("%")); + } + Integer useScope = query.getUseScope(); + if (useScope != null) { + qw.eq("use_scope", useScope); + } + Integer couponType = query.getCouponType(); + if (couponType != null) { + qw.eq("coupon_type", couponType); + } + List list = couponActivityMapper.selectList(qw); + if (CollectionUtil.isEmpty(list)) { + return new PageImpl<>(Collections.emptyList(), page, 0); + } + long total = ((com.github.pagehelper.Page) list).getTotal(); + List resList = new ArrayList<>(); + //查找已使用张数 + Map useCountMap = memberCouponMapper.countUseCoupon((list.stream().map(it -> it.getId()).collect(Collectors.toSet()))) + .stream().collect(Collectors.toMap(it -> it.getId(), it -> it.getUseCount())); + Set productIds = new HashSet<>(); + list.stream().filter(it -> Arrays.asList(2, 3).contains(it.getUseScope()) && StringUtils.isNotEmpty(it.getProductIds())) + .forEach(it -> { + productIds.addAll(Arrays.stream(it.getProductIds().split(",")).map(item -> Long.parseLong(item)).collect(Collectors.toSet())); + }); + //查找商品列表 + Map productMap = new HashMap<>(); + if (productIds.size() > 0) { + productMap = productMapper.selectBatchIds(productIds).stream().collect(Collectors.toMap(it->it.getId(),it->it)); + } + for (CouponActivity couponActivity : list) { + CouponActivityVO vo = new CouponActivityVO(); + BeanUtils.copyProperties(couponActivity,vo); + Integer integer = useCountMap.get(couponActivity.getId()); + vo.setUseCount(integer == null ? 0 : integer); + if (Arrays.asList(2, 3).contains(couponActivity.getUseScope()) && StringUtils.isNotEmpty(couponActivity.getProductIds())){ + List products = new ArrayList<>(); + for (String s : couponActivity.getProductIds().split(",")) { + Product product = productMap.get(Long.parseLong(s)); + if (product != null) { + products.add(product); + } + } + vo.setProductList(products); + } + resList.add(vo); + } + return new PageImpl<>(resList, page, total); + } + + /** + * 新增优惠券活动表 + * + * @param couponActivity 优惠券活动表 + * @return 结果 + */ + public int insert(CouponActivity couponActivity) { + couponActivity.setLeftCount(couponActivity.getTotalCount()); + couponActivity.setCreateTime(LocalDateTime.now()); + return couponActivityMapper.insert(couponActivity); + } + + /** + * 修改优惠券活动表 + * + * @param couponActivity 优惠券活动表 + * @return 结果 + */ + public int update(CouponActivity couponActivity) { + CouponActivity dbActivity = couponActivityMapper.selectById(couponActivity.getId()); + if (dbActivity==null) { + return 0; + } + couponActivity.setLeftCount(dbActivity.getLeftCount()); + couponActivity.setUpdateTime(LocalDateTime.now()); + return couponActivityMapper.updateById(couponActivity); + } + + /** + * 删除优惠券活动表信息 + * + * @param id 优惠券活动表主键 + * @return 结果 + */ + public int deleteById(Long id) { + return couponActivityMapper.deleteById(id); + } +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/act/service/MemberCouponService.java b/ruoyi-mall/src/main/java/com/cyl/manager/act/service/MemberCouponService.java new file mode 100644 index 0000000..5a908ee --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/act/service/MemberCouponService.java @@ -0,0 +1,125 @@ +package com.cyl.manager.act.service; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.cyl.manager.act.domain.vo.MemberCouponVO; +import com.cyl.manager.ums.domain.entity.Member; +import com.cyl.manager.ums.mapper.MemberMapper; +import com.github.pagehelper.PageHelper; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import com.cyl.manager.act.mapper.MemberCouponMapper; +import com.cyl.manager.act.domain.entity.MemberCoupon; +import com.cyl.manager.act.domain.query.MemberCouponQuery; + +/** + * 用户领券记录Service业务层处理 + * + * + * @author zcc + */ +@Service +public class MemberCouponService { + @Autowired + private MemberCouponMapper memberCouponMapper; + @Autowired + private MemberMapper memberMapper; + + /** + * 查询用户领券记录 + * + * @param id 用户领券记录主键 + * @return 用户领券记录 + */ + public MemberCoupon selectById(Long id) { + return memberCouponMapper.selectById(id); + } + + /** + * 查询用户领券记录列表 + * + * @param query 查询条件 + * @param page 分页条件 + * @return 用户领券记录 + */ + public Page selectList(MemberCouponQuery query, Pageable page) { + + PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize()); + QueryWrapper qw = new QueryWrapper<>(); + Long couponActivityId = query.getCouponActivityId(); + if (couponActivityId != null) { + qw.eq("coupon_activity_id", couponActivityId); + } + Long memberId = query.getMemberId(); + if (memberId != null) { + qw.eq("member_id", memberId); + } + Integer useStatus = query.getUseStatus(); + if (useStatus != null) { + qw.eq("use_status", useStatus); + } + List list = memberCouponMapper.selectList(qw); + + long total = ((com.github.pagehelper.Page) list).getTotal(); + if (total < 1) { + return new PageImpl<>(Collections.emptyList(), page, total); + } + List resList = new ArrayList<>(); + Set memberIds = list.stream().map(it -> it.getMemberId()).collect(Collectors.toSet()); + Map memberMap = memberMapper.selectList(new QueryWrapper().in("id", memberIds)) + .stream().collect(Collectors.toMap(it -> it.getId(), it -> it)); + for (MemberCoupon it : list) { + MemberCouponVO vo = new MemberCouponVO(); + BeanUtils.copyProperties(it, vo); + Member member = memberMap.get(it.getMemberId()); + if (member != null) { + vo.setNickname(member.getNickname()); + vo.setPhone(member.getPhoneHidden()); + vo.setAvatar(member.getAvatar()); + } + resList.add(vo); + } + + return new PageImpl<>(resList, page, total); + } + + /** + * 新增用户领券记录 + * + * @param memberCoupon 用户领券记录 + * @return 结果 + */ + public int insert(MemberCoupon memberCoupon) { + memberCoupon.setCreateTime(LocalDateTime.now()); + return memberCouponMapper.insert(memberCoupon); + } + + /** + * 修改用户领券记录 + * + * @param memberCoupon 用户领券记录 + * @return 结果 + */ + public int update(MemberCoupon memberCoupon) { + return memberCouponMapper.updateById(memberCoupon); + } + + /** + * 删除用户领券记录信息 + * + * @param id 用户领券记录主键 + * @return 结果 + */ + public int deleteById(Long id) { + return memberCouponMapper.deleteById(id); + } +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/pms/domain/query/ProductQuery.java b/ruoyi-mall/src/main/java/com/cyl/manager/pms/domain/query/ProductQuery.java index d294446..342ca39 100644 --- a/ruoyi-mall/src/main/java/com/cyl/manager/pms/domain/query/ProductQuery.java +++ b/ruoyi-mall/src/main/java/com/cyl/manager/pms/domain/query/ProductQuery.java @@ -1,6 +1,7 @@ package com.cyl.manager.pms.domain.query; import java.math.BigDecimal; +import java.util.List; import lombok.Data; import io.swagger.annotations.ApiModel; @@ -71,4 +72,7 @@ public class ProductQuery { @ApiModelProperty("搜索关键字") private String search; + //排查的id + private List excludeProductIds; + } diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/pms/service/ProductService.java b/ruoyi-mall/src/main/java/com/cyl/manager/pms/service/ProductService.java index 4ad979f..c570caf 100644 --- a/ruoyi-mall/src/main/java/com/cyl/manager/pms/service/ProductService.java +++ b/ruoyi-mall/src/main/java/com/cyl/manager/pms/service/ProductService.java @@ -95,6 +95,9 @@ public class ProductService { if (StringUtils.isNoneEmpty(search)){ qw.like("name", "%".concat(query.getSearch().trim()).concat("%")); } + if (CollectionUtil.isNotEmpty(query.getExcludeProductIds())) { + qw.notIn("id",query.getExcludeProductIds()); + } return productMapper.selectList(qw); } diff --git a/ruoyi-mall/src/main/resources/mapper/act/CouponActivityMapper.xml b/ruoyi-mall/src/main/resources/mapper/act/CouponActivityMapper.xml new file mode 100644 index 0000000..c17b6a3 --- /dev/null +++ b/ruoyi-mall/src/main/resources/mapper/act/CouponActivityMapper.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + select id, title, use_scope, product_ids, total_count, left_count, user_limit, coupon_amount, min_amount, use_integral, coupon_type, begin_time, end_time, create_time from act_coupon_activity + + + + diff --git a/ruoyi-mall/src/main/resources/mapper/act/MemberCouponMapper.xml b/ruoyi-mall/src/main/resources/mapper/act/MemberCouponMapper.xml new file mode 100644 index 0000000..9cd8a5a --- /dev/null +++ b/ruoyi-mall/src/main/resources/mapper/act/MemberCouponMapper.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + select id, coupon_activity_id, member_id, title, use_scope, product_ids, coupon_amount, min_amount, use_integral, coupon_type, begin_time, end_time, use_status, order_id, use_time, create_time from act_member_coupon + + + + + diff --git a/sql/database-20240322.sql b/sql/database-20240322.sql new file mode 100644 index 0000000..b358ec5 --- /dev/null +++ b/sql/database-20240322.sql @@ -0,0 +1,32 @@ +CREATE TABLE `act_coupon_activity` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `title` varchar(255) NOT NULL COMMENT '活动名称', + `use_scope` int(11) NOT NULL COMMENT '使用范围 1全场通用 2指定商品可用 3指定商品不可用', + `product_ids` varchar(255) DEFAULT NULL COMMENT '商品id集合,逗号分隔', + `total_count` int(11) NOT NULL COMMENT '发行总数', + `left_count` int(11) NOT NULL COMMENT '剩余总数', + `user_limit` int(11) NOT NULL COMMENT '每人限领', + `coupon_amount` decimal(10, 2) NOT NULL COMMENT '优惠券金额', + `min_amount` decimal(10, 2) DEFAULT NULL COMMENT '最低消费金额', + `use_integral` decimal(10, 2) DEFAULT NULL COMMENT '要兑换的积分', + `coupon_type` int(11) NOT NULL DEFAULT '1' COMMENT '1免费兑换 2积分兑换', + `begin_time` datetime(3) NOT NULL COMMENT '活动开始时间', + `end_time` datetime(3) NOT NULL COMMENT '活动结束时间', + `create_time` datetime(3) DEFAULT NULL COMMENT '创建时间', + `update_time` datetime(3) DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优惠券活动表'; + +CREATE TABLE `act_integral_history` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `member_id` bigint(20) NOT NULL, + `amount` decimal(10, 2) NOT NULL COMMENT '变动金额', + `op_type` int(11) NOT NULL COMMENT '类型 1:收入 2:支出 3:其他', + `sub_op_type` int(11) DEFAULT NULL COMMENT '子类型:11签到 12消费获得 21退款扣除积分', + `order_amount` decimal(10, 2) DEFAULT NULL COMMENT '订单金额', + `order_id` bigint(20) DEFAULT NULL COMMENT '订单id', + `create_time` datetime(3) DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=87 DEFAULT CHARSET=utf8mb4 COMMENT='积分流水表'; \ No newline at end of file