UserServiceImpl.java 19.3 KB
Newer Older
licc's avatar
licc committed
1 2
package cn.wisenergy.service.app.impl;

3
import cn.wisenergy.common.constant.CommonAttributes;
4
import cn.wisenergy.common.utils.*;
5 6
import cn.wisenergy.mapper.*;
import cn.wisenergy.model.app.*;
7
import cn.wisenergy.model.dto.UsersDto;
8
import cn.wisenergy.model.dto.TeamQueryDto;
9 10
import cn.wisenergy.model.vo.AerialDeliveryVo;
import cn.wisenergy.model.vo.UserPoolVo;
11
import cn.wisenergy.service.Manager.RegistUserMoudleInitManager;
12
import cn.wisenergy.service.Manager.UserDataInfoManager;
13
import cn.wisenergy.service.app.AerialDeliveryUserService;
licc's avatar
licc committed
14
import cn.wisenergy.service.app.UserService;
15
import com.alibaba.fastjson.JSONObject;
licc's avatar
licc committed
16
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
17
import com.github.pagehelper.PageInfo;
licc's avatar
licc committed
18
import lombok.extern.slf4j.Slf4j;
19
import org.apache.commons.lang3.StringUtils;
licc's avatar
licc committed
20 21
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
22
import org.springframework.transaction.annotation.Transactional;
m1991's avatar
m1991 committed
23
import org.springframework.util.CollectionUtils;
licc's avatar
licc committed
24

25
import java.util.*;
licc's avatar
licc committed
26 27

/**
licc's avatar
licc committed
28
 * @author 86187
licc's avatar
licc committed
29 30 31 32 33 34 35 36 37 38 39
 * @ Description: 用户接口实现
 * @ Author     : 86187
 * @ Date       : 2021/1/6 16:11
 */
@Service
@Slf4j
public class UserServiceImpl extends ServiceImpl<UsersMapper, User> implements UserService {

    @Autowired
    private UsersMapper usersMapper;

m1991's avatar
m1991 committed
40 41 42
    @Autowired
    private RecommendUserMapper recommendUserMapper;

43 44
    @Autowired
    private TeamUserInfoMapper teamUserInfoMapper;
licc's avatar
licc committed
45

46
    @Autowired
47
    private RegistUserMoudleInitManager registUserMoudleInit;
48

49 50 51
    @Autowired
    private AerialDeliveryUserService aerialDeliveryUserService;

52 53 54
    @Autowired
    private UserLevelServiceImpl userLevelService;

55 56 57
    @Autowired
    private UserDataInfoManager userDataInfoManager;

m1991's avatar
m1991 committed
58 59 60
    @Autowired
    private RedisUtils redisUtils;

licc's avatar
licc committed
61 62
    private static final String INVITE_CODE = "1";

63 64
    @Override
    public User getById(String userId) {
licc's avatar
licc committed
65
        return usersMapper.getByUserId(userId);
licc's avatar
licc committed
66 67
    }

68 69
    /**
     * 获取登录用户
licc's avatar
licc committed
70
     *
71 72 73 74 75
     * @param token
     */
    @Override
    public UsersDto getLoginUser(String token) {
        UsersDto usersDto = null;
licc's avatar
licc committed
76
        String key = RedisKeyUtils.formatKeyWithPrefix(Constants.Redis.PREFIX_TOKEN, token);
77
        String value = redisUtils.getValue(key);
licc's avatar
licc committed
78
        if (!StringUtils.isBlank(value)) {
79 80 81 82 83 84
            usersDto = JSONObject.parseObject(value, UsersDto.class);
            log.info("获取到用户登录信息users:{}", value);
        }
        return usersDto;
    }

licc's avatar
licc committed
85
    @Override
86 87
    public R<Integer> getById1(String userId) {

88
        return R.ok(usersMapper.ByUserId(userId));
licc's avatar
licc committed
89 90
    }

liqin's avatar
liqin committed
91 92 93 94 95
    @Override
    public User getUserById(Long id) {
        return this.usersMapper.getUserById(id);
    }

96 97
    @Override
    public User getByUserId(String userId) {
98

codezwjava's avatar
codezwjava committed
99
        return usersMapper.getByUserId(userId);
100
    }
m1991's avatar
m1991 committed
101 102 103


    @Override
m1991's avatar
m1991 committed
104
    public User queryUsersByPhone(String userId) {
105
        //查询数据库,看看是否存在该用户
licc's avatar
licc committed
106
        return usersMapper.getByUserId(userId);
m1991's avatar
m1991 committed
107 108
    }

m1991's avatar
m1991 committed
109 110 111 112 113 114
    @Override
    public User queryUsersByOpenId(String id) {
        return null;
    }

    @Override
115 116
    public Map userByZx(String userId, String beInvitedCode) {
        //查询数据库,看看是否存在该用户
m1991's avatar
m1991 committed
117
        User byUserId = usersMapper.getByUserId(userId);
118
        if (null != byUserId) {
119
            R.error(1, "该用户已存在!请直接登录!");
120
            Map map = new HashMap();
121
            map.put("code", 1);
122
            map.put("msg", "该用户已存在!请直接登录!");
m1991's avatar
m1991 committed
123
            return map;
m1991's avatar
m1991 committed
124
        }
125 126


m1991's avatar
m1991 committed
127
        /**
128
         * 判断用户推荐人的邀请码是否为空,空的话填写1   || "" == beInvitedCode
m1991's avatar
m1991 committed
129
         */
licc's avatar
licc committed
130
        if (StringUtils.isBlank(beInvitedCode)) {
131
            //插入用户手机号与推荐人邀请码
licc's avatar
licc committed
132
            String inviteCode = "0";
133
            beInvitedCode = "1";
licc's avatar
licc committed
134
            int userLevel = 0;
135
            int frozen = 0;
licc's avatar
licc committed
136
            String headImage = Constants.Common.HEAD_POTRAIT;
137
            usersMapper.insertbyint(userId, inviteCode, beInvitedCode, userLevel, headImage, frozen);
138
            //初始化六张表
139
            registUserMoudleInit.registUserMoudleInit(userId);
140
        } else {
141
//            邀请码不为空但查询不到时
142
            //用户的被邀请码,查询到推荐人用户,根据推荐人用户的邀请码查询/修改
143
            User user = usersMapper.getByBeInvitedCode(beInvitedCode);
144 145

            //邀请人的被邀请码
146
            if (null == user){
147 148

                Map map = new HashMap();
149
                R.error(1, "邀请人不存在,请重新填写!");
150
                map.put("code", 1);
151
                map.put("msg", "邀请人不存在,请重新填写!");
152
                return map;
153 154
//                String byqm = user.getBeInvitedCode();
            }
155

156

157 158 159 160 161 162 163 164
            //插入用户手机号与推荐人邀请码
            String inviteCode = "0";
            int userLevel = 0;
            int frozen = 0;
            String headImage = Constants.Common.HEAD_POTRAIT;
            usersMapper.insertbyint(userId, inviteCode, beInvitedCode, userLevel, headImage, frozen);
            //初始化六张表
            registUserMoudleInit.registUserMoudleInit(userId);
165

166

licc's avatar
licc committed
167
            //通过被邀请码,比对本人邀请码查询本人id
168
            String idb = String.valueOf(usersMapper.beInvitedCode1(beInvitedCode));
licc's avatar
licc committed
169

170
            //判断是否存在被邀请人的用户
171
            if (null == idb) {
172
                Map map = new HashMap();
173
                R.error(1, "邀请人不存在,请重新填写!");
174
                map.put("code", 1);
175
                map.put("msg", "邀请人不存在,请重新填写!");
176 177
                return map;
            }
178
            //推荐人的id
licc's avatar
licc committed
179
            int idbc = Integer.valueOf(idb);
180 181

            //获取注册用户的id
182 183
            User use = usersMapper.getByUserId(userId);
            int ida = use.getId();
184

185
            //判断被邀请用户的创建时间是否比推荐人的用户时间晚
186
            if (idbc > ida) {
187 188 189 190
                Map map = new HashMap();
                R.error(1, "注册失败!邀请码无效,请重新填写!");
                map.put("code:", 1);
                map.put("msg:", "注册失败!邀请码无效,请重新填写!");
191 192
                return map;
            }
193

m1991's avatar
m1991 committed
194 195 196
            if (null == beInvitedCode || "" == beInvitedCode) {
                beInvitedCode = String.valueOf(1);
            }
m1991's avatar
m1991 committed
197
        }
198

m1991's avatar
m1991 committed
199
        //根据插入的用户手机号,查询用户唯一ID
200 201
       Integer i= usersMapper.getuserIdById(userId);
        if (null == i || "".equals(i)) {
202 203 204
            Map map = new HashMap();
            map.put("code", 1);
            map.put("msg", "该用户不存在!");
205 206 207
            return map;

        }
208

209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
        try{
            long yqm = usersMapper.getuserIdById(userId);
            //用户唯一ID调用生成6位邀请码
            String inviteCode = ShareCodeUtil.idToCode(yqm);
            Integer userLevel = 0;
            //根据用户手机号,更新用户信息
            User byUserId1 = usersMapper.getByUserId(userId);
            byUserId1.setInviteCode(inviteCode);
            byUserId1.setUserLevel(0);
            byUserId1.setFrozen(0);
            usersMapper.updateById(byUserId1);
        }catch (Exception e){
            long yqm = usersMapper.getuserIdById(userId);
            //用户唯一ID调用生成6位邀请码
            String inviteCode = ShareCodeUtil.idToCode(yqm);
            Integer userLevel = 0;
            //根据用户手机号,更新用户信息
            User byUserId1 = usersMapper.getByUserId(userId);
            byUserId1.setInviteCode(inviteCode);
            byUserId1.setUserLevel(0);
            byUserId1.setFrozen(0);
            usersMapper.updateById(byUserId1);
        }
232
        String BYQM = usersMapper.BYQMById(userId);
m1991's avatar
m1991 committed
233

234 235 236 237
        if ("1".equals(BYQM)) {
            Map map = new HashMap();
            map.put("code", 0);
            map.put("msg", "注册成功!");
licc's avatar
licc committed
238
            String key = StringUtil.formatKeyWithPrefix(Constants.RedisKey.PROJECT_PRIFIX, Constants.RedisKey.SMS_PRIFIX, userId, "0" + "");
239
            redisUtils.delete(key);
m1991's avatar
m1991 committed
240
            return map;
m1991's avatar
m1991 committed
241
        }
codezwjava's avatar
codezwjava committed
242 243 244

        //根据当前推荐人的邀请码查询 上级用户id
        String userIdByIntive = usersMapper.getUserByIntiveCode(beInvitedCode);
licc's avatar
licc committed
245 246 247
        if (null == userIdByIntive) {
            R.error(1, "用户推荐人邀请码不存在,请填写正确的邀请码");
        } else {
248 249 250 251 252
            //上级用户的直推信息 普通用户数量+1
            RecommendUser recommendUserMapperByUserId = recommendUserMapper.getByUserId(userIdByIntive);
            Integer normalUserNum = recommendUserMapperByUserId.getNormalUserNum();
            recommendUserMapperByUserId.setNormalUserNum(normalUserNum + 1);
            recommendUserMapper.updateById(recommendUserMapperByUserId);
m1991's avatar
m1991 committed
253
        }
codezwjava's avatar
codezwjava committed
254

255
        //递归向上修改团队用户信息表
256
        teamUserInfo(beInvitedCode);
257 258
        //记录带邀请码注册的用户行为信息
        userDataInfoManager.addUserSetBeInvitedCodeDoc(userId,userIdByIntive);
259
        Map map = new HashMap();
260
        R.ok("注册成功!", 0);
261 262
        map.put("code", 0);
        map.put("msg", "注册成功!");
263 264
        return map;
    }
m1991's avatar
m1991 committed
265

266
    @Override
licc's avatar
licc committed
267
    public Integer getUserIdById(String userId) {
268
        return null;
m1991's avatar
m1991 committed
269
    }
270

271 272 273 274

    @Override
    public R<AerialDeliveryVo> queryAerialDelivery() {
        log.info("shop-mall[]UserServiceImpl[]queryAerialDelivery[]input.method");
licc's avatar
licc committed
275
        //获取空投池用户
licc's avatar
licc committed
276
        List<User> list = usersMapper.getList();
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294
        if (CollectionUtils.isEmpty(list)) {
            return R.ok(new AerialDeliveryVo());
        }

        AerialDeliveryVo aerialDeliveryVo = new AerialDeliveryVo();
        List<UserPoolVo> userPoolVoList = new ArrayList<>();
        for (User user : list) {
            UserPoolVo userPoolVo = new UserPoolVo();
            userPoolVo.setUserId(user.getUserId());
            userPoolVo.setHeadImage(user.getHeadImage());
            userPoolVo.setIntoTime(user.getCreateTime());
            userPoolVoList.add(userPoolVo);
        }
        aerialDeliveryVo.setTotal(list.size());
        aerialDeliveryVo.setUserPoolVos(userPoolVoList);
        return R.ok(aerialDeliveryVo);
    }

295

296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317
    @Override
    public R<Boolean> setHeadImage(String userId, String headImage) {
        log.info("shop-mall[]UserServiceImpl[]setHeadImage[]input.param.userId,headImage:" + userId, headImage);
        if (StringUtils.isBlank(userId) || StringUtils.isBlank(headImage)) {
            return R.error("入参不能为空!");
        }

        //获取用户信息
        User user = usersMapper.getByUserId(userId);
        if (null == user) {
            return R.error("用户信息不存在!");
        }

        //添加头像
        user.setHeadImage(headImage);
        int count = usersMapper.edit(user);
        if (count == 0) {
            return R.error("设置头像失败!");
        }
        return R.ok(0, true);
    }

liqin's avatar
liqin committed
318
    @Override
319 320 321 322 323 324 325 326 327 328 329 330
    public R<Boolean> fillInInviteCode(String userId, String inviteCode) {
        log.info("shop-mall[]UserServiceImpl[]fillInInviteCode[]input.param.userId,inviteCode:" + userId, inviteCode);
        if (StringUtils.isBlank(userId) || StringUtils.isBlank(inviteCode)) {
            return R.error("入参不能为空!");
        }

        //1、获取用户信息
        User user = usersMapper.getByUserId(userId);
        if (null == user) {
            return R.error("用户信息不存在!");
        }

licc's avatar
licc committed
331
        //判断用户是否有邀请码 1:无
licc's avatar
licc committed
332 333
        if (!INVITE_CODE.equals(user.getBeInvitedCode())) {
            return R.error("尊敬的用户您好,您的推荐人邀请码已存在,不能修改!");
licc's avatar
licc committed
334 335
        }

336 337 338 339 340 341 342
        //2、根据邀请码,获取邀请人信息
        User userCode = usersMapper.queryByInviteCode(inviteCode);
        if (null == userCode) {
            return R.error("邀请人信息不存在!");
        }

        //3、判断邀请人的注册时间是否大于当前用户
licc's avatar
licc committed
343 344
        if (user.getCreateTime().getTime() < userCode.getCreateTime().getTime()) {
            return R.error("请填写注册时间早于自己的用户邀请码!");
345 346
        }

licc's avatar
licc committed
347 348 349 350 351
        //4、判断用户推荐人邀请码是否为自己的邀请码
        if (user.getUserId().equals(userCode.getUserId())) {
            return R.error("推荐人不能是自己!");
        }

352
        //5、设置用户被邀请码
353 354
        user.setBeInvitedCode(inviteCode);
        int count = usersMapper.edit(user);
codezwjava's avatar
codezwjava committed
355 356 357

        //更新推荐用户的等级或者直推人数
        aerialDeliveryUserService.userSetBeinviteCode(userId, userCode.getUserId());
358 359 360 361 362 363
        if (count == 0) {
            return R.ok(1, false);
        }
        return R.ok(0, true);
    }

codezwjava's avatar
codezwjava committed
364 365
    //团队用户数据维护
    public void teamUserInfo(String beInvitedCode) {
366
        //根据邀请码查询上级用户的userId
codezwjava's avatar
codezwjava committed
367 368 369 370 371 372 373 374 375 376 377 378
        String teamUserId = usersMapper.getUserByIntiveCode(beInvitedCode);
        //查询上级用户的团队信息表
        TeamUserInfo teamUserInfoByUserId = teamUserInfoMapper.getByUserId(teamUserId);
        //上级用户团队信息普通用户数量+1
        Integer normalUserNum = teamUserInfoByUserId.getNormalUserNum();
        teamUserInfoByUserId.setNormalUserNum(normalUserNum + 1);
        teamUserInfoMapper.updateById(teamUserInfoByUserId);
        //根据上级用户id查询上级用户的邀请码
        User teamUser = usersMapper.getByUserId(teamUserId);
        String teamUserBeInvitedCode = teamUser.getBeInvitedCode();
        //递归实现上级所有的用户普通数量 + 1
        //若团队用户的被邀请码为 1 时 则没有上级用户用户
379
        if (!"1".equals(teamUserBeInvitedCode) && !"88888888".equals(teamUserBeInvitedCode)) {
codezwjava's avatar
codezwjava committed
380
            teamUserInfo(teamUserBeInvitedCode);
licc's avatar
licc committed
381
        } else {
codezwjava's avatar
codezwjava committed
382
            return;
383 384
        }
    }
licc's avatar
licc committed
385

m1991's avatar
m1991 committed
386 387
    /**
     * 用户登出
licc's avatar
licc committed
388
     *
m1991's avatar
m1991 committed
389 390 391 392 393 394
     * @param token
     * @return
     */
    @Override
    public int logout(String token) {
        int succ = 0;
395 396
        String key = RedisKeyUtils.formatKeyWithPrefix(Constants.Redis.PREFIX_TOKEN, token);
        redisUtils.delete(key);
licc's avatar
licc committed
397
        if (redisUtils.getValue(key) == null) {
m1991's avatar
m1991 committed
398 399 400 401
            succ = 1;
        }
        return succ;
    }
402 403 404

    /**
     * 用户分页查询
licc's avatar
licc committed
405
     *
406 407 408 409 410 411 412 413 414 415 416 417
     * @param queryDto 查询参数
     * @return
     */
    @Override
    public R<PageInfo<User>> getUserList(TeamQueryDto queryDto) {
        log.info("shop-mall[]UserServiceImpl[]getList[]input.param.query:" + queryDto);
        if (null == queryDto) {
            return R.error("入参不能为空!");
        }
        pageHandle(queryDto);
        Map<String, Object> map = new HashMap<>(8);

licc's avatar
licc committed
418 419 420
        if (!StringUtils.isBlank(queryDto.getUserId())) {
            map.put("userId", queryDto.getUserId());
        }
421
        if (!StringUtils.isBlank(queryDto.getQueryTime())) {
licc's avatar
licc committed
422
            Date date = DateUtil.convertStrToDate(queryDto.getQueryTime(), "yyyy-MM-dd hh:mm:ss");
423 424 425
            map.put("queryTime", date);
        }

426
        int total = usersMapper.countUser(map);
427

428 429
        map.put("startNum", queryDto.getStartNum());
        map.put("endNum", queryDto.getEndNum());
licc's avatar
licc committed
430
        List<User> list = usersMapper.getUserList(map);
431 432 433 434
        PageInfo<User> info = new PageInfo<>();
        info.setPageSize(queryDto.getPageSize());
        info.setPageNum(queryDto.getPageNo());
        info.setList(list);
435
        info.setTotal(total);
436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461

        return R.ok(info);
    }

    /**
     * 分页处理方法
     *
     * @param schemeVo 参数
     */
    private void pageHandle(TeamQueryDto schemeVo) {
        Integer pageNum = schemeVo.getPageNo();
        Integer pageSize = schemeVo.getPageSize();
        if (null == pageSize || pageSize == 0) {
            pageSize = 10;
        }
        if (null == pageNum || pageNum == 0) {
            pageNum = 1;
        }
        Integer endNum = pageSize;
        Integer startNum = (pageNum - CommonAttributes.NUM_ONE) * pageSize;
        schemeVo.setEndNum(endNum);
        schemeVo.setStartNum(startNum);
        schemeVo.setPageNo(pageNum);
        schemeVo.setPageSize(pageSize);
    }

462 463 464 465 466 467 468
    /**
     * 将普通用户等级设置为幼苗用户等级
     * @param userId 用户的userId
     * @return 0 成功   1失败
     */
    @Transactional
    @Override
469
    public Integer setUserLevelToSeedling(String userId){
470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540
        try {
            User user = usersMapper.getUserByUserId(userId);
            user.setUserLevel(1);
            usersMapper.updateById(user);
            //当前用户的推荐人邀请码
            String beInvitedCode = user.getBeInvitedCode();
            if (!"1".equals(beInvitedCode)){
                //上级用户直推数据维护
                String userIdByIntiveCode = usersMapper.getUserIdByIntiveCode(beInvitedCode);

                RecommendUser recommendUserMapperByUserId = recommendUserMapper.getByUserId(userIdByIntiveCode);

                //上级用户的普通用户数量
                Integer normalUserNum = recommendUserMapperByUserId.getNormalUserNum();
                //上级用户的幼苗用户数量
                Integer recommendUserMapperByUserIdSeedlingNum = recommendUserMapperByUserId.getSeedlingNum();

                if (normalUserNum > 0){
                    normalUserNum = normalUserNum - 1;
                }
                recommendUserMapperByUserIdSeedlingNum = recommendUserMapperByUserIdSeedlingNum + 1;

                recommendUserMapperByUserId.setNormalUserNum(normalUserNum);
                recommendUserMapperByUserId.setSeedlingNum(recommendUserMapperByUserIdSeedlingNum);
                recommendUserMapper.updateById(recommendUserMapperByUserId);

                //用户的团队数据维护
                normalToSeedlingteamUserInfo(beInvitedCode);
            }

            //同步用户信息到account-Info 和 team_performance 中
            userLevelService.accountAndTeamPerformanceUserLevelUpdate(userId);

            return 0;
        }catch (Exception e){
            return 1;
        }
    }

    //设置普通用户升级至幼苗用户时团队用户数据维护
    public void normalToSeedlingteamUserInfo(String beInvitedCode) {
        //根据邀请码查询上级用户的userId
        String teamUserId = usersMapper.getUserByIntiveCode(beInvitedCode);
        //查询上级用户的团队信息表
        TeamUserInfo teamUserInfoByUserId = teamUserInfoMapper.getByUserId(teamUserId);

        //上级用户团队信息中普通用户数量 -1
        Integer normalUserNum = teamUserInfoByUserId.getNormalUserNum();
        if (normalUserNum > 0){
            normalUserNum = normalUserNum - 1;
        }
        //上级用户团队信息幼苗用户数量+1
        Integer seedlingNum = teamUserInfoByUserId.getSeedlingNum();

        teamUserInfoByUserId.setSeedlingNum(seedlingNum + 1);
        teamUserInfoByUserId.setNormalUserNum(normalUserNum);
        teamUserInfoMapper.updateById(teamUserInfoByUserId);

        //根据上级用户id查询上级用户的邀请码
        User teamUser = usersMapper.getByUserId(teamUserId);
        String teamUserBeInvitedCode = teamUser.getBeInvitedCode();
        //递归实现上级所有的用户普通数量 + 1
        //若团队用户的被邀请码为 1 时 则没有上级用户用户

        if (!"1".equals(teamUserBeInvitedCode) && !"88888888".equals(teamUserBeInvitedCode)) {
            normalToSeedlingteamUserInfo(teamUserBeInvitedCode);
        } else {
            return;
        }
    }

541 542


licc's avatar
licc committed
543
}