|
|
@@ -9,14 +9,14 @@ const query = async (sql, params=[]) => (await db.query(sql,params)).rows;
|
|
|
const one = async (sql,params=[]) => (await query(sql,params))[0];
|
|
|
const complete = (id) => query('SELECT xiaoshu_complete_review($1,$2)',['c',id]);
|
|
|
async function task(id, day, extra={}) {
|
|
|
- const {coach='10',status='0',study='100',student='20'}=extra;
|
|
|
- await query('INSERT INTO "MemoryPracticeRecord" ("objectId","company","id","plid","yhid","xxjlid","kywrq","kywsj","kcid","fxzt","wcsj") VALUES ($1,\'c\',1,$2,$3,$4,$5,$5,30,$6,\'2026-08-01 10:00:00\')',[id,coach,student,study,day,status]);
|
|
|
+ const {coach='10',status='0',study='100',student='20',sourceKey=''}=extra;
|
|
|
+ await query('INSERT INTO "MemoryPracticeRecord" ("objectId","company","sourceKey","id","plid","yhid","xxjlid","kywrq","kywsj","kcid","fxzt","wcsj") VALUES ($1,\'c\',$2,1,$3,$4,$5,$6,$6,30,$7,\'2026-08-01 10:00:00\')',[id,sourceKey,coach,student,study,day,status]);
|
|
|
}
|
|
|
before(async()=>{
|
|
|
await db.exec(`CREATE TABLE "_User" ("objectId" text,"company" text,"legacyUserId" double precision,"legacyUserData" jsonb,"realName" text,"nickname" text,"username" text);
|
|
|
CREATE TABLE "Node" ("company" text,"nodeId" double precision,"nodeName" text);
|
|
|
CREATE TABLE "CommonModel" ("objectId" text,"company" text,"modelId" double precision,"generalId" double precision);
|
|
|
- CREATE TABLE "MemoryPracticeRecord" ("objectId" text PRIMARY KEY,"company" text,"id" double precision,"plid" text,"yhid" text,"xxjlid" text,"kywrq" text,"kywsj" text,"kcid" double precision,"fxzt" text,"wcsj" text,"updatedAt" timestamptz);
|
|
|
+ CREATE TABLE "MemoryPracticeRecord" ("objectId" text PRIMARY KEY,"company" text,"sourceKey" text,"id" double precision,"plid" text,"yhid" text,"xxjlid" text,"kywrq" text,"kywsj" text,"kcid" double precision,"fxzt" text,"wcsj" text,"updatedAt" timestamptz);
|
|
|
CREATE TABLE "PayrollBatch" ("objectId" text PRIMARY KEY,"company" text,"month" text,"status" text,"baseAmount" double precision,"adjustmentAmount" double precision,"payableAmount" double precision,"totalHours" double precision,"lessonCount" double precision);
|
|
|
CREATE TABLE "PayrollLine" ("objectId" text PRIMARY KEY,"company" text,"batchId" text,"kind" text,"excluded" boolean,"coachId" double precision,"coachName" text,"studentName" text,"courseName" text,"storeId" double precision,"storeName" text,"amount" double precision,"rateAmount" double precision,"durationHours" double precision,"originalMonth" text,"settlementMonth" text,"lessonAt" timestamptz,"exception" text,"classType" double precision,"courseCategoryName" text);
|
|
|
INSERT INTO "_User" VALUES ('teacher','c',10,'{"ParentUserID":40}','老师','','teacher'),('student','c',20,'{}','学生','','student'),('store','c',40,'{}','门店','','store');
|
|
|
@@ -51,6 +51,12 @@ test('历史重复来源和缺失老师、来源的记录不计薪',async()=>{
|
|
|
test('已完成导入任务进入历史待核对',async()=>{
|
|
|
await task('import','2026-09-06',{status:'1'});await complete('import');assert.equal((await one('SELECT "status" FROM "ReviewReward" WHERE "taskId"=\'import\'')).status,'historical');
|
|
|
});
|
|
|
+test('旧系统同步完成状态保留原完成时间且不自动计薪',async()=>{
|
|
|
+ await task('legacy-sync','2026-09-08',{sourceKey:'legacy:model:60:general:800'});
|
|
|
+ await query('UPDATE "MemoryPracticeRecord" SET "fxzt"=\'1\',"wcsj"=\'2026-09-09 20:30:00\' WHERE "objectId"=\'legacy-sync\'');
|
|
|
+ const reward=await one('SELECT * FROM "ReviewReward" WHERE "taskId"=\'legacy-sync\''),record=await one('SELECT "wcsj" FROM "MemoryPracticeRecord" WHERE "objectId"=\'legacy-sync\'');
|
|
|
+ assert.equal(reward.status,'historical');assert.equal(Number(reward.amount),0);assert.equal(record.wcsj,'2026-09-09 20:30:00');
|
|
|
+});
|
|
|
test('奖励插入失败时完成状态一起回滚',async()=>{
|
|
|
await task('rollback','2026-09-07');
|
|
|
await db.exec(`CREATE FUNCTION test_fail_reward() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN IF NEW."taskId"='rollback' THEN RAISE EXCEPTION 'injected failure'; END IF; RETURN NEW; END $$; CREATE TRIGGER test_fail_reward BEFORE INSERT ON "ReviewReward" FOR EACH ROW EXECUTE FUNCTION test_fail_reward();`);
|