Commit cdf13700 cdf13700e7b76d8b38e3f850cf09f48b958136bc by xianghan

1.优化、规范会员接口

1 parent 4042c6ad
package com.topdraw.business.common;
/**
* @author :
* @description:
* @function :
* @date :Created in 2022/3/7 21:20
* @version: :
* @modified By:
* @since : modified in 2022/3/7 21:20
*/
public interface CreateGroup {
}
package com.topdraw.business.common;
/**
* @author :
* @description:
* @function :
* @date :Created in 2022/3/7 21:20
* @version: :
* @modified By:
* @since : modified in 2022/3/7 21:20
*/
public interface UpdateGroup {
}
......@@ -2,6 +2,7 @@ package com.topdraw.business.module.member.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.topdraw.business.module.member.relatedinfo.domain.UpdateGroup;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
......@@ -9,6 +10,7 @@ import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
......@@ -40,6 +42,7 @@ public class Member implements Serializable {
/** 标识 */
@Column(name = "code", nullable = false)
@NotNull(message = "code can't be null!!",groups = {UpdateGroup.class})
private String code;
/** 类型 1:大屏;2:小屏 */
......
......@@ -14,9 +14,9 @@ import io.swagger.annotations.*;
* @author XiangHan
* @date 2021-11-17
*/
@Api(tags = "MemberGroup管理")
@Api(tags = "会员分组管理")
@RestController
@RequestMapping("/api/MemberGroup")
@RequestMapping("/ucEngine/api/memberGroup")
public class MemberGroupController {
@Autowired
......@@ -29,27 +29,27 @@ public class MemberGroupController {
}
@GetMapping(value = "/all")
@ApiOperation("查询所有MemberGroup")
@ApiOperation("查询所有会员分组")
public ResultInfo getMemberGroups(MemberGroupQueryCriteria criteria) {
return ResultInfo.success(MemberGroupService.queryAll(criteria));
}
@PostMapping
@ApiOperation("新增MemberGroup")
@ApiOperation("新增会员分组")
public ResultInfo create(@Validated @RequestBody MemberGroup resources) {
MemberGroupService.create(resources);
return ResultInfo.success();
}
@PutMapping
@ApiOperation("修改MemberGroup")
@ApiOperation("修改会员分组")
public ResultInfo update(@Validated @RequestBody MemberGroup resources) {
MemberGroupService.update(resources);
return ResultInfo.success();
}
@DeleteMapping(value = "/{id}")
@ApiOperation("删除MemberGroup")
@ApiOperation("删除会员分组")
public ResultInfo delete(@PathVariable Long id) {
MemberGroupService.delete(id);
return ResultInfo.success();
......
package com.topdraw.business.module.member.rest;
import com.topdraw.annotation.AnonymousAccess;
import com.topdraw.aop.log.Log;
import com.topdraw.business.common.CreateGroup;
import com.topdraw.business.common.UpdateGroup;
import com.topdraw.business.module.member.domain.Member;
import com.topdraw.business.module.member.service.MemberService;
import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.business.module.user.iptv.domain.UserTv;
import com.topdraw.business.process.service.UserOperationService;
import com.topdraw.common.ResultInfo;
import com.topdraw.util.Base64Util;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
......@@ -24,7 +24,7 @@ import java.util.Objects;
* @author XiangHan
* @date 2021-10-22
*/
@Api(tags = "Member管理")
@Api(tags = "会员管理")
@RestController
@RequestMapping("/ucEngine/api/member")
@CrossOrigin
......@@ -33,66 +33,80 @@ public class MemberController {
@Autowired
private MemberService memberService;
@Autowired
private UserOperationService userTvOperationService;
@Log("通过id查询会员")
@GetMapping(value = "/findById/{id}")
@ApiOperation("新增UserTv会员")
public ResultInfo findById(@PathVariable Long id) {
MemberDTO memberDTO = this.memberService.findById(id);
@ApiOperation("通过id查询会员")
public ResultInfo findById(@PathVariable Long resources) {
log.info("member ==>> findById ==>> param ==>> [{}]",resources);
Assert.notNull(resources,"id can't be null!!");
MemberDTO memberDTO = this.memberService.findById(resources);
log.info("member ==>> findById ==>> memberDTO ==>> [{}]",memberDTO);
return ResultInfo.success(memberDTO);
}
@Log("为大屏账户创建会员")
@PostMapping(value = "/createMemberByUserTv")
@ApiOperation("新增UserTv会员")
public ResultInfo createMemberByUserTv(@Validated @RequestBody UserTv resources) {
@ApiOperation("为大屏账户创建会员")
public ResultInfo createMemberByUserTv(@Validated(value = {CreateGroup.class}) @RequestBody UserTv resources) {
log.info("member ==>> createMemberByUserTv ==>> param ==>> [{}]",resources);
String platformAccount = resources.getPlatformAccount();
Assert.notNull(platformAccount, "The given platformAccount must not be null!");
boolean result = this.userTvOperationService.createMemberByUserTv(resources);
log.info("member ==>> createMemberByUserTv ==>> result ==>> [{}]",result);
return ResultInfo.success(result);
}
@Log("新增会员")
@PostMapping(value = "/create")
@ApiOperation("新增Member")
@AnonymousAccess
@ApiOperation("新增会员")
public ResultInfo create(@Validated @RequestBody Member resources) {
log.info("member ==>> create ==>> param ==>> [{}]",resources);
Long id = memberService.create(resources);
log.info("member ==>> create ==>> result ==>> [{}]",resources);
return ResultInfo.success(id);
}
@Log("手动修改vip")
@PostMapping(value = "/doUpdateVip")
@ApiOperation("修改Member等级")
public ResultInfo doUpdateVip(@RequestBody Member member) {
memberService.update(member);
@ApiOperation("手动修改vip")
public ResultInfo doUpdateVip(@Validated @RequestBody Member resources) {
// TODO mall-service需要修改
log.info("member ==>> create ==>> param ==>> [{}]",resources);
memberService.update(resources);
return ResultInfo.success();
}
@Log("修改会员")
@PutMapping(value = "/update")
@ApiOperation("修改Member")
@AnonymousAccess
public ResultInfo update(@Validated @RequestBody Member resources) {
log.info("member ==>> update =>> [{}]",resources);
@ApiOperation("修改会员")
public ResultInfo update(@Validated(value = {UpdateGroup.class}) @RequestBody Member resources) {
Long memberId = resources.getId();
String code1 = resources.getCode();
MemberDTO memberDTO = null;
if (StringUtils.hasText(code1)) {
memberDTO = this.memberService.getByCode(code1);
if (Objects.isNull(memberDTO.getCode()) && Objects.nonNull(memberId)) {
memberDTO = this.memberService.findById(memberId);
}
}
Assert.notNull(memberId,"memberId can't be null");
MemberDTO memberDTO = this.memberService.findById(memberId);
if (Objects.nonNull(memberDTO)) {
String code = memberDTO.getCode();
log.info("member ==>> memberDTO =>> [{}]",memberDTO);
Assert.notNull(code, "code can't be null");
resources.setCode(code);
memberService.update(resources);
}
return ResultInfo.success();
}
@Log("根据标识查询")
@GetMapping(value = "/getByCode/{code}")
@ApiOperation(value = "根据标识查询")
public ResultInfo getByCode(@PathVariable String code) {
......
package com.topdraw.business.module.member.service;
import com.topdraw.aspect.AsyncMqSend;
import com.topdraw.business.module.member.domain.Member;
import com.topdraw.business.module.member.profile.service.dto.MemberProfileDTO;
import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.business.module.member.service.dto.MemberQueryCriteria;
import org.springframework.data.domain.Pageable;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
......@@ -18,15 +15,7 @@ import java.util.Map;
public interface MemberService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(MemberQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* 数据不分页
* @param criteria 条件参数
* @return List<MemberDTO>
*/
......@@ -40,25 +29,34 @@ public interface MemberService {
MemberDTO findById(Long id);
/**
*
* 保存
* @param resources
* @return
* @return Long id
*/
Long create(Member resources);
/**
* 创建并返回会员
* @param resources 会员
* @return Member
*/
Member createAndReturnMember(Member resources);
/**
*
* 修改会员
* @param resources
*/
void update(Member resources);
/**
* 解绑
* @param resources 会员
* @return Map<String,Object>
*/
void unbind(Member resources);
/**
*
* 删除
* @param id
*/
void delete(Long id);
......@@ -76,5 +74,10 @@ public interface MemberService {
*/
void doUpdateMemberPoints(Member member);
/**
* 查询数据分页
* @param id 条件参数
* @return Map<String,Object>
*/
List<MemberDTO> findByUserIptvId(Long id);
}
......
......@@ -9,7 +9,6 @@ import com.topdraw.business.module.member.service.dto.MemberQueryCriteria;
import com.topdraw.business.module.member.service.mapper.MemberMapper;
import com.topdraw.util.IdWorker;
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;
......@@ -17,15 +16,10 @@ import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
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.PlatformTransactionManager;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.nio.charset.StandardCharsets;
import java.util.*;
......@@ -40,26 +34,11 @@ import java.util.*;
public class MemberServiceImpl implements MemberService {
@Autowired
private MemberRepository memberRepository;
@Autowired
private MemberMapper memberMapper;
@Autowired
private RedissonClient redissonClient;
@Autowired
PlatformTransactionManager platformTransactionManager;
@Autowired
private com.topdraw.business.module.user.iptv.service.UserTvService UserTvService;
@Override
public Map<String, Object> queryAll(MemberQueryCriteria criteria, Pageable pageable) {
Page<Member> page = memberRepository.findAll((root, criteriaQuery, criteriaBuilder)
-> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(memberMapper::toDto));
}
private MemberRepository memberRepository;
@Override
public List<MemberDTO> queryAll(MemberQueryCriteria criteria) {
......@@ -71,12 +50,11 @@ public class MemberServiceImpl implements MemberService {
Member member = memberRepository.findById(id).orElseGet(Member::new);
ValidationUtil.isNull(member.getId(),"Member","id",id);
return memberMapper.toDto(member);
}
@Override
@Transactional(rollbackFor = Exception.class)
@AsyncMqSend
@AsyncMqSend()
public Long create(Member resources) {
Member member = this.checkMemberData(resources);
memberRepository.save(member);
......@@ -85,8 +63,9 @@ public class MemberServiceImpl implements MemberService {
@Override
@Transactional(rollbackFor = Exception.class)
@AsyncMqSend
@AsyncMqSend()
public Member createAndReturnMember(Member resources) {
// 检查并初始化数据
Member member = this.checkMemberData(resources);
memberRepository.save(member);
return resources;
......@@ -127,8 +106,7 @@ public class MemberServiceImpl implements MemberService {
RLock rLock = this.redissonClient.getLock("member::update::code" + resources.getCode().toString());
try {
RedissonUtil.lock(rLock);
// Member member = memberRepository.findById(resources.getId()).orElseGet(Member::new);
Member member = memberRepository.findFirstByCode(resources.getCode()).orElseGet(Member::new);
Member member = memberRepository.findById(resources.getId()).orElseGet(Member::new);
ValidationUtil.isNull(member.getId(), "Member", "id", resources.getId());
member.copy(resources);
this.save(member);
......@@ -144,7 +122,7 @@ public class MemberServiceImpl implements MemberService {
@Transactional(rollbackFor = Exception.class)
@AsyncMqSend()
public void unbind(Member resources) {
RLock rLock = this.redissonClient.getLock("member::update::id" + resources.getId().toString());
RLock rLock = this.redissonClient.getLock("member::update::code" + resources.getId().toString());
try {
RedissonUtil.lock(rLock);
Member member = memberRepository.findById(resources.getId()).orElseGet(Member::new);
......@@ -167,13 +145,12 @@ public class MemberServiceImpl implements MemberService {
@Transactional(rollbackFor = Exception.class)
@AsyncMqSend()
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
RLock rLock = this.redissonClient.getLock("member::delete::id" + id);
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);
//memberRepository.delete(member);
} catch (Exception e) {
e.printStackTrace();
throw e;
......@@ -182,7 +159,6 @@ public class MemberServiceImpl implements MemberService {
}
}
@Override
public MemberDTO getByCode(String code) {
return StringUtils.isNotEmpty(code) ? memberMapper.toDto(memberRepository.findFirstByCode(code).orElseGet(Member::new))
......@@ -190,9 +166,10 @@ public class MemberServiceImpl implements MemberService {
}
@Override
@Transactional(rollbackFor = Exception.class)
@AsyncMqSend()
public void doUpdateMemberPoints(Member resources) {
RLock rLock = this.redissonClient.getLock("member::update::id" + resources.getId().toString());
RLock rLock = this.redissonClient.getLock("member::update::code" + resources.getId().toString());
try {
RedissonUtil.lock(rLock);
Member member = memberRepository.findById(resources.getId()).orElseGet(Member::new);
......@@ -213,5 +190,4 @@ public class MemberServiceImpl implements MemberService {
return memberMapper.toDto(memberList);
}
}
......
package com.topdraw.business.module.user.iptv.domain;
import com.topdraw.business.common.CreateGroup;
import com.topdraw.business.common.UpdateGroup;
import lombok.Data;
import lombok.experimental.Accessors;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
......@@ -46,6 +50,7 @@ public class UserTv implements Serializable {
// 运营商平台账号
@Column(name = "platform_account")
@NotNull(message = "platformAccount can't be null !",groups = {CreateGroup.class})
private String platformAccount;
// 手机号
......