Commit f916b030 f916b030f805fdb406d9071fb08b291e4e022763 by xianghan

1.优化sql

2.添加缓存
1 parent 31b1400d
Showing 52 changed files with 1223 additions and 824 deletions
......@@ -32,10 +32,8 @@ public class MemberProfileController {
@RequestMapping(value = "/update")
@ApiOperation("修改会员属性")
@AnonymousAccess
@Deprecated
public ResultInfo update(@Validated(value = {UpdateGroup.class}) @RequestBody MemberProfile resources) {
log.info("memberProfile ==>> update ==>> resources ===>> [{}]",resources);
log.info("memberProfile ==>> update ==>> resources ===>> {}",resources);
MemberProfileDTO memberProfileDTO = this.memberProfileOperationService.updateMemberProfileAndMember(resources);
return ResultInfo.success(memberProfileDTO);
}
......@@ -44,8 +42,7 @@ public class MemberProfileController {
@ApiOperation("修改会员属性并同步会员信息")
@AnonymousAccess
public ResultInfo updateMemberProfileAndMember(@Validated @RequestBody MemberProfile resources) {
log.info("MemberProfileServiceImpl ==>> update ==>> resources ===>> [{}]",resources);
log.info("MemberProfileServiceImpl ==>> update ==>> resources ===>> {}",resources);
MemberProfileDTO memberProfileDTO = this.memberProfileOperationService.updateMemberProfileAndMember(resources);
return ResultInfo.success(memberProfileDTO);
}
......@@ -55,9 +52,7 @@ public class MemberProfileController {
@AnonymousAccess
@Deprecated
public ResultInfo create(@Validated(value = {CreateGroup.class}) @RequestBody MemberProfile resources) {
log.info("memberProfile ==>> update ==>> resources ===>> [{}]",resources);
log.info("memberProfile ==>> update ==>> resources ===>> {}",resources);
MemberProfileDTO memberProfileDTO = this.memberProfileOperationService.createMemberProfileAndSyncMember(resources);
return ResultInfo.success(memberProfileDTO);
}
......
......@@ -175,27 +175,26 @@ public class MemberProfileServiceImpl implements MemberProfileService {
return memberProfileDTO;
}
private void synchronizedMemberData(MemberProfile resources, MemberDTO memberDTO) {
private void synchronizedMemberData(MemberProfile memberProfile, MemberDTO memberDTO) {
log.info("updateMemberProfileAndMember ==>> resources ==>> [{}]",resources);
log.info("updateMemberProfileAndMember ==>> resources ==>> [{}]",memberProfile);
memberDTO.setId(resources.getMemberId());
if(StringUtils.isNotBlank(resources.getRealname())) {
memberDTO.setNickname(resources.getRealname());
Member member = new Member();
member.setId(memberDTO.getId());
member.setCode(memberDTO.getCode());
if(StringUtils.isNotBlank(memberProfile.getRealname())) {
member.setNickname(memberProfile.getRealname());
}
if(Objects.nonNull(resources.getGender()) && resources.getGender() != -1) {
memberDTO.setGender(resources.getGender());
if(Objects.nonNull(memberProfile.getGender()) && memberProfile.getGender() != -1) {
member.setGender(memberProfile.getGender());
}
if(StringUtils.isNotBlank(resources.getBirthday())) {
memberDTO.setBirthday(resources.getBirthday());
if(StringUtils.isNotBlank(memberProfile.getBirthday())) {
member.setBirthday(memberProfile.getBirthday());
}
if(StringUtils.isNotBlank(resources.getAvatarUrl())) {
memberDTO.setAvatarUrl(resources.getAvatarUrl());
if(StringUtils.isNotBlank(memberProfile.getAvatarUrl())) {
member.setAvatarUrl(memberProfile.getAvatarUrl());
}
Member member = new Member();
BeanUtils.copyProperties(memberDTO,member);
this.memberService.update(member);
this.memberService.doUpdateMemberAvatarUrlAndNicknameAndGender(member);
}
}
......
......@@ -23,24 +23,48 @@ public interface MemberRepository extends JpaRepository<Member, Long>, JpaSpecif
Optional<Member> findByIdOrCode(Long id,String code);
@Modifying
@Query(value = "UPDATE `uc_member` SET `user_iptv_id` = ?2, `update_time` = ?3 , `bind_iptv_platform_type`= 0, " +
"`bind_iptv_time`=?3 WHERE `id` = ?1", nativeQuery = true)
void updateUserIptvIdById(Long id, Long userIptvId, LocalDateTime now);
@Modifying
@Query(value = "UPDATE `uc_member` SET `exp` = :#{#resources.exp}, `level` = :#{#resources.level} , `update_time`= now() " +
@Query(value = "UPDATE `uc_member` SET `exp` = :#{#resources.exp}, " +
"`level` = :#{#resources.level} , `update_time`= now() " +
" WHERE `id` = :#{#resources.id}", nativeQuery = true)
void updateExpAndLevel(@Param("resources") Member member);
Integer updateExpAndLevel(@Param("resources") Member member);
@Modifying
@Query(value = "UPDATE `uc_member` SET `points` = :#{#resources.points}, `due_points` = :#{#resources.duePoints} , `update_time`= now() " +
@Query(value = "UPDATE `uc_member` SET `points` = :#{#resources.points}, " +
"`due_points` = :#{#resources.duePoints} , `update_time`= now() " +
" WHERE `id` = :#{#resources.id}", nativeQuery = true)
void updatePointAndDuePoint(@Param("resources") Member resources);
Integer updatePointAndDuePoint(@Param("resources") Member resources);
@Modifying
@Query(value = "UPDATE `uc_member` SET `coupon_amount` = :#{#resources.couponAmount}, " +
"`due_coupon_amount` = :#{#resources.dueCouponAmount} , `update_time`= now() " +
" WHERE `id` = :#{#resources.id}", nativeQuery = true)
Integer doUpdateMemberCoupon(@Param("resources") Member member);
@Query(value = "SELECT um.* FROM uc_member um LEFT JOIN uc_user_tv tv ON um.id = tv.member_id " +
" WHERE tv.platform_account = ?1 ", nativeQuery = true)
Optional<Member> findByPlatformAccount(String platformAccount);
@Modifying
@Query(value = "UPDATE `uc_member` SET `coupon_amount` = :#{#resources.couponAmount}, `due_coupon_amount` = :#{#resources.dueCouponAmount} , `update_time`= now() " +
@Query(value = "UPDATE `uc_member` SET `vip` = :#{#resources.vip}, " +
"`vip_expire_time` = :#{#resources.vipExpireTime} , `update_time`= now() " +
" WHERE `id` = :#{#resources.id}", nativeQuery = true)
void doUpdateMemberCoupon(@Param("resources") Member member);
Integer updateMemberVipAndVipExpireTime(@Param("resources") Member member);
@Modifying
@Query(value = "UPDATE `uc_member` SET `user_iptv_id` = :#{#resources.userIptvId}, `update_time` = now() , " +
" `bind_iptv_platform_type`= :#{#resources.bindIptvPlatformType}, " +
" `bind_iptv_time`=:#{#resources.bindIptvTime} WHERE `id` = :#{#resources.id}", nativeQuery = true)
Integer updateMemberUserIptvIdAndBindIptvPlatformAndBindIptvTime(@Param("resources") Member member);
@Modifying
@Query(value = "UPDATE `uc_member` SET `avatar_url` = :#{#resources.avatarUrl}, `update_time` = now() , " +
" `nickname`= :#{#resources.nickname}, " +
" `gender`=:#{#resources.gender} WHERE `id` = :#{#resources.id}", nativeQuery = true)
Integer updateMemberAvatarUrlAndNicknameAndGender(@Param("resources") Member resource);
}
......
......@@ -52,8 +52,8 @@ public class MemberController {
@AnonymousAccess
@ApiOperation("手动修改vip")
public ResultInfo doUpdateVipByCode(@Validated(value = {UpdateGroup.class}) @RequestBody Member resources) {
log.info("member ==>> doUpdateVipByCode ==>> param ==>> [{}]",resources);
this.memberOperationService.updateMemberVip(resources);
log.info("member ==>> doUpdateVipByCode ==>> param ==>> {}",resources);
this.memberOperationService.doUpdateMemberVipAndVipExpireTime(resources);
return ResultInfo.success();
}
......@@ -67,7 +67,6 @@ public class MemberController {
if (StringUtils.isNotBlank(code)) {
MemberDTO memberDTO = this.memberOperationService.findByCode(code);
resources.setId(memberDTO.getId());
// BeanUtils.copyProperties(resources, memberDTO);
}
MemberDTO memberDTO = this.memberOperationService.update(resources);
......
......@@ -40,13 +40,6 @@ public interface MemberService {
MemberDTO create(Member resources);
/**
* 创建并返回会员
* @param resources 会员
* @return Member
*/
MemberDTO createAndReturnMember(Member resources);
/**
* 修改会员
* @param resources
*/
......@@ -91,4 +84,31 @@ public interface MemberService {
* @return
*/
MemberDTO doUpdateMemberCoupon(Member member);
/**
*
* @param platformAccount
* @return
*/
MemberDTO findByPlatformAccount(String platformAccount);
/**
*
* @param member
* @return
*/
MemberDTO doUpdateMemberVipAndVipExpireTime(Member member);
/**
*
* @param member
* @return
*/
MemberDTO doUpdateMemberUserIptvIdAndBindIptvPlatformAndBindIptvTime(Member member);
/**
*
* @param member
*/
MemberDTO doUpdateMemberAvatarUrlAndNicknameAndGender(Member member);
}
......
......@@ -9,17 +9,14 @@ import com.topdraw.business.module.member.repository.MemberRepository;
import com.topdraw.business.module.member.service.MemberService;
import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.business.module.member.service.mapper.MemberMapper;
import com.topdraw.config.RedisKeyConstants;
import com.topdraw.exception.BadRequestException;
import com.topdraw.exception.GlobeExceptionMsg;
import com.topdraw.utils.RedisUtils;
import com.topdraw.utils.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
......@@ -45,7 +42,6 @@ public class MemberServiceImpl implements MemberService {
@Autowired
private RedisUtils redisUtils;
@Override
public String findCodeById(Long id) {
MemberDTO memberDTO = this.findById(id);
......@@ -56,35 +52,18 @@ public class MemberServiceImpl implements MemberService {
public MemberDTO findById(Long id) {
Member member = this.memberRepository.findById(id).orElseGet(Member::new);
return this.memberMapper.toDto(member);
}
@Override
public MemberDTO findByCode(String code) {
Member member = this.memberRepository.findFirstByCode(code).orElseGet(Member::new);
ValidationUtil.isNull(member.getId(),"Member","id",code);
return this.memberMapper.toDto(member);
}
private MemberDTO findByIdOrCode(Long id,String code) {
Member member = this.memberRepository.findByIdOrCode(id,code).orElseGet(Member::new);
ValidationUtil.isNull(member.getId(),"Member","param",code);
return this.memberMapper.toDto(member);
}
@Override
public List<MemberDTO> findByUserIptvId(Long id) {
List<Member> memberList = this.memberRepository.findByUserIptvId(id);
return this.memberMapper.toDto(memberList);
}
@Override
......@@ -94,11 +73,11 @@ public class MemberServiceImpl implements MemberService {
throw new BadRequestException(GlobeExceptionMsg.MEMBER_ID_AND_CODE_ARE_NULL);
if (StringUtils.isNotBlank(memberCode)) {
MemberDTO memberDTO = this.findByCode(memberCode);
return memberDTO;
Member member = this.memberRepository.findFirstByCode(memberCode).orElseGet(Member::new);
return this.memberMapper.toDto(member);
} else if (Objects.nonNull(id)) {
MemberDTO memberDTO = this.findById(id);
return memberDTO;
Member member = this.memberRepository.findById(id).orElseGet(Member::new);
return this.memberMapper.toDto(member);
}
return null;
......@@ -106,53 +85,122 @@ public class MemberServiceImpl implements MemberService {
@Override
public MemberDTO checkMember(Member member) {
String memberCode = member.getCode();
Long memberId = member.getId();
return this.checkMember(memberId,memberCode);
}
@Override
@Transactional(rollbackFor = Exception.class)
public MemberDTO doUpdateMemberExpAndLevel(Member resource) {
Integer count = this.memberRepository.updateExpAndLevel(resource);
if (Objects.nonNull(count) && count > 0) {
Member member = this.memberRepository.findById(resource.getId()).orElseGet(Member::new);
return this.memberMapper.toDto(member);
}
return this.memberMapper.toDto(resource);
}
@Override
@Transactional(rollbackFor = Exception.class)
public MemberDTO doUpdateMemberExpAndLevel(Member resources) {
this.redisUtils.doLock("member::code" + resources.getCode());
try {
MemberDTO memberDTO = this.findById(resources.getId());
if (Objects.nonNull(memberDTO)) {
this.memberRepository.updateExpAndLevel(resources);
public MemberDTO doUpdateMemberCoupon(Member resource) {
log.info("修改会员优惠券 =>> {}", resource);
try {
this.redisUtils.doLock(RedisKeyConstants.updateCacheMemberById + resource.getId());
Integer count = this.memberRepository.doUpdateMemberCoupon(resource);
if (Objects.nonNull(count) && count > 0) {
Member member = this.memberRepository.findById(resource.getId()).orElseGet(Member::new);
return this.memberMapper.toDto(member);
}
return memberDTO;
} catch (Exception e) {
e.printStackTrace();
throw e;
log.info("修改会员优惠券,"+e.getMessage());
} finally {
this.redisUtils.doUnLock("member::code" + resources.getCode());
this.redisUtils.doUnLock(RedisKeyConstants.updateCacheMemberById + resource.getId());
}
return this.memberMapper.toDto(resource);
}
@Override
public MemberDTO findByPlatformAccount(String platformAccount) {
log.info("从数据库中检索大屏账号对应的会员, platformAccount ==>> {}", platformAccount);
Member member = this.memberRepository.findByPlatformAccount(platformAccount).orElseGet(Member::new);
return this.memberMapper.toDto(member);
}
@Override
@Transactional(rollbackFor = Exception.class)
public MemberDTO doUpdateMemberCoupon(Member member) {
// MemberDTO memberDTO = this.update(member);
this.redisUtils.doLock("member::code" + member.getCode());
public MemberDTO doUpdateMemberVipAndVipExpireTime(Member resource) {
log.info("修改会员vip和vip过期时间 ==>> {}", resource);
try {
MemberDTO memberDTO = this.findById(member.getId());
if (Objects.nonNull(memberDTO)) {
this.memberRepository.doUpdateMemberCoupon(member);
this.redisUtils.doLock(RedisKeyConstants.updateCacheMemberById + resource.getId());
Integer count = this.memberRepository.updateMemberVipAndVipExpireTime(resource);
if (Objects.nonNull(count) && count > 0) {
Member member = this.memberRepository.findById(resource.getId()).orElseGet(Member::new);
return this.memberMapper.toDto(member);
}
return memberDTO;
} catch (Exception e) {
e.printStackTrace();
throw e;
log.info("修改会员vip和vip过期时间,"+e.getMessage());
} finally {
this.redisUtils.doUnLock("member::code" + member.getCode());
this.redisUtils.doUnLock(RedisKeyConstants.updateCacheMemberById + resource.getId());
}
return this.memberMapper.toDto(resource);
}
@Override
@Transactional(rollbackFor = Exception.class)
public MemberDTO doUpdateMemberUserIptvIdAndBindIptvPlatformAndBindIptvTime(Member resource) {
log.info("修改会员绑定大屏信息 ==>> {}", resource);
try {
this.redisUtils.doLock(RedisKeyConstants.updateCacheMemberById + resource.getId());
Integer count = this.memberRepository.updateMemberUserIptvIdAndBindIptvPlatformAndBindIptvTime(resource);
if (Objects.nonNull(count) && count > 0) {
Member member = this.memberRepository.findById(resource.getId()).orElseGet(Member::new);
return this.memberMapper.toDto(member);
}
} catch (Exception e) {
log.info("修改会员绑定大屏信息,"+e.getMessage());
} finally {
this.redisUtils.doUnLock(RedisKeyConstants.updateCacheMemberById + resource.getId());
}
return this.memberMapper.toDto(resource);
}
@Override
@Transactional(rollbackFor = Exception.class)
public MemberDTO doUpdateMemberAvatarUrlAndNicknameAndGender(Member resource) {
log.info("修改会员头像、昵称、性别 ==>> {}", resource);
try {
this.redisUtils.doLock(RedisKeyConstants.updateCacheMemberById + resource.getId());
Integer count = this.memberRepository.updateMemberAvatarUrlAndNicknameAndGender(resource);
if (Objects.nonNull(count) && count > 0) {
Member member = this.memberRepository.findById(resource.getId()).orElseGet(Member::new);
return this.memberMapper.toDto(member);
}
} catch (Exception e) {
log.info("修改会员头像、昵称、性别异常,"+e.getMessage());
} finally {
this.redisUtils.doUnLock(RedisKeyConstants.updateCacheMemberById + resource.getId());
}
return this.memberMapper.toDto(resource);
}
@Override
@Transactional(rollbackFor = Exception.class)
public MemberDTO create(Member resources) {
Member member = MemberBuilder.build(resources);
......@@ -170,38 +218,25 @@ public class MemberServiceImpl implements MemberService {
@Override
@Transactional(rollbackFor = Exception.class)
public MemberDTO createAndReturnMember(Member resources) {
MemberDTO memberDTO = this.create(MemberBuilder.build(resources));
return memberDTO;
}
@Override
@Transactional(rollbackFor = Exception.class)
public MemberDTO update(Member resources) {
log.info("MemberServiceImpl ==>> update ==>> resources ==>> [{}]" , resources);
this.redisUtils.doLock("member::code" + resources.getCode());
log.info("修改会员信息 ==>> {}", resources);
try {
MemberDTO memberDTO = this.checkMember(resources);
this.redisUtils.doLock(RedisKeyConstants.updateCacheMemberById + resources.getId());
MemberDTO memberDTO = this.checkMember(resources);
Member member = new Member();
BeanUtils.copyProperties(memberDTO,member);
member.copy(resources);
Member _member = this.save(member);
return this.memberMapper.toDto(_member);
} catch (Exception e) {
e.printStackTrace();
throw e;
log.info(e.getMessage());
} finally {
this.redisUtils.doUnLock("member::code" + resources.getCode());
this.redisUtils.doUnLock(RedisKeyConstants.updateCacheMemberById + resources.getId());
}
return this.memberMapper.toDto(resources);
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
......@@ -212,26 +247,14 @@ public class MemberServiceImpl implements MemberService {
@Override
@Transactional(rollbackFor = Exception.class)
public MemberDTO doUpdateMemberPoints(Member resources) {
try {
this.redisUtils.doLock("member::code" + resources.getCode());
/*ValidationUtil.isNull(member.getId(), "Member", "id", resources.getId());
member.copy(resources);
Member _member = this.save(member);*/
MemberDTO memberDTO = this.findById(resources.getId());
if (Objects.nonNull(memberDTO)) {
this.memberRepository.updatePointAndDuePoint(resources);
}
return memberDTO;
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
this.redisUtils.doUnLock("member::code" + resources.getCode());
Integer count = this.memberRepository.updatePointAndDuePoint(resources);
if (Objects.nonNull(count) && count > 0) {
Member member = this.memberRepository.findById(resources.getId()).orElseGet(Member::new);
return this.memberMapper.toDto(member);
}
return this.memberMapper.toDto(resources);
}
}
......
package com.topdraw.business.process.domian.constant;
package com.topdraw.business.module.rights.constant;
public enum RightType {
/**积分*/
......
package com.topdraw.business.module.rights.constant;
public class RightsType {
public static String TYPE_1 = "1";
Integer TYPE_2 = 2;
Integer TYPE_3 = 3;
}
......@@ -47,7 +47,7 @@ public class Rights implements Serializable {
/** 权益的实体类型 1:积分;2成长值;3优惠券 */
@Column(name = "entity_type", nullable = false)
private String entityType;
private Integer entityType;
/** 实体id */
@Column(name = "entity_id", nullable = false)
......
......@@ -28,7 +28,7 @@ public class RightsDTO implements Serializable {
private Integer type;
/** 权益的实体类型 1:积分;2成长值;3优惠券 */
private String entityType;
private Integer entityType;
/** 实体id */
private Long entityId;
......
......@@ -16,5 +16,5 @@ public interface TrTaskProgressRepository extends JpaRepository<TrTaskProgress,
@Query(value = "select id, member_id, task_id , current_action_amount , \n" +
" target_action_amount , `status` , completion_time,create_time,update_time from uc_tr_task_progress where member_id = ?1 \n" +
" and task_id = ?2 and Date(completion_time) = ?3 ",nativeQuery = true)
List<TrTaskProgress> findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1);
TrTaskProgress findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1);
}
......
......@@ -2,6 +2,8 @@ package com.topdraw.business.module.task.progress.service;
import com.topdraw.business.module.task.progress.domain.TrTaskProgress;
import com.topdraw.business.module.task.progress.service.dto.TrTaskProgressDTO;
import java.time.LocalDateTime;
import java.util.List;
/**
......@@ -21,13 +23,13 @@ public interface TrTaskProgressService {
*
* @param resources
*/
void create(TrTaskProgress resources);
TrTaskProgress create(TrTaskProgress resources, String date);
/**
*
* @param resources
*/
void update(TrTaskProgress resources);
TrTaskProgress update(TrTaskProgress resources, String date);
/**
*
......@@ -42,5 +44,6 @@ public interface TrTaskProgressService {
* @param time1
* @return
*/
List<TrTaskProgressDTO> findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1);
TrTaskProgressDTO findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1);
}
......
package com.topdraw.business.module.task.progress.service.impl;
import com.topdraw.business.module.task.progress.domain.TrTaskProgress;
import com.topdraw.config.RedisKeyConstants;
import com.topdraw.utils.ValidationUtil;
import com.topdraw.business.module.task.progress.repository.TrTaskProgressRepository;
import com.topdraw.business.module.task.progress.service.TrTaskProgressService;
import com.topdraw.business.module.task.progress.service.dto.TrTaskProgressDTO;
import com.topdraw.business.module.task.progress.service.mapper.TrTaskProgressMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.util.Assert;
import java.time.LocalDateTime;
import java.util.List;
/**
......@@ -21,6 +26,7 @@ import java.util.List;
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
@Slf4j
public class TrTaskProgressServiceImpl implements TrTaskProgressService {
@Autowired
......@@ -38,17 +44,21 @@ public class TrTaskProgressServiceImpl implements TrTaskProgressService {
@Override
@Transactional(rollbackFor = Exception.class)
public void create(TrTaskProgress resources) {
this.trTaskProgressRepository.save(resources);
@Cacheable(cacheNames = RedisKeyConstants.cacheTaskProcessByMemberId, key = "#resources.memberId+':'+#resources.taskId+':'+#date", unless = "#result == null ")
public TrTaskProgress create(TrTaskProgress resources, String date) {
TrTaskProgress trTaskProgress = this.trTaskProgressRepository.save(resources);
return trTaskProgress;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(TrTaskProgress resources) {
TrTaskProgress TrTaskProgress = this.trTaskProgressRepository.findById(resources.getId()).orElseGet(TrTaskProgress::new);
ValidationUtil.isNull( TrTaskProgress.getId(),"TrTaskProgress","id",resources.getId());
TrTaskProgress.copy(resources);
this.trTaskProgressRepository.save(TrTaskProgress);
@Cacheable(cacheNames = RedisKeyConstants.cacheTaskProcessByMemberId, key = "#resources.memberId+':'+#resources.taskId+':'+#date", unless = "#result == null ")
public TrTaskProgress update(TrTaskProgress resources, String date) {
TrTaskProgress trTaskProgress = this.trTaskProgressRepository.findById(resources.getId()).orElseGet(TrTaskProgress::new);
ValidationUtil.isNull( trTaskProgress.getId(),"TrTaskProgress","id",resources.getId());
trTaskProgress.copy(resources);
TrTaskProgress save = this.trTaskProgressRepository.save(trTaskProgress);
return save;
}
@Override
......@@ -61,9 +71,12 @@ public class TrTaskProgressServiceImpl implements TrTaskProgressService {
}
@Override
public List<TrTaskProgressDTO> findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1) {
@Cacheable(cacheNames = RedisKeyConstants.cacheTaskProcessByMemberId, key = "#memberId+':'+#taskId+':'+#time1", unless = "#result == null")
public TrTaskProgressDTO findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1) {
log.info("从数据库查询当前会员今天是否完成了此任务, memberId ==>> {} || taskId ==>> {}", memberId, taskId);
return this.trTaskProgressMapper.toDto(this.trTaskProgressRepository.findByMemberIdAndTaskIdAndCompletionTime(memberId,taskId,time1));
}
}
......
......@@ -21,7 +21,13 @@ public interface TaskRepository extends JpaRepository<Task, Long>, JpaSpecificat
@Modifying
@Transactional
@Query(value = "UPDATE `tr_task` SET `delete_mark` = 1 , `update_time` = now() WHERE `id` = ?1", nativeQuery = true)
void updateDeleteMark(Long id);
Integer updateDeleteMark(Long id);
Optional<Task> findByCode(String code);
@Query(value = "SELECT ta.*, attr.attr_str AS attr FROM tr_task ta LEFT JOIN tr_task_template tm ON ta.task_template_id = tm.id " +
" LEFT JOIN tr_task_attr attr ON attr.task_id = ta.id " +
" WHERE ta.`status` = 1 AND ta.valid_time <= now() and ta.expire_time >= now() AND ta.delete_mark = 0 AND " +
" tm.type = ?1 ", nativeQuery = true)
List<Task> findByEvent(Integer event);
}
......
package com.topdraw.business.module.task.service;
import com.topdraw.business.module.task.domain.Task;
import com.topdraw.business.module.task.progress.service.dto.TrTaskProgressDTO;
import com.topdraw.business.module.task.service.dto.TaskDTO;
import java.time.LocalDateTime;
import java.util.List;
/**
......@@ -47,11 +50,19 @@ public interface TaskService {
*
* @param task
*/
void delete(Task task);
Integer delete(Task task);
/**
*
* @param id
*/
void delete(Long id);
Integer delete(Long id);
/**
*
* @param event
* @return
*/
List<Task> findByEvent(Integer event);
}
......
......@@ -5,11 +5,15 @@ import com.topdraw.business.module.task.repository.TaskRepository;
import com.topdraw.business.module.task.service.TaskService;
import com.topdraw.business.module.task.service.dto.TaskDTO;
import com.topdraw.business.module.task.service.mapper.TaskMapper;
import com.topdraw.config.RedisKeyConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
......@@ -19,6 +23,7 @@ import java.util.Objects;
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
@Slf4j
public class TaskServiceImpl implements TaskService {
@Autowired
......@@ -56,14 +61,20 @@ public class TaskServiceImpl implements TaskService {
}
@Override
public void delete(Task task) {
public Integer delete(Task task) {
Long id = task.getId();
this.delete(id);
return this.delete(id);
}
@Override
public void delete(Long id) {
this.taskRepository.updateDeleteMark(id);
public Integer delete(Long id) {
return this.taskRepository.updateDeleteMark(id);
}
@Override
// @Cacheable(value = RedisKeyConstants.cacheTaskByTaskTemplateId, key = "#event" , unless = "#result.size() == 0")
public List<Task> findByEvent(Integer event) {
log.info("从数据库查询事件列表 ==>> {}", event);
return Objects.nonNull(event) ? this.taskRepository.findByEvent(event) : new ArrayList<>();
}
}
......
......@@ -26,4 +26,6 @@ public interface TaskTemplateRepository extends JpaRepository<TaskTemplate, Long
@Transactional
@Query(value = "UPDATE `tr_task_template` SET `delete_mark` = 1 , `update_time` = now() WHERE `id` = ?1", nativeQuery = true)
void updateDeleteMark(Long id);
Long countByCodeAndType(String code, Integer type);
}
......
......@@ -61,4 +61,11 @@ public interface TaskTemplateService {
* @return
*/
TaskTemplateDTO findByType(Integer event);
/**
*
* @param taskTemplate
* @return
*/
Long countByCodeAndType(TaskTemplate taskTemplate);
}
......
......@@ -83,4 +83,10 @@ public class TaskTemplateServiceImpl implements TaskTemplateService {
return Objects.nonNull(event) ? this.taskTemplateMapper.toDto(this.taskTemplateRepository.findByType(event).orElseGet(TaskTemplate::new)) : new TaskTemplateDTO();
}
@Override
public Long countByCodeAndType(TaskTemplate taskTemplate) {
Long count = this.taskTemplateRepository.countByCodeAndType(taskTemplate.getCode(), taskTemplate.getType());
return count;
}
}
......
......@@ -5,6 +5,8 @@ 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.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.Optional;
......@@ -24,4 +26,9 @@ public interface UserTvRepository extends JpaRepository<UserTv, Long>, JpaSpecif
@Modifying
@Query(value = "UPDATE `uc_user_tv` SET `vis_user_id` = ?2, `update_time` = ?3 WHERE `id` = ?1", nativeQuery = true)
Integer updateUserTvVisUserId(Long id, Long visUserId, LocalDateTime now);
@Modifying
@Query(value = "UPDATE `uc_user_tv` SET `priority_member_code` = :#{#resources.priorityMemberCode}, `update_time` = now()" +
" WHERE `id` = :#{#resources.id}", nativeQuery = true)
Integer updatePriorityMemberCode(@Param("resources") UserTv resources);
}
......
......@@ -69,7 +69,7 @@ public interface UserTvService {
* @param memberCode
* @return
*/
boolean checkPriorityMemberByMemberIdOrMemberCode(Long memberId,String memberCode);
boolean checkPriorityMemberByMemberIdOrMemberCode(Long memberId, String memberCode);
/**
*
......@@ -84,4 +84,11 @@ public interface UserTvService {
* @return
*/
UserTvDTO updateUserTvVisUserId(UserTv resources);
/**
*
* @param resources
* @return
*/
UserTvDTO doUpdatePriorityMemberCode(UserTv resources);
}
......
......@@ -5,6 +5,7 @@ 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.impl.UserOperationServiceImpl;
import com.topdraw.config.RedisKeyConstants;
import com.topdraw.exception.EntityNotFoundException;
import com.topdraw.exception.GlobeExceptionMsg;
import com.topdraw.utils.ValidationUtil;
......@@ -16,6 +17,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
......@@ -96,6 +98,16 @@ public class UserTvServiceImpl implements UserTvService {
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)
public UserTvDTO doUpdatePriorityMemberCode(UserTv resources) {
Integer count = this.userTvRepository.updatePriorityMemberCode(resources);
if (Objects.nonNull(count) && count > 0) {
UserTv userTv = this.userTvRepository.findById(resources.getId()).orElseGet(UserTv::new);
return this.userTvMapper.toDto(userTv);
}
return this.userTvMapper.toDto(resources);
}
private MemberDTO findMemberByMemberCode(String memberCode) {
......@@ -157,7 +169,9 @@ public class UserTvServiceImpl implements UserTvService {
}
@Override
@Cacheable(cacheNames = RedisKeyConstants.cacheUserTvByPlatformAccount, key = "#platformAccount")
public UserTvDTO findByPlatformAccount(String platformAccount) {
log.info("从数据库通过大屏账号检索大屏账号信息");
Optional<UserTv> userTv = this.userTvRepository.findByPlatformAccount(platformAccount);
if (userTv.isPresent()) {
ValidationUtil.isNull( userTv.get().getId(),"UserTv","id",userTv.get().getId());
......
......@@ -29,9 +29,7 @@ public interface UserWeixinRepository extends JpaRepository<UserWeixin, Long>, J
Optional<UserWeixin> findFirstByMemberId(Long memberId);
@Modifying
@Transactional
@Query(value = "update `uc_user_weixin` set update_time = :#{#resources.updateTime} " +
"where appid = :#{#resources.appid} and openid = :#{#resources.openid}", nativeQuery = true)
void updateTime(@Param("resources") UserWeixin resources);
@Query(value = "UPDATE `uc_user_weixin` SET update_time = now(), `status` = :#{#resources.status}" +
" WHERE `id` = :#{#resources.id}", nativeQuery = true)
Integer updateWeixinStatus(@Param("resources") UserWeixin resource);
}
......
......@@ -31,12 +31,6 @@ public interface UserWeixinService {
/**
*
* @param resources
*/
void updateTime(UserWeixin resources);
/**
*
* @param id
*/
void delete(Long id);
......@@ -87,4 +81,11 @@ public interface UserWeixinService {
* @return
*/
UserWeixinDTO findFirstByMemberId(Long memberId);
/**
*
* @param userWeixin
* @return
*/
UserWeixinDTO doUpdateWeixinStatus(UserWeixin userWeixin);
}
......
......@@ -14,6 +14,8 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.util.Assert;
import java.util.Objects;
/**
* @author XiangHan
* @date 2021-12-16
......@@ -54,11 +56,6 @@ public class UserWeixinServiceImpl implements UserWeixinService {
}
@Override
public void updateTime(UserWeixin resources) {
this.userWeixinRepository.updateTime(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
Assert.notNull(id, "The given id must not be null!");
......@@ -104,4 +101,15 @@ public class UserWeixinServiceImpl implements UserWeixinService {
return this.userWeixinMapper.toDto(userWeixin);
}
@Override
@Transactional(rollbackFor = Exception.class)
public UserWeixinDTO doUpdateWeixinStatus(UserWeixin resource) {
Integer count = this.userWeixinRepository.updateWeixinStatus(resource);
if (Objects.nonNull(count) && count > 0) {
UserWeixin userWeixin = this.userWeixinRepository.findById(resource.getId()).orElseGet(UserWeixin::new);
return this.userWeixinMapper.toDto(userWeixin);
}
return this.userWeixinMapper.toDto(resource);
}
}
......
......@@ -5,6 +5,7 @@ import com.topdraw.business.process.service.ExpOperationService;
import com.topdraw.common.ResultInfo;
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.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
/**
* @author XiangHan
......@@ -22,14 +24,27 @@ import java.util.List;
@Api(tags = "成长值管理")
@RestController
@RequestMapping("/uce/expOperation")
@Slf4j
public class ExpOperationController {
@Autowired
private ExpOperationService expOperationService;
@PostMapping(value = "/grantExpByManual")
@PostMapping(value = "/addExp")
@ApiOperation("手动发放成长值")
public ResultInfo grantExpByManual(@Validated @RequestBody TempExp tempExp) {
log.info("手动发放成长值,参数 ==>> {}", tempExp);
Long memberId = tempExp.getMemberId();
if (Objects.isNull(memberId)) {
log.error("发放成长值失败,参数错误,无会员id");
return ResultInfo.failure("发放成长值失败,参数错误,无会员id");
}
Long rewardExp = tempExp.getRewardExp();
if (Objects.isNull(rewardExp) || rewardExp <= 0L) {
log.error("发放成长值失败,参数错误,成长值为空或者小于0 ==>> {}", rewardExp);
return ResultInfo.failure("发放成长值失败,参数错误,成长值为空或者小于0");
}
List<TempExp> tempExpList = Arrays.asList(tempExp);
this.expOperationService.grantExpByManual(tempExpList);
return ResultInfo.success();
......
......@@ -14,6 +14,7 @@ import com.topdraw.exception.BadRequestException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
......@@ -50,7 +51,7 @@ public class MemberOperationController {
if (Objects.nonNull(vipExpireTime)) {
member.setVipExpireTime(vipExpireTime);
}
this.memberOperationService.update(member);
this.memberOperationService.doUpdateMemberVipAndVipExpireTime(member);
return ResultInfo.success();
}
......@@ -59,23 +60,28 @@ public class MemberOperationController {
@AnonymousAccess
public ResultInfo updateVipByMemberCode(@Validated(value = {UpdateGroup.class}) @RequestBody MemberOperationBean resources) {
log.info("member ==>> doUpdateVipByCode ==>> param ==>> [{}]",resources);
String memberCode = resources.getMemberCode();
if (StringUtils.isBlank(memberCode)) {
log.error("参数错误,memberCode 不存在");
return ResultInfo.failure("参数错误,memberCode 不存在");
}
Integer vip = resources.getVip();
if (Objects.isNull(vip) || vip < 0) {
log.error("参数错误,vip为空或者小于0 , vip ==>> {}", vip);
return ResultInfo.failure("参数错误,vip为空或者小于0");
}
Timestamp vipExpireTime = resources.getVipExpireTime();
String memberCode = resources.getMemberCode();
MemberDTO memberDTO = this.memberOperationService.findByCode(memberCode);
Member member = new Member();
BeanUtils.copyProperties(memberDTO, member);
if (Objects.nonNull(vip)) {
member.setVip(vip);
}
if (Objects.nonNull(vipExpireTime)) {
member.setVipExpireTime(vipExpireTime);
}
member.setCode(memberCode);
member.setVip(vip);
member.setVipExpireTime(vipExpireTime);
MemberDTO memberDTO = this.memberOperationService.doUpdateMemberVipAndVipExpireTime(member);
this.createVipHistory(memberDTO.getId(), memberDTO.getCode(), vip, vipExpireTime);
this.memberOperationService.updateMemberVip(member);
return ResultInfo.success();
}
......@@ -93,6 +99,7 @@ public class MemberOperationController {
@GetMapping("/getMemberProfileAndCheckVip/{appId}/{memberId}")
@ApiOperation("获取会员基本信息并且检查vip状态")
@AnonymousAccess
@Deprecated
public IResultInfo getMemberProfileAndCheckVip(@PathVariable(value = "appId") String appId, @PathVariable(value = "memberId") Long memberId) {
MemberProfileDTO memberProfileDTO = this.memberOperationService.getMemberProfileAndCheckVip(memberId, appId);
return ResultInfo.success(memberProfileDTO);
......
......@@ -49,6 +49,7 @@ public class PointsOperationController {
@GetMapping(value = "/cleanInvalidPointsAndCalculateCurrentPoints/{id}")
@ApiOperation("清除过期积分并计算总积分,供客户端会员查询积分时调用")
@AnonymousAccess
@Deprecated
public ResultInfo cleanInvalidPointsAndCalculateCurrentPoints(@PathVariable("id") Long id) {
Long aLong = this.pointsOperationService.cleanInvalidPointsAndCalculateCurrentPoints(id);
return ResultInfo.success(Objects.isNull(aLong) ? 0L : aLong);
......@@ -59,15 +60,22 @@ public class PointsOperationController {
@ApiOperation("手动发放积分")
@AnonymousAccess
public ResultInfo addPoints(@Validated @RequestBody TempPoints tempPoints) {
log.info("手动发放积分,参数 ==>>{} ", tempPoints);
Long memberId = tempPoints.getMemberId();
if (Objects.isNull(memberId)) {
log.error("积分发放失败,参数错误,会员id 不存在");
return ResultInfo.failure("积分发放失败,参数错误");
}
Long points = tempPoints.getPoints();
Assert.notNull(memberId,"memberId can't be null!");
Assert.notNull(points,"points can't be null!");
if (Objects.isNull(points) || points <= 0L) {
log.error("积分发放失败,参数错误,积分不存在或者积分小于0");
return ResultInfo.failure("积分发放失败,参数错误");
}
MemberDTO memberDTO = this.memberService.findById(memberId);
if (Objects.nonNull(memberDTO)) {
String code = memberDTO.getCode();
Assert.notNull(code,"code can't be null!");
tempPoints.setMemberCode(code);
tempPoints.setMemberId(memberDTO.getId());
this.pointsOperationService.grantPointsByManualByTempPoints(tempPoints);
}
return ResultInfo.success();
......@@ -176,7 +184,6 @@ public class PointsOperationController {
return ResultInfo.success(Arrays.asList(b),description);
}
// @Log("积分兑换商品")
@PostMapping(value = "/consumeItemPoints")
@ApiOperation("积分兑换商品")
@AnonymousAccess
......
......@@ -42,11 +42,11 @@ public class TaskOperationController {
long l = System.currentTimeMillis();
// 任务处理
this.taskOperationService.dealTask(criteria.getContent());
ResultInfo resultInfo = this.taskOperationService.dealTask(criteria.getContent());
long l2 = System.currentTimeMillis();
log.info("事件处理,结束,总耗时 ==>> {}", (l2-l));
return ResultInfo.success();
return resultInfo;
}
/**
......@@ -99,12 +99,17 @@ public class TaskOperationController {
@PostMapping(value = "/deleteTask")
@ApiOperation("删除任务")
@AnonymousAccess
public void deleteTask(@RequestBody @Validated Task task) {
public ResultInfo deleteTask(@RequestBody @Validated Task task) {
log.info("taskOperation ==>> deleteTask ==>> param ==>> {}", task);
Long id = task.getId();
// 删除任务
this.taskOperationService.deleteTask(id);
Integer integer = this.taskOperationService.deleteTask(id);
if (integer > 1) {
return ResultInfo.success("删除成功");
} else {
return ResultInfo.failure("删除失败");
}
}
/**
......
......@@ -34,9 +34,8 @@ public class TaskTemplateOperationController {
log.info("taskTemplateOperation ==>> create ==>> param ==>> {}", taskTemplate);
String code = taskTemplate.getCode();
Integer type = taskTemplate.getType();
TaskTemplateDTO taskTemplateDTO_ = this.taskTemplateOperationService.findByCode(code);
TaskTemplateDTO taskTemplateDTO_1 = this.taskTemplateOperationService.findByType(type);
if (Objects.isNull(taskTemplateDTO_.getId()) && Objects.isNull(taskTemplateDTO_1.getId())) {
Long count = this.taskTemplateOperationService.countByCodeAndType(taskTemplate);
if (count < 1) {
// 新增任务
this.taskTemplateOperationService.create(taskTemplate);
}
......
......@@ -38,6 +38,7 @@ import org.springframework.util.Assert;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
import java.io.IOException;
import java.net.URLDecoder;
import java.sql.Timestamp;
......@@ -89,7 +90,8 @@ public class UserOperationController {
MemberDTO memberDTO = this.memberService.findById(memberId);
Member member = new Member();
BeanUtils.copyProperties(memberDTO, member);
member.setId(memberDTO.getId());
member.setCode(memberDTO.getCode());
if (Objects.nonNull(vip)) {
member.setVip(vip);
}
......@@ -97,9 +99,9 @@ public class UserOperationController {
member.setVipExpireTime(vipExpireTime);
}
this.createVipHistory(userId, vip, vipExpireTime);
this.memberOperationService.doUpdateMemberVipAndVipExpireTime(member);
this.memberOperationService.updateMemberVip(member);
this.createVipHistory(userId, vip, vipExpireTime);
return ResultInfo.success();
}
......@@ -152,8 +154,12 @@ public class UserOperationController {
SubscribeBean subscribeBean = JSONUtil.parseMsg2Object(data.getContent(), SubscribeBean.class);
// 解析参数
this.parseSubscribe(subscribeBean);
this.userOperationService.subscribe(subscribeBean);
return ResultInfo.success();
boolean subscribe = this.userOperationService.subscribe(subscribeBean);
if (subscribe) {
return ResultInfo.success("关注成功");
} else {
return ResultInfo.failure("关注失败");
}
}
/**
......@@ -266,6 +272,16 @@ public class UserOperationController {
public ResultInfo minaBind(@Validated(value = {BindGroup.class}) @RequestBody BindBean resources) {
log.info("UserOperationController ==> appletBind ==>> param ==> [{}]",resources);
Long memberId = resources.getMemberId();
if (Objects.isNull(memberId)) {
return ResultInfo.failure("参数错误,memberId 不存在");
}
String platformAccount = resources.getPlatformAccount();
if (StringUtils.isBlank(platformAccount)) {
return ResultInfo.failure("参数错误,大屏账号不存在");
}
boolean result = this.userOperationService.minaBind(resources);
return ResultInfo.success(result);
}
......@@ -276,8 +292,17 @@ public class UserOperationController {
public ResultInfo minaUnbind(@Validated(value = {UnbindGroup.class}) @RequestBody WeixinUnBindBean weixinUnBindBean) {
log.info("UserOperationController ==> minaUnbind ==>> param ==> [{}]", weixinUnBindBean);
this.userOperationService.minaUnbind(weixinUnBindBean);
return ResultInfo.success();
Long memberId = weixinUnBindBean.getMemberId();
if (Objects.isNull(memberId)) {
log.error("小屏解绑失败,参数错误,memberId不存在");
return ResultInfo.failure("参数错误,会员id不存在");
}
boolean b = this.userOperationService.minaUnbind(weixinUnBindBean);
if (b) {
return ResultInfo.success("解绑成功");
} else {
return ResultInfo.failure("解绑失败");
}
}
/**
......@@ -293,12 +318,18 @@ public class UserOperationController {
public ResultInfo memberPreprocess(@RequestBody String data) {
log.info("UserOperationController ==> saveUserInfo ==>> param ==>> [{}]",data);
Assert.notNull(data, "用户数据不可为空");
if (StringUtils.isBlank(data)) {
log.error("预存大小屏账号信息失败,无参数");
return ResultInfo.failure("参数错误");
}
JSONObject json = JSONObject.parseObject(data);
String unionid = json.getString("unionid");
Assert.state(StrUtil.isNotBlank(unionid), "unionid不可为空");
if (StringUtils.isBlank(unionid)) {
log.error("预存大小屏账号信息失败,参数错误,unionid不存在");
return ResultInfo.failure("参数错误,unionid不存在");
}
List<Object> resultList = new ArrayList<>();
......@@ -471,8 +502,10 @@ public class UserOperationController {
throw new BadRequestException(GlobeExceptionMsg.IPTV_PLATFORM_ACCOUNT_IS_NULL);
}
this.userOperationService.tvUnbind(resources);
return ResultInfo.success();
boolean b = this.userOperationService.tvUnbind(resources);
if (b) {
return ResultInfo.success("解绑成功");
} else return ResultInfo.failure("解绑失败");
}
@RequestMapping(value = "/changeMainAccount")
......@@ -493,9 +526,9 @@ public class UserOperationController {
UserTv userTv = new UserTv();
userTv.setMemberCode(memberCode);
userTv.setPlatformAccount(platformAccount);
this.userOperationService.changeMainAccount(userTv);
boolean b = this.userOperationService.changeMainAccount(userTv);
return ResultInfo.success();
return ResultInfo.success(b);
}
@PostMapping(value = "/deleteAllCollection")
......
......@@ -13,13 +13,6 @@ import java.util.List;
public interface PointsOperationService {
/**
* 手动发放积分
* @param memberId 会员id
* @param tempPoints 积分详情
*/
void grantPointsByManual(Long memberId , TempPoints tempPoints);
/**
*
* @param tempPoints
*/
......@@ -44,5 +37,6 @@ public interface PointsOperationService {
* @param memberId
* @return
*/
@Deprecated
Long cleanInvalidPointsAndCalculateCurrentPoints(Long memberId);
}
......
package com.topdraw.business.process.service;
import com.topdraw.business.module.rights.history.domain.RightsHistory;
import com.topdraw.business.process.domian.constant.RightType;
import com.topdraw.business.module.rights.constant.RightType;
import java.util.List;
import java.util.Map;
......
......@@ -11,8 +11,18 @@ import com.topdraw.common.ResultInfo;
*/
public interface TaskOperationService {
/**
*
* @param id
* @return
*/
TaskDTO findById(Long id);
/**
*
* @param code
* @return
*/
TaskDTO findByCode(String code);
/**
......@@ -26,25 +36,25 @@ public interface TaskOperationService {
*
* @param task
*/
void createTask(Task task);
TaskDTO createTask(Task task);
/**
*
* @param task
*/
void updateTask(Task task);
TaskDTO updateTask(Task task);
/**
*
* @param task
*/
void deleteTask(Task task);
Integer deleteTask(Task task);
/**
*
* @param id
*/
void deleteTask(Long id);
Integer deleteTask(Long id);
/**
*
......@@ -54,6 +64,4 @@ public interface TaskOperationService {
*/
boolean createPoint2ChongQing(String platformAccount, Long points);
}
......
......@@ -43,6 +43,13 @@ public interface TaskTemplateOperationService {
/**
*
* @param taskTemplate
* @return
*/
Long countByCodeAndType(TaskTemplate taskTemplate);
/**
*
* @param id
* @return
*/
......
......@@ -52,13 +52,13 @@ public interface UserOperationService {
* 大屏解绑
* @param userTv
*/
void tvUnbind(TvUnBindBean userTv);
boolean tvUnbind(TvUnBindBean userTv);
/**
* 大屏切换主账户(会员)
* @param userTv
*/
void changeMainAccount(UserTv userTv);
boolean changeMainAccount(UserTv userTv);
/**
* 微信公众号关注
......@@ -114,20 +114,6 @@ public interface UserOperationService {
/**
*
* @param memberCode
* @param platformAccount
*/
void bind(String memberCode, String platformAccount);
/**
*
* @param memberDTO
* @param userTvDTO
*/
void bind(MemberDTO memberDTO, UserTvDTO userTvDTO);
/**
*
* @param memberDTO
* @param platformAccount
* @return
......@@ -152,7 +138,7 @@ public interface UserOperationService {
* 小屏解绑
* @param weixinUnBindBean
*/
void minaUnbind(WeixinUnBindBean weixinUnBindBean);
boolean minaUnbind(WeixinUnBindBean weixinUnBindBean);
/**
*
......
......@@ -12,6 +12,7 @@ import com.topdraw.business.process.service.CouponOperationService;
import com.topdraw.business.process.service.member.MemberOperationService;
import com.topdraw.business.process.domian.TempCoupon;
import com.topdraw.business.process.service.RightsOperationService;
import com.topdraw.config.RedisKeyConstants;
import com.topdraw.util.TimestampUtil;
import com.topdraw.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j;
......@@ -73,7 +74,6 @@ public class CouponOperationServiceImpl implements CouponOperationService {
}
}
/**
* 优惠券领取历史记录表
*
......@@ -92,11 +92,10 @@ public class CouponOperationServiceImpl implements CouponOperationService {
* @param tempCoupon 账号id
*/
private void refreshMemberCoupon(TempCoupon tempCoupon) {
// Long userId = tempCoupon.getUserId();
Long memberId = tempCoupon.getMemberId();
Integer rightsAmount = tempCoupon.getRightsAmount();
try {
this.redisUtils.doLock(RedisKeyConstants.updateCacheCouponByMemberId + memberId.toString());
// 1.历史总优惠券数量
Long historyCouponCount = this.getTotalHistoryCoupon(memberId);
// 1.当前总优惠券数量
......@@ -107,15 +106,12 @@ public class CouponOperationServiceImpl implements CouponOperationService {
Long expireSoonCouponCount = this.getTotalExpireSoonCoupon(memberId, EXPIRE_FACTOR_DAY);
// 4.当前优惠券数量 = 总优惠券-已过期的优惠券
Long currentCoupon = this.getCurrentCoupon(totalCouponCount, expireCouponCount);
this.redisUtils.doLock("right::member::id::" + memberId.toString());
// 5.更新用户信息(优惠券数量、即将过期的优惠券数量)
this.doUpdateMemberInfo(memberId,currentCoupon,expireSoonCouponCount);
} catch (Exception e) {
e.printStackTrace();
throw e;
log.error(e.getMessage());
} finally {
this.redisUtils.doUnLock("right::member::id::" + memberId.toString());
this.redisUtils.doUnLock(RedisKeyConstants.updateCacheCouponByMemberId + memberId.toString());
}
}
......@@ -134,7 +130,6 @@ public class CouponOperationServiceImpl implements CouponOperationService {
MemberDTO memberDTO = this.findMemberByMemberId(memberId);
Member member = new Member();
// BeanUtils.copyProperties(memberDTO,member);
member.setId(memberDTO.getId());
member.setCode(memberDTO.getCode());
member.setCouponAmount(currentCoupon);
......
......@@ -11,6 +11,7 @@ import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.business.process.service.ExpOperationService;
import com.topdraw.business.process.service.member.MemberOperationService;
import com.topdraw.business.process.domian.TempExp;
import com.topdraw.config.RedisKeyConstants;
import com.topdraw.util.IdWorker;
import com.topdraw.util.TimestampUtil;
import com.topdraw.utils.RedisUtils;
......@@ -76,6 +77,7 @@ public class ExpOperationServiceImpl implements ExpOperationService {
*/
private void refresh(TempExp tempExp) {
try {
this.redisUtils.doLock(RedisKeyConstants.updateCacheExpByMemberId + tempExp.getMemberId());
// 原始经验值
long originExp = this.getExpByMemberId(tempExp);
......@@ -84,7 +86,6 @@ public class ExpOperationServiceImpl implements ExpOperationService {
long totalExp = this.calculateTotalExp(originExp, tempExp);
log.info("----计算总经验值 ==>> {}", totalExp);
this.redisUtils.doLock("right::member::id::" + tempExp.getMemberId());
// 2.更新成长值与等级
log.info("----更新会员经验值与对应等级 ==>> {}", totalExp);
this.refreshMemberExpAndLevel(tempExp, totalExp);
......@@ -93,10 +94,9 @@ public class ExpOperationServiceImpl implements ExpOperationService {
this.doInsertExpDetail(tempExp, originExp, totalExp);
} catch (Exception e) {
e.printStackTrace();
throw e;
log.error("成长值发放失败,"+e.getMessage());
} finally {
this.redisUtils.doUnLock("right::member::id::" + tempExp.getMemberId());
this.redisUtils.doUnLock(RedisKeyConstants.updateCacheExpByMemberId + tempExp.getMemberId());
}
}
......@@ -148,7 +148,6 @@ public class ExpOperationServiceImpl implements ExpOperationService {
MemberDTO memberDTO = this.findMemberByMemberId(memberId);
Member member = new Member();
// BeanUtils.copyProperties(memberDTO, member);
member.setId(memberDTO.getId());
member.setCode(memberDTO.getCode());
member.setExp(totalExp);
......
......@@ -17,6 +17,8 @@ import com.topdraw.business.process.service.dto.CustomPointsResult;
import com.topdraw.business.process.service.member.MemberOperationService;
import com.topdraw.business.process.service.PointsOperationService;
import com.topdraw.business.process.domian.TempPoints;
import com.topdraw.config.RedisKeyConstants;
import com.topdraw.mq.producer.MessageProducer;
import com.topdraw.util.DateUtil;
import com.topdraw.util.IdWorker;
import com.topdraw.util.TimestampUtil;
......@@ -83,25 +85,12 @@ public class PointsOperationServiceImpl implements PointsOperationService {
public void asyncPointsDetail(PointsDetail pointsDetail) {}
@Override
@Transactional(rollbackFor = Exception.class)
public void grantPointsByManual(Long memberId, TempPoints tempPoints){
if (Objects.nonNull(tempPoints) && Objects.nonNull(tempPoints.getPoints())) {
MemberDTO memberDTo = this.memberService.findById(memberId);
String memberCode = memberDTo.getCode();
tempPoints.setMemberCode(memberCode);
this.refresh(tempPoints);
}
}
@Override
public void grantPointsByManualByTempPoints(TempPoints tempPoints) {
if (Objects.nonNull(tempPoints) && Objects.nonNull(tempPoints.getPoints())) {
Timestamp expireTime = tempPoints.getExpireTime();
if (Objects.isNull(expireTime)){
tempPoints.setExpireTime(TimestampUtil.localDateTime2Timestamp(DateUtil.getLastDateTimeSecondYear()));
}
this.refresh(tempPoints);
Timestamp expireTime = tempPoints.getExpireTime();
if (Objects.isNull(expireTime)){
tempPoints.setExpireTime(TimestampUtil.localDateTime2Timestamp(DateUtil.getLastDateTimeSecondYear()));
}
this.refresh(tempPoints);
}
/**
......@@ -118,7 +107,7 @@ public class PointsOperationServiceImpl implements PointsOperationService {
Long memberId = tempPoints.getMemberId();
try {
this.redisUtils.doLock("member::id::" + memberId.toString());
this.redisUtils.doLock(RedisKeyConstants.cacheMemberById + memberId.toString());
//1.删除过期的积分
this.cleanInvalidAvailablePointsByMemberId(memberId);
log.info("删除过期的积分 ==>> cleanInvalidAvailablePointsByMemberId ==>> ");
......@@ -153,11 +142,10 @@ public class PointsOperationServiceImpl implements PointsOperationService {
customPointsResult.setPoint(currentPoints);
}
}catch (Exception e) {
e.printStackTrace();
throw e;
} catch (Exception e) {
log.error("消耗积分失败,"+e.getMessage());
} finally {
this.redisUtils.doUnLock("member::id::" + memberId.toString());
this.redisUtils.doUnLock(RedisKeyConstants.cacheMemberById + memberId.toString());
}
return customPointsResult;
......@@ -445,7 +433,7 @@ public class PointsOperationServiceImpl implements PointsOperationService {
Long memberId = tempPoints.getMemberId();
log.info("----------->> 会员id ===>>>>" + memberId);
try {
this.redisUtils.doLock(RedisKeyConstants.updateCachePointsByMemberId + memberId.toString());
// 1.可用总积分
Long currentPoints = this.findAvailablePointsByMemberId(memberId);
log.info("----------->> 获取会员当前可用总积分 --->>>> {}", currentPoints);
......@@ -466,8 +454,6 @@ public class PointsOperationServiceImpl implements PointsOperationService {
long soonExpirePoints = this.getSoonExpirePoints(memberId, tempPoints);
log.info("----------->> 即将过期的积分 ------->>>>> {}", soonExpirePoints);
this.redisUtils.doLock("right::member::id::" + memberId.toString());
// 6.更新会员的总积分
log.info("----------->> 更新会员的总积分 ------->>>>> 总积分--->>> {}", totalPoints);
this.freshMemberCurrentPoints(memberId, totalPoints, soonExpirePoints);
......@@ -476,7 +462,7 @@ public class PointsOperationServiceImpl implements PointsOperationService {
e.printStackTrace();
throw e;
} finally {
this.redisUtils.doUnLock("right::member::id::" + memberId.toString());
this.redisUtils.doUnLock(RedisKeyConstants.updateCachePointsByMemberId + memberId.toString());
}
}
......@@ -530,7 +516,6 @@ public class PointsOperationServiceImpl implements PointsOperationService {
MemberDTO memberDTO = this.findMemberByMemberId(memberId);
Member member = new Member();
// BeanUtils.copyProperties(memberDTO, member);
member.setId(memberDTO.getId());
member.setCode(memberDTO.getCode());
member.setPoints(Objects.nonNull(currentPoints) ? currentPoints:0);
......@@ -541,7 +526,7 @@ public class PointsOperationServiceImpl implements PointsOperationService {
((PointsOperationServiceImpl) AopContext.currentProxy()).asyncMemberPoint(member);
} catch (Exception e){
throw e;
log.error("同步会员积分异常,"+e.getMessage());
}
}
......
......@@ -6,7 +6,8 @@ import com.topdraw.business.module.rights.history.domain.RightsHistory;
import com.topdraw.business.module.rights.history.service.RightsHistoryService;
import com.topdraw.business.module.rights.service.RightsService;
import com.topdraw.business.module.rights.service.dto.RightsDTO;
import com.topdraw.business.process.domian.constant.RightType;
import com.topdraw.business.module.rights.constant.RightType;
import com.topdraw.business.module.rights.constant.RightTypeConstants;
import com.topdraw.business.process.service.CouponOperationService;
import com.topdraw.business.process.service.ExpOperationService;
import com.topdraw.business.process.service.PointsOperationService;
......@@ -14,8 +15,6 @@ import com.topdraw.business.process.service.RightsOperationService;
import com.topdraw.business.process.domian.*;
import com.topdraw.util.TimestampUtil;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
......@@ -24,7 +23,6 @@ import org.springframework.util.StringUtils;
import java.sql.Timestamp;
import java.util.*;
import java.util.concurrent.ThreadPoolExecutor;
/**
* 权益处理
......@@ -148,54 +146,7 @@ public class RightsOperationServiceImpl implements RightsOperationService {
* @param tempRightsMap
*/
private void refresh(Map<RightType, Object> tempRightsMap) {
/*FutureTask<Map<Long,Long>> futureTask1 = new FutureTask(()->{
log.info(Thread.currentThread().getName() + "=========>> start");
// 积分
this.grantPoint((List<TempPoints>) tempRightsMap.get(RightType.POINTS));
log.info(Thread.currentThread().getName() + "=========>>grantPoint end");
// 成长值
// this.grantExp((List<TempExp>) tempRightsMap.get(RightType.EXP));
// 优惠券
// this.grantCoupon((List<TempCoupon>) tempRightsMap.get(RightType.COUPON));
return null;
});
FutureTask<Map<Long,Long>> futureTask2 = new FutureTask(()->{
// 积分
// this.grantPoint((List<TempPoints>) tempRightsMap.get(RightType.POINTS));
// 成长值
this.grantExp((List<TempExp>) tempRightsMap.get(RightType.EXP));
// 优惠券
// this.grantCoupon((List<TempCoupon>) tempRightsMap.get(RightType.COUPON));
return null;
});
FutureTask<Map<Long,Long>> futureTask3 = new FutureTask(()->{
// 积分
// this.grantPoint((List<TempPoints>) tempRightsMap.get(RightType.POINTS));
// 成长值
// this.grantExp((List<TempExp>) tempRightsMap.get(RightType.EXP));
// 优惠券
this.grantCoupon((List<TempCoupon>) tempRightsMap.get(RightType.COUPON));
return null;
});
this.threadPoolTaskExecutor.execute(futureTask1);
this.threadPoolTaskExecutor.execute(futureTask2);
this.threadPoolTaskExecutor.execute(futureTask3);*/
/*this.threadPoolTaskExecutor.execute(() -> {
// 积分
this.grantPoint((List<TempPoints>) tempRightsMap.get(RightType.POINTS));
// 成长值
this.grantExp((List<TempExp>) tempRightsMap.get(RightType.EXP));
// 优惠券
this.grantCoupon((List<TempCoupon>) tempRightsMap.get(RightType.COUPON));
});*/
/*this.threadPoolTaskExecutor.execute(() -> {
log.info(Thread.currentThread().getName() + "=========>> start");
// 积分
this.grantPoint((List<TempPoints>) tempRightsMap.get(RightType.POINTS));
log.info(Thread.currentThread().getName() + "=========>> end");
});*/
this.threadPoolTaskExecutor.execute(() -> {
List<TempPoints> tempPointsList = (List<TempPoints>) tempRightsMap.get(RightType.POINTS);
if (!CollectionUtils.isEmpty(tempPointsList)) {
......@@ -209,15 +160,15 @@ public class RightsOperationServiceImpl implements RightsOperationService {
});
this.threadPoolTaskExecutor.execute(()-> {
List<TempExp> tempExpList = (List<TempExp>) tempRightsMap.get(RightType.EXP);
if (!CollectionUtils.isEmpty(tempExpList)) {
log.info("发放成长值开始 ==>> [{}]", tempExpList);
long l = System.currentTimeMillis();
// 成长值
this.grantExp(tempExpList);
long l2 = System.currentTimeMillis();
log.info("发放成长值结束,总耗时 ==>> {}", (l2 - l));
}
List<TempExp> tempExpList = (List<TempExp>) tempRightsMap.get(RightType.EXP);
if (!CollectionUtils.isEmpty(tempExpList)) {
log.info("发放成长值开始 ==>> [{}]", tempExpList);
long l = System.currentTimeMillis();
// 成长值
this.grantExp(tempExpList);
long l2 = System.currentTimeMillis();
log.info("发放成长值结束,总耗时 ==>> {}", (l2 - l));
}
});
this.threadPoolTaskExecutor.execute(()-> {
......@@ -252,7 +203,7 @@ public class RightsOperationServiceImpl implements RightsOperationService {
// 活动机会
case ACTIVITYCHANCE:
// TODO MOSS 增加活动机会接口
break;
// 积分商品
......@@ -298,7 +249,7 @@ public class RightsOperationServiceImpl implements RightsOperationService {
// 权益类型
RightsDTO rightsDTO = this.getRights(rightId);
// 权益的实体类型 1:积分;2成长值;3优惠券
String type = rightsDTO.getEntityType();
Integer type = rightsDTO.getEntityType();
Long expireTime1 = rightsDTO.getExpireTime();
Timestamp expireTime = null;
if (Objects.nonNull(expireTime1)){
......@@ -307,7 +258,8 @@ public class RightsOperationServiceImpl implements RightsOperationService {
switch (type) {
// 优惠券
case "1":
case RightTypeConstants
.DISCOUNT_COUPON:
Long entityId = rightsDTO.getEntityId();
CouponDTO couponDTO = this.findCouponById(entityId);
if (Objects.nonNull(couponDTO)) {
......@@ -319,16 +271,15 @@ public class RightsOperationServiceImpl implements RightsOperationService {
tempCoupon.setRightsSendStrategy(0);
tempCoupon.setCode(couponDTO.getCode());
if (Objects.nonNull(expireTime))
// tempCoupon.setExpireTime(TimestampUtil.long2LocalDateTime(expireTime));
tempCoupon.setExpireTime(expireTime);
tempCouponList.add(tempCoupon);
}
break;
// 观影券
case "2":
case RightTypeConstants.VIEW_COUPON:
break;
// 活动参与机会
case "3":
case RightTypeConstants.JOIN_ACTIVITY:
break;
default:
......
......@@ -23,7 +23,7 @@ import com.topdraw.business.module.user.iptv.domain.UserTv;
import com.topdraw.business.module.user.iptv.service.UserTvService;
import com.topdraw.business.module.user.iptv.service.dto.UserTvDTO;
import com.topdraw.business.process.domian.constant.TaskTemplateType;
import com.topdraw.business.process.domian.constant.RightType;
import com.topdraw.business.module.rights.constant.RightType;
import com.topdraw.business.process.service.PointsOperationService;
import com.topdraw.business.process.service.RightsOperationService;
import com.topdraw.business.process.service.TaskOperationService;
......@@ -36,14 +36,21 @@ import com.topdraw.business.module.task.template.service.TaskTemplateService;
import com.topdraw.business.process.domian.*;
import com.topdraw.business.process.service.UserOperationService;
import com.topdraw.common.ResultInfo;
import com.topdraw.exception.BadRequestException;
import com.topdraw.config.LocalConstants;
import com.topdraw.business.module.rights.constant.RightTypeConstants;
import com.topdraw.business.module.task.template.constant.TaskEventType;
import com.topdraw.config.RedisKeyConstants;
import com.topdraw.mq.module.mq.DataSyncMsg;
import com.topdraw.util.*;
import com.topdraw.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
......@@ -89,6 +96,12 @@ public class TaskOperationServiceImpl implements TaskOperationService {
@Autowired
private RightsOperationService rightsOperationService;
@Autowired
private RedisUtils redisUtils;
@Value("${uc.validPriorityMember}")
private int validPriorityMember;
private static final Integer TASK_FINISH_STATUS = 1;
private static final Integer TASK_UNFINISH_STATUS = 2;
private static final Integer POINTS_TYPE_RANDOM = 1;
......@@ -103,9 +116,11 @@ public class TaskOperationServiceImpl implements TaskOperationService {
public void asyncDeleteTask(Task task) {}
@Override
public void createTask(Task task) {
/* @CachePut(cacheNames = RedisKeyConstants.cacheTaskByTaskTemplateId, key = "#task.taskTemplateId",
unless = "#result.id == null")*/
public TaskDTO createTask(Task task) {
Long taskTemplateId = task.getTaskTemplateId();
TaskTemplateDTO taskTemplateDTO = this.findByTemplateId(taskTemplateId);
TaskTemplateDTO taskTemplateDTO = this.taskTemplateService.findById(taskTemplateId);
task.setTaskTemplateCode(taskTemplateDTO.getCode());
Task task_ = TaskBuilder.build(task);
......@@ -116,15 +131,8 @@ public class TaskOperationServiceImpl implements TaskOperationService {
}
((TaskOperationServiceImpl) AopContext.currentProxy()).asyncCreateTask(task_);
}
/**
*
* @param taskTemplateId
* @return
*/
private TaskTemplateDTO findByTemplateId(Long taskTemplateId){
return this.taskTemplateService.findById(taskTemplateId);
return taskDTO;
}
/**
......@@ -139,9 +147,11 @@ public class TaskOperationServiceImpl implements TaskOperationService {
}
@Override
public void updateTask(Task task) {
/*@CachePut(cacheNames = RedisKeyConstants.cacheTaskByTaskTemplateId, key = "#task.taskTemplateId",
unless = "#result.id == null")*/
public TaskDTO updateTask(Task task) {
Long taskTemplateId = task.getTaskTemplateId();
TaskTemplateDTO taskTemplateDTO = this.findByTemplateId(taskTemplateId);
TaskTemplateDTO taskTemplateDTO = this.taskTemplateService.findById(taskTemplateId);
task.setTaskTemplateCode(taskTemplateDTO.getCode());
TaskDTO update = this.taskService.update(task);
if (Objects.nonNull(update.getId())) {
......@@ -149,6 +159,8 @@ public class TaskOperationServiceImpl implements TaskOperationService {
}
((TaskOperationServiceImpl) AopContext.currentProxy()).asyncUpdateTask(task);
return update;
}
/**
......@@ -167,26 +179,33 @@ public class TaskOperationServiceImpl implements TaskOperationService {
}
@Override
public void deleteTask(Task task) {
/*@CacheEvict(cacheNames = "", key = "")*/
public Integer deleteTask(Task task) {
Long id = task.getId();
TaskDTO taskDTO = this.findById(id);
if (Objects.nonNull(taskDTO.getId())) {
task.setId(taskDTO.getId());
this.taskService.delete(task);
Integer delete = this.taskService.delete(task);
task.setCode(taskDTO.getCode());
((TaskOperationServiceImpl) AopContext.currentProxy()).asyncDeleteTask(task);
return delete;
}
return 0;
}
@Override
public void deleteTask(Long id) {
public Integer deleteTask(Long id) {
TaskDTO taskDTO = this.findById(id);
if (Objects.nonNull(taskDTO.getId())) {
Task task = new Task();
task.setId(taskDTO.getId());
task.setCode(taskDTO.getCode());
this.deleteTask(task);
return this.deleteTask(task);
}
return 0;
}
@Override
......@@ -211,50 +230,97 @@ public class TaskOperationServiceImpl implements TaskOperationService {
public ResultInfo dealTask(String content) {
DataSyncMsg dataSyncMsg = JSONUtil.parseMsg2Object(content, DataSyncMsg.class);
Integer event = dataSyncMsg.getEvent();
String msgData1 = dataSyncMsg.getMsgData();
DataSyncMsg.MsgData msgData = JSON.parseObject(msgData1, DataSyncMsg.MsgData.class);
log.info("事件dataSyncMsg ==>> {}", dataSyncMsg);
DataSyncMsg.MsgData msgData = JSON.parseObject(dataSyncMsg.getMsgData(), DataSyncMsg.MsgData.class);
log.info("事件消息体解析后msgData ==>> {}", msgData);
if (Objects.isNull(msgData)) {
log.error("参数错误,事件消息体为空");
return ResultInfo.failure("参数错误,事件消息体为空");
}
String memberCode = msgData.getMemberCode();
// 小屏侧传递的参数是memberId
Long memberId = msgData.getMemberId();
// 大屏侧传递的参数是platformAccount
String platformAccount = msgData.getPlatformAccount();
// 参数校验
if (Objects.isNull(memberId) && StringUtils.isBlank(platformAccount)) {
log.error("参数错误,memberId 和 platformAccount 都为null");
return ResultInfo.failure("参数错误");
}
// 获取会员信息,小屏会员信息通过memberId进行检索,大屏会员信息通过platformAccount进行检索
long l = System.currentTimeMillis();
if (StringUtils.isNotBlank(memberCode)) {
MemberDTO memberDTO = null;
if (Objects.nonNull(memberId)) {
memberDTO = this.memberService.findById(memberId);
log.info("获取小屏会员信息 ==>> memberId ==>> {} || 会员信息 ==>> {}",memberId, memberDTO);
} else if (StringUtils.isNotBlank(platformAccount)) {
UserTvDTO userTvDTO = this.userTvService.findByPlatformAccount(platformAccount);
if (Objects.nonNull(userTvDTO.getId())) {
// 开启积分自动同步至小屏主会员
if (validPriorityMember == 0) {
String priorityMemberCode = userTvDTO.getPriorityMemberCode();
MemberDTO memberDTO = this.memberService.findByCode(memberCode);
log.info("获取会员信息 ==>> {}", memberDTO);
if (StringUtils.isNotBlank(priorityMemberCode)) {
memberDTO = this.memberService.findByCode(priorityMemberCode);
log.info("查询绑定的小屏的主会员信息, member ==>> {}", memberDTO);
} else if (Objects.nonNull(userTvDTO.getMemberId())) {
memberDTO = this.memberService.findById(userTvDTO.getMemberId());
log.info("查询大屏自身的会员信息, member ==>> {}", memberDTO);
}
} else {
memberDTO = this.memberService.findById(userTvDTO.getMemberId());
}
// 检查当前会员的黑名单状态
boolean b = this.validatedMemberBlackStatus(memberDTO);
log.info("会员信息 ==>> {} || 会员id ==>> {} || 黑名单状态 ==>> {}", memberDTO, memberDTO.getId(), memberDTO.getBlackStatus());
if (!b) {
return ResultInfo.forbidden("会员已被加入黑名单");
} else {
log.error("大屏账号不存在,请检查数据, platformAccount ==>> {}", platformAccount);
return ResultInfo.failure("大屏账号不存在,请检查数据");
}
memberId = memberDTO.getId();
log.info("获取大屏会员信息 ==>> platformAccount ==>> {} || 会员信息 ==>> {}", platformAccount, memberDTO);
}
// 1.通过任务标识获取任务模板,通过模板参数获取具体的模板
TaskTemplate taskTemplate = this.getTaskTemplate(event, dataSyncMsg);
log.info("获取任务模板 taskTemplate ==>> {} ", taskTemplate);
if (Objects.isNull(memberDTO.getId())) {
log.error("会员信息不存在 ==>> {}" + memberDTO);
return ResultInfo.failure("会员信息不存在");
}
// 2.通过任务模板获取对应的任务列表
List<Task> taskList = this.loadListTaskByTaskTemplate(taskTemplate, dataSyncMsg);
log.info("获取任务 taskList ==>> [{}] ", taskList);
// 检查黑名单状态 0:正常 1:黑名单
Long blackStatus = memberDTO.getBlackStatus();
if (Objects.nonNull(blackStatus) && blackStatus.equals(LocalConstants.BLACK_STATUS)) {
log.error("会员已被加入黑名单 ==>> {}" + memberDTO);
return ResultInfo.forbidden("会员已被加入黑名单");
}
// 检索满足条件的任务 1.先检查redis中是否存在符合条件的任务 2.从redis中获取当前会员未完成的任务
List<Task> tasks = this.findValidTasksAndRefreshTaskProcess(memberDTO, dataSyncMsg.getEvent(), msgData);
log.info("查询出来的任务列表 tasks ==>> [{}] ", tasks);
if (CollectionUtils.isEmpty(tasks)) {
// 类型 1:登录;2:观影;3:参加活动;4:订购;5:优享会员;6:签到;7:完成设置;8:播放记录;
// 10:跨屏绑定;11:积分转移;30:积分兑换商品;98:系统操作;99:其他
log.warn("无可执行的任务, 请检查配置,任务模板类型 eventType ==>> {} || 消息体 ==>> msgData {}", dataSyncMsg.getEvent(), msgData);
return ResultInfo.failure("无可执行的任务");
}
// 4.判断当前用户是否满足任务完成条件
boolean checkResult = this.checkTaskCompletion(memberId, taskList, event, msgData);
log.info("检查当前会员的任务完成情况 ==>> {} , true:未完成", checkResult);
if (checkResult) {
if (!CollectionUtils.isEmpty(tasks)) {
// 5.权益区分(积分、权益、成长值)
Map<RightType,Object> tempRightsMap = this.distinguishRight(memberId, taskList, msgData, dataSyncMsg);
Map<RightType,Object> tempRightsMap = this.distinguishRight(memberDTO, tasks, msgData, dataSyncMsg);
log.info("获取当前任务对应的权益 tempRightsMap ==>> {} ", tempRightsMap);
// 6.风控检查
boolean result = this.checkRiskManagement(memberId, tempRightsMap);
log.info("针对各项权益检查当前会员是否达到风控值 ==>> {},true:已达到风控指标 ", result);
// 6.风控检查 TODO
// boolean result = this.checkRiskManagement(memberId, tempRightsMap);
// log.info("针对各项权益检查当前会员是否达到风控值 ==>> {},true:已达到风控指标 ", result);
if (result) throw new BadRequestException("发放失败,已达风控上限");
// if (result) throw new BadRequestException("发放失败,已达风控上限");
long l1 = System.currentTimeMillis();
log.info("各项检查总耗时 ==>> {}", (l1-l));
......@@ -265,12 +331,204 @@ public class TaskOperationServiceImpl implements TaskOperationService {
this.grantRight(tempRightsMap);
long l3 = System.currentTimeMillis();
log.info("下发结束,总耗时 ==>> {}", (l3-l2));
}
return ResultInfo.success();
}
private void saveOrUpdateTaskProcess(Long memberId, Task task, Integer currentActionAmount) {
TrTaskProgress trTaskProgress = new TrTaskProgress();
trTaskProgress.setCurrentActionAmount(currentActionAmount);
trTaskProgress.setCompletionTime(TimestampUtil.now());
trTaskProgress.setStatus(1);
trTaskProgress.setTaskId(task.getId());
trTaskProgress.setMemberId(memberId);
trTaskProgress.setTargetActionAmount(task.getActionAmount());
// 更新任务完成情况
log.info("更新任务完成情况 ==>> {}", trTaskProgress);
this.doRefreshTrTaskProcess(trTaskProgress);
}
/**
* 获取满足条件的任务列表
* @param memberDTO 会员
* @param msgData 事件消息体
* @param event 任务模板类型
* @return
*/
private List<Task> findValidTasksAndRefreshTaskProcess(MemberDTO memberDTO, Integer event, DataSyncMsg.MsgData msgData) {
// 任务是否存在
List<Task> tasks = this.taskService.findByEvent(event);
if (Objects.isNull(tasks) || CollectionUtils.isEmpty(tasks)) {
return Collections.singletonList(null);
}
// 用户行为量
String param = msgData.getParam();
JSONObject paramJsonObject = null;
if (StringUtils.isNotBlank(param)) {
paramJsonObject = JSONObject.parseObject(param, JSONObject.class);
}
List<Task> tasksResult = new ArrayList<>();
// 检查当前会员针对这些任务的完成情况
for (Task task : tasks) {
/*// 校验用户分组
if (StringUtils.isNotBlank(task.getGroups()) && !task.getGroups().contains(memberDTO.getGroups())) {
log.warn("此用户分组不满足任务要求,任务分组 ==>> {} || 会员分组 ==>> {}",task.getGroups(), memberDTO.getGroups());
continue;
}
// 校验会员等级
if (Objects.nonNull(task.getMemberLevel()) && task.getMemberLevel() < memberDTO.getLevel()) {
log.warn("此用户等级不满足任务要求,任务要求会员等级 ==>> {} || 会员等级 ==>> {}",task.getMemberLevel(), memberDTO.getLevel());
continue;
}
// 校验会员vip
if (Objects.nonNull(task.getMemberVip()) && task.getMemberVip() < memberDTO.getVip()) {
log.warn("此用户vip不满足任务要求,任务要求会员vip ==>> {} || 会员vip ==>> {}",task.getMemberVip(), memberDTO.getVip());
continue;
}*/
TrTaskProgressDTO trTaskProgressDTO =
this.trTaskProgressService.findByMemberIdAndTaskIdAndCompletionTime(memberDTO.getId(), task.getId(), LocalDateTimeUtil.todayStart());
log.info("当前任务完成的情况,trTaskProgressDTO ==>> {}", trTaskProgressDTO);
// 任务未完成
if (Objects.isNull(trTaskProgressDTO) || !trTaskProgressDTO.getStatus().equals(TASK_FINISH_STATUS)) {
// 任务最低行为量
int actionAmount = task.getActionAmount();
// 任务属性
String attr = task.getAttr();
switch (event) {
// 开机、登录
case TaskEventType.LOGIN:
if (Objects.nonNull(paramJsonObject)) {
// 登录天数
int continueLogin = paramJsonObject.getInteger("CONTINUE_LOGIN");
if (continueLogin >= actionAmount) {
tasksResult.add(task);
log.info("保存开机、登录任务进度");
this.saveOrUpdateTaskProcess(memberDTO.getId(), task, continueLogin);
}
}
break;
// 观影
case TaskEventType.VIEW:
if (Objects.nonNull(paramJsonObject)) {
// 观影总时长
int playDuration_ = paramJsonObject.getInteger("PLAYDURATION");
if (playDuration_ >= actionAmount) {
tasksResult.add(task);
log.info("保存观影任务进度");
this.saveOrUpdateTaskProcess(memberDTO.getId(), task, playDuration_);
}
}
break;
// 参加活动
case TaskEventType.ACTIVITY:
if (Objects.nonNull(paramJsonObject)) {
}
break;
// 订购
case TaskEventType.ORDER:
if (Objects.nonNull(paramJsonObject)) {
}
break;
// 优享会员
case TaskEventType.MEMBER_PRIORITY:
if (Objects.nonNull(paramJsonObject)) {
}
break;
// 签到
case TaskEventType.SIGN:
if (Objects.nonNull(paramJsonObject)) {
// 签到天数
int signDays = paramJsonObject.getInteger("SIGN");
if (signDays >= actionAmount) {
tasksResult.add(task);
log.info("保存签到天数任务进度");
this.saveOrUpdateTaskProcess(memberDTO.getId(), task, signDays);
}
}
break;
// 完成设置
case TaskEventType.COMPLETE_INFO:
if (Objects.nonNull(paramJsonObject)) {
// 完成设置次数
int completeCount = paramJsonObject.getInteger("COMPLETECOUNT");
if (completeCount >= actionAmount) {
tasksResult.add(task);
log.info("保存完成用户信息设置任务进度");
this.saveOrUpdateTaskProcess(memberDTO.getId(), task, completeCount);
}
}
break;
// 播放时长
case TaskEventType.PLAY:
// 用户播放总时长
if (Objects.nonNull(paramJsonObject)) {
int playDuration = paramJsonObject.getInteger("PLAYDURATION");
if (playDuration >= actionAmount) {
tasksResult.add(task);
log.info("保存用户播放总时长任务进度");
this.saveOrUpdateTaskProcess(memberDTO.getId(), task, playDuration);
}
}
break;
// 跨屏绑定
case TaskEventType.BINDING:
// 跨屏绑定次数
if (Objects.nonNull(paramJsonObject)) {
int bindCount = paramJsonObject.getInteger("BINDCOUNT");
if (bindCount >= actionAmount) {
tasksResult.add(task);
log.info("保存跨屏绑定任务进度");
this.saveOrUpdateTaskProcess(memberDTO.getId(), task, bindCount);
}
}
break;
// 积分转移
case TaskEventType.POINTS_TRANS:
break;
// 积分兑换商品
case TaskEventType.POINTS_EXCHANGE_GOODS:
// 完成设置次数
if (Objects.nonNull(paramJsonObject)) {
int exchangeCount = paramJsonObject.getInteger("EXCHANGCOUNT");
if (exchangeCount >= actionAmount) {
tasksResult.add(task);
log.info("保存积分兑换商品任务进度");
this.saveOrUpdateTaskProcess(memberDTO.getId(), task, exchangeCount);
}
}
break;
// 系统操作
case TaskEventType.SYSTEM_OPERATE:
break;
default:
log.warn("没有找到对应的任务,findValidTasks");
break;
}
}
}
return tasksResult;
}
/**
......@@ -285,30 +543,17 @@ public class TaskOperationServiceImpl implements TaskOperationService {
}
/**
* 验证会员信息
* @param memberDTO
* @return
*/
private boolean validatedMemberBlackStatus(MemberDTO memberDTO) {
Long blackStatus = memberDTO.getBlackStatus();
if (Objects.nonNull(blackStatus) && blackStatus == 1) {
log.error("validatedMember -->> 会员已被加入黑名单 【blackStatus】 -->> " + blackStatus);
return false;
}
return true;
}
/**
* 任务完成情况
* @param resources 任务完成情况
*/
private void doRefreshTrTaskProcess(TrTaskProgress resources) {
String date = LocalDateTimeUtil.todayStart();
Long id = resources.getId();
if (Objects.nonNull(id)) {
resources.setUpdateTime(TimestampUtil.now());
this.trTaskProgressService.update(resources);
this.trTaskProgressService.update(resources, date);
} else {
this.trTaskProgressService.create(resources);
this.trTaskProgressService.create(resources, date);
}
}
......@@ -326,25 +571,27 @@ public class TaskOperationServiceImpl implements TaskOperationService {
* @param taskList 任务列表
* @return Map<RightType,Object> 权益分类
*/
private Map<RightType,Object> distinguishRight(Long memberId, List<Task> taskList, DataSyncMsg.MsgData msgData, DataSyncMsg dataSyncMsg) {
private Map<RightType,Object> distinguishRight(MemberDTO memberDTO, List<Task> taskList, DataSyncMsg.MsgData msgData, DataSyncMsg dataSyncMsg) {
Map<RightType,Object> map = new HashMap<>();
// 区分权益类型(成长值(reward_exp)、积分(reward_points)、实体券),并发放权益
List<TempPoints> tempPoints = new ArrayList<>();
List<TempExp> tempExps = new ArrayList<>();
for (Task task : taskList) {
// 积分
List<TempPoints> tempPointsList = this.getTempPoints(memberId, msgData, task, dataSyncMsg);
if (!CollectionUtils.isEmpty(tempPointsList))
map.put(RightType.POINTS,tempPointsList);
this.getTempPoints(memberDTO, msgData, task, dataSyncMsg, tempPoints);
if (!CollectionUtils.isEmpty(tempPoints))
map.put(RightType.POINTS, tempPoints);
// 成长值
List<TempExp> tempExpList = this.getTempExp(memberId,msgData,task, dataSyncMsg);
if (!CollectionUtils.isEmpty(tempExpList))
map.put(RightType.EXP,tempExpList);
this.getTempExp(memberDTO,msgData,task, dataSyncMsg, tempExps);
if (!CollectionUtils.isEmpty(tempExps))
map.put(RightType.EXP, tempExps);
// 权益
map = this.getTempRight(memberId, task, map);
this.getTempRight(memberDTO, task, map);
}
......@@ -368,8 +615,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
Long expireTime1 = rightsDTO.getExpireTime();
if (Objects.nonNull(expireTime1)) {
Timestamp expireTime = TimestampUtil.long2Timestamp(expireTime1);
if (Objects.nonNull(expireTime))
tempRights.setExpireTime(expireTime);
tempRights.setExpireTime(expireTime);
}
return tempRights;
}
......@@ -395,17 +641,17 @@ public class TaskOperationServiceImpl implements TaskOperationService {
/**
* 权益1
* @param task
* @param task 任务
* @param memberDTO 会员
* @param map 权益分类
* @return
*/
private Map<RightType,Object> getTempRight(Long memberId , Task task , Map<RightType,Object> map) {
private Map<RightType,Object> getTempRight(MemberDTO memberDTO, Task task, Map<RightType,Object> map) {
// 优惠券
List<TempCoupon> tempCouponList = new ArrayList<>();
// 权益列表,用以保存权益记录
List<TempRights> rightsList = new ArrayList<>();
// 会员信息
MemberDTO memberDTO = this.findMemberById(memberId);
// 权益1
Long rights1Id = task.getRightsId();
......@@ -437,27 +683,9 @@ public class TaskOperationServiceImpl implements TaskOperationService {
// 权益分类
this.getTempRightType(memberDTO,rights3Id,rights3Amount,rightsSendStrategy,tempCouponList,rightsList,map);
}
// 优惠券
/*if (!CollectionUtils.isEmpty(tempCouponList)) {
map.put(RightType.COUPON,tempCouponList);
}*/
// 权益
/*if (!CollectionUtils.isEmpty(rightsList)) {
map.put(RightType.RIGHTS,rightsList);
}*/
return map;
}
/**
* 会员对象
* @param memberId
* @return
*/
private MemberDTO findMemberById(Long memberId) {
return this.memberService.findById(memberId);
}
/**
* 权益分类
* @param memberDTO
......@@ -486,10 +714,10 @@ public class TaskOperationServiceImpl implements TaskOperationService {
}
// 权益类型
String type = rightsDTO.getEntityType();
Integer type = rightsDTO.getEntityType();
switch (type) {
// 优惠券
case "1":
case RightTypeConstants.DISCOUNT_COUPON:
Long entityId1 = rightsDTO.getEntityId();
if (Objects.nonNull(entityId1)) {
CouponDTO couponDTO = this.findCouponById(entityId1);
......@@ -505,7 +733,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
}
break;
// 观影券
case "2":
case RightTypeConstants.VIEW_COUPON:
Long entityId2 = rightsDTO.getEntityId();
if (Objects.nonNull(entityId2)) {
CouponDTO couponDTO = this.findCouponById(entityId2);
......@@ -521,19 +749,19 @@ public class TaskOperationServiceImpl implements TaskOperationService {
}
break;
// 活动参与机会
case "3":
case RightTypeConstants.JOIN_ACTIVITY:
map.put(RightType.ACTIVITYCHANCE, tempRights);
break;
// 积分商品
case "4":
case RightTypeConstants.POINTS_GOODS:
map.put(RightType.POINTGOODS, tempRights);
break;
// IPTV产品包
case "5":
case RightTypeConstants.IPTV_PRODUCT:
map.put(RightType.IPTVPRODUCT, tempRights);
break;
// IPTV观影权益
case "6":
case RightTypeConstants.IPTV_VIEW:
map.put(RightType.IPTVVIEW, tempRights);
break;
default:
......@@ -567,15 +795,15 @@ public class TaskOperationServiceImpl implements TaskOperationService {
* @param task
* @return
*/
private List<TempExp> getTempExp(Long memberId, DataSyncMsg.MsgData msgData, Task task, DataSyncMsg dataSyncMsg) {
private void getTempExp(MemberDTO memberDTO, DataSyncMsg.MsgData msgData, Task task, DataSyncMsg dataSyncMsg, List<TempExp> tempExps) {
Long rewardExp = task.getRewardExp();
if (Objects.nonNull(rewardExp) && rewardExp > 0L) {
TempExp tempExp = new TempExp();
tempExp.setMemberId(memberId);
tempExp.setMemberId(memberDTO.getId());
tempExp.setAppCode(msgData.getAppCode());
tempExp.setMemberId(memberId);
tempExp.setMemberCode(msgData.getMemberCode());
tempExp.setMemberCode(memberDTO.getCode());
tempExp.setItemId(msgData.getItemId());
tempExp.setAccountId(msgData.getAccountId());
tempExp.setRewardExp(task.getRewardExp());
......@@ -586,12 +814,8 @@ public class TaskOperationServiceImpl implements TaskOperationService {
tempExp.setActivityId(msgData.getOrderId());
Integer rightsSendStrategy = task.getRightsSendStrategy();
tempExp.setRightsSendStrategy(Objects.isNull(rightsSendStrategy) ? 0 : rightsSendStrategy);
return Arrays.asList(tempExp);
tempExps.add(tempExp);
}
return null;
}
/**
......@@ -599,8 +823,8 @@ public class TaskOperationServiceImpl implements TaskOperationService {
* @param task
* @return
*/
private List<TempPoints> getTempPoints(Long memberId, DataSyncMsg.MsgData msgData, Task task, DataSyncMsg dataSyncMsg) {
private void getTempPoints(MemberDTO memberDTO, DataSyncMsg.MsgData msgData, Task task,
DataSyncMsg dataSyncMsg, List<TempPoints> tempPoints) {
// 积分: 数值、过期时间、积分类型(定值、随机)、随机积分最大值
Long rewardPoints = task.getRewardPoints();
// 过期时间
......@@ -610,32 +834,32 @@ public class TaskOperationServiceImpl implements TaskOperationService {
Integer pointsType = task.getPointsType();
// 随机积分的最大值
Integer rewardMaxPoints = task.getRewardMaxPoints();
if (Objects.nonNull(rewardPoints)) {
TempPoints tempPoints = new TempPoints();
if (Objects.nonNull(rewardPoints) && rewardPoints > 0) {
TempPoints tempPoint = new TempPoints();
// 如果积分是随机的,则取随机值
if (pointsType == POINTS_TYPE_RANDOM) {
rewardPoints = RandomUtil.getRandomPoints(POINTS_MIN,rewardMaxPoints);
if (pointsType.equals(POINTS_TYPE_RANDOM)) {
rewardPoints = RandomUtil.getRandomPoints(POINTS_MIN, rewardMaxPoints);
}
tempPoints.setRewardPointsExpireTime(rewardPointsExpireTime);
tempPoints.setMemberId(memberId);
tempPoints.setMemberCode(msgData.getMemberCode());
tempPoints.setAppCode(msgData.getAppCode());
tempPoints.setPoints(rewardPoints);
tempPoints.setPointsType(pointsType);
tempPoints.setDeviceType(dataSyncMsg.getDeviceType());
tempPoints.setExpireTime(expireTime);
tempPoints.setOrderId(msgData.getOrderId());
tempPoints.setActivityId(msgData.getOrderId());
tempPoints.setMediaId(msgData.getMediaId());
tempPoints.setItemId(msgData.getItemId());
tempPoints.setAccountId(msgData.getAccountId());
tempPoints.setEvtType(dataSyncMsg.getEvent());
tempPoint.setRewardPointsExpireTime(rewardPointsExpireTime);
tempPoint.setMemberId(memberDTO.getId());
tempPoint.setMemberCode(memberDTO.getCode());
tempPoint.setAppCode(msgData.getAppCode());
tempPoint.setPoints(rewardPoints);
tempPoint.setPointsType(pointsType);
tempPoint.setDeviceType(dataSyncMsg.getDeviceType());
tempPoint.setExpireTime(expireTime);
tempPoint.setOrderId(msgData.getOrderId());
tempPoint.setActivityId(msgData.getActivityId());
tempPoint.setMediaId(msgData.getMediaId());
tempPoint.setItemId(msgData.getItemId());
tempPoint.setAccountId(msgData.getAccountId());
tempPoint.setEvtType(dataSyncMsg.getEvent());
Integer rightsSendStrategy = task.getRightsSendStrategy();
tempPoints.setRightsSendStrategy(Objects.isNull(rightsSendStrategy) ? 0 : rightsSendStrategy);
return Arrays.asList(tempPoints);
tempPoint.setRightsSendStrategy(Objects.isNull(rightsSendStrategy) ? 0 : rightsSendStrategy);
tempPoints.add(tempPoint);
}
return null;
}
/**
......@@ -675,6 +899,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
// 验证会员分组
boolean result1 = this.validatedMemberGroup(memberId,taskList);
log.info("验证会员分组结果,==>> {}, true:验证通过", result1);
if (!result1)
return false;
......@@ -802,7 +1027,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
Long taskId = task.getId();
// 任务完成记录
List<TrTaskProgressDTO> trTaskProgressDTOS =
this.trTaskProgressService.findByMemberIdAndTaskIdAndCompletionTime(memberId,taskId,time1);
null;//this.trTaskProgressService.findByMemberIdAndTaskIdAndCompletionTime(memberId,taskId,time1);
Long id = null;
Integer currentActionAmount = null;
......@@ -817,10 +1042,13 @@ public class TaskOperationServiceImpl implements TaskOperationService {
case 8:
if (!CollectionUtils.isEmpty(trTaskProgressDTOS)) {
TrTaskProgressDTO trTaskProgressDTO_0 = trTaskProgressDTOS.get(0);
id = trTaskProgressDTO_0.getId();
Integer status_0 = trTaskProgressDTO_0.getStatus();
Integer currentActionAmount_0 = trTaskProgressDTO_0.getCurrentActionAmount();
Timestamp completionTime_0 = trTaskProgressDTO_0.getCompletionTime();
log.info("当前任务完成情况,trTaskProgressDTO_0 ==>> {}", trTaskProgressDTO_0);
if (status_0 == 1 && currentActionAmount_0 != null && Objects.nonNull(completionTime_0)) {
log.info("任务已完成,返回false");
return false;
}
}
......@@ -828,7 +1056,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
JSONObject jsonObject = JSON.parseObject(param);
Integer value = Integer.valueOf(jsonObject.get("playDuration").toString());
if (value >= actionAmount) {
currentActionAmount = actionAmount;
currentActionAmount = value;
completionTime = TimestampUtil.now();
status = TASK_FINISH_STATUS;
}
......@@ -931,9 +1159,14 @@ public class TaskOperationServiceImpl implements TaskOperationService {
trTaskProgress.setTargetActionAmount(actionAmount);
// 更新任务完成情况
log.info("更新任务完成情况 ==>> {}", trTaskProgress);
this.doRefreshTrTaskProcess(trTaskProgress);
if (status == TASK_FINISH_STATUS) {
log.info("任务已完成, trTaskProgress ==>> {}", trTaskProgress);
return true;
}
return true;
return false;
}
return false;
......@@ -945,6 +1178,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
* @param taskTemplate 任务模板
* @return List<task> 任务列表
*/
@Deprecated
private List<Task> loadListTaskByTaskTemplate(TaskTemplate taskTemplate, DataSyncMsg dataSyncMsg) {
if (Objects.nonNull(taskTemplate)) {
......@@ -972,7 +1206,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
private List<Task> pickUpTask(List<Task> taskList,DataSyncMsg dataSyncMsg,Integer type) {
List<Task> taskList1 = new ArrayList<>();
String msgData1 = dataSyncMsg.getMsgData();
String msgData1 = null;//dataSyncMsg.getMsgData();
DataSyncMsg.MsgData msgData = JSON.parseObject(msgData1, DataSyncMsg.MsgData.class);
if (Objects.nonNull(msgData.getParam())) {
......@@ -1104,7 +1338,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
* @return TaskTemplate 任务模板
*/
private TaskTemplate getTaskTemplate(Integer event, DataSyncMsg dataSyncMsg) {
String msgData1 = dataSyncMsg.getMsgData();
String msgData1 = null;//dataSyncMsg.getMsgData();
DataSyncMsg.MsgData msg = JSON.parseObject(msgData1, DataSyncMsg.MsgData.class);
if (Objects.nonNull(msg.getParam())) {
......
......@@ -82,6 +82,11 @@ public class TaskTemplateOperationServiceImpl implements TaskTemplateOperationSe
}
@Override
public Long countByCodeAndType(TaskTemplate taskTemplate) {
return this.taskTemplateService.countByCodeAndType(taskTemplate);
}
@Override
public TaskTemplateDTO findById(Long id) {
return this.taskTemplateService.findById(id);
}
......
......@@ -114,6 +114,8 @@ public class UserOperationServiceImpl implements UserOperationService {
@AsyncMqSend
public void asyncUserTv(UserTvDTO userTvDTO) {}
@AsyncMqSend
public void asyncUserTvChangeMainAccount(UserTvDTO userTvDTO) {}
@AsyncMqSend
public void asyncAppletBind(MemberAndUserTvDTO memberAndUserTvDTO) {}
@AsyncMqSend
public void asyncUnbind(MemberAndUserTvDTO memberAndUserTvDTO) {}
......@@ -427,66 +429,61 @@ public class UserOperationServiceImpl implements UserOperationService {
String headImgUrl = resources.getHeadimgurl();
// 小屏账户
UserWeixinDTO _userWeixinDTO = this.findFirstByUnionIdAndAppIdAndOpenId(unionId,appId, openId);
UserWeixinDTO userWeixinDTO = this.userWeixinService.findFirstByUnionIdAndAppIdAndOpenId(unionId, appId, openId);
MemberDTO memberDTO = null;
if (Objects.isNull(_userWeixinDTO.getId()) || StringUtils.isBlank(_userWeixinDTO.getUnionid()) ||
Objects.isNull(_userWeixinDTO.getMemberId())) {
if (Objects.isNull(userWeixinDTO.getId()) || StringUtils.isBlank(userWeixinDTO.getUnionid()) ||
Objects.isNull(userWeixinDTO.getMemberId())) {
UserWeixin userWeixin = new UserWeixin();
BeanUtils.copyProperties(resources, userWeixin);
userWeixin.setStatus(SUBSCRIBE_STATUS);
// 创建小屏账户同时创建会员
_userWeixinDTO = this.createWeixinUserAndMember(userWeixin, 1);
Long memberId = _userWeixinDTO.getMemberId();
userWeixinDTO = this.createWeixinUserAndMember(userWeixin, 1);
Long memberId = userWeixinDTO.getMemberId();
memberDTO = this.memberService.findById(memberId);
memberDTO.setVip(SUBSCRIBE_STATUS);
} else {
// 修改微信账户关注状态
_userWeixinDTO = this.doUpdateUserWeiXinStatus(_userWeixinDTO, SUBSCRIBE_STATUS);
UserWeixin userWeixin = new UserWeixin();
userWeixin.setId(userWeixinDTO.getId());
userWeixin.setStatus(SUBSCRIBE_STATUS);
userWeixinDTO = this.userWeixinService.doUpdateWeixinStatus(userWeixin);
// 小屏会员
memberDTO = this.findMemberByAppIdAndOpenId(appId,openId);
memberDTO = this.memberService.findById(userWeixinDTO.getMemberId());
if (memberDTO != null) {
if (StringUtils.isNotBlank(headImgUrl) && StringUtils.isNotBlank(nickname)) {
memberDTO.setAvatarUrl(headImgUrl);
memberDTO.setNickname(nickname);
}
Integer vip = memberDTO.getVip();
// 未购买付费会员
if (Objects.isNull(vip) || vip < 1) {
memberDTO.setVip(1);
}
}
Member member = new Member();
member.setId(memberDTO.getId());
if (Objects.nonNull(memberDTO.getId())) {
Integer vip = memberDTO.getVip();
// 未购买付费会员
if (Objects.isNull(vip) || vip < 1) {
member.setVip(1);
member.setVipExpireTime(null);
} else {
member.setVip(vip);
}
}
// 修改会员信息
MemberDTO _memberDTO1 = this.doUpdateMemberByMemberDTO(memberDTO);
log.info("发送关注消息至大屏侧,发送的账号信息 ==>> {} || 会员信息 ==>> {}", _userWeixinDTO , _memberDTO1);
memberDTO = this.memberService.doUpdateMemberVipAndVipExpireTime(member);
log.info("发送关注消息至大屏侧,发送的账号信息 ==>> {} || 会员信息 ==>> {}", userWeixinDTO , memberDTO);
// 同步至iptv
((UserOperationServiceImpl)AopContext.currentProxy()).asyncSubscribe(new MemberAndWeixinUserDTO(_memberDTO1, _userWeixinDTO));
((UserOperationServiceImpl)AopContext.currentProxy()).asyncSubscribe(new MemberAndWeixinUserDTO(memberDTO, userWeixinDTO));
// 大屏信息
JSONObject iptvUserInfo = resources.getIptvUserInfo();
log.info("存储的大小屏账号信息 iptvUserInfo ==>> {}" , iptvUserInfo);
if (Objects.nonNull(iptvUserInfo)) {
// 大屏账户
String platformAccount = iptvUserInfo.getString("platformAccount");
log.info("存储的大屏账号信息 platformAccount ==>> {}" , platformAccount);
log.info("绑定开始");
if (StringUtils.isBlank(platformAccount)) {
log.warn("绑定失败,platformAccount is null ");
log.error("关注后绑定失败,platformAccount is null ");
return false;
}
......@@ -563,20 +560,44 @@ public class UserOperationServiceImpl implements UserOperationService {
String openId = resources.getOpenid();
// 修改关注状态 0:未关注
UserWeixinDTO userWeixinDTO = this.doUpdateUserWeiXinStatus(appId, openId, UNSUBSCRIBE_STATUS);
UserWeixinDTO userWeixinDTO = this.userWeixinService.findFirstByAppIdAndOpenId(appId, openId);
if (Objects.isNull(userWeixinDTO.getId())) {
log.error("取关失败,通过appid ==>> {} 和 openId ==>> {} 无法查询到指定的微信账号", appId, openId);
return false;
}
if (Objects.isNull(userWeixinDTO.getMemberId())) {
log.error("取关失败,该微信账号无会员id ==>> {}", userWeixinDTO);
return false;
}
UserWeixin userWeixin = new UserWeixin();
userWeixin.setId(userWeixinDTO.getId());
userWeixin.setStatus(UNSUBSCRIBE_STATUS);
userWeixinDTO = this.userWeixinService.doUpdateWeixinStatus(userWeixin);
// 会员
MemberDTO memberDTO = this.findMemberByUserWeixinDTO(userWeixinDTO);
MemberDTO memberDTO = this.memberService.findById(userWeixinDTO.getMemberId());
memberDTO.setUserIptvId(null);
// 修改会员vip,如果没有购买会员则取消团粉
MemberDTO _memberDTO = this.doUpdateMemberVip(memberDTO, 0);
// 同步至iptv
((UserOperationServiceImpl)AopContext.currentProxy()).asyncUnsubscribe(new MemberAndWeixinUserDTO(_memberDTO, userWeixinDTO));
Integer vip = memberDTO.getVip();
vip = (vip == null ? 0 : vip);
// 未购买付费会员
if (vip <= 1) {
Member member = new Member();
member.setId(memberDTO.getId());
member.setCode(memberDTO.getCode());
member.setVipExpireTime(null);
member.setVip(0);
memberDTO = this.memberService.doUpdateMemberVipAndVipExpireTime(member);
}
// 关注记录
this.saveWechatSubscribeRecord(_memberDTO, "",2);
this.saveWechatSubscribeRecord(memberDTO, "",2);
// 同步至iptv
((UserOperationServiceImpl)AopContext.currentProxy()).asyncUnsubscribe(new MemberAndWeixinUserDTO(memberDTO, userWeixinDTO));
return true;
}
......@@ -656,31 +677,35 @@ public class UserOperationServiceImpl implements UserOperationService {
* @param resources
*/
@Override
public void changeMainAccount(UserTv resources) {
public boolean changeMainAccount(UserTv resources) {
// 会员编码
String memberCode = resources.getMemberCode();
this.findMemberByCode(memberCode);
MemberDTO memberDTO = this.memberService.findByCode(memberCode);
if (Objects.isNull(memberDTO.getId())) {
log.error("会员信息不存在, memberCode ==>> {}", memberCode);
return false;
}
String platformAccount = resources.getPlatformAccount();
UserTvDTO userTvDTO = this.findByPlatformAccount(platformAccount);
UserTvDTO userTvDTO = this.userTvService.findByPlatformAccount(platformAccount);
if (Objects.nonNull(userTvDTO)) {
if (StringUtils.isNotBlank(userTvDTO.getPriorityMemberCode()) && userTvDTO.getPriorityMemberCode().equalsIgnoreCase(memberCode))
throw new BadRequestException("会员已是主账户");
} else {
throw new EntityNotFoundException(UserTvDTO.class , "platformAccount" , GlobeExceptionMsg.IPTV_IS_NULL);
}
// 设置主会员
UserTvDTO _userTvDTO = this.bondPriorityMember(userTvDTO, memberCode, "manual");
// UserTvDTO _userTvDTO = this.bondPriorityMember(userTvDTO, memberCode, "manual");
UserTv userTv = new UserTv();
userTv.setId(userTvDTO.getId());
userTv.setPriorityMemberCode(memberCode);
userTvDTO = this.userTvService.doUpdatePriorityMemberCode(userTv);
// 同步至iptv
((UserOperationServiceImpl)AopContext.currentProxy()).asyncUserTv(_userTvDTO);
((UserOperationServiceImpl)AopContext.currentProxy()).asyncUserTvChangeMainAccount(userTvDTO);
return true;
}
/**
......@@ -688,41 +713,47 @@ public class UserOperationServiceImpl implements UserOperationService {
* @param resources
*/
@Override
public void tvUnbind(TvUnBindBean resources) {
public boolean tvUnbind(TvUnBindBean resources) {
Boolean autoModel = resources.getAutoModel();
// 希望绑定的会员code
String bindMemberCode = resources.getBindMemberCode();
String platformAccount = resources.getPlatformAccount();
String memberCode = resources.getMemberCode();
UserTvDTO userTvDTO = this.findByPlatformAccount(platformAccount);
UserTvDTO userTvDTO = this.userTvService.findByPlatformAccount(platformAccount);
log.info("大屏解绑,通过大屏账号查询大屏账号信息,结果 userTvDTO ==>> {}", userTvDTO);
if (Objects.isNull(userTvDTO.getId()))
throw new EntityNotFoundException(UserTvDTO.class, "PlatformAccount", GlobeExceptionMsg.IPTV_IS_NULL);
if (Objects.isNull(userTvDTO.getId())) {
log.error("大屏解绑失败,无对应的大屏账号信息, platformAccount ==>> {}", platformAccount);
return false;
}
MemberDTO memberDTO = this.memberService.findByCode(memberCode);
log.info("大屏解绑,通过会员code查询会员信息,结果memberDTO==>>{}", memberDTO);
if (Objects.isNull(memberDTO.getId())) {
log.error("大屏解绑失败,无对应的会员信息, memberCode ==>> {}", memberCode);
return false;
}
// 解绑(置空大屏信息)
log.info("开始置空会员的user_iptv_id ==>> {}", memberDTO);
MemberDTO _memberDTO = this.minaUnbind_(memberDTO);
if (Objects.isNull(_memberDTO)) {
_memberDTO = memberDTO;
}
log.info("会员信息置空大屏的结果,_memberDTO ==>> {}", _memberDTO);
Member member = new Member();
member.setId(memberDTO.getId());
member.setCode(memberDTO.getCode());
member.setBindIptvTime(null);
member.setUserIptvId(null);
member.setBindIptvPlatformType(null);
log.info("置空会员绑定的大屏信息, member ==>> {}", member);
memberDTO = this.memberService.doUpdateMemberUserIptvIdAndBindIptvPlatformAndBindIptvTime(member);
log.info("会员信息置空大屏的结果,memberDTO ==>> {}", memberDTO);
memberDTO.setPlatformAccount(platformAccount);
// 置空主账号
log.info("开始置空大屏账号的主会员priorityMemberCode");
UserTvDTO _userTvDTO = this.resetMainAccount(memberCode, userTvDTO.getId(), autoModel, bindMemberCode);
if (Objects.isNull(_userTvDTO)){
_userTvDTO = userTvDTO;
}
log.info("大屏账号置空主会员的结果,_userTvDTO ==>> {}", _userTvDTO);
userTvDTO = this.resetMainAccount(memberDTO, userTvDTO, bindMemberCode);
userTvDTO.setMemberCode(memberCode);
// 同步至iptv
log.info("开始同步解绑,参数 ==>> {} ",new MemberAndUserTvDTO(_memberDTO, _userTvDTO));
((UserOperationServiceImpl)AopContext.currentProxy()).asyncUnbind(new MemberAndUserTvDTO(_memberDTO, _userTvDTO));
log.info("大屏账号置空主会员的结果,userTvDTO ==>> {}", userTvDTO);
((UserOperationServiceImpl)AopContext.currentProxy()).asyncUnbind(new MemberAndUserTvDTO(memberDTO, userTvDTO));
return true;
}
......@@ -919,57 +950,60 @@ public class UserOperationServiceImpl implements UserOperationService {
@Override
public boolean minaBind(BindBean resources) {
Long _memberId = resources.getMemberId();
Long memberId = resources.getMemberId();
String platformAccount = resources.getPlatformAccount();
// 大屏账户
UserTvDTO userTvDTO = this.userTvService.findByPlatformAccount(platformAccount);
log.info("查询大屏账号信息, userTvDTO ==>> {}", userTvDTO);
// 账户是否存在
if (Objects.isNull(userTvDTO.getId())) {
log.error("appletBind ==> platformAccount ==> [{}]",platformAccount);
throw new EntityNotFoundException(UserTvDTO.class,"id",GlobeExceptionMsg.IPTV_IS_NULL);
log.error("大屏账号信息不存在,platformAccount ==> {}",platformAccount);
return false;
}
resources.setPlatformUserId(userTvDTO.getId());
UserWeixinDTO userWeixinDTO = null;
// 微信账户
if (Objects.nonNull(_memberId)) {
userWeixinDTO = this.userWeixinService.findFirstByMemberId(_memberId);
}
// 账户是否存在
if (Objects.isNull(userWeixinDTO.getId())) {
log.error("appletBind ==> weixinId ==> [{}]",userWeixinDTO.getId());
throw new EntityNotFoundException(UserWeixinDTO.class, "id", userWeixinDTO.getId().toString());
if (Objects.nonNull(memberId)) {
UserWeixinDTO userWeixinDTO = this.userWeixinService.findFirstByMemberId(memberId);
log.info("检查小屏账号是否存在, userWeixinDTO ==>> {}", userWeixinDTO);
// 账户是否存在
if (Objects.isNull(userWeixinDTO.getId())) {
log.error("通过会员id无法找到对应的微信账号,memberId ==> {}", memberId);
return false;
}
}
// 会员
Long memberId = userWeixinDTO.getMemberId();
if (Objects.isNull(memberId)) {
log.error("appletBind ==> memberId ==> [{}]",memberId);
throw new EntityNotFoundException(UserWeixinDTO.class, "memberId", memberId.toString());
MemberDTO memberDTO = this.memberService.findById(memberId);
log.info("检查会员是否存在, memberDTO ==>> {}", memberDTO);
if (Objects.nonNull(memberDTO.getId())) {
Long userIptvId = memberDTO.getUserIptvId();
if (Objects.nonNull(userIptvId)) {
log.error("该会员已绑定,大屏id ==> {}", userIptvId);
throw new BadRequestException(GlobeExceptionMsg.ALREADY_BIND);
}
} else {
log.error("会员信息不存在,请检查数据, memberId ==>> {}", memberId);
return false;
}
MemberDTO memberDTO = this.findMemberById(memberId);
Long userIptvId = memberDTO.getUserIptvId();
if (Objects.nonNull(userIptvId))
throw new BadRequestException(GlobeExceptionMsg.ALREADY_BIND);
// 主账户会员
String code = memberDTO.getCode();
// 更新大屏信息,同步大屏信息时使用
userTvDTO.setMemberCode(code);
// 主账户
String priorityMemberCode = userTvDTO.getPriorityMemberCode();
if (StringUtils.isBlank(priorityMemberCode)) {
// 设置主账号
userTvDTO.setPriorityMemberCode(code);
priorityMemberCode = memberDTO.getCode();
log.info("大屏账号为绑定主账号,开始设置主会员 priorityMemberCode ==>> {}", priorityMemberCode);
UserTv userTv = new UserTv();
userTv.setId(userTvDTO.getId());
userTv.setPriorityMemberCode(priorityMemberCode);
// 更新大屏账户
userTvDTO = this.userTvService.doUpdatePriorityMemberCode(userTv);
userTvDTO.setMemberCode(memberDTO.getCode());
}
Member member = new Member();
member.setId(memberDTO.getId());
member.setCode(memberDTO.getCode());
String platform = userTvDTO.getPlatform();
// 绑定IPTV平台 0:未知;1:电信;2:移动;3:联通
Integer bindIptvPlatformType = 0;
......@@ -985,54 +1019,23 @@ public class UserOperationServiceImpl implements UserOperationService {
if (UserConstant.platform_dx.contains(platform)) {
bindIptvPlatformType = PLATFORM_LIST[1];
}
memberDTO.setUserIptvId(userTvDTO.getId());
memberDTO.setBindIptvTime(TimestampUtil.now());
memberDTO.setBindIptvPlatformType(bindIptvPlatformType);
memberDTO.setPlatformAccount(platformAccount);
// 更新大屏账户
UserTvDTO _userTvDTO = this.doUpdateUserTv(userTvDTO);
member.setUserIptvId(userTvDTO.getId());
member.setBindIptvTime(TimestampUtil.now());
member.setBindIptvPlatformType(bindIptvPlatformType);
log.info("修改小屏会员对应的绑定关系,member ==>> {}", member);
// 修改会员信息
MemberDTO _memberDTO = this.doUpdateMemberByMemberDTO(memberDTO);
memberDTO = this.memberService.doUpdateMemberUserIptvIdAndBindIptvPlatformAndBindIptvTime(member);
memberDTO.setPlatformAccount(platformAccount);
// 同步至iptv
((UserOperationServiceImpl)AopContext.currentProxy())
.asyncAppletBind(new MemberAndUserTvDTO(_memberDTO, _userTvDTO));
.asyncAppletBind(new MemberAndUserTvDTO(memberDTO, userTvDTO));
return true;
}
/**
*
* @param memberCode
* @param platformAccount
*/
@Override
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public void bind(String memberCode, String platformAccount) {
MemberDTO memberDTO = this.memberService.findByCode(memberCode);
this.bind(memberDTO,platformAccount);
}
/**
*
* @param memberDTO
* @param userTvDTO
*/
@Override
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public void bind(MemberDTO memberDTO, UserTvDTO userTvDTO) {
String platformAccount = userTvDTO.getPlatformAccount();
if (StringUtils.isBlank(platformAccount)) {
return;
}
// 绑定
this.bind(memberDTO,platformAccount);
}
/**
*
* @param memberDTO
* @param platformAccount
* @return
......@@ -1119,8 +1122,11 @@ public class UserOperationServiceImpl implements UserOperationService {
memberDTO.setVip(vip1);
Member member = new Member();
BeanUtils.copyProperties(memberDTO, member);
this.memberService.update(member);
member.setId(memberDTO.getId());
member.setCode(memberDTO.getCode());
member.setVipExpireTime(null);
// this.memberService.update(member);
this.memberService.doUpdateMemberVipAndVipExpireTime(member);
return memberDTO;
}
......@@ -1153,13 +1159,11 @@ public class UserOperationServiceImpl implements UserOperationService {
if (Objects.nonNull(userWeixinDTO.getId())) {
userWeixinDTO.setStatus(status);
UserWeixin userWeixin = new UserWeixin();
BeanUtils.copyProperties(userWeixinDTO,userWeixin);
this.userWeixinService.update(userWeixin);
userWeixin.setId(userWeixinDTO.getId());
userWeixin.setStatus(status);
userWeixinDTO = this.userWeixinService.doUpdateWeixinStatus(userWeixin);
return userWeixinDTO;
}
return userWeixinDTO;
......@@ -1245,58 +1249,47 @@ public class UserOperationServiceImpl implements UserOperationService {
/**
* 重置主账号
* @param memberCode 会员code
* @param id 大屏id
* @param autoModel true:自动设置主账号 false: 手动设置
* @param memberDTO 会员code
* @param userTvDTO 大屏id
* @param bindMemberCode true:自动设置主账号 false: 手动设置
*/
private UserTvDTO resetMainAccount(String memberCode, Long id, Boolean autoModel, String bindMemberCode) {
private UserTvDTO resetMainAccount(MemberDTO memberDTO, UserTvDTO userTvDTO, String bindMemberCode) {
UserTvDTO userTvDTO = this.userTvService.findByPriorityMemberCode(memberCode);
log.info("大屏解绑,重置大屏账号的主会员,查看当前会员是否是主账号 ==>>memberCode ==>> {} || 大屏账号 ==>> userTvDTO ==>> {}", userTvDTO);
if (Objects.nonNull(userTvDTO.getId())) {
log.info("主账号存在");
if (StringUtils.isBlank(bindMemberCode)) {
// 有其他绑定的小程序会员,排除自己
/*List<MemberDTO> memberDTOList = this.memberService.findByUserIptvId(id);
log.info("后台指定一个默认主会员,通过大屏id查询到的绑定的小屏会员memberDTOList ==>> {}", memberDTOList);
if (!CollectionUtils.isEmpty(memberDTOList)) {
Long memberId = userTvDTO.getMemberId();
MemberDTO memberDTO1 = this.memberService.findById(memberId);
List<MemberDTO> collect =
memberDTOList.stream().filter(memberDTO ->
!memberDTO.getCode().equalsIgnoreCase(memberCode) &&
!memberDTO.getCode().equalsIgnoreCase(memberDTO1.getCode())).collect(Collectors.toList());
log.info("过滤掉当前需要解绑的会员以及绑定的大屏会员之后剩余的会员列表 ==>> {}", memberDTOList);
if (!CollectionUtils.isEmpty(collect)) {
// 按绑定时间倒排
collect.sort(new Comparator<MemberDTO>() {
@Override
public int compare(MemberDTO memberDTO, MemberDTO t1) {
return t1.getBindIptvTime().compareTo(memberDTO.getBindIptvTime());
}
});
// 绑定新的主账号
UserTvDTO _userTvDTO = this.bondPriorityMember(userTvDTO, memberDTOList.get(0).getCode(), "manual");
log.info("绑定新的主账号 ==>> _userTvDTO ==>> {}", _userTvDTO);
return _userTvDTO;
}
} else {
if (StringUtils.isBlank(bindMemberCode)) {
// 有其他绑定的小程序会员,排除自己
/*List<MemberDTO> memberDTOList = this.memberService.findByUserIptvId(id);
log.info("后台指定一个默认主会员,通过大屏id查询到的绑定的小屏会员memberDTOList ==>> {}", memberDTOList);
if (!CollectionUtils.isEmpty(memberDTOList)) {
Long memberId = userTvDTO.getMemberId();
MemberDTO memberDTO1 = this.memberService.findById(memberId);
List<MemberDTO> collect =
memberDTOList.stream().filter(memberDTO ->
!memberDTO.getCode().equalsIgnoreCase(memberCode) &&
!memberDTO.getCode().equalsIgnoreCase(memberDTO1.getCode())).collect(Collectors.toList());
log.info("过滤掉当前需要解绑的会员以及绑定的大屏会员之后剩余的会员列表 ==>> {}", memberDTOList);
if (!CollectionUtils.isEmpty(collect)) {
// 按绑定时间倒排
collect.sort(new Comparator<MemberDTO>() {
@Override
public int compare(MemberDTO memberDTO, MemberDTO t1) {
return t1.getBindIptvTime().compareTo(memberDTO.getBindIptvTime());
}
});
log.info("无其他绑定的小屏会员信息 ");
// 绑定新的主账号
UserTvDTO _userTvDTO = this.bondPriorityMember(userTvDTO, null, "manual");
UserTvDTO _userTvDTO = this.bondPriorityMember(userTvDTO, memberDTOList.get(0).getCode(), "manual");
log.info("绑定新的主账号 ==>> _userTvDTO ==>> {}", _userTvDTO);
return _userTvDTO;
}*/
}
} else {
log.info("无其他绑定的小屏会员信息 ");
// 绑定新的主账号
......@@ -1304,50 +1297,30 @@ public class UserOperationServiceImpl implements UserOperationService {
log.info("绑定新的主账号 ==>> _userTvDTO ==>> {}", _userTvDTO);
return _userTvDTO;
} else {
}*/
this.memberService.findByCode(bindMemberCode);
// 绑定新的主账号
// UserTvDTO _userTvDTO = this.bondPriorityMember(userTvDTO, null, "manual");
UserTv userTv = new UserTv();
userTv.setId(userTvDTO.getId());
userTv.setPlatform(userTvDTO.getPlatformAccount());
userTv.setPriorityMemberCode(null);
UserTvDTO _userTvDTO = this.userTvService.doUpdatePriorityMemberCode(userTv);
log.info("绑定新的主账号 ==>> _userTvDTO ==>> {}", _userTvDTO);
return _userTvDTO;
// 绑定新的主账号
UserTvDTO _userTvDTO = this.bondPriorityMember(userTvDTO, bindMemberCode, "manual");
} else {
return _userTvDTO;
UserTv userTv = new UserTv();
userTv.setId(userTvDTO.getId());
userTv.setPlatform(userTvDTO.getPlatformAccount());
userTv.setPriorityMemberCode(bindMemberCode);
// 绑定新的主账号
UserTvDTO _userTvDTO = this.userTvService.doUpdatePriorityMemberCode(userTv);
}
return _userTvDTO;
}
return userTvDTO;
}
/**
* 解绑(置空大屏信息)
* @param memberDTOS
*/
private MemberDTO minaUnbind_(MemberDTO memberDTOS) {
// 若无关系,不做处理
if (Objects.nonNull(memberDTOS) && Objects.isNull(memberDTOS.getUserIptvId()))
return null;
Member member = new Member();
memberDTOS.setBindIptvTime(null);
memberDTOS.setUserIptvId(null);
memberDTOS.setBindIptvPlatformType(null);
BeanUtils.copyProperties(memberDTOS, member);
log.info("大屏绑定,置空绑定的大屏信息, member ==>> {}", member);
MemberDTO memberDTO = this.memberService.update(member);
return memberDTO;
}
/**
*
* @param memberCode 会员编码
* @return
*/
private MemberDTO findMemberByCode(String memberCode) {
return memberService.findByCode(memberCode);
}
/**
......@@ -1380,17 +1353,6 @@ public class UserOperationServiceImpl implements UserOperationService {
}
/**
* 更新大屏
* @param userTvDTO
*/
private UserTvDTO doUpdateUserTv(UserTvDTO userTvDTO) {
UserTv userTv = new UserTv();
BeanUtils.copyProperties(userTvDTO,userTv);
userTv.setUpdateTime(TimestampUtil.now());
return this.userTvService.update(userTv);
}
/**
* 同一用户有多个微信APP的情况下展示同一个账户信息
* 原则:那个先创建就用那个id
* @param userWeixinDTO
......@@ -1440,17 +1402,6 @@ public class UserOperationServiceImpl implements UserOperationService {
/**
* 获取小屏账户
* @param unionId
* @param appId
* @param openId
* @return
*/
private UserWeixinDTO findFirstByUnionIdAndAppIdAndOpenId(String unionId, String appId, String openId) {
return this.userWeixinService.findFirstByUnionIdAndAppIdAndOpenId(unionId,appId,openId);
}
/**
* 获取小屏账户
* @param appId
* @param openId
* @return
......@@ -1524,21 +1475,86 @@ public class UserOperationServiceImpl implements UserOperationService {
}
@Override
public void minaUnbind(WeixinUnBindBean weixinUnBindBean) {
public boolean minaUnbind(WeixinUnBindBean weixinUnBindBean) {
Long memberId = weixinUnBindBean.getMemberId();
MemberDTO memberDTO = this.memberService.findById(memberId);
if (Objects.isNull(memberDTO.getId())) {
log.error("小屏解绑失败,会员信息不存在 memberId ==>> {}", memberId);
return false;
}
Assert.notNull(memberDTO.getUserIptvId(), GlobeExceptionMsg.IPTV_IS_NULL);
if (Objects.isNull(memberDTO.getUserIptvId())) {
log.error("小屏解绑失败,未查询到大屏的大屏信息, memberId ==>> {}", memberId);
return false;
}
UserTvDTO userTvDTO = this.userTvService.findById(memberDTO.getUserIptvId());
if (Objects.isNull(userTvDTO.getId())) {
log.info("小屏解绑失败,绑定的大屏账号不存在 userIptvId ==>> {}", memberDTO.getUserIptvId());
return false;
}
boolean b = this.tvUnbindAndSetNewPriorityMemberCode(memberDTO, userTvDTO);
return b;
}
TvUnBindBean tvUnBindBean = new TvUnBindBean();
tvUnBindBean.setMemberId(memberId);
tvUnBindBean.setAutoModel(weixinUnBindBean.getAutoModel());
String platformAccount = userTvDTO.getPlatformAccount();
tvUnBindBean.setPlatformAccount(platformAccount);
this.tvUnbind(tvUnBindBean);
private boolean tvUnbindAndSetNewPriorityMemberCode(MemberDTO memberDTO, UserTvDTO userTvDTO) {
// 解绑(置空大屏信息)
Member member = new Member();
member.setId(memberDTO.getId());
member.setCode(memberDTO.getCode());
member.setBindIptvTime(null);
member.setUserIptvId(null);
member.setBindIptvPlatformType(null);
log.info("置空会员绑定的大屏信息, member ==>> {}", member);
memberDTO = this.memberService.doUpdateMemberUserIptvIdAndBindIptvPlatformAndBindIptvTime(member);
log.info("会员信息置空大屏的结果,memberDTO ==>> {}", memberDTO);
memberDTO.setPlatformAccount(userTvDTO.getPlatformAccount());
// 有其他绑定的小程序会员,排除自己
List<MemberDTO> memberDTOS = this.memberService.findByUserIptvId(userTvDTO.getId());
log.info("后台指定一个默认主会员,通过大屏id查询到的绑定的小屏会员memberDTOList ==>> {}", memberDTOS);
if (!CollectionUtils.isEmpty(memberDTOS)) {
String oldMemberCode = memberDTO.getCode();
List<MemberDTO> collect =
memberDTOS.stream().filter(memberDTO_ ->
!memberDTO_.getCode().equalsIgnoreCase(oldMemberCode)).collect(Collectors.toList());
log.info("过滤掉当前会员 ==>> {}", collect);
if (!CollectionUtils.isEmpty(collect)) {
// 按绑定时间倒排
collect.sort(new Comparator<MemberDTO>() {
@Override
public int compare(MemberDTO memberDTO, MemberDTO t1) {
return t1.getBindIptvTime().compareTo(memberDTO.getBindIptvTime());
}
});
// 绑定新的主账号
UserTv userTv = new UserTv();
userTv.setId(userTvDTO.getId());
userTv.setPlatform(userTvDTO.getPlatformAccount());
userTv.setPriorityMemberCode(collect.get(0).getCode());
userTvDTO = this.userTvService.doUpdatePriorityMemberCode(userTv);
log.info("大屏账号绑定新的主账号 ==>> userTvDTO ==>> {}", userTvDTO);
}
} else {
log.info("无其他绑定的小屏会员信息 ");
// 绑定新的主账号
UserTv userTv = new UserTv();
userTv.setId(userTvDTO.getId());
userTv.setPlatform(userTvDTO.getPlatformAccount());
userTv.setPriorityMemberCode(null);
userTvDTO = this.userTvService.doUpdatePriorityMemberCode(userTv);
log.info("大屏账号置空主会员的结果,userTvDTO ==>> {}", userTvDTO);
}
log.info("同步绑定信息至大屏侧, 参数 ==>> {}", new MemberAndUserTvDTO(memberDTO, userTvDTO));
((UserOperationServiceImpl)AopContext.currentProxy()).asyncUnbind(new MemberAndUserTvDTO(memberDTO, userTvDTO));
return true;
}
@Override
......
......@@ -3,58 +3,53 @@ package com.topdraw.business.process.service.impl.member;
import cn.hutool.core.util.ObjectUtil;
import com.topdraw.aspect.AsyncMqSend;
import com.topdraw.business.module.member.domain.Member;
import com.topdraw.business.module.member.profile.domain.MemberProfile;
import com.topdraw.business.module.member.profile.service.MemberProfileService;
import com.topdraw.business.module.member.profile.service.dto.MemberProfileDTO;
import com.topdraw.business.module.member.service.MemberService;
import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.business.module.member.viphistory.domain.MemberVipHistory;
import com.topdraw.business.module.member.viphistory.service.MemberVipHistoryService;
import com.topdraw.business.module.task.domain.Task;
import com.topdraw.business.module.user.weixin.domain.UserWeixin;
import com.topdraw.business.module.user.weixin.service.UserWeixinService;
import com.topdraw.business.module.user.weixin.service.dto.UserWeixinDTO;
import com.topdraw.business.process.domian.weixin.BuyVipBean;
import com.topdraw.business.process.service.member.MemberOperationService;
import com.topdraw.business.process.service.member.MemberProfileOperationService;
import com.topdraw.config.RedisKeyConstants;
import com.topdraw.exception.EntityNotFoundException;
import com.topdraw.util.TimestampUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Objects;
@Service
//@CacheConfig(cacheNames = "member")
@Slf4j
@CacheConfig(cacheNames = RedisKeyConstants.cacheMemberById)
public class MemberOperationServiceImpl implements MemberOperationService {
@Autowired
private MemberService memberService;
@Autowired
private UserWeixinService userWeixinService;
@Autowired
private MemberProfileService memberProfileService;
@Autowired
private MemberVipHistoryService memberVipHistoryService;
@Autowired
private UserWeixinService userWeixinService;
@Autowired
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
@AsyncMqSend
public void asyncUpdateMemberVip(MemberDTO me) {}
public void asyncUpdateMemberVip(MemberDTO memberDTO) {}
// @CachePut(key = "#resources.memberId")
@Override
public MemberDTO buyVipByUserId(BuyVipBean resources) {
// 小程序账户id
......@@ -96,12 +91,12 @@ public class MemberOperationServiceImpl implements MemberOperationService {
}
memberDTO.setVip(vip1);
memberDTO.setVipExpireTime(vipExpireTime);
Member member = new Member();
BeanUtils.copyProperties(memberDTO,member);
this.update(member);
member.setVip(vip1);
member.setVipExpireTime(vipExpireTime);
this.doUpdateMemberVipAndVipExpireTime(member);
MemberVipHistory memberVipHistory = new MemberVipHistory();
memberVipHistory.setMemberId(memberId).setVip(vip1).setBeforeVip(vip);
......@@ -148,7 +143,6 @@ public class MemberOperationServiceImpl implements MemberOperationService {
return this.update(resources);
}
// @CachePut(key = "#resources.id")
@Override
public MemberDTO doInsertMember(Member resources) {
return this.memberService.create(resources);
......@@ -160,34 +154,39 @@ public class MemberOperationServiceImpl implements MemberOperationService {
return Objects.nonNull(memberId) ? memberDTO : null;
}
// @CachePut(key = "#resources.id")
@Override
public MemberDTO doUpdateMemberExpAndLevel(Member resources) {
return this.memberService.doUpdateMemberExpAndLevel(resources);
return this.memberService.doUpdateMemberExpAndLevel(resources);
}
// @CachePut(key = "#resources.id")
@Override
public MemberDTO doUpdateMemberPoints(Member resources) {
return this.memberService.doUpdateMemberPoints(resources);
return this.memberService.doUpdateMemberPoints(resources);
}
// @CachePut(key = "#resources.id")
@Override
@CachePut(cacheNames = RedisKeyConstants.cacheMemberById, key = "#member.id")
public MemberDTO doUpdateMemberCoupon(Member member) {
return this.memberService.doUpdateMemberCoupon(member);
return this.memberService.doUpdateMemberCoupon(member);
}
@Override
public MemberDTO updateMemberVip(Member member) {
// @CachePut(cacheNames = RedisKeyConstants.cacheMemberById, key = "#member.id")
public MemberDTO doUpdateMemberVipAndVipExpireTime(Member member) {
MemberDTO memberDTO1 = this.memberService.findByCode(member.getCode());
Member member1 = new Member();
BeanUtils.copyProperties(memberDTO1, member1);
member1.setId(memberDTO1.getId());
member1.setCode(memberDTO1.getCode());
member1.setVip(member.getVip());
member1.setVipExpireTime(member.getVipExpireTime());
MemberDTO memberDTO = this.update(member1);
((MemberOperationServiceImpl) AopContext.currentProxy()).asyncUpdateMemberVip(memberDTO);
return memberDTO;
MemberDTO memberDTO_ = this.memberService.doUpdateMemberVipAndVipExpireTime(member1);
((MemberOperationServiceImpl) AopContext.currentProxy()).asyncUpdateMemberVip(memberDTO_);
return memberDTO_;
}
@Override
......@@ -225,11 +224,12 @@ public class MemberOperationServiceImpl implements MemberOperationService {
MemberDTO memberDTO1 = this.checkVipStatus(memberDTO,vipExpireTime,appid);
// 更新会员信息
this.threadPoolTaskExecutor.execute(()->{
Member member = new Member();
BeanUtils.copyProperties(memberDTO1,member);
this.update(member);
});
Member member = new Member();
member.setId(memberDTO1.getId());
member.setCode(memberDTO1.getCode());
member.setVip(memberDTO1.getVip());
member.setVipExpireTime(memberDTO1.getVipExpireTime());
this.doUpdateMemberVipAndVipExpireTime(member);
vip = memberDTO1.getVip();
Timestamp vipExpireTime1 = memberDTO1.getVipExpireTime();
......
......@@ -111,12 +111,15 @@ public class MemberProfileOperationServiceImpl implements MemberProfileOperation
}
private void syncMember(MemberProfileDTO memberProfileDTO, MemberDTO memberDTO) {
memberDTO.setAvatarUrl(memberProfileDTO.getAvatarUrl());
memberDTO.setNickname(memberProfileDTO.getRealname());
memberDTO.setGender(memberProfileDTO.getGender());
Member member = new Member();
BeanUtils.copyProperties(memberDTO, member);
this.memberService.update(member);
member.setId(memberDTO.getId());
member.setCode(memberDTO.getCode());
member.setAvatarUrl(memberProfileDTO.getAvatarUrl());
member.setNickname(memberProfileDTO.getRealname());
member.setGender(memberProfileDTO.getGender());
// this.memberService.update(member);
this.memberService.doUpdateMemberAvatarUrlAndNicknameAndGender(member);
}
......
......@@ -90,5 +90,5 @@ public interface MemberOperationService {
*
* @param member
*/
MemberDTO updateMemberVip(Member member);
MemberDTO doUpdateMemberVipAndVipExpireTime(Member member);
}
......
......@@ -28,4 +28,10 @@ public class LocalConstants {
// 事件类型 3:参加活动
public static final Integer EVT_TYPE_ACTIVITY = 3;
// 会员黑名单状态
public static final Long BLACK_STATUS = 1L;
}
......
package com.topdraw.config;
import cn.hutool.core.util.ObjectUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class ServiceEnvConfig {
// uc两侧部署,需配置位于哪一侧 mobile小屏侧 vis大屏侧
public static String UC_SERVICE_TYPE;
@Value("${uc.service.type:mobile}")
public void setUcServiceType(String ucServiceType) {
UC_SERVICE_TYPE = ucServiceType;
}
public static boolean isMobile() {
return ObjectUtil.equals(UC_SERVICE_TYPE, LocalConstants.ENV_MOBILE);
}
public static boolean isVis() {
return ObjectUtil.equals(UC_SERVICE_TYPE, LocalConstants.ENV_VIS);
}
}
......@@ -23,10 +23,9 @@ public class DataSyncMsg implements Serializable {
// 具体事件 行为事件类型 1:登录;2:观影;3:参与活动;4:订购;10:跨屏绑定;11:积分转移;30:积分兑换商品;98:系统操作;99:其他
private Integer event;
//设备类型 1:大屏;2:小屏(微信)3.小屏(xx)
@NotNull
private Integer deviceType;
// 发送时间
private LocalDateTime time;
private String time;
// 消息体
private String msgData;
......@@ -37,20 +36,32 @@ public class DataSyncMsg implements Serializable {
@AllArgsConstructor
@NoArgsConstructor
public static class MsgData {
private String remarks; //备注
@NotNull
private Long memberId; // 会员id
private Long userId; // 账户id
@NotNull
private String appCode; //用户对应的应用code
/**备注*/
private String remarks;
// 会员id
private Long memberId;
// 账户id
private Long userId;
//用户对应的应用code
private String appCode;
// 会员code
private String memberCode;
private Long accountId; // 账号id
// 账号id
private Long accountId;
// 订单Id
private Long orderId;
// 活动id
private Long activityId;
// 节目id
private Long mediaId;
// 产品id
private Long itemId;
// 模板参数
private String param;
// 描述
private String description;
// 大屏账号
private String platformAccount;
}
}
......
package com.topdraw.mq.producer;
import com.topdraw.business.process.service.impl.PointsOperationServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
......@@ -57,4 +59,5 @@ public class MessageProducer {
amqpTemplate.convertAndSend(exchange, queue, msg);
log.info("send sendMessage msg || exchange: {} || queue: {} || msg:{} ", exchange, queue, msg);
}
}
......
......@@ -142,4 +142,8 @@ weixin:
env: dev
api:
uc-service: http://127.0.0.1:8446
\ No newline at end of file
uc-service: http://127.0.0.1:8446
uc:
# 主会员是否启用,如果启用任务获得的积分将添加至小屏会员上
validPriorityMember: 0
\ No newline at end of file
......
......@@ -179,6 +179,13 @@ public class TaskOperationControllerTest extends BaseTest {
this.taskOperationController.deleteTask(task);
}
@Test
public void dealTask() {
String content = "{\"deviceType\":1,\"event\":8,\"evt\":\"PLAY\",\"msgData\":\"{\\\"description\\\":\\\"{\\\\\\\"playDuration\\\\\\\":1,\\\\\\\"time\\\\\\\":\\\\\\\"2022-05-03 23:10:09\\\\\\\",\\\\\\\"mediaId\\\\\\\":432,\\\\\\\"mediaCode\\\\\\\":\\\\\\\"media_123\\\\\\\",\\\\\\\"mediaName\\\\\\\":\\\\\\\"白宫陷落\\\\\\\"}\\\",\\\"mediaId\\\":432,\\\"platformAccount\\\":\\\"6002110106@ITVP\\\",\\\"param\\\":\\\"{\\\\\\\"playDuration\\\\\\\":1}\\\"}\",\"time\":\"2022-06-17T13:07:16.433\"}\n";
TaskOperationQueryCriteria task = new TaskOperationQueryCriteria();
task.setContent(content);
this.taskOperationController.dealTask(task);
}
}
......