Prechádzať zdrojové kódy

调整数据参数app看课

yfh 4 týždňov pred
rodič
commit
ca706dfdea

+ 1 - 1
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -2673,7 +2673,7 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
             // 设置 Redis 记录的过期时间(例如 5 分钟)
             redisCache.expire(redisKey, 300, TimeUnit.SECONDS);
         }
-
+        openIMService.checkAndImportFriendByDianBo(param.getCompanyUserId(), param.getUserId().toString(),  "", true);
         // 添加会员销售关系表数据
         // 逻辑调整:如果会员已经绑定了销售,直接提示,不添加重粉数据了-2025年6月16日14点58分
 //        FsUserCompanyUser fsUserCompanyUser = getFsUserCompanyUser(param, fsUser);

+ 4 - 0
fs-service/src/main/java/com/fs/his/mapper/FsUserMapper.java

@@ -470,6 +470,10 @@ public interface FsUserMapper
 
     List<FsUser> selectFsUserListByPhone(String phone);
 
+
+    @Select("select * from fs_user where apple_key = #{appleKey}")
+    FsUser findUserByAppleKey(String appleKey);
+
     void updatePasswordByPhone(@Param("password")String password, @Param("encryptPhone")String encryptPhone);
 
     /**

+ 8 - 0
fs-service/src/main/java/com/fs/his/service/IFsUserCouponService.java

@@ -1,6 +1,8 @@
 package com.fs.his.service;
 
 import java.util.List;
+
+import com.fs.his.domain.FsUser;
 import com.fs.his.domain.FsUserCoupon;
 import com.fs.his.param.FsUserCouponParam;
 import com.fs.his.param.FsUserCouponSendParam;
@@ -74,4 +76,10 @@ public interface IFsUserCouponService
     List<FsUserCouponListUVO> getMyEnableCouponList(FsUserCouponUParam param);
 
     FsUserCouponCountUVO selectFsUserCouponCountUVO(FsUserCouponUParam param);
+
+    /**
+     * 发送注册优惠券
+     * @param user
+     */
+    void sendRegisterCoupon(FsUser user);
 }

+ 44 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsUserCouponServiceImpl.java

@@ -1,12 +1,18 @@
 package com.fs.his.service.impl;
 
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.Date;
 import java.util.List;
 
+import cn.hutool.json.JSONUtil;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.SecurityUtils;
 import com.fs.common.utils.StringUtils;
+import com.fs.his.config.CouponConfig;
 import com.fs.his.domain.FsCoupon;
+import com.fs.his.domain.FsUser;
 import com.fs.his.mapper.FsCouponMapper;
 import com.fs.his.param.FsUserCouponParam;
 import com.fs.his.param.FsUserCouponSendParam;
@@ -15,6 +21,7 @@ import com.fs.his.utils.PhoneUtil;
 import com.fs.his.vo.FsUserCouponCountUVO;
 import com.fs.his.vo.FsUserCouponListUVO;
 import com.fs.his.vo.FsUserCouponListVO;
+import com.fs.system.service.ISysConfigService;
 import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -37,6 +44,10 @@ public class FsUserCouponServiceImpl implements IFsUserCouponService
 
     @Autowired
     private FsCouponMapper fsCouponMapper;
+
+    @Autowired
+    private ISysConfigService configService;
+
     /**
      * 查询会员优惠券
      *
@@ -192,4 +203,37 @@ public class FsUserCouponServiceImpl implements IFsUserCouponService
         }
         return countUVO;
     }
+
+    @Override
+    public void sendRegisterCoupon(FsUser user) {
+        Date createTime = user.getCreateTime();
+        if (!isCreateTimeMoreThanOneDay(createTime)) {
+            Long userId = user.getUserId();
+            String json = configService.selectConfigByKey("his.coupon");
+            CouponConfig config = JSONUtil.toBean(json, CouponConfig.class);
+            Long[] registerCoupons = config.getRegisterCoupon();
+            if (registerCoupons != null){
+                for (Long registerCoupon : registerCoupons) {
+                    FsUserCouponSendParam param = new FsUserCouponSendParam();
+                    param.setCouponId(registerCoupon);
+                    param.setUserId(userId);
+                    sendFsUserCoupon(param);
+                }
+            }
+
+        }
+    }
+
+    /**
+     * 判断是否超过一天
+     * @param createTime
+     * @return
+     */
+    public static boolean isCreateTimeMoreThanOneDay(Date createTime) {
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime createTimeLocal = createTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+
+        // 判断是否超过一天
+        return createTimeLocal.isBefore(now.minusDays(1));
+    }
 }

+ 103 - 17
fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java

@@ -18,6 +18,7 @@ import com.fs.his.config.FsSysConfig;
 import com.fs.his.domain.FsUser;
 import com.fs.his.domain.FsUserNewTask;
 import com.fs.his.mapper.FsUserMapper;
+import com.fs.his.service.IFsUserCouponService;
 import com.fs.his.service.IFsUserNewTaskService;
 import com.fs.his.service.IFsUserService;
 import com.fs.his.utils.ConfigUtil;
@@ -63,6 +64,9 @@ public class AppLoginController extends AppBaseController{
     @Autowired
     private RedisCache redisCache;
 
+    @Autowired
+    private IFsUserCouponService fsUserCouponService;
+
     @Autowired
     private ISmsService smsService;
     @ApiOperation("注册app用户")
@@ -301,6 +305,52 @@ public class AppLoginController extends AppBaseController{
 
     }
 
+
+    @ApiOperation("苹果登录")
+    @PostMapping("/loginByApple")
+    @Transactional
+    public R loginByApple(@Validated @RequestBody FsUserLoginByAppleParam param) {
+        try {
+            if (StringUtils.isEmpty(param.getAppleKey())) {
+                return R.error("获取苹果key失败");
+            }
+            // 根据苹果key查询用户
+            FsUser user = userMapper.findUserByAppleKey(param.getAppleKey());
+            Map<String, Object> map = new HashMap<>();
+            if (user == null) {
+                map.put("isNew", true);
+                return R.ok(map);
+            } else {
+                if (StringUtils.isNotEmpty(param.getJpushId())) {
+                    updateExistingUserJpushId(user, param.getJpushId());
+                    try {
+                        //发送注册优惠券
+                        fsUserCouponService.sendRegisterCoupon(user);
+                    } catch (Exception e) {
+                        logger.error("发送注册优惠券失败:{}",e.getMessage());
+                    }
+                }
+                if (StringUtils.isEmpty(user.getPhone())) {
+                    map.put("isNew", true);
+                    return R.ok(map);
+                }
+            }
+            /*if (user.getStatus()==0){
+                return R.error("登录失败,账户被禁用");
+            }*/
+            int isFirstLogin = userNewTaskService.performTaskOne(user.getUserId());
+            String token = jwtUtils.generateToken(user.getUserId());
+            redisCache.setCacheObject("userToken:" + user.getUserId(), token, 604800, TimeUnit.SECONDS);
+            map.put("token", token);
+            map.put("user", user);
+            map.put("isFirst",isFirstLogin);
+            return R.ok(map);
+        }catch (Exception e){
+            logger.error("zyp 苹果登录失败:{}", e.getMessage());
+            return R.error("登录失败");
+        }
+    }
+
     @PostMapping("/loginByPhone")
     public R loginByPhone(@RequestBody Map<String,String> map){
         String phone = map.get("phone");
@@ -368,15 +418,33 @@ public class AppLoginController extends AppBaseController{
         FsUser userMap = findUserByPhone(param.getPhone());
         //绑定的手机号已存在用户的情况,将微信登录的时候创建的新号的UnionId移动到老号中,删除新号(将两个号合并)
         if (userMap!=null){
+            if (userMap.getUserId().equals(user.getUserId())) {
+                user.setPhone(param.getPhone());
+                user.setLoginDevice(param.getLoginDevice());
+                user.setSource(param.getSource());
+                userService.updateFsUser(user);
+                return generateTokenAndReturn(user);
+            }
             if (StringUtils.isNotEmpty(userMap.getUnionId())&&!userMap.getUnionId().equals(user.getUnionId())){
                 return R.error("该手机号已绑定其他微信");
             }
-            userMap.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
-            userMap.setSource(param.getSource());
-            userMap.setUnionId(user.getUnionId());
-            if (userService.updateFsUser(userMap)>0){
-                userService.realDeleteFsUserByUserId(user.getUserId());
-                return generateTokenAndReturn(userMap);
+            //如果存在手机号也有用户,微信也有用户,保留创建时间比较久的用户
+            FsUser keepUser;
+            FsUser deleteUser;
+            if (userMap.getCreateTime().before(user.getCreateTime())){
+                keepUser = userMap;
+                deleteUser = user;
+            }else {
+                keepUser = user;
+                deleteUser = userMap;
+            }
+            keepUser.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
+            keepUser.setSource(param.getSource());
+            keepUser.setUnionId(user.getUnionId());
+            keepUser.setPhone(param.getPhone());
+            if (userService.updateFsUser(keepUser)>0){
+                userService.realDeleteFsUserByUserId(deleteUser.getUserId());
+                return generateTokenAndReturn(keepUser);
             }
             return R.error("绑定手机号失败");
         }
@@ -414,20 +482,38 @@ public class AppLoginController extends AppBaseController{
             FsUser user = findUserByPhone(param.getPhone());
             if (user!=null && StringUtils.isEmpty(user.getUnionId())){
                 FsUser userByUnionId = userMapper.selectFsUserByUnionid(unionid);
-                //绑定的微信已存在用户的情况,将手机号一键登录的时候创建的新号的UnionId移动到老号中,删除新号(将两个号合并)
+                //绑定的微信已存在用户的情况,将手机号一键登录的时候创建的新号的手机号移动到老号中,删除新号(将两个号合并)
                 if (userByUnionId!=null){
                     if (StringUtils.isNotEmpty(userByUnionId.getPhone())&&!user.getPhone().equals(userByUnionId.getPhone())){
                         return R.error("该微信已绑定其他手机号");
                     }
-                    userByUnionId.setPhone(param.getPhone());
-                    userByUnionId.setSource(param.getSource() != null ? param.getSource() : null );
-                    userByUnionId.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
-                    userByUnionId.setNickName(nickname);
-                    userByUnionId.setAvatar(avatar);
-                    userByUnionId.setSex(sex);
-                    if (userService.updateFsUser(userByUnionId)>0){
-                        userService.realDeleteFsUserByUserId(user.getUserId());
-                        return generateTokenAndReturn(userByUnionId);
+                    if (userByUnionId.getUserId().equals(user.getUserId())) {
+                        user.setPhone(param.getPhone());
+                        user.setLoginDevice(param.getLoginDevice());
+                        user.setSource(param.getSource());
+                        user.setUnionId(unionid);
+                        userService.updateFsUser(user);
+                        return generateTokenAndReturn(user);
+                    }
+                    FsUser keepUser;
+                    FsUser deleteUser;
+                    if (user.getCreateTime().before(userByUnionId.getCreateTime())){
+                        keepUser = user;
+                        deleteUser = userByUnionId;
+                    } else {
+                        keepUser = userByUnionId;
+                        deleteUser = user;
+                    }
+                    keepUser.setUnionId(unionid);
+                    keepUser.setPhone(param.getPhone());
+                    keepUser.setSource(param.getSource() != null ? param.getSource() : null );
+                    keepUser.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
+                    keepUser.setNickName(nickname);
+                    keepUser.setAvatar(avatar);
+                    keepUser.setSex(sex);
+                    if (userService.updateFsUser(keepUser)>0){
+                        userService.realDeleteFsUserByUserId(deleteUser.getUserId());
+                        return generateTokenAndReturn(keepUser);
                     }
                     else {
                         return R.error("绑定微信失败");
@@ -447,7 +533,7 @@ public class AppLoginController extends AppBaseController{
                     }
                 }
             }
-            return R.error("数据参数异常!");
+            return generateTokenAndReturn(user);
         }catch (Exception e){
             logger.error("zyp 登录失败:{}", e.getMessage());
             return R.error("登录失败");

+ 17 - 0
fs-user-app/src/main/java/com/fs/app/param/FsUserLoginByAppleParam.java

@@ -0,0 +1,17 @@
+package com.fs.app.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class FsUserLoginByAppleParam implements Serializable {
+    private String jpushId;
+
+    private String loginDevice;//当前登陆设备
+
+    private String source; //app来源
+
+    private String appleKey;
+
+}