diff --git a/src/main/java/com/yn/bftl/thirdparty/modules/business/service/impl/SubaccountServiceImpl.java b/src/main/java/com/yn/bftl/thirdparty/modules/business/service/impl/SubaccountServiceImpl.java index 8eaea9b..575f1ee 100644 --- a/src/main/java/com/yn/bftl/thirdparty/modules/business/service/impl/SubaccountServiceImpl.java +++ b/src/main/java/com/yn/bftl/thirdparty/modules/business/service/impl/SubaccountServiceImpl.java @@ -1405,80 +1405,100 @@ return; } } - if (subaccountStatus.equals("succeeded")) { - if (subaccount.getSubaccountType().equals(SubaccountType.SERVICE_FEE)) { - // 通过平台的电子账簿获取企业 - Company company = companyRepository.findByWalletId(chinaumsUtil.getFeeBalanceAcctId()); - if (company != null) { - AccountChangeCreateDTO accountChangeCreateDTO = AccountChangeCreateDTO - .builder() - .company(company) - .direction(ChangeDirection.ADD) - .type(AccountChangeType.valueOf(SubaccountType.SERVICE_FEE.getValue())) - .amount(subaccount.getSubaccountAmount()) - .sourceNo(subaccount.getSubaccountNo()) - .sourceCompanyId(subaccount.getSourceCompany().getId()) - .build(); - accountService.intoAccount(accountChangeCreateDTO); - } - } - // 品牌授权费 - else if (subaccount.getSubaccountType().equals(SubaccountType.BRAND_AUTH_FEE)) { - // 处理预存款账户 - AccountChangeCreateDTO accountChangeCreateDTO = AccountChangeCreateDTO - .builder() - .company(subaccount.getCompany()) - .direction(ChangeDirection.ADD) - .type(AccountChangeType.valueOf(SubaccountType.BRAND_AUTH_FEE.getValue())) - .amount(subaccount.getSubaccountAmount()) - .sourceNo(subaccount.getSubaccountNo()) - .sourceCompanyId(subaccount.getSourceCompany().getId()) - .build(); - accountService.intoAccount(accountChangeCreateDTO); - } - // 货款、品牌费、策划费 - else { - List statementList; - if (subaccount.getShipping() != null) { - statementList = statementRepository.findAllByShippingIdAndSubaccountType(subaccount.getShipping().getId(), subaccount.getSubaccountType()); - } else { - statementList = statementRepository.findAllByOrdersIdAndSubaccountType(subaccount.getOrders().getId(), subaccount.getSubaccountType()); - } - // 处理预存款账户 - AccountChangeCreateDTO accountChangeCreateDTO = AccountChangeCreateDTO - .builder() - .company(statementList.get(0).getCompany()) - .direction(ChangeDirection.ADD) - .type(AccountChangeType.valueOf(statementList.get(0).getSubaccountType().getValue())) - .amount(subaccount.getSubaccountAmount()) - .sourceNo(subaccount.getSubaccountNo()) - .sourceCompanyId(subaccount.getSourceCompany().getId()) - .build(); - accountService.intoAccount(accountChangeCreateDTO); - for (Statement statement : statementList) { - // 处理对应结算单 - statement.setStatementState(StatementState.RECORDED); - statement.setSubaccountTime(DateTimeUtils.getLocalDateTimeByRFC3339(finishedAt)); - statementRepository.saveAndFlush(statement); - } + handleSubaccountStatus(subaccount, subaccountStatus, finishedAt); + } - } - subaccount.setSubaccountState(SubaccountState.SEPARATE_SUCC); - subaccount.setSeparateTime(DateTimeUtils.getLocalDateTimeByRFC3339(finishedAt)); - subaccount.setExternalTime(DateTimeUtils.getLocalDateTimeByRFC3339(finishedAt)); - // 查找对应的银联支付单 - ChinaumsPayment chinaumsPayment = chinaumsPaymentRepository.findFirstByOrdersIdAndSubaccountType(subaccount.getOrders().getId(), subaccount.getSubaccountType()); - if (chinaumsPayment != null) { - // 处理已确认金额 - chinaumsPayment.setConfirmedAmount(chinaumsPayment.getConfirmedAmount().add(subaccount.getSubaccountAmount())); - chinaumsPaymentRepository.saveAndFlush(chinaumsPayment); - } + private void handleSubaccountStatus(Subaccount subaccount, String subaccountStatus, String finishedAt) { + if (subaccountStatus.equals("succeeded")) { + handleSubaccountStatusSuccess(subaccount, finishedAt); } else if (subaccountStatus.equals("failed")) { subaccount.setSubaccountState(SubaccountState.SEPARATE_FAIL); } subaccountRepository.saveAndFlush(subaccount); } + private void handleSubaccountStatusSuccess(Subaccount subaccount, String finishedAt) { + if (subaccount.getSubaccountType().equals(SubaccountType.SERVICE_FEE)) { + handleSubaccountTypeServiceFee(subaccount); + } + // 品牌授权费 + else if (subaccount.getSubaccountType().equals(SubaccountType.BRAND_AUTH_FEE)) { + handleSubaccountTypeBrandAuthFee(subaccount); + } + // 货款、品牌费、策划费 + else { + handleSubaccountTypeOtherFee(subaccount, finishedAt); + + } + subaccount.setSubaccountState(SubaccountState.SEPARATE_SUCC); + subaccount.setSeparateTime(DateTimeUtils.getLocalDateTimeByRFC3339(finishedAt)); + subaccount.setExternalTime(DateTimeUtils.getLocalDateTimeByRFC3339(finishedAt)); + // 查找对应的银联支付单 + ChinaumsPayment chinaumsPayment = chinaumsPaymentRepository.findFirstByOrdersIdAndSubaccountType(subaccount.getOrders().getId(), subaccount.getSubaccountType()); + if (chinaumsPayment != null) { + // 处理已确认金额 + chinaumsPayment.setConfirmedAmount(chinaumsPayment.getConfirmedAmount().add(subaccount.getSubaccountAmount())); + chinaumsPaymentRepository.saveAndFlush(chinaumsPayment); + } + } + + private void handleSubaccountTypeOtherFee(Subaccount subaccount, String finishedAt) { + List statementList; + if (subaccount.getShipping() != null) { + statementList = statementRepository.findAllByShippingIdAndSubaccountType(subaccount.getShipping().getId(), subaccount.getSubaccountType()); + } else { + statementList = statementRepository.findAllByOrdersIdAndSubaccountType(subaccount.getOrders().getId(), subaccount.getSubaccountType()); + } + // 处理预存款账户 + AccountChangeCreateDTO accountChangeCreateDTO = AccountChangeCreateDTO + .builder() + .company(statementList.get(0).getCompany()) + .direction(ChangeDirection.ADD) + .type(AccountChangeType.valueOf(statementList.get(0).getSubaccountType().getValue())) + .amount(subaccount.getSubaccountAmount()) + .sourceNo(subaccount.getSubaccountNo()) + .sourceCompanyId(subaccount.getSourceCompany().getId()) + .build(); + accountService.intoAccount(accountChangeCreateDTO); + for (Statement statement : statementList) { + // 处理对应结算单 + statement.setStatementState(StatementState.RECORDED); + statement.setSubaccountTime(DateTimeUtils.getLocalDateTimeByRFC3339(finishedAt)); + statementRepository.saveAndFlush(statement); + } + } + + private void handleSubaccountTypeBrandAuthFee(Subaccount subaccount) { + // 处理预存款账户 + AccountChangeCreateDTO accountChangeCreateDTO = AccountChangeCreateDTO + .builder() + .company(subaccount.getCompany()) + .direction(ChangeDirection.ADD) + .type(AccountChangeType.valueOf(SubaccountType.BRAND_AUTH_FEE.getValue())) + .amount(subaccount.getSubaccountAmount()) + .sourceNo(subaccount.getSubaccountNo()) + .sourceCompanyId(subaccount.getSourceCompany().getId()) + .build(); + accountService.intoAccount(accountChangeCreateDTO); + } + + private void handleSubaccountTypeServiceFee(Subaccount subaccount) { + // 通过平台的电子账簿获取企业 + Company company = companyRepository.findByWalletId(chinaumsUtil.getFeeBalanceAcctId()); + if (company != null) { + AccountChangeCreateDTO accountChangeCreateDTO = AccountChangeCreateDTO + .builder() + .company(company) + .direction(ChangeDirection.ADD) + .type(AccountChangeType.valueOf(SubaccountType.SERVICE_FEE.getValue())) + .amount(subaccount.getSubaccountAmount()) + .sourceNo(subaccount.getSubaccountNo()) + .sourceCompanyId(subaccount.getSourceCompany().getId()) + .build(); + accountService.intoAccount(accountChangeCreateDTO); + } + } + /** * 计算平台分账记录