Commit 837abe1b 837abe1be04d6f7f173fdd2998d3960a90097859 by xianghan

1.优化

1 parent 76303f7f
Showing 150 changed files with 2336 additions and 1983 deletions
package com.topdraw.business.module.common.domain;
import com.topdraw.business.module.common.validated.UpdateGroup;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
/**
* @author :
......@@ -16,12 +18,13 @@ import javax.persistence.Transient;
*/
@Data
@Accessors(chain = true)
public class DefaultAsyncMqModule {
@Transient
private String platformAccount;
public class AsyncMqModule {
@Transient
@NotNull(message = "memberCode can't be null" , groups = {UpdateGroup.class})
private String memberCode;
/** 运营商平台账号 */
@Transient
private String platformAccount;
}
......
package com.topdraw.business.module.common.validated;
/**
* @author :
* @description:
* @function :
* @date :Created in 2022/3/7 21:20
* @version: :
* @modified By:
* @since : modified in 2022/3/7 21:20
*/
public interface CreateGroup {
}
package com.topdraw.business.module.common.validated;
/**
* @author :
* @description:
* @function :
* @date :Created in 2022/3/7 21:20
* @version: :
* @modified By:
* @since : modified in 2022/3/7 21:20
*/
public interface UpdateGroup {
}
......@@ -12,6 +12,7 @@ import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
* @author XiangHan
......@@ -24,94 +25,94 @@ import java.sql.Timestamp;
@Table(name="m_coupon")
public class Coupon implements Serializable {
// id
/** id */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 标识
/** 标识 */
@Column(name = "code", nullable = false)
private String code;
// 名称
/** 名称 */
@Column(name = "title", nullable = false)
private String title;
// 图片
/** 图片 */
@Column(name = "images")
private String images;
// 发行量,-1代表不限量
/** 发行量,-1代表不限量 */
@Column(name = "stock")
private Integer stock;
// 剩余量,-1代表不限量
/** 剩余量,-1代表不限量 */
@Column(name = "remain_stock")
private Integer remainStock;
// 优惠形式:1:现金;2:折扣
/** 优惠形式:1:现金;2:折扣 */
@Column(name = "use_type")
private Integer useType;
// 面额
/** 面额 */
@Column(name = "denomination")
private BigDecimal denomination;
// 折扣
/** 折扣 */
@Column(name = "discount")
private BigDecimal discount;
// 适用用户范围:1:新用户;2:全体用户
/** 适用用户范围:1:新用户;2:全体用户 */
@Column(name = "user_range")
private Integer userRange;
// 限领次数 -1:无限次; >0:具体次数
/** 限领次数 -1:无限次; >0:具体次数 */
@Column(name = "collect_limit")
private Integer collectLimit;
// 适用门槛:1:无门槛;2:满减形式
/** 适用门槛:1:无门槛;2:满减形式 */
@Column(name = "threshold_type")
private Integer thresholdType;
// 满减门槛
/** 满减门槛 */
@Column(name = "amount_threshold")
private BigDecimal amountThreshold;
// 产品范围:1:全部商品;2:指定商品
/** 产品范围:1:全部商品;2:指定商品 */
@Column(name = "item_range")
private Integer itemRange;
// 生效形式:1:固定日期;2:相对日期
/** 生效形式:1:固定日期;2:相对日期 */
@Column(name = "effect_type")
private Integer effectType;
// 生效时间
/** 生效时间 */
@Column(name = "start_time")
private Timestamp startTime;
// 过期时间
/** 过期时间 */
@Column(name = "expire_time")
private Timestamp expireTime;
private LocalDateTime expireTime;
// 自领取当日,几天内有效
/** 自领取当日,几天内有效 */
@Column(name = "valid_days")
private Integer validDays;
// 使用说明
/** 使用说明 */
@Column(name = "description")
private String description;
// 状态0:未开始,1:启用;2:停用
/** 状态0:未开始,1:启用;2:停用 */
@Column(name = "status")
private Integer status;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
......
package com.topdraw.business.module.coupon.domain;
import com.topdraw.business.module.coupon.service.dto.CouponDTO;
import com.topdraw.util.IdWorker;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.Objects;
/**
* 优惠券
*/
public class CouponBuilder {
public static Coupon build(CouponDTO couponDTO){
Coupon coupon = new Coupon();
BeanUtils.copyProperties(couponDTO,coupon);
return build(coupon.getId(),
coupon.getCode(),
coupon.getTitle(),coupon.getImages(),coupon.getStock(),coupon.getRemainStock(),coupon.getUseType(),
coupon.getDenomination(),coupon.getDiscount(),coupon.getUserRange(),coupon.getCollectLimit(),
coupon.getThresholdType(),coupon.getAmountThreshold(),coupon.getItemRange(),coupon.getEffectType(),
coupon.getStartTime(),coupon.getExpireTime(),coupon.getValidDays(),coupon.getDescription(),coupon.getStatus());
}
public static Coupon build(Coupon coupon){
return build(coupon.getId(),
coupon.getCode(),
coupon.getTitle(),coupon.getImages(),coupon.getStock(),coupon.getRemainStock(),coupon.getUseType(),
coupon.getDenomination(),coupon.getDiscount(),coupon.getUserRange(),coupon.getCollectLimit(),
coupon.getThresholdType(),coupon.getAmountThreshold(),coupon.getItemRange(),coupon.getEffectType(),
coupon.getStartTime(),coupon.getExpireTime(),coupon.getValidDays(),coupon.getDescription(),coupon.getStatus());
}
public static Coupon build(Long id , String code , String title,
String images,
Integer stock,
Integer remainStock,
Integer useType,
BigDecimal denomination,
BigDecimal discount,
Integer userRange,
Integer collectLimit,
Integer thresholdType,
BigDecimal amountThreshold,
Integer itemRange,
Integer effectType,
Timestamp startTime,
LocalDateTime expireTime,
Integer validDays,String description , Integer status){
Coupon coupon = new Coupon();
coupon.setId(id);
coupon.setCode(StringUtils.isBlank(code)? IdWorker.generatorCode("coupon"):code);
coupon.setTitle(StringUtils.isBlank(title)?null:title);
coupon.setImages(StringUtils.isBlank(images)?null:images);
coupon.setStock(Objects.isNull(stock)?null:stock);
coupon.setRemainStock(Objects.isNull(remainStock)?null:remainStock);
coupon.setUseType(Objects.isNull(useType)?null:useType);
coupon.setDenomination(Objects.isNull(denomination)?null:denomination);
coupon.setDiscount(Objects.isNull(discount)?null:discount);
coupon.setUserRange(Objects.isNull(userRange)?null:userRange);
coupon.setCollectLimit(collectLimit);
coupon.setThresholdType(Objects.isNull(thresholdType)?null:thresholdType);
coupon.setAmountThreshold(Objects.isNull(amountThreshold)?null:amountThreshold);
coupon.setItemRange(Objects.isNull(itemRange)?null:itemRange);
coupon.setEffectType(Objects.isNull(effectType)?null:effectType);
coupon.setStartTime(Objects.isNull(startTime)?null: startTime);
coupon.setExpireTime(Objects.isNull(expireTime)?null:expireTime);
coupon.setValidDays(validDays);
coupon.setDescription(StringUtils.isBlank(description)?"":description);
coupon.setStatus(Objects.nonNull(status)?status:0);
return coupon;
}
}
......@@ -10,7 +10,6 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
......@@ -24,54 +23,54 @@ import java.time.LocalDateTime;
@Table(name="m_coupon_history")
public class CouponHistory implements Serializable {
// 主键
/** 主键 */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 优惠券id
/** 优惠券id */
@Column(name = "coupon_id")
private Long couponId;
// 领券用户id(对应账号)
/** 领券用户id(对应账号) */
@Column(name = "user_id")
private Long userId;
// 优惠券code
/** 优惠券code */
@Column(name = "coupon_code")
private String couponCode;
// 领取人昵称
/** 领取人昵称 */
@Column(name = "user_nickname")
private String userNickname;
// 领取时间
/** 领取时间 */
@Column(name = "receive_time")
private LocalDateTime receiveTime;
// 失效时间
/** 失效时间 */
@Column(name = "expire_time")
private LocalDateTime expireTime;
// 使用状态 0:未使用;1:已使用;-1:已过期
/** 使用状态 0:未使用;1:已使用;-1:已过期 */
@Column(name = "use_status")
private Integer useStatus;
// 使用时间
/** 使用时间 */
@Column(name = "use_time")
private LocalDateTime useTime;
// 订单详情id
/** 订单详情id */
@Column(name = "order_detail_id")
private Long orderDetailId;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private LocalDateTime createTime;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private LocalDateTime updateTime;
......
package com.topdraw.business.module.coupon.history.domain;
import com.topdraw.business.module.coupon.domain.Coupon;
import org.apache.commons.lang3.StringUtils;
import java.time.LocalDateTime;
import java.util.Objects;
/**
* 优惠券
*/
public class CouponHistoryBuilder {
public static CouponHistory build(CouponHistory couponHistory){
return build(couponHistory.getId(),
couponHistory.getCouponId(),
couponHistory.getUserId(),
couponHistory.getCouponCode(),
couponHistory.getUserNickname(),
couponHistory.getReceiveTime(),
couponHistory.getExpireTime(),
couponHistory.getUseStatus(),
couponHistory.getUseTime(),
couponHistory.getOrderDetailId());
}
public static CouponHistory build(Coupon coupon, Long userId, String userNickname){
return build(coupon,userId,userNickname,null);
}
public static CouponHistory build(Coupon coupon, Long userId, String userNickname, Long orderDetailId){
return build(null,
coupon.getId(),userId,coupon.getCode(),userNickname,LocalDateTime.now(),
coupon.getExpireTime(),coupon.getStatus(),null,orderDetailId);
}
public static CouponHistory build(Long id , Long couponId , Long userId, String couponCode, String userNickname, LocalDateTime receiveTime,
LocalDateTime expireTime, Integer useStatus, LocalDateTime useTime,
Long orderDetailId) {
CouponHistory couponHistory = new CouponHistory();
couponHistory.setId(id);
couponHistory.setCouponId(Objects.isNull(couponId)?null:couponId);
couponHistory.setUserId(Objects.isNull(userId)?null:userId);
couponHistory.setCouponCode(StringUtils.isBlank(couponCode)?null:couponCode);
couponHistory.setUserNickname(StringUtils.isBlank(userNickname)?null:userNickname);
couponHistory.setReceiveTime(Objects.isNull(receiveTime)?null:receiveTime);
couponHistory.setExpireTime(Objects.isNull(expireTime)?null:expireTime);
couponHistory.setUseStatus(Objects.isNull(useStatus)?0:useStatus);
couponHistory.setUseTime(Objects.isNull(useTime)?null:useTime);
couponHistory.setOrderDetailId(Objects.isNull(orderDetailId)?null:orderDetailId);
return couponHistory;
}
}
......@@ -4,7 +4,6 @@ import com.topdraw.business.module.coupon.history.domain.CouponHistory;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
......
......@@ -2,13 +2,8 @@ package com.topdraw.business.module.coupon.history.service;
import com.topdraw.business.module.coupon.history.domain.CouponHistory;
import com.topdraw.business.module.coupon.history.service.dto.CouponHistoryDTO;
import com.topdraw.business.module.coupon.history.service.dto.CouponHistoryQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -16,20 +11,6 @@ import java.util.Map;
*/
public interface CouponHistoryService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(CouponHistoryQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<CouponHistoryDTO>
*/
List<CouponHistoryDTO> queryAll(CouponHistoryQueryCriteria criteria);
/**
* 根据ID查询
......@@ -38,15 +19,33 @@ public interface CouponHistoryService {
*/
CouponHistoryDTO findById(Long id);
/**
*
* @param resources
*/
void create(CouponHistory resources);
void update(CouponHistory resources);
void delete(Long id);
/**
*
* @param userId
* @return
*/
Long countByUserId(Long userId);
/**
*
* @param userId
* @param now
* @return
*/
Long countByUserIdAndExpireTimeBefore(Long userId, LocalDateTime now);
/**
*
* @param userId
* @param now
* @param expireTime
* @return
*/
Long countByUserIdAndExpireTimeBetween(Long userId, LocalDateTime now, LocalDateTime expireTime);
}
......
......@@ -3,7 +3,6 @@ package com.topdraw.business.module.coupon.history.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
......@@ -14,39 +13,39 @@ import java.time.LocalDateTime;
@Data
public class CouponHistoryDTO implements Serializable {
// 主键
/** 主键 */
private Long id;
// 优惠券id
/** 优惠券id */
private Long couponId;
// 领券用户id(对应账号)
/** 领券用户id(对应账号) */
private Long userId;
// 优惠券code
/** 优惠券code */
private String couponCode;
// 领取人昵称
/** 领取人昵称 */
private String userNickname;
// 领取时间
/** 领取时间 */
private LocalDateTime receiveTime;
// 失效时间
/** 失效时间 */
private LocalDateTime expireTime;
// 使用状态 0:未使用;1:已使用;-1:已过期
/** 使用状态 0:未使用;1:已使用;-1:已过期 */
private Integer useStatus;
// 使用时间
/** 使用时间 */
private LocalDateTime useTime;
// 订单详情id
/** 订单详情id */
private Long orderDetailId;
// 创建时间
/** 创建时间 */
private LocalDateTime createTime;
// 更新时间
/** 更新时间 */
private LocalDateTime updateTime;
}
......
package com.topdraw.business.module.coupon.history.service.impl;
import com.topdraw.business.module.coupon.history.domain.CouponHistory;
import com.topdraw.business.module.coupon.history.domain.CouponHistoryBuilder;
import com.topdraw.business.module.coupon.history.repository.CouponHistoryRepository;
import com.topdraw.business.module.coupon.history.service.CouponHistoryService;
import com.topdraw.business.module.coupon.history.service.dto.CouponHistoryDTO;
import com.topdraw.business.module.coupon.history.service.dto.CouponHistoryQueryCriteria;
import com.topdraw.business.module.coupon.history.service.mapper.CouponHistoryMapper;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -32,67 +23,38 @@ import java.util.Map;
public class CouponHistoryServiceImpl implements CouponHistoryService {
@Autowired
private CouponHistoryRepository CouponHistoryRepository;
private CouponHistoryMapper couponHistoryMapper;
@Autowired
private CouponHistoryMapper CouponHistoryMapper;
@Override
public Map<String, Object> queryAll(CouponHistoryQueryCriteria criteria, Pageable pageable) {
Page<CouponHistory> page = CouponHistoryRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(CouponHistoryMapper::toDto));
}
private CouponHistoryRepository couponHistoryRepository;
@Override
public List<CouponHistoryDTO> queryAll(CouponHistoryQueryCriteria criteria) {
return CouponHistoryMapper.toDto(CouponHistoryRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
public CouponHistoryDTO findById(Long id) {
CouponHistory CouponHistory = CouponHistoryRepository.findById(id).orElseGet(CouponHistory::new);
ValidationUtil.isNull(CouponHistory.getId(),"CouponHistory","id",id);
return CouponHistoryMapper.toDto(CouponHistory);
CouponHistory couponHistory = this.couponHistoryRepository.findById(id).orElseGet(CouponHistory::new);
ValidationUtil.isNull(couponHistory.getId(),"CouponHistory","id",id);
return this.couponHistoryMapper.toDto(couponHistory);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(CouponHistory resources) {
CouponHistoryRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(CouponHistory resources) {
CouponHistory CouponHistory = CouponHistoryRepository.findById(resources.getId()).orElseGet(CouponHistory::new);
ValidationUtil.isNull( CouponHistory.getId(),"CouponHistory","id",resources.getId());
CouponHistory.copy(resources);
CouponHistoryRepository.save(CouponHistory);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
CouponHistory CouponHistory = CouponHistoryRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", CouponHistory.class, id), 1));
CouponHistoryRepository.delete(CouponHistory);
CouponHistory couponHistory = CouponHistoryBuilder.build(resources);
this.couponHistoryRepository.save(couponHistory);
}
@Override
public Long countByUserId(Long userId) {
return this.CouponHistoryRepository.countByUserId(userId);
return this.couponHistoryRepository.countByUserId(userId);
}
@Override
public Long countByUserIdAndExpireTimeBefore(Long userId, LocalDateTime now) {
return this.CouponHistoryRepository.countByUserIdAndExpireTimeBefore(userId,now);
return this.couponHistoryRepository.countByUserIdAndExpireTimeBefore(userId,now);
}
@Override
public Long countByUserIdAndExpireTimeBetween(Long userId, LocalDateTime now, LocalDateTime expireTime) {
return this.CouponHistoryRepository.countByUserIdAndExpireTimeBetween(userId,now,expireTime);
return this.couponHistoryRepository.countByUserIdAndExpireTimeBetween(userId,now,expireTime);
}
}
......
......@@ -13,4 +13,5 @@ import java.util.Optional;
public interface CouponRepository extends JpaRepository<Coupon, Long>, JpaSpecificationExecutor<Coupon> {
Optional<Coupon> findFirstByCode(String code);
}
......
package com.topdraw.business.module.coupon.service;
import com.topdraw.business.module.coupon.domain.Coupon;
import com.topdraw.business.module.coupon.service.dto.CouponDTO;
import com.topdraw.business.module.coupon.service.dto.CouponQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -15,37 +9,18 @@ import java.util.Map;
public interface CouponService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(CouponQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<CouponDTO>
*/
List<CouponDTO> queryAll(CouponQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return CouponDTO
*/
CouponDTO findById(Long id);
void create(Coupon resources);
void update(Coupon resources);
void delete(Long id);
/**
* Code校验
* @param code
* @return CouponDTO
*/
CouponDTO getByCode(String code);
}
......
......@@ -5,6 +5,7 @@ import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
......@@ -14,69 +15,69 @@ import java.sql.Timestamp;
@Data
public class CouponDTO implements Serializable {
// id
/** id */
private Long id;
// 标识
/** 标识 */
private String code;
// 名称
/** 名称 */
private String title;
// 图片
/** 图片 */
private String images;
// 发行量,-1代表不限量
/** 发行量,-1代表不限量 */
private Integer stock;
// 剩余量,-1代表不限量
/** 剩余量,-1代表不限量 */
private Integer remainStock;
// 优惠形式:1:现金;2:折扣
/** 优惠形式:1:现金;2:折扣 */
private Integer useType;
// 面额
/** 面额 */
private BigDecimal denomination;
// 折扣
/** 折扣 */
private BigDecimal discount;
// 适用用户范围:1:新用户;2:全体用户
/** 适用用户范围:1:新用户;2:全体用户 */
private Integer userRange;
// 限领次数 -1:无限次; >0:具体次数
/** 限领次数 -1:无限次; >0:具体次数 */
private Integer collectLimit;
// 适用门槛:1:无门槛;2:满减形式
/** 适用门槛:1:无门槛;2:满减形式 */
private Integer thresholdType;
// 满减门槛
/** 满减门槛 */
private BigDecimal amountThreshold;
// 产品范围:1:全部商品;2:指定商品
/** 产品范围:1:全部商品;2:指定商品 */
private Integer itemRange;
// 生效形式:1:固定日期;2:相对日期
/** 生效形式:1:固定日期;2:相对日期 */
private Integer effectType;
// 生效时间
/** 生效时间 */
private Timestamp startTime;
// 过期时间
private Timestamp expireTime;
/** 过期时间 */
private LocalDateTime expireTime;
// 自领取当日,几天内有效
/** 自领取当日,几天内有效 */
private Integer validDays;
// 使用说明
/** 使用说明 */
private String description;
// 状态0:未开始,1:启用;2:停用
/** 状态0:未开始,1:启用;2:停用 */
private Integer status;
// 创建时间
/** 创建时间 */
private Timestamp createTime;
// 更新时间
/** 更新时间 */
private Timestamp updateTime;
}
......
package com.topdraw.business.module.coupon.service.dto;
import lombok.Data;
/**
* @author XiangHan
* @date 2021-10-22
*/
@Data
public class CouponQueryCriteria{
}
......@@ -4,23 +4,16 @@ import com.topdraw.business.module.coupon.domain.Coupon;
import com.topdraw.business.module.coupon.repository.CouponRepository;
import com.topdraw.business.module.coupon.service.CouponService;
import com.topdraw.business.module.coupon.service.dto.CouponDTO;
import com.topdraw.business.module.coupon.service.dto.CouponQueryCriteria;
import com.topdraw.business.module.coupon.service.mapper.CouponMapper;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.exception.GlobeExceptionMsg;
import com.topdraw.utils.StringUtils;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -30,58 +23,24 @@ import java.util.Map;
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class CouponServiceImpl implements CouponService {
@Autowired
private CouponRepository CouponRepository;
@Autowired
private CouponMapper CouponMapper;
@Override
public Map<String, Object> queryAll(CouponQueryCriteria criteria, Pageable pageable) {
Page<Coupon> page = CouponRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(CouponMapper::toDto));
}
@Override
public List<CouponDTO> queryAll(CouponQueryCriteria criteria) {
return CouponMapper.toDto(CouponRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
private CouponMapper couponMapper;
@Autowired
private CouponRepository couponRepository;
@Override
public CouponDTO findById(Long id) {
Coupon Coupon = CouponRepository.findById(id).orElseGet(Coupon::new);
ValidationUtil.isNull(Coupon.getId(),"Coupon","id",id);
return CouponMapper.toDto(Coupon);
}
Assert.notNull(id, GlobeExceptionMsg.COUPON_ID_IS_NULL);
@Override
@Transactional(rollbackFor = Exception.class)
public void create(Coupon resources) {
CouponRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(Coupon resources) {
Coupon Coupon = CouponRepository.findById(resources.getId()).orElseGet(Coupon::new);
ValidationUtil.isNull( Coupon.getId(),"Coupon","id",resources.getId());
Coupon.copy(resources);
CouponRepository.save(Coupon);
Coupon coupon = this.couponRepository.findById(id).orElseGet(Coupon::new);
ValidationUtil.isNull(coupon.getId(),"Coupon","id",id);
return this.couponMapper.toDto(coupon);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
Coupon Coupon = CouponRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", Coupon.class, id), 1));
CouponRepository.delete(Coupon);
}
@Override
public CouponDTO getByCode(String code) {
return StringUtils.isNotEmpty(code) ? CouponMapper.toDto(CouponRepository.findFirstByCode(code).orElseGet(Coupon::new))
return StringUtils.isNotEmpty(code) ? this.couponMapper.toDto(this.couponRepository.findFirstByCode(code).orElseGet(Coupon::new))
: new CouponDTO();
}
}
......
......@@ -23,70 +23,70 @@ import java.sql.Timestamp;
@Table(name="uc_exp_detail")
public class ExpDetail implements Serializable {
// 主键
/** 主键 */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 标识
/** 标识 */
@Column(name = "code", nullable = false)
private String code;
// 应用code
/** 应用code */
@Column(name = "app_code")
private String appCode;
// 会员id
/** 会员id */
@Column(name = "member_id", nullable = false)
private Long memberId;
// 账号id
/** 账号id */
@Column(name = "account_id")
private Long accountId;
// 原始成长值
/** 原始成长值 */
@Column(name = "original_exp", nullable = false)
private Long originalExp;
// 结果成长值
/** 结果成长值 */
@Column(name = "result_exp", nullable = false)
private Long resultExp;
// 成长值变化,一般为正数
/** 成长值变化,一般为正数 */
@Column(name = "exp", nullable = false)
private Long exp;
// 设备类型 1:大屏;2:小屏(微信)3.小屏(xx)
/** 设备类型 1:大屏;2:小屏(微信)3.小屏(xx) */
@Column(name = "device_type", nullable = false)
private Integer deviceType;
// 行为事件类型 1:登录;2:观影;3:参与活动;4:订购;10:跨屏绑定;98:系统操作;99:其他
/** 行为事件类型 1:登录;2:观影;3:参与活动;4:订购;10:跨屏绑定;98:系统操作;99:其他 */
@Column(name = "evt_type", nullable = false)
private Integer evtType;
// 订单id(针对订购操作)
/** 订单id(针对订购操作) */
@Column(name = "order_id")
private Long orderId;
// 节目id(针对观影操作)
/** 节目id(针对观影操作) */
@Column(name = "media_id")
private Long mediaId;
// 活动id(针对参与活动)
/** 活动id(针对参与活动) */
@Column(name = "activity_id")
private Long activityId;
// 成长值变化描述,用于管理侧显示
/** 成长值变化描述,用于管理侧显示 */
@Column(name = "description", nullable = false)
private String description;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
......
package com.topdraw.business.module.exp.detail.domain;
import com.topdraw.exception.GlobeExceptionMsg;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.Assert;
import java.util.Objects;
public class ExpDetailBuilder {
public static ExpDetail build(Long memberId, Long originalExp, Long resultExp,
Integer deviceType, Integer evtType){
ExpDetail expDetail = new ExpDetail();
expDetail.setMemberId(memberId);
expDetail.setOriginalExp(originalExp);
expDetail.setResultExp(resultExp);
expDetail.setDeviceType(deviceType);
expDetail.setEvtType(evtType);
return build(expDetail);
}
public static ExpDetail build(ExpDetail expDetail){
return build(expDetail.getId(),
expDetail.getCode(),
expDetail.getAppCode(),
expDetail.getMemberId(),
expDetail.getAccountId(),
expDetail.getOriginalExp(),expDetail.getResultExp(),
expDetail.getExp(),expDetail.getDeviceType(),
expDetail.getEvtType(), expDetail.getOrderId(), expDetail.getMediaId(),
expDetail.getActivityId(),expDetail.getDescription());
}
public static ExpDetail build(Long id, String code,
String appCode, Long memberId, Long accountId,
Long originalExp, Long resultExp, Long exp,
Integer deviceType, Integer evtType, Long orderId,
Long mediaId, Long activityId, String description){
Assert.notNull(memberId, GlobeExceptionMsg.MEMBER_ID_IS_NULL);
ExpDetail expDetail = new ExpDetail();
expDetail.setId(Objects.isNull(id)?null:id);
expDetail.setCode(StringUtils.isBlank(code)?null:code);
expDetail.setAppCode(StringUtils.isBlank(appCode)?null:appCode);
expDetail.setMemberId(Objects.isNull(memberId)?null:memberId);
expDetail.setAccountId(Objects.isNull(accountId)?null:accountId);
expDetail.setOriginalExp(Objects.isNull(originalExp)?0:originalExp);
expDetail.setResultExp(Objects.isNull(resultExp)?0:resultExp);
expDetail.setExp(Objects.isNull(exp)?0:exp);
expDetail.setDeviceType(Objects.isNull(deviceType)?null:deviceType);
expDetail.setEvtType(Objects.isNull(evtType)?null:evtType);
expDetail.setOrderId(Objects.isNull(orderId)?null:orderId);
expDetail.setMediaId(Objects.isNull(mediaId)?null:mediaId);
expDetail.setActivityId(Objects.isNull(activityId)?null:activityId);
expDetail.setDescription(StringUtils.isBlank(description)?null:description);
return expDetail;
}
}
......@@ -2,11 +2,6 @@ package com.topdraw.business.module.exp.detail.service;
import com.topdraw.business.module.exp.detail.domain.ExpDetail;
import com.topdraw.business.module.exp.detail.service.dto.ExpDetailDTO;
import com.topdraw.business.module.exp.detail.service.dto.ExpDetailQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -15,31 +10,28 @@ import java.util.Map;
public interface ExpDetailService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(ExpDetailQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<ExpDetailDTO>
*/
List<ExpDetailDTO> queryAll(ExpDetailQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return ExpDetailDTO
*/
ExpDetailDTO findById(Long id);
/**
*
* @param resources
*/
void create(ExpDetail resources);
/**
*
* @param resources
*/
void update(ExpDetail resources);
/**
*
* @param id
*/
void delete(Long id);
/**
......
......@@ -13,51 +13,51 @@ import java.sql.Timestamp;
@Data
public class ExpDetailDTO implements Serializable {
// 主键
/** 主键 */
private Long id;
// 标识
/** 标识 */
private String code;
// 应用code
/** 应用code */
private String appCode;
// 会员id
/** 会员id */
private Long memberId;
// 账号id
/** 账号id */
private Long accountId;
// 原始成长值
/** 原始成长值 */
private Long originalExp;
// 结果成长值
/** 结果成长值 */
private Long resultExp;
// 成长值变化,一般为正数
/** 成长值变化,一般为正数 */
private Long exp;
// 设备类型 1:大屏;2:小屏(微信)3.小屏(xx)
/** 设备类型 1:大屏;2:小屏(微信)3.小屏(xx) */
private Integer deviceType;
// 行为事件类型 1:登录;2:观影;3:参与活动;4:订购;10:跨屏绑定;98:系统操作;99:其他
/** 行为事件类型 1:登录;2:观影;3:参与活动;4:订购;10:跨屏绑定;98:系统操作;99:其他 */
private Integer evtType;
// 订单id(针对订购操作)
/** 订单id(针对订购操作) */
private Long orderId;
// 节目id(针对观影操作)
/** 节目id(针对观影操作) */
private Long mediaId;
// 活动id(针对参与活动)
/** 活动id(针对参与活动) */
private Long activityId;
// 成长值变化描述,用于管理侧显示
/** 成长值变化描述,用于管理侧显示 */
private String description;
// 创建时间
/** 创建时间 */
private Timestamp createTime;
// 更新时间
/** 更新时间 */
private Timestamp updateTime;
}
......
package com.topdraw.business.module.exp.detail.service.dto;
import lombok.Data;
/**
* @author XiangHan
* @date 2021-10-22
*/
@Data
public class ExpDetailQueryCriteria{
}
package com.topdraw.business.module.exp.detail.service.impl;
import com.topdraw.business.module.exp.detail.domain.ExpDetail;
import com.topdraw.business.module.exp.detail.domain.ExpDetailBuilder;
import com.topdraw.business.module.exp.detail.repository.ExpDetailRepository;
import com.topdraw.business.module.exp.detail.service.ExpDetailService;
import com.topdraw.business.module.exp.detail.service.dto.ExpDetailDTO;
import com.topdraw.business.module.exp.detail.service.dto.ExpDetailQueryCriteria;
import com.topdraw.business.module.exp.detail.service.mapper.ExpDetailMapper;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.RedisUtils;
import com.topdraw.utils.StringUtils;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -31,57 +26,56 @@ import java.util.Map;
public class ExpDetailServiceImpl implements ExpDetailService {
@Autowired
private ExpDetailRepository ExpDetailRepository;
private ExpDetailRepository expDetailRepository;
@Autowired
private ExpDetailMapper ExpDetailMapper;
private ExpDetailMapper expDetailMapper;
@Override
public Map<String, Object> queryAll(ExpDetailQueryCriteria criteria, Pageable pageable) {
Page<ExpDetail> page = ExpDetailRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(ExpDetailMapper::toDto));
}
@Override
public List<ExpDetailDTO> queryAll(ExpDetailQueryCriteria criteria) {
return ExpDetailMapper.toDto(ExpDetailRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Autowired
private RedisUtils redisUtils;
@Override
public ExpDetailDTO findById(Long id) {
ExpDetail ExpDetail = ExpDetailRepository.findById(id).orElseGet(ExpDetail::new);
ExpDetail ExpDetail = this.expDetailRepository.findById(id).orElseGet(com.topdraw.business.module.exp.detail.domain.ExpDetail::new);
ValidationUtil.isNull(ExpDetail.getId(),"ExpDetail","id",id);
return ExpDetailMapper.toDto(ExpDetail);
return this.expDetailMapper.toDto(ExpDetail);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(ExpDetail resources) {
ExpDetailRepository.save(resources);
ExpDetail expDetail = ExpDetailBuilder.build(resources);
this.expDetailRepository.save(expDetail);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(ExpDetail resources) {
ExpDetail ExpDetail = ExpDetailRepository.findById(resources.getId()).orElseGet(ExpDetail::new);
this.redisUtils.doLock("expDetail::memberId::" + resources.getMemberId());
try {
ExpDetail ExpDetail = this.expDetailRepository.findById(resources.getId()).orElseGet(com.topdraw.business.module.exp.detail.domain.ExpDetail::new);
ValidationUtil.isNull( ExpDetail.getId(),"ExpDetail","id",resources.getId());
ExpDetail.copy(resources);
ExpDetailRepository.save(ExpDetail);
this.expDetailRepository.save(ExpDetail);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
this.redisUtils.doUnLock("expDetail::memberId::" + resources.getMemberId());
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
ExpDetail ExpDetail = ExpDetailRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", ExpDetail.class, id), 1));
ExpDetailRepository.delete(ExpDetail);
ExpDetail ExpDetail = this.expDetailRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", com.topdraw.business.module.exp.detail.domain.ExpDetail.class, id), 1));
this.expDetailRepository.delete(ExpDetail);
}
@Override
public ExpDetailDTO getByCode(String code) {
return StringUtils.isNotEmpty(code) ? ExpDetailMapper.toDto(ExpDetailRepository.findFirstByCode(code).orElseGet(ExpDetail::new))
return StringUtils.isNotEmpty(code) ? this.expDetailMapper.toDto(this.expDetailRepository.findFirstByCode(code).orElseGet(ExpDetail::new))
: new ExpDetailDTO();
}
}
......
package com.topdraw.business.module.exp.history.domain;
import com.topdraw.exception.GlobeExceptionMsg;
import com.topdraw.util.IdWorker;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.Assert;
import java.util.Objects;
public class ExpHistoryBuilder {
public ExpHistory build(Long memberId, Long originalExp, Long resultExp, Long exp,Integer deviceType , Integer evtType) {
ExpHistory expHistory = new ExpHistory();
expHistory.setMemberId(memberId);
expHistory.setOriginalExp(originalExp);
expHistory.setResultExp(resultExp);
expHistory.setDeviceType(deviceType);
expHistory.setEvtType(evtType);
expHistory.setExp(exp);
return build(expHistory);
}
public ExpHistory build(ExpHistory expHistory) {
return build(expHistory.getId(),expHistory.getCode(),
expHistory.getMemberId(),expHistory.getAccountId(),
expHistory.getOriginalExp(),expHistory.getResultExp(),expHistory.getExp(),
expHistory.getDeviceType(),expHistory.getEvtType(),expHistory.getOrderId(),
expHistory.getMediaId(),expHistory.getActivityId(),expHistory.getDescription());
}
public ExpHistory build(Long id,String code,Long memberId,Long accountId,
Long originalExp,Long resultExp,Long exp,
Integer deviceType,Integer evtType,Long orderId,
Long mediaId,Long activityId,String description) {
Assert.notNull(memberId, GlobeExceptionMsg.MEMBER_ID_IS_NULL);
ExpHistory expHistory = new ExpHistory();
expHistory.setId(Objects.isNull(id)?null:id);
expHistory.setCode(StringUtils.isBlank(code)? IdWorker.generatorCode("exp") :code);
expHistory.setMemberId(memberId);
expHistory.setAccountId(Objects.isNull(accountId)?null:accountId);
expHistory.setOriginalExp(Objects.isNull(originalExp)?0L:originalExp);
expHistory.setResultExp(Objects.isNull(resultExp)?0L:resultExp);
expHistory.setExp(Objects.isNull(exp)?0L:exp);
expHistory.setDeviceType(Objects.isNull(deviceType)?4:deviceType);
expHistory.setEvtType(Objects.isNull(evtType)?98:evtType);
expHistory.setOrderId(Objects.isNull(orderId)?null:orderId);
expHistory.setMediaId(Objects.isNull(mediaId)?null:mediaId);
expHistory.setActivityId(Objects.isNull(activityId)?null:activityId);
expHistory.setDescription(StringUtils.isBlank(description)?null:description);
return expHistory;
}
}
......@@ -2,11 +2,6 @@ package com.topdraw.business.module.exp.history.service;
import com.topdraw.business.module.exp.history.domain.ExpHistory;
import com.topdraw.business.module.exp.history.service.dto.ExpHistoryDTO;
import com.topdraw.business.module.exp.history.service.dto.ExpHistoryQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -15,33 +10,18 @@ import java.util.Map;
public interface ExpHistoryService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(ExpHistoryQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<ExpHistoryDTO>
*/
List<ExpHistoryDTO> queryAll(ExpHistoryQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return ExpHistoryDTO
*/
ExpHistoryDTO findById(Long id);
/**
*
* @param resources
*/
void create(ExpHistory resources);
void update(ExpHistory resources);
void delete(Long id);
/**
* Code校验
* @param code
......
......@@ -4,23 +4,14 @@ import com.topdraw.business.module.exp.history.domain.ExpHistory;
import com.topdraw.business.module.exp.history.repository.ExpHistoryRepository;
import com.topdraw.business.module.exp.history.service.ExpHistoryService;
import com.topdraw.business.module.exp.history.service.dto.ExpHistoryDTO;
import com.topdraw.business.module.exp.history.service.dto.ExpHistoryQueryCriteria;
import com.topdraw.business.module.exp.history.service.mapper.ExpHistoryMapper;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.StringUtils;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -31,57 +22,28 @@ import java.util.Map;
public class ExpHistoryServiceImpl implements ExpHistoryService {
@Autowired
private ExpHistoryRepository ExpHistoryRepository;
private ExpHistoryMapper expHistoryMapper;
@Autowired
private ExpHistoryMapper ExpHistoryMapper;
private ExpHistoryRepository expHistoryRepository;
@Override
public Map<String, Object> queryAll(ExpHistoryQueryCriteria criteria, Pageable pageable) {
Page<ExpHistory> page = ExpHistoryRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(ExpHistoryMapper::toDto));
}
@Override
public List<ExpHistoryDTO> queryAll(ExpHistoryQueryCriteria criteria) {
return ExpHistoryMapper.toDto(ExpHistoryRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
public ExpHistoryDTO findById(Long id) {
ExpHistory ExpHistory = ExpHistoryRepository.findById(id).orElseGet(ExpHistory::new);
ExpHistory ExpHistory = this.expHistoryRepository.findById(id).orElseGet(ExpHistory::new);
ValidationUtil.isNull(ExpHistory.getId(),"ExpHistory","id",id);
return ExpHistoryMapper.toDto(ExpHistory);
return this.expHistoryMapper.toDto(ExpHistory);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(ExpHistory resources) {
ExpHistoryRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(ExpHistory resources) {
ExpHistory ExpHistory = ExpHistoryRepository.findById(resources.getId()).orElseGet(ExpHistory::new);
ValidationUtil.isNull( ExpHistory.getId(),"ExpHistory","id",resources.getId());
ExpHistory.copy(resources);
ExpHistoryRepository.save(ExpHistory);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
ExpHistory ExpHistory = ExpHistoryRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", ExpHistory.class, id), 1));
ExpHistoryRepository.delete(ExpHistory);
this.expHistoryRepository.save(resources);
}
@Override
public ExpHistoryDTO getByCode(String code) {
return StringUtils.isNotEmpty(code) ? ExpHistoryMapper.toDto(ExpHistoryRepository.findFirstByCode(code).orElseGet(ExpHistory::new))
return StringUtils.isNotEmpty(code) ? this.expHistoryMapper.toDto(this.expHistoryRepository.findFirstByCode(code).orElseGet(ExpHistory::new))
: new ExpHistoryDTO();
}
}
......
......@@ -2,6 +2,7 @@ package com.topdraw.business.module.member.address.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.topdraw.business.module.common.domain.AsyncMqModule;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
......@@ -10,7 +11,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
* @author XiangHan
......@@ -21,78 +22,75 @@ import java.sql.Timestamp;
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_member_address")
public class MemberAddress implements Serializable {
public class MemberAddress extends AsyncMqModule implements Serializable {
// 主键
/** 主键 */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 会员id
/** 会员id */
@Column(name = "member_id", nullable = false)
private Long memberId;
@Transient
private String memberCode;
// 类型 1:家;2:公司;3:学校
/** 类型 1:家;2:公司;3:学校 */
@Column(name = "type", nullable = false)
private Integer type;
// 是否默认地址
/** 是否默认地址 */
@Column(name = "is_default", nullable = false)
private Integer isDefault;
// 显示顺序
/** 显示顺序 */
@Column(name = "sequence")
private Integer sequence;
// 状态 0:不可用;1-可用
/** 状态 0:不可用;1-可用 */
@Column(name = "status", nullable = false)
private Integer status;
// 联系人姓名
/** 联系人姓名 */
@Column(name = "contactor", nullable = false)
private String contactor;
// 联系人电话
/** 联系人电话 */
@Column(name = "cellphone", nullable = false)
private String cellphone;
// 国家
/** 国家 */
@Column(name = "country", nullable = false)
private String country;
// 省份
/** 省份 */
@Column(name = "province", nullable = false)
private String province;
// 城市
/** 城市 */
@Column(name = "city", nullable = false)
private String city;
// 区县
/** 区县 */
@Column(name = "district", nullable = false)
private String district;
// 地址
/** 地址 */
@Column(name = "address", nullable = false)
private String address;
// 邮编
/** 邮编 */
@Column(name = "zip_code")
private String zipCode;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
private LocalDateTime createTime;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
private LocalDateTime updateTime;
public void copy(MemberAddress source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
......
......@@ -4,13 +4,10 @@ import com.topdraw.business.module.member.address.domain.MemberAddress;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.Optional;
/**
* @author XiangHan
* @date 2021-10-22
*/
public interface MemberAddressRepository extends JpaRepository<MemberAddress, Long>, JpaSpecificationExecutor<MemberAddress> {
Optional<MemberAddress> findByMemberIdAndSequence(Long memberId, Integer sequence);
}
......
......@@ -33,5 +33,4 @@ public interface MemberAddressService {
* @param resources
*/
void delete(Long resources);
}
......
......@@ -3,7 +3,7 @@ package com.topdraw.business.module.member.address.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
......@@ -13,51 +13,51 @@ import java.sql.Timestamp;
@Data
public class MemberAddressDTO implements Serializable {
// 主键
/** 主键 */
private Long id;
// 会员id
/** 会员id */
private Long memberId;
// 类型 1:家;2:公司;3:学校
/** 类型 1:家;2:公司;3:学校 */
private Integer type;
// 是否默认地址
/** 是否默认地址 */
private Integer isDefault;
// 显示顺序
/** 显示顺序 */
private Integer sequence;
// 状态 0:不可用;1-可用
/** 状态 0:不可用;1-可用 */
private Integer status;
// 联系人姓名
/** 联系人姓名 */
private String contactor;
// 联系人电话
/** 联系人电话 */
private String cellphone;
// 国家
/** 国家 */
private String country;
// 省份
/** 省份 */
private String province;
// 城市
/** 城市 */
private String city;
// 区县
/** 区县 */
private String district;
// 地址
/** 地址 */
private String address;
// 邮编
/** 邮编 */
private String zipCode;
// 创建时间
private Timestamp createTime;
/** 创建时间 */
private LocalDateTime createTime;
// 更新时间
private Timestamp updateTime;
/** 更新时间 */
private LocalDateTime updateTime;
}
......
......@@ -8,7 +8,6 @@ import com.topdraw.business.module.member.address.service.dto.MemberAddressDTO;
import com.topdraw.business.module.member.address.service.mapper.MemberAddressMapper;
import com.topdraw.business.module.member.service.MemberService;
import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.utils.RedisUtils;
import com.topdraw.utils.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
......@@ -35,9 +34,6 @@ public class MemberAddressServiceImpl implements MemberAddressService {
@Autowired
private MemberAddressRepository memberAddressRepository;
@Autowired
private RedisUtils redisUtils;
@Override
public MemberAddressDTO findById(Long id) {
Assert.notNull(id,"id can't be null");
......@@ -67,7 +63,6 @@ public class MemberAddressServiceImpl implements MemberAddressService {
log.info("MemberAddressServiceImpl ==>> update ==>> param ==>> [{}]",resources);
Assert.notNull(resources.getId(),"id can't be null");
try {
this.redisUtils.doLock("MemberAddress::update::code" + resources.getId());
MemberDTO memberDTO = this.checkMember(resources);
resources.setMemberCode(memberDTO.getCode());
......@@ -78,13 +73,14 @@ public class MemberAddressServiceImpl implements MemberAddressService {
MemberAddressDTO memberAddressDTO = new MemberAddressDTO();
BeanUtils.copyProperties(memberAddress, memberAddressDTO);
return memberAddressDTO;
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
this.redisUtils.doUnLock("MemberAddress::update::code" + resources.getId());
}
}
@Override
......@@ -117,5 +113,4 @@ public class MemberAddressServiceImpl implements MemberAddressService {
return this.memberService.checkMember(memberId, memberCode);
}
}
......
......@@ -2,6 +2,7 @@ package com.topdraw.business.module.member.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.topdraw.business.module.common.validated.UpdateGroup;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
......@@ -9,8 +10,8 @@ import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
......@@ -24,115 +25,116 @@ import java.time.LocalDateTime;
@Table(name="uc_member")
public class Member implements Serializable {
// 运营商平台账号
/** 运营商平台账号 */
@Transient
private String platformAccount;
// 会员过期时间
/** 会员过期时间 */
@Column(name = "vip_expire_time", nullable = false)
private LocalDateTime vipExpireTime;
// 主键
/** 主键 */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
@NotNull(message = "id can't be null!!",groups = {UpdateGroup.class})
private Long id;
// 标识
/** 标识 */
@Column(name = "code", nullable = false)
private String code;
// 类型 1:大屏;2:小屏
/** 类型 1:大屏;2:小屏 */
@Column(name = "`type`", nullable = false)
private Integer type;
// 状态 0:不可用;1:可用
/** 状态 0:不可用;1:可用 */
@Column(name = "`status`", nullable = false)
private Integer status;
// 昵称 base64
/** 昵称 base64 */
@Column(name = "nickname")
private String nickname;
// 描述
/** 描述 */
@Column(name = "description")
private String description;
// 性别 0:女;1:男;-1:未知
/** 性别 0:女;1:男;-1:未知 */
@Column(name = "gender", nullable = false)
private Integer gender;
// 生日
/** 生日 */
@Column(name = "birthday")
private String birthday;
// 头像
/** 头像 */
@Column(name = "avatar_url")
private String avatarUrl;
// 分组信息
/** 分组信息 */
@Column(name = "`groups`")
private String groups;
// 标签
/** 标签 */
@Column(name = "tags")
private String tags;
// 是否会员 0:非会员;1:会员
/** 是否会员 0:非会员;1:会员 */
@Column(name = "vip", nullable = false)
private Integer vip;
// 会员等级(对应level表的level字段,非id)
/** 会员等级(对应level表的level字段,非id) */
@Column(name = "`level`", nullable = false)
private Integer level;
// 成长值
/** 成长值 */
@Column(name = "`exp`")
private Long exp;
// 当前积分
/** 当前积分 */
@Column(name = "`points`")
private Long points;
// 即将到期积分(一个月内)
/** 即将到期积分(一个月内) */
@Column(name = "due_points")
private Long duePoints;
// 优惠券数量
/** 优惠券数量 */
@Column(name = "coupon_amount")
private Long couponAmount;
// 即将过期优惠券数量
/** 即将过期优惠券数量 */
@Column(name = "due_coupon_amount")
private Long dueCouponAmount;
// iptv账号id
/** iptv账号id */
@Column(name = "user_iptv_id")
private Long userIptvId;
// 绑定IPTV平台 0:未知;1:电信;2:移动;3:联通
/** 绑定IPTV平台 0:未知;1:电信;2:移动;3:联通 */
@Column(name = "bind_iptv_platform_type")
private Integer bindIptvPlatformType;
// iptv账号绑定时间
/** iptv账号绑定时间 */
@Column(name = "bind_iptv_time")
private LocalDateTime bindIptvTime;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private LocalDateTime createTime;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private LocalDateTime updateTime;
// 是否在黑名单 1:是;0否
/** 是否在黑名单 1:是;0否 */
@Column(name = "black_status")
private Long blackStatus;
public void copy(Member source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(false));
}
}
......
package com.topdraw.business.module.member.group.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author luerlong
* @date 2021-09-27
*/
@Entity
@Data
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_group")
public class Group implements Serializable {
/** ID */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
/** CODE */
@Column(name = "code")
private String code;
/** 名称 */
@Column(name = "name")
private String name;
/** 状态 0-下线 1-上线 */
@Column(name = "status")
private Integer status;
/** 权限 0-测试分组 1-鉴权通过(白名单) 2-不允许精准(黑名单)3-可以精准(金名单) */
@Column(name = "permission_type")
private Integer permissionType;
public void copy(Group source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
package com.topdraw.business.module.member.group.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* @author XiangHan
* @date 2021-11-17
*/
@Entity
@Data
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_member_group")
public class MemberGroup implements Serializable {
/** ID */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
/** 分组ID */
@Column(name = "group_id")
private Long groupId;
/** 会员ID */
@Column(name = "member_id")
private Long memberId;
/** 运营商平台账号 */
@Column(name = "platform_account")
private String platformAccount;
/** 手机号 */
@Column(name = "cellphone")
private String cellphone;
/** 设备 */
@Column(name = "stb_id")
private String stbId;
/** 有线MAC地址 */
@Column(name = "eth_mac")
private String ethMac;
/** 无线MAC地址 */
@Column(name = "wifi_mac")
private String wifiMac;
/** 描述 */
@Column(name = "description")
private String description;
/** 创建者 */
@Column(name = "create_by")
private String createBy;
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
/** 更新者 */
@Column(name = "update_by")
private String updateBy;
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
public void copy(MemberGroup source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
package com.topdraw.business.module.member.group.repository;
import com.topdraw.business.module.member.group.domain.Group;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* @author luerlong
* @date 2021-09-27
*/
public interface GroupRepository extends JpaRepository<Group, Long>, JpaSpecificationExecutor<Group> {
Optional<Group> findFirstByCode(String code);
List<Group> findByName(String name);
@Query(value = "select t1.id from uc_group t1 left join uc_user__group t2 on t1.id = t2.group_id where t2.user_id = ?1 and t1.permission_type = ?2 ", nativeQuery = true)
List<Map<String, Object>> findByUserIdAndPermissionType(Long userId, Integer type);
}
package com.topdraw.business.module.member.group.repository;
import com.topdraw.business.module.member.group.domain.MemberGroup;
import com.topdraw.business.module.member.group.service.dto.MemberGroupDTO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
/**
* @author XiangHan
* @date 2021-11-17
*/
public interface MemberGroupRepository extends JpaRepository<MemberGroup, Long>, JpaSpecificationExecutor<MemberGroup> {
List<MemberGroupDTO> findByMemberId(Long memberId);
}
package com.topdraw.business.module.member.group.service;
import com.topdraw.business.module.member.group.service.dto.GroupDTO;
/**
* @author luerlong
* @date 2021-09-27
*/
public interface GroupService {
/**
* 根据ID查询
* @param id ID
* @return GroupDTO
*/
GroupDTO findById(Long id);
/**
* Code校验
* @param code
* @return GroupDTO
*/
GroupDTO getByCode(String code);
}
package com.topdraw.business.module.member.group.service;
import com.topdraw.business.module.member.group.service.dto.MemberGroupDTO;
import java.util.List;
/**
* @author XiangHan
* @date 2021-11-17
*/
public interface MemberGroupService {
/**
* 通过会员id获取会员分组列表
* @param memberId
* @return
*/
List<MemberGroupDTO> findByMemberId(Long memberId);
/**
* 根据ID查询
* @param id ID
* @return MemberGroupDTO
*/
MemberGroupDTO findById(Long id);
}
package com.topdraw.business.module.member.group.service.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @author luerlong
* @date 2021-09-27
*/
@Data
public class GroupDTO implements Serializable {
/** ID */
private Long id;
/** CODE */
private String code;
/** 名称 */
private String name;
/** 状态 0-下线 1-上线 */
private Integer status;
/** 权限 0-测试分组 1-鉴权通过(白名单) 2-不允许精准(黑名单)3-可以精准(金名单) */
private Integer permissionType;
}
package com.topdraw.business.module.member.group.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* @author XiangHan
* @date 2021-11-17
*/
@Data
public class MemberGroupDTO implements Serializable {
/** ID */
private Long id;
/** 分组ID */
private Long groupId;
/** 会员ID */
private Long memberId;
/** 运营商平台账号 */
private String platformAccount;
/** 手机号 */
private String cellphone;
/** 设备 */
private String stbId;
/** 有线MAC地址 */
private String ethMac;
/** 无线MAC地址 */
private String wifiMac;
/** 描述 */
private String description;
/** 创建者 */
private String createBy;
/** 创建时间 */
private Timestamp createTime;
/** 更新者 */
private String updateBy;
/** 更新时间 */
private Timestamp updateTime;
}
package com.topdraw.business.module.member.group.service.impl;
import com.topdraw.business.module.member.group.domain.Group;
import com.topdraw.business.module.member.group.repository.GroupRepository;
import com.topdraw.business.module.member.group.service.GroupService;
import com.topdraw.business.module.member.group.service.dto.GroupDTO;
import com.topdraw.business.module.member.group.service.mapper.GroupMapper;
import com.topdraw.utils.StringUtils;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* @author luerlong
* @date 2021-09-27
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class GroupServiceImpl implements GroupService {
@Autowired
private GroupRepository groupRepository;
@Autowired
private GroupMapper groupMapper;
@Override
public GroupDTO findById(Long id) {
Group group = groupRepository.findById(id).orElseGet(Group::new);
ValidationUtil.isNull(group.getId(),"Group","id",id);
return groupMapper.toDto(group);
}
@Override
public GroupDTO getByCode(String code) {
return StringUtils.isNotEmpty(code) ? groupMapper.toDto(groupRepository.findFirstByCode(code).orElseGet(Group::new))
: new GroupDTO();
}
}
package com.topdraw.business.module.member.group.service.impl;
import com.topdraw.business.module.member.group.domain.MemberGroup;
import com.topdraw.business.module.member.group.repository.MemberGroupRepository;
import com.topdraw.business.module.member.group.service.MemberGroupService;
import com.topdraw.business.module.member.group.service.dto.MemberGroupDTO;
import com.topdraw.business.module.member.group.service.mapper.MemberGroupMapper;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author XiangHan
* @date 2021-11-17
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class MemberGroupServiceImpl implements MemberGroupService {
@Autowired
private MemberGroupRepository memberGroupRepository;
@Autowired
private MemberGroupMapper memberGroupMapper;
@Override
public List<MemberGroupDTO> findByMemberId(Long memberId) {
return this.memberGroupRepository.findByMemberId(memberId);
}
@Override
public MemberGroupDTO findById(Long id) {
MemberGroup memberGroup = this.memberGroupRepository.findById(id).orElseGet(MemberGroup::new);
ValidationUtil.isNull(memberGroup.getId(),"MemberGroup","id",id);
return this.memberGroupMapper.toDto(memberGroup);
}
}
package com.topdraw.business.module.member.group.service.mapper;
import com.topdraw.base.BaseMapper;
import com.topdraw.business.module.member.group.domain.Group;
import com.topdraw.business.module.member.group.service.dto.GroupDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author luerlong
* @date 2021-09-27
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface GroupMapper extends BaseMapper<GroupDTO, Group> {
}
package com.topdraw.business.module.member.group.service.mapper;
import com.topdraw.base.BaseMapper;
import com.topdraw.business.module.member.group.domain.MemberGroup;
import com.topdraw.business.module.member.group.service.dto.MemberGroupDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author XiangHan
* @date 2021-11-17
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface MemberGroupMapper extends BaseMapper<MemberGroupDTO, MemberGroup> {
}
......@@ -2,6 +2,8 @@ package com.topdraw.business.module.member.level.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.topdraw.business.module.common.validated.CreateGroup;
import com.topdraw.business.module.common.validated.UpdateGroup;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
......@@ -9,6 +11,8 @@ import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.sql.Timestamp;
......@@ -23,50 +27,53 @@ import java.sql.Timestamp;
@Table(name="uc_member_level")
public class MemberLevel implements Serializable {
// 主键
/** 主键 */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
@NotNull(message = "id can't be null !!" , groups = {UpdateGroup.class})
private Long id;
// 标识
/** 标识 */
@Column(name = "code", nullable = false)
private String code;
// 名称
/** 名称 */
@Column(name = "name", nullable = false)
private String name;
// 状态 0:未启用;1:启用
/** 状态 0:未启用;1:启用 */
@Column(name = "status", nullable = false)
private Integer status;
// 对应成长值
/** 对应成长值 */
@Column(name = "exp_value", nullable = false)
private Long expValue;
// 等级(不可重复,数字越大等级越高)
/** 等级(不可重复,数字越大等级越高) */
@Column(name = "level", nullable = false)
@Min(message = "level can't less then 1" , value = 1)
@NotNull(message = "level can't be null" , groups = {CreateGroup.class,UpdateGroup.class})
private Integer level;
// 会员徽标
/** 会员徽标 */
@Column(name = "icon_url")
private String iconUrl;
// 描述
/** 描述 */
@Column(name = "description")
private String description;
// 对应任务id,通过此字段可获得该等级所对应的权益
/** 对应任务id,通过此字段可获得该等级所对应的权益 */
@Column(name = "task_id")
private Long taskId;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
......
package com.topdraw.business.module.member.level.service;
import com.topdraw.business.module.member.level.domain.MemberLevel;
import com.topdraw.business.module.member.level.service.dto.MemberLevelDTO;
import com.topdraw.business.module.member.level.service.dto.MemberLevelQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -36,4 +32,5 @@ public interface MemberLevelService {
*/
List<MemberLevelDTO> findLevelAndStatus(Integer i, Integer status);
}
......
......@@ -13,36 +13,36 @@ import java.sql.Timestamp;
@Data
public class MemberLevelDTO implements Serializable {
// 主键
/** 主键 */
private Long id;
// 标识
/** 标识 */
private String code;
// 名称
/** 名称 */
private String name;
// 状态 0:未启用;1:启用
/** 状态 0:未启用;1:启用 */
private Integer status;
// 对应成长值
/** 对应成长值 */
private Long expValue;
// 等级(不可重复,数字越大等级越高)
/** 等级(不可重复,数字越大等级越高) */
private Integer level;
// 会员徽标
/** 会员徽标 */
private String iconUrl;
// 描述
/** 描述 */
private String description;
// 对应任务id,通过此字段可获得该等级所对应的权益
/** 对应任务id,通过此字段可获得该等级所对应的权益 */
private Long taskId;
// 创建时间
/** 创建时间 */
private Timestamp createTime;
// 更新时间
/** 更新时间 */
private Timestamp updateTime;
}
......
package com.topdraw.business.module.member.level.service.dto;
import lombok.Data;
/**
* @author XiangHan
* @date 2021-10-22
*/
@Data
public class MemberLevelQueryCriteria{
}
......@@ -2,6 +2,8 @@ package com.topdraw.business.module.member.profile.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.topdraw.business.module.common.validated.CreateGroup;
import com.topdraw.business.module.common.validated.UpdateGroup;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
......@@ -9,6 +11,7 @@ import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.sql.Timestamp;
......@@ -23,76 +26,80 @@ import java.sql.Timestamp;
@Table(name="uc_member_profile")
public class MemberProfile implements Serializable {
/** 会员code */
@Transient
@NotNull(message = "memberCode not be null!!" , groups = {CreateGroup.class, UpdateGroup.class})
private String memberCode;
/** 头像 */
@Transient
private String avatarUrl;
// 主键
/** 主键 */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
@NotNull(message = "id not be null!!" , groups = UpdateGroup.class)
private Long id;
// 手机号
@Column(name = "phone")
private String phone;
// 会员id
/** 会员id */
@Column(name = "member_id", nullable = false)
private Long memberId;
@Transient
private String memberCode;
// 姓名
/** 姓名 */
@Column(name = "realname")
private String realname;
// 性别 0:女; 1:男 -1:未知
/** 性别 0:女; 1:男 -1:未知 */
@Column(name = "gender", nullable = false)
private Integer gender;
// 生日
/** 生日 */
@Column(name = "birthday", nullable = false)
private String birthday;
// 星座
/** 手机号 */
@Column(name = "phone")
private String phone;
/** 星座 */
@Column(name = "constellation")
private String constellation;
// 身份证
/** 身份证 */
@Column(name = "id_card", nullable = false)
private String idCard;
// 电子邮件
/** 电子邮件 */
@Column(name = "email")
private String email;
// 国家
/** 国家 */
@Column(name = "country")
private String country;
// 省份
/** 省份 */
@Column(name = "province")
private String province;
// 城市
/** 城市 */
@Column(name = "city")
private String city;
// 区县
/** 区县 */
@Column(name = "district")
private String district;
// 描述
/** 描述 */
@Column(name = "description")
private String description;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
......
......@@ -19,13 +19,13 @@ public class MemberProfileBuilder {
return memberProfile;
}
public static MemberProfile build(Long memberId , String memberCode, String realname , Integer gender, String birthday){
public static MemberProfile build(Long memberId ,String memberCode, String realname , Integer gender, String birthday){
MemberProfile memberProfile = build(memberId,memberCode,realname,gender,"","","","","","",
"","","",birthday);
return memberProfile;
}
public static MemberProfile build(Long memberId, String memberCode, String realName, Integer sex,
public static MemberProfile build(Long memberId,String memberCode, String realName, Integer sex,
String country, String district, String city, String idCard, String province,
String email, String description, String phone, String constellation,
String birthday) {
......
......@@ -77,5 +77,4 @@ public interface MemberProfileService {
* @param resources
*/
MemberProfileDTO updateMemberProfileAndMember(MemberProfile resources, MemberDTO memberDTO);
}
......
......@@ -13,60 +13,61 @@ import java.sql.Timestamp;
@Data
public class MemberProfileDTO implements Serializable {
// 超时时间
private Long vipExpireTime;
// vip
private Integer vip;
// 头像
private String avatarUrl;
// 主键
/** 主键 */
private Long id;
// 会员id
/** 会员id */
private Long memberId;
// 手机号
private String phone;
// 姓名
/** 姓名 */
private String realname;
// 性别 0:女; 1:男 -1:未知
/** 性别 0:女; 1:男 -1:未知 */
private Integer gender;
// 生日
/** 生日 */
private String birthday;
// 星座
/** 电话 */
private String phone;
/** 星座 */
private String constellation;
// 身份证
/** 身份证 */
private String idCard;
// 电子邮件
/** 电子邮件 */
private String email;
// 国家
/** 国家 */
private String country;
// 省份
/** 省份 */
private String province;
// 城市
/** 城市 */
private String city;
// 区县
/** 区县 */
private String district;
// 描述
/** 描述 */
private String description;
// 创建时间
/** 创建时间 */
private Timestamp createTime;
// 更新时间
/** 更新时间 */
private Timestamp updateTime;
/** vip */
private Integer vip;
/** vip过期时间 */
private Long vipExpireTime;
/** 头像 */
private String avatarUrl;
}
......
......@@ -9,9 +9,11 @@ import com.topdraw.business.module.member.profile.service.dto.MemberProfileDTO;
import com.topdraw.business.module.member.profile.service.mapper.MemberProfileMapper;
import com.topdraw.business.module.member.service.MemberService;
import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.utils.*;
import com.topdraw.util.Base64Util;
import com.topdraw.utils.RedisUtils;
import com.topdraw.utils.StringUtils;
import com.topdraw.utils.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Base64Util;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
......@@ -20,6 +22,7 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
/**
* @author XiangHan
* @date 2021-10-22
......@@ -116,6 +119,7 @@ public class MemberProfileServiceImpl implements MemberProfileService {
BeanUtils.copyProperties(resources,memberProfile);
MemberProfile _memberProfile = this.memberProfileRepository.save(memberProfile);
MemberProfileDTO memberProfileDTO = new MemberProfileDTO();
BeanUtils.copyProperties(_memberProfile,memberProfileDTO);
return memberProfileDTO;
......@@ -157,5 +161,4 @@ public class MemberProfileServiceImpl implements MemberProfileService {
this.memberService.update(member);
}
}
......
......@@ -2,6 +2,8 @@ package com.topdraw.business.module.member.relatedinfo.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.topdraw.business.module.common.domain.AsyncMqModule;
import com.topdraw.business.module.common.validated.UpdateGroup;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
......@@ -9,6 +11,7 @@ import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDate;
......@@ -22,38 +25,36 @@ import java.time.LocalDate;
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_member_related_info")
public class MemberRelatedInfo implements Serializable {
public class MemberRelatedInfo extends AsyncMqModule implements Serializable {
// ID
/** ID */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
@NotNull(message = "id can't be null" , groups = {UpdateGroup.class})
private Long id;
// 会员id
/** 会员id */
@Column(name = "member_id", nullable = false)
private Long memberId;
@Transient
private String memberCode;
// 人物关系 0:子女;1:父母
/** 人物关系 0:子女;1:父母 */
@Column(name = "type")
private Integer type;
// 手机号
/** 手机号 */
@Column(name = "cellphone")
private String cellphone;
// 身份证号
/** 身份证号 */
@Column(name = "id_card")
private String idCard;
// 姓名
/** 姓名 */
@Column(name = "name")
private String name;
// 性别 0:女;1:男;-1:未知
/** 性别 0:女;1:男;-1:未知 */
@Column(name = "sex")
private Integer sex;
......@@ -65,12 +66,12 @@ public class MemberRelatedInfo implements Serializable {
@Column(name = "avatar_url")
private String avatarUrl;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
......
......@@ -4,7 +4,6 @@ import com.topdraw.business.module.member.relatedinfo.domain.MemberRelatedInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
/**
* @author XiangHan
......@@ -14,7 +13,7 @@ public interface MemberRelatedInfoRepository extends JpaRepository<MemberRelated
MemberRelatedInfo findByIdCard(String idCard);
MemberRelatedInfo findByMemberIdAndIdCard(Long memberId , String idCard);
MemberRelatedInfo findByMemberIdAndIdCard(Long memberId, String idCard);
MemberRelatedInfo findByIdOrIdCard(Long id, String idCard);
......
......@@ -3,11 +3,6 @@ package com.topdraw.business.module.member.relatedinfo.service;
import com.topdraw.business.module.member.domain.Member;
import com.topdraw.business.module.member.relatedinfo.domain.MemberRelatedInfo;
import com.topdraw.business.module.member.relatedinfo.service.dto.MemberRelatedInfoDTO;
import com.topdraw.business.module.member.relatedinfo.service.dto.MemberRelatedInfoQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -60,7 +55,7 @@ public interface MemberRelatedInfoService {
* @param idCard
* @return
*/
MemberRelatedInfoDTO findByMemberIdAndIdCard(Long memberId , String idCard);
MemberRelatedInfoDTO findByMemberIdAndIdCard(Long memberId, String idCard);
/**
*
......@@ -68,7 +63,7 @@ public interface MemberRelatedInfoService {
* @param idCard
* @return
*/
MemberRelatedInfoDTO findByMemberCodeAndIdCard(String memberCode , String idCard);
MemberRelatedInfoDTO findByMemberCodeAndIdCard(String memberCode, String idCard);
/**
*
......@@ -83,6 +78,5 @@ public interface MemberRelatedInfoService {
* @param resources
* @return
*/
MemberRelatedInfoDTO findByMemberIdAndIdCard(Member member , MemberRelatedInfo resources);
MemberRelatedInfoDTO findByMemberIdAndIdCard(Member member, MemberRelatedInfo resources);
}
......
package com.topdraw.business.module.member.relatedinfo.service.dto;
import com.topdraw.annotation.Query;
import lombok.Data;
/**
* @author XiangHan
* @date 2021-10-22
*/
@Data
public class MemberRelatedInfoQueryCriteria{
@Query
private Long memberId;
}
......@@ -11,11 +11,11 @@ import com.topdraw.business.module.member.service.MemberService;
import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.exception.BadRequestException;
import com.topdraw.exception.GlobeExceptionMsg;
import com.topdraw.util.Base64Util;
import com.topdraw.utils.RedisUtils;
import com.topdraw.utils.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.util.Base64Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Service;
......@@ -41,7 +41,6 @@ public class MemberRelatedInfoServiceImpl implements MemberRelatedInfoService {
@Autowired
private MemberRelatedInfoRepository memberRelatedInfoRepository;
private static final String DEFAULT_IDCARD = "000000000000000000";
@Override
......@@ -104,6 +103,7 @@ public class MemberRelatedInfoServiceImpl implements MemberRelatedInfoService {
@Transactional(rollbackFor = Exception.class)
public MemberRelatedInfoDTO update(MemberRelatedInfo resources) {
log.info("MemberRelatedInfoServiceImpl ==>> update ==>> param ==>> [{}]",resources);
try {
this.checkMemberAndEncodeRealname(resources);
......@@ -115,6 +115,10 @@ public class MemberRelatedInfoServiceImpl implements MemberRelatedInfoService {
log.info("MemberRelatedInfoServiceImpl ==>> update ==>> param ==>> [{}]", resources);
return this.memberRelatedInfoMapper.toDto(memberRelatedInfo);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
@Override
......@@ -122,7 +126,7 @@ public class MemberRelatedInfoServiceImpl implements MemberRelatedInfoService {
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
MemberRelatedInfo MemberRelatedInfo = this.memberRelatedInfoRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", MemberRelatedInfo.class, id), 1));
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", com.topdraw.business.module.member.relatedinfo.domain.MemberRelatedInfo.class, id), 1));
this.memberRelatedInfoRepository.delete(MemberRelatedInfo);
}
......@@ -133,10 +137,10 @@ public class MemberRelatedInfoServiceImpl implements MemberRelatedInfoService {
Assert.notNull(idCard,"idCard can't be null");
if (!idCard.equalsIgnoreCase(DEFAULT_IDCARD)) {
MemberRelatedInfoDTO memberRelatedInfo = this.findByIdCard(idCard);
ValidationUtil.isNull(memberRelatedInfo.getId(),"MemberRelatedInfo","id",resources.getId());
log.info("MemberRelatedInfoServiceImpl ==>> findByIdCard ==>> result ==>> [{}]",memberRelatedInfo);
return memberRelatedInfo;
MemberRelatedInfoDTO memberRelatedInfoDTO = this.findByIdCard(idCard);
ValidationUtil.isNull(memberRelatedInfoDTO.getId(),"MemberRelatedInfo","id",resources.getId());
log.info("MemberRelatedInfoServiceImpl ==>> findByIdCard ==>> result ==>> [{}]",memberRelatedInfoDTO);
return memberRelatedInfoDTO;
}
return null;
......
......@@ -3,8 +3,6 @@ package com.topdraw.business.module.member.repository;
import com.topdraw.business.module.member.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
import java.util.Optional;
......@@ -19,9 +17,5 @@ public interface MemberRepository extends JpaRepository<Member, Long>, JpaSpecif
List<Member> findByUserIptvId(Long id);
Optional<Member> findByIdOrCode(Long id,String code);
@Modifying
@Query(value = "update uc_member set `points` = ?2 , `due_points` = ?3 where id = ?1 ",nativeQuery = true)
void updateMemberPoints(Long id, Long points, Long duePoints);
Optional<Member> findByIdOrCode(Long id, String code);
}
......
......@@ -11,6 +11,8 @@ import java.util.List;
*/
public interface MemberService {
/**
* 根据ID查询
* @param id ID
......@@ -63,12 +65,11 @@ public interface MemberService {
* @param id 会员id
* @param memberCode 会员编码
*/
MemberDTO checkMember(Long id , String memberCode);
MemberDTO checkMember(Long id, String memberCode);
/**
* 检查会员信息
* @param member 会员
*/
MemberDTO checkMember(Member member);
}
......
......@@ -3,7 +3,6 @@ package com.topdraw.business.module.member.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
......@@ -14,7 +13,12 @@ import java.time.LocalDateTime;
@Data
public class MemberDTO implements Serializable {
// 会员过期时间
private String platformAccount;
// iptv绑定的主会员 0:否 1:是
private Integer iptvMajor;
// vip过期时间
private LocalDateTime vipExpireTime;
// 主键
......@@ -87,5 +91,5 @@ public class MemberDTO implements Serializable {
private LocalDateTime updateTime;
// 是否在黑名单 1:是;0否
// private Integer blackStatus;
private Long blackStatus;
}
......
......@@ -11,7 +11,8 @@ import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.business.module.member.service.mapper.MemberMapper;
import com.topdraw.exception.BadRequestException;
import com.topdraw.exception.GlobeExceptionMsg;
import com.topdraw.utils.*;
import com.topdraw.utils.RedisUtils;
import com.topdraw.utils.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
......@@ -27,7 +28,6 @@ import java.util.Objects;
* @author XiangHan
* @date 2021-10-22
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
@Slf4j
......@@ -60,7 +60,7 @@ public class MemberServiceImpl implements MemberService {
}
private MemberDTO findByIdOrCode(Long id,String code) {
private MemberDTO findByIdOrCode(Long id, String code) {
Member member = this.memberRepository.findByIdOrCode(id,code).orElseGet(Member::new);
ValidationUtil.isNull(member.getId(),"Member","param",code);
......@@ -129,8 +129,8 @@ public class MemberServiceImpl implements MemberService {
public MemberDTO update(Member resources) {
log.info("MemberServiceImpl ==>> update ==>> resources ==>> [{}]" , resources);
MemberDTO memberDTO = this.findByCode(resources.getCode());
try {
MemberDTO memberDTO = this.checkMember(resources);
Member member = new Member();
BeanUtils.copyProperties(memberDTO,member);
......@@ -139,6 +139,11 @@ public class MemberServiceImpl implements MemberService {
this.save(member);
return this.memberMapper.toDto(member);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
......@@ -150,6 +155,9 @@ public class MemberServiceImpl implements MemberService {
@Override
@Transactional(rollbackFor = Exception.class)
public MemberDTO doUpdateMemberPoints(Member resources) {
try {
//this.redisUtils.doLock("member::update::code" + resources.getCode());
Member member = this.memberRepository.findById(resources.getId()).orElseGet(Member::new);
ValidationUtil.isNull(member.getId(), "Member", "id", resources.getId());
member.copy(resources);
......@@ -157,5 +165,12 @@ public class MemberServiceImpl implements MemberService {
this.save(member);
return this.memberMapper.toDto(member);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
}
......
......@@ -2,6 +2,7 @@ package com.topdraw.business.module.member.viphistory.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.topdraw.business.module.common.domain.AsyncMqModule;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
......@@ -22,10 +23,7 @@ import java.time.LocalDateTime;
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_member_vip_history")
public class MemberVipHistory implements Serializable {
@Transient
private String memberCode;
public class MemberVipHistory extends AsyncMqModule implements Serializable {
// 主键
@Id
......
......@@ -3,12 +3,8 @@ package com.topdraw.business.module.member.viphistory.service;
import com.topdraw.business.module.member.domain.Member;
import com.topdraw.business.module.member.viphistory.domain.MemberVipHistory;
import com.topdraw.business.module.member.viphistory.service.dto.MemberVipHistoryDTO;
import com.topdraw.business.module.member.viphistory.service.dto.MemberVipHistoryQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
* @author luerlong
......
......@@ -9,25 +9,17 @@ import com.topdraw.business.module.member.viphistory.domain.MemberVipHistoryBuil
import com.topdraw.business.module.member.viphistory.repository.MemberVipHistoryRepository;
import com.topdraw.business.module.member.viphistory.service.MemberVipHistoryService;
import com.topdraw.business.module.member.viphistory.service.dto.MemberVipHistoryDTO;
import com.topdraw.business.module.member.viphistory.service.dto.MemberVipHistoryQueryCriteria;
import com.topdraw.business.module.member.viphistory.service.mapper.MemberVipHistoryMapper;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author luerlong
......
......@@ -2,6 +2,8 @@ package com.topdraw.business.module.points.available.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.topdraw.business.module.common.domain.AsyncMqModule;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
......@@ -24,53 +26,49 @@ import java.time.LocalDateTime;
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_points_available")
public class PointsAvailable implements Serializable {
public class PointsAvailable extends AsyncMqModule implements Serializable {
/** 会员编号 */
@Transient
private String memberCode;
// 主键
/** 主键 */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 标识
/** 标识 */
@Column(name = "code")
private String code;
// 积分类型 0:通用型
/** 积分类型 0:通用型 */
@Column(name = "points_type")
private Integer pointsType;
// 设备类型 1:大屏;2:小屏(微信)3.小屏(xx)
/** 设备类型 1:大屏;2:小屏(微信)3.小屏(xx) */
@Column(name = "device_type")
private Integer deviceType;
// 会员id
/** 会员id */
@Column(name = "member_id", nullable = false)
private Long memberId;
// 积分值
/** 积分值 */
@Column(name = "points")
private Long points;
// 过期时间
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
/** 过期时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",locale = "")
@Column(name = "expire_time")
private LocalDateTime expireTime;
// 描述
/** 描述 */
@Column(name = "description")
private String description;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
......
......@@ -25,7 +25,7 @@ public interface PointsAvailableRepository extends JpaRepository<PointsAvailable
List<PointsAvailableDTO> findByMemberId(Long memberId);
List<PointsAvailable> findByMemberIdAndExpireTimeBefore(Long memberId , LocalDateTime now);
List<PointsAvailable> findByMemberIdAndExpireTimeBefore(Long memberId, LocalDateTime now);
/**
* 即将过期的积分
......
......@@ -2,12 +2,9 @@ package com.topdraw.business.module.points.available.service;
import com.topdraw.business.module.points.available.domain.PointsAvailable;
import com.topdraw.business.module.points.available.service.dto.PointsAvailableDTO;
import com.topdraw.business.module.points.available.service.dto.PointsAvailableQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -16,21 +13,6 @@ import java.util.Map;
public interface PointsAvailableService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(PointsAvailableQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<PointsAvailableDTO>
*/
List<PointsAvailableDTO> queryAll(PointsAvailableQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return PointsAvailableDTO
......@@ -41,13 +23,13 @@ public interface PointsAvailableService {
*
* @param resources
*/
void create(PointsAvailable resources);
PointsAvailableDTO create(PointsAvailable resources);
/**
*
* @param resources
*/
void update(PointsAvailable resources);
PointsAvailableDTO update(PointsAvailable resources);
/**
*
......@@ -55,8 +37,6 @@ public interface PointsAvailableService {
*/
void delete(Long id);
void delete4Custom(Long id);
/**
*
* @param id
......@@ -84,7 +64,7 @@ public interface PointsAvailableService {
* @param factor 阈值
* @return
*/
Long findSoonExpireTime(Long memberId,Integer factor);
Long findSoonExpireTime(Long memberId, Integer factor);
/**
*
......@@ -107,6 +87,15 @@ public interface PointsAvailableService {
*/
long findTotalPointsByMemberId(Long memberId);
void create4Custom(PointsAvailable pointsAvailable);
/**
*
* @param id
*/
void delete4Custom(Long id);
/**
*
* @param pointsAvailable
*/
PointsAvailableDTO create4Custom(PointsAvailable pointsAvailable);
}
......
......@@ -14,33 +14,33 @@ import java.time.LocalDateTime;
@Data
public class PointsAvailableDTO implements Serializable {
// 主键
/** 主键 */
private Long id;
// 标识
/** 标识 */
private String code;
// 积分类型 0:通用型
/** 积分类型 0:通用型 */
private Integer pointsType;
// 设备类型 1:大屏;2:小屏(微信)3.小屏(xx)
/** 设备类型 1:大屏;2:小屏(微信)3.小屏(xx) */
private Integer deviceType;
// 会员id
/** 会员id */
private Long memberId;
// 积分值
/** 积分值 */
private Long points;
// 过期时间
/** 过期时间 */
private LocalDateTime expireTime;
// 描述
/** 描述 */
private String description;
// 创建时间
/** 创建时间 */
private Timestamp createTime;
// 更新时间
/** 更新时间 */
private Timestamp updateTime;
}
......
package com.topdraw.business.module.points.available.service.impl;
import com.topdraw.business.module.member.service.MemberService;
import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.business.module.points.available.domain.PointsAvailable;
import com.topdraw.business.module.points.available.repository.PointsAvailableRepository;
import com.topdraw.business.module.points.available.service.PointsAvailableService;
import com.topdraw.business.module.points.available.service.dto.PointsAvailableDTO;
import com.topdraw.business.module.points.available.service.dto.PointsAvailableQueryCriteria;
import com.topdraw.business.module.points.available.service.mapper.PointsAvailableMapper;
import com.topdraw.util.RedissonUtil;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.RedisUtils;
import com.topdraw.utils.StringUtils;
import com.topdraw.utils.ValidationUtil;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
......@@ -26,7 +17,6 @@ import org.springframework.util.Assert;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
......@@ -38,147 +28,149 @@ import java.util.Objects;
public class PointsAvailableServiceImpl implements PointsAvailableService {
@Autowired
private PointsAvailableRepository PointsAvailableRepository;
private PointsAvailableRepository pointsAvailableRepository;
@Autowired
private PointsAvailableMapper PointsAvailableMapper;
private PointsAvailableMapper pointsAvailableMapper;
@Autowired
private MemberService memberService;
@Override
public Map<String, Object> queryAll(PointsAvailableQueryCriteria criteria, Pageable pageable) {
Page<PointsAvailable> page = PointsAvailableRepository.findAll((root, criteriaQuery, criteriaBuilder) ->
QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(PointsAvailableMapper::toDto));
}
private RedisUtils redisUtils;
@Override
public List<PointsAvailableDTO> findByMemberIdOrderByExpireTime(Long memberId) {
return PointsAvailableMapper.toDto(PointsAvailableRepository.findByMemberIdOrderByExpireTime(memberId));
}
@Override
public List<PointsAvailableDTO> queryAll(PointsAvailableQueryCriteria criteria) {
return PointsAvailableMapper.toDto(PointsAvailableRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
return this.pointsAvailableMapper.toDto(this.pointsAvailableRepository.findByMemberIdOrderByExpireTime(memberId));
}
@Override
public PointsAvailableDTO findById(Long id) {
PointsAvailable PointsAvailable = PointsAvailableRepository.findById(id).orElseGet(PointsAvailable::new);
ValidationUtil.isNull(PointsAvailable.getId(),"PointsAvailable","id",id);
return PointsAvailableMapper.toDto(PointsAvailable);
PointsAvailable pointsAvailable = this.pointsAvailableRepository.findById(id).orElseGet(PointsAvailable::new);
ValidationUtil.isNull(pointsAvailable.getId(),"PointsAvailable","id",id);
return this.pointsAvailableMapper.toDto(pointsAvailable);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(PointsAvailable resources) {
String memberCode = resources.getMemberCode();
if (StringUtils.isNotEmpty(memberCode)) {
MemberDTO memberDTO = this.memberService.findByCode(memberCode);
if (Objects.nonNull(memberDTO)) {
Long memberId = memberDTO.getId();
resources.setMemberId(memberId);
}
}
public PointsAvailableDTO create(PointsAvailable resources) {
try {
PointsAvailableRepository.save(resources);
}
this.redisUtils.doLock("PointsAvailable::create::id"+resources.getMemberId().toString());
PointsAvailable pointsAvailable = this.pointsAvailableRepository.save(resources);
@Override
@Transactional(rollbackFor = Exception.class)
public void update(PointsAvailable resources) {
try {
PointsAvailable PointsAvailable = PointsAvailableRepository.findById(resources.getId()).orElseGet(PointsAvailable::new);
ValidationUtil.isNull( PointsAvailable.getId(),"PointsAvailable","id",resources.getId());
PointsAvailable.copy(resources);
PointsAvailableRepository.save(PointsAvailable);
return this.pointsAvailableMapper.toDto(pointsAvailable);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
this.redisUtils.doUnLock("PointsAvailable::create::id"+resources.getMemberId().toString());
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
public PointsAvailableDTO update(PointsAvailable resources) {
try {
PointsAvailable PointsAvailable = PointsAvailableRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", PointsAvailable.class, id), 1));
PointsAvailableRepository.delete(PointsAvailable);
this.redisUtils.doLock("PointsAvailable::update::id"+resources.getMemberId().toString());
PointsAvailable pointsAvailable = this.pointsAvailableRepository.findById(resources.getId()).orElseGet(PointsAvailable::new);
ValidationUtil.isNull(pointsAvailable.getId(),"PointsAvailable","id",resources.getId());
pointsAvailable.copy(resources);
PointsAvailable _pointsAvailable = this.pointsAvailableRepository.save(pointsAvailable);
return this.pointsAvailableMapper.toDto(_pointsAvailable);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
this.redisUtils.doUnLock("PointsAvailable::update::id"+resources.getMemberId().toString());
}
}
@Override
public void delete4Custom(Long id) {
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
this.redisUtils.doLock("PointsAvailable::delete::id"+id);
try {
PointsAvailable PointsAvailable = PointsAvailableRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", PointsAvailable.class, id), 1));
PointsAvailableRepository.delete(PointsAvailable);
PointsAvailable PointsAvailable = this.pointsAvailableRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", com.topdraw.business.module.points.available.domain.PointsAvailable.class, id), 1));
this.pointsAvailableRepository.delete(PointsAvailable);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
this.redisUtils.doLock("PointsAvailable::delete::id"+id);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteBatchByIds(List<Long> id) {
this.redisUtils.doLock("PointsAvailable::create::id"+id);
try {
PointsAvailableRepository.deleteBatchByIds(id);
this.pointsAvailableRepository.deleteBatchByIds(id);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
this.redisUtils.doUnLock("PointsAvailable::create::id"+id);
}
}
@Override
public PointsAvailableDTO getByCode(String code) {
return StringUtils.isNotEmpty(code) ? PointsAvailableMapper.toDto(PointsAvailableRepository.findFirstByCode(code).orElseGet(PointsAvailable::new))
return StringUtils.isNotEmpty(code) ? this.pointsAvailableMapper.toDto(this.pointsAvailableRepository.findFirstByCode(code).orElseGet(PointsAvailable::new))
: new PointsAvailableDTO();
}
@Override
public List<PointsAvailableDTO> findByMemberIdAndExpireTimeBefore(Long memberId, LocalDateTime timestamp) {
return Objects.nonNull(memberId)?
PointsAvailableMapper.toDto(PointsAvailableRepository.findByMemberIdAndExpireTimeBefore(memberId, timestamp))
this.pointsAvailableMapper.toDto(this.pointsAvailableRepository.findByMemberIdAndExpireTimeBefore(memberId, timestamp))
:null;
}
@Override
public Long findSoonExpireTime(Long memberId, Integer factor) {
return PointsAvailableRepository.findSoonExpireTime(memberId, factor);
return this.pointsAvailableRepository.findSoonExpireTime(memberId, factor);
}
@Override
public long findAvailablePointsByMemberId(long memberId) {
Long availablePoints = this.PointsAvailableRepository.findAvailablePointsByMemberId(memberId);
Long availablePoints = this.pointsAvailableRepository.findAvailablePointsByMemberId(memberId);
return availablePoints == null ? 0L : availablePoints;
}
@Override
public long findTotalPointsByMemberId(Long memberId) {
return this.PointsAvailableRepository.findTotalCountByMemberId(memberId);
return this.pointsAvailableRepository.findTotalCountByMemberId(memberId);
}
@Override
public void create4Custom(PointsAvailable resources) {
String memberCode = resources.getMemberCode();
if (StringUtils.isNotEmpty(memberCode)) {
MemberDTO memberDTO = this.memberService.findByCode(memberCode);
if (Objects.nonNull(memberDTO)) {
Long memberId = memberDTO.getId();
resources.setMemberId(memberId);
public void delete4Custom(Long id) {
Assert.notNull(id, "The given id must not be null!");
this.redisUtils.doLock("PointsAvailable::delete::id"+id);
try {
PointsAvailable PointsAvailable = this.pointsAvailableRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", com.topdraw.business.module.points.available.domain.PointsAvailable.class, id), 1));
this.pointsAvailableRepository.delete(PointsAvailable);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
this.redisUtils.doUnLock("PointsAvailable::delete::id"+id);
}
}
PointsAvailableRepository.save(resources);
@Override
public PointsAvailableDTO create4Custom(PointsAvailable resources) {
this.redisUtils.doLock("PointsAvailable::create::id"+resources.getMemberId().toString());
try {
PointsAvailable pointsAvailable = this.pointsAvailableRepository.save(resources);
return this.pointsAvailableMapper.toDto(pointsAvailable);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
this.redisUtils.doUnLock("PointsAvailable::create::id"+resources.getMemberId().toString());
}
}
}
......
package com.topdraw.business.module.points.detail.detailhistory.service.impl;
import com.topdraw.business.module.points.detail.detailhistory.domain.PointsDetailHistory;
import com.topdraw.business.module.points.detail.detailhistory.repository.PointsDetailHistoryRepository;
import com.topdraw.business.module.points.detail.detailhistory.service.PointsDetailHistoryService;
import com.topdraw.business.module.points.detail.detailhistory.service.dto.PointsDetailHistoryDTO;
import com.topdraw.business.module.points.detail.detailhistory.service.dto.PointsDetailHistoryQueryCriteria;
import com.topdraw.business.module.points.detail.detailhistory.service.mapper.PointsDetailHistoryMapper;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.StringUtils;
......@@ -31,10 +29,10 @@ import java.util.Map;
public class PointsDetailHistoryServiceImpl implements PointsDetailHistoryService {
@Autowired
private PointsDetailHistoryRepository PointsDetailHistoryRepository;
private com.topdraw.business.module.points.detail.detailhistory.repository.PointsDetailHistoryRepository PointsDetailHistoryRepository;
@Autowired
private PointsDetailHistoryMapper PointsDetailHistoryMapper;
private com.topdraw.business.module.points.detail.detailhistory.service.mapper.PointsDetailHistoryMapper PointsDetailHistoryMapper;
@Override
public Map<String, Object> queryAll(PointsDetailHistoryQueryCriteria criteria, Pageable pageable) {
......@@ -49,7 +47,7 @@ public class PointsDetailHistoryServiceImpl implements PointsDetailHistoryServic
@Override
public PointsDetailHistoryDTO findById(Long id) {
PointsDetailHistory PointsDetailHistory = PointsDetailHistoryRepository.findById(id).orElseGet(PointsDetailHistory::new);
PointsDetailHistory PointsDetailHistory = PointsDetailHistoryRepository.findById(id).orElseGet(com.topdraw.business.module.points.detail.detailhistory.domain.PointsDetailHistory::new);
ValidationUtil.isNull(PointsDetailHistory.getId(),"PointsDetailHistory","id",id);
return PointsDetailHistoryMapper.toDto(PointsDetailHistory);
}
......@@ -63,7 +61,7 @@ public class PointsDetailHistoryServiceImpl implements PointsDetailHistoryServic
@Override
@Transactional(rollbackFor = Exception.class)
public void update(PointsDetailHistory resources) {
PointsDetailHistory PointsDetailHistory = PointsDetailHistoryRepository.findById(resources.getId()).orElseGet(PointsDetailHistory::new);
PointsDetailHistory PointsDetailHistory = PointsDetailHistoryRepository.findById(resources.getId()).orElseGet(com.topdraw.business.module.points.detail.detailhistory.domain.PointsDetailHistory::new);
ValidationUtil.isNull( PointsDetailHistory.getId(),"PointsDetailHistory","id",resources.getId());
PointsDetailHistory.copy(resources);
PointsDetailHistoryRepository.save(PointsDetailHistory);
......@@ -74,7 +72,7 @@ public class PointsDetailHistoryServiceImpl implements PointsDetailHistoryServic
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
PointsDetailHistory PointsDetailHistory = PointsDetailHistoryRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", PointsDetailHistory.class, id), 1));
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", com.topdraw.business.module.points.detail.detailhistory.domain.PointsDetailHistory.class, id), 1));
PointsDetailHistoryRepository.delete(PointsDetailHistory);
}
......
package com.topdraw.business.module.points.detail.rest;
import io.swagger.annotations.Api;
/**
* @author XiangHan
* @date 2021-10-22
*/
@Api(tags = "PointsDetail管理")
//@RestController
//@RequestMapping("/api/PointsDetail")
public class PointsDetailController {
/*@Autowired
private PointsDetailService PointsDetailService;
@GetMapping
@ApiOperation("查询PointsDetail")
public ResultInfo getPointsDetails(PointsDetailQueryCriteria criteria, Pageable pageable) {
return ResultInfo.successPage(PointsDetailService.queryAll(criteria,pageable));
}
@GetMapping(value = "/all")
@ApiOperation("查询所有PointsDetail")
public ResultInfo getPointsDetails(PointsDetailQueryCriteria criteria) {
return ResultInfo.success(PointsDetailService.queryAll(criteria));
}
@Log
@PostMapping
@ApiOperation("新增PointsDetail")
public ResultInfo create(@Validated @RequestBody PointsDetail resources) {
PointsDetailService.create(resources);
return ResultInfo.success();
}
@Log
@PutMapping
@ApiOperation("修改PointsDetail")
public ResultInfo update(@Validated @RequestBody PointsDetail resources) {
PointsDetailService.update(resources);
return ResultInfo.success();
}
@Log
@DeleteMapping(value = "/{id}")
@ApiOperation("删除PointsDetail")
public ResultInfo delete(@PathVariable Long id) {
PointsDetailService.delete(id);
return ResultInfo.success();
}
@GetMapping(value = "/getByCode/{code}")
@ApiOperation(value = "根据标识查询")
public ResultInfo getByCode(@PathVariable String code) {
return ResultInfo.success(PointsDetailService.getByCode(code));
}*/
}
......@@ -2,11 +2,8 @@ package com.topdraw.business.module.points.detail.service;
import com.topdraw.business.module.points.detail.domain.PointsDetail;
import com.topdraw.business.module.points.detail.service.dto.PointsDetailDTO;
import com.topdraw.business.module.points.detail.service.dto.PointsDetailQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -15,33 +12,30 @@ import java.util.Map;
public interface PointsDetailService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(PointsDetailQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<PointsDetailDTO>
*/
List<PointsDetailDTO> queryAll(PointsDetailQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return PointsDetailDTO
*/
PointsDetailDTO findById(Long id);
void create(PointsDetail resources);
void create4Custom(PointsDetail resources);
/**
*
* @param resources
* @return
*/
PointsDetailDTO create(PointsDetail resources);
void update(PointsDetail resources);
/**
*
* @param resources
* @return
*/
PointsDetailDTO update(PointsDetail resources);
/**
*
* @param id
*/
void delete(Long id);
/**
......@@ -51,13 +45,23 @@ public interface PointsDetailService {
*/
PointsDetailDTO getByCode(String code);
/**
*
* @param memberId
* @return
*/
List<PointsDetailDTO> loadListExpirePointsByMemberId(Long memberId);
/**
* 已过期的积分
* @param memberId
* @return
*/
List<PointsDetailDTO> findByMemberId(Long memberId);
/**
*
* @param pointsDetail
*/
void create4Custom(PointsDetail pointsDetail);
}
......
package com.topdraw.business.module.points.detail.service.impl;
import com.topdraw.business.module.member.service.MemberService;
import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.business.module.points.detail.domain.PointsDetail;
import com.topdraw.business.module.points.detail.repository.PointsDetailRepository;
import com.topdraw.business.module.points.detail.service.PointsDetailService;
import com.topdraw.business.module.points.detail.service.dto.PointsDetailDTO;
import com.topdraw.business.module.points.detail.service.dto.PointsDetailQueryCriteria;
import com.topdraw.business.module.points.detail.service.mapper.PointsDetailMapper;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.StringUtils;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
......@@ -34,81 +26,47 @@ import java.util.Objects;
public class PointsDetailServiceImpl implements PointsDetailService {
@Autowired
private PointsDetailRepository PointsDetailRepository;
@Autowired
private MemberService memberService;
private PointsDetailRepository pointsDetailRepository;
@Autowired
private PointsDetailMapper PointsDetailMapper;
@Override
public Map<String, Object> queryAll(PointsDetailQueryCriteria criteria, Pageable pageable) {
Page<PointsDetail> page = PointsDetailRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(PointsDetailMapper::toDto));
}
@Override
public List<PointsDetailDTO> queryAll(PointsDetailQueryCriteria criteria) {
return PointsDetailMapper.toDto(PointsDetailRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
private PointsDetailMapper pointsDetailMapper;
@Override
public PointsDetailDTO findById(Long id) {
PointsDetail PointsDetail = PointsDetailRepository.findById(id).orElseGet(PointsDetail::new);
ValidationUtil.isNull(PointsDetail.getId(),"PointsDetail","id",id);
return PointsDetailMapper.toDto(PointsDetail);
PointsDetail pointsDetail = this.pointsDetailRepository.findById(id).orElseGet(PointsDetail::new);
ValidationUtil.isNull(pointsDetail.getId(),"PointsDetail","id",id);
return this.pointsDetailMapper.toDto(pointsDetail);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(PointsDetail resources) {
String memberCode = resources.getMemberCode();
if (StringUtils.isNotEmpty(memberCode)) {
MemberDTO memberDTO = this.memberService.findByCode(memberCode);
if (Objects.nonNull(memberDTO)) {
Long memberId = memberDTO.getId();
resources.setMemberId(memberId);
}
}
PointsDetailRepository.save(resources);
}
@Override
public void create4Custom(PointsDetail resources) {
String memberCode = resources.getMemberCode();
if (StringUtils.isNotEmpty(memberCode)) {
MemberDTO memberDTO = this.memberService.findByCode(memberCode);
if (Objects.nonNull(memberDTO)) {
Long memberId = memberDTO.getId();
resources.setMemberId(memberId);
}
}
PointsDetailRepository.save(resources);
public PointsDetailDTO create(PointsDetail resources) {
PointsDetail pointsDetail = this.pointsDetailRepository.save(resources);
return this.pointsDetailMapper.toDto(pointsDetail);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(PointsDetail resources) {
PointsDetail PointsDetail = PointsDetailRepository.findById(resources.getId()).orElseGet(PointsDetail::new);
ValidationUtil.isNull( PointsDetail.getId(),"PointsDetail","id",resources.getId());
PointsDetail.copy(resources);
PointsDetailRepository.save(PointsDetail);
public PointsDetailDTO update(PointsDetail resources) {
PointsDetail pointsDetail = this.pointsDetailRepository.findById(resources.getId()).orElseGet(PointsDetail::new);
ValidationUtil.isNull( pointsDetail.getId(),"PointsDetail","id",resources.getId());
pointsDetail.copy(resources);
PointsDetail _pointsDetail = this.pointsDetailRepository.save(pointsDetail);
return this.pointsDetailMapper.toDto(_pointsDetail);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
PointsDetail PointsDetail = PointsDetailRepository.findById(id).orElseThrow(
PointsDetail pointsDetail = this.pointsDetailRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", PointsDetail.class, id), 1));
PointsDetailRepository.delete(PointsDetail);
this.pointsDetailRepository.delete(pointsDetail);
}
@Override
public PointsDetailDTO getByCode(String code) {
return StringUtils.isNotEmpty(code) ? PointsDetailMapper.toDto(PointsDetailRepository.findFirstByCode(code).orElseGet(PointsDetail::new))
return StringUtils.isNotEmpty(code) ? this.pointsDetailMapper.toDto(this.pointsDetailRepository.findFirstByCode(code).orElseGet(PointsDetail::new))
: new PointsDetailDTO();
}
......@@ -120,7 +78,12 @@ public class PointsDetailServiceImpl implements PointsDetailService {
@Override
public List<PointsDetailDTO> findByMemberId(Long memberId) {
return Objects.nonNull(memberId)?
PointsDetailMapper.toDto(PointsDetailRepository.findByMemberId(memberId))
this.pointsDetailMapper.toDto(this.pointsDetailRepository.findByMemberId(memberId))
:null;
}
@Override
public void create4Custom(PointsDetail pointsDetail) {
this.pointsDetailRepository.save(pointsDetail);
}
}
......
......@@ -27,35 +27,37 @@ public class Points implements Serializable {
@Column(name = "id")
private Long id;
/** 账号id */
@Column(name = "user_id")
private Long userId;
// 积分类型,通用,绑定, 区分大小屏
/** 积分类型:10:通用积分(跨屏) 11:定向积分(跨屏,绑定用途)20:通用积分(大屏)
21:定向积分(大屏,绑定用途)30:通用积分(小屏) 31:定向积分(小屏,绑定用途)*/
@Column(name = "point_type")
private Integer pointType;
// 绑定对应的实体, 如何描述?
/** 绑定对应的实体, 如何描述? */
@Column(name = "target_no")
private String targetNo;
// 本月期初积分值
/** 本月期初积分值 */
@Column(name = "begin_points")
private Integer beginPoints;
// 当前积分余额
/** 当前积分余额 */
@Column(name = "current_points")
private Integer currentPoints;
// 本月到期积分
/** 本月到期积分 */
@Column(name = "expire_points")
private Integer expirePoints;
// 积分类型:10:通用积分(跨屏) 11:定向积分(跨屏,绑定用途)20:通用积分(大屏) 21:定向积分(大屏,绑定用途)30:通用积分(小屏) 31:定向积分(小屏,绑定用途)
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 最后修改时间
/** 最后修改时间 */
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
......
......@@ -2,11 +2,6 @@ package com.topdraw.business.module.points.service;
import com.topdraw.business.module.points.domain.Points;
import com.topdraw.business.module.points.service.dto.PointsDTO;
import com.topdraw.business.module.points.service.dto.PointsQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -15,31 +10,28 @@ import java.util.Map;
public interface PointsService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(PointsQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<PointsDTO>
*/
List<PointsDTO> queryAll(PointsQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return PointsDTO
*/
PointsDTO findById(Long id);
void create(Points resources);
/**
*
* @param resources
*/
PointsDTO create(Points resources);
void update(Points resources);
/**
*
* @param resources
*/
PointsDTO update(Points resources);
/**
*
* @param id
*/
void delete(Long id);
}
......
......@@ -19,26 +19,30 @@ public class PointsDTO implements Serializable {
@JsonSerialize(using= ToStringSerializer.class)
private Long id;
/** 账号id */
private Long userId;
// 积分类型,通用,绑定, 区分大小屏 todo
/** 积分类型:10:通用积分(跨屏) 11:定向积分(跨屏,绑定用途)20:通用积分(大屏)
21:定向积分(大屏,绑定用途)30:通用积分(小屏) 31:定向积分(小屏,绑定用途)*/
private Integer pointType;
// 绑定对应的实体, 如何描述?
/** 绑定对应的实体, 如何描述? */
private String targetNo;
// 本月期初积分值
/** 本月期初积分值 */
private Integer beginPoints;
// 当前积分余额
/** 当前积分余额 */
private Integer currentPoints;
// 本月到期积分
/** 本月到期积分 */
private Integer expirePoints;
// 积分类型:10:通用积分(跨屏) 11:定向积分(跨屏,绑定用途)20:通用积分(大屏) 21:定向积分(大屏,绑定用途)30:通用积分(小屏) 31:定向积分(小屏,绑定用途)
/** 积分类型:10:通用积分(跨屏) 11:定向积分(跨屏,绑定用途)20:通用积分(大屏)
* 21:定向积分(大屏,绑定用途)30:通用积分(小屏) 31:定向积分(小屏,绑定用途)
*/
private Timestamp createTime;
// 最后修改时间
/** 最后修改时间 */
private Timestamp updateTime;
}
......
package com.topdraw.business.module.points.service.dto;
import lombok.Data;
/**
* @author XiangHan
* @date 2021-10-22
*/
@Data
public class PointsQueryCriteria{
}
package com.topdraw.business.module.points.service.impl;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import com.topdraw.business.module.points.domain.Points;
import com.topdraw.business.module.points.repository.PointsRepository;
import com.topdraw.business.module.points.service.PointsService;
import com.topdraw.business.module.points.service.dto.PointsDTO;
import com.topdraw.business.module.points.service.dto.PointsQueryCriteria;
import com.topdraw.business.module.points.service.mapper.PointsMapper;
import com.topdraw.util.RedissonUtil;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.RedisUtils;
import com.topdraw.utils.ValidationUtil;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -35,48 +24,44 @@ import java.util.Map;
public class PointsServiceImpl implements PointsService {
@Autowired
private PointsRepository PointsRepository;
private PointsRepository pointsRepository;
@Autowired
private PointsMapper PointsMapper;
@Override
public Map<String, Object> queryAll(PointsQueryCriteria criteria, Pageable pageable) {
Page<Points> page = PointsRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(PointsMapper::toDto));
}
@Override
public List<PointsDTO> queryAll(PointsQueryCriteria criteria) {
return PointsMapper.toDto(PointsRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
private PointsMapper pointsMapper;
@Autowired
private RedisUtils redisUtils;
@Override
public PointsDTO findById(Long id) {
Points Points = PointsRepository.findById(id).orElseGet(Points::new);
Points Points = this.pointsRepository.findById(id).orElseGet(Points::new);
ValidationUtil.isNull(Points.getId(),"Points","id",id);
return PointsMapper.toDto(Points);
return this.pointsMapper.toDto(Points);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(Points resources) {
Snowflake snowflake = IdUtil.createSnowflake(1, 1);
resources.setId(snowflake.nextId());
PointsRepository.save(resources);
public PointsDTO create(Points resources) {
Points points = this.pointsRepository.save(resources);
return this.pointsMapper.toDto(points);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(Points resources) {
public PointsDTO update(Points resources) {
this.redisUtils.doLock("Points::update::userId"+resources.getUserId().toString());
try {
Points Points = PointsRepository.findById(resources.getId()).orElseGet(Points::new);
ValidationUtil.isNull(Points.getId(), "Points", "id", resources.getId());
Points.copy(resources);
PointsRepository.save(Points);
Points points = this.pointsRepository.findById(resources.getId()).orElseGet(Points::new);
ValidationUtil.isNull(points.getId(), "Points", "id", resources.getId());
points.copy(resources);
this.pointsRepository.save(points);
return this.pointsMapper.toDto(points);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
this.redisUtils.doUnLock("Points::update::userId"+resources.getUserId().toString());
}
}
......@@ -84,9 +69,9 @@ public class PointsServiceImpl implements PointsService {
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
Points Points = PointsRepository.findById(id).orElseThrow(
Points Points = this.pointsRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", Points.class, id), 1));
PointsRepository.delete(Points);
this.pointsRepository.delete(Points);
}
......
package com.topdraw.business.module.points.standingbook.repository;
import com.topdraw.business.module.points.standingbook.domain.PointsStandingBook;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* @author XiangHan
* @date 2021-10-29
*/
public interface PointsStandingBookRepository extends JpaRepository<PointsStandingBook, Long>, JpaSpecificationExecutor<PointsStandingBook> {
}
package com.topdraw.business.module.points.standingbook.service;
import com.topdraw.business.module.points.standingbook.domain.PointsStandingBook;
import com.topdraw.business.module.points.standingbook.service.dto.PointsStandingBookDTO;
import com.topdraw.business.module.points.standingbook.service.dto.PointsStandingBookQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
* @date 2021-10-29
*/
public interface PointsStandingBookService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(PointsStandingBookQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<PointsStandingBookDTO>
*/
List<PointsStandingBookDTO> queryAll(PointsStandingBookQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return PointsStandingBookDTO
*/
PointsStandingBookDTO findById(Long id);
void create(PointsStandingBook resources);
void update(PointsStandingBook resources);
void delete(Long id);
}
package com.topdraw.business.module.points.standingbook.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* @author XiangHan
* @date 2021-10-29
*/
@Data
public class PointsStandingBookDTO implements Serializable {
// 主键
private Long id;
// 积分生产
private Long pointsProduce;
// 积分消耗
private Long pointsConsume;
// 可用总积分
private Long pointsAvailable;
// 积分过期
private Long pointsExpire;
// 日期
private String day;
// 创建时间
private Timestamp createTime;
// 创建时间
private Timestamp updateTime;
}
package com.topdraw.business.module.points.standingbook.service.dto;
import lombok.Data;
/**
* @author XiangHan
* @date 2021-10-29
*/
@Data
public class PointsStandingBookQueryCriteria{
}
package com.topdraw.business.module.points.standingbook.service.impl;
import com.topdraw.business.module.points.standingbook.domain.PointsStandingBook;
import com.topdraw.business.module.points.standingbook.repository.PointsStandingBookRepository;
import com.topdraw.business.module.points.standingbook.service.PointsStandingBookService;
import com.topdraw.business.module.points.standingbook.service.dto.PointsStandingBookDTO;
import com.topdraw.business.module.points.standingbook.service.dto.PointsStandingBookQueryCriteria;
import com.topdraw.business.module.points.standingbook.service.mapper.PointsStandingBookMapper;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
* @date 2021-10-29
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class PointsStandingBookServiceImpl implements PointsStandingBookService {
@Autowired
private PointsStandingBookRepository PointsStandingBookRepository;
@Autowired
private PointsStandingBookMapper PointsStandingBookMapper;
@Override
public Map<String, Object> queryAll(PointsStandingBookQueryCriteria criteria, Pageable pageable) {
Page<PointsStandingBook> page = PointsStandingBookRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(PointsStandingBookMapper::toDto));
}
@Override
public List<PointsStandingBookDTO> queryAll(PointsStandingBookQueryCriteria criteria) {
return PointsStandingBookMapper.toDto(PointsStandingBookRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
public PointsStandingBookDTO findById(Long id) {
PointsStandingBook PointsStandingBook = PointsStandingBookRepository.findById(id).orElseGet(PointsStandingBook::new);
ValidationUtil.isNull(PointsStandingBook.getId(),"PointsStandingBook","id",id);
return PointsStandingBookMapper.toDto(PointsStandingBook);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(PointsStandingBook resources) {
PointsStandingBookRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(PointsStandingBook resources) {
PointsStandingBook PointsStandingBook = PointsStandingBookRepository.findById(resources.getId()).orElseGet(PointsStandingBook::new);
ValidationUtil.isNull( PointsStandingBook.getId(),"PointsStandingBook","id",resources.getId());
PointsStandingBook.copy(resources);
PointsStandingBookRepository.save(PointsStandingBook);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
PointsStandingBook PointsStandingBook = PointsStandingBookRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", PointsStandingBook.class, id), 1));
PointsStandingBookRepository.delete(PointsStandingBook);
}
}
package com.topdraw.business.module.rights.constant;
public class RightsType {
public static String TYPE_1 = "1";
Integer TYPE_2 = 2;
Integer TYPE_3 = 3;
}
......@@ -23,63 +23,63 @@ import java.sql.Timestamp;
@Table(name="tr_rights")
public class Rights implements Serializable {
// 主键
/** 主键 */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 标识
/** 标识 */
@Column(name = "code", nullable = false)
private String code;
// 权益名称
// @Column(name = "name")
// private String name;
/** 权益名称 */
@Column(name = "name")
private String name;
// 类型 1:实体类 (预留字段)
/** 类型 1:实体类 (预留字段) */
@Column(name = "type", nullable = false)
private Integer type;
// 终端类型 0:大屏;1:微信小程序/公众号;2:App
/** 终端类型 0:大屏;1:微信小程序/公众号;2:App */
@Column(name = "device_type", nullable = false)
private Integer deviceType;
// 权益的实体类型 1:积分;2成长值;3优惠券
/** 权益的实体类型 1:积分;2成长值;3优惠券 */
@Column(name = "entity_type", nullable = false)
private String entityType;
// 实体id
/** 实体id */
@Column(name = "entity_id", nullable = false)
private Long entityId;
// 生效时间,为null表示获取后立即生效,不为空时,表示特定的生效时间
/** 生效时间,为null表示获取后立即生效,不为空时,表示特定的生效时间 */
@Column(name = "valid_time")
private Timestamp validTime;
// 失效时间,空为不失效,否则为获得权益后直到失效的毫秒数
/** 失效时间,空为不失效,否则为获得权益后直到失效的毫秒数 */
@Column(name = "expire_time")
private Long expireTime;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
// 图片
/** 图片 */
@Column(name = "image")
private String image;
// 图片
/** 图片 */
@Column(name = "images")
private String images;
// 描述
/** 描述 */
@Column(name = "description")
private String description;
......
......@@ -2,7 +2,7 @@ package com.topdraw.business.module.rights.history.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.topdraw.business.module.common.domain.DefaultAsyncMqModule;
import com.topdraw.business.module.common.domain.AsyncMqModule;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
......@@ -23,7 +23,7 @@ import java.time.LocalDateTime;
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="tr_rights_histroy")
public class RightsHistory extends DefaultAsyncMqModule implements Serializable {
public class RightsHistory extends AsyncMqModule implements Serializable {
// 主键id
@Id
......@@ -52,7 +52,7 @@ public class RightsHistory extends DefaultAsyncMqModule implements Serializable
// 发放时间
@Column(name = "send_time")
private LocalDateTime sendTime;
private Timestamp sendTime;
// 失效时间
@Column(name = "expire_time")
......@@ -60,11 +60,11 @@ public class RightsHistory extends DefaultAsyncMqModule implements Serializable
@CreatedDate
@Column(name = "create_time")
private LocalDateTime createTime;
private Timestamp createTime;
@LastModifiedDate
@Column(name = "update_time")
private LocalDateTime updateTime;
private Timestamp updateTime;
public void copy(RightsHistory source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
......
package com.topdraw.business.module.rights.history.repository;
import com.topdraw.business.module.rights.history.domain.RightsHistory;
import com.topdraw.business.module.rights.history.service.dto.RightsHistoryDTO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
/**
* @author XiangHan
* @date 2021-10-22
*/
public interface RightsHistoryRepository extends JpaRepository<RightsHistory, Long>, JpaSpecificationExecutor<RightsHistory> {
List<RightsHistoryDTO> findByMemberId(Long memberId);
}
......
......@@ -2,11 +2,8 @@ package com.topdraw.business.module.rights.history.service;
import com.topdraw.business.module.rights.history.domain.RightsHistory;
import com.topdraw.business.module.rights.history.service.dto.RightsHistoryDTO;
import com.topdraw.business.module.rights.history.service.dto.RightsHistoryQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -15,19 +12,12 @@ import java.util.Map;
public interface RightsHistoryService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(RightsHistoryQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<RightsHistoryDTO>
*
* @param memberId
* @param memberCode
* @return
*/
List<RightsHistoryDTO> queryAll(RightsHistoryQueryCriteria criteria);
List<RightsHistoryDTO> findByMemberIdOrMemberCode(Long memberId, String memberCode);
/**
* 根据ID查询
......
......@@ -30,12 +30,12 @@ public class RightsHistoryDTO implements Serializable {
private String operatorName;
// 发放时间
private LocalDateTime sendTime;
private Timestamp sendTime;
// 失效时间
private LocalDateTime expireTime;
private LocalDateTime createTime;
private Timestamp createTime;
private LocalDateTime updateTime;
private Timestamp updateTime;
}
......
......@@ -6,23 +6,16 @@ import com.topdraw.business.module.rights.history.domain.RightsHistory;
import com.topdraw.business.module.rights.history.repository.RightsHistoryRepository;
import com.topdraw.business.module.rights.history.service.RightsHistoryService;
import com.topdraw.business.module.rights.history.service.dto.RightsHistoryDTO;
import com.topdraw.business.module.rights.history.service.dto.RightsHistoryQueryCriteria;
import com.topdraw.business.module.rights.history.service.mapper.RightsHistoryMapper;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.ValidationUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -33,60 +26,49 @@ import java.util.Map;
public class RightsHistoryServiceImpl implements RightsHistoryService {
@Autowired
private RightsHistoryRepository RightsHistoryRepository;
@Autowired
private MemberService memberService;
@Autowired
private RightsHistoryMapper RightsHistoryMapper;
private RightsHistoryMapper rightsHistoryMapper;
@Autowired
private RightsHistoryRepository rightsHistoryRepository;
@Override
public Map<String, Object> queryAll(RightsHistoryQueryCriteria criteria, Pageable pageable) {
Page<RightsHistory> page = RightsHistoryRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(RightsHistoryMapper::toDto));
}
@Override
public List<RightsHistoryDTO> queryAll(RightsHistoryQueryCriteria criteria) {
return RightsHistoryMapper.toDto(RightsHistoryRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
public List<RightsHistoryDTO> findByMemberIdOrMemberCode(Long memberId, String memberCode) {
MemberDTO memberDTO = this.memberService.checkMember(memberId, memberCode);
List<RightsHistoryDTO> rightsHistoryDTOList = this.rightsHistoryRepository.findByMemberId(memberDTO.getId());
return rightsHistoryDTOList;
}
@Override
public RightsHistoryDTO findById(Long id) {
RightsHistory RightsHistory = RightsHistoryRepository.findById(id).orElseGet(RightsHistory::new);
RightsHistory RightsHistory = this.rightsHistoryRepository.findById(id).orElseGet(com.topdraw.business.module.rights.history.domain.RightsHistory::new);
ValidationUtil.isNull(RightsHistory.getId(),"RightsHistory","id",id);
return RightsHistoryMapper.toDto(RightsHistory);
return this.rightsHistoryMapper.toDto(RightsHistory);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(RightsHistory resources) {
String memberCode = resources.getMemberCode();
if (StringUtils.isNotBlank(memberCode)) {
MemberDTO memberDTO = this.memberService.findByCode(memberCode);
Long id = memberDTO.getId();
resources.setMemberId(id);
}
RightsHistoryRepository.save(resources);
this.rightsHistoryRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(RightsHistory resources) {
RightsHistory RightsHistory = RightsHistoryRepository.findById(resources.getId()).orElseGet(RightsHistory::new);
ValidationUtil.isNull( RightsHistory.getId(),"RightsHistory","id",resources.getId());
RightsHistory RightsHistory = this.rightsHistoryRepository.findById(resources.getId()).orElseGet(com.topdraw.business.module.rights.history.domain.RightsHistory::new);
ValidationUtil.isNull(RightsHistory.getId(),"RightsHistory","id",resources.getId());
RightsHistory.copy(resources);
RightsHistoryRepository.save(RightsHistory);
this.rightsHistoryRepository.save(RightsHistory);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
RightsHistory RightsHistory = RightsHistoryRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", RightsHistory.class, id), 1));
RightsHistoryRepository.delete(RightsHistory);
RightsHistory RightsHistory = this.rightsHistoryRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", com.topdraw.business.module.rights.history.domain.RightsHistory.class, id), 1));
this.rightsHistoryRepository.delete(RightsHistory);
}
......
......@@ -24,58 +24,58 @@ import java.sql.Timestamp;
@Table(name="uc_permanent_rights")
public class PermanentRights implements Serializable {
// ID
/** ID */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 标识
/** 标识 */
@Column(name = "code", nullable = false)
private String code;
// 名称
/** 名称 */
@Column(name = "name", nullable = false)
private String name;
// 永久权益类型 0:vip;1:会员等级
/** 永久权益类型 0:vip;1:会员等级 */
@Column(name = "type")
private Integer type;
// 等级(当权益类型为vip时,对应vip值,当权益类型为会员等级时,对应等级index)
/** 等级(当权益类型为vip时,对应vip值,当权益类型为会员等级时,对应等级index) */
@Column(name = "level")
private Integer level;
// 商品折扣,10代表10% off,范围为0-100
/** 商品折扣,10代表10% off,范围为0-100 */
@Column(name = "item_discount", nullable = false)
private BigDecimal itemDiscount;
// 额外积分比率,范围为0-1000
/** 额外积分比率,范围为0-1000 */
@Column(name = "extra_points", nullable = false)
private BigDecimal extraPoints;
// 免广告
/** 免广告 */
@Column(name = "ad_disabled", nullable = false)
private Integer adDisabled;
// 额外活动参与机会
/** 额外活动参与机会 */
@Column(name = "extra_activity_ticket", nullable = false)
private Integer extraActivityTicket;
// 免费试看
/** 免费试看 */
@Column(name = "free_trial", nullable = false)
private Integer freeTrial;
// 上电视专区权益
/** 上电视专区权益 */
@Column(name = "zone_sds", nullable = false)
private Integer zoneSds;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
......
......@@ -13,4 +13,6 @@ import java.util.Optional;
public interface PermanentRightsRepository extends JpaRepository<PermanentRights, Long>, JpaSpecificationExecutor<PermanentRights> {
Optional<PermanentRights> findFirstByCode(String code);
PermanentRights findByLevel(Integer level);
}
......
package com.topdraw.business.module.rights.permanentrights.service;
import com.topdraw.business.module.rights.permanentrights.domain.PermanentRights;
import com.topdraw.business.module.rights.permanentrights.service.dto.PermanentRightsDTO;
import com.topdraw.business.module.rights.permanentrights.service.dto.PermanentRightsQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -15,37 +9,23 @@ import java.util.Map;
public interface PermanentRightsService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(PermanentRightsQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<PermanentRightsDTO>
*/
List<PermanentRightsDTO> queryAll(PermanentRightsQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return PermanentRightsDTO
*/
PermanentRightsDTO findById(Long id);
void create(PermanentRights resources);
void update(PermanentRights resources);
void delete(Long id);
/**
* Code校验
* @param code
* @return PermanentRightsDTO
*/
PermanentRightsDTO getByCode(String code);
/**
* 通过会员等级获取对应的永久权益
* @param level
* @return
*/
PermanentRightsDTO findByLevel(Integer level);
}
......
......@@ -14,42 +14,42 @@ import java.sql.Timestamp;
@Data
public class PermanentRightsDTO implements Serializable {
// ID
/** ID */
private Long id;
// 标识
/** 标识 */
private String code;
// 名称
/** 名称 */
private String name;
// 永久权益类型 0:vip;1:会员等级
/** 永久权益类型 0:vip;1:会员等级 */
private Integer type;
// 等级(当权益类型为vip时,对应vip值,当权益类型为会员等级时,对应等级index)
/** 等级(当权益类型为vip时,对应vip值,当权益类型为会员等级时,对应等级index) */
private Integer level;
// 商品折扣,10代表10% off,范围为0-100
/** 商品折扣,10代表10% off,范围为0-100 */
private BigDecimal itemDiscount;
// 额外积分比率,范围为0-1000
/** 额外积分比率,范围为0-1000 */
private BigDecimal extraPoints;
// 免广告
/** 免广告 */
private Integer adDisabled;
// 额外活动参与机会
/** 额外活动参与机会 */
private Integer extraActivityTicket;
// 免费试看
/** 免费试看 */
private Integer freeTrial;
// 上电视专区权益
/** 上电视专区权益 */
private Integer zoneSds;
// 创建时间
/** 创建时间 */
private Timestamp createTime;
// 更新时间
/** 更新时间 */
private Timestamp updateTime;
}
......
package com.topdraw.business.module.rights.permanentrights.service.dto;
import com.topdraw.annotation.Query;
import lombok.Data;
/**
* @author XiangHan
* @date 2021-10-22
*/
@Data
public class PermanentRightsQueryCriteria{
@Query(type = Query.Type.EQUAL)
private Integer level;
}
......@@ -4,23 +4,13 @@ import com.topdraw.business.module.rights.permanentrights.domain.PermanentRights
import com.topdraw.business.module.rights.permanentrights.repository.PermanentRightsRepository;
import com.topdraw.business.module.rights.permanentrights.service.PermanentRightsService;
import com.topdraw.business.module.rights.permanentrights.service.dto.PermanentRightsDTO;
import com.topdraw.business.module.rights.permanentrights.service.dto.PermanentRightsQueryCriteria;
import com.topdraw.business.module.rights.permanentrights.service.mapper.PermanentRightsMapper;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.StringUtils;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -31,57 +21,27 @@ import java.util.Map;
public class PermanentRightsServiceImpl implements PermanentRightsService {
@Autowired
private PermanentRightsRepository PermanentRightsRepository;
private PermanentRightsRepository permanentRightsRepository;
@Autowired
private PermanentRightsMapper PermanentRightsMapper;
@Override
public Map<String, Object> queryAll(PermanentRightsQueryCriteria criteria, Pageable pageable) {
Page<PermanentRights> page = PermanentRightsRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(PermanentRightsMapper::toDto));
}
@Override
public List<PermanentRightsDTO> queryAll(PermanentRightsQueryCriteria criteria) {
return PermanentRightsMapper.toDto(PermanentRightsRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
private PermanentRightsMapper permanentRightsMapper;
@Override
public PermanentRightsDTO findById(Long id) {
PermanentRights PermanentRights = PermanentRightsRepository.findById(id).orElseGet(PermanentRights::new);
PermanentRights PermanentRights = this.permanentRightsRepository.findById(id).orElseGet(com.topdraw.business.module.rights.permanentrights.domain.PermanentRights::new);
ValidationUtil.isNull(PermanentRights.getId(),"PermanentRights","id",id);
return PermanentRightsMapper.toDto(PermanentRights);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(PermanentRights resources) {
PermanentRightsRepository.save(resources);
return this.permanentRightsMapper.toDto(PermanentRights);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(PermanentRights resources) {
PermanentRights PermanentRights = PermanentRightsRepository.findById(resources.getId()).orElseGet(PermanentRights::new);
ValidationUtil.isNull( PermanentRights.getId(),"PermanentRights","id",resources.getId());
PermanentRights.copy(resources);
PermanentRightsRepository.save(PermanentRights);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
PermanentRights PermanentRights = PermanentRightsRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", PermanentRights.class, id), 1));
PermanentRightsRepository.delete(PermanentRights);
public PermanentRightsDTO getByCode(String code) {
return StringUtils.isNotEmpty(code) ? this.permanentRightsMapper.toDto(this.permanentRightsRepository.findFirstByCode(code).orElseGet(PermanentRights::new))
: new PermanentRightsDTO();
}
@Override
public PermanentRightsDTO getByCode(String code) {
return StringUtils.isNotEmpty(code) ? PermanentRightsMapper.toDto(PermanentRightsRepository.findFirstByCode(code).orElseGet(PermanentRights::new))
: new PermanentRightsDTO();
public PermanentRightsDTO findByLevel(Integer level) {
PermanentRights PermanentRights = this.permanentRightsRepository.findByLevel(level);
return this.permanentRightsMapper.toDto(PermanentRights);
}
}
......
package com.topdraw.business.module.rights.service;
import com.topdraw.business.module.rights.domain.Rights;
import com.topdraw.business.module.rights.service.dto.RightsDTO;
import com.topdraw.business.module.rights.service.dto.RightsQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -15,21 +9,6 @@ import java.util.Map;
public interface RightsService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(RightsQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<RightsDTO>
*/
List<RightsDTO> queryAll(RightsQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return RightsDTO
......@@ -37,19 +16,6 @@ public interface RightsService {
RightsDTO findById(Long id);
/**
* 批量查询
* @param ids
* @return
*/
List<RightsDTO> findBatchByIds(Long... ids);
void create(Rights resources);
void update(Rights resources);
void delete(Long id);
/**
* Code校验
* @param code
* @return RightsDTO
......
......@@ -13,44 +13,45 @@ import java.sql.Timestamp;
@Data
public class RightsDTO implements Serializable {
// 主键
/** 主键 */
private Long id;
// 标识
/** 标识 */
private String code;
// 权益名称
// private String name;
// 终端类型 0:大屏;1:微信小程序/公众号;2:App
/** 权益名称 */
private String name;
/** 终端类型 0:大屏;1:微信小程序/公众号;2:App */
private Integer deviceType;
// 类型 1:实体类 (预留字段)
/** 类型 1:实体类 (预留字段) */
private Integer type;
// 权益的实体类型 1:积分;2成长值;3优惠券
/** 权益的实体类型 1:积分;2成长值;3优惠券 */
private String entityType;
// 实体id
/** 实体id */
private Long entityId;
// 生效时间,为null表示获取后立即生效,不为空时,表示特定的生效时间
/** 生效时间,为null表示获取后立即生效,不为空时,表示特定的生效时间 */
private Timestamp validTime;
// 失效时间,空为不失效,否则为获得权益后直到失效的毫秒数
/** 失效时间,空为不失效,否则为获得权益后直到失效的毫秒数 */
private Long expireTime;
// 创建时间
/** 创建时间 */
private Timestamp createTime;
// 更新时间
/** 更新时间 */
private Timestamp updateTime;
// 图片
/** 图片 */
private String image;
// 图片
/** 图片 */
private String images;
// 描述
/** 描述 */
private String description;
}
......
package com.topdraw.business.module.rights.service.dto;
import com.topdraw.annotation.Query;
import lombok.Data;
/**
* @author XiangHan
* @date 2021-10-22
*/
@Data
public class RightsQueryCriteria{
@Query
private Long memberId;
private RightsQueryType queryType;
}
package com.topdraw.business.module.rights.service.dto;
public enum RightsQueryType {
// 全部
ALL,
// 可用
AVAILABLE_ONLY
}
......@@ -4,24 +4,13 @@ import com.topdraw.business.module.rights.domain.Rights;
import com.topdraw.business.module.rights.repository.RightsRepository;
import com.topdraw.business.module.rights.service.RightsService;
import com.topdraw.business.module.rights.service.dto.RightsDTO;
import com.topdraw.business.module.rights.service.dto.RightsQueryCriteria;
import com.topdraw.business.module.rights.service.mapper.RightsMapper;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.StringUtils;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -32,63 +21,20 @@ import java.util.Map;
public class RightsServiceImpl implements RightsService {
@Autowired
private RightsRepository RightsRepository;
private RightsRepository rightsRepository;
@Autowired
private RightsMapper RightsMapper;
@Override
public Map<String, Object> queryAll(RightsQueryCriteria criteria, Pageable pageable) {
Page<Rights> page = RightsRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(RightsMapper::toDto));
}
@Override
public List<RightsDTO> queryAll(RightsQueryCriteria criteria) {
return RightsMapper.toDto(RightsRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
private RightsMapper rightsMapper;
@Override
public RightsDTO findById(Long id) {
Rights Rights = RightsRepository.findById(id).orElseGet(Rights::new);
Rights Rights = this.rightsRepository.findById(id).orElseGet(com.topdraw.business.module.rights.domain.Rights::new);
ValidationUtil.isNull(Rights.getId(),"Rights","id",id);
return RightsMapper.toDto(Rights);
}
@Override
public List<RightsDTO> findBatchByIds(Long... ids) {
List<Rights> rightsList = this.RightsRepository.findBatchByIds(ids);
return !CollectionUtils.isEmpty(rightsList) ? RightsMapper.toDto(rightsList) : null;
return this.rightsMapper.toDto(Rights);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(Rights resources) {
RightsRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(Rights resources) {
Rights Rights = RightsRepository.findById(resources.getId()).orElseGet(Rights::new);
ValidationUtil.isNull( Rights.getId(),"Rights","id",resources.getId());
Rights.copy(resources);
RightsRepository.save(Rights);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
Rights Rights = RightsRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", Rights.class, id), 1));
RightsRepository.delete(Rights);
}
@Override
public RightsDTO getByCode(String code) {
return StringUtils.isNotEmpty(code) ? RightsMapper.toDto(RightsRepository.findFirstByCode(code).orElseGet(Rights::new))
return StringUtils.isNotEmpty(code) ? this.rightsMapper.toDto(this.rightsRepository.findFirstByCode(code).orElseGet(Rights::new))
: new RightsDTO();
}
}
......
package com.topdraw.business.module.task.attribute.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author XiangHan
* @date 2022-01-13
*/
@Entity
@Data
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="tr_task_attr")
public class TaskAttr implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
/** 任务id(关联task主键) */
@Column(name = "task_id")
private Long taskId;
/** 任务属性字符串 */
@Column(name = "attr_str")
private String attrStr;
public void copy(TaskAttr source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
package com.topdraw.business.module.task.attribute.repository;
import com.topdraw.business.module.task.attribute.domain.TaskAttr;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.Optional;
/**
* @author XiangHan
* @date 2022-01-13
*/
public interface TaskAttrRepository extends JpaRepository<TaskAttr, Long>, JpaSpecificationExecutor<TaskAttr> {
Optional<TaskAttr> findByTaskId(Long taskId);
}
package com.topdraw.business.module.task.attribute.service;
import com.topdraw.business.module.task.attribute.domain.TaskAttr;
import com.topdraw.business.module.task.attribute.service.dto.TaskAttrDTO;
/**
* @author XiangHan
* @date 2022-01-13
*/
public interface TaskAttrService {
/**
* 根据ID查询
* @param id ID
* @return TaskAttrDTO
*/
TaskAttrDTO findById(Long id);
/**
*
* @param resources
*/
void create(TaskAttr resources);
/**
*
* @param resources
*/
void update(TaskAttr resources);
/**
*
* @param id
*/
void delete(Long id);
/**
*
* @param taskId
* @return
*/
TaskAttrDTO findByTaskId(Long taskId);
}
package com.topdraw.business.module.coupon.history.service.dto;
package com.topdraw.business.module.task.attribute.service.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @author XiangHan
* @date 2021-10-23
* @date 2022-01-13
*/
@Data
public class CouponHistoryQueryCriteria{
public class TaskAttrDTO implements Serializable {
private Long id;
/** 任务id(关联task主键) */
private Long taskId;
/** 任务属性字符串 */
private String attrStr;
}
......
package com.topdraw.business.module.task.attribute.service.impl;
import com.topdraw.business.module.task.attribute.domain.TaskAttr;
import com.topdraw.business.module.task.attribute.repository.TaskAttrRepository;
import com.topdraw.business.module.task.attribute.service.TaskAttrService;
import com.topdraw.business.module.task.attribute.service.dto.TaskAttrDTO;
import com.topdraw.business.module.task.attribute.service.mapper.TaskAttrMapper;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
/**
* @author XiangHan
* @date 2022-01-13
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class TaskAttrServiceImpl implements TaskAttrService {
@Autowired
private TaskAttrMapper taskAttrMapper;
@Autowired
private TaskAttrRepository taskAttrRepository;
@Override
public TaskAttrDTO findById(Long id) {
TaskAttr TaskAttr = this.taskAttrRepository.findById(id).orElseGet(TaskAttr::new);
ValidationUtil.isNull(TaskAttr.getId(),"TaskAttr","id",id);
return this.taskAttrMapper.toDto(TaskAttr);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(TaskAttr resources) {
this.taskAttrRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(TaskAttr resources) {
TaskAttr TaskAttr = this.taskAttrRepository.findById(resources.getId()).orElseGet(TaskAttr::new);
ValidationUtil.isNull( TaskAttr.getId(),"TaskAttr","id",resources.getId());
TaskAttr.copy(resources);
this.taskAttrRepository.save(TaskAttr);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
TaskAttr TaskAttr = this.taskAttrRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", TaskAttr.class, id), 1));
this.taskAttrRepository.delete(TaskAttr);
}
@Override
public TaskAttrDTO findByTaskId(Long taskId) {
TaskAttr TaskAttr = this.taskAttrRepository.findByTaskId(taskId).orElseGet(TaskAttr::new);
return this.taskAttrMapper.toDto(TaskAttr);
}
}
package com.topdraw.business.module.points.standingbook.service.mapper;
package com.topdraw.business.module.task.attribute.service.mapper;
import com.topdraw.base.BaseMapper;
import com.topdraw.business.module.points.standingbook.domain.PointsStandingBook;
import com.topdraw.business.module.points.standingbook.service.dto.PointsStandingBookDTO;
import com.topdraw.business.module.task.attribute.domain.TaskAttr;
import com.topdraw.business.module.task.attribute.service.dto.TaskAttrDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author XiangHan
* @date 2021-10-29
* @date 2022-01-13
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface PointsStandingBookMapper extends BaseMapper<PointsStandingBookDTO, PointsStandingBook> {
public interface TaskAttrMapper extends BaseMapper<TaskAttrDTO, TaskAttr> {
}
......
......@@ -11,6 +11,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
* @author XiangHan
......@@ -28,104 +29,104 @@ public class Task implements Serializable {
@Column(name = "id")
private Long id;
// 任务模板id
/** 任务模板id */
@Column(name = "task_template_id", nullable = false)
private Long taskTemplateId;
// 任务重复类型,-1:不限次;1:单次;>1:多次
/** 任务重复类型,-1:不限次;1:单次;>1:多次 */
@Column(name = "task_repeat_type", nullable = false)
private Integer taskRepeatType;
// 任务每日重置 0:不重置;1:重置
/** 任务每日重置 0:不重置;1:重置 */
@Column(name = "task_daily_reset", nullable = false)
private Integer taskDailyReset;
// 行为量(完成此任务需要多少次相同行为的触发)
/** 行为量(完成此任务需要多少次相同行为的触发) */
@Column(name = "action_amount", nullable = false)
private Integer actionAmount;
// 任务生效时间
/** 任务生效时间 */
@Column(name = "valid_time")
private Timestamp validTime;
// 任务失效时间
/** 任务失效时间 */
@Column(name = "expire_time")
private Timestamp expireTime;
private LocalDateTime expireTime;
// 显示顺序
/** 显示顺序 */
@Column(name = "sequence")
private Integer sequence;
// 获得成长值
/** 获得成长值 */
@Column(name = "reward_exp", nullable = false)
private Long rewardExp;
// 获得积分
/** 获得积分 */
@Column(name = "reward_points", nullable = false)
private Long rewardPoints;
// 积分过期时间(空为不过期)
/** 积分过期时间(空为不过期) */
@Column(name = "reward_points_expire_time")
private Long rewardPointsExpireTime;
// 积分获取类型 0:定值;1:随机
/** 积分获取类型 0:定值;1:随机 */
@Column(name = "points_type")
private Integer pointsType;
// 随机积分最大值
/** 随机积分最大值 */
@Column(name = "reward_max_points")
private Integer rewardMaxPoints;
// 能够获取该任务的用户分组,为空则都能获取
/** 能够获取该任务的用户分组,为空则都能获取 */
@Column(name = "groups")
private String groups;
// 权益发放策略 0:立即发放;1:次日发放;2:次月发放
/** 权益发放策略 0:立即发放;1:次日发放;2:次月发放 */
@Column(name = "rights_send_strategy", nullable = false)
private Integer rightsSendStrategy;
// 会员等级门槛(0表示无门槛)
/** 会员等级门槛(0表示无门槛) */
@Column(name = "member_level", nullable = false)
private Integer memberLevel;
// 会员vip门槛(0表示没有门槛)
/** 会员vip门槛(0表示没有门槛) */
@Column(name = "member_vip")
private Integer memberVip;
// 权益id
/** 权益id */
@Column(name = "rights_id")
private Long rightsId;
// 权益数量(活动机会次数、优惠券数量、奖品数量)
/** 权益数量(活动机会次数、优惠券数量、奖品数量) */
@Column(name = "rights_amount")
private Integer rightsAmount;
// 权益2id
/** 权益2id */
@Column(name = "rights2_id")
private Long rights2Id;
// 权益2数量
/** 权益2数量 */
@Column(name = "rights2_amount")
private Integer rights2Amount;
// 权益3id
/** 权益3id */
@Column(name = "rights3_id")
private Long rights3Id;
// 权益3数量
/** 权益3数量 */
@Column(name = "rights3_amount")
private Integer rights3Amount;
// 状态 0:失效;1:生效
/** 状态 0:失效;1:生效 */
@Column(name = "status", nullable = false)
private Integer status;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
......
package com.topdraw.business.module.points.standingbook.domain;
package com.topdraw.business.module.task.progress.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
......@@ -14,52 +16,55 @@ import java.sql.Timestamp;
/**
* @author XiangHan
* @date 2021-10-29
* @date 2021-11-02
*/
@Entity
@Data
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_points_standing_book")
public class PointsStandingBook implements Serializable {
@Table(name="uc_tr_task_progress")
@AllArgsConstructor
@NoArgsConstructor
public class TrTaskProgress implements Serializable {
// 主键
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 积分生产
@Column(name = "points_produce", nullable = false)
private Long pointsProduce;
/** 用户id */
@Column(name = "member_id", nullable = false)
private Long memberId;
// 积分消耗
@Column(name = "points_consume", nullable = false)
private Long pointsConsume;
/** 任务id */
@Column(name = "task_id")
private Long taskId;
// 可用总积分
@Column(name = "points_available", nullable = false)
private Long pointsAvailable;
/** 已完成的行为量 */
@Column(name = "current_action_amount")
private Integer currentActionAmount;
// 积分过期
@Column(name = "points_expire", nullable = false)
private Long pointsExpire;
/** 目标行为量 */
@Column(name = "target_action_amount")
private Integer targetActionAmount;
// 日期
@Column(name = "day")
private String day;
/** 状态 0:未完成;1:已完成 */
@Column(name = "status")
private Integer status;
/** 完成时间 */
@Column(name = "completion_time")
private Timestamp completionTime;
// 创建时间
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 创建时间
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
public void copy(PointsStandingBook source){
public void copy(TrTaskProgress source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
......
package com.topdraw.business.module.task.progress.repository;
import com.topdraw.business.module.task.progress.domain.TrTaskProgress;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
/**
* @author XiangHan
* @date 2021-11-02
*/
public interface TrTaskProgressRepository extends JpaRepository<TrTaskProgress, Long>, JpaSpecificationExecutor<TrTaskProgress> {
@Query(value = "select id, member_id, task_id , current_action_amount , \n" +
" target_action_amount , `status` , completion_time,create_time,update_time from uc_tr_task_progress where member_id = ?1 \n" +
" and task_id = ?2 and Date(completion_time) = ?3 ",nativeQuery = true)
List<TrTaskProgress> findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1);
}
package com.topdraw.business.module.task.progress.service;
import com.topdraw.business.module.task.progress.domain.TrTaskProgress;
import com.topdraw.business.module.task.progress.service.dto.TrTaskProgressDTO;
import java.util.List;
/**
* @author XiangHan
* @date 2021-11-02
*/
public interface TrTaskProgressService {
/**
* 根据ID查询
* @param id ID
* @return TrTaskProgressDTO
*/
TrTaskProgressDTO findById(Long id);
/**
*
* @param resources
*/
void create(TrTaskProgress resources);
/**
*
* @param resources
*/
void update(TrTaskProgress resources);
/**
*
* @param id
*/
void delete(Long id);
/**
*
* @param memberId
* @param taskId
* @param time1
* @return
*/
List<TrTaskProgressDTO> findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1);
}
package com.topdraw.business.module.task.progress.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* @author XiangHan
* @date 2021-11-02
*/
@Data
public class TrTaskProgressDTO implements Serializable {
private Long id;
/** 用户id */
private Long memberId;
/** 任务id */
private Long taskId;
/** 已完成的行为量 */
private Integer currentActionAmount;
/** 目标行为量 */
private Integer targetActionAmount;
/** 状态 0:未完成;1:已完成 */
private Integer status;
/** 完成时间 */
private Timestamp completionTime;
private Timestamp createTime;
private Timestamp updateTime;
}
package com.topdraw.business.module.task.progress.service.impl;
import com.topdraw.business.module.task.progress.domain.TrTaskProgress;
import com.topdraw.business.module.task.progress.repository.TrTaskProgressRepository;
import com.topdraw.business.module.task.progress.service.TrTaskProgressService;
import com.topdraw.business.module.task.progress.service.dto.TrTaskProgressDTO;
import com.topdraw.business.module.task.progress.service.mapper.TrTaskProgressMapper;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.List;
/**
* @author XiangHan
* @date 2021-11-02
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class TrTaskProgressServiceImpl implements TrTaskProgressService {
@Autowired
private TrTaskProgressRepository trTaskProgressRepository;
@Autowired
private TrTaskProgressMapper trTaskProgressMapper;
@Override
public TrTaskProgressDTO findById(Long id) {
TrTaskProgress TrTaskProgress = this.trTaskProgressRepository.findById(id).orElseGet(TrTaskProgress::new);
ValidationUtil.isNull(TrTaskProgress.getId(),"TrTaskProgress","id",id);
return this.trTaskProgressMapper.toDto(TrTaskProgress);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(TrTaskProgress resources) {
this.trTaskProgressRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(TrTaskProgress resources) {
TrTaskProgress TrTaskProgress = this.trTaskProgressRepository.findById(resources.getId()).orElseGet(TrTaskProgress::new);
ValidationUtil.isNull( TrTaskProgress.getId(),"TrTaskProgress","id",resources.getId());
TrTaskProgress.copy(resources);
this.trTaskProgressRepository.save(TrTaskProgress);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
TrTaskProgress TrTaskProgress = this.trTaskProgressRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", TrTaskProgress.class, id), 1));
this.trTaskProgressRepository.delete(TrTaskProgress);
}
@Override
public List<TrTaskProgressDTO> findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1) {
return this.trTaskProgressMapper.toDto(this.trTaskProgressRepository.findByMemberIdAndTaskIdAndCompletionTime(memberId,taskId,time1));
}
}
package com.topdraw.business.module.task.progress.service.mapper;
import com.topdraw.base.BaseMapper;
import com.topdraw.business.module.task.progress.domain.TrTaskProgress;
import com.topdraw.business.module.task.progress.service.dto.TrTaskProgressDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author XiangHan
* @date 2021-11-02
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface TrTaskProgressMapper extends BaseMapper<TrTaskProgressDTO, TrTaskProgress> {
}
......@@ -14,5 +14,4 @@ public interface TaskRepository extends JpaRepository<Task, Long>, JpaSpecificat
List<Task> findByTaskTemplateId(Long taskTemplateId);
// List<Task> findByTemplateId(Long taskTemplateId);
}
......
......@@ -2,11 +2,8 @@ package com.topdraw.business.module.task.service;
import com.topdraw.business.module.task.domain.Task;
import com.topdraw.business.module.task.service.dto.TaskDTO;
import com.topdraw.business.module.task.service.dto.TaskQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -15,32 +12,16 @@ import java.util.Map;
public interface TaskService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(TaskQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<TaskDTO>
*/
List<TaskDTO> queryAll(TaskQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return TaskDTO
*/
TaskDTO findById(Long id);
void create(Task resources);
void update(Task resources);
void delete(Long id);
/**
*
* @param taskTemplateId
* @return
*/
List<Task> findByTemplateId(Long taskTemplateId);
}
......
......@@ -4,6 +4,7 @@ import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
......@@ -15,69 +16,69 @@ public class TaskDTO implements Serializable {
private Long id;
// 任务模板id
/** 任务模板id */
private Long taskTemplateId;
// 任务重复类型,-1:不限次;1:单次;>1:多次
/** 任务重复类型,-1:不限次;1:单次;>1:多次 */
private Integer taskRepeatType;
// 任务每日重置 0:不重置;1:重置
/** 任务每日重置 0:不重置;1:重置 */
private Integer taskDailyReset;
// 行为量(完成此任务需要多少次相同行为的触发)
/** 行为量(完成此任务需要多少次相同行为的触发) */
private Integer actionAmount;
// 任务生效时间
/** 任务生效时间 */
private Timestamp validTime;
// 任务失效时间
private Timestamp expireTime;
/** 任务失效时间 */
private LocalDateTime expireTime;
// 显示顺序
/** 显示顺序 */
private Integer sequence;
// 获得成长值
/** 获得成长值 */
private Long rewardExp;
// 获得积分
/** 获得积分 */
private Long rewardPoints;
// 积分过期时间(空为不过期)
/** 积分过期时间(空为不过期) */
private Long rewardPointsExpireTime;
// 能够获取该任务的用户分组,为空则都能获取
/** 能够获取该任务的用户分组,为空则都能获取 */
private String groups;
// 会员等级门槛(0表示无门槛)
/** 会员等级门槛(0表示无门槛) */
private Integer memberLevel;
// 会员vip门槛(0表示没有门槛)
/** 会员vip门槛(0表示没有门槛) */
private Integer memberVip;
// 权益id
/** 权益id */
private Long rightsId;
// 权益数量(活动机会次数、优惠券数量、奖品数量)
/** 权益数量(活动机会次数、优惠券数量、奖品数量) */
private Integer rightsAmount;
// 权益2id
/** 权益2id */
private Long rights2Id;
// 权益2数量
/** 权益2数量 */
private Integer rights2Amount;
// 权益3id
/** 权益3id */
private Long rights3Id;
// 权益3数量
/** 权益3数量 */
private Integer rights3Amount;
// 状态 0:失效;1:生效
/** 状态 0:失效;1:生效 */
private Integer status;
// 创建时间
/** 创建时间 */
private Timestamp createTime;
// 更新时间
/** 更新时间 */
private Timestamp updateTime;
}
......
package com.topdraw.business.module.task.service.dto;
import lombok.Data;
/**
* @author XiangHan
* @date 2021-10-22
*/
@Data
public class TaskQueryCriteria{
}
......@@ -4,22 +4,14 @@ import com.topdraw.business.module.task.domain.Task;
import com.topdraw.business.module.task.repository.TaskRepository;
import com.topdraw.business.module.task.service.TaskService;
import com.topdraw.business.module.task.service.dto.TaskDTO;
import com.topdraw.business.module.task.service.dto.TaskQueryCriteria;
import com.topdraw.business.module.task.service.mapper.TaskMapper;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
......@@ -31,56 +23,21 @@ import java.util.Objects;
public class TaskServiceImpl implements TaskService {
@Autowired
private TaskRepository TaskRepository;
private TaskMapper taskMapper;
@Autowired
private TaskMapper TaskMapper;
@Override
public Map<String, Object> queryAll(TaskQueryCriteria criteria, Pageable pageable) {
Page<Task> page = TaskRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(TaskMapper::toDto));
}
private TaskRepository taskRepository;
@Override
public List<TaskDTO> queryAll(TaskQueryCriteria criteria) {
return TaskMapper.toDto(TaskRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
public TaskDTO findById(Long id) {
Task Task = TaskRepository.findById(id).orElseGet(Task::new);
Task Task = this.taskRepository.findById(id).orElseGet(Task::new);
ValidationUtil.isNull(Task.getId(),"Task","id",id);
return TaskMapper.toDto(Task);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(Task resources) {
TaskRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(Task resources) {
Task Task = TaskRepository.findById(resources.getId()).orElseGet(Task::new);
ValidationUtil.isNull( Task.getId(),"Task","id",resources.getId());
Task.copy(resources);
TaskRepository.save(Task);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
Task Task = TaskRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", Task.class, id), 1));
TaskRepository.delete(Task);
return this.taskMapper.toDto(Task);
}
@Override
public List<Task> findByTemplateId(Long taskTemplateId) {
return Objects.nonNull(taskTemplateId) ? this.TaskRepository.findByTaskTemplateId(taskTemplateId) : null;
return Objects.nonNull(taskTemplateId) ? this.taskRepository.findByTaskTemplateId(taskTemplateId) : null;
}
......
......@@ -4,6 +4,7 @@ import com.topdraw.business.module.task.template.domain.TaskTemplate;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
import java.util.Optional;
/**
......@@ -15,4 +16,6 @@ public interface TaskTemplateRepository extends JpaRepository<TaskTemplate, Long
Optional<TaskTemplate> findFirstByCode(String code);
TaskTemplate findByEvent(String event);
List<TaskTemplate> findByType(Integer event);
}
......
......@@ -50,4 +50,6 @@ public interface TaskTemplateService {
TaskTemplateDTO getByCode(String code);
TaskTemplate findByEvent(String event);
List<TaskTemplate> findByType(Integer event);
}
......
package com.topdraw.business.module.task.template.service.impl;
import com.topdraw.business.module.task.template.domain.TaskTemplate;
import com.topdraw.business.module.task.template.repository.TaskTemplateRepository;
import com.topdraw.business.module.task.template.service.TaskTemplateService;
import com.topdraw.business.module.task.template.service.dto.TaskTemplateDTO;
import com.topdraw.business.module.task.template.service.dto.TaskTemplateQueryCriteria;
import com.topdraw.business.module.task.template.service.mapper.TaskTemplateMapper;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.StringUtils;
......@@ -21,6 +19,7 @@ import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author XiangHan
......@@ -31,10 +30,10 @@ import java.util.Map;
public class TaskTemplateServiceImpl implements TaskTemplateService {
@Autowired
private TaskTemplateRepository TaskTemplateRepository;
private com.topdraw.business.module.task.template.repository.TaskTemplateRepository TaskTemplateRepository;
@Autowired
private TaskTemplateMapper TaskTemplateMapper;
private com.topdraw.business.module.task.template.service.mapper.TaskTemplateMapper TaskTemplateMapper;
@Override
public Map<String, Object> queryAll(TaskTemplateQueryCriteria criteria, Pageable pageable) {
......@@ -49,7 +48,7 @@ public class TaskTemplateServiceImpl implements TaskTemplateService {
@Override
public TaskTemplateDTO findById(Long id) {
TaskTemplate TaskTemplate = TaskTemplateRepository.findById(id).orElseGet(TaskTemplate::new);
TaskTemplate TaskTemplate = TaskTemplateRepository.findById(id).orElseGet(com.topdraw.business.module.task.template.domain.TaskTemplate::new);
ValidationUtil.isNull(TaskTemplate.getId(),"TaskTemplate","id",id);
return TaskTemplateMapper.toDto(TaskTemplate);
}
......@@ -63,7 +62,7 @@ public class TaskTemplateServiceImpl implements TaskTemplateService {
@Override
@Transactional(rollbackFor = Exception.class)
public void update(TaskTemplate resources) {
TaskTemplate TaskTemplate = TaskTemplateRepository.findById(resources.getId()).orElseGet(TaskTemplate::new);
TaskTemplate TaskTemplate = TaskTemplateRepository.findById(resources.getId()).orElseGet(com.topdraw.business.module.task.template.domain.TaskTemplate::new);
ValidationUtil.isNull( TaskTemplate.getId(),"TaskTemplate","id",resources.getId());
TaskTemplate.copy(resources);
TaskTemplateRepository.save(TaskTemplate);
......@@ -74,7 +73,7 @@ public class TaskTemplateServiceImpl implements TaskTemplateService {
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
TaskTemplate TaskTemplate = TaskTemplateRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", TaskTemplate.class, id), 1));
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", com.topdraw.business.module.task.template.domain.TaskTemplate.class, id), 1));
TaskTemplateRepository.delete(TaskTemplate);
}
......@@ -85,8 +84,15 @@ public class TaskTemplateServiceImpl implements TaskTemplateService {
: new TaskTemplateDTO();
}
@Override
public TaskTemplate findByEvent(String event) {
return StringUtils.isNotEmpty(event) ? this.TaskTemplateRepository.findByEvent(event) : null;
}
// @Cacheable(cacheNames = "uc-admin_taskTemplate" , key = "#event")
@Override
public List<TaskTemplate> findByType(Integer event) {
return Objects.nonNull(event) ? this.TaskTemplateRepository.findByType(event) : null;
}
}
......
......@@ -2,6 +2,9 @@ package com.topdraw.business.module.user.iptv.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.topdraw.business.module.common.domain.AsyncMqModule;
import com.topdraw.business.module.common.validated.CreateGroup;
import com.topdraw.business.module.common.validated.UpdateGroup;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
......@@ -12,7 +15,6 @@ import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
* @author XiangHan
......@@ -23,8 +25,9 @@ import java.time.LocalDateTime;
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_user_tv")
public class UserTv implements Serializable {
public class UserTv extends AsyncMqModule implements Serializable {
@NotNull(message = "visUserId can't be null !",groups = {CreateGroup.class})
@Column(name = "vis_user_id")
private Long visUserId;
......@@ -32,102 +35,100 @@ public class UserTv implements Serializable {
@Column(name = "priority_member_code")
private String priorityMemberCode;
@Transient
private String memberCode;
// ID
/** ID */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 人ID
@Column(name = "`person_id`")
/** 人ID */
@Column(name = "person_id")
private Long personId;
// 运营商平台
@Column(name = "`platform`")
/** 运营商平台 */
@Column(name = "platform")
private String platform;
// 运营商平台账号
@Column(name = "`platform_account`")
/** 运营商平台账号 */
@Column(name = "platform_account")
@NotNull(message = "platformAccount can't be null !",groups = {CreateGroup.class, UpdateGroup.class})
private String platformAccount;
// 手机号
@Column(name = "`cellphone`")
/** 手机号 */
@Column(name = "cellphone")
private String cellphone;
// 用户名
@Column(name = "`username`")
/** 用户名 */
@Column(name = "username")
private String username;
// 密码 MD5
@Column(name = "`password`")
/** 密码 MD5 */
@Column(name = "password")
private String password;
// 昵称 Base64
@Column(name = "`nickname`")
/** 昵称 Base64 */
@Column(name = "nickname")
private String nickname;
// 头像
@Column(name = "`image`")
/** 头像 */
@Column(name = "image")
private String image;
// 登录天数(总天数)
@Column(name = "`login_days`")
/** 登录天数(总天数) */
@Column(name = "login_days")
private Integer loginDays;
// 连续登录天数
@Column(name = "`continue_days`")
/** 连续登录天数 */
@Column(name = "continue_days")
private Integer continueDays;
/** 活跃时间 */
@Column(name = "active_time")
private Timestamp activeTime;
// 分组 分组ID用逗号分隔
@Column(name = "`groups`")
/** 分组 分组ID用逗号分隔 */
@Column(name = "groups")
private String groups;
// 标签 标签用逗号分隔
@Column(name = "`tags`")
/** 标签 标签用逗号分隔 */
@Column(name = "tags")
private String tags;
// 登录类型 1-运营商隐式登录 2-手机验证登录 3-微信登录 4-QQ登录 5-微博登录 6-苹果登录
@Column(name = "`login_type`")
/** 登录类型 1-运营商隐式登录 2-手机验证登录 3-微信登录 4-QQ登录 5-微博登录 6-苹果登录 */
@Column(name = "login_type")
private Integer loginType;
// 状态 0-下线 1-上线
@Column(name = "`status`")
/** 状态 0-下线 1-上线 */
@Column(name = "status")
private Integer status;
// 描述
@Column(name = "`description`")
/** 描述 */
@Column(name = "description")
private String description;
// 创建者
@Column(name = "`create_by`")
/** 创建者 */
@Column(name = "create_by")
private String createBy;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "`create_time`")
private LocalDateTime createTime;
@Column(name = "create_time")
private Timestamp createTime;
// 更新者
@Column(name = "`update_by`")
/** 更新者 */
@Column(name = "update_by")
private String updateBy;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "`update_time`")
private LocalDateTime updateTime;
@Column(name = "update_time")
private Timestamp updateTime;
// 会员id
@Column(name = "`member_id`")
/** 会员id */
@Column(name = "member_id")
private Long memberId;
public void copy(UserTv source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(false));
}
}
......
......@@ -44,7 +44,7 @@ public class UserTvBuilder {
}
public static UserTv build(Long memberId , String memberCode , Long id , String platformAccount , String nickname , String username,
Integer loginDays , Integer status , Integer continueDays , String createBy , String updateBy, Long visUserId){
Integer loginDays , Integer status ,Integer continueDays , String createBy , String updateBy,Long visUserId){
Assert.notNull(memberId, GlobeExceptionMsg.MEMBER_ID_IS_NULL);
Assert.notNull(memberCode, GlobeExceptionMsg.MEMBER_CODE_IS_NULL);
Assert.notNull(platformAccount, GlobeExceptionMsg.IPTV_PLATFORM_ACCOUNT_IS_NULL);
......
......@@ -11,6 +11,7 @@ import java.util.Optional;
* @date 2021-12-16
*/
public interface UserTvRepository extends JpaRepository<UserTv, Long>, JpaSpecificationExecutor<UserTv> {
Optional<UserTv> findByPlatformAccount(String platformAccount);
Optional<UserTv> findByPriorityMemberCode(String memberCode);
......
......@@ -22,13 +22,13 @@ public interface UserTvService {
* @param resources
* @return
*/
UserTv create(UserTv resources);
UserTvDTO create(UserTv resources);
/**
*
* @param resources
*/
void update(UserTv resources);
UserTvDTO update(UserTv resources);
/**
*
......@@ -69,7 +69,7 @@ public interface UserTvService {
* @param memberCode
* @return
*/
boolean checkPriorityMemberByMemberIdOrMemberCode(Long memberId,String memberCode);
boolean checkPriorityMemberByMemberIdOrMemberCode(Long memberId, String memberCode);
/**
*
......@@ -77,5 +77,4 @@ public interface UserTvService {
* @return
*/
MemberDTO findMemberByPlatformAccount(String platformAccount);
}
......
......@@ -4,7 +4,6 @@ import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
......@@ -21,70 +20,70 @@ public class UserTvDTO implements Serializable {
/** 绑定的小屏账户会员编码 */
private String priorityMemberCode;
// ID
/** ID */
private Long id;
// 人ID
/** 人ID */
private Long personId;
// 运营商平台
/** 运营商平台 */
private String platform;
// 运营商平台账号
/** 运营商平台账号 */
private String platformAccount;
// 手机号
/** 手机号 */
private String cellphone;
// 用户名
/** 用户名 */
private String username;
// 密码 MD5
/** 密码 MD5 */
private String password;
// 昵称 Base64
/** 昵称 Base64 */
private String nickname;
// 头像
/** 头像 */
private String image;
// 登录天数(总天数)
/** 登录天数(总天数) */
private Integer loginDays;
// 连续登录天数
/** 连续登录天数 */
private Integer continueDays;
// 活跃时间
/** 活跃时间 */
private Timestamp activeTime;
// 分组 分组ID用逗号分隔
/** 分组 分组ID用逗号分隔 */
private String groups;
// 标签 标签用逗号分隔
/** 标签 标签用逗号分隔 */
private String tags;
// 登录类型 1-运营商隐式登录 2-手机验证登录 3-微信登录 4-QQ登录 5-微博登录 6-苹果登录
/** 登录类型 1-运营商隐式登录 2-手机验证登录 3-微信登录 4-QQ登录 5-微博登录 6-苹果登录 */
private Integer loginType;
// 状态 0-下线 1-上线
/** 状态 0-下线 1-上线 */
private Integer status;
// 描述
/** 描述 */
private String description;
// 创建者
/** 创建者 */
private String createBy;
// 创建时间
private LocalDateTime createTime;
/** 创建时间 */
private Timestamp createTime;
// 更新者
/** 更新者 */
private String updateBy;
// 更新时间
private LocalDateTime updateTime;
/** 更新时间 */
private Timestamp updateTime;
// 会员id
/** 会员id */
private Long memberId;
}
......
......@@ -29,6 +29,7 @@ import java.util.Optional;
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class UserTvServiceImpl implements UserTvService {
@Autowired
private UserTvMapper userTvMapper;
@Autowired
......@@ -73,37 +74,38 @@ public class UserTvServiceImpl implements UserTvService {
@Override
public UserTvDTO findById(Long id) {
UserTv UserTv = this.userTvRepository.findById(id).orElseGet(UserTv::new);
UserTv UserTv = this.userTvRepository.findById(id).orElseGet(com.topdraw.business.module.user.iptv.domain.UserTv::new);
ValidationUtil.isNull(UserTv.getId(),"UserTv","id",id);
return this.userTvMapper.toDto(UserTv);
}
@Override
@Transactional(rollbackFor = Exception.class)
public UserTv create(UserTv resources) {
public UserTvDTO create(UserTv resources) {
MemberDTO memberDTO = memberService.findByCode(resources.getMemberCode());
if (Objects.nonNull(memberDTO)) {
Long id = memberDTO.getId();
resources.setMemberId(id);
this.userTvRepository.save(resources);
return resources;
UserTv userTv = this.userTvRepository.save(resources);
return this.userTvMapper.toDto(userTv);
}
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(UserTv resources) {
UserTv UserTv = this.userTvRepository.findById(resources.getId()).orElseGet(UserTv::new);
ValidationUtil.isNull( UserTv.getId(),"UserTv","id",resources.getId());
UserTv.copy(resources);
this.userTvRepository.save(UserTv);
public UserTvDTO update(UserTv resources) {
UserTv userTv = this.userTvRepository.findById(resources.getId()).orElseGet(UserTv::new);
ValidationUtil.isNull(userTv.getId(),"UserTv","id",resources.getId());
userTv.copy(resources);
UserTv _userTv = this.userTvRepository.save(userTv);
return this.userTvMapper.toDto(_userTv);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void unbindPriorityMemberCode(UserTv resources) {
UserTv UserTv = this.userTvRepository.findById(resources.getId()).orElseGet(UserTv::new);
UserTv UserTv = this.userTvRepository.findById(resources.getId()).orElseGet(com.topdraw.business.module.user.iptv.domain.UserTv::new);
ValidationUtil.isNull( UserTv.getId(),"UserTv","id",resources.getId());
UserTv.copy(resources);
this.userTvRepository.save(UserTv);
......@@ -114,7 +116,7 @@ public class UserTvServiceImpl implements UserTvService {
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
UserTv UserTv = this.userTvRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", UserTv.class, id), 1));
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", com.topdraw.business.module.user.iptv.domain.UserTv.class, id), 1));
this.userTvRepository.delete(UserTv);
}
......
......@@ -23,38 +23,38 @@ import java.sql.Timestamp;
@Table(name="uc_user_collection")
public class UserCollection implements Serializable {
// ID
/** ID */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 应用ID
/** 应用ID */
@Column(name = "app_id")
private Long appId;
// 用户ID
/** 用户ID */
@Column(name = "user_id")
private Long userId;
// 收藏夹类型:1-收藏 2-播放记录 3-播放列表 4-评分 5-点赞/关注/订阅
/** 收藏夹类型:1-收藏 2-播放记录 3-播放列表 4-评分 5-点赞/关注/订阅 */
@Column(name = "type")
private Integer type;
// 收藏夹名称
/** 收藏夹名称 */
@Column(name = "name")
private String name;
// 数量
/** 数量 */
@Column(name = "count")
private Integer count;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
......
......@@ -25,89 +25,89 @@ public class UserCollectionDetail implements Serializable {
@JoinColumn(name = "user_collection_id", insertable = false, updatable = false)
private UserCollection userCollection;
// ID
/** ID */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 收藏夹ID
/** 收藏夹ID */
@Column(name = "user_collection_id")
private Long userCollectionId;
// 自定义收藏内容的类型CODE,默认:DEFAULT
/** 自定义收藏内容的类型CODE,默认:DEFAULT */
@Column(name = "detail_folder_code")
private String detailFolderCode;
// 收藏内容的类型:MEDIA|EPISODE|CATEGORY|SUBJECT|ARTICLE|ARTIST|SCHOOL
/** 收藏内容的类型:MEDIA|EPISODE|CATEGORY|SUBJECT|ARTICLE|ARTIST|SCHOOL */
@Column(name = "detail_type")
private String detailType;
// 收藏内容的ID
/** 收藏内容的ID */
@Column(name = "detail_id")
private Long detailId;
// 收藏内容的CODE
/** 收藏内容的CODE */
@Column(name = "detail_code")
private String detailCode;
// 收藏内容的剧集ID
/** 收藏内容的剧集ID */
@Column(name = "detail_episode_id")
private Long detailEpisodeId;
// 收藏内容的剧集CODE
/** 收藏内容的剧集CODE */
@Column(name = "detail_episode_code")
private String detailEpisodeCode;
// 收藏内容的名称
/** 收藏内容的名称 */
@Column(name = "detail_name")
private String detailName;
// 收藏内容的标记
/** 收藏内容的标记 */
@Column(name = "detail_mark")
private Integer detailMark;
// 收藏内容的图片
/** 收藏内容的图片 */
@Column(name = "detail_img")
private String detailImg;
// 收藏内容的剧集序号
/** 收藏内容的剧集序号 */
@Column(name = "detail_index")
private Integer detailIndex;
// 收藏内容的剧集总数
/** 收藏内容的剧集总数 */
@Column(name = "detail_total_index")
private Integer detailTotalIndex;
// 收藏内容的播放时间
/** 收藏内容的播放时间 */
@Column(name = "detail_play_time")
private Integer detailPlayTime;
// 收藏内容的总时间
/** 收藏内容的总时间 */
@Column(name = "detail_total_time")
private Integer detailTotalTime;
// 收藏内容在同一folder中的顺序
/** 收藏内容在同一folder中的顺序 */
@Column(name = "detail_sequence")
private Integer detailSequence;
// 收藏内容的评分
/** 收藏内容的评分 */
@Column(name = "detail_score")
private Float detailScore;
// 收藏内容(根据文件夹和类型的不同)的点赞/关注/订阅
/** 收藏内容(根据文件夹和类型的不同)的点赞/关注/订阅 */
@Column(name = "detail_like")
private Integer detailLike;
// 收藏内容的扩展数据
/** 收藏内容的扩展数据 */
@Column(name = "detail_ext_data")
private String detailExtData;
// 创建时间
/** 创建时间 */
@Column(name = "create_time")
private Timestamp createTime;
// 更新时间
/** 更新时间 */
@Column(name = "update_time")
private Timestamp updateTime;
......
......@@ -6,7 +6,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
import java.util.Optional;
/**
* @author pengmengqing
......@@ -14,8 +13,6 @@ import java.util.Optional;
*/
public interface UserCollectionRepository extends JpaRepository<UserCollection, Long>, JpaSpecificationExecutor<UserCollection> {
Optional<UserCollection> findFirstByUserIdAndTypeAndName(Long userId, Integer type, String name);
List<UserCollection> findByUserIdAndType(Long userId, Integer type);
}
......
......@@ -2,11 +2,8 @@ package com.topdraw.business.module.user.weixin.collection.service;
import com.topdraw.business.module.user.weixin.collection.domain.UserCollectionDetail;
import com.topdraw.business.module.user.weixin.collection.service.dto.UserCollectionDetailDTO;
import com.topdraw.business.module.user.weixin.collection.service.dto.UserCollectionDetailQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author pengmengqing
......@@ -15,27 +12,40 @@ import java.util.Map;
public interface UserCollectionDetailService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(UserCollectionDetailQueryCriteria criteria, Pageable pageable);
/**
* 根据ID查询
* @param id ID
* @return UserCollectionDetailDTO
*/
UserCollectionDetailDTO findById(Long id);
/**
*
* @param resources
* @return
*/
UserCollectionDetailDTO create(UserCollectionDetail resources);
/**
*
* @param resources
*/
void update(UserCollectionDetail resources);
/**
*
* @param id
*/
void delete(Long id);
/**
*
* @param id
*/
void deleteAllByUserCollectionId(Long id);
/**
*
* @param userCollectionDetailOptional
*/
void deleteAll(List<UserCollectionDetail> userCollectionDetailOptional);
}
......
......@@ -2,13 +2,10 @@ package com.topdraw.business.module.user.weixin.collection.service;
import com.topdraw.business.module.user.weixin.collection.domain.UserCollection;
import com.topdraw.business.module.user.weixin.collection.service.dto.UserCollectionDTO;
import com.topdraw.business.module.user.weixin.collection.service.dto.UserCollectionQueryCriteria;
import org.springframework.data.domain.Pageable;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
......@@ -18,38 +15,60 @@ import java.util.Optional;
public interface UserCollectionService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(UserCollectionQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<UserCollectionDTO>
*/
List<UserCollectionDTO> queryAll(UserCollectionQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return UserCollectionDTO
*/
UserCollectionDTO findById(Long id);
/**
*
* @param resources
* @return
*/
UserCollectionDTO create(UserCollection resources);
/**
*
* @param resources
*/
void update(UserCollection resources);
/**
*
* @param id
*/
void delete(Long id);
/**
*
* @param all
* @param response
* @throws IOException
*/
void download(List<UserCollectionDTO> all, HttpServletResponse response) throws IOException;
/**
*
* @param id
* @param type
* @return
*/
List<UserCollection> findByUserIdAndType(Long id, Integer type);
/**
*
* @param id
* @param type
* @param name
* @return
*/
Optional<UserCollection> findFirstByUserIdAndTypeAndName(Long id, Integer type, String name);
/**
*
* @param userCollection
* @return
*/
UserCollection save(UserCollection userCollection);
}
......
......@@ -13,27 +13,27 @@ import java.sql.Timestamp;
@Data
public class UserCollectionDTO implements Serializable {
// ID
/** ID */
private Long id;
// 应用ID
/** 应用ID */
private Long appId;
// 用户ID
/** 用户ID */
private Long userId;
// 收藏夹类型:1-收藏 2-播放记录 3-播放列表 4-评分 5-点赞/关注/订阅
/** 收藏夹类型:1-收藏 2-播放记录 3-播放列表 4-评分 5-点赞/关注/订阅 */
private Integer type;
// 收藏夹名称
/** 收藏夹名称 */
private String name;
// 数量
/** 数量 */
private Integer count;
// 创建时间
/** 创建时间 */
private Timestamp createTime;
// 更新时间
/** 更新时间 */
private Timestamp updateTime;
}
......
......@@ -14,71 +14,71 @@ import java.sql.Timestamp;
@Data
public class UserCollectionDetailDTO implements Serializable {
// ID
/** ID */
private Long id;
// 收藏夹ID
/** 收藏夹ID */
private Long userCollectionId;
// 自定义收藏内容的类型CODE,默认:DEFAULT
/** 自定义收藏内容的类型CODE,默认:DEFAULT */
private String detailFolderCode;
// 收藏内容的类型:MEDIA|EPISODE|CATEGORY|SUBJECT|ARTICLE|ARTIST|SCHOOL
/** 收藏内容的类型:MEDIA|EPISODE|CATEGORY|SUBJECT|ARTICLE|ARTIST|SCHOOL */
private String detailType;
// 收藏内容的ID
/** 收藏内容的ID */
private Long detailId;
// 收藏内容的CODE
/** 收藏内容的CODE */
private String detailCode;
// 收藏内容的剧集ID
/** 收藏内容的剧集ID */
private Long detailEpisodeId;
// 收藏内容的剧集CODE
/** 收藏内容的剧集CODE */
private String detailEpisodeCode;
// 收藏内容的名称
/** 收藏内容的名称 */
private String detailName;
// 收藏内容的标记
/** 收藏内容的标记 */
private Integer detailMark;
// 收藏内容的图片
/** 收藏内容的图片 */
private String detailImg;
// 收藏内容的剧集序号
/** 收藏内容的剧集序号 */
private Integer detailIndex;
// 收藏内容的剧集总数
/** 收藏内容的剧集总数 */
private Integer detailTotalIndex;
// 收藏内容的播放时间
/** 收藏内容的播放时间 */
private Integer detailPlayTime;
// 收藏内容的总时间
/** 收藏内容的总时间 */
private Integer detailTotalTime;
// 收藏内容在同一folder中的顺序
/** 收藏内容在同一folder中的顺序 */
private Integer detailSequence;
// 收藏内容的评分
/** 收藏内容的评分 */
private Float detailScore;
// 收藏内容(根据文件夹和类型的不同)的点赞/关注/订阅
/** 收藏内容(根据文件夹和类型的不同)的点赞/关注/订阅 */
private Integer detailLike;
// 收藏内容的扩展数据
/** 收藏内容的扩展数据 */
private String detailExtData;
// 创建时间
/** 创建时间 */
@JsonFormat(
pattern = "MM月dd日 HH:mm",
timezone = "GMT+8"
)
private Timestamp createTime;
// 更新时间
/** 更新时间 */
@JsonFormat(
pattern = "MM月dd日 HH:mm",
timezone = "GMT+8"
......
package com.topdraw.business.module.user.weixin.collection.service.dto;
import com.topdraw.annotation.Query;
import lombok.Data;
import javax.persistence.criteria.JoinType;
/**
* @author pengmengqing
* @date 2021-04-02
*/
@Data
public class UserCollectionDetailQueryCriteria{
private Long userWeixinId;
@Query(joinType = JoinType.INNER, joinName = "userCollection")
private Long userId;
@Query(joinType = JoinType.INNER, joinName = "userCollection")
private Integer type;
private String detailType;
private String detailFolderCode = "DEFAULT";
private Long detailId;
}
package com.topdraw.business.module.user.weixin.collection.service.dto;
import lombok.Data;
/**
* @author pengmengqing
* @date 2021-04-02
*/
@Data
public class UserCollectionQueryCriteria{
}
......@@ -4,22 +4,16 @@ import com.topdraw.business.module.user.weixin.collection.domain.UserCollectionD
import com.topdraw.business.module.user.weixin.collection.repository.UserCollectionDetailRepository;
import com.topdraw.business.module.user.weixin.collection.service.UserCollectionDetailService;
import com.topdraw.business.module.user.weixin.collection.service.dto.UserCollectionDetailDTO;
import com.topdraw.business.module.user.weixin.collection.service.dto.UserCollectionDetailQueryCriteria;
import com.topdraw.business.module.user.weixin.collection.service.mapper.UserCollectionDetailMapper;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
/**
* @author pengmengqing
......@@ -31,15 +25,9 @@ public class UserCollectionDetailServiceImpl implements UserCollectionDetailServ
@Autowired
private UserCollectionDetailRepository userCollectionDetailRepository;
@Autowired
private UserCollectionDetailMapper userCollectionDetailMapper;
@Override
public Map<String, Object> queryAll(UserCollectionDetailQueryCriteria criteria, Pageable pageable) {
Page<UserCollectionDetail> page = userCollectionDetailRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(userCollectionDetailMapper::toDto));
}
@Override
public UserCollectionDetailDTO findById(Long id) {
......
......@@ -4,16 +4,11 @@ import com.topdraw.business.module.user.weixin.collection.domain.UserCollection;
import com.topdraw.business.module.user.weixin.collection.repository.UserCollectionRepository;
import com.topdraw.business.module.user.weixin.collection.service.UserCollectionService;
import com.topdraw.business.module.user.weixin.collection.service.dto.UserCollectionDTO;
import com.topdraw.business.module.user.weixin.collection.service.dto.UserCollectionQueryCriteria;
import com.topdraw.business.module.user.weixin.collection.service.mapper.UserCollectionMapper;
import com.topdraw.utils.FileUtil;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
......@@ -37,19 +32,6 @@ public class UserCollectionServiceImpl implements UserCollectionService {
@Autowired
private UserCollectionMapper userCollectionMapper;
@Override
public Map<String, Object> queryAll(UserCollectionQueryCriteria criteria, Pageable pageable) {
Page<UserCollection> page = userCollectionRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(userCollectionMapper::toDto));
}
@Override
public List<UserCollectionDTO> queryAll(UserCollectionQueryCriteria criteria) {
return userCollectionMapper.toDto(userCollectionRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
public UserCollectionDTO findById(Long id) {
UserCollection userCollection = userCollectionRepository.findById(id).orElseGet(UserCollection::new);
......
......@@ -2,7 +2,9 @@ package com.topdraw.business.module.user.weixin.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.topdraw.business.module.common.domain.DefaultAsyncMqModule;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.topdraw.business.module.common.domain.AsyncMqModule;
import com.topdraw.business.module.common.validated.CreateGroup;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
......@@ -10,9 +12,9 @@ import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
* @author XiangHan
......@@ -23,113 +25,117 @@ import java.time.LocalDateTime;
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_user_weixin")
public class UserWeixin extends DefaultAsyncMqModule implements Serializable {
public class UserWeixin extends AsyncMqModule implements Serializable {
// ID
/** ID */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 用户ID
/** 用户ID */
@Column(name = "member_id")
private Long memberId;
// 微信unionid,针对开发者
/** 微信unionid,针对开发者 */
@Column(name = "unionid")
@NotNull(message = "unionid can't be null",groups = {CreateGroup.class})
private String unionid;
// 微信appid
/** 微信appid */
@Column(name = "appid")
@NotNull(message = "appid can't be null",groups = {CreateGroup.class})
private String appid;
// 微信openid,针对微信app
/** 微信openid,针对微信app */
@Column(name = "openid")
@NotNull(message = "openid can't be null",groups = {CreateGroup.class})
private String openid;
// 关注状态 0 -未关注 1 - 已关注
/** 关注状态 0 -未关注 1 - 已关注 */
@Column(name = "status")
private Integer status;
// 关注同步状态 0-未同步,1-已同步
/** 关注同步状态 0-未同步,1-已同步 */
@Column(name = "sync_status")
private Integer syncStatus;
// 昵称
/** 昵称 */
@Column(name = "nickname")
private String nickname;
// 头像地址
/** 头像地址 */
@Column(name = "headimgurl")
private String headimgurl;
// 特权信息
/** 特权信息 */
@Column(name = "privilege")
private String privilege;
// 刷新凭据
/** 刷新凭据 */
@Column(name = "refresh_token")
private String refreshToken;
// 凭据
/** 凭据 */
@Column(name = "access_token")
private String accessToken;
// 超时(秒)
/** 超时(秒) */
@Column(name = "expires_in")
private Integer expiresIn;
// 超时时间
/** 超时时间 */
@Column(name = "expires_time")
private Timestamp expiresTime;
// 描述
/** 描述 */
@Column(name = "description")
private String description;
// 创建者
/** 创建者 */
@Column(name = "create_by")
private String createBy;
// 创建时间
/** 创建时间 */
@CreatedDate
@Column(name = "create_time")
private LocalDateTime createTime;
private Timestamp createTime;
// 更新者
/** 更新者 */
@Column(name = "update_by")
private String updateBy;
// 更新时间
/** 更新时间 */
@LastModifiedDate
@Column(name = "update_time")
private LocalDateTime updateTime;
private Timestamp updateTime;
// 来源类型
/** 来源类型 */
@Column(name = "source_type")
private String sourceType;
// 来源id
/** 来源id */
@Column(name = "source_id")
private String sourceId;
// 来源id
/** 来源id */
@Column(name = "source_desc")
private String sourceDesc;
// 人id
/** 人id */
@Column(name = "person_id")
private Long personId;
// 来源用户id
/** 来源用户id */
@Column(name = "source_user")
private Long sourceUser;
// 来源实体:活动-activity/商品-item
/** 来源实体:活动-activity/商品-item */
@Column(name = "source_entity")
private String sourceEntity;
// 授权时间
/** 授权时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@Column(name = "auth_time")
private Timestamp authTime;
......
......@@ -20,7 +20,7 @@ import java.util.Objects;
*/
public class UserWeixinBuilder {
public static UserWeixin build(Long memberId, String appId, String openId, String unionId, String nickname, String headimgurl){
public static UserWeixin build(Long memberId,String appId,String openId,String unionId,String nickname,String headimgurl){
UserWeixin userWeixin = new UserWeixin();
userWeixin.setAppid(appId);
userWeixin.setOpenid(openId);
......@@ -30,7 +30,7 @@ public class UserWeixinBuilder {
return build(memberId,userWeixin);
}
public static UserWeixin build(Long memberId, String appId, String openId, String unionId){
public static UserWeixin build(Long memberId,String appId,String openId,String unionId){
UserWeixin userWeixin = new UserWeixin();
userWeixin.setAppid(appId);
userWeixin.setOpenid(openId);
......@@ -98,16 +98,16 @@ public class UserWeixinBuilder {
public static UserWeixin build(Long id ,
Long memberId,
String memberCode,
String unionId, String appId, String openId,
String unionId, String appId,String openId,
Integer status, Integer syncStatus,
String nickname, String headimgurl,
String privilege, String refreshToken,
String accessToken, Integer expiresIn, Timestamp expiresTime, String description,
String createBy, String updateBy,
String sourceType, String sourceId,
String nickname,String headimgurl,
String privilege,String refreshToken,
String accessToken,Integer expiresIn,Timestamp expiresTime,String description,
String createBy,String updateBy,
String sourceType,String sourceId,
String sourceDesc,
Long sourceUser, String sourceEntity,
String country, String province, String city,
Long sourceUser,String sourceEntity,
String country,String province,String city,
Integer sex){
if (Objects.isNull(memberId)) {
......
......@@ -30,5 +30,4 @@ public interface UserWeixinRepository extends JpaRepository<UserWeixin, Long>, J
@Transactional
@Query(value = "update `uc_user_weixin` set update_time = :#{#resources.updateTime} where appid = :#{#resources.appid} and openid = :#{#resources.openid}" , nativeQuery = true)
void updateTime(@Param("resources") UserWeixin resources);
}
......
......@@ -2,11 +2,6 @@ package com.topdraw.business.module.user.weixin.service;
import com.topdraw.business.module.user.weixin.domain.UserWeixin;
import com.topdraw.business.module.user.weixin.service.dto.UserWeixinDTO;
import com.topdraw.business.module.user.weixin.service.dto.UserWeixinQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -85,6 +80,4 @@ public interface UserWeixinService {
* @return
*/
UserWeixinDTO findFirstByUnionidAndAppid(String unionid, String appId);
}
......
......@@ -4,7 +4,6 @@ import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
......@@ -14,89 +13,91 @@ import java.time.LocalDateTime;
@Data
public class UserWeixinDTO implements Serializable {
// ID
/** ID */
private Long id;
// 用户ID
/** 用户ID */
private Long memberId;
// 微信unionid,针对开发者
/** 微信unionid,针对开发者 */
private String unionid;
// 微信appid
/** 微信appid */
private String appid;
// 微信openid,针对微信app
/** 微信openid,针对微信app */
private String openid;
// 关注状态 0 -未关注 1 - 已关注
/** 关注状态 0 -未关注 1 - 已关注 */
private Integer status;
// 关注同步状态 0-未同步,1-已同步
/** 关注同步状态 0-未同步,1-已同步 */
private Integer syncStatus;
// 昵称
/** 昵称 */
private String nickname;
// 头像地址
/** 头像地址 */
private String headimgurl;
// 特权信息
/** 特权信息 */
private String privilege;
// 刷新凭据
/** 刷新凭据 */
private String refreshToken;
// 凭据
/** 凭据 */
private String accessToken;
// 超时(秒)
/** 超时(秒) */
private Integer expiresIn;
// 超时时间
/** 超时时间 */
private Timestamp expiresTime;
// 描述
/** 描述 */
private String description;
// 创建者
/** 创建者 */
private String createBy;
// 创建时间
private LocalDateTime createTime;
/** 创建时间 */
private Timestamp createTime;
// 更新者
/** 更新者 */
private String updateBy;
// 更新时间
private LocalDateTime updateTime;
/** 更新时间 */
private Timestamp updateTime;
// 来源类型
/** 来源类型 */
private String sourceType;
// 来源id
/** 来源id */
private String sourceId;
// 来源id
/** 来源id */
private String sourceDesc;
// 人id
/** 人id */
private Long personId;
// 来源用户id
/** 来源用户id */
private Long sourceUser;
// 来源实体:活动-activity/商品-item
/** 来源实体:活动-activity/商品-item */
private String sourceEntity;
// 授权时间
/** 授权时间 */
private Timestamp authTime;
private Integer sex;
private Integer gender;
private String country;
private String province;
private String city;
private Integer sex;
}
......
package com.topdraw.business.module.user.weixin.service.dto;
import com.topdraw.annotation.Query;
import lombok.Data;
/**
......@@ -8,4 +9,8 @@ import lombok.Data;
*/
@Data
public class UserWeixinQueryCriteria{
@Query()
private String unionId;
}
......
......@@ -7,7 +7,6 @@ import com.topdraw.business.module.user.weixin.service.UserWeixinService;
import com.topdraw.business.module.user.weixin.service.dto.UserWeixinDTO;
import com.topdraw.business.module.user.weixin.service.mapper.UserWeixinMapper;
import com.topdraw.utils.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Service;
......@@ -21,7 +20,6 @@ import org.springframework.util.Assert;
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
@Slf4j
public class UserWeixinServiceImpl implements UserWeixinService {
@Autowired
......@@ -32,7 +30,7 @@ public class UserWeixinServiceImpl implements UserWeixinService {
@Override
public UserWeixinDTO findById(Long id) {
UserWeixin UserWeixin = this.userWeixinRepository.findById(id).orElseGet(UserWeixin::new);
UserWeixin UserWeixin = this.userWeixinRepository.findById(id).orElseGet(com.topdraw.business.module.user.weixin.domain.UserWeixin::new);
ValidationUtil.isNull(UserWeixin.getId(),"UserWeixin","id",id);
return this.userWeixinMapper.toDto(UserWeixin);
}
......@@ -48,7 +46,7 @@ public class UserWeixinServiceImpl implements UserWeixinService {
@Override
@Transactional(rollbackFor = Exception.class)
public void update(UserWeixin resources) {
UserWeixin UserWeixin = this.userWeixinRepository.findById(resources.getId()).orElseGet(UserWeixin::new);
UserWeixin UserWeixin = this.userWeixinRepository.findById(resources.getId()).orElseGet(com.topdraw.business.module.user.weixin.domain.UserWeixin::new);
ValidationUtil.isNull( UserWeixin.getId(),"UserWeixin","id",resources.getId());
UserWeixin.copy(resources);
this.userWeixinRepository.save(UserWeixin);
......@@ -64,7 +62,7 @@ public class UserWeixinServiceImpl implements UserWeixinService {
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
UserWeixin UserWeixin = this.userWeixinRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", UserWeixin.class, id), 1));
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", com.topdraw.business.module.user.weixin.domain.UserWeixin.class, id), 1));
this.userWeixinRepository.delete(UserWeixin);
}
......
......@@ -36,8 +36,6 @@ import java.util.concurrent.Executors;
@Slf4j
public class RightsOperationServiceImpl implements RightsOperationService {
private static final Logger LOG = LoggerFactory.getLogger(RightsOperationServiceImpl.class);
@Autowired
RightsHistoryService rightsHistoryService;
@Autowired
......@@ -101,7 +99,7 @@ public class RightsOperationServiceImpl implements RightsOperationService {
values.forEach(value -> {
RightsHistory rightsHistory = new RightsHistory();
rightsHistory.setSendTime(LocalDateTime.now());
rightsHistory.setSendTime(TimestampUtil.now());
rightsHistory.setRightsId(value.getId());
rightsHistory.setMemberId(value.getMemberId());
rightsHistory.setExpireTime(value.getExpireTime());
......@@ -306,7 +304,7 @@ public class RightsOperationServiceImpl implements RightsOperationService {
for (RightsHistory rightsHistory : rightsHistories) {
Long operatorId = rightsHistory.getOperatorId();
String operatorName = rightsHistory.getOperatorName();
rightsHistory.setSendTime(LocalDateTime.now());
rightsHistory.setSendTime(TimestampUtil.now());
rightsHistory.setOperatorId(Objects.nonNull(operatorId)?operatorId:0);
rightsHistory.setOperatorName(!StringUtils.isEmpty(operatorName)?operatorName:"系统发放");
this.rightsHistoryService.create(rightsHistory);
......
package com.topdraw.util;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64Util {
public static String encode(String name){
String name1 = new String(Base64.getEncoder().encode(name.getBytes(StandardCharsets.UTF_8)));
return name1;
}
public static void main(String[] args) {
// String name = "test005@itv";
String name = "18580619168a@iptv";
String encode = encode(name);
System.out.println(encode);
}
}
package com.topdraw.util;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -149,6 +150,14 @@ public class IdWorker {
return idWorker.nextId();
}
public static String generatorCode(String prefix){
IdWorker idWorker = new IdWorker();
if (StringUtils.isNotBlank(prefix)) {
return prefix+"_"+String.valueOf(idWorker.nextId());
}
return String.valueOf(idWorker.nextId());
}
public static void main(String[] args) {
IdWorker idWorker = new IdWorker();
System.out.println(idWorker.nextId());
......