Kaynağa Gözat

更改了commonModel

chengjie 6 ay önce
ebeveyn
işleme
5f118ee327

+ 1 - 0
src/api/common/commonController.js

@@ -7,6 +7,7 @@ import path from 'path';
7 7
 import gm from 'gm';
8 8
 import axios from 'axios';
9 9
 import COS from 'cos-nodejs-sdk-v5';
10
+import commonModel from '../../model/commonModel.js';
10 11
 import { uploadSingle } from '../../middleware/upload.js';
11 12
 import { globalCache } from '../../util/GlobalCache.js';
12 13
 

+ 4 - 6
src/api/mps/mpsCommonController.js

@@ -2,7 +2,7 @@ import moment from 'moment';
2 2
 import fs from 'fs';
3 3
 import { promises as fsPromises } from 'fs';
4 4
 import mps, { ArrYear, getDistrict } from '../../model/mps.js';
5
-import dataUpdateStatus from '../../model/dataUpdateStatus.js';
5
+import commonModel from '../../model/commonModel.js';
6 6
 import config from '../../config/index.js';
7 7
 import _ from 'lodash';
8 8
 import axios from 'axios';
@@ -155,7 +155,7 @@ export async function Login(ctx) {
155 155
             ProgramID:173,
156 156
             Version:param.ProgramVersion,
157 157
         };
158
-        var result3 = await dataUpdateStatus.GetProductVersionList(param2);
158
+        var result3 = await commonModel.GetProductVersionList(param2);
159 159
         if (result3) {
160 160
             if ((param2.Version==result3[0].Version && result3[0].IsShowPay<=0)
161 161
                 || param2.Version>result3[0].Version){
@@ -208,7 +208,7 @@ export async function GetMPSDistrict(ctx) {
208 208
 // 获取反馈列表
209 209
 export async function GetMPSFeedbackList(ctx) {
210 210
     const sql = "SELECT * FROM kylx365_db.MPS_Feedback order by Flag,ID desc limit 200;";
211
-    const list = await mps.RunSql({}, sql);
211
+    const list = await commonModel.RunSql({}, sql);
212 212
     list.forEach(item => {
213 213
         item.CreateTime = moment(item.CreateTime).format('YYYY-MM-DD HH:mm:ss');
214 214
     });
@@ -343,7 +343,7 @@ export async function UpdateMPSWishLikeNum(ctx) {
343 343
 // 获取通知
344 344
 export async function GetMPSNotice(ctx) {
345 345
     const result = {IsShow: false};
346
-    const updateTimeList = await dataUpdateStatus.GetDataUpdateStatus();
346
+    const updateTimeList = await commonModel.GetDataUpdateStatus();
347 347
     const updateTime = moment(updateTimeList[8].UpdateTime).format('YYYY.MM.DD HH:mm:ss');
348 348
     const today = moment().format('YYYY.MM.DD HH:mm:ss');
349 349
     
@@ -1374,8 +1374,6 @@ export async function UpdateMPSUserNickNameAndAvatar(ctx) {
1374 1374
     ctx.body = {"errcode": 10000};
1375 1375
 }
1376 1376
 
1377
-
1378
-
1379 1377
 // 提交祝福语
1380 1378
 export async function MPSWish(ctx) {
1381 1379
     const param = ctx.request.body;

+ 12 - 11
src/api/mps/mpsSchoolController.js

@@ -2,6 +2,7 @@ import { promises as fs } from 'fs';
2 2
 import moment from 'moment';
3 3
 import BufferMemoryClass from '../../model/BufferMemoryClass.js';
4 4
 import { stringUtils } from '../../util/stringClass.js';
5
+import commonModel from '../../model/commonModel.js';
5 6
 import mps, { ArrYear, getDistrict } from '../../model/mps.js';
6 7
 import _ from 'lodash';
7 8
 
@@ -76,7 +77,7 @@ export async function GetMPSSchool(ctx) {
76 77
 
77 78
             //console.log(sql);
78 79
             
79
-            let list = await mps.RunSql({}, sql);
80
+            let list = await commonModel.RunSql({}, sql);
80 81
 
81 82
             if (param.SelectType === "structure") {
82 83
                 let item=[];
@@ -179,7 +180,7 @@ export async function GetMPSSchoolInfo (ctx) {
179 180
 
180 181
         let sql = "select * from MPS_School where id=" + param.ID;
181 182
         //console.log(sql);
182
-        const listSchool = await mps.RunSql({}, sql);
183
+        const listSchool = await commonModel.RunSql({}, sql);
183 184
 
184 185
         info = listSchool[0];
185 186
 
@@ -233,7 +234,7 @@ export async function GetMPSSchoolInfo (ctx) {
233 234
             }
234 235
 
235 236
             //console.log(sql1);
236
-            const listScore = await mps.RunSql({}, sql1);
237
+            const listScore = await commonModel.RunSql({}, sql1);
237 238
             let objScoreYear = null,
238 239
                 tempScoreType = "",
239 240
                 tempScoreYear = "", totalScoreYear = 0;
@@ -407,7 +408,7 @@ export async function GetMPSSchoolInfo (ctx) {
407 408
                     Total: 0});
408 409
             }
409 410
 
410
-                //在当年没有最低分数线之前使用
411
+            //在当年没有最低分数线之前使用
411 412
             var year=moment().format("YYYY");
412 413
             if (ArrYear[0].IsNullScoreLine){
413 414
                 if (info["名额到区"] && info["名额到区"].length>0) {
@@ -538,7 +539,7 @@ export async function GetMPSSchoolWeb(ctx) {
538 539
     else
539 540
         sql += " order by CONVERT(SchoolFullName USING gbk);";
540 541
 
541
-    const result = await mps.RunSql({}, sql);
542
+    const result = await commonModel.RunSql({}, sql);
542 543
 
543 544
     ctx.body = { "errcode": 10000, result };
544 545
 }
@@ -555,7 +556,7 @@ export async function GetMPSSchoolCollect(ctx) {
555 556
         "where uc.UserID=" + param.UserID +
556 557
         " order by s.SchoolType1,s.Pinyin,CONVERT(s.SchoolFullName USING gbk);";
557 558
     
558
-    const list = await mps.RunSql({}, sql);
559
+    const list = await commonModel.RunSql({}, sql);
559 560
     for (let i = 0; i < list.length; i++) {
560 561
         if (i > 0) {
561 562
             if (list[i].SchoolType1 != list[i-1].SchoolType1)
@@ -582,10 +583,10 @@ export async function UpdateMPSSchoolCollect(ctx) {
582 583
         IsCollect: ctx.query.IsCollect || 0,
583 584
     };
584 585
     let sql = "delete from MPS_UserCollect where UserID=" + param.UserID + " and SchoolID=" + param.SchoolID;
585
-    await mps.RunSql({}, sql);
586
+    await commonModel.RunSql({}, sql);
586 587
     if (Number(param.IsCollect)) {
587 588
         sql = "insert into MPS_UserCollect (UserID,SchoolID) values (" + param.UserID + "," + param.SchoolID + ");";
588
-        await mps.RunSql({}, sql);
589
+        await commonModel.RunSql({}, sql);
589 590
     }
590 591
 
591 592
     ctx.body = {"errcode": 10000};
@@ -601,18 +602,18 @@ export async function SaveMPSSchool(ctx) {
601 602
         if (param.ID && param.ID > 0) {
602 603
             // 更新操作
603 604
             sql = "UPDATE MPS_School SET ? WHERE ID = " + param.ID;
604
-            result = await mps.RunSql(param, sql);
605
+            result = await commonModel.RunSql(param, sql);
605 606
         } else {
606 607
             // 新增操作
607 608
             sql = "INSERT INTO MPS_School SET ?";
608
-            result = await mps.RunSql(param, sql);
609
+            result = await commonModel.RunSql(param, sql);
609 610
             
610 611
             // 返回新创建的学校ID
611 612
             param.ID = result.insertId;
612 613
         }
613 614
 
614 615
         sql = "delete FROM kylx365_db.BufferMemory where KeyName like 'GetMPSSchool%'";
615
-        await mps.RunSql({}, sql);
616
+        await commonModel.RunSql({}, sql);
616 617
         
617 618
         ctx.body = {"errcode": 10000, "result": param.ID};
618 619
     } catch (err) {

+ 18 - 17
src/api/mps/mpsScoreController.js

@@ -2,6 +2,7 @@ import { promises as fs } from 'fs';
2 2
 import moment from 'moment';
3 3
 import BufferMemoryClass from '../../model/BufferMemoryClass.js';
4 4
 import { stringUtils } from '../../util/stringClass.js';
5
+import commonModel from '../../model/commonModel.js';
5 6
 import mps, { ArrYear, getDistrict } from '../../model/mps.js';
6 7
 import _ from 'lodash';
7 8
 
@@ -15,7 +16,7 @@ export async function UpdateMPSUserSchoolLikeNum(ctx) {
15 16
     };
16 17
 
17 18
     var sql="select * from MPS_UserSchoolClickLike where UserID="+param.UserID+" and SchoolID="+param.SchoolID;
18
-    var list = await mps.RunSql(null,sql);
19
+    var list = await commonModel.RunSql(null,sql);
19 20
     if (list && list.length>0){
20 21
         if (list[0].ClickLikeID!=param.ClickLikeID) {
21 22
             param.ID=list[0].ID;
@@ -26,7 +27,7 @@ export async function UpdateMPSUserSchoolLikeNum(ctx) {
26 27
         await mps.AddMPSUserSchoolClickLike(param);
27 28
     }
28 29
 
29
-    result = await mps.RunSql({}, sql);
30
+    result = await commonModel.RunSql({}, sql);
30 31
     ctx.body = { "errcode": 10000, result: result };
31 32
 }
32 33
 
@@ -38,12 +39,12 @@ export async function GetMPSSchoolLikeNum(ctx) {
38 39
     };
39 40
 
40 41
     let sql="select ClickLikeID,count(*) as Count from MPS_UserSchoolClickLike where SchoolID="+param.SchoolID+" group by ClickLikeID order by Count desc,ClickLikeID;";
41
-    let list = await mps.RunSql(null,sql);
42
+    let list = await commonModel.RunSql(null,sql);
42 43
     if (list && list.length>0){
43 44
         list[0].Show=1;
44 45
         let sql2="select * from MPS_UserSchoolClickLike where SchoolID="+param.SchoolID+" and UserID="+param.UserID+";";
45 46
         //console.log(sql2);
46
-        let user=await mps.RunSql(null,sql2);
47
+        let user=await commonModel.RunSql(null,sql2);
47 48
         if (user && user.length>0) {
48 49
             for (let i = 0; i < list.length; i++) {
49 50
                 if (user[0].ClickLikeID == list[i].ClickLikeID) {
@@ -83,7 +84,7 @@ export async function GetMPSDistrictPersonNum(ctx) {
83 84
         const arr = [];
84 85
         const sql = "select c.SchoolType2Short,s.ScoreYear,sum(s.PlanNum) as PlanNum from MPS_Score s inner join MPS_School c on s.SchoolTarget=c.ID where s.ScoreYear in ('" + year2 + "','" + param.Year + "') and s.SchoolTargetRemark not in('4国际(本市)','5国际(非本市)') and s.PlanNum>0 " + str + " group by c.SchoolType2Short,s.ScoreYear order by c.SchoolType2Short desc,s.ScoreYear;";
85 86
 
86
-        const list = await mps.RunSql({}, sql);
87
+        const list = await commonModel.RunSql({}, sql);
87 88
         if (list && list.length > 0) {
88 89
             for(let i=0;i<list.length;i++){
89 90
                 list[i].PlanNum=Number(list[i].PlanNum);
@@ -135,10 +136,10 @@ export async function GetMPSCityPersonNum(ctx) {
135 136
         const year2 = Number(param.Year) - 1;
136 137
 
137 138
         const sql = "select c.SchoolType2Short,s.ScoreYear,sum(s.PlanNum) as PlanNum from MPS_Score s inner join MPS_School c on s.SchoolTarget=c.ID where s.ScoreYear in ('" + year2 + "','" + param.Year + "') and s.SchoolTargetRemark not in('4国际(本市)','5国际(非本市)') and s.PlanNum>0 group by c.SchoolType2Short,s.ScoreYear order by c.SchoolType2Short desc,s.ScoreYear;";
138
-        const list = await mps.RunSql({}, sql);
139
+        const list = await commonModel.RunSql({}, sql);
139 140
 
140 141
         const sql2 = "select sum(PlanNum) as PlanNum from MPS_Score where ScoreYear='" + ArrYear[0].Name + "' and SchoolTarget in (1,2,3,4) and SchoolTargetRemark not in('4国际(本市)','5国际(非本市)');";
141
-        const list2 = await mps.RunSql({}, sql2);
142
+        const list2 = await commonModel.RunSql({}, sql2);
142 143
         for(let i=0;i<list.length;i++){
143 144
             list[i].PlanNum=Number(list[i].PlanNum);
144 145
         }
@@ -237,7 +238,7 @@ export async function GetMPSScore(ctx) {
237 238
 
238 239
         //console.log(sql);
239 240
 
240
-        var list = await mps.RunSql({}, sql);
241
+        var list = await commonModel.RunSql({}, sql);
241 242
 
242 243
         if (param.ScoreType == "自主招生") {
243 244
             var arrTemp = [], temp = 0, obj = {
@@ -341,7 +342,7 @@ export async function GetMPSScore(ctx) {
341 342
         if (ArrYear[0].IsNullScoreLine && param.ScoreYear==year){
342 343
             sql=sql.replace(ArrYear[0].Name,ArrYear[1].Name);
343 344
 
344
-            var list2 = await mps.RunSql({}, sql);
345
+            var list2 = await commonModel.RunSql({}, sql);
345 346
             for(var i=0;i<list.length;i++){
346 347
                 for(var j=0;j<list2.length;j++){
347 348
                     if (list[i].DistrictID==list2[j].DistrictID
@@ -453,7 +454,7 @@ export async function GetMPSScoreByCollect(ctx) {
453 454
             "order by SchoolOfGraduation;";
454 455
     }
455 456
 
456
-    var list=await mps.RunSql({},sql);
457
+    var list=await commonModel.RunSql({},sql);
457 458
 
458 459
     for (var i = 0; i < list.length; i++) {
459 460
         var item = list[i];
@@ -496,7 +497,7 @@ export async function GetMPSScoreByCollect(ctx) {
496 497
     if (ArrYear[0].IsNullScoreLine && param.ScoreYear==year){
497 498
         sql=sql.replace(ArrYear[0].Name,ArrYear[1].Name);
498 499
 
499
-        var list2 = await mps.RunSql({}, sql);
500
+        var list2 = await commonModel.RunSql({}, sql);
500 501
         for(var i=0;i<list.length;i++){
501 502
             if (list[i].Name!="自主招生") {
502 503
                 for (var j = 0; j < list2.length; j++) {
@@ -555,7 +556,7 @@ export async function UpdateMPSScore(ctx) {
555 556
             sql2 += " and SchoolTargetRemark='" + param.SchoolTargetRemark + "';";
556 557
         }
557 558
 
558
-        let hasID=await mps.RunSql({},sql2);
559
+        let hasID=await commonModel.RunSql({},sql2);
559 560
         if (hasID && hasID.length>0) {
560 561
             param.ID=hasID[0].ID;
561 562
             sql="update MPS_Score set ? where ID="+param.ID+";";
@@ -566,13 +567,13 @@ export async function UpdateMPSScore(ctx) {
566 567
         }
567 568
     }
568 569
 
569
-    let insertID = await mps.RunSql(param,sql);
570
+    let insertID = await commonModel.RunSql(param,sql);
570 571
 
571 572
     if (!param.ID || param.ID==0){
572 573
         sql="update MPS_Score f,MPS_School x set f.SchoolFullName=x.SchoolFullName where f.SchoolTarget=x.ID;";
573
-        await mps.RunSql({},sql);
574
+        await commonModel.RunSql({},sql);
574 575
         sql="update MPS_Score f,MPS_School x set f.SchoolFullNameJunior=x.SchoolFullName where f.SchoolOfGraduation=x.ID;";
575
-        await mps.RunSql({},sql);
576
+        await commonModel.RunSql({},sql);
576 577
 
577 578
         param.ID=insertID.insertId;
578 579
     }
@@ -619,7 +620,7 @@ export async function GetMPSScoreWeb(ctx) {
619 620
 
620 621
     sql += sqlOrder;
621 622
 
622
-    const list = await mps.RunSql({}, sql);
623
+    const list = await commonModel.RunSql({}, sql);
623 624
 
624 625
     if (param.ScoreYear === "2022") {
625 626
         for (let i = 0; i < list.length; i++) {
@@ -644,7 +645,7 @@ export async function GetMPSScoreWeb(ctx) {
644 645
 
645 646
         sql += sqlOrder;
646 647
 
647
-        const list2 = await mps.RunSql({}, sql);
648
+        const list2 = await commonModel.RunSql({}, sql);
648 649
 
649 650
         for (let i = 0; i < list.length; i++) {
650 651
             const item = list[i];

Dosya farkı çok büyük olduğundan ihmal edildi
+ 477 - 4
src/api/phonics/phonicsController.js


+ 1 - 0
src/api/phonics/routes.js

@@ -16,5 +16,6 @@ router.get('/api/GetPhonicsAll',phonics.GetPhonicsAll);
16 16
 router.post('/api/UpdatePhonicsReview',phonics.UpdatePhonicsReview);
17 17
 router.get('/api/GetPhonicsReviewList',phonics.GetPhonicsReviewList);
18 18
 router.get('/api/AddPhonicsTestScore',phonics.AddPhonicsTestScore);
19
+router.get('/api/GetEnglishAll3',phonics.GetEnglishAll3);
19 20
 
20 21
 export default router;

+ 3 - 3
src/api/pinyin/pinyinController.js

@@ -1,5 +1,5 @@
1 1
 import moment from 'moment';
2
-import dataUpdateStatus from '../../model/dataUpdateStatus.js';
2
+import commonModel from '../../model/commonModel.js';
3 3
 import pinyin from '../../model/pinyin.js';
4 4
 import config from '../../config/index.js';
5 5
 import _ from 'lodash';
@@ -100,7 +100,7 @@ export async function PinyinLogin(ctx) {
100 100
                 ProgramID: 98,
101 101
                 Version: param.ProgramVersion,
102 102
             };
103
-            let result3 = await dataUpdateStatus.GetProductVersionList(param2);
103
+            let result3 = await commonModel.GetProductVersionList(param2);
104 104
             if (result3) {
105 105
                 if ((param2.Version == result3[0].Version && result3[0].IsShowPay <= 0)
106 106
                     || param2.Version > result3[0].Version) {
@@ -215,7 +215,7 @@ export async function GetPinyinRecordData(ctx) {
215 215
             ProgramID: 98,
216 216
             Version: param.Version,
217 217
         };
218
-        const result3 = await dataUpdateStatus.GetProductVersionList(param2);
218
+        const result3 = await commonModel.GetProductVersionList(param2);
219 219
         if (result3) {
220 220
             if ((param.Version === result3[0].Version && result3[0].IsShowPay <= 0)
221 221
                 || param.Version > result3[0].Version) {

+ 4 - 1
src/app.js

@@ -29,7 +29,10 @@ app.use(async (ctx, next) => {
29 29
         await next();
30 30
     } catch (err) {
31 31
         ctx.status = err.status || 500;
32
-        ctx.body = { error: err.message };
32
+        ctx.body = { 
33
+            error: err.message,
34
+            url: ctx.url
35
+        };
33 36
         ctx.app.emit('error', err, ctx);
34 37
     }
35 38
 });

+ 15 - 2
src/model/dataUpdateStatus.js

@@ -6,7 +6,20 @@
6 6
  */
7 7
 import { query } from '../util/db.js';
8 8
 
9
-class DataUpdateStatus {
9
+class commonModel {
10
+    /**
11
+     * 执行sql
12
+     * @param {Object} obj 查询参数
13
+     * @returns {Promise<Array>} 数据更新状态
14
+     */
15
+    static async RunSql(param,sql) {
16
+        try {
17
+            return await query(sql,[param]);
18
+        } catch (error) {
19
+            console.error('sql执行失败:', error);
20
+            throw error;
21
+        }
22
+    }
10 23
     /**
11 24
      * 获取数据更新状态
12 25
      * @param {Object} obj 查询参数
@@ -60,4 +73,4 @@ class DataUpdateStatus {
60 73
     }
61 74
 }
62 75
 
63
-export default DataUpdateStatus;
76
+export default commonModel;

+ 735 - 0
src/model/hanzi.js

@@ -0,0 +1,735 @@
1
+import { query } from '../util/db.js';
2
+
3
+/**
4
+ * Hanzi 模型
5
+ */
6
+class Hanzi {
7
+    /**
8
+     * 获取用户信息(通过OpenID)
9
+     * @param {Object} obj 查询参数
10
+     * @returns {Promise<Array>} 用户信息
11
+     */
12
+    static async GetUsersInfo(obj) {
13
+        try {
14
+            const sql = "select * from HanziWXUsers where OpenID=?";
15
+            return await query(sql, [obj.OpenID]);
16
+        } catch (error) {
17
+            console.error('获取用户信息失败:', error);
18
+            throw error;
19
+        }
20
+    }
21
+
22
+    /**
23
+     * 获取用户信息(通过UserID)
24
+     * @param {Object} obj 查询参数
25
+     * @returns {Promise<Array>} 用户信息
26
+     */
27
+    static async GetUsersInfoByUserID(obj) {
28
+        try {
29
+            const sql = "select * from HanziWXUsers where UserID=?";
30
+            return await query(sql, [obj.UserID]);
31
+        } catch (error) {
32
+            console.error('获取用户信息失败:', error);
33
+            throw error;
34
+        }
35
+    }
36
+
37
+    /**
38
+     * 添加用户
39
+     * @param {Object} obj 用户信息
40
+     * @returns {Promise<Object>} 插入结果
41
+     */
42
+    static async AddUsers(obj) {
43
+        try {
44
+            const sql = "INSERT INTO HanziWXUsers SET ?";
45
+            return await query(sql, [obj]);
46
+        } catch (error) {
47
+            console.error('添加用户失败:', error);
48
+            throw error;
49
+        }
50
+    }
51
+
52
+    /**
53
+     * 更新用户信息(通过OpenID)
54
+     * @param {Object} obj 更新参数
55
+     * @returns {Promise<Object>} 更新结果
56
+     */
57
+    static async UpdateUsers(obj) {
58
+        try {
59
+            const sql = "Update HanziWXUsers SET ? where OpenID=?";
60
+            return await query(sql, [obj, obj.OpenID]);
61
+        } catch (error) {
62
+            console.error('更新用户信息失败:', error);
63
+            throw error;
64
+        }
65
+    }
66
+
67
+    /**
68
+     * 更新用户信息(通过UserID)
69
+     * @param {Object} obj 更新参数
70
+     * @returns {Promise<Object>} 更新结果
71
+     */
72
+    static async UpdateUsersByUserID(obj) {
73
+        try {
74
+            const sql = "Update HanziWXUsers SET ? where UserID=?";
75
+            return await query(sql, [obj, obj.UserID]);
76
+        } catch (error) {
77
+            console.error('更新用户信息失败:', error);
78
+            throw error;
79
+        }
80
+    }
81
+
82
+    /**
83
+     * 添加汉字记录
84
+     * @param {Object} obj 记录信息
85
+     * @returns {Promise<Object>} 插入结果
86
+     */
87
+    static async AddHanziRecord(obj) {
88
+        try {
89
+            const sql = "INSERT INTO HanziRecords SET ?";
90
+            return await query(sql, [obj]);
91
+        } catch (error) {
92
+            console.error('添加汉字记录失败:', error);
93
+            throw error;
94
+        }
95
+    }
96
+
97
+    /**
98
+     * 更新汉字记录
99
+     * @param {Object} obj 更新参数
100
+     * @returns {Promise<Object>} 更新结果
101
+     */
102
+    static async UpdateHanziRecord(obj) {
103
+        try {
104
+            const sql = "Update HanziRecords SET ? where RecordID=?";
105
+            return await query(sql, [obj, obj.RecordID]);
106
+        } catch (error) {
107
+            console.error('更新汉字记录失败:', error);
108
+            throw error;
109
+        }
110
+    }
111
+
112
+    /**
113
+     * 获取汉字记录数据
114
+     * @param {Object} obj 查询参数
115
+     * @returns {Promise<Array>} 记录数据
116
+     */
117
+    static async GetHanziRecordData(obj) {
118
+        try {
119
+            const sql = `select count(distinct date_format(CreateTime,'%Y-%m-%d')) as DayNumber,
120
+                        sum(HanziNumber) as HanziNumber 
121
+                        from HanziRecords where UserID=?`;
122
+            return await query(sql, [obj.UserID]);
123
+        } catch (error) {
124
+            console.error('获取汉字记录数据失败:', error);
125
+            throw error;
126
+        }
127
+    }
128
+
129
+    /**
130
+     * 获取已完成的汉字数据统计
131
+     * @param {Object} obj 查询参数
132
+     * @returns {Promise<Array>} 完成数据
133
+     */
134
+    static async GetHanziFinishedDataCount(obj) {
135
+        try {
136
+            const sql = "select Category as BookID,Title as UnitID from HanziFinished where UserID=?";
137
+            return await query(sql, [obj.UserID]);
138
+        } catch (error) {
139
+            console.error('获取已完成的汉字数据统计失败:', error);
140
+            throw error;
141
+        }
142
+    }
143
+
144
+    /**
145
+     * 添加支付信息
146
+     * @param {Object} obj 支付信息
147
+     * @returns {Promise<Object>} 插入结果
148
+     */
149
+    static async AddPayInfo(obj) {
150
+        try {
151
+            const sql = "INSERT INTO ProductPayInfo SET ?";
152
+            return await query(sql, [obj]);
153
+        } catch (error) {
154
+            console.error('添加支付信息失败:', error);
155
+            throw error;
156
+        }
157
+    }
158
+
159
+    /**
160
+     * 更新支付信息
161
+     * @param {Object} obj 更新参数
162
+     * @returns {Promise<Object>} 更新结果
163
+     */
164
+    static async UpdatePayInfo(obj) {
165
+        try {
166
+            const sql = "Update ProductPayInfo SET ? where OpenID=? and TradeNo=?";
167
+            return await query(sql, [obj, obj.OpenID, obj.TradeNo]);
168
+        } catch (error) {
169
+            console.error('更新支付信息失败:', error);
170
+            throw error;
171
+        }
172
+    }
173
+
174
+    /**
175
+     * 获取支付信息列表
176
+     * @param {Object} obj 查询参数
177
+     * @returns {Promise<Array>} 支付信息列表
178
+     */
179
+    static async GetPayInfoListByOpenIDAndTradeNo(obj) {
180
+        try {
181
+            const sql = "select * from ProductPayInfo where OpenID=? and TradeNo=?";
182
+            return await query(sql, [obj.OpenID, obj.TradeNo]);
183
+        } catch (error) {
184
+            console.error('获取支付信息列表失败:', error);
185
+            throw error;
186
+        }
187
+    }
188
+
189
+    /**
190
+     * 添加汉字临时记录
191
+     * @param {Object} obj 记录信息
192
+     * @returns {Promise<Object>} 插入结果
193
+     */
194
+    static async AddHanziTemp(obj) {
195
+        try {
196
+            const sql = "INSERT INTO HanziTemp SET ?";
197
+            return await query(sql, [obj]);
198
+        } catch (error) {
199
+            console.error('添加汉字临时记录失败:', error);
200
+            throw error;
201
+        }
202
+    }
203
+
204
+    /**
205
+     * 添加已完成的汉字
206
+     * @param {Object} obj 完成记录
207
+     * @returns {Promise<Object>} 插入结果
208
+     */
209
+    static async AddHanziFinished(obj) {
210
+        try {
211
+            const sql = "INSERT INTO HanziFinished SET ?";
212
+            return await query(sql, [obj]);
213
+        } catch (error) {
214
+            console.error('添加已完成的汉字失败:', error);
215
+            throw error;
216
+        }
217
+    }
218
+
219
+    /**
220
+     * 删除已完成的汉字
221
+     * @param {Object} obj 删除参数
222
+     * @returns {Promise<Object>} 删除结果
223
+     */
224
+    static async DeleteHanziFinished(obj) {
225
+        try {
226
+            const sql = "delete from HanziFinished where UserID=? and Title=?";
227
+            return await query(sql, [obj.UserID, obj.Title]);
228
+        } catch (error) {
229
+            console.error('删除已完成的汉字失败:', error);
230
+            throw error;
231
+        }
232
+    }
233
+
234
+    /**
235
+     * 获取已完成的汉字数据
236
+     * @param {Object} obj 查询参数
237
+     * @returns {Promise<Array>} 完成数据
238
+     */
239
+    static async GetHanziFinishedData(obj) {
240
+        try {
241
+            const sql = "select Category as BookID,Title as UnitID from HanziFinished where UserID=?";
242
+            return await query(sql, [obj.UserID]);
243
+        } catch (error) {
244
+            console.error('获取已完成的汉字数据失败:', error);
245
+            throw error;
246
+        }
247
+    }
248
+
249
+    /**
250
+     * 添加汉字复习记录
251
+     * @param {Object} obj 复习记录
252
+     * @returns {Promise<Object>} 插入结果
253
+     */
254
+    static async AddHanziReview(obj) {
255
+        try {
256
+            const sql = "INSERT INTO HanziReview SET ?";
257
+            return await query(sql, [obj]);
258
+        } catch (error) {
259
+            console.error('添加汉字复习记录失败:', error);
260
+            throw error;
261
+        }
262
+    }
263
+
264
+    /**
265
+     * 删除汉字复习记录
266
+     * @param {Object} obj 删除参数
267
+     * @returns {Promise<Object>} 删除结果
268
+     */
269
+    static async DeleteHanziReview(obj) {
270
+        try {
271
+            const sql = "delete from HanziReview where UserID=? and Word=?";
272
+            return await query(sql, [obj.UserID, obj.Word]);
273
+        } catch (error) {
274
+            console.error('删除汉字复习记录失败:', error);
275
+            throw error;
276
+        }
277
+    }
278
+
279
+    /**
280
+     * 删除所有汉字复习记录
281
+     * @param {Object} obj 删除参数
282
+     * @returns {Promise<Object>} 删除结果
283
+     */
284
+    static async DeleteHanziReviewAll(obj) {
285
+        try {
286
+            const sql = "delete from HanziReview where UserID=? and WordID in (?)";
287
+            return await query(sql, [obj.UserID, obj.WordID]);
288
+        } catch (error) {
289
+            console.error('删除所有汉字复习记录失败:', error);
290
+            throw error;
291
+        }
292
+    }
293
+
294
+    /**
295
+     * 获取汉字复习列表
296
+     * @param {Object} obj 查询参数
297
+     * @returns {Promise<Array>} 复习列表
298
+     */
299
+    static async GetHanziReviewList(obj) {
300
+        try {
301
+            const sql = `select r.WordID as ID,w.Name,w.Pinyin,w.CombineWords 
302
+                        from HanziReview r 
303
+                        inner join HanziWord w on r.WordID=w.ID 
304
+                        where r.UserID=? order by r.ID`;
305
+            return await query(sql, [obj.UserID]);
306
+        } catch (error) {
307
+            console.error('获取汉字复习列表失败:', error);
308
+            throw error;
309
+        }
310
+    }
311
+
312
+    /**
313
+     * 获取汉字书本列表
314
+     * @param {Object} obj 查询参数
315
+     * @returns {Promise<Array>} 书本列表
316
+     */
317
+    static async GetHanziBooks(obj) {
318
+        try {
319
+            let sql = "select * from HanziBook;";
320
+            const values = [];
321
+
322
+            if (obj && obj.Type === "TestMenu") {
323
+                sql = "SELECT * FROM kylx365_db.HanziBook where Flag=0 order by Sort;";
324
+            } else if (obj && obj.Type === "TestMenuMain") {
325
+                sql = "SELECT distinct Category FROM kylx365_db.HanziBook where Flag=0 order by Sort;";
326
+            } else if (obj && obj.Type === "Shizi") {
327
+                sql = "SELECT ID,Name FROM kylx365_db.HanziBook where Flag=0 and Name1='语文写字' order by Sort;";
328
+            } else if (obj && obj.BookID) {
329
+                sql = "SELECT * FROM kylx365_db.HanziBook where Flag=0 and ID=?";
330
+                values.push(obj.BookID);
331
+            }
332
+
333
+            return await query(sql, values);
334
+        } catch (error) {
335
+            console.error('获取汉字书本列表失败:', error);
336
+            throw error;
337
+        }
338
+    }
339
+
340
+    /**
341
+     * 获取汉字单元列表
342
+     * @param {Object} obj 查询参数
343
+     * @returns {Promise<Array>} 单元列表
344
+     */
345
+    static async GetHanziUnits(obj) {
346
+        try {
347
+            let sql = "select * from HanziUnit";
348
+            const values = [];
349
+
350
+            if (obj && obj.BookID) {
351
+                sql += " where HanziBookID=?";
352
+                values.push(obj.BookID);
353
+            }
354
+
355
+            sql += " order by HanziBookID,OrderID,ID;";
356
+            return await query(sql, values);
357
+        } catch (error) {
358
+            console.error('获取汉字单元列表失败:', error);
359
+            throw error;
360
+        }
361
+    }
362
+
363
+    /**
364
+     * 获取汉字单元信息
365
+     * @param {Object} obj 查询参数
366
+     * @returns {Promise<Array>} 单元信息
367
+     */
368
+    static async GetHanziUnitByID(obj) {
369
+        try {
370
+            const sql = "select * from HanziUnit where ID=?";
371
+            return await query(sql, [obj.UnitID]);
372
+        } catch (error) {
373
+            console.error('获取汉字单元信息失败:', error);
374
+            throw error;
375
+        }
376
+    }
377
+
378
+    /**
379
+     * 获取汉字列表
380
+     * @param {Object} obj 查询参数
381
+     * @returns {Promise<Array>} 汉字列表
382
+     */
383
+    static async GetHanziWords(obj) {
384
+        try {
385
+            let sql = "select ID,HanziUnitID,Name,Pinyin,CombineWords from HanziWord order by SortID;";
386
+            const values = [];
387
+
388
+            if (obj && obj.Type === "all") {
389
+                sql = "select * from HanziWord order by Name,SortID,HanziUnitID;";
390
+                if (obj.ID) {
391
+                    sql = "select * from HanziWord where ID=?";
392
+                    values.push(obj.ID);
393
+                } else if (obj.UnitID) {
394
+                    if (obj.UnitID === "undefined") {
395
+                        obj.UnitID = 0;
396
+                    }
397
+                    sql = "select * from HanziWord where HanziUnitID=? order by SortID;";
398
+                    values.push(obj.UnitID);
399
+                }
400
+            } else if (obj && obj.Type === "random") {
401
+                sql = "select ID,HanziUnitID,Name,PinyinTest from HanziWord where HanziUnitID>0 and PinyinTest is not null order by HanziUnitID,ID;";
402
+            } else if (obj && obj.Type === "null") {
403
+                sql = "select * from HanziWord where BiShunUrl='';";
404
+            }
405
+
406
+            return await query(sql, values);
407
+        } catch (error) {
408
+            console.error('获取汉字列表失败:', error);
409
+            throw error;
410
+        }
411
+    }
412
+
413
+    /**
414
+     * 获取文言文数据
415
+     * @param {Object} obj 查询参数
416
+     * @returns {Promise<Array>} 文言文数据
417
+     */
418
+    static async GetAncientChineseProse(obj) {
419
+        try {
420
+            let sql = "select * from AncientChineseProse;";
421
+            if (obj.IsList) {
422
+                sql = `select p.Word,count(p.ID) as Count,u.ID as UnitID 
423
+                       from AncientChineseProse p 
424
+                       inner join HanziUnit u on p.Word=u.Name 
425
+                       group by p.Word order by UnitID;`;
426
+            }
427
+            return await query(sql);
428
+        } catch (error) {
429
+            console.error('获取文言文数据失败:', error);
430
+            throw error;
431
+        }
432
+    }
433
+
434
+    /**
435
+     * 获取小古文数据
436
+     * @param {Object} obj 查询参数
437
+     * @returns {Promise<Array>} 小古文数据
438
+     */
439
+    static async GetAncientChineseProseSentence(obj) {
440
+        try {
441
+            let sql = `select p.Unit,count(p.ID) as Count,u.ID as UnitID 
442
+                      from AncientChineseProseSentence p 
443
+                      inner join HanziUnit u on p.Unit=u.Name 
444
+                      group by p.Unit order by UnitID;`;
445
+            if (obj && obj.Unit) {
446
+                sql = "select * from AncientChineseProseSentence where Unit=?";
447
+                return await query(sql, [obj.Unit]);
448
+            }
449
+            return await query(sql);
450
+        } catch (error) {
451
+            console.error('获取小古文数据失败:', error);
452
+            throw error;
453
+        }
454
+    }
455
+
456
+    /**
457
+     * 获取汉字单元词语
458
+     * @param {Object} obj 查询参数
459
+     * @returns {Promise<Array>} 词语列表
460
+     */
461
+    static async GetHanziUnitWords(obj) {
462
+        try {
463
+            let sql = "select ID,Name,Pinyin,CombineWords,BiShunUrl,KaitiUrl from HanziWord where HanziUnitID=?";
464
+            const values = [obj.UnitID];
465
+
466
+            if (obj.Words) {
467
+                sql = "select ID,Name,Pinyin,CombineWords,BiShunUrl,KaitiUrl from HanziWord where Name in (?) group by Name;";
468
+                values[0] = obj.Words;
469
+            }
470
+
471
+            return await query(sql, values);
472
+        } catch (error) {
473
+            console.error('获取汉字单元词语失败:', error);
474
+            throw error;
475
+        }
476
+    }
477
+
478
+    /**
479
+     * 获取妙果识字词语
480
+     * @param {Object} obj 查询参数
481
+     * @returns {Promise<Array>} 词语列表
482
+     */
483
+    static async GetMiaoguoLiteracyWords(obj) {
484
+        try {
485
+            const sql = `select Word,SearchType,JSONString 
486
+                        from MiaoguoLiteracy 
487
+                        where Word in (?) 
488
+                        and (SearchType<>'shici' and SearchType<>'eng') 
489
+                        order by Word,SearchType desc;`;
490
+            return await query(sql, [obj.Words]);
491
+        } catch (error) {
492
+            console.error('获取妙果识字词语失败:', error);
493
+            throw error;
494
+        }
495
+    }
496
+
497
+    /**
498
+     * 获取没有图片的汉字列表
499
+     * @returns {Promise<Array>} 汉字列表
500
+     */
501
+    static async GetHanziWordsNoImage() {
502
+        try {
503
+            const sql = "select ID,HanziUnitID,Name,Pinyin,CombineWords from HanziWord where HasImage=0;";
504
+            return await query(sql);
505
+        } catch (error) {
506
+            console.error('获取没有图片的汉字列表失败:', error);
507
+            throw error;
508
+        }
509
+    }
510
+
511
+    /**
512
+     * 更新汉字信息
513
+     * @param {Object} obj 更新参数
514
+     * @returns {Promise<Object>} 更新结果
515
+     */
516
+    static async UpdateHanziWords(obj) {
517
+        try {
518
+            const sql = "Update HanziWord SET ? where Name=?";
519
+            return await query(sql, [obj, obj.Name]);
520
+        } catch (error) {
521
+            console.error('更新汉字信息失败:', error);
522
+            throw error;
523
+        }
524
+    }
525
+
526
+    /**
527
+     * 通过ID更新汉字信息
528
+     * @param {Object} obj 更新参数
529
+     * @returns {Promise<Object>} 更新结果
530
+     */
531
+    static async UpdateHanziWordsByID(obj) {
532
+        try {
533
+            const sql = "Update HanziWord SET ? where ID=?";
534
+            return await query(sql, [obj, obj.ID]);
535
+        } catch (error) {
536
+            console.error('通过ID更新汉字信息失败:', error);
537
+            throw error;
538
+        }
539
+    }
540
+
541
+    /**
542
+     * 通过汉字获取信息
543
+     * @param {Object} obj 查询参数
544
+     * @returns {Promise<Array>} 汉字信息
545
+     */
546
+    static async GetHanziWordsByWord(obj) {
547
+        try {
548
+            const sql = "select * from HanziWord where Name=?";
549
+            return await query(sql, [obj.Word]);
550
+        } catch (error) {
551
+            console.error('通过汉字获取信息失败:', error);
552
+            throw error;
553
+        }
554
+    }
555
+
556
+    /**
557
+     * 添加汉字
558
+     * @param {Object} obj 汉字信息
559
+     * @returns {Promise<Object>} 插入结果
560
+     */
561
+    static async AddHanziWord(obj) {
562
+        try {
563
+            const sql = "INSERT INTO HanziWord SET ?";
564
+            return await query(sql, [obj]);
565
+        } catch (error) {
566
+            console.error('添加汉字失败:', error);
567
+            throw error;
568
+        }
569
+    }
570
+
571
+    /**
572
+     * 获取新用户信息(通过UserID)
573
+     * @param {Object} obj 查询参数
574
+     * @returns {Promise<Array>} 用户信息
575
+     */
576
+    static async GetNewUserByUserID(obj) {
577
+        try {
578
+            const sql = "select UserID,NickName,AvatarUrl from HanziWXUsers where Introducer=?";
579
+            return await query(sql, [obj.UserID]);
580
+        } catch (error) {
581
+            console.error('获取新用户信息失败:', error);
582
+            throw error;
583
+        }
584
+    }
585
+
586
+    /**
587
+     * 获取用户支付列表信息(通过OpenID)
588
+     * @param {Object} obj 查询参数
589
+     * @returns {Promise<Array>} 支付列表
590
+     */
591
+    static async GetUsersPayListInfoByOpenID(obj) {
592
+        try {
593
+            const sql = "select * from ProductPayInfo where ProductID=106 and OpenID=? and Status=1 order by ID;";
594
+            return await query(sql, [obj.OpenID]);
595
+        } catch (error) {
596
+            console.error('获取用户支付列表信息失败:', error);
597
+            throw error;
598
+        }
599
+    }
600
+
601
+    /**
602
+     * 获取用户单元自定义列表
603
+     * @param {Object} obj 查询参数
604
+     * @returns {Promise<Array>} 自定义列表
605
+     */
606
+    static async GetUsersUnitCustomList(obj) {
607
+        try {
608
+            if (obj.UnitID === "undefined") {
609
+                obj.UnitID = 0;
610
+            }
611
+            const sql = "select * from HanziWordUser where UserID=? and UnitID=?";
612
+            return await query(sql, [obj.UserID, obj.UnitID]);
613
+        } catch (error) {
614
+            console.error('获取用户单元自定义列表失败:', error);
615
+            throw error;
616
+        }
617
+    }
618
+
619
+    /**
620
+     * 添加汉字自定义
621
+     * @param {Object} obj 自定义信息
622
+     * @returns {Promise<Object>} 插入结果
623
+     */
624
+    static async AddHanziCustom(obj) {
625
+        try {
626
+            const sql = "INSERT INTO HanziWordUser SET ?";
627
+            return await query(sql, [obj]);
628
+        } catch (error) {
629
+            console.error('添加汉字自定义失败:', error);
630
+            throw error;
631
+        }
632
+    }
633
+
634
+    /**
635
+     * 更新汉字自定义
636
+     * @param {Object} obj 更新参数
637
+     * @returns {Promise<Object>} 更新结果
638
+     */
639
+    static async UpdateHanziCustom(obj) {
640
+        try {
641
+            const sql = "Update HanziWordUser SET ? where UserID=? and UnitID=?";
642
+            return await query(sql, [obj, obj.UserID, obj.UnitID]);
643
+        } catch (error) {
644
+            console.error('更新汉字自定义失败:', error);
645
+            throw error;
646
+        }
647
+    }
648
+
649
+    /**
650
+     * 获取汉字自定义列表
651
+     * @param {Object} obj 查询参数
652
+     * @returns {Promise<Array>} 自定义列表
653
+     */
654
+    static async GetHanziCustomList(obj) {
655
+        try {
656
+            const sql = "select * from HanziWordUser where UserID=?";
657
+            return await query(sql, [obj.UserID]);
658
+        } catch (error) {
659
+            console.error('获取汉字自定义列表失败:', error);
660
+            throw error;
661
+        }
662
+    }
663
+
664
+    /**
665
+     * 获取古诗列表
666
+     * @param {Object} obj 查询参数
667
+     * @returns {Promise<Array>} 古诗列表
668
+     */
669
+    static async GetAncientPoetryList(obj) {
670
+        try {
671
+            const sql = `select ID,Category,Tag,Title,ImgUrl,Author,Dynasty,PeomContent,Translation 
672
+                        from AncientPoetry 
673
+                        where Flag=0 and HanziBookID=? 
674
+                        order by Sort,ID;`;
675
+            return await query(sql, [obj.BookID]);
676
+        } catch (error) {
677
+            console.error('获取古诗列表失败:', error);
678
+            throw error;
679
+        }
680
+    }
681
+
682
+    /**
683
+     * 更新古诗
684
+     * @param {Object} obj 更新参数
685
+     * @returns {Promise<Object>} 更新结果
686
+     */
687
+    static async UpdateAncientPoetry(obj) {
688
+        try {
689
+            const sql = "Update AncientPoetry SET ? where ID=?";
690
+            return await query(sql, [obj, obj.ID]);
691
+        } catch (error) {
692
+            console.error('更新古诗失败:', error);
693
+            throw error;
694
+        }
695
+    }
696
+
697
+    /**
698
+     * 获取汉字单元信息
699
+     * @param {Object} obj 查询参数
700
+     * @returns {Promise<Array>} 单元信息
701
+     */
702
+    static async GetHanziUnitInfo(obj) {
703
+        try {
704
+            const sql = "select * from HanziUnit where ID=?";
705
+            return await query(sql, [obj.UnitID]);
706
+        } catch (error) {
707
+            console.error('获取汉字单元信息失败:', error);
708
+            throw error;
709
+        }
710
+    }
711
+
712
+    /**
713
+     * 获取英语单元数据
714
+     * @param {Object} obj 查询参数
715
+     * @returns {Promise<Array>} 单元数据
716
+     */
717
+    static async GetEnglishUnitData(obj) {
718
+        try {
719
+            let sql = "select * from Words where BookID=? order by LessonID,Sort,ID;";
720
+            const values = [obj.BookID];
721
+
722
+            if (obj.LessonID) {
723
+                sql = "select * from Words where BookID in (?) and LessonID=? order by LessonID,Sort,ID;";
724
+                values.push(obj.LessonID);
725
+            }
726
+
727
+            return await query(sql, values);
728
+        } catch (error) {
729
+            console.error('获取英语单元数据失败:', error);
730
+            throw error;
731
+        }
732
+    }
733
+}
734
+
735
+export default Hanzi;

+ 0 - 9
src/model/mps.js

@@ -5,15 +5,6 @@ import moment from 'moment';
5 5
  * MPS (分数线) 模型
6 6
  */
7 7
 class MPS {
8
-
9
-    static async RunSql(param,sql) {
10
-        try {
11
-            return await query(sql,[param]);
12
-        } catch (error) {
13
-            console.error('sql执行失败:', error);
14
-            throw error;
15
-        }
16
-    }
17 8
     
18 9
     /**
19 10
      * 获取用户信息(通过OpenID)