1
0

perf: 优化数值处理

This commit is contained in:
2025-09-12 16:18:04 +08:00
parent eba80bd9cc
commit 5fa2a4e8e7
2 changed files with 102 additions and 70 deletions

View File

@@ -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<Double, Double> ifSuccess) {
var result = parseDouble(value);
return ObjectUtil.isNull(result) ? null : ifSuccess.apply(result);
}
}

View File

@@ -1,6 +1,5 @@
package com.lanyuanxiaoyao.leopard.server.service.task; 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.BalanceSheet;
import com.lanyuanxiaoyao.leopard.core.entity.CashFlow; import com.lanyuanxiaoyao.leopard.core.entity.CashFlow;
import com.lanyuanxiaoyao.leopard.core.entity.Income; 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.CashFlowRepository;
import com.lanyuanxiaoyao.leopard.core.repository.IncomeRepository; import com.lanyuanxiaoyao.leopard.core.repository.IncomeRepository;
import com.lanyuanxiaoyao.leopard.core.repository.StockRepository; 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.TaskService;
import com.lanyuanxiaoyao.leopard.server.service.TuShareService; import com.lanyuanxiaoyao.leopard.server.service.TuShareService;
import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.annotation.LiteflowComponent;
@@ -64,32 +64,32 @@ public class UpdateFinanceNode extends TaskNodeComponent {
).orElse(new Income()); ).orElse(new Income());
income.setStock(stock); income.setStock(stock);
income.setYear(year); income.setYear(year);
income.setBasicEarningsPerShare(NumberUtil.parseDouble(item.get(1), null)); income.setBasicEarningsPerShare(NumberHelper.parseDouble(item.get(1)));
income.setDilutedEarningsPerShare(NumberUtil.parseDouble(item.get(2), null)); income.setDilutedEarningsPerShare(NumberHelper.parseDouble(item.get(2)));
income.setTotalOperatingRevenue(NumberUtil.parseDouble(item.get(3), null)); income.setTotalOperatingRevenue(NumberHelper.parseDouble(item.get(3)));
income.setOperatingRevenue(NumberUtil.parseDouble(item.get(4), null)); income.setOperatingRevenue(NumberHelper.parseDouble(item.get(4)));
income.setTotalOperatingCost(NumberUtil.parseDouble(item.get(5), null)); income.setTotalOperatingCost(NumberHelper.parseDouble(item.get(5)));
income.setOperatingCost(NumberUtil.parseDouble(item.get(6), null)); income.setOperatingCost(NumberHelper.parseDouble(item.get(6)));
income.setSellingExpense(NumberUtil.parseDouble(item.get(7), null)); income.setSellingExpense(NumberHelper.parseDouble(item.get(7)));
income.setAdministrativeExpense(NumberUtil.parseDouble(item.get(8), null)); income.setAdministrativeExpense(NumberHelper.parseDouble(item.get(8)));
income.setFinancialExpense(NumberUtil.parseDouble(item.get(9), null)); income.setFinancialExpense(NumberHelper.parseDouble(item.get(9)));
income.setOperatingExpense(NumberUtil.parseDouble(item.get(10), null)); income.setOperatingExpense(NumberHelper.parseDouble(item.get(10)));
income.setOperatingProfit(NumberUtil.parseDouble(item.get(11), null)); income.setOperatingProfit(NumberHelper.parseDouble(item.get(11)));
income.setAddNonOperatingIncome(NumberUtil.parseDouble(item.get(12), null)); income.setAddNonOperatingIncome(NumberHelper.parseDouble(item.get(12)));
income.setLessNonOperatingExpense(NumberUtil.parseDouble(item.get(13), null)); income.setLessNonOperatingExpense(NumberHelper.parseDouble(item.get(13)));
income.setTotalProfit(NumberUtil.parseDouble(item.get(14), null)); income.setTotalProfit(NumberHelper.parseDouble(item.get(14)));
income.setIncomeTaxExpense(NumberUtil.parseDouble(item.get(15), null)); income.setIncomeTaxExpense(NumberHelper.parseDouble(item.get(15)));
income.setNetProfitIncludingMinorityInterest(NumberUtil.parseDouble(item.get(16), null)); income.setNetProfitIncludingMinorityInterest(NumberHelper.parseDouble(item.get(16)));
income.setNetProfitExcludingMinorityInterest(NumberUtil.parseDouble(item.get(17), null)); income.setNetProfitExcludingMinorityInterest(NumberHelper.parseDouble(item.get(17)));
income.setComprehensiveIncomeAttributableToParent(NumberUtil.parseDouble(item.get(18), null)); income.setComprehensiveIncomeAttributableToParent(NumberHelper.parseDouble(item.get(18)));
income.setComprehensiveIncomeAttributableToMinorityShareholders(NumberUtil.parseDouble(item.get(19), null)); income.setComprehensiveIncomeAttributableToMinorityShareholders(NumberHelper.parseDouble(item.get(19)));
income.setEarningsBeforeInterestAndTax(NumberUtil.parseDouble(item.get(20), null)); income.setEarningsBeforeInterestAndTax(NumberHelper.parseDouble(item.get(20)));
income.setBeginningUndistributedProfit(NumberUtil.parseDouble(item.get(21), null)); income.setBeginningUndistributedProfit(NumberHelper.parseDouble(item.get(21)));
income.setDistributableProfit(NumberUtil.parseDouble(item.get(22), null)); income.setDistributableProfit(NumberHelper.parseDouble(item.get(22)));
income.setResearchAndDevelopmentExpense(NumberUtil.parseDouble(item.get(23), null)); income.setResearchAndDevelopmentExpense(NumberHelper.parseDouble(item.get(23)));
income.setFinancialExpenseInterestExpense(NumberUtil.parseDouble(item.get(24), null)); income.setFinancialExpenseInterestExpense(NumberHelper.parseDouble(item.get(24)));
income.setNetProfitFromContinuingOperations(NumberUtil.parseDouble(item.get(25), null)); income.setNetProfitFromContinuingOperations(NumberHelper.parseDouble(item.get(25)));
income.setNetProfitFromDiscontinuedOperations(NumberUtil.parseDouble(item.get(26), null)); income.setNetProfitFromDiscontinuedOperations(NumberHelper.parseDouble(item.get(26)));
incomeRepository.save(income); incomeRepository.save(income);
} }
@@ -106,36 +106,36 @@ public class UpdateFinanceNode extends TaskNodeComponent {
).orElse(new BalanceSheet()); ).orElse(new BalanceSheet());
balanceSheet.setStock(stock); balanceSheet.setStock(stock);
balanceSheet.setYear(year); balanceSheet.setYear(year);
balanceSheet.setEndingTotalShares(NumberUtil.parseDouble(item.get(1), null)); balanceSheet.setEndingTotalShares(NumberHelper.parseDouble(item.get(1)));
balanceSheet.setCapitalSurplus(NumberUtil.parseDouble(item.get(2), null)); balanceSheet.setCapitalSurplus(NumberHelper.parseDouble(item.get(2)));
balanceSheet.setUndistributedProfit(NumberUtil.parseDouble(item.get(3), null)); balanceSheet.setUndistributedProfit(NumberHelper.parseDouble(item.get(3)));
balanceSheet.setMonetaryFunds(NumberUtil.parseDouble(item.get(4), null)); balanceSheet.setMonetaryFunds(NumberHelper.parseDouble(item.get(4)));
balanceSheet.setAccountsReceivable(NumberUtil.parseDouble(item.get(5), null)); balanceSheet.setAccountsReceivable(NumberHelper.parseDouble(item.get(5)));
balanceSheet.setInventories(NumberUtil.parseDouble(item.get(6), null)); balanceSheet.setInventories(NumberHelper.parseDouble(item.get(6)));
balanceSheet.setTotalCurrentAssets(NumberUtil.parseDouble(item.get(7), null)); balanceSheet.setTotalCurrentAssets(NumberHelper.parseDouble(item.get(7)));
balanceSheet.setLongTermEquityInvestments(NumberUtil.parseDouble(item.get(8), null)); balanceSheet.setLongTermEquityInvestments(NumberHelper.parseDouble(item.get(8)));
balanceSheet.setLongTermReceivables(NumberUtil.parseDouble(item.get(9), null)); balanceSheet.setLongTermReceivables(NumberHelper.parseDouble(item.get(9)));
balanceSheet.setFixedAssets(NumberUtil.parseDouble(item.get(10), null)); balanceSheet.setFixedAssets(NumberHelper.parseDouble(item.get(10)));
balanceSheet.setResearchAndDevelopmentExpenditures(NumberUtil.parseDouble(item.get(11), null)); balanceSheet.setResearchAndDevelopmentExpenditures(NumberHelper.parseDouble(item.get(11)));
balanceSheet.setGoodwill(NumberUtil.parseDouble(item.get(12), null)); balanceSheet.setGoodwill(NumberHelper.parseDouble(item.get(12)));
balanceSheet.setTotalNonCurrentAssets(NumberUtil.parseDouble(item.get(13), null)); balanceSheet.setTotalNonCurrentAssets(NumberHelper.parseDouble(item.get(13)));
balanceSheet.setTotalAssets(NumberUtil.parseDouble(item.get(14), null)); balanceSheet.setTotalAssets(NumberHelper.parseDouble(item.get(14)));
balanceSheet.setLongTermBorrowings(NumberUtil.parseDouble(item.get(15), null)); balanceSheet.setLongTermBorrowings(NumberHelper.parseDouble(item.get(15)));
balanceSheet.setShortTermBorrowings(NumberUtil.parseDouble(item.get(16), null)); balanceSheet.setShortTermBorrowings(NumberHelper.parseDouble(item.get(16)));
balanceSheet.setAccountsPayable(NumberUtil.parseDouble(item.get(17), null)); balanceSheet.setAccountsPayable(NumberHelper.parseDouble(item.get(17)));
balanceSheet.setAdvancesReceived(NumberUtil.parseDouble(item.get(18), null)); balanceSheet.setAdvancesReceived(NumberHelper.parseDouble(item.get(18)));
balanceSheet.setTotalCurrentLiabilities(NumberUtil.parseDouble(item.get(19), null)); balanceSheet.setTotalCurrentLiabilities(NumberHelper.parseDouble(item.get(19)));
balanceSheet.setTotalNonCurrentLiabilities(NumberUtil.parseDouble(item.get(20), null)); balanceSheet.setTotalNonCurrentLiabilities(NumberHelper.parseDouble(item.get(20)));
balanceSheet.setTotalLiabilities(NumberUtil.parseDouble(item.get(21), null)); balanceSheet.setTotalLiabilities(NumberHelper.parseDouble(item.get(21)));
balanceSheet.setTotalShareholdersEquityExcludingMinorityInterest(NumberUtil.parseDouble(item.get(22), null)); balanceSheet.setTotalShareholdersEquityExcludingMinorityInterest(NumberHelper.parseDouble(item.get(22)));
balanceSheet.setTotalShareholdersEquityIncludingMinorityInterest(NumberUtil.parseDouble(item.get(23), null)); balanceSheet.setTotalShareholdersEquityIncludingMinorityInterest(NumberHelper.parseDouble(item.get(23)));
balanceSheet.setTotalLiabilitiesAndShareholdersEquity(NumberUtil.parseDouble(item.get(24), null)); balanceSheet.setTotalLiabilitiesAndShareholdersEquity(NumberHelper.parseDouble(item.get(24)));
balanceSheet.setAccountsReceivable(NumberUtil.parseDouble(item.get(25), null)); balanceSheet.setAccountsReceivable(NumberHelper.parseDouble(item.get(25)));
balanceSheet.setPayables(NumberUtil.parseDouble(item.get(26), null)); balanceSheet.setPayables(NumberHelper.parseDouble(item.get(26)));
balanceSheet.setNotesAndAccountsReceivable(NumberUtil.parseDouble(item.get(27), null)); balanceSheet.setNotesAndAccountsReceivable(NumberHelper.parseDouble(item.get(27)));
balanceSheet.setNotesAndAccountsPayable(NumberUtil.parseDouble(item.get(28), null)); balanceSheet.setNotesAndAccountsPayable(NumberHelper.parseDouble(item.get(28)));
balanceSheet.setOtherReceivablesTotal(NumberUtil.parseDouble(item.get(29), null)); balanceSheet.setOtherReceivablesTotal(NumberHelper.parseDouble(item.get(29)));
balanceSheet.setFixedAssetsTotal(NumberUtil.parseDouble(item.get(30), null)); balanceSheet.setFixedAssetsTotal(NumberHelper.parseDouble(item.get(30)));
balanceSheetRepository.save(balanceSheet); balanceSheetRepository.save(balanceSheet);
} }
@@ -150,21 +150,21 @@ public class UpdateFinanceNode extends TaskNodeComponent {
QCashFlow.cashFlow.year.eq(year) QCashFlow.cashFlow.year.eq(year)
.and(QCashFlow.cashFlow.stock.code.eq(stock.getCode())) .and(QCashFlow.cashFlow.stock.code.eq(stock.getCode()))
).orElse(new CashFlow()); ).orElse(new CashFlow());
NumberUtil.parseDouble(item.get(1), null); NumberHelper.parseDouble(item.get(1));
cashFlow.setStock(stock); cashFlow.setStock(stock);
cashFlow.setYear(year); cashFlow.setYear(year);
cashFlow.setNetProfit(NumberUtil.parseDouble(item.get(1), null)); cashFlow.setNetProfit(NumberHelper.parseDouble(item.get(1)));
cashFlow.setFinancialExpense(NumberUtil.parseDouble(item.get(2), null)); cashFlow.setFinancialExpense(NumberHelper.parseDouble(item.get(2)));
cashFlow.setCashReceivedFromSalesAndServices(NumberUtil.parseDouble(item.get(3), null)); cashFlow.setCashReceivedFromSalesAndServices(NumberHelper.parseDouble(item.get(3)));
cashFlow.setSubtotalOfCashInflowsFromOperatingActivities(NumberUtil.parseDouble(item.get(4), null)); cashFlow.setSubtotalOfCashInflowsFromOperatingActivities(NumberHelper.parseDouble(item.get(4)));
cashFlow.setCashPaidToAndForEmployees(NumberUtil.parseDouble(item.get(5), null)); cashFlow.setCashPaidToAndForEmployees(NumberHelper.parseDouble(item.get(5)));
cashFlow.setCashPaidForVariousTaxes(NumberUtil.parseDouble(item.get(6), null)); cashFlow.setCashPaidForVariousTaxes(NumberHelper.parseDouble(item.get(6)));
cashFlow.setNetCashFlowFromOperatingActivities(NumberUtil.parseDouble(item.get(7), null)); cashFlow.setNetCashFlowFromOperatingActivities(NumberHelper.parseDouble(item.get(7)));
cashFlow.setSubtotalOfCashInflowsFromInvestingActivities(NumberUtil.parseDouble(item.get(8), null)); cashFlow.setSubtotalOfCashInflowsFromInvestingActivities(NumberHelper.parseDouble(item.get(8)));
cashFlow.setCashPaidForLongTermAssets(NumberUtil.parseDouble(item.get(9), null)); cashFlow.setCashPaidForLongTermAssets(NumberHelper.parseDouble(item.get(9)));
cashFlow.setSubtotalOfCashOutflowsFromInvestingActivities(NumberUtil.parseDouble(item.get(10), null)); cashFlow.setSubtotalOfCashOutflowsFromInvestingActivities(NumberHelper.parseDouble(item.get(10)));
cashFlow.setSubtotalOfCashOutflowsFromFinancingActivities(NumberUtil.parseDouble(item.get(11), null)); cashFlow.setSubtotalOfCashOutflowsFromFinancingActivities(NumberHelper.parseDouble(item.get(11)));
cashFlow.setBeginningBalanceOfCashAndCashEquivalents(NumberUtil.parseDouble(item.get(12), null)); cashFlow.setBeginningBalanceOfCashAndCashEquivalents(NumberHelper.parseDouble(item.get(12)));
cashFlowRepository.save(cashFlow); cashFlowRepository.save(cashFlow);
} }