diff --git a/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/helper/NumberHelper.java b/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/helper/NumberHelper.java new file mode 100644 index 0000000..db6dde8 --- /dev/null +++ b/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/helper/NumberHelper.java @@ -0,0 +1,32 @@ +package com.lanyuanxiaoyao.leopard.server.helper; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import java.util.function.Function; + +/** + * @author lanyuanxiaoyao + * @version 20250912 + */ +public class NumberHelper { + public static final String FINANCE_NULL_DOUBLE = "/"; + + public static String formatFinanceDouble(Double value) { + if (ObjectUtil.isNull(value)) { + return FINANCE_NULL_DOUBLE; + } + return value.toString(); + } + + public static Double parseDouble(String value) { + if (StrUtil.isBlank(value)) { + return null; + } + return Double.parseDouble(value); + } + + public static Double parseDouble(String value, Function ifSuccess) { + var result = parseDouble(value); + return ObjectUtil.isNull(result) ? null : ifSuccess.apply(result); + } +} diff --git a/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/service/task/UpdateFinanceNode.java b/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/service/task/UpdateFinanceNode.java index df1380a..6706b0e 100644 --- a/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/service/task/UpdateFinanceNode.java +++ b/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/service/task/UpdateFinanceNode.java @@ -1,6 +1,5 @@ package com.lanyuanxiaoyao.leopard.server.service.task; -import cn.hutool.core.util.NumberUtil; import com.lanyuanxiaoyao.leopard.core.entity.BalanceSheet; import com.lanyuanxiaoyao.leopard.core.entity.CashFlow; import com.lanyuanxiaoyao.leopard.core.entity.Income; @@ -12,6 +11,7 @@ import com.lanyuanxiaoyao.leopard.core.repository.BalanceSheetRepository; import com.lanyuanxiaoyao.leopard.core.repository.CashFlowRepository; import com.lanyuanxiaoyao.leopard.core.repository.IncomeRepository; import com.lanyuanxiaoyao.leopard.core.repository.StockRepository; +import com.lanyuanxiaoyao.leopard.server.helper.NumberHelper; import com.lanyuanxiaoyao.leopard.server.service.TaskService; import com.lanyuanxiaoyao.leopard.server.service.TuShareService; import com.yomahub.liteflow.annotation.LiteflowComponent; @@ -64,32 +64,32 @@ public class UpdateFinanceNode extends TaskNodeComponent { ).orElse(new Income()); income.setStock(stock); income.setYear(year); - income.setBasicEarningsPerShare(NumberUtil.parseDouble(item.get(1), null)); - income.setDilutedEarningsPerShare(NumberUtil.parseDouble(item.get(2), null)); - income.setTotalOperatingRevenue(NumberUtil.parseDouble(item.get(3), null)); - income.setOperatingRevenue(NumberUtil.parseDouble(item.get(4), null)); - income.setTotalOperatingCost(NumberUtil.parseDouble(item.get(5), null)); - income.setOperatingCost(NumberUtil.parseDouble(item.get(6), null)); - income.setSellingExpense(NumberUtil.parseDouble(item.get(7), null)); - income.setAdministrativeExpense(NumberUtil.parseDouble(item.get(8), null)); - income.setFinancialExpense(NumberUtil.parseDouble(item.get(9), null)); - income.setOperatingExpense(NumberUtil.parseDouble(item.get(10), null)); - income.setOperatingProfit(NumberUtil.parseDouble(item.get(11), null)); - income.setAddNonOperatingIncome(NumberUtil.parseDouble(item.get(12), null)); - income.setLessNonOperatingExpense(NumberUtil.parseDouble(item.get(13), null)); - income.setTotalProfit(NumberUtil.parseDouble(item.get(14), null)); - income.setIncomeTaxExpense(NumberUtil.parseDouble(item.get(15), null)); - income.setNetProfitIncludingMinorityInterest(NumberUtil.parseDouble(item.get(16), null)); - income.setNetProfitExcludingMinorityInterest(NumberUtil.parseDouble(item.get(17), null)); - income.setComprehensiveIncomeAttributableToParent(NumberUtil.parseDouble(item.get(18), null)); - income.setComprehensiveIncomeAttributableToMinorityShareholders(NumberUtil.parseDouble(item.get(19), null)); - income.setEarningsBeforeInterestAndTax(NumberUtil.parseDouble(item.get(20), null)); - income.setBeginningUndistributedProfit(NumberUtil.parseDouble(item.get(21), null)); - income.setDistributableProfit(NumberUtil.parseDouble(item.get(22), null)); - income.setResearchAndDevelopmentExpense(NumberUtil.parseDouble(item.get(23), null)); - income.setFinancialExpenseInterestExpense(NumberUtil.parseDouble(item.get(24), null)); - income.setNetProfitFromContinuingOperations(NumberUtil.parseDouble(item.get(25), null)); - income.setNetProfitFromDiscontinuedOperations(NumberUtil.parseDouble(item.get(26), null)); + income.setBasicEarningsPerShare(NumberHelper.parseDouble(item.get(1))); + income.setDilutedEarningsPerShare(NumberHelper.parseDouble(item.get(2))); + income.setTotalOperatingRevenue(NumberHelper.parseDouble(item.get(3))); + income.setOperatingRevenue(NumberHelper.parseDouble(item.get(4))); + income.setTotalOperatingCost(NumberHelper.parseDouble(item.get(5))); + income.setOperatingCost(NumberHelper.parseDouble(item.get(6))); + income.setSellingExpense(NumberHelper.parseDouble(item.get(7))); + income.setAdministrativeExpense(NumberHelper.parseDouble(item.get(8))); + income.setFinancialExpense(NumberHelper.parseDouble(item.get(9))); + income.setOperatingExpense(NumberHelper.parseDouble(item.get(10))); + income.setOperatingProfit(NumberHelper.parseDouble(item.get(11))); + income.setAddNonOperatingIncome(NumberHelper.parseDouble(item.get(12))); + income.setLessNonOperatingExpense(NumberHelper.parseDouble(item.get(13))); + income.setTotalProfit(NumberHelper.parseDouble(item.get(14))); + income.setIncomeTaxExpense(NumberHelper.parseDouble(item.get(15))); + income.setNetProfitIncludingMinorityInterest(NumberHelper.parseDouble(item.get(16))); + income.setNetProfitExcludingMinorityInterest(NumberHelper.parseDouble(item.get(17))); + income.setComprehensiveIncomeAttributableToParent(NumberHelper.parseDouble(item.get(18))); + income.setComprehensiveIncomeAttributableToMinorityShareholders(NumberHelper.parseDouble(item.get(19))); + income.setEarningsBeforeInterestAndTax(NumberHelper.parseDouble(item.get(20))); + income.setBeginningUndistributedProfit(NumberHelper.parseDouble(item.get(21))); + income.setDistributableProfit(NumberHelper.parseDouble(item.get(22))); + income.setResearchAndDevelopmentExpense(NumberHelper.parseDouble(item.get(23))); + income.setFinancialExpenseInterestExpense(NumberHelper.parseDouble(item.get(24))); + income.setNetProfitFromContinuingOperations(NumberHelper.parseDouble(item.get(25))); + income.setNetProfitFromDiscontinuedOperations(NumberHelper.parseDouble(item.get(26))); incomeRepository.save(income); } @@ -106,36 +106,36 @@ public class UpdateFinanceNode extends TaskNodeComponent { ).orElse(new BalanceSheet()); balanceSheet.setStock(stock); balanceSheet.setYear(year); - balanceSheet.setEndingTotalShares(NumberUtil.parseDouble(item.get(1), null)); - balanceSheet.setCapitalSurplus(NumberUtil.parseDouble(item.get(2), null)); - balanceSheet.setUndistributedProfit(NumberUtil.parseDouble(item.get(3), null)); - balanceSheet.setMonetaryFunds(NumberUtil.parseDouble(item.get(4), null)); - balanceSheet.setAccountsReceivable(NumberUtil.parseDouble(item.get(5), null)); - balanceSheet.setInventories(NumberUtil.parseDouble(item.get(6), null)); - balanceSheet.setTotalCurrentAssets(NumberUtil.parseDouble(item.get(7), null)); - balanceSheet.setLongTermEquityInvestments(NumberUtil.parseDouble(item.get(8), null)); - balanceSheet.setLongTermReceivables(NumberUtil.parseDouble(item.get(9), null)); - balanceSheet.setFixedAssets(NumberUtil.parseDouble(item.get(10), null)); - balanceSheet.setResearchAndDevelopmentExpenditures(NumberUtil.parseDouble(item.get(11), null)); - balanceSheet.setGoodwill(NumberUtil.parseDouble(item.get(12), null)); - balanceSheet.setTotalNonCurrentAssets(NumberUtil.parseDouble(item.get(13), null)); - balanceSheet.setTotalAssets(NumberUtil.parseDouble(item.get(14), null)); - balanceSheet.setLongTermBorrowings(NumberUtil.parseDouble(item.get(15), null)); - balanceSheet.setShortTermBorrowings(NumberUtil.parseDouble(item.get(16), null)); - balanceSheet.setAccountsPayable(NumberUtil.parseDouble(item.get(17), null)); - balanceSheet.setAdvancesReceived(NumberUtil.parseDouble(item.get(18), null)); - balanceSheet.setTotalCurrentLiabilities(NumberUtil.parseDouble(item.get(19), null)); - balanceSheet.setTotalNonCurrentLiabilities(NumberUtil.parseDouble(item.get(20), null)); - balanceSheet.setTotalLiabilities(NumberUtil.parseDouble(item.get(21), null)); - balanceSheet.setTotalShareholdersEquityExcludingMinorityInterest(NumberUtil.parseDouble(item.get(22), null)); - balanceSheet.setTotalShareholdersEquityIncludingMinorityInterest(NumberUtil.parseDouble(item.get(23), null)); - balanceSheet.setTotalLiabilitiesAndShareholdersEquity(NumberUtil.parseDouble(item.get(24), null)); - balanceSheet.setAccountsReceivable(NumberUtil.parseDouble(item.get(25), null)); - balanceSheet.setPayables(NumberUtil.parseDouble(item.get(26), null)); - balanceSheet.setNotesAndAccountsReceivable(NumberUtil.parseDouble(item.get(27), null)); - balanceSheet.setNotesAndAccountsPayable(NumberUtil.parseDouble(item.get(28), null)); - balanceSheet.setOtherReceivablesTotal(NumberUtil.parseDouble(item.get(29), null)); - balanceSheet.setFixedAssetsTotal(NumberUtil.parseDouble(item.get(30), null)); + balanceSheet.setEndingTotalShares(NumberHelper.parseDouble(item.get(1))); + balanceSheet.setCapitalSurplus(NumberHelper.parseDouble(item.get(2))); + balanceSheet.setUndistributedProfit(NumberHelper.parseDouble(item.get(3))); + balanceSheet.setMonetaryFunds(NumberHelper.parseDouble(item.get(4))); + balanceSheet.setAccountsReceivable(NumberHelper.parseDouble(item.get(5))); + balanceSheet.setInventories(NumberHelper.parseDouble(item.get(6))); + balanceSheet.setTotalCurrentAssets(NumberHelper.parseDouble(item.get(7))); + balanceSheet.setLongTermEquityInvestments(NumberHelper.parseDouble(item.get(8))); + balanceSheet.setLongTermReceivables(NumberHelper.parseDouble(item.get(9))); + balanceSheet.setFixedAssets(NumberHelper.parseDouble(item.get(10))); + balanceSheet.setResearchAndDevelopmentExpenditures(NumberHelper.parseDouble(item.get(11))); + balanceSheet.setGoodwill(NumberHelper.parseDouble(item.get(12))); + balanceSheet.setTotalNonCurrentAssets(NumberHelper.parseDouble(item.get(13))); + balanceSheet.setTotalAssets(NumberHelper.parseDouble(item.get(14))); + balanceSheet.setLongTermBorrowings(NumberHelper.parseDouble(item.get(15))); + balanceSheet.setShortTermBorrowings(NumberHelper.parseDouble(item.get(16))); + balanceSheet.setAccountsPayable(NumberHelper.parseDouble(item.get(17))); + balanceSheet.setAdvancesReceived(NumberHelper.parseDouble(item.get(18))); + balanceSheet.setTotalCurrentLiabilities(NumberHelper.parseDouble(item.get(19))); + balanceSheet.setTotalNonCurrentLiabilities(NumberHelper.parseDouble(item.get(20))); + balanceSheet.setTotalLiabilities(NumberHelper.parseDouble(item.get(21))); + balanceSheet.setTotalShareholdersEquityExcludingMinorityInterest(NumberHelper.parseDouble(item.get(22))); + balanceSheet.setTotalShareholdersEquityIncludingMinorityInterest(NumberHelper.parseDouble(item.get(23))); + balanceSheet.setTotalLiabilitiesAndShareholdersEquity(NumberHelper.parseDouble(item.get(24))); + balanceSheet.setAccountsReceivable(NumberHelper.parseDouble(item.get(25))); + balanceSheet.setPayables(NumberHelper.parseDouble(item.get(26))); + balanceSheet.setNotesAndAccountsReceivable(NumberHelper.parseDouble(item.get(27))); + balanceSheet.setNotesAndAccountsPayable(NumberHelper.parseDouble(item.get(28))); + balanceSheet.setOtherReceivablesTotal(NumberHelper.parseDouble(item.get(29))); + balanceSheet.setFixedAssetsTotal(NumberHelper.parseDouble(item.get(30))); balanceSheetRepository.save(balanceSheet); } @@ -150,21 +150,21 @@ public class UpdateFinanceNode extends TaskNodeComponent { QCashFlow.cashFlow.year.eq(year) .and(QCashFlow.cashFlow.stock.code.eq(stock.getCode())) ).orElse(new CashFlow()); - NumberUtil.parseDouble(item.get(1), null); + NumberHelper.parseDouble(item.get(1)); cashFlow.setStock(stock); cashFlow.setYear(year); - cashFlow.setNetProfit(NumberUtil.parseDouble(item.get(1), null)); - cashFlow.setFinancialExpense(NumberUtil.parseDouble(item.get(2), null)); - cashFlow.setCashReceivedFromSalesAndServices(NumberUtil.parseDouble(item.get(3), null)); - cashFlow.setSubtotalOfCashInflowsFromOperatingActivities(NumberUtil.parseDouble(item.get(4), null)); - cashFlow.setCashPaidToAndForEmployees(NumberUtil.parseDouble(item.get(5), null)); - cashFlow.setCashPaidForVariousTaxes(NumberUtil.parseDouble(item.get(6), null)); - cashFlow.setNetCashFlowFromOperatingActivities(NumberUtil.parseDouble(item.get(7), null)); - cashFlow.setSubtotalOfCashInflowsFromInvestingActivities(NumberUtil.parseDouble(item.get(8), null)); - cashFlow.setCashPaidForLongTermAssets(NumberUtil.parseDouble(item.get(9), null)); - cashFlow.setSubtotalOfCashOutflowsFromInvestingActivities(NumberUtil.parseDouble(item.get(10), null)); - cashFlow.setSubtotalOfCashOutflowsFromFinancingActivities(NumberUtil.parseDouble(item.get(11), null)); - cashFlow.setBeginningBalanceOfCashAndCashEquivalents(NumberUtil.parseDouble(item.get(12), null)); + cashFlow.setNetProfit(NumberHelper.parseDouble(item.get(1))); + cashFlow.setFinancialExpense(NumberHelper.parseDouble(item.get(2))); + cashFlow.setCashReceivedFromSalesAndServices(NumberHelper.parseDouble(item.get(3))); + cashFlow.setSubtotalOfCashInflowsFromOperatingActivities(NumberHelper.parseDouble(item.get(4))); + cashFlow.setCashPaidToAndForEmployees(NumberHelper.parseDouble(item.get(5))); + cashFlow.setCashPaidForVariousTaxes(NumberHelper.parseDouble(item.get(6))); + cashFlow.setNetCashFlowFromOperatingActivities(NumberHelper.parseDouble(item.get(7))); + cashFlow.setSubtotalOfCashInflowsFromInvestingActivities(NumberHelper.parseDouble(item.get(8))); + cashFlow.setCashPaidForLongTermAssets(NumberHelper.parseDouble(item.get(9))); + cashFlow.setSubtotalOfCashOutflowsFromInvestingActivities(NumberHelper.parseDouble(item.get(10))); + cashFlow.setSubtotalOfCashOutflowsFromFinancingActivities(NumberHelper.parseDouble(item.get(11))); + cashFlow.setBeginningBalanceOfCashAndCashEquivalents(NumberHelper.parseDouble(item.get(12))); cashFlowRepository.save(cashFlow); }