From 54438611dfef0a576a427307bb4568ec89dbf103 Mon Sep 17 00:00:00 2001 From: Lxy Date: Thu, 12 Mar 2026 00:24:51 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B8=89=E4=B8=AA=E6=A0=B8=E5=BF=83?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E7=9A=84=E6=8E=A5=E5=8F=A3=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/stock_service.cpython-311.pyc | Bin 13378 -> 17392 bytes app/services/stock_service.py | 96 +++++++++++++++++- todo_20260311.md | 10 ++ .../h11/__pycache__/__init__.cpython-311.pyc | Bin 1343 -> 1326 bytes .../h11/__pycache__/_abnf.cpython-311.pyc | Bin 1848 -> 1831 bytes .../__pycache__/_connection.cpython-311.pyc | Bin 24977 -> 24960 bytes .../h11/__pycache__/_events.cpython-311.pyc | Bin 15138 -> 15121 bytes .../h11/__pycache__/_headers.cpython-311.pyc | Bin 9299 -> 9282 bytes .../h11/__pycache__/_readers.cpython-311.pyc | Bin 11087 -> 11070 bytes .../_receivebuffer.cpython-311.pyc | Bin 5175 -> 5158 bytes .../h11/__pycache__/_state.cpython-311.pyc | Bin 9717 -> 9700 bytes .../h11/__pycache__/_util.cpython-311.pyc | Bin 5396 -> 5379 bytes .../h11/__pycache__/_version.cpython-311.pyc | Bin 233 -> 216 bytes .../h11/__pycache__/_writers.cpython-311.pyc | Bin 7333 -> 7316 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 3954 -> 3937 bytes .../httpcore/__pycache__/_api.cpython-311.pyc | Bin 4117 -> 4100 bytes .../__pycache__/_exceptions.cpython-311.pyc | Bin 3833 -> 3816 bytes .../__pycache__/_models.cpython-311.pyc | Bin 24567 -> 24550 bytes .../httpcore/__pycache__/_ssl.cpython-311.pyc | Bin 661 -> 644 bytes .../_synchronization.cpython-311.pyc | Bin 15851 -> 15834 bytes .../__pycache__/_trace.cpython-311.pyc | Bin 5921 -> 5904 bytes .../__pycache__/_utils.cpython-311.pyc | Bin 1443 -> 1426 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 1947 -> 1930 bytes .../__pycache__/connection.cpython-311.pyc | Bin 12342 -> 12325 bytes .../connection_pool.cpython-311.pyc | Bin 21643 -> 21626 bytes .../_async/__pycache__/http11.cpython-311.pyc | Bin 21523 -> 21506 bytes .../_async/__pycache__/http2.cpython-311.pyc | Bin 32815 -> 32798 bytes .../__pycache__/http_proxy.cpython-311.pyc | Bin 18774 -> 18757 bytes .../__pycache__/interfaces.cpython-311.pyc | Bin 6345 -> 6328 bytes .../__pycache__/socks_proxy.cpython-311.pyc | Bin 17328 -> 17311 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 225 -> 208 bytes .../__pycache__/anyio.cpython-311.pyc | Bin 9595 -> 9578 bytes .../__pycache__/auto.cpython-311.pyc | Bin 2903 -> 2886 bytes .../__pycache__/base.cpython-311.pyc | Bin 5341 -> 5324 bytes .../__pycache__/mock.cpython-311.pyc | Bin 8050 -> 8033 bytes .../__pycache__/sync.cpython-311.pyc | Bin 12743 -> 12726 bytes .../__pycache__/trio.cpython-311.pyc | Bin 10115 -> 10098 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 1901 -> 1884 bytes .../__pycache__/connection.cpython-311.pyc | Bin 11143 -> 11126 bytes .../connection_pool.cpython-311.pyc | Bin 20951 -> 20934 bytes .../_sync/__pycache__/http11.cpython-311.pyc | Bin 19459 -> 19442 bytes .../_sync/__pycache__/http2.cpython-311.pyc | Bin 29492 -> 29475 bytes .../__pycache__/http_proxy.cpython-311.pyc | Bin 18068 -> 18051 bytes .../__pycache__/interfaces.cpython-311.pyc | Bin 6003 -> 5986 bytes .../__pycache__/socks_proxy.cpython-311.pyc | Bin 16305 -> 16288 bytes 45 files changed, 102 insertions(+), 4 deletions(-) create mode 100644 todo_20260311.md diff --git a/app/services/__pycache__/stock_service.cpython-311.pyc b/app/services/__pycache__/stock_service.cpython-311.pyc index 2ce52d32b2bc7366fd5d276529512a49031c4b7b..63524a8626f7a966fe10a584da07b6f4de8f2b28 100644 GIT binary patch delta 4937 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 KkDf3qN&6oRaO(*G delta 1863 zcmaKsTTGlq6o6;`y)Wzq7Fd>r-Gv30;g*HMwraU7utfp|6*NLGw1sWCgYz#J$#RiY zi^gipqy-fteZeOBK=W(jLt|_cG`=V{B(9s7sPRP;o2{)cjStTGxwxURlRw{_Idf*t zKQrf?*advM*Z7gaphvuIy>p}QYtIei2|>7v*pTq2%GicTy7azcN{Odfnzl)p%3uQy zJDbr46Fhtc%?A*6S9``-3}OjK6bEUcbW-;RHp@196Et6XDPdHFJ<>PklNi^q{N$F5 z!?3IpPz9(4_yM)-QnJ-k!NsU9Fxed(4fTx-69dhH$^9F%ZW8LXjaiR1ueHdd8>&vhgfjim(NaG;tIB)V% zWf#i6P;iKQSo1)bm!l^opnj`MQqnM{R%b6K;a z)c{6BOQ*qhhFy2`ri33|F)QUdQ?MSM3XXCAS9ZB9N9u81!^s$(L(`hDvL2nNn%0Ij zt44NOV_|bS>N;(|i5tr;tnN4O$=d#;I5{~^w(QEEsMk~oeXL@)a%}GE5ZTou)T0T( zFYmOlW({*Y%*NGDkERW|QK)El4xwB`9n-o{!hf0`U0BEbX1h&4t((!cp&q%Pz!PXv z(Sar~Nnocctn6*KA@xbViarH+8X#~Gfvvk!1fpUQce#c(an)2R^XH~AZ*IY?m8OE> zQ9uhvR6)mv>GLpz7p1L$X93S~L=9(yq3+%;@s*)7BZDHX0iB-5O3BbjPmn9lgXL?0 z7XYurysE9ewXTUSfZ`3nn*b}ILJl1O(Qn5Xx>mxm1hp&q9^!Za;8K!>OG$i_UHolE zhNR7;>JRExHSe+l&#A&Z{;%`?0|7O<<*PICZbPjPlqfdLmH<&~xG~5?#YyMcmxpZ9 zeUBaE5Hpd3>Wh3SU1ZH9Gkag!?c@(!3S9*FSd!DqR!KJgUAj$v6UhGj2P25jb|TOM z7|0o=pdR*J(Sc6c`UVH?{TD#Z5>SyHHizFP~(Yk0~TO<(Z8rq&h7Hv;oQhP!?!8KnH+eq_coI zz^eerWts?h4*&&*LS>;VfM!-%ohkf?rDN4cusvUucD+4@c()(z>}Ji820<0Tn|X&~ zNERxOZVQj6d@O3?&WMAqg3lIq#qY%z*;oD#-Eh0x7H~liwTF2wj|~Q^=o%mLdqZNs av`|ZMV~r9Aa18x_cW-;{!DCEhNB;st)sVgb diff --git a/app/services/stock_service.py b/app/services/stock_service.py index 3db2885..2e162ed 100644 --- a/app/services/stock_service.py +++ b/app/services/stock_service.py @@ -212,15 +212,22 @@ class StockService: loop.close() # 转换为Symbol模型 - from app.models import Symbol, SymbolType + from app.models import Symbol, SymbolType, Exchange symbols = [] for s in symbols_info: + # 将字符串 exchange 转换为 Exchange 枚举 + try: + exchange_enum = Exchange(s.exchange) + except ValueError: + exchange_enum = Exchange.SH # 默认上海 + symbols.append(Symbol( symbol_id=s.symbol_id, symbol_type=SymbolType.STOCK, - exchange=s.exchange, + exchange=exchange_enum, name=s.name, - underlying=s.underlying + underlying=s.underlying, + status="active" # 添加必需的 status 字段 )) info(f"Fetched {len(symbols)} symbols from adapter") @@ -271,4 +278,85 @@ class StockService: def get_trading_dates(self, req: TradingDatesRequest) -> TradingDatesData: """获取交易日历""" - return self.repository.get_trading_dates(req.start, req.end) + # 从数据库获取 + data = self.repository.get_trading_dates(req.start, req.end) + + # 如果数据库没有数据,从适配器获取 + if not data.trading_dates: + info(f"No trading dates in DB for {req.start}~{req.end}, fetching from adapter...") + adapter_dates = self._fetch_trading_dates_from_adapter(req.start, req.end) + if adapter_dates: + # 保存到数据库 + self._save_trading_dates_to_db(adapter_dates) + # 重新查询 + data = self.repository.get_trading_dates(req.start, req.end) + + return data + + def _fetch_trading_dates_from_adapter(self, start: str, end: str) -> List[str]: + """从适配器获取交易日历""" + try: + adapter_service = AdapterService() + + # 确保适配器已连接 + adapter = adapter_service.get_active_adapter("stock") + if not adapter: + asyncio.run(adapter_service._connect_adapter("amazingdata")) + adapter = adapter_service.get_active_adapter("stock") + + if not adapter: + error("No active adapter available") + return [] + + # 异步获取数据 + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + calendar_data = loop.run_until_complete( + adapter.fetch_trading_calendar("SH", start, end) + ) + loop.close() + + # 提取交易日日期 + dates = [] + for cal in calendar_data: + if cal.is_trading_day: + # 转换为 YYYYMMDD 格式 + date_str = cal.date.strftime("%Y%m%d") + dates.append(date_str) + + info(f"Fetched {len(dates)} trading dates from adapter") + return dates + + except Exception as e: + error(f"Failed to fetch trading dates from adapter: {e}") + return [] + + def _save_trading_dates_to_db(self, dates: List[str]) -> None: + """保存交易日历到数据库""" + try: + from app.repositories.models import StockTradingCalendar + from datetime import datetime as dt + + for date_str in dates: + # 检查是否已存在 + existing = self.db.query(StockTradingCalendar).filter( + StockTradingCalendar.trade_date == date_str + ).first() + + if not existing: + # 解析日期获取星期几 + date_obj = dt.strptime(date_str, "%Y%m%d") + week_day = date_obj.weekday() + 1 # 1=周一, 7=周日 + + new_record = StockTradingCalendar( + trade_date=date_str, + is_trading_day=True, + week_day=week_day + ) + self.db.add(new_record) + + self.db.commit() + info(f"Saved {len(dates)} trading dates to DB") + except Exception as e: + error(f"Failed to save trading dates to DB: {e}") + self.db.rollback() diff --git a/todo_20260311.md b/todo_20260311.md new file mode 100644 index 0000000..bd0a87a --- /dev/null +++ b/todo_20260311.md @@ -0,0 +1,10 @@ +# 待完成TODO + +1. 总股本、机构持股未能获取 + +# 已完成DONE + +1. 获取股票列表接口 stock/symbols -- 第一次请求慢,会超时 +2. 获取k线 stock/klines/{symbol} -- 缺少股本等信息 +3. 获取交易日历 stock/trading-dates + diff --git a/venv/Lib/site-packages/h11/__pycache__/__init__.cpython-311.pyc b/venv/Lib/site-packages/h11/__pycache__/__init__.cpython-311.pyc index e597744dd542e08af7ac376db5903bedc914f5ff..ce9a6e4d81aa1b0cf7468397ec545bd94e79479e 100644 GIT binary patch delta 41 vcmdnbwT_E(IWI340}!Ze;M1& diff --git a/venv/Lib/site-packages/h11/__pycache__/_abnf.cpython-311.pyc b/venv/Lib/site-packages/h11/__pycache__/_abnf.cpython-311.pyc index 57c140b03f595251778764e8a4d02263557dfa47..c4de30f3e0dbf09659b7195c6cfb6d677004bc1b 100644 GIT binary patch delta 41 vcmdnNx15i2IWI340}!ZeEYXATM diff --git a/venv/Lib/site-packages/h11/__pycache__/_connection.cpython-311.pyc b/venv/Lib/site-packages/h11/__pycache__/_connection.cpython-311.pyc index 43ebd12039833e4fe45ceb7ef04a439b83f26ecf..e3294bd666f69d570f3aae80bc0372d800ec7fc6 100644 GIT binary patch delta 43 xcmbPun6cq7Bj<8nUM>b8P}#`o!y*{&Vil8^Q;?AuU!Gr-U0jg3xtv8R761qu4DSE{ delta 60 zcmZoT%sBBdBj<8nUM>b8P~FJs!=jYoVil8C9ABPalwDkqn4B7un^=^cTB4hhSdyq) OoLW?txjBtRDi#1KtrM95 diff --git a/venv/Lib/site-packages/h11/__pycache__/_events.cpython-311.pyc b/venv/Lib/site-packages/h11/__pycache__/_events.cpython-311.pyc index c341d6eb06091c262269c33b1ef867042401c7ea..c8c03d98432f847fe43d8dcdf58305f38d1378cf 100644 GIT binary patch delta 41 vcmZ2fHnEIzIWI340}!Ze~ delta 58 zcmX@)aoK}&IWI340}!Zgfwl9oxIWI340}!Ze`rr*X delta 58 zcmdlNc0P=AIWI340}!Zg;s5{u diff --git a/venv/Lib/site-packages/h11/__pycache__/_receivebuffer.cpython-311.pyc b/venv/Lib/site-packages/h11/__pycache__/_receivebuffer.cpython-311.pyc index 677698839767d4105d406e75f206e9bd92076b3c..8992d9bb7372b22c3246cf367eb096713bf529ab 100644 GIT binary patch delta 41 vcmdn4u}p(=IWI340}!ZeGxNz5t8NQ^JfFUl@1NZh=dsYeh1=KTzi delta 58 zcmZ3cv0a06IWI340}!ZgXHt0Q`CrIsgCw diff --git a/venv/Lib/site-packages/h11/__pycache__/_state.cpython-311.pyc b/venv/Lib/site-packages/h11/__pycache__/_state.cpython-311.pyc index 9be8328cef085cb22f87f99eb1dc56021ba74d5a..9efceac21fa8ffc18f79e2b8e3728948324bef0b 100644 GIT binary patch delta 41 vcmezB{luGdIWI340}!Zez%xIWI340}!ZAPEFUl@1NK8(R$xSTEPA$<*Ni0d!Elw>e J%bb{A2mr{s5^?|l diff --git a/venv/Lib/site-packages/h11/__pycache__/_writers.cpython-311.pyc b/venv/Lib/site-packages/h11/__pycache__/_writers.cpython-311.pyc index bff9d7a45942e242a6cd7922a8c2b6e511d735b6..f1bb7ff6028fbe22c50d848d0bfcfed5a731c019 100644 GIT binary patch delta 41 vcmZ2#ImME5IWI340}!Ze>5L5* delta 58 zcmbPYxzv(#IWI340}!Zg=IWI340}yC!s$-Z delta 58 zcmaDT_eqX(IWI340}yC$n+a diff --git a/venv/Lib/site-packages/httpcore/__pycache__/_api.cpython-311.pyc b/venv/Lib/site-packages/httpcore/__pycache__/_api.cpython-311.pyc index 46361bc3918fa356ca312557a99f52749705390c..6f02d831828ed0a32bbc17134c1ad47a61b47f8b 100644 GIT binary patch delta 41 vcmbQL(4xS(oR^o20SL4K3OK Mm1S;DVN_rQ0Mm&P#{d8T diff --git a/venv/Lib/site-packages/httpcore/__pycache__/_synchronization.cpython-311.pyc b/venv/Lib/site-packages/httpcore/__pycache__/_synchronization.cpython-311.pyc index 6346997c57b8daf878837da5d2dc2a20b0a018c0..c32bafa9a337a0f8d219f57d8659a14ea8443750 100644 GIT binary patch delta 41 vcmaD|eXE*tIWI340}yC!;MN05Z@N3jhEB diff --git a/venv/Lib/site-packages/httpcore/__pycache__/_trace.cpython-311.pyc b/venv/Lib/site-packages/httpcore/__pycache__/_trace.cpython-311.pyc index 3a59abcd878d250952a06f6af40f2b4792394570..d30145e860601e70e358a6c0a7b25e1000acade9 100644 GIT binary patch delta 41 vcmZ3eH$jhcIWI340}yC!b8(AvnE$1IrcVil8^Q;?AuU!Gr-U0jg3c_#Cx000>=4p9IA delta 60 zcmeyhg0XugBj<8nUM>b8(B8b8(AvnE$SfG=Vil8^Q;?AuU!Gr-U0jg3xrezu000Dv4N?FA delta 60 zcmZo#!8myZBj<8nUM>b8(B8*?z$_T+Vil8^Q;?AuU!Gr-U0jg3`8Bgk4FC(64dMU* delta 60 zcmbQ&z_h-BiE}wGFBbz4Xm8{^z^s(#Vil8C9ABPalwDkqn4B7un^=^cTB4hhSdyq) OoLW?tx%n2eOAP=p(iDsU diff --git a/venv/Lib/site-packages/httpcore/_async/__pycache__/http_proxy.cpython-311.pyc b/venv/Lib/site-packages/httpcore/_async/__pycache__/http_proxy.cpython-311.pyc index dac8689d7e6660f81ab103c110951e283a13f572..38dbe2445cd810ae3ce7a85e1695f0c79022f150 100644 GIT binary patch delta 43 xcmcaMiSg(pM$YBDyj%=GptX_Hg;g-g#VRH-rywISzC6DuySN~6b3W^HX8;jJ4b1=m delta 60 zcmX>)iSgPbM$YBDyj%=GpuLgPg;lB8#VRJPIKDi;D7&~IF*!9RH?b%?wL~{1u_RHq OIJKxOb8{T)b7ufHDin7B diff --git a/venv/Lib/site-packages/httpcore/_async/__pycache__/interfaces.cpython-311.pyc b/venv/Lib/site-packages/httpcore/_async/__pycache__/interfaces.cpython-311.pyc index 536cd2b5a30a15846bac3ea5623850c9d2e1ae55..72e7ce6cf840189e27b69dafd1bd9e4632d7257d 100644 GIT binary patch delta 41 vcmX?UxWkZhIWI340}yC!-RP16ElU5vGo?nz*T#%TY8k3t?l$~0lo03?Ps9T&` MRF=7!k9CzW030+EivR!s diff --git a/venv/Lib/site-packages/httpcore/_async/__pycache__/socks_proxy.cpython-311.pyc b/venv/Lib/site-packages/httpcore/_async/__pycache__/socks_proxy.cpython-311.pyc index f014396d8674e82c8e7236022aa2b320a124723b..ba56a2c882d0023be4fbdc5c480e42780b251124 100644 GIT binary patch delta 43 xcmdnc&N#oFk#jjOFBbz4Xl>+l;1f)Cv5HB|Dac5SFV8Q^E-pyioXzKI3IG7R48{Ne delta 60 zcmbQ=&bXnSk#jjOFBbz4Xm8|n;8QAbv5HA6jxWzI$}TQQOiqo-O)SbzEzwO$EJ@TY OPAw|S+#JQ{Y6<`!gcEQ8 diff --git a/venv/Lib/site-packages/httpcore/_backends/__pycache__/__init__.cpython-311.pyc b/venv/Lib/site-packages/httpcore/_backends/__pycache__/__init__.cpython-311.pyc index 3012ca2a197616fb447cbfc2de55f4b7ef84a86e..40d34681caa4ca7d6fd45c76745e75036904029e 100644 GIT binary patch delta 38 scmaFJc!7~~IWI340}yCU_>hrvIWI340}yCWPEFUl@1NK8(R$xSTEPA$<*Ni0d!Elw>e J%bXZk4*4Xvh2}KRX delta 58 zcmaFm_1lYcIWI340}yC$mc3q5fIWI340}yC$nm*l1?>(K delta 58 zcmdm%d_0+RIWI340}yC$B<2)kB*vHL7iAY0ByL{GbV~&Q_k;~y delta 58 zcmez5*X+-^oR^o20SL4=a@H{^6}VW%q!q`P=NDxc7bGU9#^fdzWv7K3OK Mm1S<8!E{Rn02N#m2LJ#7 diff --git a/venv/Lib/site-packages/httpcore/_sync/__pycache__/__init__.cpython-311.pyc b/venv/Lib/site-packages/httpcore/_sync/__pycache__/__init__.cpython-311.pyc index ed6790623371e834e2ac1954b8561cd52bf6808c..dbaca7f3426f03c069fac6da896a2d757f3f1d05 100644 GIT binary patch delta 41 vcmaFMcZZL2IWI340}yC!Yo&W#< diff --git a/venv/Lib/site-packages/httpcore/_sync/__pycache__/connection.cpython-311.pyc b/venv/Lib/site-packages/httpcore/_sync/__pycache__/connection.cpython-311.pyc index 370fb92529e68feb2d24f5b4633a829f02c2ffb3..40876fcc9be65df7f33af9ceab739b422421cb7a 100644 GIT binary patch delta 41 vcmZn<{}#r%oR^o20SL4l7&f diff --git a/venv/Lib/site-packages/httpcore/_sync/__pycache__/http11.cpython-311.pyc b/venv/Lib/site-packages/httpcore/_sync/__pycache__/http11.cpython-311.pyc index 3e845d377b64afe6db656ca39f90e17a9d7c88be..7ea647a318225549c6a6d39f3f41ea47040f79a0 100644 GIT binary patch delta 43 xcmZpk!T4!9Bj<8nUM>b8(Avo9%Pbh{Vil8^Q;?AuU!Gr-U0jg3xq`Xd0{{!j4P*cS delta 60 zcmew~ow0caBj<8nUM>b8(B8=D%dC{=Vil8C9ABPalwDkqn4B7un^=^cTB4hhSdyq) OoLW?txjCJ=+XDbFf)ow_ diff --git a/venv/Lib/site-packages/httpcore/_sync/__pycache__/http2.cpython-311.pyc b/venv/Lib/site-packages/httpcore/_sync/__pycache__/http2.cpython-311.pyc index 8241a01ddcb521374b23363e5708113da3aabe23..a7f4d6eecb2a3c7781c15c71036f864875152db5 100644 GIT binary patch delta 43 xcmdn;jB)WZM$YBDyj%=GptX^6IkRAli&acwPC-Uue0hFRc5y-C=1a^;`2Z?%4wL`@ delta 60 zcmZ4djB(2|M$YBDyj%=GpuLfEIkQr(i&acoaeR4xQFd`bVsdIsZeme(YKd-2Vo9QI OacWUn=H`RUN%;U=1{FR4 diff --git a/venv/Lib/site-packages/httpcore/_sync/__pycache__/http_proxy.cpython-311.pyc b/venv/Lib/site-packages/httpcore/_sync/__pycache__/http_proxy.cpython-311.pyc index bd2334c999d35b183298ddc2b9bfa3dbaf5ca3c9..2b61ba8b125ad1d55740727a5dc614837c89cb70 100644 GIT binary patch delta 43 xcmbQz%h=q@$hn-Cmx}=iv^H|8u?i--Sj8mf6l5gEm**E{7Z)UM4rFz91OWAQ3|s&J delta 60 zcmZqfWt`H>$hn-Cmx}=iv^R39u__h0SjD6j$Cu|9WfvDDCa1>aCKhF=On6 diff --git a/venv/Lib/site-packages/httpcore/_sync/__pycache__/interfaces.cpython-311.pyc b/venv/Lib/site-packages/httpcore/_sync/__pycache__/interfaces.cpython-311.pyc index 8310ee04ad80c35a43e91ba4720590881c16208e..4e2653e155a6ddbb17ca9902f034299059ca7467 100644 GIT binary patch delta 41 vcmeyY_ehU(IWI340}yC!