package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.*; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.*; import cc.mrbird.febs.mall.conversion.*; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IApiMallMemberService; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.ICommonService; import cc.mrbird.febs.mall.service.IMallMoneyFlowService; import cc.mrbird.febs.mall.vo.*; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.*; import java.util.regex.Pattern; import java.util.stream.Collectors; /** * @author wzy * @date 2021-09-16 **/ @Slf4j @Service @RequiredArgsConstructor public class ApiMallMemberServiceImpl extends ServiceImpl implements IApiMallMemberService { private final MallMemberWalletMapper mallMemberWalletMapper; private final MallMemberAmountMapper mallMemberAmountMapper; private final ICommonService commonService; private final RedisUtils redisUtils; private final MallOrderInfoMapper mallOrderInfoMapper; private final MallShoppingCartMapper mallShoppingCartMapper; private final MallMoneyFlowMapper mallMoneyFlowMapper; private final IApiMallMemberWalletService walletService; private final MallMemberPaymentMapper mallMemberPaymentMapper; private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final MallShopApplyMapper mallShopApplyMapper; private final MallRegisterAppealMapper mallRegisterAppealMapper; private final MallMemberBankMapper mallMemberBankMapper; private final IMallMoneyFlowService mallMoneyFlowService; private final MallProductBuyRecordMapper mallProductBuyRecordMapper; private final MallProductBuyMapper mallProductBuyMapper; private final MallMemberSpeakMapper mallMemberSpeakMapper; private final MallMemberChargeMapper mallMemberChargeMapper; @Value("${spring.profiles.active}") private String active; private static final String ACCOUNT_PATTERN = "^[a-zA-Z0-9]{8,16}$"; private static final Pattern pattern = Pattern.compile(ACCOUNT_PATTERN); public static boolean validateAccount(String account) { return pattern.matcher(account).matches(); } public static void main(String[] args) { String account = "example"; // 示例账号,可以根据需要替换 boolean isValid = validateAccount(account); System.out.println("账号是否有效: " + isValid); } @Transactional(rollbackFor = Exception.class) @Override public FebsResponse register(RegisterDto registerDto) { /** * 验证账户密钥是否重复 * 验证邀请码是否存在 * 生成用户信息 * 返回账号和密钥给前端 */ String accountLogin = registerDto.getAccountLogin(); boolean isValid = validateAccount(accountLogin); if(!isValid){ throw new FebsException("账号不规范。"); } MallMember mallMember = this.baseMapper.selectByAccountLogin(accountLogin); if (mallMember != null) { throw new FebsException("账号已使用,请重新注册。"); } Integer selectCount = this.baseMapper.selectCount(null); String userKey = ShareCodeUtil.toSerialNumberCode(selectCount); MallMember mallMemberKey = this.baseMapper.selectByUserKey(userKey); if (mallMemberKey != null) { throw new FebsException("账号已使用,请重新注册。"); } mallMember = new MallMember(); mallMember.setAccountLogin(accountLogin); mallMember.setPassword(SecureUtil.md5(registerDto.getPassword())); mallMember.setUserKey(userKey); mallMember.setTradePassword(SecureUtil.md5(registerDto.getTradePassword())); Integer count = this.baseMapper.selectCount(null); if (count != null && count != 0) { MallMember inviteMember = this.baseMapper.selectInfoByInviteId(registerDto.getInviteId()); if (inviteMember == null) { throw new FebsException("邀请码不存在"); } mallMember.setReferrerId(registerDto.getInviteId()); } // mallMember.setName(registerDto.getName()); // mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.getCode()); mallMember.setIsFrozen(ProductEnum.MEMBER_UNFROZEN.getValue()); mallMember.setPartner(2); // mallMember.setSex("男"); // mallMember.setBindPhone(registerDto.getAccount()); this.baseMapper.insert(mallMember); String inviteId = ShareCodeUtil.toSerialNumberCodeTwo(mallMember.getId()); mallMember.setInviteId(inviteId); //推荐人和推荐人链 boolean flag = false; String parentId = mallMember.getReferrerId(); if (StrUtil.isBlank(parentId)) { flag = true; } String ids = ""; while (!flag) { if (StrUtil.isBlank(ids)) { ids += parentId; } else { ids += ("," + parentId); } MallMember parentMember = this.baseMapper.selectInfoByInviteId(parentId); if (parentMember == null) { break; } parentId = parentMember.getReferrerId(); if (StrUtil.isBlank(parentMember.getReferrerId())) { flag = true; } } if (StrUtil.isNotBlank(ids)) { mallMember.setReferrerIds(ids); } this.baseMapper.updateById(mallMember); MallMemberWallet wallet = new MallMemberWallet(); wallet.setMemberId(mallMember.getId()); mallMemberWalletMapper.insert(wallet); MallMemberAmount mallMemberAmount = new MallMemberAmount(); mallMemberAmount.setMemberId(mallMember.getId()); mallMemberAmountMapper.insert(mallMemberAmount); MallMemberPayment mallMemberPayment = new MallMemberPayment(); mallMemberPayment.setMemberId(mallMember.getId()); mallMemberPaymentMapper.insert(mallMemberPayment); ApiRegisterVo apiRegisterVo = new ApiRegisterVo(); apiRegisterVo.setAccount(mallMember.getAccountLogin()); apiRegisterVo.setUserKey(mallMember.getUserKey()); return new FebsResponse().success().data(apiRegisterVo); } @Override public FebsResponse toLogin(LoginDto loginDto) { String md5Pwd = SecureUtil.md5(loginDto.getPassword()); MallMember mallMember = this.baseMapper.selectInfoByAccountLoginAndPwd(loginDto.getAccount(), md5Pwd); if (mallMember == null) { throw new FebsException("账号或密码错误"); } if (MallMember.ACCOUNT_STATUS_DISABLED.equals(mallMember.getAccountStatus())) { throw new FebsException("账号限制登录"); } String redisKey = AppContants.APP_LOGIN_PREFIX + mallMember.getId(); String existToken = redisUtils.getString(redisKey); if (StrUtil.isNotBlank(existToken)) { Object o = redisUtils.get(existToken); if (ObjectUtil.isNotEmpty(o)) { redisUtils.del(existToken); } } String token = IdUtil.simpleUUID(); redisUtils.set(token, JSONObject.toJSONString(mallMember), 360000); redisUtils.set(redisKey, token, 360000); Map authInfo = new HashMap<>(); authInfo.put("token", token); authInfo.put("rasToken", generateAsaToken(token)); return new FebsResponse().success().data(authInfo); } public String generateAsaToken(String token) { RSA rsa = new RSA(null, AppContants.PUBLIC_KEY); return rsa.encryptBase64(token + "_" + System.currentTimeMillis(), KeyType.PublicKey); } @Override public FebsResponse forgetPwd(ForgetPwdDto forgetPwdDto) { /** * 验证用户名和密钥是否存在、是否匹配 * 更新用户密码 */ String accountLogin = forgetPwdDto.getAccountLogin(); String userKey = forgetPwdDto.getUserKey(); MallMember mallMember = this.baseMapper.selectAccountLoginAndUserKey(accountLogin,userKey); if (mallMember == null) { throw new FebsException("请输入正确的账号或密钥"); } String pwd = SecureUtil.md5(forgetPwdDto.getPassword()); mallMember.setPassword(pwd); this.baseMapper.updateById(mallMember); redisUtils.del(AppContants.APP_LOGIN_PREFIX + mallMember.getId()); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse logout() { Long id = LoginUserUtil.getLoginUser().getId(); redisUtils.del(AppContants.APP_LOGIN_PREFIX + id); return new FebsResponse().success().message("退出登录"); } @Override public FebsResponse findMemberInfo() { Long id = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = this.baseMapper.selectById(id); MallMemberVo mallMemberVo = MallMemberConversion.INSTANCE.entityToVo(mallMember); MallMember referMember = this.baseMapper.selectInfoByInviteId(mallMember.getReferrerId()); if (referMember != null) { mallMemberVo.setReferrerName(referMember.getName()); } MallMemberPayment payment = mallMemberPaymentMapper.selectByMemberId(id); if (payment != null) { mallMemberVo.setHasPayment(1); } DataDictionaryCustom nftMinDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.NFT_MIN.getType(), DataDictionaryEnum.NFT_MIN.getCode()); mallMemberVo.setNftMin(ObjectUtil.isEmpty(nftMinDic) ? new BigDecimal(100) : new BigDecimal(nftMinDic.getValue())); DataDictionaryCustom outFcmMinDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.OUT_FCM_MIN.getType(), DataDictionaryEnum.OUT_FCM_MIN.getCode()); mallMemberVo.setOutFcmMin(ObjectUtil.isEmpty(outFcmMinDic) ? new BigDecimal(100) : new BigDecimal(outFcmMinDic.getValue())); DataDictionaryCustom fcmPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.FCM_PRICE.getType(), DataDictionaryEnum.FCM_PRICE.getCode()); mallMemberVo.setFcmPrice(ObjectUtil.isEmpty(fcmPriceDic) ? new BigDecimal(8) : new BigDecimal(fcmPriceDic.getValue())); DataDictionaryCustom outFcmFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.OUT_FCM_FEE.getType(), DataDictionaryEnum.OUT_FCM_FEE.getCode()); mallMemberVo.setOutFcmFee(ObjectUtil.isEmpty(outFcmFeeDic) ? new BigDecimal(20) : new BigDecimal(outFcmFeeDic.getValue())); DataDictionaryCustom nftFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.NFT_FEE.getType(), DataDictionaryEnum.NFT_FEE.getCode()); BigDecimal nftFeePercent = ObjectUtil.isEmpty(nftFeeDic) ? new BigDecimal(20) : new BigDecimal(nftFeeDic.getValue()); mallMemberVo.setNftFee(nftFeePercent); DataDictionaryCustom memberFrozenFcmCntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.MEMBER_FROZEN_FCM_CNT.getType(), DataDictionaryEnum.MEMBER_FROZEN_FCM_CNT.getCode() ); BigDecimal memberFrozenFcmCnt = ObjectUtil.isEmpty(memberFrozenFcmCntDic) ? new BigDecimal(100) : new BigDecimal(memberFrozenFcmCntDic.getValue()); mallMemberVo.setUnfrozenCnt(memberFrozenFcmCnt); DataDictionaryCustom insureMinuteDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.INSURE_END_MINUTE.getType(), DataDictionaryEnum.INSURE_END_MINUTE.getCode() ); Integer insureMinute = Integer.parseInt(ObjectUtil.isEmpty(insureMinuteDic) ? "60" : insureMinuteDic.getValue()); mallMemberVo.setMinuteCnt(insureMinute); DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(mallMember.getLevel(), mallMember.getLevel()); if (dic != null) { mallMemberVo.setLevelName(dic.getDescription()); }else{ mallMemberVo.setLevelName("非会员"); } MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(mallMember.getId()); mallMemberVo.setGsd(mallMemberAmount.getGsd()); mallMemberVo.setStaticNft(mallMemberAmount.getStaticNft()); mallMemberVo.setTrendsNft(mallMemberAmount.getTrendsNft()); mallMemberVo.setFrozenNft(mallMemberAmount.getFrozenNft()); mallMemberVo.setFcmCntAva(mallMemberAmount.getFcmCntAva()); mallMemberVo.setFcmCntFrozen(mallMemberAmount.getFcmCntFrozen()); mallMemberVo.setTokenAva(mallMemberAmount.getTokenAva()); mallMemberVo.setTokenFrozen(mallMemberAmount.getTokenFrozen()); mallMemberVo.setTotalPerk(mallMemberAmount.getTotalPerk()); DataDictionaryCustom startTimeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.YU_YUE_START_TIME.getType(), DataDictionaryEnum.YU_YUE_START_TIME.getCode() ); mallMemberVo.setStartTime(startTimeDic.getValue()); DataDictionaryCustom endTimeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.YU_YUE_END_TIME.getType(), DataDictionaryEnum.YU_YUE_END_TIME.getCode() ); mallMemberVo.setEndTime(endTimeDic.getValue()); Integer pickCount = mallProductBuyMapper.selectListByMemberIdAndState(id); mallMemberVo.setPickCount(pickCount); // BigDecimal totalPerk = mallProductBuyMapper.selectTotalPerkByMemberId(mallMember.getId()); // mallMemberVo.setTotalPerk(totalPerk); DataDictionaryCustom insideNFTPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.FCM_INSIDE_NFT_PERCENT.getType(), DataDictionaryEnum.FCM_INSIDE_NFT_PERCENT.getCode() ); mallMemberVo.setInsideNFTPercent(insideNFTPercentDic.getValue()); DataDictionaryCustom chargeAddressDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.CHARGE_ADDRESS.getType(), DataDictionaryEnum.CHARGE_ADDRESS.getCode() ); mallMemberVo.setChargeAddress(chargeAddressDic.getValue()); DataDictionaryCustom withdrawAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.WITHDRAW_AMOUNT.getType(), DataDictionaryEnum.WITHDRAW_AMOUNT.getCode() ); BigDecimal withdrawAmount = new BigDecimal(withdrawAmountDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); mallMemberVo.setWithdrawAmount(withdrawAmount); DataDictionaryCustom usdtPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.USDT_PRICE.getType(), DataDictionaryEnum.USDT_PRICE.getCode() ); BigDecimal usdtPrice = new BigDecimal(usdtPriceDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); mallMemberVo.setUsdtPrice(usdtPrice); return new FebsResponse().success().data(mallMemberVo); } @Override public FebsResponse findMemberMarkCnt() { Long id = LoginUserUtil.getLoginUser().getId(); List> maps = mallOrderInfoMapper.selectMemberOrderStatusCnt(id); Map orderCnt = new HashMap<>(); if (CollUtil.isNotEmpty(maps)) { for (Map map : maps) { orderCnt.put(map.get("status"), map.get("cnt")); } } List carts = mallShoppingCartMapper.selectCartGoodsList(id); Map result = new HashMap<>(); result.put("order", orderCnt); result.put("carts", carts.size()); return new FebsResponse().success().data(result); } @Override public FebsResponse setTradePwd(ForgetPwdDto forgetPwdDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = this.baseMapper.selectById(memberId); if (mallMember == null) { throw new FebsException("账号不存在"); } MallMember mallMemberKey = this.baseMapper.selectByUserKey(forgetPwdDto.getUserKey()); if (!(mallMemberKey.getId() == memberId)) { throw new FebsException("请输入正确的密钥"); } mallMember.setTradePassword(SecureUtil.md5(forgetPwdDto.getPassword())); this.baseMapper.updateById(mallMember); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse modifyMemberInfo(ModifyMemberInfoDto modifyMemberInfoDto) { MallMember member = LoginUserUtil.getLoginUser(); MallMember mallMember = this.baseMapper.selectById(member.getId()); mallMember.setName(modifyMemberInfoDto.getName()); mallMember.setPhone(modifyMemberInfoDto.getPhone()); if (StrUtil.isNotBlank(modifyMemberInfoDto.getPhoto())) { mallMember.setAvatar(modifyMemberInfoDto.getPhoto()); } this.baseMapper.updateById(mallMember); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse teamList(TeamListDto teamListDto) { Long memberId = null; if (teamListDto.getId() == null) { memberId = LoginUserUtil.getLoginUser().getId(); } else { memberId = teamListDto.getId(); } MallMember mallMember = this.baseMapper.selectById(memberId); List list = this.baseMapper.selectTeamListByInviteId(mallMember.getInviteId()); MyTeamVo myTeamVo = new MyTeamVo(); myTeamVo.setTeam(list); BigDecimal myAchieve = this.baseMapper.selectAchieveByMemberId(mallMember.getInviteId(), 1); myTeamVo.setMyAchieve(myAchieve); BigDecimal myTeamAchieve = this.baseMapper.selectAchieveByMemberId(mallMember.getInviteId(), 2); myTeamVo.setMyTeamAchieve(myTeamAchieve.add(myAchieve)); myTeamVo.setMyTeamCnt(this.baseMapper.selectAllChildAgentListByInviteId(mallMember.getInviteId()).size()); return new FebsResponse().success().data(myTeamVo); } @Override public FebsResponse teamFcmList(TeamListDto teamListDto) { Long memberId = null; if (ObjectUtil.isEmpty(teamListDto.getId())) { memberId = LoginUserUtil.getLoginUser().getId(); } else { memberId = teamListDto.getId(); } MallMember mallMember = this.baseMapper.selectById(memberId); MyFcmTeamVo myTeamVo = new MyFcmTeamVo(); myTeamVo.setMemberId(mallMember.getId()); myTeamVo.setAccountLogin(mallMember.getAccountLogin()); myTeamVo.setIsFrozen(mallMember.getIsFrozen()); myTeamVo.setLevelName(MemberLevelNewEnum.ZERO_LEVEL.getLevelName(mallMember.getLevel())); BigDecimal myAchieveBuy = this.baseMapper.selectAchieveBuyByMemberId(mallMember.getInviteId(), 1); myTeamVo.setMyAchieveBuy(myAchieveBuy); BigDecimal myAchieveSell = this.baseMapper.selectAchieveSellByMemberId(mallMember.getInviteId(), 1); myTeamVo.setMyAchieveSell(myAchieveSell); BigDecimal myTeamAchieveBuy = this.baseMapper.selectAchieveBuyByMemberId(mallMember.getInviteId(), 2); myTeamVo.setMyTeamAchieveBuy(myTeamAchieveBuy.add(myAchieveBuy)); BigDecimal myTeamAchieveSell = this.baseMapper.selectAchieveSellByMemberId(mallMember.getInviteId(), 2); myTeamVo.setMyTeamAchieveSell(myTeamAchieveSell.add(myAchieveSell)); myTeamVo.setMyTeamMemberCnt(this.baseMapper.selectAllChildAgentListByInviteId(mallMember.getInviteId()).size()); Integer buyCnt = this.baseMapper.selectAchieveBuyOrderCntByMemberId(mallMember.getInviteId()); Integer sellCnt = this.baseMapper.selectAchieveSellOrderCntByMemberId(mallMember.getInviteId()); myTeamVo.setMyTeamOrderCnt(buyCnt+sellCnt); List mallMembersDirects = this.baseMapper.selectChildAgentListByInviteId(mallMember.getInviteId()); List list = new ArrayList<>(); if(CollUtil.isNotEmpty(mallMembersDirects)){ for(MallMember mallMembersDirect : mallMembersDirects){ MyFcmTeamVo myTeamDirectVo = new MyFcmTeamVo(); myTeamDirectVo.setMemberId(mallMembersDirect.getId()); myTeamDirectVo.setAccountLogin(mallMembersDirect.getAccountLogin()); myTeamDirectVo.setIsFrozen(mallMembersDirect.getIsFrozen()); myTeamDirectVo.setLevelName( dataDictionaryCustomMapper.selectDicDataByTypeAndCode(mallMembersDirect.getLevel(),mallMembersDirect.getLevel()).getDescription() ); BigDecimal myAchieveBuyDirect = this.baseMapper.selectAchieveBuyByMemberId(mallMembersDirect.getInviteId(), 1); myTeamDirectVo.setMyAchieveBuy(myAchieveBuyDirect); BigDecimal myAchieveSellDirect = this.baseMapper.selectAchieveSellByMemberId(mallMembersDirect.getInviteId(), 1); myTeamDirectVo.setMyAchieveSell(myAchieveSellDirect); BigDecimal myTeamAchieveBuyDirect = this.baseMapper.selectAchieveBuyByMemberId(mallMembersDirect.getInviteId(), 2); myTeamDirectVo.setMyTeamAchieveBuy(myTeamAchieveBuyDirect.add(myAchieveBuyDirect)); BigDecimal myTeamAchieveSellDirect = this.baseMapper.selectAchieveSellByMemberId(mallMembersDirect.getInviteId(), 2); myTeamDirectVo.setMyTeamAchieveSell(myTeamAchieveSellDirect.add(myAchieveSellDirect)); myTeamDirectVo.setMyTeamMemberCnt(this.baseMapper.selectAllChildAgentListByInviteId(mallMembersDirect.getInviteId()).size()); Integer buyCntDirect = this.baseMapper.selectAchieveBuyOrderCntByMemberId(mallMembersDirect.getInviteId()); Integer sellCntDirect = this.baseMapper.selectAchieveSellOrderCntByMemberId(mallMembersDirect.getInviteId()); myTeamDirectVo.setMyTeamOrderCnt(buyCntDirect+sellCntDirect); list.add(myTeamDirectVo); } } myTeamVo.setTeam(list); return new FebsResponse().success().data(myTeamVo); } @Override public MyTeamVo teamListForMine(TeamListDto teamListDto) { return null; } @Override public FebsResponse moneyFlows(MoneyFlowDto moneyFlowDto) { IPage page = new Page<>(moneyFlowDto.getPageNum(), moneyFlowDto.getPageSize()); Long id = LoginUserUtil.getLoginUser().getId(); moneyFlowDto.setMemberId(id); // IPage pages = mallMoneyFlowMapper.selectApiMoneyFlowInPage(page, moneyFlowDto); IPage pages = mallMoneyFlowMapper.selectApiFcmMoneyFlowInPage(page, moneyFlowDto); return new FebsResponse().success().data(pages); } @Override public void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, String description, String remark, Long rtMemberId, Integer status, Integer flowType) { MallMoneyFlow flow = new MallMoneyFlow(); flow.setMemberId(memberId); flow.setAmount(amount); flow.setType(type); flow.setOrderNo(orderNo); flow.setDescription(description); flow.setRemark(remark); flow.setRtMemberId(rtMemberId); flow.setStatus(status); flow.setFlowType(flowType); mallMoneyFlowMapper.insert(flow); } @Override @Transactional(rollbackFor = Exception.class) public void transfer(TransferDto transferDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); MallMember loginMember = this.baseMapper.selectById(memberId); BigDecimal amount = transferDto.getAmount(); int type = transferDto.getType(); if(1 != type && 2 != type && 3 != type){ throw new FebsException("请选择互转类型"); } Integer insideWith = loginMember.getInsideWith() == null ? 2 :loginMember.getInsideWith(); if (1 != insideWith) { throw new FebsException("功能升级中"); } MallMember mallMember = this.baseMapper.selectByAccountLogin(transferDto.getAccount()); if (mallMember == null) { throw new FebsException("转出账户不存在"); } if (loginMember.getAccountLogin().equals(transferDto.getAccount())) { throw new FebsException("不能给自己转账"); } if (StrUtil.isBlank(loginMember.getTradePassword())) { throw new FebsException("请设置交易密码"); } if (!loginMember.getTradePassword().equals(SecureUtil.md5(transferDto.getTradePwd()))) { throw new FebsException("交易密码错误"); } MallMemberAmount mallMemberAmountLogin = mallMemberAmountMapper.selectByMemberId(loginMember.getId()); MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(mallMember.getId()); if(1 == type){ if (amount.compareTo(mallMemberAmountLogin.getFcmCntAva()) > 0) { throw new FebsException("代币不足"); } mallMemberAmountLogin.setFcmCntAva(mallMemberAmountLogin.getFcmCntAva().subtract(amount)); mallMemberAmountMapper.updateFcmCntAvaById(mallMemberAmountLogin); String orderNo = MallUtils.getOrderNum("DB"); mallMoneyFlowService.addMoneyFlow( loginMember.getId(), amount.negate(), MoneyFlowTypeNewEnum.FCM_INSIDE_OUT.getValue(), orderNo, mallMember.getId(), FlowTypeNewEnum.FCM_COIN.getValue(), MoneyFlowTypeNewEnum.FCM_INSIDE_OUT.getDescrition()); mallMemberAmount.setFcmCntAva(mallMemberAmount.getFcmCntAva().add(amount)); mallMemberAmountMapper.updateFcmCntAvaById(mallMemberAmount); mallMoneyFlowService.addMoneyFlow( mallMember.getId(), amount, MoneyFlowTypeNewEnum.FCM_INSIDE_IN.getValue(), orderNo, loginMember.getId(), FlowTypeNewEnum.FCM_COIN.getValue(), MoneyFlowTypeNewEnum.FCM_INSIDE_IN.getDescrition()); } if(2 == type){ if (amount.compareTo(mallMemberAmountLogin.getTokenAva()) > 0) { throw new FebsException("宝石不足"); } mallMemberAmountLogin.setTokenAva(mallMemberAmountLogin.getTokenAva().subtract(amount)); mallMemberAmountMapper.updateTokenAvaById(mallMemberAmountLogin); String orderNo = MallUtils.getOrderNum("LP"); mallMoneyFlowService.addMoneyFlow( loginMember.getId(), amount.negate(), MoneyFlowTypeNewEnum.TOKEN_INSIDE_OUT.getValue(), orderNo, mallMember.getId(), FlowTypeNewEnum.TOKEN.getValue(), MoneyFlowTypeNewEnum.TOKEN_INSIDE_OUT.getDescrition()); mallMemberAmount.setTokenAva(mallMemberAmount.getTokenAva().add(amount)); mallMemberAmountMapper.updateTokenAvaById(mallMemberAmount); mallMoneyFlowService.addMoneyFlow( mallMember.getId(), amount, MoneyFlowTypeNewEnum.TOKEN_INSIDE_IN.getValue(), orderNo, loginMember.getId(), FlowTypeNewEnum.TOKEN.getValue(), MoneyFlowTypeNewEnum.TOKEN_INSIDE_IN.getDescrition()); } if(3 == type){ DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.FCM_INSIDE_NFT_PERCENT.getType(), DataDictionaryEnum.FCM_INSIDE_NFT_PERCENT.getCode() ); BigDecimal feePercent = new BigDecimal("0.01").multiply(new BigDecimal(dataDictionaryCustom.getValue())); if (amount.compareTo(mallMemberAmountLogin.getTrendsNft()) > 0) { throw new FebsException("卡牌不足"); } BigDecimal fee = amount.multiply(feePercent).setScale(2,BigDecimal.ROUND_DOWN); BigDecimal amountReal = amount.subtract(fee); mallMemberAmountLogin.setTrendsNft(mallMemberAmountLogin.getTrendsNft().subtract(amount)); mallMemberAmountMapper.updateTrendsNftById(mallMemberAmountLogin); String orderNo = MallUtils.getOrderNum("NFT"); mallMoneyFlowService.addMoneyFlow( loginMember.getId(), amountReal.negate(), MoneyFlowTypeNewEnum.NFT_TRANS_OUT.getValue(), orderNo, mallMember.getId(), FlowTypeNewEnum.NFT.getValue(), MoneyFlowTypeNewEnum.NFT_TRANS_OUT.getDescrition()); mallMoneyFlowService.addMoneyFlow( loginMember.getId(), fee.negate(), MoneyFlowTypeNewEnum.NFT_TRANS_OUT_FEE.getValue(), orderNo, mallMember.getId(), FlowTypeNewEnum.NFT.getValue(), MoneyFlowTypeNewEnum.NFT_TRANS_OUT_FEE.getDescrition()); mallMemberAmount.setTrendsNft(mallMemberAmount.getTrendsNft().add(amountReal)); mallMemberAmountMapper.updateTrendsNftById(mallMemberAmount); mallMoneyFlowService.addMoneyFlow( mallMember.getId(), amountReal, MoneyFlowTypeNewEnum.NFT_TRANS_IN.getValue(), orderNo, loginMember.getId(), FlowTypeNewEnum.NFT.getValue(), MoneyFlowTypeNewEnum.NFT_TRANS_IN.getDescrition()); } } @Override public void setPayment(MallMemberPayment mallMemberPayment) { MallMember member = LoginUserUtil.getLoginUser(); MallMemberPayment exist = mallMemberPaymentMapper.selectByMemberId(member.getId()); if (exist == null) { mallMemberPayment.setMemberId(member.getId()); mallMemberPaymentMapper.insert(mallMemberPayment); } else { mallMemberPayment.setId(exist.getId()); mallMemberPaymentMapper.updateById(mallMemberPayment); } } @Override public MallMemberPayment findMemberPayment() { MallMember member = LoginUserUtil.getLoginUser(); return mallMemberPaymentMapper.selectByMemberId(member.getId()); } @Override public void bindPhone(AccountAndCodeDto accountAndCodeDto) { boolean b = commonService.verifyCode(accountAndCodeDto.getAccount(), accountAndCodeDto.getCode()); if (!b) { throw new FebsException("验证码错误"); } Long id = LoginUserUtil.getLoginUser().getId(); MallMember member = this.baseMapper.selectById(id); member.setBindPhone(accountAndCodeDto.getAccount()); this.baseMapper.updateById(member); } @Override public BigDecimal canMoney() { Long memberId = LoginUserUtil.getLoginUser().getId(); MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); BigDecimal profit = mallMoneyFlowMapper.selectProfitByDateAndMemberId(memberId); BigDecimal canMoney = wallet.getCommission(); if (profit != null) { if(canMoney.compareTo(BigDecimal.ZERO) > 0) { canMoney = canMoney.subtract(profit); } } return canMoney; } @Override public List findRankList(RankListDto rankListDto) { IPage page = new Page<>(rankListDto.getPageNum(), rankListDto.getPageSize()); MallMember member = new MallMember(); member.setQuery("2"); member.setCreatedTime(new Date()); IPage list = this.baseMapper.selectRankListInPage(page, member); return list.getRecords(); } @Override public MallMember findMemberInfoByAccount(String phone) { return this.baseMapper.selectInfoByAccount(phone); } @Override public MyCommissionVo myCommission() { Long id = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = this.baseMapper.selectById(id); MyCommissionVo commissionVo = MallMemberConversion.INSTANCE.entityToCommissionVo(mallMember); MallMember referMember = this.baseMapper.selectInfoByInviteId(mallMember.getReferrerId()); if (referMember != null) { commissionVo.setReferrerName(referMember.getName()); commissionVo.setAvatar(referMember.getAvatar()); } DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.AGENT_LEVEL, mallMember.getLevel()); if (dic != null) { commissionVo.setLevelName(dic.getDescription()); } MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(id); commissionVo.setCommission(wallet.getBalance()); commissionVo.setToday(mallMoneyFlowMapper.selectCommissionIncome(1, new Date(), id)); commissionVo.setMonth(mallMoneyFlowMapper.selectCommissionIncome(2, new Date(), id)); commissionVo.setTotal(mallMoneyFlowMapper.selectCommissionIncome(null, null, id)); commissionVo.setWaitCommission(BigDecimal.ZERO); return commissionVo; } @Override public void shopApply(ShopApplyDto shopApplyDto) { MallMember member = LoginUserUtil.getLoginUser(); MallShopApply hasApply = mallShopApplyMapper.selectNewestApplyByMemberId(member.getId()); if (hasApply != null) { if (!hasApply.getStatus().equals(MallShopApply.APPLY_DISAGREE)) { throw new FebsException("请勿重复提交申请"); } } MallShopApply mallShopApply = new MallShopApply(); BeanUtil.copyProperties(shopApplyDto, mallShopApply); mallShopApply.setStatus(MallShopApply.APPLY_ING); mallShopApply.setMemberId(member.getId()); mallShopApplyMapper.insert(mallShopApply); } @Override public MallShopApply findNewestApply() { MallMember member = LoginUserUtil.getLoginUser(); return mallShopApplyMapper.selectNewestApplyByMemberId(member.getId()); } @Override public void addRegisterAppeal(RegisterAppealDto registerAppeal) { MallRegisterAppeal isExist = mallRegisterAppealMapper.selectByPhoneAndName(registerAppeal.getName(), registerAppeal.getPhone()); if (isExist != null) { throw new FebsException("申诉已存在"); } isExist = new MallRegisterAppeal(); isExist.setName(registerAppeal.getName()); isExist.setPhone(registerAppeal.getPhone()); isExist.setStatus(2); mallRegisterAppealMapper.insert(isExist); } @Override public CashOutSettingVo cashOutSetting() { CashOutSettingVo cashOutSettingVo = new CashOutSettingVo(); DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.CASHOUT_SETTING.getType(), DataDictionaryEnum.CASHOUT_SETTING.getCode()); if (dic != null) { cashOutSettingVo = JSONObject.parseObject(dic.getValue(), CashOutSettingVo.class); } DataDictionaryCustom voucherOnOffDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( GreenScoreEnum.VOUCHER_ON_OFF.getType(), GreenScoreEnum.VOUCHER_ON_OFF.getCode()); if(ObjectUtil.isNotEmpty(voucherOnOffDic)){ cashOutSettingVo.setVoucherOnOff(voucherOnOffDic.getValue()); DataDictionaryCustom voucherPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( GreenScoreEnum.VOUCHER_PERCENT.getType(), GreenScoreEnum.VOUCHER_PERCENT.getCode()); if(ObjectUtil.isNotEmpty(voucherPercentDic)){ cashOutSettingVo.setVoucherPercent(new BigDecimal(voucherPercentDic.getValue())); } } return cashOutSettingVo; } @Override public List findShopListVo(ShopListDto shopListDto) { Page page = new Page<>(shopListDto.getPageNow(), shopListDto.getPageSize()); MallShopApply shopApply = new MallShopApply(); shopApply.setStatus(MallShopApply.APPLY_AGREE); IPage pageResult = mallShopApplyMapper.selectShopApplyInPage(shopApply, page); List list = pageResult.getRecords(); if (CollUtil.isEmpty(list)) { list = new ArrayList<>(); } return MallShopApplyConversion.INSTANCE.entitiesToVOs(list); } @Override @Transactional public FebsResponse addMemberBank(AddMemberBankDto addMemberBankDto) { MallMember member = LoginUserUtil.getLoginUser(); MallMemberBank mallMemberBank = MallMemberBankConversion.INSTANCE.dtoToentity(addMemberBankDto); mallMemberBank.setMemberId(member.getId()); mallMemberBankMapper.insert(mallMemberBank); return new FebsResponse().success(); } @Override public FebsResponse findMemberBankList(MemberBankListDto memberBankListDto) { MallMember member = LoginUserUtil.getLoginUser(); Page page = new Page<>(memberBankListDto.getPageNum(), memberBankListDto.getPageSize()); memberBankListDto.setMemberId(member.getId()); IPage pageResult = mallMemberBankMapper.findMemberBankListInPage(memberBankListDto, page); return new FebsResponse().success().data(pageResult); } @Override public FebsResponse findBankDetailsById(Long id) { MallMemberBank mallMemberBank = mallMemberBankMapper.selectById(id); MemberBankListVo memberBankListVo = MallMemberBankConversion.INSTANCE.entityToVo(mallMemberBank); return new FebsResponse().success().data(memberBankListVo); } @Override @Transactional public FebsResponse updateMemberBank(UpdateMemberBankDto updateMemberBankDto) { Long id = updateMemberBankDto.getId(); MallMemberBank mallMemberBank = mallMemberBankMapper.selectById(id); mallMemberBank.setName(updateMemberBankDto.getName()); mallMemberBank.setIdType(updateMemberBankDto.getIdType()); mallMemberBank.setIdCardNum(updateMemberBankDto.getIdCardNum()); mallMemberBank.setBankNo(updateMemberBankDto.getBankNo()); mallMemberBank.setPhone(updateMemberBankDto.getPhone()); mallMemberBank.setDigitalNo(updateMemberBankDto.getDigitalNo()); mallMemberBank.setBankName(updateMemberBankDto.getBankName()); mallMemberBank.setSubbranchName(updateMemberBankDto.getSubbranchName()); mallMemberBank.setProvince(updateMemberBankDto.getProvince()); mallMemberBank.setCity(updateMemberBankDto.getCity()); mallMemberBank.setSkhh(updateMemberBankDto.getSkhh()); mallMemberBankMapper.updateById(mallMemberBank); return new FebsResponse().success(); } @Override @Transactional public FebsResponse delMemberBank(Long id) { mallMemberBankMapper.deleteById(id); return new FebsResponse().success(); } @Override public FebsResponse findBankName() { List bankNameList = new ArrayList<>(); List typeBank = dataDictionaryCustomMapper.selectDicByType("TYPE_BANK"); if(CollUtil.isNotEmpty(typeBank)){ bankNameList = typeBank.stream().map(DataDictionaryCustom::getValue).collect(Collectors.toList()); } return new FebsResponse().success().data(bankNameList); } @Override public FebsResponse pwdForget(ForgetPwdDto forgetPwdDto) { String accountLogin = forgetPwdDto.getAccountLogin(); String userKey = forgetPwdDto.getUserKey(); MallMember mallMember = this.baseMapper.selectAccountLoginAndUserKey(accountLogin,userKey); if(ObjectUtil.isEmpty(mallMember)){ throw new FebsException("账号不存在"); } String pwd = SecureUtil.md5(forgetPwdDto.getPassword()); mallMember.setPassword(pwd); this.baseMapper.updateById(mallMember); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse createAccount() { Integer selectCount = this.baseMapper.selectCount(null); String account = new StringBuilder().append("bbsz").append(ShareCodeUtil.toSerialNumberCode(selectCount)).toString(); return new FebsResponse().success().data(account); } @Override public FebsResponse createKey() { Integer selectCount = this.baseMapper.selectCount(null); String key = ShareCodeUtil.toSerialCode(selectCount); return new FebsResponse().success().data(key); } @Override public FebsResponse getPayment() { Long memberId = LoginUserUtil.getLoginUser().getId(); MallMemberPayment mallMemberPayment = mallMemberPaymentMapper.selectByMemberId(memberId); MallMemberPaymentVo mallMemberPaymentVo = MallMemberPaymentConversion.INSTANCE.entityToVo(mallMemberPayment); return new FebsResponse().success().data(mallMemberPaymentVo); } @Override public FebsResponse getKey(GetKeyDto getKeyDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = this.baseMapper.selectById(memberId); String md5Pwd = SecureUtil.md5(getKeyDto.getPassword()); String md5TraPwd = SecureUtil.md5(getKeyDto.getTradePassword()); if(!mallMember.getPassword().equals(md5Pwd)){ throw new FebsException("登录密码错误"); } if(!mallMember.getTradePassword().equals(md5TraPwd)){ throw new FebsException("交易密码错误"); } return new FebsResponse().success().data(mallMember.getUserKey()); } @Override public FebsResponse updatePayment(UpdatePaymentDto updatePaymentDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); QueryWrapper objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("member_id",memberId); List mallProductBuys = mallProductBuyMapper.selectList(objectQueryWrapper); if(ObjectUtil.isNotEmpty(mallProductBuys)){ throw new FebsException("信息无法修改"); } MallMemberPayment mallMemberPayment = mallMemberPaymentMapper.selectByMemberId(memberId); mallMemberPayment.setWxQrcode(updatePaymentDto.getWxQrcode()); mallMemberPayment.setAliQrcode(updatePaymentDto.getAliQrcode()); mallMemberPayment.setBankName(updatePaymentDto.getBankName()); // mallMemberPayment.setBankNo(updatePaymentDto.getBankNo()); // mallMemberPayment.setBank(updatePaymentDto.getBank()); mallMemberPayment.setPhone(updatePaymentDto.getPhone()); mallMemberPayment.setUsdtTongdao(updatePaymentDto.getUsdtTongdao()); mallMemberPayment.setUsdtAddress(updatePaymentDto.getUsdtAddress()); mallMemberPaymentMapper.updateById(mallMemberPayment); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse unfreeze(UnfreezeDto unfreezeDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); MallMember loginMember = this.baseMapper.selectById(memberId); /** * 判断账号是否冻结 * 判断账号FCM代币是否足够 * 1、自行解冻:扣除对应的FCM代币 * 2、上级解冻:查询是否是解冻用户的直接上级,扣除对应的FCM代币 * 更新账号状态 * 生成流水记录 */ Long unfreezeMemberId = unfreezeDto.getMemberId(); MallMember mallMember = this.baseMapper.selectById(unfreezeMemberId); Integer isFrozen = mallMember.getIsFrozen(); if(ProductEnum.MEMBER_UNFROZEN.getValue() == isFrozen){ throw new FebsException("账户未被冻结"); } DataDictionaryCustom memberFrozenFcmCntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.MEMBER_FROZEN_FCM_CNT.getType(), DataDictionaryEnum.MEMBER_FROZEN_FCM_CNT.getCode() ); BigDecimal memberFrozenFcmCnt = new BigDecimal(memberFrozenFcmCntDic.getValue()); MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId); BigDecimal fcmCntAva = mallMemberAmount.getTokenAva(); if(memberFrozenFcmCnt.compareTo(fcmCntAva) > 0){ throw new FebsException("激活需要宝石的数量为:" + fcmCntAva); } if(2 == unfreezeDto.getType()){ List mallMembers = this.baseMapper.selectByRefererId(loginMember.getInviteId()); List collectMemberIds = mallMembers.stream().map(MallMember::getId).collect(Collectors.toList()); if(!collectMemberIds.contains(unfreezeMemberId)){ throw new FebsException("直接推荐人才能解除账户的冻结状态"); } } BigDecimal fcmCntAvaSub = fcmCntAva.subtract(memberFrozenFcmCnt); mallMemberAmount.setTokenAva(fcmCntAvaSub); mallMemberAmountMapper.updateById(mallMemberAmount); mallMember.setIsFrozen(ProductEnum.MEMBER_UNFROZEN.getValue()); this.baseMapper.updateById(mallMember); mallMoneyFlowService.addMoneyFlow( memberId, memberFrozenFcmCnt.negate(), MoneyFlowTypeNewEnum.UNFREEZE_USER.getValue(), MallUtils.getOrderNum(), memberId, FlowTypeNewEnum.TOKEN.getValue(), MoneyFlowTypeNewEnum.UNFREEZE_USER.getDescrition()); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse memberSpeak(ApiMemberSpeakDto memberSpeakDto) { MallMemberSpeak mallMemberSpeak = new MallMemberSpeak(); if(ObjectUtil.isNotEmpty(memberSpeakDto.getMemberId())){ mallMemberSpeak.setMemberId(memberSpeakDto.getMemberId()); } mallMemberSpeak.setState(ProductEnum.SPEAK_NO_DEAL.getValue()); mallMemberSpeak.setDescription(memberSpeakDto.getDescription()); mallMemberSpeakMapper.insert(mallMemberSpeak); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse moneyFlowInside(MoneyFlowDto moneyFlowDto) { IPage page = new Page<>(moneyFlowDto.getPageNum(), moneyFlowDto.getPageSize()); Long id = LoginUserUtil.getLoginUser().getId(); moneyFlowDto.setMemberId(id); IPage pages = mallMoneyFlowMapper.selectApiFcmMoneyFlowInsideInPage(page, moneyFlowDto); return new FebsResponse().success().data(pages); } @Override public FebsResponse chargeBalance(ApiChargeBalanceDto apiChargeBalanceDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = this.baseMapper.selectById(memberId); BigDecimal amount = apiChargeBalanceDto.getAmount(); DataDictionaryCustom chargeAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.CHARGE_AMOUNT.getType(), DataDictionaryEnum.CHARGE_AMOUNT.getCode() ); BigDecimal chargeAmount = new BigDecimal(chargeAmountDic.getValue()).setScale(2,BigDecimal.ROUND_DOWN); if(chargeAmount.compareTo(amount) > 0){ throw new FebsException("充值金额需要大于"+chargeAmount); } if (StrUtil.isBlank(mallMember.getTradePassword())) { throw new FebsException("请设置交易密码"); } if (!mallMember.getTradePassword().equals(SecureUtil.md5(apiChargeBalanceDto.getTradePassword()))) { throw new FebsException("交易密码错误"); } MallMemberCharge mallMemberCharge = new MallMemberCharge(); mallMemberCharge.setMemberId(memberId); mallMemberCharge.setAmount(amount); mallMemberCharge.setAddress(apiChargeBalanceDto.getAddress()); mallMemberCharge.setState(1); mallMemberChargeMapper.insert(mallMemberCharge); return new FebsResponse().success().message("操作成功"); } // public static void main(String[] args) { // Set objectsAccount = new HashSet<>(); // Set objects = new HashSet<>(); // int j = 100; // for(int i =0;i < 100 ; i++){ // String s = ShareCodeUtil.toSerialNumberCodeTwo(j); // objects.add(s); // } // // System.out.println(objects); // System.out.println(objects.size()); // } }