package com.xiaopeng.operation.service.impl;
|
|
import com.xiaopeng.api.model.operation.XpInvitationCode;
|
import com.xiaopeng.api.model.operation.XpPoint;
|
import com.xiaopeng.api.model.operation.XpWhitelist;
|
import com.xiaopeng.common.core.domain.R;
|
import com.xiaopeng.common.core.web.page.PageInfo;
|
import com.xiaopeng.operation.mapper.XpInvitationCodeMapper;
|
import com.xiaopeng.operation.mapper.XpWhitelistMapper;
|
import com.xiaopeng.operation.query.InvitationPageListQuery;
|
import com.xiaopeng.operation.service.IXpInvitationCodeService;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.StringUtils;
|
|
import java.time.LocalDateTime;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 邀请码管理 服务实现类
|
* </p>
|
*
|
* @author mitao
|
* @since 2026-02-03
|
*/
|
@Service
|
public class XpInvitationCodeServiceImpl extends ServiceImpl<XpInvitationCodeMapper, XpInvitationCode> implements IXpInvitationCodeService {
|
|
@Autowired
|
private XpWhitelistMapper xpWhitelistMapper;
|
@Override
|
public PageInfo<XpInvitationCode> pageList(InvitationPageListQuery query) {
|
PageInfo<XpInvitationCode> pageInfo = new PageInfo<>(query.getPageNum(),query.getPageSize());
|
List<XpInvitationCode> list = this.baseMapper.pageList(pageInfo,query);
|
pageInfo.setRecords(list);
|
return pageInfo;
|
}
|
|
@Override
|
public List<XpInvitationCode> exportList(InvitationPageListQuery query) {
|
List<XpInvitationCode> list = this.baseMapper.exportList(query);
|
|
return list;
|
}
|
|
@Override
|
public R add(String phones) {
|
Map<String, Long> codeMap = this.list().stream()
|
.collect(Collectors.toMap(XpInvitationCode::getInvitationCode, XpInvitationCode::getId));
|
if (StringUtils.hasLength(phones)){
|
List<XpInvitationCode> addInvitationCodeList = new ArrayList<>();
|
List<XpWhitelist> addWhitelistList = new ArrayList<>();
|
for (String phone : Arrays.asList(phones.split(","))) {
|
XpInvitationCode xpInvitationCode = new XpInvitationCode();
|
// 生成随机六位数邀请码包含数字和大写字母
|
String code = generateInviteCode();
|
// 若生成出已存在的邀请码 重新生成
|
Long l = codeMap.get(code);
|
while (l!=null){
|
code = generateInviteCode();
|
l = codeMap.get(code);
|
}
|
xpInvitationCode.setInvitationCode(code);
|
xpInvitationCode.setBindAccount(phone);
|
xpInvitationCode.setBindTime(LocalDateTime.now());
|
xpInvitationCode.setStatus(2);
|
addInvitationCodeList.add(xpInvitationCode);
|
XpWhitelist xpWhitelist = new XpWhitelist();
|
xpWhitelist.setAccount(phone);
|
xpWhitelist.setStatus(true);
|
xpWhitelist.setIsPriorityDispatch(false);
|
xpWhitelist.setWhitelistSource(2);
|
xpWhitelistMapper.insert(xpWhitelist);
|
|
}
|
this.saveBatch(addInvitationCodeList);
|
return R.ok();
|
}else {
|
return R.fail("请输入邀请手机号");
|
}
|
}
|
private static final String CHARACTERS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
private static final int CODE_LENGTH = 6;
|
private static final Random RANDOM = new Random();
|
|
public static String generateInviteCode() {
|
StringBuilder code = new StringBuilder(CODE_LENGTH);
|
for (int i = 0; i < CODE_LENGTH; i++) {
|
int index = RANDOM.nextInt(CHARACTERS.length());
|
code.append(CHARACTERS.charAt(index));
|
}
|
return code.toString();
|
}
|
}
|