Merge remote-tracking branch 'origin/wzj-main' into wzj-main
This commit is contained in:
commit
17648ceb5c
@ -1,41 +1,23 @@
|
|||||||
package org.dromara.app;
|
package org.dromara.app;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import com.wzj.soopin.content.domain.bo.*;
|
import com.wzj.soopin.content.domain.bo.*;
|
||||||
import com.wzj.soopin.content.domain.po.MyLikedVlog;
|
|
||||||
import com.wzj.soopin.content.domain.po.Vlog;
|
|
||||||
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
||||||
import com.wzj.soopin.content.service.IVlogPullService;
|
import com.wzj.soopin.content.service.IVlogPullService;
|
||||||
import com.wzj.soopin.content.service.VlogService;
|
import com.wzj.soopin.content.service.VlogService;
|
||||||
import com.wzj.soopin.content.service.VlogUploadService;
|
import com.wzj.soopin.content.service.VlogUploadService;
|
||||||
import com.wzj.soopin.content.utils.PagedGridResult;
|
|
||||||
import com.wzj.soopin.content.utils.QcCloud;
|
import com.wzj.soopin.content.utils.QcCloud;
|
||||||
import com.wzj.soopin.content.utils.RedisOperator;
|
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
import org.dromara.common.core.domain.model.LoginUser;
|
import org.dromara.common.core.domain.model.LoginUser;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
import org.dromara.common.mq.domain.MQMessage;
|
|
||||||
import org.dromara.common.mq.enums.MQMessageType;
|
|
||||||
import org.dromara.common.mq.enums.MessageActionEnum;
|
|
||||||
import org.dromara.common.mq.utils.MqUtil;
|
|
||||||
import org.dromara.common.redis.redis.RedisCache;
|
import org.dromara.common.redis.redis.RedisCache;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static com.wzj.soopin.content.domain.base.BaseInfoProperties.*;
|
|
||||||
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Api(tags = "VlogController 短视频相关业务功能的接口")
|
@Api(tags = "VlogController 短视频相关业务功能的接口")
|
||||||
@ -54,7 +36,7 @@ public class AppVlogController {
|
|||||||
@PostMapping("/indexList")
|
@PostMapping("/indexList")
|
||||||
public R<Page<IndexVlogVO>> indexList(@RequestBody IndexListBO bo, @RequestBody Page page) {
|
public R<Page<IndexVlogVO>> indexList(@RequestBody IndexListBO bo, @RequestBody Page page) {
|
||||||
|
|
||||||
Page<IndexVlogVO> pages = pullService.page(page);
|
Page<IndexVlogVO> pages = pullService.pullFromMq(page);
|
||||||
return R.ok(pages);
|
return R.ok(pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,9 @@ import com.wzj.soopin.content.domain.po.Article;
|
|||||||
import com.wzj.soopin.content.domain.vo.ArticleVO;
|
import com.wzj.soopin.content.domain.vo.ArticleVO;
|
||||||
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
||||||
import com.wzj.soopin.content.enums.YesOrNo;
|
import com.wzj.soopin.content.enums.YesOrNo;
|
||||||
|
import com.wzj.soopin.content.service.IVlogPullService;
|
||||||
import com.wzj.soopin.content.service.IVlogPushService;
|
import com.wzj.soopin.content.service.IVlogPushService;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
import com.wzj.soopin.content.service.VlogService;
|
import com.wzj.soopin.content.service.VlogService;
|
||||||
import com.wzj.soopin.content.service.VlogUploadService;
|
import com.wzj.soopin.content.service.VlogUploadService;
|
||||||
@ -36,18 +38,12 @@ import java.util.ArrayList;
|
|||||||
@Api(tags = "VlogController 短视频相关业务功能的接口")
|
@Api(tags = "VlogController 短视频相关业务功能的接口")
|
||||||
@RequestMapping("/cms/vlog")
|
@RequestMapping("/cms/vlog")
|
||||||
@RestController
|
@RestController
|
||||||
|
@AllArgsConstructor
|
||||||
public class VlogController extends BaseInfoProperties {
|
public class VlogController extends BaseInfoProperties {
|
||||||
@Autowired
|
private final VlogService vlogService;
|
||||||
private VlogService vlogService;
|
public final RedisOperator redis;
|
||||||
@Autowired
|
private final IVlogPushService vlogPushService;
|
||||||
private QcCloud qcCloud;
|
private final IVlogPullService vlogPullService;
|
||||||
@Autowired
|
|
||||||
private VlogUploadService vlogUploadService;
|
|
||||||
@Autowired
|
|
||||||
public RedisOperator redis;
|
|
||||||
@Autowired
|
|
||||||
private IVlogPushService vlogPushService;
|
|
||||||
@Tag(name = "查询列表")
|
@Tag(name = "查询列表")
|
||||||
@PostMapping("/page")
|
@PostMapping("/page")
|
||||||
public R<IPage<IndexVlogVO>> page(@RequestBody VlogBO bo, @RequestBody Page page) {
|
public R<IPage<IndexVlogVO>> page(@RequestBody VlogBO bo, @RequestBody Page page) {
|
||||||
@ -203,4 +199,11 @@ public class VlogController extends BaseInfoProperties {
|
|||||||
return R.ok(vlogPushService.pushVlogToMq(count,tag));
|
return R.ok(vlogPushService.pushVlogToMq(count,tag));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/sync")
|
||||||
|
public R syncVlog() {
|
||||||
|
// vlogPullService.pullFromTencentCloud();
|
||||||
|
return R.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,18 @@
|
|||||||
package com.wzj.soopin.content.convert;
|
package com.wzj.soopin.content.convert;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ser.Serializers;
|
||||||
import com.wzj.soopin.content.domain.po.Vlog;
|
import com.wzj.soopin.content.domain.po.Vlog;
|
||||||
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
||||||
import com.wzj.soopin.content.domain.bo.VlogBO;
|
import com.wzj.soopin.content.domain.bo.VlogBO;
|
||||||
|
import com.wzj.soopin.content.domain.vo.VlogerVO;
|
||||||
|
import org.dromara.common.web.core.BaseConverter;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@Mapper(componentModel = "spring")
|
@Mapper(componentModel = "spring")
|
||||||
public interface VlogConvert {
|
public interface VlogConvert extends BaseConverter<VlogerVO,VlogBO,Vlog> {
|
||||||
VlogConvert INSTANCE = Mappers.getMapper(VlogConvert.class);
|
|
||||||
|
|
||||||
IndexVlogVO toVO(Vlog vlog);
|
// IndexVlogVO toVO(Vlog vlog);
|
||||||
|
|
||||||
Vlog toEntity(VlogBO vlogBO);
|
// Vlog toEntity(VlogBO vlogBO);
|
||||||
}
|
}
|
||||||
|
@ -11,10 +11,10 @@ public interface IVlogPullService {
|
|||||||
/**
|
/**
|
||||||
* 从视频库中拉取视频
|
* 从视频库中拉取视频
|
||||||
*/
|
*/
|
||||||
Page<IndexVlogVO> page(Page<IndexVlogVO> page);
|
Page<IndexVlogVO> pullFromMq(Page<IndexVlogVO> page);
|
||||||
|
|
||||||
|
|
||||||
void pullVlog(VlogBO vlogBO);
|
void pullFromTencentCloud(VlogBO vlogBO);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,4 +9,6 @@ public interface IVlogPushService {
|
|||||||
boolean cacheTopLikedVlogs(int limit) ;
|
boolean cacheTopLikedVlogs(int limit) ;
|
||||||
|
|
||||||
boolean pushVlogToMq(int count,String tag);
|
boolean pushVlogToMq(int count,String tag);
|
||||||
|
|
||||||
|
void syncVlog();
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ public class VlogPullServiceImpl implements IVlogPullService {
|
|||||||
private final TencentCloudUtil tencentCloudUtil;
|
private final TencentCloudUtil tencentCloudUtil;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Page<IndexVlogVO> page(Page<IndexVlogVO> page) {
|
public Page<IndexVlogVO> pullFromMq(Page<IndexVlogVO> page) {
|
||||||
|
|
||||||
List<MessageExt> messageExts = new ArrayList<>();
|
List<MessageExt> messageExts = new ArrayList<>();
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ public class VlogPullServiceImpl implements IVlogPullService {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void pullVlog(VlogBO vlogBO) {
|
public void pullFromTencentCloud(VlogBO vlogBO) {
|
||||||
try {
|
try {
|
||||||
// 验证分页参数
|
// 验证分页参数
|
||||||
if (vlogBO.getCurrent() < 1) {
|
if (vlogBO.getCurrent() < 1) {
|
||||||
|
@ -109,4 +109,9 @@ public class VlogPushServiceImpl implements IVlogPushService {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void syncVlog() {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -83,7 +83,7 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
private final MemberMapper memberMapper;
|
private final MemberMapper memberMapper;
|
||||||
private final RedisCache cache;
|
private final RedisCache cache;
|
||||||
private final RedisCache redisCache;
|
private final RedisCache redisCache;
|
||||||
|
private final VlogConvert vlogConvert;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IMemberService memberService;
|
private IMemberService memberService;
|
||||||
@Autowired
|
@Autowired
|
||||||
@ -138,13 +138,15 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
@Override
|
@Override
|
||||||
public void createVlog(VlogBO vlogBO) {
|
public void createVlog(VlogBO vlogBO) {
|
||||||
String vid = sid.nextShort();
|
String vid = sid.nextShort();
|
||||||
Vlog vlog = MapstructUtils.convert(vlogBO, Vlog.class);
|
Vlog vlog = vlogConvert.toPo(vlogBO);
|
||||||
vlog.setId(vid);
|
vlog.setId(vid);
|
||||||
vlog.setLikeCounts(0);
|
vlog.setLikeCounts(0);
|
||||||
vlog.setCommentsCounts(0);
|
vlog.setCommentsCounts(0);
|
||||||
vlog.setStatus(0);
|
vlog.setStatus(0);
|
||||||
vlog.setIsPrivate(YesOrNo.NO.type);
|
vlog.setIsPrivate(YesOrNo.NO.type);
|
||||||
|
|
||||||
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
|
vlog.setMemberId(loginUser.getUserId()+"");
|
||||||
vlogMapper.insert(vlog);
|
vlogMapper.insert(vlog);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,12 +155,12 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
public Integer getVlogBeLikedCounts(String vlogId) {
|
public Integer getVlogBeLikedCounts(String vlogId) {
|
||||||
Double count = cache.zSetScore(REDIS_VLOG_BE_LIKED_COUNTS, vlogId);
|
Double count = cache.zSetScore(REDIS_VLOG_BE_LIKED_COUNTS, vlogId);
|
||||||
|
|
||||||
return count==null?0:count.intValue();
|
return count == null ? 0 : count.intValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Integer getVlogComment(String vlogId) {
|
private Integer getVlogComment(String vlogId) {
|
||||||
Double count = cache.zSetScore(REDIS_VLOG_COMMENT_COUNTS, vlogId);
|
Double count = cache.zSetScore(REDIS_VLOG_COMMENT_COUNTS, vlogId);
|
||||||
return count==null?0:count.intValue();
|
return count == null ? 0 : count.intValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean doILikeVlog(String myId, String vlogId) {
|
private boolean doILikeVlog(String myId, String vlogId) {
|
||||||
@ -625,13 +627,13 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
@Override
|
@Override
|
||||||
public List<IndexVlogVO> getIndexVlogList(VlogBO bo) {
|
public List<IndexVlogVO> getIndexVlogList(VlogBO bo) {
|
||||||
List<IndexVlogVO> indexVlogVOPage = vlogMapperCustom.getIndexVlogList(bo);
|
List<IndexVlogVO> indexVlogVOPage = vlogMapperCustom.getIndexVlogList(bo);
|
||||||
fillRedisColumn(indexVlogVOPage );
|
fillRedisColumn(indexVlogVOPage);
|
||||||
return indexVlogVOPage;
|
return indexVlogVOPage;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Page<IndexVlogVO> getIndexVlogList(VlogBO bo, Page page) {
|
public Page<IndexVlogVO> getIndexVlogList(VlogBO bo, Page page) {
|
||||||
Page<IndexVlogVO> indexVlogVOPage = vlogMapperCustom.getIndexVlogList(bo,page);
|
Page<IndexVlogVO> indexVlogVOPage = vlogMapperCustom.getIndexVlogList(bo, page);
|
||||||
fillRedisColumn(indexVlogVOPage.getRecords());
|
fillRedisColumn(indexVlogVOPage.getRecords());
|
||||||
return indexVlogVOPage;
|
return indexVlogVOPage;
|
||||||
}
|
}
|
||||||
@ -674,7 +676,8 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
List<String> reports = redis.lrange(redisKey, 0, -1);
|
List<String> reports = redis.lrange(redisKey, 0, -1);
|
||||||
for (String report : reports) {
|
for (String report : reports) {
|
||||||
try {
|
try {
|
||||||
Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {});
|
Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {
|
||||||
|
});
|
||||||
String vlogId = (String) reportMap.get("vlogId");
|
String vlogId = (String) reportMap.get("vlogId");
|
||||||
blockVdList.add(vlogId);
|
blockVdList.add(vlogId);
|
||||||
} catch (JsonProcessingException e) {
|
} catch (JsonProcessingException e) {
|
||||||
@ -695,7 +698,8 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
List<String> reports = redis.lrange(redisKey, 0, -1);
|
List<String> reports = redis.lrange(redisKey, 0, -1);
|
||||||
for (String report : reports) {
|
for (String report : reports) {
|
||||||
try {
|
try {
|
||||||
Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {});
|
Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {
|
||||||
|
});
|
||||||
String memberId = (String) reportMap.get("MemberId");
|
String memberId = (String) reportMap.get("MemberId");
|
||||||
blockUserList.add(memberId);
|
blockUserList.add(memberId);
|
||||||
} catch (JsonProcessingException e) {
|
} catch (JsonProcessingException e) {
|
||||||
@ -718,7 +722,7 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
}
|
}
|
||||||
vo.setLikeCounts(getVlogBeLikedCounts(v.getId()));
|
vo.setLikeCounts(getVlogBeLikedCounts(v.getId()));
|
||||||
vo.setCommentsCounts(getVlogComment(v.getId()));
|
vo.setCommentsCounts(getVlogComment(v.getId()));
|
||||||
MemberVO m =memberService.getMemberInfo(vo.getMemberId());
|
MemberVO m = memberService.getMemberInfo(vo.getMemberId());
|
||||||
if (m != null) {
|
if (m != null) {
|
||||||
vo.setAvatar(m.getAvatar());
|
vo.setAvatar(m.getAvatar());
|
||||||
vo.setNickname(m.getNickname());
|
vo.setNickname(m.getNickname());
|
||||||
|
@ -236,4 +236,12 @@ public class MemberController extends BaseController {
|
|||||||
return R.ok(service.getLoginMemberInfo());
|
return R.ok(service.getLoginMemberInfo());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Tag(name ="同步会员的信息")
|
||||||
|
@GetMapping(value = "/sync")
|
||||||
|
public R<MemberVO> syncInfo() {
|
||||||
|
service.syncInfo();
|
||||||
|
return R.ok();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,162 @@
|
|||||||
|
package com.wzj.soopin.member.domain.po;
|
||||||
|
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会员
|
||||||
|
*
|
||||||
|
* @author Bulbasaur
|
||||||
|
* @since 2020-02-25 14:10:16
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@TableName("li_member")
|
||||||
|
@ApiModel(value = "会员")
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class OrgMember extends BaseEntity {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "会员用户名")
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "会员密码")
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "昵称")
|
||||||
|
private String nickName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "会员性别,1为男,0为女")
|
||||||
|
private Integer sex;
|
||||||
|
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||||
|
@ApiModelProperty(value = "会员生日")
|
||||||
|
private Date birthday;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "会员地址ID")
|
||||||
|
private String regionId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "会员地址")
|
||||||
|
private String region;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "手机号码", required = true)
|
||||||
|
private String mobile;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "积分数量")
|
||||||
|
private Long point;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "积分总数量")
|
||||||
|
private Long totalPoint;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "会员头像")
|
||||||
|
private String face;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "会员状态")
|
||||||
|
private Boolean disabled;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "是否开通店铺")
|
||||||
|
private Boolean haveStore;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "店铺ID")
|
||||||
|
private String storeId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "客户端")
|
||||||
|
private String clientEnum;
|
||||||
|
|
||||||
|
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@ApiModelProperty(value = "最后一次登录时间")
|
||||||
|
private Date lastLoginDate;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "会员等级ID")
|
||||||
|
private String gradeId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "是否为达人")
|
||||||
|
private Integer expert;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "是否为代理")
|
||||||
|
private Integer agent;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "经验值数量")
|
||||||
|
private Long experience;
|
||||||
|
private String userSig; // 添加 UserSig 属性
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 封禁结束时间
|
||||||
|
*/
|
||||||
|
@TableField(value = "ban_end_time")
|
||||||
|
private Date banEndTime;
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * 是否为达人
|
||||||
|
// */
|
||||||
|
// @TableField("is_expert")
|
||||||
|
// private Integer isExpert;
|
||||||
|
|
||||||
|
public OrgMember(String username, String password, String mobile) {
|
||||||
|
this.username = username;
|
||||||
|
this.password = password;
|
||||||
|
this.mobile = mobile;
|
||||||
|
this.nickName = mobile;
|
||||||
|
this.disabled = true;
|
||||||
|
this.haveStore = false;
|
||||||
|
this.sex = 0;
|
||||||
|
this.expert=getExpert();
|
||||||
|
this.point = 0L;
|
||||||
|
this.totalPoint = 0L;
|
||||||
|
this.lastLoginDate = new Date();
|
||||||
|
this.banEndTime=getBanEndTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrgMember(String username, String password, String mobile, String nickName, String face) {
|
||||||
|
this.username = username;
|
||||||
|
this.password = password;
|
||||||
|
this.mobile = mobile;
|
||||||
|
this.nickName = nickName;
|
||||||
|
this.disabled = true;
|
||||||
|
this.haveStore = false;
|
||||||
|
this.face = face;
|
||||||
|
this.sex = 0;
|
||||||
|
this.point = 0L;
|
||||||
|
this.totalPoint = 0L;
|
||||||
|
this.lastLoginDate = new Date();
|
||||||
|
this.expert=getExpert();
|
||||||
|
this.banEndTime=getBanEndTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrgMember(String username, String password, String face, String nickName, Integer sex) {
|
||||||
|
this.username = username;
|
||||||
|
this.password = password;
|
||||||
|
this.mobile = "";
|
||||||
|
this.nickName = nickName;
|
||||||
|
this.disabled = true;
|
||||||
|
this.haveStore = false;
|
||||||
|
this.face = face;
|
||||||
|
this.sex = sex;
|
||||||
|
this.point = 0L;
|
||||||
|
this.totalPoint = 0L;
|
||||||
|
this.lastLoginDate = new Date();
|
||||||
|
this.expert=getExpert();
|
||||||
|
this.banEndTime=getBanEndTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getBanEndTime() {
|
||||||
|
return banEndTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBanEndTime(Date banEndTime) {
|
||||||
|
this.banEndTime = banEndTime;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.wzj.soopin.member.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.wzj.soopin.member.domain.po.OrgMember;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
@InterceptorIgnore(tenantLine = "true")
|
||||||
|
@Mapper
|
||||||
|
public interface OrgMemberMapper extends BaseMapper<OrgMember> {
|
||||||
|
}
|
@ -27,11 +27,10 @@ public interface IMemberService extends IService<Member> {
|
|||||||
/**
|
/**
|
||||||
* 是否可以通过手机获取用户
|
* 是否可以通过手机获取用户
|
||||||
*
|
*
|
||||||
* @param uuid UUID
|
|
||||||
* @param mobile 手机号
|
* @param mobile 手机号
|
||||||
* @return 操作状态
|
* @return 操作状态
|
||||||
*/
|
*/
|
||||||
boolean findByMobile(String uuid, String mobile);
|
Member findByMobile( String mobile);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过用户名获取用户
|
* 通过用户名获取用户
|
||||||
@ -86,4 +85,5 @@ public interface IMemberService extends IService<Member> {
|
|||||||
IPage<MemberVO> getMemberPageList(MemberBO bo, Page<Member> page);
|
IPage<MemberVO> getMemberPageList(MemberBO bo, Page<Member> page);
|
||||||
|
|
||||||
|
|
||||||
|
void syncInfo();
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.wzj.soopin.member.service;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会员同步服务
|
||||||
|
*
|
||||||
|
* @author 王智杰
|
||||||
|
*/
|
||||||
|
public interface IMemberSyncService {
|
||||||
|
/**
|
||||||
|
* 同步会员
|
||||||
|
*
|
||||||
|
* @param memberId 会员ID
|
||||||
|
*/
|
||||||
|
void syncMember(Long memberId) throws InvocationTargetException, IllegalAccessException;
|
||||||
|
}
|
@ -30,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@ -96,7 +97,11 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
|||||||
queryWrapper.eq(Fans::getVloggerId, vlogerId)
|
queryWrapper.eq(Fans::getVloggerId, vlogerId)
|
||||||
.eq(Fans::getFanId, fanId);
|
.eq(Fans::getFanId, fanId);
|
||||||
|
|
||||||
return baseMapper.selectOne(queryWrapper);
|
List<Fans> fansList = baseMapper.selectList(queryWrapper);
|
||||||
|
if (fansList.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return fansList.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@ -92,16 +92,11 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
|
|||||||
return this.baseMapper.selectOne(queryWrapper);
|
return this.baseMapper.selectOne(queryWrapper);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public boolean findByMobile(String uuid, String mobile) {
|
@Cacheable(value = GlobalConstants.MEMBER_KEY, key = "#mobile")
|
||||||
|
public Member findByMobile( String mobile) {
|
||||||
QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
|
||||||
queryWrapper.eq("mobile", mobile);
|
queryWrapper.eq("mobile", mobile);
|
||||||
Member member = this.baseMapper.selectOne(queryWrapper);
|
return this.baseMapper.selectOne(queryWrapper);
|
||||||
if (member == null) {
|
|
||||||
throw new ServiceException(ResultCode.USER_NOT_PHONE);
|
|
||||||
}
|
|
||||||
redisCache.setCacheObject(CachePrefix.FIND_MOBILE + uuid, mobile, 300, TimeUnit.SECONDS);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@CacheEvict(value = GlobalConstants.MEMBER_KEY, key = "#id")
|
@CacheEvict(value = GlobalConstants.MEMBER_KEY, key = "#id")
|
||||||
@ -317,5 +312,12 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
|
|||||||
return memeberPage;
|
return memeberPage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void syncInfo() {
|
||||||
|
//分页拉取用户信息
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,105 @@
|
|||||||
|
package com.wzj.soopin.member.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.wzj.soopin.member.domain.po.Member;
|
||||||
|
import com.wzj.soopin.member.domain.po.OrgMember;
|
||||||
|
import com.wzj.soopin.member.mapper.MemberMapper;
|
||||||
|
import com.wzj.soopin.member.mapper.OrgMemberMapper;
|
||||||
|
import com.wzj.soopin.member.service.IMemberService;
|
||||||
|
import com.wzj.soopin.member.service.IMemberSyncService;
|
||||||
|
|
||||||
|
import jodd.typeconverter.impl.LocalDateConverter;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.beanutils.BeanUtils;
|
||||||
|
import org.dromara.common.core.utils.LocalDataUtil;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会员同步服务实现类
|
||||||
|
*
|
||||||
|
* @author 王智杰
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class MemberSyncServiceImpl implements IMemberSyncService {
|
||||||
|
|
||||||
|
private final OrgMemberMapper orgMemberMapper;
|
||||||
|
|
||||||
|
private final MemberMapper memberMapper;
|
||||||
|
|
||||||
|
private final IMemberService memberService;
|
||||||
|
@Override
|
||||||
|
public void syncMember(Long memberId) throws InvocationTargetException, IllegalAccessException {
|
||||||
|
//访问生产数据库
|
||||||
|
//生产数据库为mysql
|
||||||
|
|
||||||
|
//使用orgMember表为用户表
|
||||||
|
//获取总条数
|
||||||
|
//分包计算
|
||||||
|
//每次获取1000条
|
||||||
|
//循环处理,转成Member表,
|
||||||
|
//检查是否存在,不存在则新增,存在则更新
|
||||||
|
//更新时,只更新会员用户名、会员密码、昵称、手机号、邮箱、头像、性别、年龄、生日、会员等级、积分、余额、状态、备注、创建时间、更新时间、删除标志
|
||||||
|
//访问生产数据库
|
||||||
|
//生产数据库为mysql
|
||||||
|
|
||||||
|
//使用orgMember表为用户表
|
||||||
|
//获取总条数 n
|
||||||
|
int totalCount = orgMemberMapper.selectCount(null).intValue();
|
||||||
|
log.info("开始同步会员数据,总条数:{}", totalCount);
|
||||||
|
|
||||||
|
//分包计算
|
||||||
|
int pageSize = 1000;
|
||||||
|
int totalPages = (totalCount + pageSize - 1) / pageSize;
|
||||||
|
LocalDateConverter localDateConverter = new LocalDateConverter();
|
||||||
|
|
||||||
|
//每次获取1000条
|
||||||
|
for (int pageNum = 1; pageNum <= totalPages; pageNum++) {
|
||||||
|
int offset = (pageNum - 1) * pageSize;
|
||||||
|
Page<OrgMember> page = new Page<>(pageNum, pageSize);
|
||||||
|
Page<OrgMember> orgMembers = orgMemberMapper.selectPage(page, null);
|
||||||
|
|
||||||
|
//循环处理,转成Member表
|
||||||
|
for (OrgMember orgMember : orgMembers.getRecords()) {
|
||||||
|
Member member = new Member();
|
||||||
|
BeanUtils.copyProperties(orgMember, member);
|
||||||
|
|
||||||
|
//检查是否存在,不存在则新增,存在则更新
|
||||||
|
Member curMember = memberService.findByMobile(orgMember.getMobile());
|
||||||
|
if (curMember == null) {
|
||||||
|
curMember=new Member();
|
||||||
|
BeanUtils.copyProperties(orgMember, curMember);
|
||||||
|
curMember.setGender(orgMember.getSex());
|
||||||
|
curMember.setNickname(orgMember.getNickName());
|
||||||
|
curMember.setBirthday(localDateConverter.convert(orgMember.getBirthday()));
|
||||||
|
curMember.setPhoneHidden(orgMember.getMobile());
|
||||||
|
curMember.setPhoneEncrypted(orgMember.getMobile());
|
||||||
|
curMember.setUserSig(orgMember.getUserSig());
|
||||||
|
//新增会员
|
||||||
|
memberService.saveOrUpdate(member);
|
||||||
|
log.info("新增会员:{}", orgMember.getUsername());
|
||||||
|
} else {
|
||||||
|
//更新时,只更新会员用户名、会员密码、昵称、手机号、邮箱、头像、性别、年龄、生日、会员等级、积分、余额、状态、备注、创建时间、更新时间、删除标志
|
||||||
|
BeanUtils.copyProperties(orgMember, curMember);
|
||||||
|
curMember.setGender(orgMember.getSex());
|
||||||
|
curMember.setNickname(orgMember.getNickName());
|
||||||
|
curMember.setBirthday(localDateConverter.convert(orgMember.getBirthday()));
|
||||||
|
curMember.setPhoneHidden(orgMember.getMobile());
|
||||||
|
curMember.setPhoneEncrypted(orgMember.getMobile());
|
||||||
|
curMember.setUserSig(orgMember.getUserSig());
|
||||||
|
|
||||||
|
memberMapper.updateById(curMember);
|
||||||
|
log.info("更新会员:{}", orgMember.getUsername());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info("完成第{}页会员同步,共{}条数据", pageNum, orgMembers.getRecords().size());
|
||||||
|
}
|
||||||
|
log.info("会员同步完成,总处理条数:{}", totalCount);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user