Commit c46df744 c46df744289ba232142d045920b5ff42a1409fbd by xianghan@topdraw.cn

1.添加同步管理侧积分计算,包括获取和消耗

1 parent 8b8eefcb
Showing 71 changed files with 2438 additions and 135 deletions
......@@ -23,6 +23,13 @@
<dependencies>
<!--redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.16.3</version>
</dependency>
<!--代码生成器-->
<dependency>
<groupId>com.topdraw</groupId>
......@@ -113,7 +120,7 @@
</profiles>
<build>
<finalName>member-engine</finalName>
<finalName>uc-consumer</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
......
......@@ -33,6 +33,9 @@ public class MemberAddress implements Serializable {
@Column(name = "member_id", nullable = false)
private Long memberId;
@Transient
private String memberCode;
// 类型 1:家;2:公司;3:学校
@Column(name = "type", nullable = false)
private Integer type;
......
......@@ -4,10 +4,13 @@ import com.topdraw.business.basicdata.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);
}
......
......@@ -6,6 +6,8 @@ import com.topdraw.business.basicdata.member.address.service.MemberAddressServic
import com.topdraw.business.basicdata.member.address.service.dto.MemberAddressDTO;
import com.topdraw.business.basicdata.member.address.service.dto.MemberAddressQueryCriteria;
import com.topdraw.business.basicdata.member.address.service.mapper.MemberAddressMapper;
import com.topdraw.business.basicdata.member.service.MemberService;
import com.topdraw.business.basicdata.member.service.dto.MemberDTO;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.ValidationUtil;
......@@ -20,6 +22,8 @@ import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
/**
* @author XiangHan
......@@ -34,6 +38,8 @@ public class MemberAddressServiceImpl implements MemberAddressService {
@Autowired
private MemberAddressMapper MemberAddressMapper;
@Autowired
private MemberService memberService;
@Override
public Map<String, Object> queryAll(MemberAddressQueryCriteria criteria, Pageable pageable) {
......@@ -56,16 +62,28 @@ public class MemberAddressServiceImpl implements MemberAddressService {
@Override
@Transactional(rollbackFor = Exception.class)
public void create(MemberAddress resources) {
String memberCode = resources.getMemberCode();
MemberAddressRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(MemberAddress resources) {
MemberAddress MemberAddress = MemberAddressRepository.findById(resources.getId()).orElseGet(MemberAddress::new);
ValidationUtil.isNull( MemberAddress.getId(),"MemberAddress","id",resources.getId());
MemberAddress.copy(resources);
MemberAddressRepository.save(MemberAddress);
String memberCode = resources.getMemberCode();
MemberDTO memberDTO = this.memberService.getByCode(memberCode);
if (Objects.nonNull(memberDTO)) {
Long memberId = memberDTO.getId();
Integer sequence = resources.getSequence();
Assert.notNull(sequence,"sequence can't be null!");
Optional<MemberAddress> memberAddressOptional = MemberAddressRepository.findByMemberIdAndSequence(memberId,sequence);
if (memberAddressOptional.isPresent()) {
MemberAddress memberAddress = memberAddressOptional.get();
ValidationUtil.isNull(memberAddress.getId(),"MemberAddress","id",resources.getId());
resources.setId(memberAddress.getId());
memberAddress.copy(resources);
MemberAddressRepository.save(memberAddress);
}
}
}
@Override
......
......@@ -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
......@@ -23,6 +24,14 @@ import java.sql.Timestamp;
@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)
......@@ -83,7 +92,7 @@ public class Member implements Serializable {
// 当前积分
@Column(name = "`points`")
private Integer points;
private Long points;
// 即将到期积分(一个月内)
@Column(name = "due_points")
......@@ -91,11 +100,11 @@ public class Member implements Serializable {
// 优惠券数量
@Column(name = "coupon_amount")
private Integer couponAmount;
private Long couponAmount;
// 即将过期优惠券数量
@Column(name = "due_coupon_amount")
private Integer dueCouponAmount;
private Long dueCouponAmount;
// iptv账号id
@Column(name = "user_iptv_id")
......@@ -120,8 +129,8 @@ public class Member implements Serializable {
private Timestamp updateTime;
// 是否在黑名单 1:是;0否
// @Column(name = "black_status")
// private Integer blackStatus;
@Column(name = "black_status")
private Long blackStatus;
public void copy(Member source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
......
......@@ -37,6 +37,9 @@ public class MemberProfile implements Serializable {
@Column(name = "member_id", nullable = false)
private Long memberId;
@Transient
private String memberCode;
// 姓名
@Column(name = "realname")
private String realname;
......
......@@ -10,4 +10,5 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
*/
public interface MemberProfileRepository extends JpaRepository<MemberProfile, Long>, JpaSpecificationExecutor<MemberProfile> {
MemberProfile findByMemberId(Long memberId);
}
......
......@@ -6,8 +6,11 @@ import com.topdraw.business.basicdata.member.profile.service.MemberProfileServic
import com.topdraw.business.basicdata.member.profile.service.dto.MemberProfileDTO;
import com.topdraw.business.basicdata.member.profile.service.dto.MemberProfileQueryCriteria;
import com.topdraw.business.basicdata.member.profile.service.mapper.MemberProfileMapper;
import com.topdraw.business.basicdata.member.service.MemberService;
import com.topdraw.business.basicdata.member.service.dto.MemberDTO;
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;
......@@ -20,6 +23,7 @@ import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author XiangHan
......@@ -34,6 +38,8 @@ public class MemberProfileServiceImpl implements MemberProfileService {
@Autowired
private MemberProfileMapper MemberProfileMapper;
@Autowired
private MemberService memberService;
@Override
public Map<String, Object> queryAll(MemberProfileQueryCriteria criteria, Pageable pageable) {
......@@ -56,16 +62,38 @@ public class MemberProfileServiceImpl implements MemberProfileService {
@Override
@Transactional(rollbackFor = Exception.class)
public void create(MemberProfile resources) {
String memberCode = resources.getMemberCode();
MemberDTO memberDTO = this.memberService.getByCode(memberCode);
if (Objects.nonNull(memberDTO)) {
String code = memberDTO.getCode();
if (StringUtils.isNotEmpty(code)) {
resources.setMemberCode(code);
resources.setMemberId(memberDTO.getId());
resources.setId(null);
MemberProfileRepository.save(resources);
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(MemberProfile resources) {
MemberProfile MemberProfile = MemberProfileRepository.findById(resources.getId()).orElseGet(MemberProfile::new);
ValidationUtil.isNull( MemberProfile.getId(),"MemberProfile","id",resources.getId());
MemberProfile.copy(resources);
MemberProfileRepository.save(MemberProfile);
String memberCode = resources.getMemberCode();
MemberDTO memberDTO = this.memberService.getByCode(memberCode);
if (Objects.nonNull(memberDTO)) {
Long memberId = memberDTO.getId();
MemberProfile memberProfile = MemberProfileRepository.findByMemberId(memberId);
if (Objects.nonNull(memberProfile)) {
ValidationUtil.isNull( memberProfile.getId(),"MemberProfile","id",memberProfile.getId());
resources.setId(memberProfile.getId());
} else {
resources.setId(null);
}
memberProfile.copy(resources);
MemberProfileRepository.save(memberProfile);
}
}
@Override
......
......@@ -33,6 +33,9 @@ public class MemberRelatedInfo implements Serializable {
@Column(name = "member_id", nullable = false)
private Long memberId;
@Transient
private String memberCode;
// 人物关系 0:子女;1:父母
@Column(name = "type")
private Integer type;
......
package com.topdraw.business.basicdata.member.relatedinfo.repository;
import com.topdraw.business.basicdata.member.relatedinfo.domain.MemberRelatedInfo;
import com.topdraw.business.basicdata.member.relatedinfo.service.dto.MemberRelatedInfoDTO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
import java.util.Optional;
/**
* @author XiangHan
* @date 2021-10-22
*/
public interface MemberRelatedInfoRepository extends JpaRepository<MemberRelatedInfo, Long>, JpaSpecificationExecutor<MemberRelatedInfo> {
List<MemberRelatedInfo> findByMemberIdAndIdCard(Long memberDTOId,String idCard);
}
......
......@@ -6,6 +6,8 @@ import com.topdraw.business.basicdata.member.relatedinfo.service.MemberRelatedIn
import com.topdraw.business.basicdata.member.relatedinfo.service.dto.MemberRelatedInfoDTO;
import com.topdraw.business.basicdata.member.relatedinfo.service.dto.MemberRelatedInfoQueryCriteria;
import com.topdraw.business.basicdata.member.relatedinfo.service.mapper.MemberRelatedInfoMapper;
import com.topdraw.business.basicdata.member.service.MemberService;
import com.topdraw.business.basicdata.member.service.dto.MemberDTO;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.ValidationUtil;
......@@ -17,9 +19,12 @@ 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;
import java.util.Objects;
import java.util.Optional;
/**
* @author XiangHan
......@@ -34,6 +39,8 @@ public class MemberRelatedInfoServiceImpl implements MemberRelatedInfoService {
@Autowired
private MemberRelatedInfoMapper MemberRelatedInfoMapper;
@Autowired
private MemberService memberService;
@Override
public Map<String, Object> queryAll(MemberRelatedInfoQueryCriteria criteria, Pageable pageable) {
......@@ -62,10 +69,24 @@ public class MemberRelatedInfoServiceImpl implements MemberRelatedInfoService {
@Override
@Transactional(rollbackFor = Exception.class)
public void update(MemberRelatedInfo resources) {
MemberRelatedInfo MemberRelatedInfo = MemberRelatedInfoRepository.findById(resources.getId()).orElseGet(MemberRelatedInfo::new);
ValidationUtil.isNull( MemberRelatedInfo.getId(),"MemberRelatedInfo","id",resources.getId());
MemberRelatedInfo.copy(resources);
MemberRelatedInfoRepository.save(MemberRelatedInfo);
String memberCode = resources.getMemberCode();
Assert.notNull(memberCode,"memberCode can't be null!");
MemberDTO memberDTO = this.memberService.getByCode(memberCode);
if (Objects.nonNull(memberDTO)) {
Long memberDTOId = memberDTO.getId();
String idCard = resources.getIdCard();
List<MemberRelatedInfo> memberRelatedInfoDTOS = MemberRelatedInfoRepository.findByMemberIdAndIdCard(memberDTOId,idCard);
if (!CollectionUtils.isEmpty(memberRelatedInfoDTOS)) {
for (MemberRelatedInfo memberRelatedInfoDTO : memberRelatedInfoDTOS) {
ValidationUtil.isNull( memberRelatedInfoDTO.getId(),"MemberRelatedInfo","id",memberRelatedInfoDTO.getId());
resources.setId(memberRelatedInfoDTO.getId());
resources.setMemberId(memberDTOId);
memberRelatedInfoDTO.copy(resources);
MemberRelatedInfoRepository.save(memberRelatedInfoDTO);
}
}
}
}
@Override
......
......@@ -3,6 +3,8 @@ package com.topdraw.business.basicdata.member.repository;
import com.topdraw.business.basicdata.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.Optional;
......@@ -13,4 +15,11 @@ import java.util.Optional;
public interface MemberRepository extends JpaRepository<Member, Long>, JpaSpecificationExecutor<Member> {
Optional<Member> findFirstByCode(String code);
Optional<Member> findByCode(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);
}
......
......@@ -3,6 +3,7 @@ package com.topdraw.business.basicdata.member.service;
import com.topdraw.business.basicdata.member.domain.Member;
import com.topdraw.business.basicdata.member.service.dto.MemberDTO;
import com.topdraw.business.basicdata.member.service.dto.MemberQueryCriteria;
import com.topdraw.business.basicdata.user.iptv.domain.UserTv;
import org.springframework.data.domain.Pageable;
import java.util.List;
......@@ -36,7 +37,7 @@ public interface MemberService {
*/
MemberDTO findById(Long id);
void create(Member resources);
Long create(Member resources);
void update(Member resources);
......@@ -48,4 +49,8 @@ public interface MemberService {
* @return MemberDTO
*/
MemberDTO getByCode(String code);
boolean createMemberByUserTv(UserTv resources);
void doUpdateMemberPoints(Member member);
}
......
......@@ -4,6 +4,7 @@ import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
......@@ -13,6 +14,9 @@ import java.sql.Timestamp;
@Data
public class MemberDTO implements Serializable {
// 会员过期时间
private LocalDateTime vipExpireTime;
// 主键
private Long id;
......@@ -62,10 +66,10 @@ public class MemberDTO implements Serializable {
private Long duePoints;
// 优惠券数量
private Integer couponAmount;
private Long couponAmount;
// 即将过期优惠券数量
private Integer dueCouponAmount;
private Long dueCouponAmount;
// iptv账号id
private Long userIptvId;
......
......@@ -6,11 +6,21 @@ import com.topdraw.business.basicdata.member.service.MemberService;
import com.topdraw.business.basicdata.member.service.dto.MemberDTO;
import com.topdraw.business.basicdata.member.service.dto.MemberQueryCriteria;
import com.topdraw.business.basicdata.member.service.mapper.MemberMapper;
import com.topdraw.business.basicdata.user.iptv.domain.UserTv;
import com.topdraw.business.basicdata.user.iptv.service.UserTvService;
import com.topdraw.business.basicdata.user.iptv.service.dto.UserTvDTO;
import com.topdraw.config.LocalConstants;
import com.topdraw.util.IdWorker;
import com.topdraw.util.RedissonUtil;
import com.topdraw.util.TimestampUtil;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.StringUtils;
import com.topdraw.utils.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
......@@ -22,11 +32,13 @@ import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author XiangHan
* @date 2021-10-22
*/
@Slf4j
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class MemberServiceImpl implements MemberService {
......@@ -37,6 +49,12 @@ public class MemberServiceImpl implements MemberService {
@Autowired
private MemberMapper memberMapper;
@Autowired
private com.topdraw.business.basicdata.user.iptv.service.UserTvService UserTvService;
@Autowired
private RedissonClient redissonClient;
@Override
public Map<String, Object> queryAll(MemberQueryCriteria criteria, Pageable pageable) {
Page<Member> page = memberRepository.findAll((root, criteriaQuery, criteriaBuilder)
......@@ -58,42 +76,85 @@ public class MemberServiceImpl implements MemberService {
@Override
@Transactional(rollbackFor = Exception.class)
public void create(Member resources) {
public Long create(Member resources) {
Member member = this.checkMemberData(resources);
memberRepository.save(member);
return resources.getId();
}
private Member checkMemberData(Member member) {
member.setCode(String.valueOf(IdWorker.generator()));
member.setGender(0);
member.setType(-1);
member.setStatus(1);
member.setVip(0);
member.setLevel(0);
member.setExp(0L);
member.setPoints(0);
member.setDuePoints(0L);
member.setCouponAmount(0);
member.setDueCouponAmount(0);
Long defaultValue = 0L;
String code = member.getCode();
member.setCode(StringUtils.isEmpty(code)?String.valueOf(IdWorker.generator()):code);
Integer gender = member.getGender();
member.setGender(Objects.nonNull(gender) ? gender : 0);
Integer type = member.getType();
member.setType(Objects.nonNull(type) ? type:-1);
Integer status = member.getStatus();
member.setStatus(Objects.nonNull(status) ? status:1);
Integer vip = member.getVip();
member.setVip(Objects.nonNull(vip) ? vip:0);
Integer level = member.getLevel();
member.setLevel(Objects.nonNull(level) ? level:0);
member.setExp(defaultValue);
member.setPoints(defaultValue);
member.setDuePoints(defaultValue);
member.setCouponAmount(defaultValue);
member.setDueCouponAmount(defaultValue);
member.setBlackStatus(0L);
return member;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(Member resources) {
Member member = memberRepository.findById(resources.getId()).orElseGet(Member::new);
ValidationUtil.isNull( member.getId(),"Member","id",resources.getId());
RLock rLock = this.redissonClient.getLock("Member::update::code" + resources.getCode());
try {
RedissonUtil.lock(rLock);
Member member = memberRepository.findByCode(resources.getCode()).orElseGet(Member::new);
ValidationUtil.isNull( member.getId(),"Member","id",member.getId());
if (Objects.nonNull(member)) {
Long id = member.getId();
resources.setId(id);
String platformAccount = resources.getPlatformAccount();
if (StringUtils.isNotEmpty(platformAccount)) {
UserTvDTO userTvDTO = this.UserTvService.findByPlatformAccount(platformAccount);
if (Objects.nonNull(userTvDTO)) {
Long userIptvId = userTvDTO.getId();
resources.setUserIptvId(userIptvId);
}
}
}
member.copy(resources);
memberRepository.save(member);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
RedissonUtil.unlock(rLock);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
RLock rLock = this.redissonClient.getLock("Member::delete::code" + id);
try {
RedissonUtil.lock(rLock);
Member member = memberRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", Member.class, id), 1));
memberRepository.delete(member);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
RedissonUtil.unlock(rLock);
}
}
......@@ -102,4 +163,79 @@ public class MemberServiceImpl implements MemberService {
return StringUtils.isNotEmpty(code) ? memberMapper.toDto(memberRepository.findFirstByCode(code).orElseGet(Member::new))
: new MemberDTO();
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean createMemberByUserTv(UserTv resources) {
String platformAccount = resources.getPlatformAccount();
UserTvDTO userTvDTO = this.UserTvService.findByPlatformAccount(platformAccount);
if (Objects.isNull(userTvDTO)) {
Member member = new Member();
// 大屏
member.setType(LocalConstants.MEMBER_PLATFORM_TYPE_VIS);
Member member12 = this.checkMemberData(member);
Long memberId = this.create(member12);
if (Objects.nonNull(memberId)) {
UserTv userTv = new UserTv();
BeanUtils.copyProperties(resources,userTv);
userTv.setPlatformAccount(platformAccount);
userTv.setMemberCode(member12.getCode());
Long userIptvId = UserTvService.create(userTv);
if (Objects.nonNull(userIptvId)) {
member.setId(memberId);
member.setUserIptvId(userIptvId);
member.setBindIptvTime(TimestampUtil.now());
this.bindIptvId(member);
}
}
} else {
return false;
}
return true;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void doUpdateMemberPoints(Member member) {
RLock rLock = this.redissonClient.getLock("Member::update::code::" + member.getCode());
try {
RedissonUtil.lock(rLock);
Long id = member.getId();
Long points = member.getPoints();
Long duePoints = member.getDuePoints();
memberRepository.updateMemberPoints(id,points,duePoints);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
RedissonUtil.unlock(rLock);
}
}
private void save(Member member){
memberRepository.save(member);
}
public void bindIptvId(Member resources) {
RLock rLock = this.redissonClient.getLock("Member::update::code::" + resources.getCode());
try {
RedissonUtil.lock(rLock);
Member member = memberRepository.findFirstByCode(resources.getCode()).orElseGet(Member::new);
if (member==null) {
ValidationUtil.isNull(member.getId(), "Member", "id", resources.getId());
member.copy(resources);
}
this.save(member);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
RedissonUtil.unlock(rLock);
}
}
}
......
......@@ -2,7 +2,6 @@ package com.topdraw.business.basicdata.points.available.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
......@@ -12,8 +11,11 @@ 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
* @date 2021-10-23
*/
......@@ -24,6 +26,10 @@ import java.sql.Timestamp;
@Table(name="uc_points_available")
public class PointsAvailable implements Serializable {
/** 会员编号 */
@Transient
private String memberCode;
// 主键
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
......@@ -51,9 +57,9 @@ public class PointsAvailable implements Serializable {
private Long points;
// 过期时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Column(name = "expire_time")
private Timestamp expireTime;
private LocalDateTime expireTime;
// 描述
@Column(name = "description")
......
......@@ -2,9 +2,15 @@ package com.topdraw.business.basicdata.points.available.repository;
import com.topdraw.business.basicdata.points.available.domain.PointsAvailable;
import com.topdraw.business.basicdata.points.available.service.dto.PointsAvailableDTO;
import com.topdraw.business.basicdata.points.available.service.dto.PointsAvailableQueryCriteria;
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 org.springframework.transaction.annotation.Transactional;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Optional;
......@@ -19,5 +25,73 @@ public interface PointsAvailableRepository extends JpaRepository<PointsAvailable
List<PointsAvailableDTO> findByMemberId(Long memberId);
List<PointsAvailable> findByMemberIdAndExpireTimeBefore(Long memberId , Date now);
List<PointsAvailable> findByMemberIdAndExpireTimeBefore(Long memberId , LocalDateTime now);
/**
* 即将过期的积分
* @param memberId
* @param factor
* @return
*/
@Query(value = "SELECT sum(upa.points) AS pointsExpire from uc_points_available upa where upa.member_id = ?1 " +
" and (TO_DAYS(expire_time) - TO_DAYS(NOW())) <= ?2 "
,nativeQuery = true)
Long findSoonExpireTime(Long memberId, Integer factor);
/**
* 总积分
* @param criteria
* @return
*/
@Deprecated
@Query(value = "SELECT sum(upa.points) AS pointsProduce FROM uc_points_available upa WHERE (TO_DAYS(create_time)+1) = TO_DAYS(NOW())"
,nativeQuery = true)
Long findEveryDayPointsProduce(PointsAvailableQueryCriteria criteria);
/**
* 可用总积分
* @param criteria
* @return
*/
@Deprecated
@Query(value = "SELECT sum(upa.points) AS pointsAvailable FROM uc_points_available upa WHERE (TO_DAYS(create_time)+1) = TO_DAYS(NOW())"
,nativeQuery = true)
Long findEveryDayPointsAvailable(PointsAvailableQueryCriteria criteria);
/**
* 过期总积分
* @param criteria
* @return
*/
@Deprecated
@Query(value = "SELECT sum(upa.points) AS pointsExpire from uc_points_available upa where (TO_DAYS(create_time)+1) = TO_DAYS(NOW()) " +
" and TO_DAYS(expire_time) < TO_DAYS(NOW())"
,nativeQuery = true)
Long findEveryDayPointsExpire(PointsAvailableQueryCriteria criteria);
/**
* 获取可用积分
* @param memberId
* @return
*/
@Query(value = "SELECT sum(upa.points) AS pointsExpire from uc_points_available upa where upa.member_id = ?1 and (upa.expire_time > now() or upa.expire_time is null)"
,nativeQuery = true)
Long findAvailablePointsByMemberId(long memberId);
List<PointsAvailable> findByMemberIdOrderByExpireTime(Long memberId);
@Transactional
@Modifying
@Query(value = "delete from uc_points_available where id in ?1" ,nativeQuery = true)
void deleteBatchByIds(List<Long> id);
List<PointsAvailable> findByExpireTimeBefore(Timestamp now);
@Query(value = "SELECT sum(upa.points) AS pointsExpire from uc_points_available upa where upa.member_id = ?1"
,nativeQuery = true)
long findTotalCountByMemberId(Long memberId);
List<PointsAvailable> findByMemberIdAndExpireTimeAfter(Long memberId, Date timestamp);
}
......
......@@ -5,7 +5,7 @@ import com.topdraw.business.basicdata.points.available.service.dto.PointsAvailab
import com.topdraw.business.basicdata.points.available.service.dto.PointsAvailableQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
......@@ -55,6 +55,14 @@ public interface PointsAvailableService {
*/
void delete(Long id);
void delete4Custom(Long id);
/**
*
* @param id
*/
void deleteBatchByIds(List<Long> id);
/**
* Code校验
* @param code
......@@ -63,18 +71,42 @@ public interface PointsAvailableService {
PointsAvailableDTO getByCode(String code);
/**
*
* 已过期的积分
* @param memberId
* @param timestamp
* @return
*/
List<PointsAvailableDTO> findByMemberIdAndExpireTimeBefore(Long memberId, Date timestamp);
List<PointsAvailableDTO> findByMemberIdAndExpireTimeBefore(Long memberId, LocalDateTime timestamp);
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
* 即将过期的积分
* @param memberId 会员id
* @param factor 阈值
* @return
*/
Long findSoonExpireTime(Long memberId,Integer factor);
/**
*
* @param memberId
* @return
*/
List<PointsAvailableDTO> findByMemberIdOrderByExpireTime(Long memberId);
/**
*
* @param memberId
* @return
*/
Map<String,Object> findByMemberIdAndExpireTimeBefore(PointsAvailableQueryCriteria criteria, Pageable pageable);
long findAvailablePointsByMemberId(long memberId);
/**
*
* @param memberId
* @return
*/
long findTotalPointsByMemberId(Long memberId);
void create4Custom(PointsAvailable pointsAvailable);
}
......
......@@ -4,6 +4,7 @@ import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
/**
......@@ -32,7 +33,7 @@ public class PointsAvailableDTO implements Serializable {
private Long points;
// 过期时间
private Timestamp expireTime;
private LocalDateTime expireTime;
// 描述
private String description;
......
package com.topdraw.business.basicdata.points.available.service.impl;
import com.topdraw.business.basicdata.member.service.MemberService;
import com.topdraw.business.basicdata.member.service.dto.MemberDTO;
import com.topdraw.business.basicdata.points.available.domain.PointsAvailable;
import com.topdraw.business.basicdata.points.available.repository.PointsAvailableRepository;
import com.topdraw.business.basicdata.points.available.service.PointsAvailableService;
import com.topdraw.business.basicdata.points.available.service.dto.PointsAvailableDTO;
import com.topdraw.business.basicdata.points.available.service.dto.PointsAvailableQueryCriteria;
import com.topdraw.business.basicdata.points.available.service.mapper.PointsAvailableMapper;
import com.topdraw.util.RedissonUtil;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
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;
......@@ -19,7 +24,7 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
......@@ -38,6 +43,12 @@ public class PointsAvailableServiceImpl implements PointsAvailableService {
@Autowired
private PointsAvailableMapper PointsAvailableMapper;
@Autowired
private RedissonClient redissonClient;
@Autowired
private MemberService memberService;
@Override
public Map<String, Object> queryAll(PointsAvailableQueryCriteria criteria, Pageable pageable) {
Page<PointsAvailable> page = PointsAvailableRepository.findAll((root, criteriaQuery, criteriaBuilder) ->
......@@ -46,8 +57,8 @@ public class PointsAvailableServiceImpl implements PointsAvailableService {
}
@Override
public Map<String, Object> findByMemberIdAndExpireTimeBefore(PointsAvailableQueryCriteria criteria, Pageable pageable) {
return this.queryAll(criteria,pageable);
public List<PointsAvailableDTO> findByMemberIdOrderByExpireTime(Long memberId) {
return PointsAvailableMapper.toDto(PointsAvailableRepository.findByMemberIdOrderByExpireTime(memberId));
}
@Override
......@@ -65,25 +76,84 @@ public class PointsAvailableServiceImpl implements PointsAvailableService {
@Override
@Transactional(rollbackFor = Exception.class)
public void create(PointsAvailable resources) {
String memberCode = resources.getMemberCode();
if (StringUtils.isNotEmpty(memberCode)) {
MemberDTO memberDTO = this.memberService.getByCode(memberCode);
if (Objects.nonNull(memberDTO)) {
Long memberId = memberDTO.getId();
resources.setMemberId(memberId);
}
}
PointsAvailableRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(PointsAvailable resources) {
RLock rLock = this.redissonClient.getLock("PointsAvailable::update::id"+resources.getMemberId().toString());
try {
RedissonUtil.lock(rLock);
PointsAvailable PointsAvailable = PointsAvailableRepository.findById(resources.getId()).orElseGet(PointsAvailable::new);
ValidationUtil.isNull( PointsAvailable.getId(),"PointsAvailable","id",resources.getId());
PointsAvailable.copy(resources);
PointsAvailableRepository.save(PointsAvailable);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
RedissonUtil.unlock(rLock);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
RLock rLock = this.redissonClient.getLock("PointsAvailable::delete::id"+id);
try {
RedissonUtil.lock(rLock);
PointsAvailable PointsAvailable = PointsAvailableRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", PointsAvailable.class, id), 1));
PointsAvailableRepository.delete(PointsAvailable);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
RedissonUtil.unlock(rLock);
}
}
@Override
public void delete4Custom(Long id) {
Assert.notNull(id, "The given id must not be null!");
RLock rLock = this.redissonClient.getLock("PointsAvailable::delete::id"+id);
try {
RedissonUtil.lock(rLock);
PointsAvailable PointsAvailable = PointsAvailableRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", PointsAvailable.class, id), 1));
PointsAvailableRepository.delete(PointsAvailable);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
RedissonUtil.unlock(rLock);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteBatchByIds(List<Long> id) {
RLock rLock = this.redissonClient.getLock("PointsAvailable::create::id"+id.get(0));
try {
RedissonUtil.lock(rLock);
PointsAvailableRepository.deleteBatchByIds(id);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
RedissonUtil.unlock(rLock);
}
}
......@@ -94,11 +164,40 @@ public class PointsAvailableServiceImpl implements PointsAvailableService {
}
@Override
public List<PointsAvailableDTO> findByMemberIdAndExpireTimeBefore(Long memberId, Date timestamp) {
public List<PointsAvailableDTO> findByMemberIdAndExpireTimeBefore(Long memberId, LocalDateTime timestamp) {
return Objects.nonNull(memberId)?
PointsAvailableMapper.toDto(PointsAvailableRepository.findByMemberIdAndExpireTimeBefore(memberId, timestamp))
:null;
}
@Override
public Long findSoonExpireTime(Long memberId, Integer factor) {
return PointsAvailableRepository.findSoonExpireTime(memberId, factor);
}
@Override
public long findAvailablePointsByMemberId(long memberId) {
Long availablePoints = this.PointsAvailableRepository.findAvailablePointsByMemberId(memberId);
return availablePoints == null ? 0L : availablePoints;
}
@Override
public long findTotalPointsByMemberId(Long memberId) {
return this.PointsAvailableRepository.findTotalCountByMemberId(memberId);
}
@Override
public void create4Custom(PointsAvailable resources) {
String memberCode = resources.getMemberCode();
if (StringUtils.isNotEmpty(memberCode)) {
MemberDTO memberDTO = this.memberService.getByCode(memberCode);
if (Objects.nonNull(memberDTO)) {
Long memberId = memberDTO.getId();
resources.setMemberId(memberId);
}
}
PointsAvailableRepository.save(resources);
}
}
......
......@@ -23,6 +23,9 @@ import java.sql.Timestamp;
@Table(name="uc_points_detail")
public class PointsDetail implements Serializable {
@Transient
private String memberCode;
// 主键
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
......
......@@ -4,6 +4,7 @@ import com.topdraw.business.basicdata.points.detail.domain.PointsDetail;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
import java.util.Optional;
/**
......@@ -13,4 +14,6 @@ import java.util.Optional;
public interface PointsDetailRepository extends JpaRepository<PointsDetail, Long>, JpaSpecificationExecutor<PointsDetail> {
Optional<PointsDetail> findFirstByCode(String code);
List<PointsDetail> findByMemberId(Long memberId);
}
......
......@@ -38,6 +38,8 @@ public interface PointsDetailService {
void create(PointsDetail resources);
void create4Custom(PointsDetail resources);
void update(PointsDetail resources);
void delete(Long id);
......@@ -50,4 +52,12 @@ public interface PointsDetailService {
PointsDetailDTO getByCode(String code);
List<PointsDetailDTO> loadListExpirePointsByMemberId(Long memberId);
/**
* 已过期的积分
* @param memberId
* @return
*/
List<PointsDetailDTO> findByMemberId(Long memberId);
}
......
package com.topdraw.business.basicdata.points.detail.service.impl;
import com.topdraw.business.basicdata.member.service.MemberService;
import com.topdraw.business.basicdata.member.service.dto.MemberDTO;
import com.topdraw.business.basicdata.points.detail.domain.PointsDetail;
import com.topdraw.business.basicdata.points.detail.repository.PointsDetailRepository;
import com.topdraw.business.basicdata.points.detail.service.PointsDetailService;
......@@ -21,6 +23,7 @@ import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author XiangHan
......@@ -34,6 +37,9 @@ public class PointsDetailServiceImpl implements PointsDetailService {
private PointsDetailRepository PointsDetailRepository;
@Autowired
private MemberService memberService;
@Autowired
private PointsDetailMapper PointsDetailMapper;
@Override
......@@ -57,6 +63,27 @@ public class PointsDetailServiceImpl implements PointsDetailService {
@Override
@Transactional(rollbackFor = Exception.class)
public void create(PointsDetail resources) {
String memberCode = resources.getMemberCode();
if (StringUtils.isNotEmpty(memberCode)) {
MemberDTO memberDTO = this.memberService.getByCode(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.getByCode(memberCode);
if (Objects.nonNull(memberDTO)) {
Long memberId = memberDTO.getId();
resources.setMemberId(memberId);
}
}
PointsDetailRepository.save(resources);
}
......@@ -89,4 +116,11 @@ public class PointsDetailServiceImpl implements PointsDetailService {
public List<PointsDetailDTO> loadListExpirePointsByMemberId(Long memberId) {
return null;
}
@Override
public List<PointsDetailDTO> findByMemberId(Long memberId) {
return Objects.nonNull(memberId)?
PointsDetailMapper.toDto(PointsDetailRepository.findByMemberId(memberId))
:null;
}
}
......
......@@ -30,7 +30,7 @@ public class Points implements Serializable {
@Column(name = "user_id")
private Long userId;
// 积分类型,通用,绑定, 区分大小屏 todo
// 积分类型,通用,绑定, 区分大小屏
@Column(name = "point_type")
private Integer pointType;
......
......@@ -11,7 +11,7 @@ import io.swagger.annotations.Api;
//@RequestMapping("/api/Points")
public class PointsController {
/* @Autowired
/*@Autowired
private PointsService PointsService;
@GetMapping
......@@ -24,9 +24,9 @@ public class PointsController {
@ApiOperation("查询所有Points")
public ResultInfo getPointss(PointsQueryCriteria criteria) {
return ResultInfo.success(PointsService.queryAll(criteria));
}
}*/
@Log
/*@Log
@PostMapping
@ApiOperation("新增Points")
public ResultInfo create(@Validated @RequestBody Points resources) {
......
......@@ -2,10 +2,12 @@ package com.topdraw.business.basicdata.points.service.dto;
import lombok.Data;
/**
* @author XiangHan
* @date 2021-10-22
*/
@Data
public class PointsQueryCriteria{
}
......
......@@ -8,9 +8,12 @@ import com.topdraw.business.basicdata.points.service.PointsService;
import com.topdraw.business.basicdata.points.service.dto.PointsDTO;
import com.topdraw.business.basicdata.points.service.dto.PointsQueryCriteria;
import com.topdraw.business.basicdata.points.service.mapper.PointsMapper;
import com.topdraw.util.RedissonUtil;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
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;
......@@ -37,6 +40,9 @@ public class PointsServiceImpl implements PointsService {
@Autowired
private PointsMapper PointsMapper;
@Autowired
private RedissonClient redissonClient;
@Override
public Map<String, Object> queryAll(PointsQueryCriteria criteria, Pageable pageable) {
Page<Points> page = PointsRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
......@@ -66,10 +72,19 @@ public class PointsServiceImpl implements PointsService {
@Override
@Transactional(rollbackFor = Exception.class)
public void update(Points resources) {
RLock rLock = this.redissonClient.getLock(resources.getId().toString());
try {
RedissonUtil.lock(rLock);
Points Points = PointsRepository.findById(resources.getId()).orElseGet(Points::new);
ValidationUtil.isNull( Points.getId(),"Points","id",resources.getId());
ValidationUtil.isNull(Points.getId(), "Points", "id", resources.getId());
Points.copy(resources);
PointsRepository.save(Points);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
RedissonUtil.unlock(rLock);
}
}
@Override
......
package com.topdraw.business.basicdata.points.standingbook.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-10-29
*/
@Entity
@Data
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_points_standing_book")
public class PointsStandingBook implements Serializable {
// 主键
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 积分生产
@Column(name = "points_produce", nullable = false)
private Long pointsProduce;
// 积分消耗
@Column(name = "points_consume", nullable = false)
private Long pointsConsume;
// 可用总积分
@Column(name = "points_available", nullable = false)
private Long pointsAvailable;
// 积分过期
@Column(name = "points_expire", nullable = false)
private Long pointsExpire;
// 日期
@Column(name = "day")
private String day;
// 创建时间
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 创建时间
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
public void copy(PointsStandingBook source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
package com.topdraw.business.basicdata.points.standingbook.repository;
import com.topdraw.business.basicdata.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.basicdata.points.standingbook.rest;
import com.topdraw.annotation.Log;
import com.topdraw.business.basicdata.points.standingbook.domain.PointsStandingBook;
import com.topdraw.business.basicdata.points.standingbook.service.PointsStandingBookService;
import com.topdraw.business.basicdata.points.standingbook.service.dto.PointsStandingBookQueryCriteria;
import com.topdraw.common.ResultInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author XiangHan
* @date 2021-10-29
*/
@Api(tags = "PointsStandingBook管理")
@RestController
@RequestMapping("/api/PointsStandingBook")
public class PointsStandingBookController {
@Autowired
private PointsStandingBookService PointsStandingBookService;
@GetMapping
@ApiOperation("查询PointsStandingBook")
public ResultInfo getPointsStandingBooks(PointsStandingBookQueryCriteria criteria, Pageable pageable) {
return ResultInfo.successPage(PointsStandingBookService.queryAll(criteria,pageable));
}
@GetMapping(value = "/all")
@ApiOperation("查询所有PointsStandingBook")
public ResultInfo getPointsStandingBooks(PointsStandingBookQueryCriteria criteria) {
return ResultInfo.success(PointsStandingBookService.queryAll(criteria));
}
@Log
@PostMapping
@ApiOperation("新增PointsStandingBook")
public ResultInfo create(@Validated @RequestBody PointsStandingBook resources) {
PointsStandingBookService.create(resources);
return ResultInfo.success();
}
@Log
@PutMapping
@ApiOperation("修改PointsStandingBook")
public ResultInfo update(@Validated @RequestBody PointsStandingBook resources) {
PointsStandingBookService.update(resources);
return ResultInfo.success();
}
@Log
@DeleteMapping(value = "/{id}")
@ApiOperation("删除PointsStandingBook")
public ResultInfo delete(@PathVariable Long id) {
PointsStandingBookService.delete(id);
return ResultInfo.success();
}
}
package com.topdraw.business.basicdata.points.standingbook.service;
import com.topdraw.business.basicdata.points.standingbook.domain.PointsStandingBook;
import com.topdraw.business.basicdata.points.standingbook.service.dto.PointsStandingBookDTO;
import com.topdraw.business.basicdata.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.basicdata.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.basicdata.points.standingbook.service.dto;
import lombok.Data;
/**
* @author XiangHan
* @date 2021-10-29
*/
@Data
public class PointsStandingBookQueryCriteria{
}
package com.topdraw.business.basicdata.points.standingbook.service.impl;
import com.topdraw.business.basicdata.points.standingbook.domain.PointsStandingBook;
import com.topdraw.business.basicdata.points.standingbook.repository.PointsStandingBookRepository;
import com.topdraw.business.basicdata.points.standingbook.service.PointsStandingBookService;
import com.topdraw.business.basicdata.points.standingbook.service.dto.PointsStandingBookDTO;
import com.topdraw.business.basicdata.points.standingbook.service.dto.PointsStandingBookQueryCriteria;
import com.topdraw.business.basicdata.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.basicdata.points.standingbook.service.mapper;
import com.topdraw.base.BaseMapper;
import com.topdraw.business.basicdata.points.standingbook.domain.PointsStandingBook;
import com.topdraw.business.basicdata.points.standingbook.service.dto.PointsStandingBookDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author XiangHan
* @date 2021-10-29
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface PointsStandingBookMapper extends BaseMapper<PointsStandingBookDTO, PointsStandingBook> {
}
package com.topdraw.business.basicdata.user.iptv.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-12-16
*/
@Entity
@Data
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_user_tv")
public class UserTv implements Serializable {
@Transient
private String memberCode;
// ID
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 人ID
@Column(name = "`person_id`")
private Long personId;
// 运营商平台
@Column(name = "`platform`")
private String platform;
// 运营商平台账号
@Column(name = "`platform_account`")
private String platformAccount;
// 手机号
@Column(name = "`cellphone`")
private String cellphone;
// 用户名
@Column(name = "`username`")
private String username;
// 密码 MD5
@Column(name = "`password`")
private String password;
// 昵称 Base64
@Column(name = "`nickname`")
private String nickname;
// 头像
@Column(name = "`image`")
private String image;
// 登录天数(总天数)
@Column(name = "`login_days`")
private Integer loginDays;
// 连续登录天数
@Column(name = "`continue_days`")
private Integer continueDays;
// 活跃时间
@Column(name = "`active_time`")
private Timestamp activeTime;
// 分组 分组ID用逗号分隔
@Column(name = "`groups`")
private String groups;
// 标签 标签用逗号分隔
@Column(name = "`tags`")
private String tags;
// 登录类型 1-运营商隐式登录 2-手机验证登录 3-微信登录 4-QQ登录 5-微博登录 6-苹果登录
@Column(name = "`login_type`")
private Integer loginType;
// 状态 0-下线 1-上线
@Column(name = "`status`")
private Integer status;
// 描述
@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;
// 会员id
@Column(name = "`member_id`")
private Long memberId;
public void copy(UserTv source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
package com.topdraw.business.basicdata.user.iptv.repository;
import com.topdraw.business.basicdata.user.iptv.domain.UserTv;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.Optional;
/**
* @author XiangHan
* @date 2021-12-16
*/
public interface UserTvRepository extends JpaRepository<UserTv, Long>, JpaSpecificationExecutor<UserTv> {
Optional<UserTv> findByPlatformAccount(String platformAccount);
}
package com.topdraw.business.basicdata.user.iptv.rest;
import com.topdraw.annotation.Log;
import com.topdraw.business.basicdata.user.iptv.domain.UserTv;
import com.topdraw.business.basicdata.user.iptv.service.UserTvService;
import com.topdraw.business.basicdata.user.iptv.service.dto.UserTvQueryCriteria;
import com.topdraw.common.ResultInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author XiangHan
* @date 2021-12-16
*/
@Api(tags = "UserTv管理")
@RestController
@RequestMapping("/api/UserTv")
public class UserTvController {
@Autowired
private UserTvService UserTvService;
@GetMapping
@ApiOperation("查询UserTv")
public ResultInfo getUserTvs(UserTvQueryCriteria criteria, Pageable pageable) {
return ResultInfo.successPage(UserTvService.queryAll(criteria,pageable));
}
@GetMapping(value = "/all")
@ApiOperation("查询所有UserTv")
public ResultInfo getUserTvs(UserTvQueryCriteria criteria) {
return ResultInfo.success(UserTvService.queryAll(criteria));
}
@Log
@PostMapping
@ApiOperation("新增UserTv")
public ResultInfo create(@Validated @RequestBody UserTv resources) {
UserTvService.create(resources);
return ResultInfo.success();
}
@Log
@PutMapping
@ApiOperation("修改UserTv")
public ResultInfo update(@Validated @RequestBody UserTv resources) {
UserTvService.update(resources);
return ResultInfo.success();
}
@Log
@DeleteMapping(value = "/{id}")
@ApiOperation("删除UserTv")
public ResultInfo delete(@PathVariable Long id) {
UserTvService.delete(id);
return ResultInfo.success();
}
}
package com.topdraw.business.basicdata.user.iptv.service;
import com.topdraw.business.basicdata.user.iptv.domain.UserTv;
import com.topdraw.business.basicdata.user.iptv.service.dto.UserTvDTO;
import com.topdraw.business.basicdata.user.iptv.service.dto.UserTvQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
* @date 2021-12-16
*/
public interface UserTvService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(UserTvQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<UserTvDTO>
*/
List<UserTvDTO> queryAll(UserTvQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return UserTvDTO
*/
UserTvDTO findById(Long id);
Long create(UserTv resources);
void update(UserTv resources);
void delete(Long id);
UserTvDTO findByPlatformAccount(String platformAccount);
}
package com.topdraw.business.basicdata.user.iptv.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* @author XiangHan
* @date 2021-12-16
*/
@Data
public class UserTvDTO implements Serializable {
// ID
private Long id;
// 人ID
private Long personId;
// 运营商平台
private String platform;
// 运营商平台账号
private String platformAccount;
// 手机号
private String cellphone;
// 用户名
private String username;
// 密码 MD5
private String password;
// 昵称 Base64
private String nickname;
// 头像
private String image;
// 登录天数(总天数)
private Integer loginDays;
// 连续登录天数
private Integer continueDays;
// 活跃时间
private Timestamp activeTime;
// 分组 分组ID用逗号分隔
private String groups;
// 标签 标签用逗号分隔
private String tags;
// 登录类型 1-运营商隐式登录 2-手机验证登录 3-微信登录 4-QQ登录 5-微博登录 6-苹果登录
private Integer loginType;
// 状态 0-下线 1-上线
private Integer status;
// 描述
private String description;
// 创建者
private String createBy;
// 创建时间
private Timestamp createTime;
// 更新者
private String updateBy;
// 更新时间
private Timestamp updateTime;
// 会员id
private Long memberId;
}
package com.topdraw.business.basicdata.user.iptv.service.dto;
import lombok.Data;
/**
* @author XiangHan
* @date 2021-12-16
*/
@Data
public class UserTvQueryCriteria{
}
package com.topdraw.business.basicdata.user.iptv.service.impl;
import com.topdraw.business.basicdata.member.service.MemberService;
import com.topdraw.business.basicdata.member.service.dto.MemberDTO;
import com.topdraw.business.basicdata.user.iptv.domain.UserTv;
import com.topdraw.business.basicdata.user.iptv.repository.UserTvRepository;
import com.topdraw.business.basicdata.user.iptv.service.UserTvService;
import com.topdraw.business.basicdata.user.iptv.service.dto.UserTvDTO;
import com.topdraw.business.basicdata.user.iptv.service.dto.UserTvQueryCriteria;
import com.topdraw.business.basicdata.user.iptv.service.mapper.UserTvMapper;
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;
import java.util.Optional;
/**
* @author XiangHan
* @date 2021-12-16
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class UserTvServiceImpl implements UserTvService {
@Autowired
private UserTvRepository UserTvRepository;
@Autowired
private UserTvMapper UserTvMapper;
@Autowired
private MemberService memberService;
@Override
public Map<String, Object> queryAll(UserTvQueryCriteria criteria, Pageable pageable) {
Page<UserTv> page = UserTvRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(UserTvMapper::toDto));
}
@Override
public List<UserTvDTO> queryAll(UserTvQueryCriteria criteria) {
return UserTvMapper.toDto(UserTvRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
public UserTvDTO findById(Long id) {
UserTv UserTv = UserTvRepository.findById(id).orElseGet(UserTv::new);
ValidationUtil.isNull(UserTv.getId(),"UserTv","id",id);
return UserTvMapper.toDto(UserTv);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Long create(UserTv resources) {
MemberDTO memberDTO = memberService.getByCode(resources.getMemberCode());
if (Objects.nonNull(memberDTO)) {
Long id = memberDTO.getId();
resources.setMemberId(id);
UserTvRepository.save(resources);
return resources.getId();
}
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(UserTv resources) {
UserTv UserTv = UserTvRepository.findById(resources.getId()).orElseGet(UserTv::new);
ValidationUtil.isNull( UserTv.getId(),"UserTv","id",resources.getId());
UserTv.copy(resources);
UserTvRepository.save(UserTv);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
UserTv UserTv = UserTvRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", UserTv.class, id), 1));
UserTvRepository.delete(UserTv);
}
@Override
public UserTvDTO findByPlatformAccount(String platformAccount) {
Optional<UserTv> userTv = UserTvRepository.findByPlatformAccount(platformAccount);
if (userTv.isPresent()) {
ValidationUtil.isNull( userTv.get().getId(),"UserTv","id",userTv.get().getId());
return UserTvMapper.toDto(userTv.get());
}
return null;
}
}
package com.topdraw.business.basicdata.user.iptv.service.mapper;
import com.topdraw.base.BaseMapper;
import com.topdraw.business.basicdata.user.iptv.domain.UserTv;
import com.topdraw.business.basicdata.user.iptv.service.dto.UserTvDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author XiangHan
* @date 2021-12-16
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface UserTvMapper extends BaseMapper<UserTvDTO, UserTv> {
}
package com.topdraw.business.basicdata.user.weixin.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-12-16
*/
@Entity
@Data
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_user_weixin")
public class UserWeixin implements Serializable {
// ID
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 用户ID
@Column(name = "member_id")
private Long memberId;
// 微信unionid,针对开发者
@Column(name = "unionid")
private String unionid;
// 微信appid
@Column(name = "appid")
private String appid;
// 微信openid,针对微信app
@Column(name = "openid")
private String openid;
// 关注状态 0 -未关注 1 - 已关注
@Column(name = "status")
private Integer status;
// 关注同步状态 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 Timestamp createTime;
// 更新者
@Column(name = "update_by")
private String updateBy;
// 更新时间
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
// 来源类型
@Column(name = "source_type")
private String sourceType;
// 来源id
@Column(name = "source_id")
private String sourceId;
// 来源id
@Column(name = "source_desc")
private String sourceDesc;
// 人id
@Column(name = "person_id")
private Long personId;
// 来源用户id
@Column(name = "source_user")
private Long sourceUser;
// 来源实体:活动-activity/商品-item
@Column(name = "source_entity")
private String sourceEntity;
// 授权时间
@Column(name = "auth_time")
private Timestamp authTime;
@Column(name = "sex")
private Integer sex;
@Column(name = "country")
private String country;
@Column(name = "province")
private String province;
@Column(name = "city")
private String city;
public void copy(UserWeixin source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
package com.topdraw.business.basicdata.user.weixin.repository;
import com.topdraw.business.basicdata.user.weixin.domain.UserWeixin;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* @author XiangHan
* @date 2021-12-16
*/
public interface UserWeixinRepository extends JpaRepository<UserWeixin, Long>, JpaSpecificationExecutor<UserWeixin> {
}
package com.topdraw.business.basicdata.user.weixin.rest;
import com.topdraw.annotation.Log;
import com.topdraw.business.basicdata.user.weixin.domain.UserWeixin;
import com.topdraw.business.basicdata.user.weixin.service.UserWeixinService;
import com.topdraw.business.basicdata.user.weixin.service.dto.UserWeixinQueryCriteria;
import com.topdraw.common.ResultInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author XiangHan
* @date 2021-12-16
*/
@Api(tags = "UserWeixin管理")
@RestController
@RequestMapping("/api/UserWeixin")
public class UserWeixinController {
@Autowired
private UserWeixinService UserWeixinService;
@GetMapping
@ApiOperation("查询UserWeixin")
public ResultInfo getUserWeixins(UserWeixinQueryCriteria criteria, Pageable pageable) {
return ResultInfo.successPage(UserWeixinService.queryAll(criteria,pageable));
}
@GetMapping(value = "/all")
@ApiOperation("查询所有UserWeixin")
public ResultInfo getUserWeixins(UserWeixinQueryCriteria criteria) {
return ResultInfo.success(UserWeixinService.queryAll(criteria));
}
@Log
@PostMapping
@ApiOperation("新增UserWeixin")
public ResultInfo create(@Validated @RequestBody UserWeixin resources) {
UserWeixinService.create(resources);
return ResultInfo.success();
}
@Log
@PutMapping
@ApiOperation("修改UserWeixin")
public ResultInfo update(@Validated @RequestBody UserWeixin resources) {
UserWeixinService.update(resources);
return ResultInfo.success();
}
@Log
@DeleteMapping(value = "/{id}")
@ApiOperation("删除UserWeixin")
public ResultInfo delete(@PathVariable Long id) {
UserWeixinService.delete(id);
return ResultInfo.success();
}
}
package com.topdraw.business.basicdata.user.weixin.service;
import com.topdraw.business.basicdata.user.weixin.domain.UserWeixin;
import com.topdraw.business.basicdata.user.weixin.service.dto.UserWeixinDTO;
import com.topdraw.business.basicdata.user.weixin.service.dto.UserWeixinQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
* @date 2021-12-16
*/
public interface UserWeixinService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(UserWeixinQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<UserWeixinDTO>
*/
List<UserWeixinDTO> queryAll(UserWeixinQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return UserWeixinDTO
*/
UserWeixinDTO findById(Long id);
void create(UserWeixin resources);
void update(UserWeixin resources);
void delete(Long id);
}
package com.topdraw.business.basicdata.user.weixin.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* @author XiangHan
* @date 2021-12-16
*/
@Data
public class UserWeixinDTO implements Serializable {
// ID
private Long id;
// 用户ID
private Long memberId;
// 微信unionid,针对开发者
private String unionid;
// 微信appid
private String appid;
// 微信openid,针对微信app
private String openid;
// 关注状态 0 -未关注 1 - 已关注
private Integer status;
// 关注同步状态 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 Timestamp createTime;
// 更新者
private String updateBy;
// 更新时间
private Timestamp updateTime;
// 来源类型
private String sourceType;
// 来源id
private String sourceId;
// 来源id
private String sourceDesc;
// 人id
private Long personId;
// 来源用户id
private Long sourceUser;
// 来源实体:活动-activity/商品-item
private String sourceEntity;
// 授权时间
private Timestamp authTime;
private Integer sex;
private String country;
private String province;
private String city;
}
package com.topdraw.business.basicdata.user.weixin.service.dto;
import lombok.Data;
/**
* @author XiangHan
* @date 2021-12-16
*/
@Data
public class UserWeixinQueryCriteria{
}
package com.topdraw.business.basicdata.user.weixin.service.impl;
import com.topdraw.business.basicdata.user.weixin.domain.UserWeixin;
import com.topdraw.business.basicdata.user.weixin.repository.UserWeixinRepository;
import com.topdraw.business.basicdata.user.weixin.service.UserWeixinService;
import com.topdraw.business.basicdata.user.weixin.service.dto.UserWeixinDTO;
import com.topdraw.business.basicdata.user.weixin.service.dto.UserWeixinQueryCriteria;
import com.topdraw.business.basicdata.user.weixin.service.mapper.UserWeixinMapper;
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-12-16
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class UserWeixinServiceImpl implements UserWeixinService {
@Autowired
private UserWeixinRepository UserWeixinRepository;
@Autowired
private UserWeixinMapper UserWeixinMapper;
@Override
public Map<String, Object> queryAll(UserWeixinQueryCriteria criteria, Pageable pageable) {
Page<UserWeixin> page = UserWeixinRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(UserWeixinMapper::toDto));
}
@Override
public List<UserWeixinDTO> queryAll(UserWeixinQueryCriteria criteria) {
return UserWeixinMapper.toDto(UserWeixinRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
public UserWeixinDTO findById(Long id) {
UserWeixin UserWeixin = UserWeixinRepository.findById(id).orElseGet(UserWeixin::new);
ValidationUtil.isNull(UserWeixin.getId(),"UserWeixin","id",id);
return UserWeixinMapper.toDto(UserWeixin);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(UserWeixin resources) {
UserWeixinRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(UserWeixin resources) {
UserWeixin UserWeixin = UserWeixinRepository.findById(resources.getId()).orElseGet(UserWeixin::new);
ValidationUtil.isNull( UserWeixin.getId(),"UserWeixin","id",resources.getId());
UserWeixin.copy(resources);
UserWeixinRepository.save(UserWeixin);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
UserWeixin UserWeixin = UserWeixinRepository.findById(id).orElseThrow(
() -> new EmptyResultDataAccessException(String.format("No %s entity " + "with id %s " + "exists!", UserWeixin.class, id), 1));
UserWeixinRepository.delete(UserWeixin);
}
}
package com.topdraw.business.basicdata.user.weixin.service.mapper;
import com.topdraw.base.BaseMapper;
import com.topdraw.business.basicdata.user.weixin.domain.UserWeixin;
import com.topdraw.business.basicdata.user.weixin.service.dto.UserWeixinDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author XiangHan
* @date 2021-12-16
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface UserWeixinMapper extends BaseMapper<UserWeixinDTO, UserWeixin> {
}
package com.topdraw.business.process.domian;
public enum RightType {
/**积分*/
POINTS,
/**成长值*/
EXP,
/**优惠券券*/
COUPON,
/**权益统称*/
RIGHTS
}
package com.topdraw.business.process.domian;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Transient;
import java.sql.Timestamp;
/**
* 权益-非持久化数据
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TempCoupon extends TempRights {
@Transient
protected String code;
@Transient
protected Integer useStatus;
@Transient
protected Timestamp useTime;
/**领取时间*/
@Transient
protected Timestamp receiveTime;
@Transient
protected String userNickname;
}
package com.topdraw.business.process.domian;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Transient;
/**
* 权益-非持久化数据
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TempExp extends TempRights {
// 获得成长值
@Transient
protected Long rewardExp;
}
package com.topdraw.business.process.domian;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Transient;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TempIptvUser {
// 账户
@Transient
private String platformAccount;
// 分数
@Transient
private Long points;
}
package com.topdraw.business.process.domian;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
/**
* 权益-非持久化数据
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class TempPoints extends TempRights {
// 获得积分
@Transient
@NotNull(message = "【points】积分数值不得为空!!")
protected Long points;
// 积分类型 0:通用
@Transient
protected Integer pointsType;
@Transient
protected Long rewardPointsExpireTime;
}
package com.topdraw.business.process.domian;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
/**
* 权益-非持久化数据
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TempRights {
/** 主键 */
@Transient
protected Long id;
/** 编号 */
@Transient
protected String code;
/** 权益名称 */
@Transient
protected String name;
/** 会员ID */
@Transient
protected Long memberId;
/** 会员编号 */
@Transient
protected String memberCode;
/** 账号id */
@Transient
protected Long userId;
/** 发放策略 */
@Transient
protected Integer rightsSendStrategy;
/** 账号id */
@Transient
private Long accountId;
/** 过期时间 */
@Transient
protected LocalDateTime expireTime;
/** 设备类型 1:大屏;2:小屏(微信)3.小屏(xx) */
@Transient
@NotNull(message = "设备类型不得为空")
protected Integer deviceType;
/** 应用code(表示当前用户对应应用的标识) */
@Transient
protected String appCode;
/** 订单id */
@Transient
protected Long orderId;
/** 节目id(针对观影操作) */
@Transient
protected Long mediaId;
/** 活动id(针对参与活动) */
@Transient
protected Long activityId;
/** 商品id */
@Transient
protected Long itemId;
/** 积分变化描述,用于管理侧显示 */
@Transient
protected String description;
/** 行为事件类型 1:登录;2:观影;3:参与活动;4:订购;10:跨屏绑定;11:积分转移;98:系统操作;99:其他 */
@Transient
protected Integer evtType;
/** 数量 */
@Transient
protected Integer rightsAmount;
}
package com.topdraw.business.process.service;
import com.topdraw.business.basicdata.member.domain.Member;
import com.topdraw.business.basicdata.member.service.dto.MemberDTO;
public interface MemberOperationService {
void doUpdateMemberInfo(Member member);
void doInsertMember(Member member);
MemberDTO findById(Long memberId);
void doUpdateMemberExp(Member member);
void doUpdateMemberPoints(Member member);
void doUpdateMemberCoupon(Member member);
}
package com.topdraw.business.process.service;
import com.topdraw.business.process.domian.TempPoints;
import java.util.List;
/**
* @description 积分操作接口
* @author XiangHan
* @date 2021.10.22
*/
public interface PointsOperationService {
/**
* 手动发放积分
* @param memberId 会员id
* @param tempPoints 积分详情
*/
void grantPointsByManual(Long memberId , TempPoints tempPoints);
/**
*
* @param tempPoints
*/
void grantPointsByManualByTempPoints(TempPoints tempPoints);
/**
* 积分扣减
* @param tempPoints 积分对象
*/
boolean customPoints(TempPoints tempPoints);
/**
* 积分发放,基于已获得的权益
* @param tempPointsList 已获得的权益
*/
void grantPointsThroughTempRightsList(List<TempPoints> tempPointsList);
/**
* 清理过期并计算可用总积分
* @param memberId
* @return
*/
Long cleanInvalidPointsAndCalculateCurrentPoints(Long memberId);
}
package com.topdraw.business.process.service.builder;
import com.topdraw.business.process.domian.TempCoupon;
public class TempCouponBuilder {
public TempCoupon build(){
TempCoupon tempCoupon = new TempCoupon();
return tempCoupon;
}
}
package com.topdraw.business.process.service.impl;
import com.topdraw.business.basicdata.member.domain.Member;
import com.topdraw.business.basicdata.member.service.MemberService;
import com.topdraw.business.basicdata.member.service.dto.MemberDTO;
import com.topdraw.business.process.service.MemberOperationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import java.util.Objects;
@Service
public class MemberOperationServiceImpl implements MemberOperationService {
@Autowired
MemberService memberService;
@Override
public void doUpdateMemberInfo(Member member) {
Long id = member.getId();
Assert.notNull(id,"ERROR MSG: MemberOperationServiceImpl -> doUpdateMemberInfo -> id not be null!!");
this.memberService.update(member);
}
@Override
public void doInsertMember(Member member) {
this.memberService.create(member);
}
@Override
public MemberDTO findById(Long memberId) {
return Objects.nonNull(memberId) ? this.memberService.findById(memberId) : null;
}
@Override
public void doUpdateMemberExp(Member member) {
this.doUpdateMemberInfo(member);
}
@Override
public void doUpdateMemberPoints(Member member) {
this.memberService.doUpdateMemberPoints(member);
}
@Override
public void doUpdateMemberCoupon(Member member) {
this.doUpdateMemberInfo(member);
}
}
......@@ -8,9 +8,30 @@ public class LocalConstants {
// 大屏侧
public static final String ENV_VIS = "vis";
// 服务侧
public static final String ENV_SERVICE = "service";
// 管理侧
public static final String ENV_MANAGEMENT = "management";
// 大屏类型
public static final int DEVICE_VIS = 1;
// 小屏类型
public static final int DEVICE_MOBILE = 2;
// 平台类型
public static final String PLATFORM_TYPE_SERVICE = "service";
public static final String PLATFORM_TYPE_MANAGEMENT = "management";
//会员平台类型 类型 1:大屏;2:小屏
public static final Integer MEMBER_PLATFORM_TYPE_VIS = 1;
public static final Integer MEMBER_PLATFORM_TYPE_WEIXIN = 2;
// 重庆_重数_vis
public static final String APP_CODE_CHONGQING_CHONGSHU_VIS = "CHONGQING_chongshu_vis";
// 事件类型 3:参加活动
public static final Integer EVT_TYPE_ACTIVITY = 3;
}
......
......@@ -17,84 +17,102 @@ import org.springframework.context.annotation.Primary;
public class RabbitMqConfig {
/** 路由(事件)--direct route.key*/
// 事件,uc-gateway
public static final String UC_ROUTE_KEY_DIRECT_EVENT_AAA = "uc.route.key.direct.event.aaa";
// uc-service 服务侧
public static final String UC_ROUTE_KEY_DIRECT_EVENT_BBB = "uc.route.key.direct.event.bbb";
// uc-service 管理侧
public static final String UC_ROUTE_KEY_DIRECT_EVENT_CCC = "uc.route.key.direct.event.ccc";
/** 队列-- */
public static final String UC_QUEUE_FANOUT_IPTV = "uc.fanout.iptv";
public static final String UC_QUEUE_FANOUT_WEIXIN = "uc.fanout.weixin";
@Value("${mutil-mq.service.host}")
private String serviceHost;
@Value("${mutil-mq.service.port}")
private Integer servicePort;
@Value("${mutil-mq.service.username}")
private String serviceUserName;
@Value("${mutil-mq.service.password}")
private String servicePassword;
@Value("${mutil-mq.service.virtual-host}")
private String serviceVirtualHost;
public static final String UC_EXCHANGE_FANOUT = "uc.fanout";
@Bean(name = "userCenterConnectionFactory")
@Bean(name = "serviceConnectionFactory")
@Primary
public ConnectionFactory userCenterConnectionFactory(){
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
/*connectionFactory.setHost("47.100.212.170");
connectionFactory.setPort(5672);
connectionFactory.setUsername("test");
connectionFactory.setPassword("test");
connectionFactory.setVirtualHost("/");*/
connectionFactory.setHost("172.23.51.109");
connectionFactory.setPort(5672);
connectionFactory.setUsername("admin");
connectionFactory.setPassword("Tjlh@2021");
// connectionFactory.setVirtualHost("member_center");
connectionFactory.setVirtualHost("/");
return connectionFactory;
}
@Bean(name = "memberServiceConnectionFactory")
public ConnectionFactory memberServiceConnectionFactory(){
public ConnectionFactory serviceConnectionFactory(){
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
/*connectionFactory.setHost("139.196.145.150");
connectionFactory.setPort(5672);
connectionFactory.setUsername("admin");
connectionFactory.setPassword("Topdraw1qaz");
connectionFactory.setVirtualHost("member_center");*/
connectionFactory.setHost("172.0.31.108");
connectionFactory.setPort(5672);
connectionFactory.setUsername("admin");
connectionFactory.setPassword("Tjlh@2021");
connectionFactory.setVirtualHost("member_center");
connectionFactory.setHost(serviceHost);
connectionFactory.setPort(servicePort);
connectionFactory.setUsername(serviceUserName);
connectionFactory.setPassword(servicePassword);
connectionFactory.setVirtualHost(serviceVirtualHost);
return connectionFactory;
}
@Bean(name = "userCenterRabbitListenerContainerFactory")
@Bean(name = "serviceRabbitListenerContainerFactory")
@Primary
public RabbitListenerContainerFactory userCenterRabbitListenerContainerFactory(
SimpleRabbitListenerContainerFactoryConfigurer containerFactoryConfigurer,
@Qualifier("userCenterConnectionFactory") ConnectionFactory connectionFactory) {
@Qualifier("serviceConnectionFactory") ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
containerFactoryConfigurer.configure(factory,connectionFactory);
return factory;
}
@Bean(name = "serviceRabbitTemplate")
public RabbitTemplate userCenterRabbitTemplate(ConnectionFactory ucServiceConnectionFactory){
RabbitTemplate u = new RabbitTemplate(ucServiceConnectionFactory);
return u;
}
@Value("${mutil-mq.management.host}")
private String managementHost;
@Value("${mutil-mq.management.port}")
private Integer managementPort;
@Value("${mutil-mq.management.username}")
private String managementUserName;
@Value("${mutil-mq.management.password}")
private String managementPassword;
@Value("${mutil-mq.management.virtual-host}")
private String managementVirtualHost;
@Bean(name = "memberServiceRabbitListenerContainerFactory")
@Bean(name = "managementConnectionFactory")
public ConnectionFactory managementConnectionFactory(){
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
/*connectionFactory.setHost("139.196.192.242");
connectionFactory.setPort(5672);
connectionFactory.setUsername("member_center");
connectionFactory.setPassword("Tjlh@2021");
connectionFactory.setVirtualHost("member_center");*/
connectionFactory.setHost(managementHost);
connectionFactory.setPort(managementPort);
connectionFactory.setUsername(managementUserName);
connectionFactory.setPassword(managementPassword);
connectionFactory.setVirtualHost(managementVirtualHost);
return connectionFactory;
}
@Bean(name = "managementRabbitListenerContainerFactory")
public RabbitListenerContainerFactory memberServiceRabbitListenerContainerFactory(
SimpleRabbitListenerContainerFactoryConfigurer containerFactoryConfigurer,
@Qualifier("memberServiceConnectionFactory") ConnectionFactory connectionFactory) {
@Qualifier("managementConnectionFactory") ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
containerFactoryConfigurer.configure(factory,connectionFactory);
return factory;
}
/*
@Bean(name = "userCenterRabbitTemplate")
public RabbitTemplate userCenterRabbitTemplate(ConnectionFactory userCenterConnectionFactory){
RabbitTemplate u = new RabbitTemplate(userCenterConnectionFactory);
@Bean(name = "managementRabbitTemplate")
public RabbitTemplate memberServiceRabbitTemplate(ConnectionFactory ucGatewayConnectionFactory){
RabbitTemplate u = new RabbitTemplate(ucGatewayConnectionFactory);
return u;
}
@Bean(name = "memberServiceRabbitTemplate")
public RabbitTemplate memberServiceRabbitTemplate(ConnectionFactory memberServiceConnectionFactory){
RabbitTemplate u = new RabbitTemplate(memberServiceConnectionFactory);
return u;
}
*/
/**
* 处理事件
* @return org.springframework.amqp.core.Queue
......
package com.topdraw.config;
import com.topdraw.utils.StringUtils;
import org.redisson.Redisson;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RedissonConfig {
@Value("${spring.redis.host}")
private String redisHost;
@Value("${spring.redis.port}")
private String port;
@Value("${spring.redis.password}")
private String password;
@Bean
public Redisson redisson(){
Config config = new Config();
if (StringUtils.isNotEmpty(password)) {
config.useSingleServer().setAddress("redis://"+redisHost+":"+port).setPassword(password);
} else {
config.useSingleServer().setAddress("redis://"+redisHost+":"+port);
}
/* config.useClusterServers().addNodeAddress(
"redis://172.29.3.245:6375","redis://172.29.3.245:6376", "redis://172.29.3.245:6377",
"redis://172.29.3.245:6378","redis://172.29.3.245:6i379", "redis://172.29.3.245:6380")
.setPassword("a123456").setScanInterval(5000);*/
Redisson redissonClient = (Redisson)Redisson.create(config);
return redissonClient;
}
}
......@@ -10,7 +10,7 @@ public class ServiceEnvConfig {
// uc两侧部署,需配置位于哪一侧 mobile小屏侧 vis大屏侧
public static String UC_SERVICE_TYPE;
@Value("${uc.service.type:mobile}")
@Value("${service.area:mobile}")
public void setUcServiceType(String ucServiceType) {
UC_SERVICE_TYPE = ucServiceType;
}
......@@ -23,4 +23,21 @@ public class ServiceEnvConfig {
return ObjectUtil.equals(UC_SERVICE_TYPE, LocalConstants.ENV_VIS);
}
// service: 服务侧 management: 管理侧
public static String UC_SERVICE_PLATFORM;
@Value("${service.platform:management}")
public void setUcServicePlatform(String ucServicePlatform) {
UC_SERVICE_PLATFORM = ucServicePlatform;
}
public static boolean isService() {
return ObjectUtil.equals(UC_SERVICE_PLATFORM, LocalConstants.ENV_SERVICE);
}
public static boolean isManagement() {
return ObjectUtil.equals(UC_SERVICE_PLATFORM, LocalConstants.ENV_MANAGEMENT);
}
}
......
package com.topdraw.mq.consumer;
import com.topdraw.config.ServiceEnvConfig;
import com.topdraw.config.RabbitMqConfig;
import com.topdraw.mq.domain.TableOperationMsg;
import com.topdraw.util.JSONUtil;
......@@ -14,9 +13,9 @@ import org.springframework.stereotype.Component;
@Component
@Slf4j
public class MemberServiceConsumer {
public class UcEngineManageConsumer {
private static final Logger LOG = LoggerFactory.getLogger(MemberServiceConsumer.class);
private static final Logger LOG = LoggerFactory.getLogger(UcEngineManageConsumer.class);
@Autowired
AutoRoute autoUser;
......@@ -27,13 +26,11 @@ public class MemberServiceConsumer {
* @author Hongyan Wang
* @date 2021/9/7 11:26 上午
*/
@RabbitHandler
// @RabbitListener(queues = "#{memberServiceConsumer.platform()}")
/*@RabbitHandler
@RabbitListener(bindings = {
@QueueBinding(value = @Queue(value = "#{memberServiceConsumer.platform()}"),
exchange = @Exchange(value = RabbitMqConfig.UC_EXCHANGE_FANOUT,type = ExchangeTypes.FANOUT))
}
,containerFactory = "memberServiceRabbitListenerContainerFactory")
@QueueBinding(value = @Queue(value = RabbitMqConfig.UC_ROUTE_KEY_DIRECT_EVENT_CCC),
exchange = @Exchange(value = ExchangeTypes.DIRECT))
}, containerFactory = "managementRabbitListenerContainerFactory")
public void memberServiceFanoutConsumer(String content) {
try {
log.info(" receive dataSync msg , content is : {} ", content);
......@@ -43,21 +40,5 @@ public class MemberServiceConsumer {
} catch (Exception e) {
log.error(" LocalDataSyncMsg || msg:{} || error:{} ", content, e.getMessage());
}
}
/**
* @return java.lang.String
* @description 根据环境获取队列名称
* @author Hongyan Wang
* @date 2021/9/8 4:00 下午
*/
public String platform() {
String platform = "";
if (ServiceEnvConfig.isMobile()) {
platform = RabbitMqConfig.UC_QUEUE_FANOUT_WEIXIN;
} else {
if (ServiceEnvConfig.isVis()) platform = RabbitMqConfig.UC_QUEUE_FANOUT_IPTV;
}
return platform;
}
}*/
}
......
package com.topdraw.mq.consumer;
import com.topdraw.config.RabbitMqConfig;
import com.topdraw.mq.domain.TableOperationMsg;
import com.topdraw.resttemplate.RestTemplateClient;
import com.topdraw.util.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class UcEngineServiceConsumer {
@Autowired
RestTemplateClient restTemplateClient;
@Autowired
AutoRoute autoUser;
/**
* 事件
* @param content
* @description 基础数据同步
* @author Hongyan Wang
* @date 2021/9/7 11:26 上午
*/
@RabbitHandler
@RabbitListener(bindings = {
@QueueBinding(value = @Queue(value = RabbitMqConfig.UC_ROUTE_KEY_DIRECT_EVENT_BBB),
exchange = @Exchange(value = ExchangeTypes.DIRECT))
}, containerFactory = "serviceRabbitListenerContainerFactory")
public void ucEventConsumer(String content) {
log.info(" receive dataSync msg , content is : {} ", content);
TableOperationMsg dataSyncMsg = JSONUtil.parseMsg2Object(content, TableOperationMsg.class);
autoUser.route(dataSyncMsg);
log.info("ucEventConsumer ====>>>> end");
}
}
......@@ -5,6 +5,7 @@ import com.topdraw.mq.domain.DataSyncMsg;
import com.topdraw.resttemplate.RestTemplateClient;
import com.topdraw.util.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -12,11 +13,14 @@ import org.springframework.util.Assert;
@Component
@Slf4j
public class UserCenterConsumer {
public class UcGatewayConsumer {
@Autowired
RestTemplateClient restTemplateClient;
@Autowired
AutoRoute autoUser;
/**
* 事件
* @param content
......@@ -24,15 +28,17 @@ public class UserCenterConsumer {
* @author Hongyan Wang
* @date 2021/9/7 11:26 上午
*/
@RabbitHandler
@RabbitListener(queues = RabbitMqConfig.UC_ROUTE_KEY_DIRECT_EVENT_AAA,
containerFactory = "userCenterRabbitListenerContainerFactory")
/*@RabbitHandler
@RabbitListener(bindings = {
@QueueBinding(value = @Queue(value = RabbitMqConfig.UC_ROUTE_KEY_DIRECT_EVENT_AAA),
exchange = @Exchange(value = ExchangeTypes.DIRECT))
}, containerFactory = "serviceRabbitListenerContainerFactory")
public void ucEventConsumer(String content) {
log.info(" receive dataSync msg , content is : {} ", content);
DataSyncMsg dataSyncMsg = this.parseContent(content);
this.taskDeal(dataSyncMsg);
log.info("ucEventConsumer ====>>>> end");
}
}*/
/**
* 数据解析
......
package com.topdraw.util;
import org.redisson.api.RLock;
public class RedissonUtil {
public static void lock(RLock rLock){
rLock.lock();
}
public static void unlock(RLock rLock){
if (rLock.isLocked() && rLock.isHeldByCurrentThread())
rLock.unlock();
}
}