From 4f96b0a784646e729f77ff4dfafca294180bb6f5 Mon Sep 17 00:00:00 2001 From: sparkmemory Date: Mon, 10 Mar 2025 14:59:52 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat(fund):=E5=A2=9E=E5=8A=A0=E5=9F=BA?= =?UTF-8?q?=E9=87=91=E4=BC=B0=E7=AE=97=E5=87=80=E5=80=BC=E6=B6=A8=E8=B7=8C?= =?UTF-8?q?=E5=B9=85=E5=B9=B6=E4=BC=98=E5=8C=96=E5=87=80=E5=80=BC=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在基金数据结构中添加 NetEstimatedRate 字段,用于表示估算净值涨跌幅 - 在获取关注基金列表时,计算并填充 NetEstimatedRate 值- 前端组件中增加估算净值涨跌幅的显示 - 优化单位净值和估算净值的显示格式 --- backend/data/fund_data_api.go | 25 +++++++++++++++++++------ frontend/src/components/fund.vue | 8 ++++++-- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/backend/data/fund_data_api.go b/backend/data/fund_data_api.go index db1f1d5..84006b6 100644 --- a/backend/data/fund_data_api.go +++ b/backend/data/fund_data_api.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "github.com/duke-git/lancet/v2/convertor" + "github.com/duke-git/lancet/v2/mathutil" "github.com/duke-git/lancet/v2/strutil" "github.com/go-resty/resty/v2" "go-stock/backend/db" @@ -34,12 +35,16 @@ type FollowedFund struct { Code string `json:"code" gorm:"index"` // 基金代码 Name string `json:"name"` // 基金简称 - NetUnitValue *float64 `json:"netUnitValue"` // 单位净值 - NetUnitValueDate string `json:"netUnitValueDate"` // 单位净值日期 - NetEstimatedUnit *float64 `json:"netEstimatedUnit"` // 估算单位净值 - NetEstimatedTime string `json:"netEstimatedUnitTime"` // 估算单位净值日期 - NetAccumulated *float64 `json:"netAccumulated"` // 累计净值 - FundBasic FundBasic `json:"fundBasic" gorm:"foreignKey:Code;references:Code"` + NetUnitValue *float64 `json:"netUnitValue"` // 单位净值 + NetUnitValueDate string `json:"netUnitValueDate"` // 单位净值日期 + NetEstimatedUnit *float64 `json:"netEstimatedUnit"` // 估算单位净值 + NetEstimatedTime string `json:"netEstimatedUnitTime"` // 估算单位净值日期 + NetAccumulated *float64 `json:"netAccumulated"` // 累计净值 + + //计算值 + NetEstimatedRate *float64 `json:"netEstimatedRate"` // 估算单位净值涨跌幅 + + FundBasic FundBasic `json:"fundBasic" gorm:"foreignKey:Code;references:Code"` } func (FollowedFund) TableName() string { @@ -226,6 +231,14 @@ func (f *FundApi) GetFundList(key string) []FundBasic { func (f *FundApi) GetFollowedFund() []FollowedFund { var funds []FollowedFund db.Dao.Preload("FundBasic").Find(&funds) + for i, fund := range funds { + if fund.NetUnitValue != nil && fund.NetEstimatedUnit != nil && *fund.NetUnitValue > 0 { + netEstimatedRate := (*(funds[i].NetEstimatedUnit) - *(funds[i].NetUnitValue)) / *(fund.NetUnitValue) * 100 + netEstimatedRate = mathutil.RoundToFloat(netEstimatedRate, 2) + funds[i].NetEstimatedRate = &netEstimatedRate + } + + } return funds } func (f *FundApi) FollowFund(fundCode string) string { diff --git a/frontend/src/components/fund.vue b/frontend/src/components/fund.vue index bb372ad..0c9359e 100644 --- a/frontend/src/components/fund.vue +++ b/frontend/src/components/fund.vue @@ -154,9 +154,13 @@ function formatterTitle(title){ {{info.code}}  取消关注 - 估算净值:{{info.netEstimatedUnit}}({{info.netEstimatedUnitTime}}) + + 估算净值:{{info.netEstimatedUnit}}  + {{info.netEstimatedRate}} %    + ({{info.netEstimatedUnitTime}}) - 单位净值:{{info.netUnitValue}}({{info.netUnitValueDate}}) + + 单位净值:{{info.netUnitValue}} ({{info.netUnitValueDate}}) 近一月:{{info.fundBasic.netGrowth1}}% From 7d580825251c172033f4d8abf790a787e7e4aab9 Mon Sep 17 00:00:00 2001 From: sparkmemory Date: Mon, 10 Mar 2025 15:58:52 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat(frontend):=E6=9B=B4=E6=96=B0=E5=85=B3?= =?UTF-8?q?=E4=BA=8E=E9=A1=B5=E9=9D=A2=E5=B9=B6=E5=A2=9E=E5=8A=A0=E7=A4=BE?= =?UTF-8?q?=E5=8C=BA=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 about.vue 中添加了项目社区和 QQ交流群的链接 - 调整了投资风险警示的文案,使其更加醒目 --- app.go | 5 +++-- frontend/src/components/about.vue | 14 ++++++-------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/app.go b/app.go index 7cd70de..02883dd 100644 --- a/app.go +++ b/app.go @@ -737,7 +737,7 @@ func getScreenResolution() (int, int, error) { func (a *App) ShareAnalysis(stockCode, stockName string) string { //http://go-stock.sparkmemory.top:16688/upload res := data.NewDeepSeekOpenAi(a.ctx).GetAIResponseResult(stockCode) - if res != nil { + if res != nil && len(res.Content) > 100 { analysisTime := res.CreatedAt.Format("2006/01/02") logger.SugaredLogger.Infof("%s analysisTime:%s", res.CreatedAt, analysisTime) response, err := resty.New().SetHeader("ua-x", "go-stock").R().SetFormData(map[string]string{ @@ -750,8 +750,9 @@ func (a *App) ShareAnalysis(stockCode, stockName string) string { return err.Error() } return response.String() + } else { + return "分析结果异常" } - return "获取分析结果失败" } func (a *App) GetfundList(key string) []data.FundBasic { diff --git a/frontend/src/components/about.vue b/frontend/src/components/about.vue index 920689f..efff180 100644 --- a/frontend/src/components/about.vue +++ b/frontend/src/components/about.vue @@ -98,7 +98,7 @@ EventsOn("updateVersion",async (msg) => {

目前已支持A股,港股,美股,未来计划加入基金,ETF等支持

支持DeepSeek,OpenAI, Ollama,LMStudio,AnythingLLM,硅基流动火山方舟,阿里云百炼等平台或模型

- 本软件仅供学习研究,AI分析股票结果仅供参考,不提供任何投资建议或决策。 + 本软件仅供学习研究目的,AI分析结果仅供参考,本软件不提供任何投资建议或决策,风险自担!

欢迎点赞GitHub:go-stock @@ -107,7 +107,8 @@ EventsOn("updateVersion",async (msg) => { Releases

更新说明:{{updateLog}}

- +

项目社区:https://go-stock.sparkmemory.top/

+

QQ交流群:491605333

关于作者 @@ -116,11 +117,6 @@ EventsOn("updateVersion",async (msg) => {

@ArvinLovegood

一个热爱编程的小白,欢迎关注我的Github

-

- 邮箱:sparkmemory@163.com - QQ: 506808970 - 微信:ArvinLovegood

-

*加微信或者QQ时,请先备注或留言需求(如:技术支持,功能建议,商业咨询等,否则会被忽略)

开源不易,如果觉得好用,可以请作者喝杯咖啡。

@@ -149,6 +145,7 @@ EventsOn("updateVersion",async (msg) => { 关于版权和技术支持申明
+

如有问题,请先查看项目文档,如果问题依然存在,请优先加群(491605333)咨询。

如需软件商业授权或定制开发,请联系作者微信(备注 商业咨询):ArvinLovegood

@@ -157,8 +154,9 @@ EventsOn("updateVersion",async (msg) => { 本软件基于开源技术构建,使用Wails、NaiveUI、Vue等开源项目。技术上如有问题,可以先向对应的开源社区请求帮助。

- 开源不易,本人精力和时间有限,如确实需要一对一技术支持,请先赞助。联系微信(备注 技术支持):ArvinLovegood + 开源不易,本人精力和时间有限,如确实需要一对一技术支持,请先赞助!联系微信(备注 技术支持):ArvinLovegood

+

*加微信或者QQ时,请先备注或留言需求(如:技术支持,功能建议,商业咨询等,否则会被忽略)

From ba862ff5864b55dd5c56283ead08c23faacf0e1a Mon Sep 17 00:00:00 2001 From: sparkmemory Date: Mon, 10 Mar 2025 16:38:25 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat(stock=5Fdata):=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=8C=97=E4=BA=A4=E6=89=80=E8=82=A1=E7=A5=A8=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在股票数据解析条件中增加了北交所 (bj) --- backend/data/stock_data_api.go | 2 +- backend/data/stock_data_api_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/data/stock_data_api.go b/backend/data/stock_data_api.go index 880be60..83038de 100644 --- a/backend/data/stock_data_api.go +++ b/backend/data/stock_data_api.go @@ -478,7 +478,7 @@ func ParseFullSingleStockData(data string) (*StockInfo, error) { } var result map[string]string var err error - if strutil.ContainsAny(datas[0], []string{"hq_str_sz", "hq_str_sh"}) { + if strutil.ContainsAny(datas[0], []string{"hq_str_sz", "hq_str_sh", "hq_str_bj", "hq_str_sb"}) { result, err = ParseSHSZStockData(datas) } if strutil.ContainsAny(datas[0], []string{"hq_str_hk"}) { diff --git a/backend/data/stock_data_api_test.go b/backend/data/stock_data_api_test.go index 2c9f599..a0e2f97 100644 --- a/backend/data/stock_data_api_test.go +++ b/backend/data/stock_data_api_test.go @@ -85,7 +85,7 @@ func TestParseFullSingleStockData(t *testing.T) { SetHeader("Host", "hq.sinajs.cn"). SetHeader("Referer", "https://finance.sina.com.cn/"). SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"). - Get(fmt.Sprintf(sinaStockUrl, time.Now().Unix(), "sh600584,sz000938,hk01810,hk00856,gb_aapl,gb_tsla")) + Get(fmt.Sprintf(sinaStockUrl, time.Now().Unix(), "sh600584,sz000938,hk01810,hk00856,gb_aapl,gb_tsla,sb873721,bj430300")) if err != nil { logger.SugaredLogger.Error(err.Error()) }