buyer-api/src/main/java/cn/lili/controller/lmk/MemberController.java
@@ -2,6 +2,7 @@ import cn.lili.base.Result; import cn.lili.modules.lmk.domain.form.MemberBindStoreForm; import cn.lili.modules.lmk.domain.form.MemberNickNameForm; import cn.lili.modules.member.service.MemberService; import io.swagger.annotations.Api; @@ -30,4 +31,10 @@ public Result updateMemberNickName(@RequestBody MemberNickNameForm form){ return memberService.updateMemberNickName(form); } @PutMapping("/bindMemberAndStore") public Result bindMemberAndStore(@RequestBody MemberBindStoreForm form){ return memberService.bindMemberAndStore(form); } } framework/src/main/java/cn/lili/modules/lmk/domain/form/MemberBindStoreForm.java
New file @@ -0,0 +1,34 @@ package cn.lili.modules.lmk.domain.form; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; /** * lmk-shop-java * * @author : zxl * @date : 2025-09-26 15:05 **/ @Data @NoArgsConstructor @AllArgsConstructor public class MemberBindStoreForm { /** * 绑定分享店铺id */ private String shareStoreId; /** * 分享时间 */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date shareTime; } framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java
@@ -102,6 +102,8 @@ @ApiModelProperty(value = "经验值数量") private Long experience; @TableField("share_store_id") private String shareStoreId; public Member(String username, String password, String mobile) { this.username = username; framework/src/main/java/cn/lili/modules/member/entity/vo/MemberVO.java
@@ -106,6 +106,9 @@ @ApiModelProperty(value = "黑名单id") private String blackId; @ApiModelProperty(value = "绑定商店名") private String bindStoreName; public MemberVO(Member member) { BeanUtil.copyProperties(member, this); } framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java
@@ -30,6 +30,12 @@ @Select("select * from li_member ${ew.customSqlSegment}") IPage<MemberVO> pageByMemberVO(IPage<MemberVO> page, @Param(Constants.WRAPPER) Wrapper<Member> queryWrapper); @Select("select m.*,s.store_name as bindStoreName " + "from li_member m " + "LEFT JOIN li_store s on m.share_store_id = s.id " + " ${ew.customSqlSegment}") IPage<MemberVO> pageByMemberVOAndBindStore(IPage<MemberVO> page, @Param(Constants.WRAPPER) Wrapper<Member> queryWrapper); @Select("select * from li_member ${ew.customSqlSegment}") List<MemberVO> exportMember(@Param(Constants.WRAPPER) Wrapper<Member> queryWrapper); framework/src/main/java/cn/lili/modules/member/service/MemberService.java
@@ -6,6 +6,7 @@ import cn.lili.common.security.token.Token; import cn.lili.common.vo.PageVO; import cn.lili.modules.connect.entity.dto.ConnectAuthUser; import cn.lili.modules.lmk.domain.form.MemberBindStoreForm; import cn.lili.modules.lmk.domain.form.MemberNickNameForm; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dto.ManagerMemberEditDTO; @@ -347,4 +348,6 @@ Member findByUUID(String uuid); void registerHandler(Member user); Result bindMemberAndStore(MemberBindStoreForm form); } framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
@@ -25,6 +25,7 @@ import cn.lili.modules.connect.entity.dto.ConnectAuthUser; import cn.lili.modules.connect.service.ConnectService; import cn.lili.modules.lmk.domain.entity.VideoAccount; import cn.lili.modules.lmk.domain.form.MemberBindStoreForm; import cn.lili.modules.lmk.domain.form.MemberNickNameForm; import cn.lili.modules.lmk.domain.form.MemberTagForm; import cn.lili.modules.lmk.domain.vo.PrizeRecordVO; @@ -74,6 +75,9 @@ import javax.servlet.http.HttpServletResponse; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.time.Duration; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -356,6 +360,49 @@ } @Override public Result bindMemberAndStore(MemberBindStoreForm form) { String memberId = UserContext.getCurrentUserId(); if(StringUtils.isNotBlank(memberId)){ Member member = baseMapper.selectById(memberId); if (member != null){ //判断用户的创建时间是否和 分享shareTime在24小时内 LocalDateTime memberCreateTime = member.getCreateTime().toInstant() .atZone(ZoneId.systemDefault()) .toLocalDateTime(); LocalDateTime shareTime = form.getShareTime().toInstant() .atZone(ZoneId.systemDefault()) .toLocalDateTime(); // 计算时间差 第一个参数 较早的时间 后一个较晚的时间 Duration duration = Duration.between( memberCreateTime.isBefore(shareTime) ? memberCreateTime : shareTime, memberCreateTime.isBefore(shareTime) ? shareTime : memberCreateTime ); long hoursDifference = duration.toHours(); if (hoursDifference <= 24) { // 在24小时内 与店铺进行绑定 if(StringUtils.isNotBlank(member.getShareStoreId())){ return Result.ok("已绑定店铺"); } member.setShareStoreId(form.getShareStoreId()); baseMapper.updateById(member); } else { return Result.ok("分享已过期,有效期为24小时"); } } }else{ throw new RuntimeException("UserContext.getCurrentUserId():用户id获取异常"); } return Result.ok("绑定成功"); } @Override public Member editOwn(MemberEditDTO memberEditDTO) { //查询会员信息 Member member = this.findByUsername(Objects.requireNonNull(UserContext.getCurrentUser()).getUsername()); @@ -610,9 +657,9 @@ "SELECT DISTINCT member_id FROM lmk_member_tag WHERE tag_id IN (" + tagIdsStr + ")"); return this.baseMapper.pageByMemberVO(PageUtil.initPage(page), queryWrapper); return this.baseMapper.pageByMemberVOAndBindStore(PageUtil.initPage(page), queryWrapper); } return this.baseMapper.pageByMemberVO(PageUtil.initPage(page),queryWrapper); return this.baseMapper.pageByMemberVOAndBindStore(PageUtil.initPage(page),queryWrapper); } @Override