优惠券列表

pull/1/head
wqy 2 years ago
parent 15f2c82bd7
commit cdf0ebe536

@ -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<GenTable> tableList = genTableService.selectGenTableByName(tableNames);

@ -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<Page<CouponActivityVO>> list(@RequestBody CouponActivityQuery query, Pageable page) {
return ResponseEntity.ok(service.selectList(query, page));
}
@ApiOperation("获取优惠券活动表详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<CouponActivity> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
}
@ApiOperation("新增优惠券活动表")
@Log(title = "优惠券活动表", businessType = BusinessType.INSERT)
@PostMapping
public ResponseEntity<Integer> add(@RequestBody CouponActivity couponActivity) {
return ResponseEntity.ok(service.insert(couponActivity));
}
@ApiOperation("修改优惠券活动表")
@Log(title = "优惠券活动表", businessType = BusinessType.UPDATE)
@PutMapping
public ResponseEntity<Integer> edit(@RequestBody CouponActivity couponActivity) {
return ResponseEntity.ok(service.update(couponActivity));
}
@ApiOperation("删除优惠券活动表")
@Log(title = "优惠券活动表", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
}
}

@ -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<Page<MemberCouponVO>> list(@RequestBody MemberCouponQuery query, Pageable page) {
return ResponseEntity.ok(service.selectList(query, page));
}
@ApiOperation("获取用户领券记录详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<MemberCoupon> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
}
@ApiOperation("新增用户领券记录")
@Log(title = "用户领券记录", businessType = BusinessType.INSERT)
@PostMapping
public ResponseEntity<Integer> add(@RequestBody MemberCoupon memberCoupon) {
return ResponseEntity.ok(service.insert(memberCoupon));
}
@ApiOperation("修改用户领券记录")
@Log(title = "用户领券记录", businessType = BusinessType.UPDATE)
@PutMapping
public ResponseEntity<Integer> edit(@RequestBody MemberCoupon memberCoupon) {
return ResponseEntity.ok(service.update(memberCoupon));
}
@ApiOperation("删除用户领券记录")
@Log(title = "用户领券记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
}
}

@ -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<CouponActivityVO> dos2vos(List<CouponActivity> list);
}

@ -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<MemberCouponVO> dos2vos(List<MemberCoupon> list);
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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<Product> productList;
private Integer useCount;
}

@ -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;
}

@ -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<CouponActivity> {
/**
*
*
* @param couponActivity
* @return
*/
List<CouponActivity> selectByEntity(CouponActivity couponActivity);
}

@ -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<MemberCoupon> {
/**
*
*
* @param memberCoupon
* @return
*/
List<MemberCoupon> selectByEntity(MemberCoupon memberCoupon);
List<CouponActivityVO> countUseCoupon(@Param("couponIds") Collection<Long> couponIds);
}

@ -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<CouponActivityVO> selectList(CouponActivityQuery query, Pageable page) {
PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
QueryWrapper<CouponActivity> 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<CouponActivity> list = couponActivityMapper.selectList(qw);
if (CollectionUtil.isEmpty(list)) {
return new PageImpl<>(Collections.emptyList(), page, 0);
}
long total = ((com.github.pagehelper.Page) list).getTotal();
List<CouponActivityVO> resList = new ArrayList<>();
//查找已使用张数
Map<Long, Integer> useCountMap = memberCouponMapper.countUseCoupon((list.stream().map(it -> it.getId()).collect(Collectors.toSet())))
.stream().collect(Collectors.toMap(it -> it.getId(), it -> it.getUseCount()));
Set<Long> 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<Long, Product> 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<Product> 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);
}
}

@ -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<MemberCouponVO> selectList(MemberCouponQuery query, Pageable page) {
PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
QueryWrapper<MemberCoupon> 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<MemberCoupon> list = memberCouponMapper.selectList(qw);
long total = ((com.github.pagehelper.Page) list).getTotal();
if (total < 1) {
return new PageImpl<>(Collections.emptyList(), page, total);
}
List<MemberCouponVO> resList = new ArrayList<>();
Set<Long> memberIds = list.stream().map(it -> it.getMemberId()).collect(Collectors.toSet());
Map<Long, Member> memberMap = memberMapper.selectList(new QueryWrapper<Member>().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);
}
}

@ -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<Long> excludeProductIds;
}

@ -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);
}

@ -0,0 +1,45 @@
<?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.cyl.manager.act.mapper.CouponActivityMapper">
<resultMap type="CouponActivity" id="CouponActivityResult">
<result property="id" column="id"/>
<result property="title" column="title"/>
<result property="useScope" column="use_scope"/>
<result property="productIds" column="product_ids"/>
<result property="totalCount" column="total_count"/>
<result property="leftCount" column="left_count"/>
<result property="userLimit" column="user_limit"/>
<result property="couponAmount" column="coupon_amount"/>
<result property="minAmount" column="min_amount"/>
<result property="useIntegral" column="use_integral"/>
<result property="couponType" column="coupon_type"/>
<result property="beginTime" column="begin_time"/>
<result property="endTime" column="end_time"/>
<result property="createTime" column="create_time"/>
</resultMap>
<sql id="selectCouponActivityVo">
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
</sql>
<select id="selectByEntity" parameterType="CouponActivity" resultMap="CouponActivityResult">
<include refid="selectCouponActivityVo"/>
<where>
<if test="title != null and title != ''"> and title = #{title}</if>
<if test="useScope != null "> and use_scope = #{useScope}</if>
<if test="productIds != null and productIds != ''"> and product_ids = #{productIds}</if>
<if test="totalCount != null "> and total_count = #{totalCount}</if>
<if test="leftCount != null "> and left_count = #{leftCount}</if>
<if test="userLimit != null "> and user_limit = #{userLimit}</if>
<if test="couponAmount != null "> and coupon_amount = #{couponAmount}</if>
<if test="minAmount != null "> and min_amount = #{minAmount}</if>
<if test="useIntegral != null "> and use_integral = #{useIntegral}</if>
<if test="couponType != null "> and coupon_type = #{couponType}</if>
<if test="beginTime != null "> and begin_time = #{beginTime}</if>
<if test="endTime != null "> and end_time = #{endTime}</if>
</where>
</select>
</mapper>

@ -0,0 +1,59 @@
<?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.cyl.manager.act.mapper.MemberCouponMapper">
<resultMap type="MemberCoupon" id="MemberCouponResult">
<result property="id" column="id"/>
<result property="couponActivityId" column="coupon_activity_id"/>
<result property="memberId" column="member_id"/>
<result property="title" column="title"/>
<result property="useScope" column="use_scope"/>
<result property="productIds" column="product_ids"/>
<result property="couponAmount" column="coupon_amount"/>
<result property="minAmount" column="min_amount"/>
<result property="useIntegral" column="use_integral"/>
<result property="couponType" column="coupon_type"/>
<result property="beginTime" column="begin_time"/>
<result property="endTime" column="end_time"/>
<result property="useStatus" column="use_status"/>
<result property="orderId" column="order_id"/>
<result property="useTime" column="use_time"/>
<result property="createTime" column="create_time"/>
</resultMap>
<sql id="selectMemberCouponVo">
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
</sql>
<select id="selectByEntity" parameterType="MemberCoupon" resultMap="MemberCouponResult">
<include refid="selectMemberCouponVo"/>
<where>
<if test="couponActivityId != null "> and coupon_activity_id = #{couponActivityId}</if>
<if test="memberId != null "> and member_id = #{memberId}</if>
<if test="title != null and title != ''"> and title = #{title}</if>
<if test="useScope != null "> and use_scope = #{useScope}</if>
<if test="productIds != null and productIds != ''"> and product_ids = #{productIds}</if>
<if test="couponAmount != null "> and coupon_amount = #{couponAmount}</if>
<if test="minAmount != null "> and min_amount = #{minAmount}</if>
<if test="useIntegral != null "> and use_integral = #{useIntegral}</if>
<if test="couponType != null "> and coupon_type = #{couponType}</if>
<if test="beginTime != null "> and begin_time = #{beginTime}</if>
<if test="endTime != null "> and end_time = #{endTime}</if>
<if test="useStatus != null "> and use_status = #{useStatus}</if>
<if test="orderId != null "> and order_id = #{orderId}</if>
<if test="useTime != null "> and use_time = #{useTime}</if>
</where>
</select>
<select id="countUseCoupon" resultType="com.cyl.manager.act.domain.vo.CouponActivityVO">
select coupon_activity_id as id,count(1) as useCount
from act_member_coupon
where coupon_activity_id in
<foreach collection="couponIds" close=")" index="index" item="item" open="(" separator=",">
#{item}
</foreach>
and use_status = 1
group by coupon_activity_id
</select>
</mapper>

@ -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='积分流水表';
Loading…
Cancel
Save