|
|
@@ -1,15 +1,18 @@
|
|
|
package com.kxs.user.biz.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.date.DatePattern;
|
|
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
import cn.hutool.core.text.CharSequenceUtil;
|
|
|
-import cn.hutool.core.text.StrPool;
|
|
|
import cn.hutool.core.util.IdcardUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.RandomUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.crypto.SecureUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.kxs.common.core.constant.CacheConstants;
|
|
|
import com.kxs.common.core.constant.CommonConstants;
|
|
|
@@ -31,29 +34,62 @@ import com.kxs.store.api.model.KxsWarehouseLimit;
|
|
|
import com.kxs.system.api.feign.RemoteUserMsgService;
|
|
|
import com.kxs.system.api.model.KxsUserMsg;
|
|
|
import com.kxs.system.api.util.MsgTemplateUtil;
|
|
|
+import com.kxs.user.api.dto.admin.user.RestPwdDTO;
|
|
|
+import com.kxs.user.api.dto.admin.user.SysUserLogoutListDTO;
|
|
|
+import com.kxs.user.api.dto.admin.user.SysUserPageDTO;
|
|
|
+import com.kxs.user.api.dto.admin.user.SysUserUserAccountListDTO;
|
|
|
+import com.kxs.user.api.dto.admin.user.SysUserWhereListDTO;
|
|
|
+import com.kxs.user.api.dto.admin.user.UserSearchDTO;
|
|
|
import com.kxs.user.api.dto.kxsapp.ConcealParentDTO;
|
|
|
import com.kxs.user.api.dto.kxsapp.app.ForgetPwdDTO;
|
|
|
import com.kxs.user.api.dto.kxsapp.app.MchRegisterDTO;
|
|
|
import com.kxs.user.api.dto.kxsapp.app.RegisterDTO;
|
|
|
-import com.kxs.user.api.dto.kxsapp.user.*;
|
|
|
-import com.kxs.user.api.model.*;
|
|
|
-import com.kxs.user.api.vo.kxsapp.user.*;
|
|
|
+import com.kxs.user.api.dto.kxsapp.user.ForgetPayPwdDTO;
|
|
|
+import com.kxs.user.api.dto.kxsapp.user.RealUserDTO;
|
|
|
+import com.kxs.user.api.dto.kxsapp.user.UserCheckUserInfoDTO;
|
|
|
+import com.kxs.user.api.dto.kxsapp.user.UserHandPwdDTO;
|
|
|
+import com.kxs.user.api.dto.kxsapp.user.UserMyUserListDTO;
|
|
|
+import com.kxs.user.api.dto.kxsapp.user.UserUpdateAreaDTO;
|
|
|
+import com.kxs.user.api.dto.kxsapp.user.UserUpdateLoginPhoneDTO;
|
|
|
+import com.kxs.user.api.dto.kxsapp.user.UserUpdatePwdDTO;
|
|
|
+import com.kxs.user.api.model.KxsLeader;
|
|
|
+import com.kxs.user.api.model.KxsPartner;
|
|
|
+import com.kxs.user.api.model.KxsUser;
|
|
|
+import com.kxs.user.api.model.KxsUserAmount;
|
|
|
+import com.kxs.user.api.model.KxsUserBank;
|
|
|
+import com.kxs.user.api.model.KxsUserPresetLog;
|
|
|
+import com.kxs.user.api.model.KxsUserReal;
|
|
|
+import com.kxs.user.api.vo.admin.user.SysFeignUserDetailVO;
|
|
|
+import com.kxs.user.api.vo.admin.user.SysTopUserVO;
|
|
|
+import com.kxs.user.api.vo.admin.user.SysUserPageVO;
|
|
|
+import com.kxs.user.api.vo.admin.user.SysUserUserAccountListVO;
|
|
|
+import com.kxs.user.api.vo.kxsapp.user.RealUserInfoVO;
|
|
|
+import com.kxs.user.api.vo.kxsapp.user.UserCodeInfoVO;
|
|
|
+import com.kxs.user.api.vo.kxsapp.user.UserInfoVO;
|
|
|
+import com.kxs.user.api.vo.kxsapp.user.UserMyUserDetailVO;
|
|
|
+import com.kxs.user.api.vo.kxsapp.user.UserMyUserStatisticsVO;
|
|
|
import com.kxs.user.api.vo.kxsapp.userLevel.LevelDetailVO;
|
|
|
import com.kxs.user.api.vo.kxsapp.userLevel.LevelsVO;
|
|
|
import com.kxs.user.biz.constant.UserConstants;
|
|
|
import com.kxs.user.biz.constant.enums.KxsUserStatusEnum;
|
|
|
import com.kxs.user.biz.constant.enums.UserErrorTypeEnum;
|
|
|
import com.kxs.user.biz.constant.enums.UserRealStatusEnum;
|
|
|
-import com.kxs.user.biz.mapper.*;
|
|
|
+import com.kxs.user.biz.mapper.KxsLeaderMapper;
|
|
|
+import com.kxs.user.biz.mapper.KxsPartnerMapper;
|
|
|
+import com.kxs.user.biz.mapper.KxsUserAmountMapper;
|
|
|
+import com.kxs.user.biz.mapper.KxsUserBankMapper;
|
|
|
+import com.kxs.user.biz.mapper.KxsUserMapper;
|
|
|
+import com.kxs.user.biz.mapper.KxsUserPresetLogMapper;
|
|
|
+import com.kxs.user.biz.mapper.KxsUserRealMapper;
|
|
|
import com.kxs.user.biz.service.KxsUserService;
|
|
|
import com.kxs.user.biz.util.SmsUtils;
|
|
|
+import com.kxs.user.biz.util.TopUserIdUtil;
|
|
|
import io.seata.spring.annotation.GlobalTransactional;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
-import org.checkerframework.checker.units.qual.K;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.cache.CacheManager;
|
|
|
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.security.authentication.event.LogoutSuccessEvent;
|
|
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
|
|
@@ -69,7 +105,9 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
import java.util.UUID;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
@@ -270,6 +308,192 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
|
|
|
}
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<SysUserPageVO> getUserPage(Page page, SysUserPageDTO param) {
|
|
|
+ List<SysUserPageVO> list = baseMapper.getUserPage(page, param);
|
|
|
+ //封装顶级创客信息
|
|
|
+ packageTopUser(list);
|
|
|
+ if(page != null){
|
|
|
+ page.setRecords(list);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 封装顶级创客信息
|
|
|
+ * @param list
|
|
|
+ */
|
|
|
+ private void packageTopUser(List<SysUserPageVO> list){
|
|
|
+ if(CollectionUtil.isNotEmpty(list)){
|
|
|
+ List<KxsUser> kxsUserList = new ArrayList<>();
|
|
|
+ kxsUserList.addAll(list);
|
|
|
+ Map<Integer, SysTopUserVO> topUserMap = getTopUserMap(kxsUserList);
|
|
|
+ for(SysUserPageVO sysUserPageVO:list){
|
|
|
+ Integer userId = sysUserPageVO.getId();
|
|
|
+ if(topUserMap.containsKey(userId)){
|
|
|
+ SysTopUserVO sysTopUserVO = topUserMap.get(userId);
|
|
|
+ sysUserPageVO.setTopUsername(sysTopUserVO.getTopUsername());
|
|
|
+ sysUserPageVO.setTopUserCode(sysTopUserVO.getTopUserCode());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取用户和顶级创客的关系map
|
|
|
+ * @param list
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Map<Integer,SysTopUserVO> getTopUserMap(List<KxsUser> list){
|
|
|
+ //用户和顶级创客的对应关系
|
|
|
+ Map<Integer,SysTopUserVO> topUserMap = new HashMap<>();
|
|
|
+ if(CollectionUtil.isEmpty(list)){
|
|
|
+ return topUserMap;
|
|
|
+ }
|
|
|
+ //顶级创客的userId集合
|
|
|
+ List<Integer> userIds = new ArrayList<>();
|
|
|
+ //当前用户和顶级创客对应关系map
|
|
|
+ Map<Integer,Integer> map = new HashMap<>();
|
|
|
+ for(KxsUser kxsUser:list){
|
|
|
+ String pidPath = kxsUser.getPidPath();
|
|
|
+ String topUserId = TopUserIdUtil.getTopUserId(pidPath);
|
|
|
+ if(StringUtils.isNotBlank(topUserId)){
|
|
|
+ map.put(kxsUser.getId(),Integer.valueOf(topUserId));
|
|
|
+ userIds.add(Integer.valueOf(topUserId));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(CollectionUtil.isNotEmpty(userIds)){
|
|
|
+ //查询顶级创客
|
|
|
+ List<KxsUser> kxsUsers = listByIds(userIds);
|
|
|
+ Map<Integer, KxsUser> userMap = kxsUsers.stream().collect(Collectors.toMap(o -> o.getId(), o -> o, (o1, o2) -> o2));
|
|
|
+ for(Integer userId:map.keySet()){
|
|
|
+ Integer topUserId = map.get(userId);
|
|
|
+ if(map.containsKey(userId) && userMap.containsKey(topUserId)){
|
|
|
+ KxsUser kxsUser = userMap.get(topUserId);
|
|
|
+ SysTopUserVO sysTopUserVO = new SysTopUserVO();
|
|
|
+ sysTopUserVO.setTopUserCode(kxsUser.getUserCode());
|
|
|
+ sysTopUserVO.setTopUsername(kxsUser.getUsername());
|
|
|
+ topUserMap.put(userId,sysTopUserVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return topUserMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SysUserPageVO> getUserWhereList(Page page, SysUserWhereListDTO param) {
|
|
|
+ String userId = param.getUserId();
|
|
|
+ KxsUser kxsUser = getById(userId);
|
|
|
+ if(kxsUser == null){
|
|
|
+ throw new GlobalCustomerException("创客信息不存在");
|
|
|
+ }
|
|
|
+ param.setPid(kxsUser.getPid());
|
|
|
+ List<SysUserPageVO> list = baseMapper.getUserWhereList(page, param);
|
|
|
+ //封装顶级创客信息
|
|
|
+ packageTopUser(list);
|
|
|
+ if(page != null){
|
|
|
+ page.setRecords(list);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<KxsUser> getLogoutListPage(Page page, SysUserLogoutListDTO param) {
|
|
|
+ List<KxsUser> list = baseMapper.getLogoutListPage(page, param);
|
|
|
+ if(page != null){
|
|
|
+ page.setRecords(list);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void updateStatusByUserId(String userId,UserStatusEnum userStatusEnum) {
|
|
|
+ KxsUser kxsUser = getById(userId);
|
|
|
+ if(kxsUser == null){
|
|
|
+ throw new GlobalCustomerException("创客信息不存在");
|
|
|
+ }
|
|
|
+ kxsUser.setStatus(userStatusEnum.getCode());
|
|
|
+ updateById(kxsUser);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void updateStatusByUserIds(List<String> userIdList,UserStatusEnum userStatusEnum) {
|
|
|
+ if(CollectionUtil.isNotEmpty(userIdList)){
|
|
|
+ List<KxsUser> kxsUsers = listByIds(userIdList);
|
|
|
+ if(CollectionUtil.isNotEmpty(kxsUsers)){
|
|
|
+ for(KxsUser kxsUser:kxsUsers){
|
|
|
+ kxsUser.setStatus(userStatusEnum.getCode());
|
|
|
+ }
|
|
|
+ this.updateBatchById(kxsUsers);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void restPwd(RestPwdDTO param) {
|
|
|
+ KxsUser kxsUser = getById(param.getUserId());
|
|
|
+ if(kxsUser == null){
|
|
|
+ throw new GlobalCustomerException("创客信息不存在");
|
|
|
+ }
|
|
|
+ String password = param.getPassword();
|
|
|
+ if(StringUtils.isBlank(password)){
|
|
|
+ password = "123456";
|
|
|
+ }
|
|
|
+ if(StringUtils.isBlank(kxsUser.getSalt())){
|
|
|
+ kxsUser.setSalt(UUID.randomUUID().toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ //重置密码
|
|
|
+ kxsUser.setPassword(ENCODER.encode(password + kxsUser.getSalt()));
|
|
|
+
|
|
|
+ //保存新密码
|
|
|
+ this.updateById(kxsUser);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SysUserUserAccountListVO> userAccountPage(Page page, SysUserUserAccountListDTO param) {
|
|
|
+ List<SysUserUserAccountListVO> list = baseMapper.userAccountPage(page, param);
|
|
|
+ if(page != null){
|
|
|
+ page.setRecords(list);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Integer> searchUserList(UserSearchDTO userSearchDTO) {
|
|
|
+ LambdaQueryWrapper<KxsUser> query = new LambdaQueryWrapper();
|
|
|
+ query.like(StringUtils.isNotBlank(userSearchDTO.getUsername()),KxsUser::getUsername,userSearchDTO.getUsername());
|
|
|
+ query.like(StringUtils.isNotBlank(userSearchDTO.getUserCode()),KxsUser::getUserCode,userSearchDTO.getUserCode());
|
|
|
+ query.last("limit 100");
|
|
|
+ List<Integer> ids = new ArrayList<>();
|
|
|
+ List<KxsUser> userList = this.list(query);
|
|
|
+ if(CollectionUtil.isNotEmpty(userList)){
|
|
|
+ ids = userList.stream().map(o -> o.getId()).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ return ids;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<Integer, SysFeignUserDetailVO> topUserList(List<Integer> userIds) {
|
|
|
+ List<KxsUser> kxsUsers = listByIds(userIds);
|
|
|
+ Map<Integer, SysTopUserVO> topUserMap = getTopUserMap(kxsUsers);
|
|
|
+ Map<Integer,SysFeignUserDetailVO> map = new HashMap<>();
|
|
|
+ if(CollectionUtil.isNotEmpty(kxsUsers)){
|
|
|
+ for(KxsUser kxsUser:kxsUsers){
|
|
|
+ SysFeignUserDetailVO sysFeignUserDetailVO = new SysFeignUserDetailVO();
|
|
|
+ sysFeignUserDetailVO.setUsername(kxsUser.getUsername());
|
|
|
+ sysFeignUserDetailVO.setUserCode(kxsUser.getUserCode());
|
|
|
+ if(topUserMap.containsKey(kxsUser.getId())){
|
|
|
+ SysTopUserVO sysTopUserVO = topUserMap.get(kxsUser.getId());
|
|
|
+ sysFeignUserDetailVO.setTopUserCode(sysTopUserVO.getTopUserCode());
|
|
|
+ sysFeignUserDetailVO.setTopUsername(sysTopUserVO.getTopUsername());
|
|
|
+ }
|
|
|
+ map.put(kxsUser.getId(),sysFeignUserDetailVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public Boolean sendCode(String mobile) {
|
|
|
|