Commit aa35f24e aa35f24ea4033a6bc4293a0af5c36268a17a949d by xianghan

1.优化

1 parent 7c111ab7
......@@ -243,6 +243,13 @@ public class UserOperationController {
return ResultInfo.success();
}
/**
* 1.未关注、未绑定
* 2.已绑定、未关注
* 3.已关注、未绑定
* @param data
* @return
*/
@PostMapping(value = "/memberPreprocess")
@ApiOperation("暂存大小屏信息并检查关注与绑定状态")
@AnonymousAccess
......@@ -293,6 +300,8 @@ public class UserOperationController {
platformAccount1 = userTvDTO.getPlatformAccount();
}
} else {
// 数据异常,没有会员
......@@ -301,7 +310,7 @@ public class UserOperationController {
}
// 关注
// 关注
if (result.equalsIgnoreCase(SUBSCRIBE)) {
// 未绑定
......
......@@ -36,10 +36,14 @@ import com.topdraw.config.RedisKeyUtil;
import com.topdraw.exception.BadRequestException;
import com.topdraw.exception.EntityNotFoundException;
import com.topdraw.exception.GlobeExceptionMsg;
import com.topdraw.resttemplate.RestTemplateClient;
import com.topdraw.util.Base64Util;
import com.topdraw.util.IdWorker;
import com.topdraw.util.TimestampUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.RedisUtils;
import com.topdraw.weixin.subscribe.domain.WechatSubscribeRecord;
import com.topdraw.weixin.subscribe.service.WechatSubscribeRecordService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.aop.framework.AopContext;
......@@ -55,6 +59,7 @@ import org.springframework.util.Assert;
import org.springframework.util.Base64Utils;
import org.springframework.util.CollectionUtils;
import java.net.URLDecoder;
import java.util.*;
import java.util.stream.Collectors;
......@@ -64,23 +69,25 @@ import java.util.stream.Collectors;
public class UserOperationServiceImpl implements UserOperationService {
@Autowired
private MemberService memberService;
@Autowired
private UserTvService userTvService;
@Autowired
private MemberService memberService;
@Autowired
private UserWeixinService userWeixinService;
@Autowired
private UserWeixinRepository userWeixinRepository;
@Autowired
private UserCollectionService userCollectionService;
@Autowired
private CollectionMq2DetailMapper collectionMq2DetailMapper;
@Autowired
private UserCollectionDetailService userCollectionDetailService;
@Autowired
private CollectionMq2DetailMapper collectionMq2DetailMapper;
private WechatSubscribeRecordService wechatSubscribeRecordService;
@Autowired
private UserCollectionDetailRepository userCollectionDetailRepository;
@Autowired
private RedisUtils redisUtils;
......@@ -112,6 +119,8 @@ public class UserOperationServiceImpl implements UserOperationService {
public void asyncUnbind(MemberAndUserTvDTO memberAndUserTvDTO) {}
@AsyncMqSend
public void asyncUnsubscribe(MemberAndWeixinUserDTO memberAndWeixinUserDTO) {}
@AsyncMqSend
public void asyncSubscribe(MemberAndWeixinUserDTO memberAndWeixinUserDTO) {}
/**
* 创建大屏账户同时创建会员
......@@ -413,8 +422,7 @@ public class UserOperationServiceImpl implements UserOperationService {
UserWeixinDTO _userWeixinDTO = this.doUpdateUserWeiXinStatus(userWeixinDTO, SUBSCRIBE_STATUS);
// 同步至iptv
((UserOperationServiceImpl)AopContext.currentProxy()).asyncWeixin(_userWeixinDTO);
}
// ((UserOperationServiceImpl)AopContext.currentProxy()).asyncWeixin(_userWeixinDTO);
// 大屏信息
JSONObject iptvUserInfo = resources.getIptvUserInfo();
......@@ -437,17 +445,42 @@ public class UserOperationServiceImpl implements UserOperationService {
}
}
// 修改会员信息
MemberDTO _memberDTO1 = this.doUpdateMemberByMemberDTO(memberDTO);
// 同步至iptv
((UserOperationServiceImpl)AopContext.currentProxy()).asyncSubscribe(new MemberAndWeixinUserDTO(_memberDTO1, _userWeixinDTO));
// 大屏账户
String platformAccount = iptvUserInfo.getString("platformAccount");
// 绑定
this.bind(memberDTO, platformAccount);
this.bind(memberDTO,platformAccount);
// 保存关注记录
this.saveWechatSubscribeRecord(memberDTO, 1);
}
}
return true;
}
/**
*
* @param memberDTO
* @param subscribe
*/
private void saveWechatSubscribeRecord(MemberDTO memberDTO, int subscribe) {
WechatSubscribeRecord wechatSubscribeRecord = new WechatSubscribeRecord();
wechatSubscribeRecord.setCode(IdWorker.generatorString());
wechatSubscribeRecord.setMemberId(memberDTO.getId());
wechatSubscribeRecord.setOperationFlag(subscribe);
this.wechatSubscribeRecordService.create(wechatSubscribeRecord);
}
/**
* 微信公众号取消关注
* @param resources
......@@ -471,6 +504,9 @@ public class UserOperationServiceImpl implements UserOperationService {
// 同步至iptv
((UserOperationServiceImpl)AopContext.currentProxy()).asyncUnsubscribe(new MemberAndWeixinUserDTO(_memberDTO, userWeixinDTO));
// 关注记录
this.saveWechatSubscribeRecord(_memberDTO, 2);
return true;
}
......@@ -494,6 +530,20 @@ public class UserOperationServiceImpl implements UserOperationService {
try {
try {
String headimgurl = json.get("headimgurl").toString();
if (StringUtils.isNotBlank(headimgurl)) {
String headimgurlDecode = URLDecoder.decode(headimgurl, "UTF-8");
String image = RestTemplateClient.netImage(headimgurlDecode);
if (StringUtils.isNotBlank(image))
json.put("headimgurl",image);
}
data = json.toJSONString();
} catch (Exception e) {
log.info("头像解析失败!!!");
e.printStackTrace();
}
// 过期时间300S
this.redisUtils.set(RedisKeyUtil.genSeSuSubscribeKey(unionId), data, 300);
Object o = this.redisUtils.get(RedisKeyUtil.genSeSuSubscribeKey(unionId));
......
......@@ -150,6 +150,12 @@ public class IdWorker {
return idWorker.nextId();
}
public static String generatorString(){
IdWorker idWorker = new IdWorker();
return String.valueOf(idWorker.nextId());
}
public static String generatorCode(String prefix){
IdWorker idWorker = new IdWorker();
if (StringUtils.isNotBlank(prefix)) {
......
package com.topdraw.weixin.subscribe.domain;
import lombok.Data;
import lombok.experimental.Accessors;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import javax.persistence.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.sql.Timestamp;
import java.util.UUID;
import java.io.Serializable;
/**
* @author XiangHan
* @date 2022-05-21
*/
@Entity
@Data
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_wechat_subscribe_record")
public class WechatSubscribeRecord implements Serializable {
// ID
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 标识
@Column(name = "code", nullable = false)
private String code;
// 会员id
@Column(name = "member_id", nullable = false)
private Long memberId;
// 操作类型 1:关注;2:取关
@Column(name = "operation_flag")
private Integer operationFlag;
// 实例id
@Column(name = "entity_id")
private Long entityId;
// 实例code
@Column(name = "entity_code")
private Long entityCode;
// 实例类型 1:大屏扫码;2:营销活动;
@Column(name = "entity_type")
private Long entityType;
// 来源类型 1:大屏;2:营销活动;3:其他;
@Column(name = "source_type")
private Integer sourceType;
// 来源描述
@Column(name = "source_info")
private String sourceInfo;
// 创建时间
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 更新时间
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
public void copy(WechatSubscribeRecord source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
package com.topdraw.weixin.subscribe.repository;
import com.topdraw.weixin.subscribe.domain.WechatSubscribeRecord;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.Optional;
/**
* @author XiangHan
* @date 2022-05-21
*/
public interface WechatSubscribeRecordRepository extends JpaRepository<WechatSubscribeRecord, Long>, JpaSpecificationExecutor<WechatSubscribeRecord> {
Optional<WechatSubscribeRecord> findFirstByCode(String code);
}
package com.topdraw.weixin.subscribe.service;
import com.topdraw.weixin.subscribe.domain.WechatSubscribeRecord;
/**
* @author XiangHan
* @date 2022-05-21
*/
public interface WechatSubscribeRecordService {
void create(WechatSubscribeRecord resources);
}
package com.topdraw.weixin.subscribe.service.dto;
import lombok.Data;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @author XiangHan
* @date 2022-05-21
*/
@Data
public class WechatSubscribeRecordDTO implements Serializable {
// ID
private Long id;
// 标识
private String code;
// 会员id
private Long memberId;
// 操作类型 1:关注;2:取关
private Integer operationFlag;
// 实例id
private Long entityId;
// 实例code
private Long entityCode;
// 实例类型 1:大屏扫码;2:营销活动;
private Long entityType;
// 来源类型 1:大屏;2:营销活动;3:其他;
private Integer sourceType;
// 来源描述
private String sourceInfo;
// 创建时间
private Timestamp createTime;
// 更新时间
private Timestamp updateTime;
}
package com.topdraw.weixin.subscribe.service.impl;
import com.topdraw.weixin.subscribe.domain.WechatSubscribeRecord;
import com.topdraw.weixin.subscribe.repository.WechatSubscribeRecordRepository;
import com.topdraw.weixin.subscribe.service.WechatSubscribeRecordService;
import com.topdraw.weixin.subscribe.service.mapper.WechatSubscribeRecordMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* @author XiangHan
* @date 2022-05-21
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class WechatSubscribeRecordServiceImpl implements WechatSubscribeRecordService {
@Autowired
private WechatSubscribeRecordRepository wechatSubscribeRecordRepository;
@Autowired
private WechatSubscribeRecordMapper wechatSubscribeRecordMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public void create(WechatSubscribeRecord resources) {
this.wechatSubscribeRecordRepository.save(resources);
}
}
package com.topdraw.weixin.subscribe.service.mapper;
import com.topdraw.base.BaseMapper;
import com.topdraw.weixin.subscribe.domain.WechatSubscribeRecord;
import com.topdraw.weixin.subscribe.service.dto.WechatSubscribeRecordDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author XiangHan
* @date 2022-05-21
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface WechatSubscribeRecordMapper extends BaseMapper<WechatSubscribeRecordDTO, WechatSubscribeRecord> {
}
......@@ -107,8 +107,8 @@ file:
service:
mq:
exchange: uce.exchange # 管理侧
queue: uce.queue # 管理侧
exchange: uce.exchange
queue: uce.queue
weixin:
list:
......@@ -141,4 +141,4 @@ weixin:
env: dev
api:
uc-service: http://127.0.0.1:8210
\ No newline at end of file
uc-service: http://127.0.0.1:8446
\ No newline at end of file
......
......@@ -39,16 +39,16 @@ public class GeneratorCode extends BaseTest {
@Rollback(value = false)
@Transactional(rollbackFor = Exception.class)
public void generator() {
var dbName = "x_activity_address";
var dbName = "uc_wechat_subscribe_record";
// 表名称,支持多表
var tableNames = Arrays.asList(dbName);
String[] s = dbName.split("_");
var pre = s[0];
var target1 = s[s.length-1];
var preRoute = "com.topdraw.business.module.contact.";
var preRoute = "com.topdraw.weixin.";
StringBuilder builder = new StringBuilder(preRoute);
builder.append("vis");
builder.append("subscribe");
// builder.append(target);
tableNames.forEach(tableName -> {
......