diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java index 4e1826f27..67b3607b2 100644 --- a/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java @@ -1,41 +1,23 @@ package org.dromara.app; 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.po.MyLikedVlog; -import com.wzj.soopin.content.domain.po.Vlog; import com.wzj.soopin.content.domain.vo.IndexVlogVO; import com.wzj.soopin.content.service.IVlogPullService; import com.wzj.soopin.content.service.VlogService; 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.RedisOperator; import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.model.LoginUser; 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.satoken.utils.LoginHelper; -import org.springframework.beans.factory.annotation.Autowired; 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 @Api(tags = "VlogController 短视频相关业务功能的接口") @@ -54,7 +36,7 @@ public class AppVlogController { @PostMapping("/indexList") public R> indexList(@RequestBody IndexListBO bo, @RequestBody Page page) { - Page pages = pullService.page(page); + Page pages = pullService.pullFromMq(page); return R.ok(pages); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java index b14364eaf..3b2ab98b5 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java @@ -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.IndexVlogVO; import com.wzj.soopin.content.enums.YesOrNo; +import com.wzj.soopin.content.service.IVlogPullService; import com.wzj.soopin.content.service.IVlogPushService; +import lombok.AllArgsConstructor; import org.dromara.common.core.domain.R; import com.wzj.soopin.content.service.VlogService; import com.wzj.soopin.content.service.VlogUploadService; @@ -36,18 +38,12 @@ import java.util.ArrayList; @Api(tags = "VlogController 短视频相关业务功能的接口") @RequestMapping("/cms/vlog") @RestController - +@AllArgsConstructor public class VlogController extends BaseInfoProperties { - @Autowired - private VlogService vlogService; - @Autowired - private QcCloud qcCloud; - @Autowired - private VlogUploadService vlogUploadService; - @Autowired - public RedisOperator redis; - @Autowired - private IVlogPushService vlogPushService; + private final VlogService vlogService; + public final RedisOperator redis; + private final IVlogPushService vlogPushService; + private final IVlogPullService vlogPullService; @Tag(name = "查询列表") @PostMapping("/page") public R> page(@RequestBody VlogBO bo, @RequestBody Page page) { @@ -203,4 +199,11 @@ public class VlogController extends BaseInfoProperties { return R.ok(vlogPushService.pushVlogToMq(count,tag)); } + @GetMapping("/sync") + public R syncVlog() { +// vlogPullService.pullFromTencentCloud(); + return R.ok(); + } + + } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/convert/VlogConvert.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/convert/VlogConvert.java index b50e7a51a..81c05991d 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/convert/VlogConvert.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/convert/VlogConvert.java @@ -1,16 +1,18 @@ 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.vo.IndexVlogVO; 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.factory.Mappers; @Mapper(componentModel = "spring") -public interface VlogConvert { - VlogConvert INSTANCE = Mappers.getMapper(VlogConvert.class); +public interface VlogConvert extends BaseConverter { - IndexVlogVO toVO(Vlog vlog); +// IndexVlogVO toVO(Vlog vlog); - Vlog toEntity(VlogBO vlogBO); -} \ No newline at end of file +// Vlog toEntity(VlogBO vlogBO); +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IVlogPullService.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IVlogPullService.java index 9dfe12b19..579e84fe9 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IVlogPullService.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IVlogPullService.java @@ -11,10 +11,10 @@ public interface IVlogPullService { /** * 从视频库中拉取视频 */ - Page page(Page page); + Page pullFromMq(Page page); - void pullVlog(VlogBO vlogBO); + void pullFromTencentCloud(VlogBO vlogBO); diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IVlogPushService.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IVlogPushService.java index 194c91bf2..019be3823 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IVlogPushService.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IVlogPushService.java @@ -9,4 +9,6 @@ public interface IVlogPushService { boolean cacheTopLikedVlogs(int limit) ; boolean pushVlogToMq(int count,String tag); + + void syncVlog(); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPullServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPullServiceImpl.java index 6b5ad4f17..9b45362ff 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPullServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPullServiceImpl.java @@ -44,7 +44,7 @@ public class VlogPullServiceImpl implements IVlogPullService { private final TencentCloudUtil tencentCloudUtil; @Override - public Page page(Page page) { + public Page pullFromMq(Page page) { List messageExts = new ArrayList<>(); @@ -88,7 +88,7 @@ public class VlogPullServiceImpl implements IVlogPullService { @Override - public void pullVlog(VlogBO vlogBO) { + public void pullFromTencentCloud(VlogBO vlogBO) { try { // 验证分页参数 if (vlogBO.getCurrent() < 1) { diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPushServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPushServiceImpl.java index f8043000e..209a47726 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPushServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPushServiceImpl.java @@ -109,4 +109,9 @@ public class VlogPushServiceImpl implements IVlogPushService { return true; } + + @Override + public void syncVlog() { + + } } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java index 810460eb0..e6512d580 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java @@ -83,7 +83,7 @@ public class VlogServiceImpl extends ServiceImpl implements Vl private final MemberMapper memberMapper; private final RedisCache cache; private final RedisCache redisCache; - + private final VlogConvert vlogConvert; @Autowired private IMemberService memberService; @Autowired @@ -138,13 +138,15 @@ public class VlogServiceImpl extends ServiceImpl implements Vl @Override public void createVlog(VlogBO vlogBO) { String vid = sid.nextShort(); - Vlog vlog = MapstructUtils.convert(vlogBO, Vlog.class); + Vlog vlog = vlogConvert.toPo(vlogBO); vlog.setId(vid); vlog.setLikeCounts(0); vlog.setCommentsCounts(0); vlog.setStatus(0); vlog.setIsPrivate(YesOrNo.NO.type); + LoginUser loginUser = LoginHelper.getLoginUser(); + vlog.setMemberId(loginUser.getUserId()+""); vlogMapper.insert(vlog); } @@ -153,12 +155,12 @@ public class VlogServiceImpl extends ServiceImpl implements Vl public Integer getVlogBeLikedCounts(String 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) { 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) { @@ -625,13 +627,13 @@ public class VlogServiceImpl extends ServiceImpl implements Vl @Override public List getIndexVlogList(VlogBO bo) { List indexVlogVOPage = vlogMapperCustom.getIndexVlogList(bo); - fillRedisColumn(indexVlogVOPage ); + fillRedisColumn(indexVlogVOPage); return indexVlogVOPage; } @Override public Page getIndexVlogList(VlogBO bo, Page page) { - Page indexVlogVOPage = vlogMapperCustom.getIndexVlogList(bo,page); + Page indexVlogVOPage = vlogMapperCustom.getIndexVlogList(bo, page); fillRedisColumn(indexVlogVOPage.getRecords()); return indexVlogVOPage; } @@ -674,7 +676,8 @@ public class VlogServiceImpl extends ServiceImpl implements Vl List reports = redis.lrange(redisKey, 0, -1); for (String report : reports) { try { - Map reportMap = objectMapper.readValue(report, new TypeReference>() {}); + Map reportMap = objectMapper.readValue(report, new TypeReference>() { + }); String vlogId = (String) reportMap.get("vlogId"); blockVdList.add(vlogId); } catch (JsonProcessingException e) { @@ -695,7 +698,8 @@ public class VlogServiceImpl extends ServiceImpl implements Vl List reports = redis.lrange(redisKey, 0, -1); for (String report : reports) { try { - Map reportMap = objectMapper.readValue(report, new TypeReference>() {}); + Map reportMap = objectMapper.readValue(report, new TypeReference>() { + }); String memberId = (String) reportMap.get("MemberId"); blockUserList.add(memberId); } catch (JsonProcessingException e) { @@ -718,7 +722,7 @@ public class VlogServiceImpl extends ServiceImpl implements Vl } vo.setLikeCounts(getVlogBeLikedCounts(v.getId())); vo.setCommentsCounts(getVlogComment(v.getId())); - MemberVO m =memberService.getMemberInfo(vo.getMemberId()); + MemberVO m = memberService.getMemberInfo(vo.getMemberId()); if (m != null) { vo.setAvatar(m.getAvatar()); vo.setNickname(m.getNickname()); diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/controller/MemberController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/controller/MemberController.java index aed906f18..2194796b4 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/controller/MemberController.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/controller/MemberController.java @@ -236,4 +236,12 @@ public class MemberController extends BaseController { return R.ok(service.getLoginMemberInfo()); } + + @Tag(name ="同步会员的信息") + @GetMapping(value = "/sync") + public R syncInfo() { + service.syncInfo(); + return R.ok(); + } + } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/OrgMember.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/OrgMember.java new file mode 100644 index 000000000..006dfe0d6 --- /dev/null +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/OrgMember.java @@ -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; + } +} diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/OrgMemberMapper.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/OrgMemberMapper.java new file mode 100644 index 000000000..75a8263f2 --- /dev/null +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/OrgMemberMapper.java @@ -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 { +} diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberService.java index 4a16bc93a..2bf65c10e 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberService.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberService.java @@ -27,11 +27,10 @@ public interface IMemberService extends IService { /** * 是否可以通过手机获取用户 * - * @param uuid UUID * @param mobile 手机号 * @return 操作状态 */ - boolean findByMobile(String uuid, String mobile); + Member findByMobile( String mobile); /** * 通过用户名获取用户 @@ -86,4 +85,5 @@ public interface IMemberService extends IService { IPage getMemberPageList(MemberBO bo, Page page); + void syncInfo(); } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberSyncService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberSyncService.java new file mode 100644 index 000000000..667849452 --- /dev/null +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberSyncService.java @@ -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; +} diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java index 9c9de886c..19f77d341 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java @@ -30,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.HashMap; +import java.util.List; import java.util.Map; @Service @@ -96,7 +97,11 @@ public class FansServiceImpl extends ServiceImpl implements IF queryWrapper.eq(Fans::getVloggerId, vlogerId) .eq(Fans::getFanId, fanId); - return baseMapper.selectOne(queryWrapper); + List fansList = baseMapper.selectList(queryWrapper); + if (fansList.isEmpty()) { + return null; + } + return fansList.get(0); } @Transactional(rollbackFor = Exception.class) diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberServiceImpl.java index 9d9392d93..0cbc47727 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberServiceImpl.java @@ -92,16 +92,11 @@ public class MemberServiceImpl extends ServiceImpl implemen return this.baseMapper.selectOne(queryWrapper); } @Override - public boolean findByMobile(String uuid, String mobile) { + @Cacheable(value = GlobalConstants.MEMBER_KEY, key = "#mobile") + public Member findByMobile( String mobile) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("mobile", mobile); - Member member = 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; + return this.baseMapper.selectOne(queryWrapper); } @CacheEvict(value = GlobalConstants.MEMBER_KEY, key = "#id") @@ -317,5 +312,12 @@ public class MemberServiceImpl extends ServiceImpl implemen return memeberPage; } + @Override + public void syncInfo() { + //分页拉取用户信息 + + + return; + } } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberSyncServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberSyncServiceImpl.java new file mode 100644 index 000000000..53b2d26b0 --- /dev/null +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberSyncServiceImpl.java @@ -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 page = new Page<>(pageNum, pageSize); + Page 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); + + } +}