財小航个人图书收藏,记开发个人图书收藏清单

作者:计算机知识

前方的书屋起始化的前端音信已经周到,所以今后起初落到实处DB的Script部分。

第2是参照豆瓣的图书查询接口:

昨夜完毕了Web端新扩展图书新闻的效果,今后就差DB的求实实现了。


本文中颇具图书均可提供电子版,如有须要请私信联系。

本文仅为个人爱好阅读,近年整治珍藏,仅供参谋哦~

A 小说

B 传记

C 杂文

D 散文

新增Action:Shelf_Init.sql

因为自身把Book相关的新闻拆分的比较多,所以更新有一些小麻烦。


图片 1

归来内容如下:

率先,笔者要求创建贰个Book Type的马特er;

A0一 世界名著 奥地利共和国(Republik Österreich) 《三个不熟悉女生的通讯》 茨威格

svc.sql

图片 2图片 3

下一场,将图片路线保存到FileBank中,并赶回FileBankID;

A0贰 世界名著 法兰西共和国 《小王子》 安托万·德·圣埃克苏佩里

1 CREATE SCHEMA [svc]
2     AUTHORIZATION [dbo];
 1 {
 2     "rating": {
 3         "max": 10, 
 4         "numRaters": 361, 
 5         "average": "8.8", 
 6         "min": 0
 7     }, 
 8     "subtitle": "A Handbook of Agile Software Craftsmanship", 
 9     "author": [
10         "Robert C. Martin"
11     ], 
12     "pubdate": "2008-8-11", 
13     "tags": [
14         {
15             "count": 295, 
16             "name": "编程", 
17             "title": "编程"
18         }, 
19         {
20             "count": 257, 
21             "name": "programming", 
22             "title": "programming"
23         }, 
24         {
25             "count": 150, 
26             "name": "软件开发", 
27             "title": "软件开发"
28         }, 
29         {
30             "count": 109, 
31             "name": "程序设计", 
32             "title": "程序设计"
33         }, 
34         {
35             "count": 100, 
36             "name": "计算机", 
37             "title": "计算机"
38         }, 
39         {
40             "count": 87, 
41             "name": "软件工程", 
42             "title": "软件工程"
43         }, 
44         {
45             "count": 66, 
46             "name": "敏捷开发", 
47             "title": "敏捷开发"
48         }, 
49         {
50             "count": 55, 
51             "name": "agile", 
52             "title": "agile"
53         }
54     ], 
55     "origin_title": "", 
56     "image": "https://img3.doubanio.com/view/subject/m/public/s29624974.jpg", 
57     "binding": "Paperback", 
58     "translator": [ ], 
59     "catalog": "", 
60     "pages": "464", 
61     "images": {
62         "small": "https://img3.doubanio.com/view/subject/s/public/s29624974.jpg", 
63         "large": "https://img3.doubanio.com/view/subject/l/public/s29624974.jpg", 
64         "medium": "https://img3.doubanio.com/view/subject/m/public/s29624974.jpg"
65     }, 
66     "alt": "https://book.douban.com/subject/3032825/", 
67     "id": "3032825", 
68     "publisher": "Prentice Hall", 
69     "isbn10": "0132350882", 
70     "isbn13": "9780132350884", 
71     "title": "Clean Code", 
72     "url": "https://api.douban.com/v2/book/3032825", 
73     "alt_title": "", 
74     "author_intro": "Robert C. “Uncle Bob” Martin has been a software professional since 1970 and an international software consultant since 1990. He is founder and president of Object Mentor, Inc., a team of experienced consultants who mentor their clients worldwide in the fields of C  , Java, C#, Ruby, OO, Design Patterns, UML, Agile Methodologies, and eXtreme programming.", 
75     "summary": "Even bad code can function. But if code isn’t clean, it can bring a development organization to its knees. Every year, countless hours and significant resources are lost because of poorly written code. But it doesn’t have to be that way.
76 Noted software expert Robert C. Martin presents a revolutionary paradigm with Clean Code: A Handbook of Agile Software Craftsmanship. Martin has teamed up with his colleagues from Object Mentor to distill their best agile practice of cleaning code “on the fly” into a book that will instill within you the values of a software craftsman and make you a better programmer—but only if you work at it.
77 What kind of work will you be doing? You’ll be reading code—lots of code. And you will be challenged to think about what’s right about that code, and what’s wrong with it. More importantly, you will be challenged to reassess your professional values and your commitment to your craft.
78 Clean Code is divided into three parts. The first describes the principles, patterns, and practices of writing clean code. The second part consists of several case studies of increasing complexity. Each case study is an exercise in cleaning up code—of transforming a code base that has some problems into one that is sound and efficient. The third part is the payoff: a single chapter containing a list of heuristics and “smells” gathered while creating the case studies. The result is a knowledge base that describes the way we think when we write, read, and clean code.
79 Readers will come away from this book understanding
80 How to tell the difference between good and bad code
81 How to write good code and how to transform bad code into good code
82 How to create good names, good functions, good objects, and good classes
83 How to format code for maximum readability
84 How to implement complete error handling without obscuring code logic
85 How to unit test and practice test-driven development
86 This book is a must for any developer, software engineer, project manager, team lead, or systems analyst with an interest in producing better code.", 
87     "price": "USD 49.99"
88 }

后续,插入Publisher音讯(须求推断name不设有才会insert),然后回到PublisherID;

A0三 世界名著 法兰西 《爱人》 玛格丽特·杜Russ

Shelf_Init.sql

豆瓣图书查询再次回到内容

 1 CREATE PROCEDURE [base].[Publisher#Insert](@json nvarchar(max), @id int out)
 2 WITH ENCRYPTION
 3 AS
 4 BEGIN
 5 ...
 6 
 7         declare    @name nvarchar(100);
 8         select    @name=Publisher from openjson(@json, '$') with (Publisher nvarchar(100))
 9 
10         -- insert Publisher
11         insert    base._Publisher(Name)select @name
12         where    not exists(select 1 from base._Publisher p where p.Name=@name);
13 
14         select    @id=ID from base.Publisher#Raw() where Name=@name;
15 ...
16 END

A0四 世界名著 高卢雄鸡 《茶花女》 亚花果山大大小小仲马

 1 CREATE PROCEDURE [svc].[Shelf$Init](@json nvarchar(max))
 2 WITH ENCRYPTION
 3 AS
 4 BEGIN
 5     SET    NOCOUNT    ON;
 6     SET XACT_ABORT ON;
 7     BEGIN TRY
 8         BEGIN    TRAN;
 9 
10         declare    @nickName nvarchar(20), @shelfName nvarchar(20);
11         select    @nickName=NickName,     @shelfName=ShelfName
12         from    openjson (@json, '$')
13         with (
14             NickName        nvarchar(20),
15             ShelfName        nvarchar(20)
16         );
17 
18         insert    core._Party(Type, Alias) select k._User, @nickName
19         from    core.Party#Type() k;
20         declare    @userID int=@@identity;
21 
22         
23         insert    core._Party(PID, Type, Alias) select @userID, k._Shelf, @shelfName
24         from    core.Party#Type() k;
25 
26         COMMIT    TRAN;
27     END TRY
28     BEGIN CATCH
29         if (xact_state() = -1) ROLLBACK TRAN; throw;
30     END CATCH
31 END

財小航个人图书收藏,记开发个人图书收藏清单小程序开发。 

 

A05 国外立小学说 法国 《局外人》 阿尔贝Coronation

好了,作者去尝试前端能否初步化消息进DB

刚刚出去拿纱窗了,等早晨安顿DB的时候继续创新。

承袭,插入Binding音讯(也亟需看清name不设有才insert),重返BindingID;

A06 外国立小学说 法兰西 《偷影子的人》 马克李维

....

 

 1 CREATE PROCEDURE [base].[Binding#Insert](@json nvarchar(max), @id int out)
 2 WITH ENCRYPTION
 3 AS
 4 BEGIN
 5 ...
 6 
 7         declare    @name nvarchar(100);
 8         select    @name=Binding from openjson(@json, '$') with (Binding nvarchar(100))
 9 
10         -- insert Binding
11         insert    base._Binding(Name)select @name
12         where    not exists(select 1 from base._Binding p where p.Name=@name);
13 
14         select    @id=ID from base.Binding#Raw() where Name=@name;
15 
16 ...
17 END

A0柒 世界名著 美国 《了不起的盖茨比》 FitzGerald

在测试在此以前,大家必要贯彻一下Init Razor Pages代码:

传说豆瓣API获取的Response音信,所以抽出如下新闻:

 

A0八 世界名著 美利坚联邦合众国 《飘》 玛格RitaMitchell

Init.cshtml.cs

豆瓣图书API信息
字段名称 豆瓣字段 字段描述
Title title  
SubTitle subtitle  
Authors author  
Translator translator  
ISBN13 isbn13  
ISBN10 isbn10  
AuthorIntro author_intro  
Summary summary  
Publisher publisher  
Binding binding  
OriginTitle origin_title  
Pages pages  
ImageUrl image  
Pubdate pubdate  
Catalog catalog  
Tags tags  

继续,插入Book信息;

A0九 海外随笔 U.S. 《最美好的花花世界七日》 Adena

 1     using M = Shelf;
 2     public class InitModel : PageModel
 3     {
 4         private readonly IShelfRepo _shelfRepo;
 5         public InitModel(IShelfRepo shelfRepo)
 6         {
 7             _shelfRepo = shelfRepo;
 8         }
 9         [BindProperty]
10         public InitInputModel Input { get; set; }
11 
12         public void OnGet()
13         {
14 
15         }
16 
17         public async Task<IActionResult> OnPostAsync()
18         {
19             if (ModelState.IsValid)
20             {
21                 await _shelfRepo.InitAsync(new M.InitSpec
22                 {
23                     NickName = Input.NickName.Trim(),
24                     ShelfName = Input.ShelfName.Trim()
25                 });
26                 return RedirectToPage("New");
27             }
28             return Page();
29         }
30     }

 

继续,插入BookInfo的信息;

A拾 外国立小学说 美利坚同同盟者 《忽然八日》 奥利弗

页面内容也亟需修改一下form部分

 

继续,插入BookNbr信息;

A11 海外立小学说 美利坚独资国 《2四个Billy》 Daniell凯斯

Init.cshtml

 

继续,插入BookSupplement信息;

A1贰 国外立小学说 美利坚合众国 《岛上书店》 加布瑞埃拉泽文

 1 <form method="post">
 2     <div class="form-group form-group-lg">
 3         <label asp-for="Input.NickName"></label>
 4         <input class="form-control form-control-lg" asp-for="Input.NickName" autocomplete="off">
 5         
 6     </div>
 7     <div class="form-group form-group-lg">
 8         <label asp-for="Input.ShelfName"></label>
 9         <input class="form-control form-control-lg" asp-for="Input.ShelfName" autocomplete="off">
10         
11     </div>
12     <div class="form-group text-right">
13         <button class="btn btn-warning btn-lg" type="submit">Save</button>
14     </div>
15 </form>

 

继续,插入BookTag信息;

A一3 国外立小学说 U.S.A. 《追风筝的人》 卡勒德·胡赛尼

填写不动书房的消息:

 

 1 CREATE PROCEDURE [base].[BookTag#Insert](@json nvarchar(max), @bookID bigint)
 2 WITH ENCRYPTION
 3 AS
 4 BEGIN
 5 ...
 6 
 7         -- insert Tag
 8         insert    base._Tag(Name)select value
 9         from    openjson(@json, '$.Tags') x
10         where    not exists(select 1 from base._Tag p where p.Name=x.value);
11 
12         insert    base._BookTag(BookID, TagID) select @bookID, x.ID
13         from    openjson(@json, '$.Tags') j join base.Tag#Raw() x on x.Name=j.value
14 
15 ...
16 END

A1四 海外小说 美利坚合众国 《肖申克的救赎》 Stephen金

图片 4

 

 

A15 悬疑/推理小说 美利坚合资国 《达芬奇密码》 丹Brown

 

 

继续,插入BookAuthor信息;

A1陆 悬疑/推理小说 美利坚合作国 《鬼世界》 丹Brown

 点击Save开关提交,OK,寻常提交了并跳转了。

 

 1 CREATE PROCEDURE [base].[BookAuthor#Insert](@json nvarchar(max), @bookID bigint)
 2 WITH ENCRYPTION
 3 AS
 4 BEGIN
 5 ...
 6 
 7         -- insert Author
 8         insert    base._Author(Name)select value
 9         from    openjson(@json, '$.Authors') x
10         where    not exists(select 1 from base._Author p where p.Name=x.value);
11 
12         insert    base._BookAuthor(BookID, AuthorID) select @bookID, x.ID
13         from    openjson(@json, '$.Authors') j join base.Author#Raw() x on x.Name=j.value
14 
15 ...
16 END

A1七 海外立小学说 扶桑 《挪威的树丛》 村上春树

翻看下DB有未有数量:

 

 

A1八 悬疑/推理小说 东瀛 《白夜行》 东野圭吾

图片 5

 

继续,插入BookTranslator信息;

A1玖 悬疑/推理小说 东瀛 《解忧杂货店》 东野圭吾

嘿嘿,看来壹切不奇怪。

 

 1 CREATE PROCEDURE [base].[BookTranslator#Insert](@json nvarchar(max), @bookID bigint)
 2 WITH ENCRYPTION
 3 AS
 4 BEGIN
 5 ...
 6 
 7         -- insert Translator
 8         insert    base._Author(Name)select value
 9         from    openjson(@json, '$.Translators') x
10         where    not exists(select 1 from base._Author p where p.Name=x.value);
11 
12         insert    base._BookTranslator(BookID, TranslatorID) select @bookID, x.ID
13         from    openjson(@json, '$.Translators') j join base.Author#Raw() x on x.Name=j.value
14 
15 ...
16 END

A20 悬疑/推理小说 东瀛 《黎明(Liu Wei)之街》 东野圭吾

 

 

 

A二一 悬疑/推理小说 扶桑 《同级生》 东野圭吾

 

末尾,关联新扩张的Book消息和Shelf,插入ShelfBook新闻。

A2二 悬疑/推理小说 扶桑 《疑忌人x的就义》 东野圭吾

 

 

A2三 悬疑/推理小说 东瀛 《虚无的十字架》 东野圭吾

 

目前假释Init Script

A二四 悬疑/推理小说 东瀛 《假面酒店》 东野圭吾

 

Book_Init.sql

A二伍 悬疑/推理小说 扶桑 《矮子》 江户川乱步

 

 1 CREATE PROCEDURE [svc].[Book$Init](@json nvarchar(max))
 2 WITH ENCRYPTION
 3 AS
 4 BEGIN
 5 ...
 6 
 7         declare    @stringID varchar(36), @userID int,  @shelfID int;
 8         select    @stringID=u.StringID,  @userID=u.ID, @shelfID=s.ID
 9         from    openjson (@json, '$') with (StringID varchar(36))
10         cross    apply core.User#For(StringID) u
11         join    core.Party#Raw() s on s.PID=u.ID;
12 
13         declare    @stateID int=(select BookCreated from core.Status#ID());
14 
15         -- init Matter
16         insert    core._Matter(Type, UserID, StateID)
17         select    k._Book, @userID, @stateID from core.Matter#Type() k;
18         declare    @matterID int=@@identity;
19 
20         -- init FileBank
21         insert    base._FileBank(Type, Url)
22         select    k._BookImage, ImageUrl
23         from    openjson(@json, '$') with (ImageUrl varchar(200))
24         cross    apply base.FileBank#Type() k;
25         declare    @imageID int=@@identity;
26         
27         -- insert Publisher
28         declare    @publisherID int;
29         exec    base.Publisher#Insert @json=@json, @id=@publisherID out;
30         
31         -- insert Binding
32         declare    @bindingID int;
33         exec    base.Binding#Insert @json=@json, @id=@bindingID out;
34 
35         -- insert Book
36         insert    base._Book(ID, Title, PublisherID, BindingID, ImageID)
37         select    @matterID, Title, @publisherID, @bindingID, @imageID
38         from    openjson(@json, '$') with (Title nvarchar(100));
39         
40         -- insert BookInfo
41         insert    base._BookInfo(ID, OriginTitle, PageCnt, Pubdate, SubTitle)
42         select    @matterID, OriginTitle, Pages, Pubdate, SubTitle
43         from    openjson(@json, '$')
44         with (
45             Pages       int, 
46             Pubdate     char(10), 
47             SubTitle    nvarchar(150), 
48             OriginTitle nvarchar(150)
49         );
50         
51         -- insert BookNbr
52         insert    base._BookNbr(ID, Type, Number)
53         select    @matterID, k._ISBN13, Isbn13
54         from    base.BookNbr#Type() k, openjson(@json, '$') with (Isbn13 char(13));
55         
56         insert    base._BookNbr(ID, Type, Number)
57         select    @matterID, k._ISBN10, Isbn10
58         from    base.BookNbr#Type() k, openjson(@json, '$') with (Isbn10 char(10));
59         
60         -- insert BookSupplement
61         insert    base._BookSupplement(ID, Type, Supplement)
62         select    @matterID, k._AuthorIntro, AuthorIntro
63         from    base.BookSupplement#Type() k, openjson(@json, '$') with (AuthorIntro nvarchar(max));
64         
65         insert    base._BookSupplement(ID, Type, Supplement)
66         select    @matterID, k._Summary, Summary
67         from    base.BookSupplement#Type() k, openjson(@json, '$') with (Summary nvarchar(max));
68         
69         insert    base._BookSupplement(ID, Type, Supplement)
70         select    @matterID, k._Catalog, Catalog
71         from    base.BookSupplement#Type() k, openjson(@json, '$') with (Catalog nvarchar(max));
72 
73         -- insert BookTag
74         exec    base.BookTag#Insert @json=@json, @bookID=@matterID;
75         
76         -- insert BookAuthor
77         exec    base.BookAuthor#Insert @json=@json, @bookID=@matterID;
78 
79         -- insert BookTranslator
80         exec    base.BookTranslator#Insert @json=@json, @bookID=@matterID;
81         
82         -- insert ShelfBook
83         insert    base._ShelfBook(BookID, ShelfID) values(@matterID, @shelfID);
84 
85 ...
86 END

A二6 悬疑/推理小说 东瀛 《暗室》 江户川乱步

拆分如上字段出来。

 

A二7 悬疑/推理随笔 扶桑 《巴Nora马尔维纳斯群岛奇谈》 江户川乱步

 ......

好了,开始测试。

A2八 悬疑/推理随笔 东瀛 《魔术师》 江户川乱步

因为在看FIFA World Cup,所以陈设有个别断断续续的,放出DB的Diagram:

...

A29 悬疑/推理随笔 东瀛 《阴兽》 江户川乱步

图片 6

查询DB,看看有没有数量进DB:

A30 悬疑/推理散文 东瀛 《罗生门》 芥川龙之介

 

图片 7

A3一 世界名著 印度 《贫民窟的富豪》 维卡斯斯瓦Rupp

图片 8

图片 9

A3贰 世界名著 大不列颠及英格兰联合王国 《呼啸山庄》 Aimee莉Bronte

 

 

A3三 世界名著 大不列颠及苏格兰联合王国 《简爱》 Charlotte·白朗蒂

近期的逻辑应该是不曾难题了,未来急需加上的是DB的剧情,以及每条线的上进设计。

 截图中体现了某些查询结果,基本没什么难点了。

A3四 国外立小学说 大不列颠及英格兰联合王国 《摆渡人》 克雷儿·Mike福尔

附带放出多少个Type的Script:

上边要做的是浮现Shelf中的Book新闻,要等前几天活干完才具再而三写了。

A3五 外国小说 United Kingdom 《1位的巡礼》 蕾秋Joyce

1 CREATE FUNCTION [core].[Matter#Type] ()
2 RETURNS TABLE
3 WITH SCHEMABINDING, ENCRYPTION
4 AS RETURN
5 (
6     select    1        as        _Book
7     ,         2        as        _ShelfBook
8     ,         4        as        _BookList
9 )

 1 CREATE FUNCTION [core].[Party#Type] ()
 2 RETURNS TABLE
 3 WITH SCHEMABINDING, ENCRYPTION
 4 AS RETURN
 5 (
 6     select    1        as        _Administrator
 7     ,         4        as        _User
 8     ---------------------------------------
 9     ,        16        as        _Shelf
10 )

1 CREATE FUNCTION [base].[BookInfo#Type] ()
2 RETURNS TABLE
3 WITH SCHEMABINDING, ENCRYPTION
4 AS RETURN
5 (
6     select    1        as        _Summary
7     ,         2        as        _Catalog
8     ,         4        as        _AuthorIntro
9 )

 

A3陆 悬疑/推理随笔 英国 《无人生还》 阿加莎Christie

 

A三柒 悬疑/推理小说 大不列颠及北爱尔兰联合王国 《亚马逊河上的血案》 阿加莎Christie

好的,昨天就先到那吗。

A3八 悬疑/推理小说 United Kingdom 《东方快车谋杀》 阿加莎Christie

 

A3玖 当代随笔 中夏族民共和国 《东晋那个事情》 当时明月

Cavalier0 今世随笔 中中原人民共和国 《神的夹心面》 多纪光

Cavalier1 当代随笔 中国 《万物生长》 冯唐

LIVINA2 今世小说 中华夏族民共和国 《千魂》 高铭

CRAV肆IDELX570三 今世小说 中夏族民共和国 《此间的豆蔻年华》 江南

迈腾四 今世小说 中夏族民共和国 《龙族I》 江南

卡罗拉5 今世小说 中华人民共和国 《悟空传》 今何在

TIIDA陆 今世随笔 中中原人民共和国 《西游日记》 今何在

BMW一系柒 今世小说 中夏族民共和国 《中国工人和农民红军政大学学麦》 管谟业

君威捌 当代小说 中华夏族民共和国 《边境城市》 Shen Congwen

Camry9 今世随笔 中夏族民共和国 《爱情公寓小说》 汪远

A50 当代随笔 中夏族民共和国 《西游记》 吴承恩

A5一 今世小说 中夏族民共和国 《离魂衣》 西岭雪

A5二 今世小说 中夏族民共和国 《太阳黑子》 须一瓜

A5三 当代小说 中中原人民共和国 《第七日》 余华(yú huá )

A5四 都市小说 中华夏族民共和国 《开心颂》 阿耐

A5五 都市小说 中华夏族民共和国 《失恋3三天》 鲍鲸鲸

A5陆 古典小说 中华夏族民共和国 《红楼》 曹雪芹

A伍柒 古典随笔 中中原人民共和国 《聂隐娘》 裴铏

A5捌 科学幻想小说 中中原人民共和国 《时间之墟》 宝树

A59 科学幻想小说 中中原人民共和国 《3体》 刘慈欣小说家

A60 互联网随笔 中夏族民共和国 《权妃之帝医风华》 阿彩

A61 网络随笔 中夏族民共和国 《界皇》 傲天无痕

A62 网络小说 中华夏族民共和国 《丽人图》 歌怨

A六3 网络小说 中华人民共和国 《法医妈咪快跑》 红薯小妖

A6四 网络随笔 中华夏族民共和国 《宣太后传》 京城说书匠

A陆伍 互连网小说 中中原人民共和国 《梦中已逝3000年》 璃华

A6陆 网络小说 中国 《甄嬛传》 流潋紫

A67 互联网小说 中中原人民共和国 《如懿传》 流潋紫

A6八 互联网小说 中中原人民共和国 《魔妃太放肆》 眉妩

A6九 互连网随笔 中夏族民共和国 《予君倾城恋》 宁丞书

A70 互联网散文 中夏族民共和国 《神的子女在跳舞》 水色花铃

A71 网络小说 中夏族民共和国 《斗破苍穹》 天蚕马铃薯

A7二 网络小说 中国 《武动乾坤》 天蚕马铃薯

A7三 互连网小说 中中原人民共和国 《鸱尾孩子他娘》 佟婕

A74 网络小说 中夏族民共和国 《诛仙》 萧鼎

A7五 网络小说 中夏族民共和国 《哑舍I》 黑色

A76 网络随笔 中中原人民共和国 《哑舍ii》 黑色

A7柒 互连网小说 中华夏族民共和国 《哑舍iii》 黑色

A7八 互连网小说 中中原人民共和国 《哑舍IV》 黑色

A7玖 互联网小说 中夏族民共和国 《穿成男神Computer怎么破》 烟花不是花

A80 互连网小说 中夏族民共和国 《废柴狂妃驯冷王》 欲念无罪

A八一 网络小说 中中原人民共和国 《苏染染追夫记》 云葭

A八二 武侠小说 中华夏族民共和国 《大旗豪杰传》 古龙大侠

A八3 武侠小说 中华夏族民共和国 《绝代双骄》 古龙先生

A八四 武侠小说 中中原人民共和国 《多情徘徊花暴虐剑》 古龙大侠

A八伍 武侠小说 中中原人民共和国 《楚留香神话》 古龙

本文由bwin必赢发布,转载请注明来源

关键词: 必赢app下载 流水