@Override public List<InvitationCodeDTO> createInvitationCodes( InvitationCodeType invitationCodeType, OperatorType inviterType, Long inviterId, OperatorType inviteeType, List<Long> inviteeIds, Long expirationTime, boolean checkingDuplicated) throws Exception { List<InvitationCodeDTO> invitationCodeDTOList = new ArrayList<InvitationCodeDTO>(); if (inviterType == null || inviterId == null || inviteeType == null || CollectionUtil.isEmpty(inviteeIds)) { LOG.warn( "parameters can't be null:[inviterType:" + inviterType + ",inviterId:" + inviterId + ",inviteeType:" + inviteeType + ",inviteeIds:" + inviteeIds); return invitationCodeDTOList; } InvitationCodeDTO dto; String code; List<String> codeList = RandomUtils.randomAlphabeticList(inviteeIds.size()); IConfigService configService = ServiceManager.getService(IConfigService.class); String effectiveDate; if (checkingDuplicated) { long beginning = System.currentTimeMillis(); while (duplicatedInvitationCodeDuplicate(codeList)) { codeList = RandomUtils.randomAlphabeticList(inviteeIds.size()); if (System.currentTimeMillis() - beginning > CREATE_INVITATION_CODE_TIMEOUT) { throw new Exception("create invitationCode timeout exception!"); } } } for (int i = 0; i < codeList.size(); i++) { dto = new InvitationCodeDTO(); dto.setInviterId(inviterId); dto.setInviterType(inviterType); dto.setInviteeId(inviteeIds.get(i)); dto.setInviteeType(inviteeType); dto.setStatus(InvitationCodeStatus.EFFECTIVE); dto.setInviteTime(System.currentTimeMillis()); dto.setType(invitationCodeType); if (expirationTime == null) { effectiveDate = configService.getConfig("INVITATION_CODE_EFFECTIVE_DATE", ShopConstant.BC_SHOP_ID); if (StringUtil.isEmpty(effectiveDate)) { dto.setExpirationTime(System.currentTimeMillis() + DEFAULT_EXPIRATION_TIME); } else { dto.setExpirationTime( System.currentTimeMillis() + Long.valueOf( configService.getConfig( "INVITATION_CODE_EFFECTIVE_DATE", ShopConstant.BC_SHOP_ID))); } } else { dto.setExpirationTime(expirationTime); } code = codeList.get(i); dto.setCode(code); invitationCodeDTOList.add(dto); } saveInvitationCodes(invitationCodeDTOList); return invitationCodeDTOList; }