@Override public void recycleInvitationCode(Integer pageSize) { IConfigService configService = ServiceManager.getService(IConfigService.class); if (pageSize == null) { pageSize = PAGE_SIZE; } long id = 0; List<InvitationCode> codeList; List<InvitationCodeRecycle> recycles = new ArrayList<InvitationCodeRecycle>(); List<InvitationCode> codes = new ArrayList<InvitationCode>(); InvitationCodeRecycle recycle; while (true) { NotificationWriter writer = notificationDaoManager.getWriter(); codeList = writer.getInvitationCode(pageSize, id); // 得到将要reindex的orderId if (CollectionUtils.isEmpty(codeList)) break; Object status = writer.begin(); try { for (InvitationCode code : codeList) { // 过期 无效 if (InvitationCodeStatus.isRecycle( code.getExpirationTime(), configService.getConfig("INVITATION_CODE_OVERDUE_DATE", ShopConstant.BC_SHOP_ID), code.getStatus())) { recycle = new InvitationCodeRecycle(); if (code.getExpirationTime() < System.currentTimeMillis()) { recycle = recycle.fromInvitationCode(code); } recycle.setStatus(InvitationCodeStatus.INVALID_OVERDUE); recycles.add(recycle); codes.add(code); } else if (InvitationCodeStatus.isOverdue( code.getExpirationTime(), configService.getConfig("INVITATION_CODE_EFFECTIVE_DATE", ShopConstant.BC_SHOP_ID))) { // 过期 code.setStatus(InvitationCodeStatus.OVERDUE); writer.update(code); } } id = codeList.get(codeList.size() - 1).getId(); if (CollectionUtils.isNotEmpty(recycles)) { for (int i = 0, max = recycles.size(); i < max; i++) { writer.save(recycles.get(i)); writer.delete(InvitationCode.class, codes.get(i).getId()); } } writer.commit(status); } finally { writer.rollback(status); recycles.clear(); codes.clear(); } } }
@Override public void updateInvitationCodeToUsed(String code) { NotificationWriter writer = notificationDaoManager.getWriter(); InvitationCodeDTO dto = writer.findInvitationCodeByCode(code); if (dto == null) { LOG.warn("can't find InvitationCode by code:{}", code); return; } Object status = writer.begin(); try { InvitationCode invitationCode = writer.getById(InvitationCode.class, dto.getId()); invitationCode.setStatus(InvitationCodeStatus.BE_USED); invitationCode.setUsageTime(System.currentTimeMillis()); writer.save(invitationCode); writer.commit(status); } finally { writer.rollback(status); } }