فهرست منبع

Merge branch 'dev/2024/0513/update-app-Y' of Harper/feifan-backend-zx-app into master

增加用户时,自动绑定另一端同手机号用户
Yangzw 11 ماه پیش
والد
کامیت
4ba761358f
13فایلهای تغییر یافته به همراه97 افزوده شده و 15 حذف شده
  1. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserInfoVO.java
  2. 8 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/duser/DuserServiceImpl.java
  3. 23 11
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usersigninlog/UserSignInLogServiceImpl.java
  4. 6 0
      feifan-module-member/feifan-module-member-biz/pom.xml
  5. 5 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/dal/dataobject/user/MemberUserDO.java
  6. 2 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/dal/mysql/signin/MemberSignInRecordMapper.java
  7. 2 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/signin/MemberSignInRecordService.java
  8. 10 2
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/signin/MemberSignInRecordServiceImpl.java
  9. 8 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/user/MemberUserServiceImpl.java
  10. 10 0
      feifan-module-member/feifan-module-member-biz/src/main/resources/mapper/signin/MemberSignInRecordMapper.xml
  11. 7 0
      feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/service/user/AdminUserService.java
  12. 11 0
      feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/service/user/AdminUserServiceImpl.java
  13. 2 1
      feifan-server/src/main/java/cn/newfeifan/mall/server/FeifanServerApplication.java

+ 3 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserInfoVO.java

@@ -39,4 +39,7 @@ public class DuserInfoVO {
     @Schema(description = "团队用户当前点数")
     private Long socialStatusPoint;
 
+    @Schema(description = "是否签到")
+    private Boolean isSign;
+
 }

+ 8 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/duser/DuserServiceImpl.java

@@ -15,6 +15,7 @@ import cn.newfeifan.mall.module.distri.service.sharepath.SharePathService;
 import cn.newfeifan.mall.module.distri.service.socialstatus.SocialStatusService;
 import cn.newfeifan.mall.module.distri.service.socialstatuschangelog.SocialStatusChangeLogService;
 import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
+import cn.newfeifan.mall.module.member.service.signin.MemberSignInRecordService;
 import cn.newfeifan.mall.module.member.service.user.MemberUserService;
 import org.springframework.stereotype.Service;
 
@@ -64,6 +65,9 @@ public class DuserServiceImpl implements DuserService {
     @Resource
     private SocialStatusChangeLogService socialStatusChangeLogService;
 
+    @Resource
+    private MemberSignInRecordService memberSignInRecordService;
+
     @Override
     public Long createDuser(DuserSaveReqVO createReqVO) {
         // 插入
@@ -151,6 +155,8 @@ public class DuserServiceImpl implements DuserService {
             totalLog = ptProfitLogService.getTotalLog(sonsId);
         }
 
+        Boolean isSign = memberSignInRecordService.isSignIn();
+
         return duserInfoVOBuilder
                 .descPrice(Long.parseLong(yesterday))
                 .descTotalPrice(Long.parseLong(totalLog))
@@ -159,6 +165,7 @@ public class DuserServiceImpl implements DuserService {
                 .socialStatusPoint(duser.getSocialStatusPoint())
                 .socialStatusLevel(socialStatus.getLevel())
                 .socialStatusLevelName(socialStatus.getName())
+                .isSign(isSign)
                 .build();
 
     }
@@ -227,4 +234,4 @@ public class DuserServiceImpl implements DuserService {
         return duserMapper.selectOne(new LambdaQueryWrapperX<DuserDO>().eq(DuserDO::getUserId, id));
     }
 
-}
+}

+ 23 - 11
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usersigninlog/UserSignInLogServiceImpl.java

@@ -3,9 +3,10 @@ package cn.newfeifan.mall.module.distri.service.usersigninlog;
 import cn.newfeifan.mall.module.distri.controller.admin.orderpercentage.vo.OrderPercentageRedisVO;
 import cn.newfeifan.mall.module.distri.controller.app.usersigninlog.vo.UserSignInLogPageReqVO;
 import cn.newfeifan.mall.module.distri.controller.app.usersigninlog.vo.UserSignInLogSaveReqVO;
-import cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.orderpercentage.OrderPercentageDO;
 import cn.newfeifan.mall.module.distri.enums.SocialStatusEnum;
 import cn.newfeifan.mall.module.distri.service.duser.DuserService;
+import cn.newfeifan.mall.module.distri.service.orderpercentage.OrderPercentageService;
 import cn.newfeifan.mall.module.distri.service.socialstatus.SocialStatusService;
 import cn.newfeifan.mall.module.member.controller.app.signin.vo.record.AppMemberSignInRecordRespVO;
 import cn.newfeifan.mall.module.member.convert.signin.MemberSignInRecordConvert;
@@ -36,6 +37,7 @@ import static cn.newfeifan.mall.framework.common.exception.util.ServiceException
 import static cn.newfeifan.mall.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 import static cn.newfeifan.mall.module.distri.constant.DistriConstants.*;
 import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+import static cn.newfeifan.mall.module.member.enums.DictTypeConstants.DISTRI_ORDER_PERCENTAGE;
 
 /**
  * 用户签到日志 Service 实现类
@@ -61,6 +63,9 @@ public class UserSignInLogServiceImpl implements UserSignInLogService {
     @Resource
     private SocialStatusService socialStatusService;
 
+    @Resource
+    private OrderPercentageService orderPercentageService;
+
     @Override
     @Transactional
     public AppMemberSignInRecordRespVO createUserSignInLog() {
@@ -95,38 +100,45 @@ public class UserSignInLogServiceImpl implements UserSignInLogService {
         OrderPercentageRedisVO orderPercentageRedisVO = getOrderPercentageRedisVO();
         long social = Long.parseLong(orderPercentageRedisVO.getSignInSocialStatus());
 
-        if(userSignInLogDO.getRunningDays() >= Integer.parseInt(orderPercentageRedisVO.getSignInSocialStatusMax())){
+        if (userSignInLogDO.getRunningDays() >= Integer.parseInt(orderPercentageRedisVO.getSignInSocialStatusMax())) {
             social = social + Long.parseLong(orderPercentageRedisVO.getSignInSocialStatusMax());
-        }else{
+        } else {
             social = social + userSignInLogDO.getRunningDays();
         }
 
         //更新前用户身价等级
-        DuserDO duserByUserNow = duserService.getDuserByUser(loginUserId);
+        Long socialStatusIdNow = duserService.getDuserByUser(loginUserId).getSocialStatusId();
         //更新用户身价
         duserService.updateDuserSocial(loginUserId, social, SocialStatusEnum.SIGN_IN_SOCIAL.getStatus());
 
         //更新后用户身价等级
-        DuserDO duserByUserAfter = duserService.getDuserByUser(loginUserId);
+        Long socialStatusIdAfter = duserService.getDuserByUser(loginUserId).getSocialStatusId();
 
         //判断是否升级
-        boolean upgradeOrNot = !duserByUserNow.getSocialStatusId().equals(duserByUserAfter.getSocialStatusId());
+        boolean upgradeOrNot = !socialStatusIdNow.equals(socialStatusIdAfter);
         String socialStatusName = null;
-        if(upgradeOrNot){
-            socialStatusName = socialStatusService.getSocialStatusName(duserByUserAfter.getSocialStatusId());
+        if (upgradeOrNot) {
+            socialStatusName = socialStatusService.getSocialStatusName(socialStatusIdAfter);
         }
         // 返回
-        return MemberSignInRecordConvert.INSTANCE.coverRecordToAppRecordVo(recordDO,upgradeOrNot,social,socialStatusName);
+        return MemberSignInRecordConvert.INSTANCE.coverRecordToAppRecordVo(recordDO, upgradeOrNot, social, socialStatusName);
     }
 
     /**
      * 获取身价固定值
+     *
      * @return 签到身价固定值
      */
     private OrderPercentageRedisVO getOrderPercentageRedisVO() {
         String s = stringRedisTemplate.opsForValue().get(DISTRI_ORDER_PERCENTAGE);
         if (StringUtils.isEmpty(s)) {
-            throw exception(REDIS_ORDER_PERCENTAGE_NOT_EXISTS);
+            OrderPercentageDO orderPercentageDO = orderPercentageService.queryStatus();
+            OrderPercentageRedisVO signSocial = OrderPercentageRedisVO.builder()
+                    .signInSocialStatus(orderPercentageDO.getSignInSocialStatus())
+                    .signInSocialStatusMax(orderPercentageDO.getSignInSocialStatusMax())
+                    .build();
+            stringRedisTemplate.opsForValue().set(DISTRI_ORDER_PERCENTAGE, JSONObject.toJSONString(signSocial));
+            s = JSONObject.toJSONString(signSocial);
         }
         return JSONObject.parseObject(s, OrderPercentageRedisVO.class);
     }
@@ -186,4 +198,4 @@ public class UserSignInLogServiceImpl implements UserSignInLogService {
         return userSignInLogMapper.selectPage(pageReqVO);
     }
 
-}
+}

+ 6 - 0
feifan-module-member/feifan-module-member-biz/pom.xml

@@ -95,6 +95,12 @@
             <artifactId>fastjson</artifactId>
             <version>1.2.76</version> <!-- 或者使用更 recent 的版本 -->
         </dependency>
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-system-biz</artifactId>
+            <version>2.0.0-jdk8-snapshot</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 

+ 5 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/dal/dataobject/user/MemberUserDO.java

@@ -147,4 +147,9 @@ public class MemberUserDO extends TenantBaseDO {
      */
     private Long groupId;
 
+    /**
+     * 关联系统用户ID
+     */
+    private Long systemUsersId;
+
 }

+ 2 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/dal/mysql/signin/MemberSignInRecordMapper.java

@@ -4,6 +4,7 @@ import cn.newfeifan.mall.framework.common.pojo.PageParam;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.module.member.controller.admin.signin.vo.config.OrderPercentageRedisVO;
 import cn.newfeifan.mall.module.member.controller.admin.signin.vo.record.MemberSignInRecordPageReqVO;
 import cn.newfeifan.mall.module.member.dal.dataobject.signin.MemberSignInRecordDO;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -78,4 +79,5 @@ public interface MemberSignInRecordMapper extends BaseMapperX<MemberSignInRecord
         );
     }
 
+    OrderPercentageRedisVO getSignSocial();
 }

+ 2 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/signin/MemberSignInRecordService.java

@@ -57,4 +57,6 @@ public interface MemberSignInRecordService {
      */
     AppMemberSignInConfigMoonRespVO getOwnSignInMoon(Long loginUserId, String month);
 
+    Boolean isSignIn();
+
 }

+ 10 - 2
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/signin/MemberSignInRecordServiceImpl.java

@@ -42,8 +42,8 @@ import java.util.Set;
 
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.newfeifan.mall.framework.common.util.collection.CollectionUtils.convertSet;
+import static cn.newfeifan.mall.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 import static cn.newfeifan.mall.module.member.enums.DictTypeConstants.DISTRI_ORDER_PERCENTAGE;
-import static cn.newfeifan.mall.module.member.enums.ErrorCodeConstants.REDIS_ORDER_PERCENTAGE_NOT_EXISTS;
 import static cn.newfeifan.mall.module.member.enums.ErrorCodeConstants.SIGN_IN_RECORD_TODAY_EXISTS;
 
 /**
@@ -134,7 +134,9 @@ public class MemberSignInRecordServiceImpl implements MemberSignInRecordService
 
         String s = stringRedisTemplate.opsForValue().get(DISTRI_ORDER_PERCENTAGE);
         if (StringUtils.isEmpty(s)) {
-            throw exception(REDIS_ORDER_PERCENTAGE_NOT_EXISTS);
+            OrderPercentageRedisVO signSocial = signInRecordMapper.getSignSocial();
+            stringRedisTemplate.opsForValue().set(DISTRI_ORDER_PERCENTAGE, JSONObject.toJSONString(signSocial));
+            s = JSONObject.toJSONString(signSocial);
         }
         OrderPercentageRedisVO orderPercentageRedisVO = JSONObject.parseObject(s, OrderPercentageRedisVO.class);
 
@@ -146,6 +148,12 @@ public class MemberSignInRecordServiceImpl implements MemberSignInRecordService
                 .build();
     }
 
+    @Override
+    public Boolean isSignIn() {
+        MemberSignInRecordDO lastRecord = signInRecordMapper.selectLastRecordByUserId(getLoginUserId());
+        return lastRecord != null && DateUtils.isToday(lastRecord.getCreateTime());
+    }
+
 
     public static void updateDayByNumber(List<Days> daysList, int day) {
         for (Days dayObj : daysList) {

+ 8 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/user/MemberUserServiceImpl.java

@@ -23,6 +23,7 @@ import cn.newfeifan.mall.module.system.api.sms.dto.code.SmsCodeUseReqDTO;
 import cn.newfeifan.mall.module.system.api.social.SocialClientApi;
 import cn.newfeifan.mall.module.system.api.social.dto.SocialWxPhoneNumberInfoRespDTO;
 import cn.newfeifan.mall.module.system.enums.sms.SmsSceneEnum;
+import cn.newfeifan.mall.module.system.service.user.AdminUserService;
 import com.google.common.annotations.VisibleForTesting;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.crypto.password.PasswordEncoder;
@@ -70,6 +71,8 @@ public class MemberUserServiceImpl implements MemberUserService {
     private SharePathProducer sharePathProducer;
     @Resource
     private ShareLinkRegisterProducer shareLinkRegisterProducer;
+    @Resource
+    private AdminUserService adminUserService;
 
     @Override
     public MemberUserDO getUserByMobile(String mobile) {
@@ -102,6 +105,10 @@ public class MemberUserServiceImpl implements MemberUserService {
     @Transactional(rollbackFor = Exception.class)
     public MemberUserDO privateCreateUser(String mobile, String nickname, String avtar,
                                           String registerIp, Integer terminal, Long linkId) {
+        // 通过手机号查询系统用户编号
+        Long systemUserId = adminUserService.getUserIdByMobile(mobile);
+        log.info("注册的手机号:{},系统用户编号:{}", mobile, systemUserId);
+
         // 生成密码
         String password = IdUtil.fastSimpleUUID();
         // 插入用户
@@ -110,6 +117,7 @@ public class MemberUserServiceImpl implements MemberUserService {
         user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
         user.setPassword(encodePassword(password)); // 加密密码
         user.setRegisterIp(registerIp).setRegisterTerminal(terminal);
+        user.setSystemUsersId(systemUserId);    //绑定系统用户
         user.setNickname(nickname).setAvatar(avtar); // 基础信息
         if (StrUtil.isEmpty(nickname)) {
             // 昵称为空时,随机一个名字,避免一些依赖 nickname 的逻辑报错,或者有点丑。例如说,短信发送有昵称时~

+ 10 - 0
feifan-module-member/feifan-module-member-biz/src/main/resources/mapper/signin/MemberSignInRecordMapper.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.member.dal.mysql.signin.MemberSignInRecordMapper">
+
+    <select id="getSignSocial"
+            resultType="cn.newfeifan.mall.module.member.controller.admin.signin.vo.config.OrderPercentageRedisVO">
+        select sign_in_social_status,sign_in_social_status_max from distri_order_percentage LIMIT 0,1
+    </select>
+
+</mapper>

+ 7 - 0
feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/service/user/AdminUserService.java

@@ -201,4 +201,11 @@ public interface AdminUserService {
      */
     boolean isPasswordMatch(String rawPassword, String encodedPassword);
 
+    /**
+     * 通过手机号码查询用户编号
+     * @param mobile 手机号
+     * @return 系统用户编号
+     */
+    Long getUserIdByMobile(String mobile);
+
 }

+ 11 - 0
feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/service/user/AdminUserServiceImpl.java

@@ -442,6 +442,17 @@ public class AdminUserServiceImpl implements AdminUserService {
         return passwordEncoder.matches(rawPassword, encodedPassword);
     }
 
+    @Override
+    public Long getUserIdByMobile(String mobile) {
+        //电话没有直接返回
+        if (StrUtil.isEmpty(mobile)) {
+            return null;
+        }
+        AdminUserDO adminUserDO = userMapper.selectByMobile(mobile);
+        //系统用户可能不存在
+        return adminUserDO != null ? adminUserDO.getId() : null;
+    }
+
     /**
      * 对密码进行加密
      *

+ 2 - 1
feifan-server/src/main/java/cn/newfeifan/mall/server/FeifanServerApplication.java

@@ -16,7 +16,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 @SpringBootApplication(scanBasePackages = {"${feifan.info.base-package}.server", "${feifan.info.base-package}.module"})
 public class FeifanServerApplication {
 
-    public static void main(String[] args) {
+    public static void main(String[] args)
+    {
         SpringApplication.run(FeifanServerApplication.class, args);
     }