UserServiceImpl.java 15.5 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;
m1991's avatar
m1991 committed
22
import org.springframework.util.CollectionUtils;
licc's avatar
licc committed
23

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

/**
licc's avatar
licc committed
27
 * @author 86187
licc's avatar
licc committed
28 29 30 31 32 33 34 35 36 37 38
 * @ 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
39 40 41
    @Autowired
    private RecommendUserMapper recommendUserMapper;

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

45
    @Autowired
46
    private RegistUserMoudleInitManager registUserMoudleInit;
47

48 49 50
    @Autowired
    private AerialDeliveryUserService aerialDeliveryUserService;

51 52 53
    @Autowired
    private UserDataInfoManager userDataInfoManager;

m1991's avatar
m1991 committed
54 55 56
    @Autowired
    private RedisUtils redisUtils;

licc's avatar
licc committed
57 58
    private static final String INVITE_CODE = "1";

59 60
    @Override
    public User getById(String userId) {
licc's avatar
licc committed
61
        return usersMapper.getByUserId(userId);
licc's avatar
licc committed
62 63
    }

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

licc's avatar
licc committed
81
    @Override
82 83
    public R<Integer> getById1(String userId) {

84
        return R.ok(usersMapper.ByUserId(userId));
licc's avatar
licc committed
85 86
    }

liqin's avatar
liqin committed
87 88 89 90 91
    @Override
    public User getUserById(Long id) {
        return this.usersMapper.getUserById(id);
    }

92 93
    @Override
    public User getByUserId(String userId) {
94

codezwjava's avatar
codezwjava committed
95
        return usersMapper.getByUserId(userId);
96
    }
m1991's avatar
m1991 committed
97 98 99


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

m1991's avatar
m1991 committed
105 106 107 108 109 110
    @Override
    public User queryUsersByOpenId(String id) {
        return null;
    }

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


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

            //邀请人的被邀请码
142
            if (null == user){
143 144 145

                Map map = new HashMap();
                R.error(1, "邀请码填写无效!邀请人不存在,请重新填写!");
146 147
                map.put("code", 1);
                map.put("msg", "邀请码填写无效!邀请人不存在,请重新填写!");
148
                return map;
149 150
//                String byqm = user.getBeInvitedCode();
            }
151

152

153 154 155 156 157 158 159 160
            //插入用户手机号与推荐人邀请码
            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);
161

162

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

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

            //获取注册用户的id
178 179
            User use = usersMapper.getByUserId(userId);
            int ida = use.getId();
180

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

m1991's avatar
m1991 committed
190 191 192
            if (null == beInvitedCode || "" == beInvitedCode) {
                beInvitedCode = String.valueOf(1);
            }
m1991's avatar
m1991 committed
193
        }
194

m1991's avatar
m1991 committed
195
        //根据插入的用户手机号,查询用户唯一ID
196

197 198 199 200
        if (null == usersMapper.getuserIdById(userId) || "".equals(usersMapper.getuserIdById(userId))) {
            Map map = new HashMap();
            map.put("code", 1);
            map.put("msg", "该用户不存在!");
201 202 203
            return map;

        }
204
        long yqm = usersMapper.getuserIdById(userId);
m1991's avatar
m1991 committed
205
        //用户唯一ID调用生成6位邀请码
206
        String inviteCode = ShareCodeUtil.idToCode(yqm);
207
        Integer userLevel = 0;
m1991's avatar
m1991 committed
208
        //根据用户手机号,更新用户信息
209
//        usersMapper.edit1(userLevel,inviteCode,userId);
m1991's avatar
m1991 committed
210 211 212
        User byUserId1 = usersMapper.getByUserId(userId);
        byUserId1.setInviteCode(inviteCode);
        byUserId1.setUserLevel(0);
213
        byUserId1.setFrozen(0);
214
        usersMapper.updateById(byUserId1);
215

216
        String BYQM = usersMapper.BYQMById(userId);
m1991's avatar
m1991 committed
217

218 219 220 221
        if ("1".equals(BYQM)) {
            Map map = new HashMap();
            map.put("code", 0);
            map.put("msg", "注册成功!");
licc's avatar
licc committed
222
            String key = StringUtil.formatKeyWithPrefix(Constants.RedisKey.PROJECT_PRIFIX, Constants.RedisKey.SMS_PRIFIX, userId, "0" + "");
223
            redisUtils.delete(key);
m1991's avatar
m1991 committed
224
            return map;
m1991's avatar
m1991 committed
225
        }
codezwjava's avatar
codezwjava committed
226 227 228

        //根据当前推荐人的邀请码查询 上级用户id
        String userIdByIntive = usersMapper.getUserByIntiveCode(beInvitedCode);
licc's avatar
licc committed
229 230 231
        if (null == userIdByIntive) {
            R.error(1, "用户推荐人邀请码不存在,请填写正确的邀请码");
        } else {
232 233 234 235 236
            //上级用户的直推信息 普通用户数量+1
            RecommendUser recommendUserMapperByUserId = recommendUserMapper.getByUserId(userIdByIntive);
            Integer normalUserNum = recommendUserMapperByUserId.getNormalUserNum();
            recommendUserMapperByUserId.setNormalUserNum(normalUserNum + 1);
            recommendUserMapper.updateById(recommendUserMapperByUserId);
m1991's avatar
m1991 committed
237
        }
codezwjava's avatar
codezwjava committed
238

239
        //递归向上修改团队用户信息表
240
        teamUserInfo(beInvitedCode);
241 242
        //记录带邀请码注册的用户行为信息
        userDataInfoManager.addUserSetBeInvitedCodeDoc(userId,userIdByIntive);
243
        Map map = new HashMap();
244
        R.ok("注册成功!", 0);
245 246
        map.put("code", 0);
        map.put("msg", "注册成功!");
247 248
        return map;
    }
m1991's avatar
m1991 committed
249

250
    @Override
licc's avatar
licc committed
251
    public Integer getUserIdById(String userId) {
252
        return null;
m1991's avatar
m1991 committed
253
    }
254

255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280

    @Override
    public R<AerialDeliveryVo> queryAerialDelivery() {
        log.info("shop-mall[]UserServiceImpl[]queryAerialDelivery[]input.method");
        //获取本月新注册用户
        Map<String, Object> map = new HashMap<>(4);
        map.put("createTime", new Date());
        List<User> list = usersMapper.getList(map);
        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);
    }

281

282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303
    @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
304
    @Override
305 306 307 308 309 310 311 312 313 314 315 316
    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
317
        //判断用户是否有邀请码 1:无
licc's avatar
licc committed
318 319
        if (!INVITE_CODE.equals(user.getBeInvitedCode())) {
            return R.error("尊敬的用户您好,您的推荐人邀请码已存在,不能修改!");
licc's avatar
licc committed
320 321
        }

322 323 324 325 326 327 328
        //2、根据邀请码,获取邀请人信息
        User userCode = usersMapper.queryByInviteCode(inviteCode);
        if (null == userCode) {
            return R.error("邀请人信息不存在!");
        }

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

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

338
        //5、设置用户被邀请码
339 340
        user.setBeInvitedCode(inviteCode);
        int count = usersMapper.edit(user);
codezwjava's avatar
codezwjava committed
341 342 343

        //更新推荐用户的等级或者直推人数
        aerialDeliveryUserService.userSetBeinviteCode(userId, userCode.getUserId());
344 345 346 347 348 349
        if (count == 0) {
            return R.ok(1, false);
        }
        return R.ok(0, true);
    }

codezwjava's avatar
codezwjava committed
350 351
    //团队用户数据维护
    public void teamUserInfo(String beInvitedCode) {
352
        //根据邀请码查询上级用户的userId
codezwjava's avatar
codezwjava committed
353 354 355 356 357 358 359 360 361 362 363 364
        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 时 则没有上级用户用户
365
        if (!"1".equals(teamUserBeInvitedCode) && !"88888888".equals(teamUserBeInvitedCode)) {
codezwjava's avatar
codezwjava committed
366
            teamUserInfo(teamUserBeInvitedCode);
licc's avatar
licc committed
367
        } else {
codezwjava's avatar
codezwjava committed
368
            return;
369 370
        }
    }
licc's avatar
licc committed
371

m1991's avatar
m1991 committed
372 373
    /**
     * 用户登出
licc's avatar
licc committed
374
     *
m1991's avatar
m1991 committed
375 376 377 378 379 380
     * @param token
     * @return
     */
    @Override
    public int logout(String token) {
        int succ = 0;
381 382
        String key = RedisKeyUtils.formatKeyWithPrefix(Constants.Redis.PREFIX_TOKEN, token);
        redisUtils.delete(key);
licc's avatar
licc committed
383
        if (redisUtils.getValue(key) == null) {
m1991's avatar
m1991 committed
384 385 386 387
            succ = 1;
        }
        return succ;
    }
388 389 390

    /**
     * 用户分页查询
licc's avatar
licc committed
391
     *
392 393 394 395 396 397 398 399 400 401 402 403
     * @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
404 405 406
        if (!StringUtils.isBlank(queryDto.getUserId())) {
            map.put("userId", queryDto.getUserId());
        }
407
        if (!StringUtils.isBlank(queryDto.getQueryTime())) {
licc's avatar
licc committed
408
            Date date = DateUtil.convertStrToDate(queryDto.getQueryTime(), "yyyy-MM-dd hh:mm:ss");
409 410 411
            map.put("queryTime", date);
        }

412
        int total = usersMapper.countUser(map);
413

414 415
        map.put("startNum", queryDto.getStartNum());
        map.put("endNum", queryDto.getEndNum());
licc's avatar
licc committed
416
        List<User> list = usersMapper.getUserList(map);
417 418 419 420
        PageInfo<User> info = new PageInfo<>();
        info.setPageSize(queryDto.getPageSize());
        info.setPageNum(queryDto.getPageNo());
        info.setList(list);
421
        info.setTotal(total);
422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447

        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);
    }

448 449


licc's avatar
licc committed
450
}