Commit b6b0161f b6b0161f43d63f59505ca8cdf4b2216dbd8c2154 by xianghan

1.添加批量修改会员分组功能

1 parent 6fa8615f
......@@ -11,6 +11,7 @@ import org.springframework.data.repository.query.Param;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import java.util.Set;
/**
* @author XiangHan
......@@ -64,4 +65,8 @@ public interface MemberRepository extends JpaRepository<Member, Long>, JpaSpecif
@Query(value = "SELECT IFNULL(`exp`,0) AS exp FROM uc_member WHERE `id` = ?1 ", nativeQuery = true)
Long findExpByMemberId(Long memberId);
@Modifying
@Query(value = "UPDATE `uc_member` SET `groups` = ?1, `update_time` = now() WHERE `code` IN ?2 ", nativeQuery = true)
Integer doUpdateGroupsBatch(String groups, Set<String> codes);
}
......
......@@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Objects;
/**
......@@ -57,6 +58,17 @@ public class MemberController {
return ResultInfo.success();
}
@RequestMapping(value = "/doUpdateGroupsBatch")
@AnonymousAccess
@ApiOperation("批量手动修改会员分组")
public ResultInfo doUpdateGroupsBatch(@Validated(value = {UpdateGroup.class}) @RequestBody List<Member> resources) {
log.info("doUpdateGroupsBatch ==>> param ==>> {}",resources);
Integer count = this.memberOperationService.doUpdateGroupsBatch(resources);
return ResultInfo.success(count);
}
@PutMapping(value = "/update")
@ApiOperation("修改会员信息")
@AnonymousAccess
......
......@@ -135,4 +135,10 @@ public interface MemberService {
*/
Long findExpByMemberId(Long memberId);
/**
*
* @param resources
* @return
*/
Integer doUpdateGroupsBatch(List<Member> resources);
}
......
......@@ -28,7 +28,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.validation.constraints.NotNull;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author XiangHan
......@@ -214,6 +216,13 @@ public class MemberServiceImpl implements MemberService {
return this.memberRepository.findExpByMemberId(memberId);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Integer doUpdateGroupsBatch(List<Member> resources) {
Set<String> codes = resources.stream().map(t -> t.getCode()).collect(Collectors.toSet());
return this.memberRepository.doUpdateGroupsBatch( resources.get(0).getGroups(), codes);
}
@Override
@Transactional(rollbackFor = Exception.class)
......
......@@ -28,5 +28,5 @@ public class SubscribeBean extends WeiXinUserBean {
private String nickname;
private String headimgurl;
private String sourceInfo;
private JSONObject sourceInfo;
}
......
package com.topdraw.business.process.domian.weixin;
/**
* @author :
* @description:
* @function :
* @date :Created in 2022/7/4 16:36
* @version: :
* @modified By:
* @since : modified in 2022/7/4 16:36
*/
public interface SubscribeSourceTypeConstant {
int type1 = 1;
int type2 = 2;
}
......@@ -345,33 +345,34 @@ public class UserOperationController {
}
// 大屏账户信息
JSONObject iptvUserInfo = null;
JSONObject redisInfo = null;
// 缓存的大屏信息,使用unionid即可
String content = (String) this.redisUtils.get(RedisKeyUtil.genSeSuSubscribeKey(unionId));
log.info("获取redis中存储的数据,[subscribe#{}]", content);
if (StringUtils.isNotBlank(content)) {
// 大屏信息
iptvUserInfo = JSONObject.parseObject(content);
redisInfo = JSONObject.parseObject(content);
}
// 用户自己搜索关注就没有大屏信息,否则表示扫码关注
if (Objects.nonNull(iptvUserInfo)) {
if (Objects.nonNull(redisInfo)) {
subscribeBean.setIptvUserInfo(iptvUserInfo);
Object sourceInfo1 = iptvUserInfo.get("sourceInfo");
if (Objects.nonNull(sourceInfo1)) {
String sourceInfo = sourceInfo1.toString();
if (StringUtils.isNotBlank(sourceInfo))
subscribeBean.setIptvUserInfo(redisInfo);
// 关注来源信息
JSONObject sourceInfo = JSONObject.parseObject(redisInfo.get("sourceInfo").toString(), JSONObject.class);
log.info("关注来源信息,[subscribe#{}]", sourceInfo);
if (Objects.nonNull(sourceInfo)) {
subscribeBean.setSourceInfo(sourceInfo);
}
String nickname = iptvUserInfo.get("nickname").toString();
String nickname = redisInfo.get("nickname").toString();
if (StringUtils.isNotBlank(nickname)) {
String nicknameDecode = URLDecoder.decode(nickname, "UTF-8");
String nicknameEncode = Base64Util.encode(nicknameDecode);
subscribeBean.setNickname(nicknameEncode);
}
String headimgurl = iptvUserInfo.get("headimgurl").toString();
String headimgurl = redisInfo.get("headimgurl").toString();
log.info("parseSubscribe ==>> headimgurl ==>> {}", headimgurl);
if (StringUtils.isNotBlank(headimgurl)) {
String headimgurlDecode = URLDecoder.decode(headimgurl, "UTF-8");
......
......@@ -554,7 +554,7 @@ public class UserOperationServiceImpl implements UserOperationService {
}
// 保存关注记录
String sourceInfo = resources.getSourceInfo();
JSONObject sourceInfo = resources.getSourceInfo();
this.saveWechatSubscribeRecord(memberDTO, sourceInfo, 1);
return true;
......@@ -567,33 +567,38 @@ public class UserOperationServiceImpl implements UserOperationService {
* @param subscribe 关注状态
* @param sourceInfo 来源描述
*/
private void saveWechatSubscribeRecord(MemberDTO memberDTO, String sourceInfo, int subscribe) {
private void saveWechatSubscribeRecord(MemberDTO memberDTO, JSONObject sourceInfo, int subscribe) {
WechatSubscribeRecord wechatSubscribeRecord = new WechatSubscribeRecord();
wechatSubscribeRecord.setCode(IdWorker.generatorString());
wechatSubscribeRecord.setMemberId(memberDTO.getId());
wechatSubscribeRecord.setOperationFlag(subscribe);
if (StringUtils.isBlank(sourceInfo)) {
if (Objects.isNull(sourceInfo)) {
wechatSubscribeRecord.setEntityType(3);
} else {
JSONObject jsonObject = JSONObject.parseObject(sourceInfo, JSONObject.class);
Object activityId = jsonObject.get("activityId");
Object activityCode = jsonObject.get("activityCode");
Object entityType = jsonObject.get("entityType");
Object activityId = sourceInfo.get("sourceId");
Object activityCode = sourceInfo.get("sourceCode");
Object entityType = sourceInfo.get("sourceType");
if (Objects.nonNull(entityType)) {
String s = entityType.toString();
Integer s = Integer.parseInt(entityType.toString());
switch (s) {
case "1":
wechatSubscribeRecord.setSourceType(1);
wechatSubscribeRecord.setEntityType(1);
case SubscribeSourceTypeConstant.type1:
wechatSubscribeRecord.setSourceType(SubscribeSourceTypeConstant.type1);
wechatSubscribeRecord.setEntityType(SubscribeSourceTypeConstant.type1);
break;
case "2":
if (Objects.nonNull(activityId))
case SubscribeSourceTypeConstant.type2:
if (Objects.nonNull(activityId)) {
wechatSubscribeRecord.setEntityId(Long.valueOf(activityId.toString()));
if (Objects.nonNull(activityCode))
}
if (Objects.nonNull(activityCode)) {
wechatSubscribeRecord.setEntityCode(activityCode.toString());
wechatSubscribeRecord.setSourceType(2);
wechatSubscribeRecord.setEntityType(2);
}
wechatSubscribeRecord.setSourceType(SubscribeSourceTypeConstant.type2);
wechatSubscribeRecord.setEntityType(SubscribeSourceTypeConstant.type2);
break;
default:
wechatSubscribeRecord.setSourceType(3);
......@@ -602,10 +607,12 @@ public class UserOperationServiceImpl implements UserOperationService {
}
}
wechatSubscribeRecord.setSourceInfo(sourceInfo);
wechatSubscribeRecord.setSourceInfo(JSONObject.toJSONString(sourceInfo));
}
this.wechatSubscribeRecordService.create(wechatSubscribeRecord);
}
......@@ -655,7 +662,7 @@ public class UserOperationServiceImpl implements UserOperationService {
}
// 关注记录
this.saveWechatSubscribeRecord(memberDTO, "",2);
this.saveWechatSubscribeRecord(memberDTO, null,2);
// 同步至iptv
((UserOperationServiceImpl)AopContext.currentProxy()).asyncUnsubscribe(new MemberAndWeixinUserDTO(memberDTO, userWeixinDTO));
......
......@@ -25,7 +25,9 @@ import org.springframework.cache.annotation.CachePut;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import javax.validation.constraints.NotNull;
import java.sql.Timestamp;
import java.util.List;
import java.util.Objects;
@Service
......@@ -45,9 +47,10 @@ public class MemberOperationServiceImpl implements MemberOperationService {
@AsyncMqSend
public void asyncUpdateMemberVipAndVipExpireTime(MemberDTO memberDTO) {}
@AsyncMqSend
public void asyncCreateMemberVipHistory(MemberVipHistoryDTO memberVipHistoryDTO) {}
@AsyncMqSend
public void asyncDoUpdateGroupsBatch(List<Member> resources) {}
@AsyncMqSend
......@@ -138,6 +141,18 @@ public class MemberOperationServiceImpl implements MemberOperationService {
return memberDTO_;
}
@Override
public Integer doUpdateGroupsBatch(List<Member> resources) {
Integer count = this.memberService.doUpdateGroupsBatch(resources);
if (count > 0) {
((MemberOperationServiceImpl) AopContext.currentProxy()).asyncDoUpdateGroupsBatch(resources);
}
return count;
}
@Override
public MemberProfileDTO getMemberProfileAndCheckVip(Long memberId, String appId) {
......
......@@ -7,6 +7,8 @@ import com.topdraw.business.module.member.viphistory.domain.MemberVipHistory;
import com.topdraw.business.process.domian.member.MemberOperationBean;
import com.topdraw.business.process.domian.weixin.BuyVipBean;
import java.util.List;
public interface MemberOperationService {
/**
......@@ -72,4 +74,8 @@ public interface MemberOperationService {
* @param resources
*/
MemberDTO doUpdateVipByMemberCode(MemberOperationBean resources);
Integer doUpdateGroupsBatch(List<Member> resources);
}
......
......@@ -64,7 +64,7 @@
<!--监控sql日志输出 -->
<logger name="jdbc.sqlonly" level="OFF" additivity="false">
<logger name="jdbc.sqlonly" level="INFO" additivity="false">
<appender-ref ref="console" />
<appender-ref ref="info" />
</logger>
......