feat(stock): 增加股价提醒功能并优化报警逻辑

- 在 SetAlarmChangePercent 函数中添加 alarmPrice 参数
- 在前端添加股价提醒输入框
- 修改报警逻辑,支持同时根据涨跌幅和股价进行提醒
- 更新数据库模型,添加 AlarmPrice 字段
This commit is contained in:
sparkmemory 2025-01-04 20:54:04 +08:00
parent 04446d7521
commit 1b3c043ce6
6 changed files with 29 additions and 14 deletions

4
app.go
View File

@ -107,8 +107,8 @@ func (a *App) SetCostPriceAndVolume(stockCode string, price float64, volume int6
return data.NewStockDataApi().SetCostPriceAndVolume(price, volume, stockCode)
}
func (a *App) SetAlarmChangePercent(val float64, stockCode string) string {
return data.NewStockDataApi().SetAlarmChangePercent(val, stockCode)
func (a *App) SetAlarmChangePercent(val, alarmPrice float64, stockCode string) string {
return data.NewStockDataApi().SetAlarmChangePercent(val, alarmPrice, stockCode)
}
func (a *App) SendDingDingMessage(message string, stockCode string) string {

View File

@ -135,6 +135,7 @@ type FollowedStock struct {
PriceChange float64
ChangePercent float64
AlarmChangePercent float64
AlarmPrice float64
Time time.Time
Sort int64
IsDel soft_delete.DeletedAt `gorm:"softDelete:flag"`
@ -310,8 +311,11 @@ func (receiver StockDataApi) SetCostPriceAndVolume(price float64, volume int64,
return "设置成功"
}
func (receiver StockDataApi) SetAlarmChangePercent(val float64, stockCode string) string {
err := db.Dao.Model(&FollowedStock{}).Where("stock_code = ?", stockCode).Update("alarm_change_percent", val).Error
func (receiver StockDataApi) SetAlarmChangePercent(val, alarmPrice float64, stockCode string) string {
err := db.Dao.Model(&FollowedStock{}).Where("stock_code = ?", stockCode).Updates(&map[string]any{
"alarm_change_percent": val,
"alarm_price": alarmPrice,
}).Error
if err != nil {
logger.SugaredLogger.Error(err.Error())
return "设置失败"

View File

@ -32,6 +32,7 @@ const formModel = ref({
costPrice: 0.000,
volume: 0,
alarm: 0,
alarmPrice:0,
})
const data = reactive({
@ -203,7 +204,7 @@ async function monitor() {
}else if(result.profitAmount<0){
result.profitType="success"
}
if(res[0].AlarmChangePercent>0&&Math.abs(roundedNum)>res[0].AlarmChangePercent){
if((res[0].AlarmChangePercent>0&&Math.abs(roundedNum)>res[0].AlarmChangePercent)||(res[0].AlarmPrice>0&&result["当前价格"]>res[0].AlarmPrice)){
SendMessage(result)
}
}
@ -236,6 +237,7 @@ function setStock(code,name){
formModel.value.volume=res[0].Volume
formModel.value.costPrice=res[0].CostPrice
formModel.value.alarm=res[0].AlarmChangePercent
formModel.value.alarmPrice=res[0].AlarmPrice
modalShow.value=true
}
@ -253,10 +255,9 @@ function showK(code,name){
}
function updateCostPriceAndVolumeNew(code,price,volume,alarm){
console.log(code,price,volume)
if(alarm){
SetAlarmChangePercent(alarm,code).then(result => {
function updateCostPriceAndVolumeNew(code,price,volume,alarm,formModel){
if(alarm||formModel.alarmPrice){
SetAlarmChangePercent(alarm,formModel.alarmPrice,code).then(result => {
//message.success(result)
})
}
@ -383,7 +384,7 @@ function SendMessage(result){
<n-form-item label="股票成本" path="costPrice">
<n-input-number v-model:value="formModel.costPrice" min="0" placeholder="请输入股票成本" >
<template #suffix>
¥
</template>
</n-input-number>
</n-form-item>
@ -401,9 +402,17 @@ function SendMessage(result){
</template>
</n-input-number>
</n-form-item>
<n-form-item label="股价提醒" path="alarmPrice">
<n-input-number v-model:value="formModel.alarmPrice" min="0" placeholder="请输入股价报警值(¥)" >
<template #suffix>
¥
</template>
</n-input-number>
</n-form-item>
</n-form>
<template #footer>
<n-button type="primary" @click="updateCostPriceAndVolumeNew(formModel.code,formModel.costPrice,formModel.volume,formModel.alarm)">保存</n-button>
<n-button type="primary" @click="updateCostPriceAndVolumeNew(formModel.code,formModel.costPrice,formModel.volume,formModel.alarm,formModel)">保存</n-button>
</template>
</n-modal>

View File

@ -12,7 +12,7 @@ export function Greet(arg1:string):Promise<data.StockInfo>;
export function SendDingDingMessage(arg1:string,arg2:string):Promise<string>;
export function SetAlarmChangePercent(arg1:number,arg2:string):Promise<string>;
export function SetAlarmChangePercent(arg1:number,arg2:number,arg3:string):Promise<string>;
export function SetCostPriceAndVolume(arg1:string,arg2:number,arg3:number):Promise<string>;

View File

@ -22,8 +22,8 @@ export function SendDingDingMessage(arg1, arg2) {
return window['go']['main']['App']['SendDingDingMessage'](arg1, arg2);
}
export function SetAlarmChangePercent(arg1, arg2) {
return window['go']['main']['App']['SetAlarmChangePercent'](arg1, arg2);
export function SetAlarmChangePercent(arg1, arg2, arg3) {
return window['go']['main']['App']['SetAlarmChangePercent'](arg1, arg2, arg3);
}
export function SetCostPriceAndVolume(arg1, arg2, arg3) {

View File

@ -9,6 +9,7 @@ export namespace data {
PriceChange: number;
ChangePercent: number;
AlarmChangePercent: number;
AlarmPrice: number;
// Go type: time
Time: any;
Sort: number;
@ -28,6 +29,7 @@ export namespace data {
this.PriceChange = source["PriceChange"];
this.ChangePercent = source["ChangePercent"];
this.AlarmChangePercent = source["AlarmChangePercent"];
this.AlarmPrice = source["AlarmPrice"];
this.Time = this.convertValues(source["Time"], null);
this.Sort = source["Sort"];
this.IsDel = source["IsDel"];