|
|
@@ -38,6 +38,7 @@ DECLARE a "CourseAppointment"; c "CommonModel"; l "LessonRecord"; report "Lesson
|
|
|
previous "LessonWorkflowCommand"; result jsonb; lesson_count int; cost jsonb; ledger_table text; evidence int;
|
|
|
study record; study_words jsonb; study_course text; found_study boolean=false; words jsonb='[]'; review_date text; review_key text; review_id numeric; review_object text;
|
|
|
total_reviews int; completed_reviews int; report_id text; was_charged boolean=false;
|
|
|
+ notes_lesson boolean; study_id numeric; study_general_id numeric; study_object text;
|
|
|
BEGIN
|
|
|
IF request_key IS NULL OR length(request_key)<10 OR length(request_key)>160 THEN RAISE EXCEPTION '缺少有效请求编号';END IF;
|
|
|
IF NOT EXISTS(SELECT 1 FROM "_User" WHERE "objectId"=actor AND company=co AND "legacyUserId"=actor_uid AND "legacyGroupId"=3 AND NOT COALESCE("isDisabled",false)) THEN RAISE EXCEPTION '用户身份已失效';END IF;
|
|
|
@@ -65,6 +66,21 @@ BEGIN
|
|
|
IF a.dszt='30' AND report."objectId" IS NOT NULL THEN RETURN jsonb_build_object('GeneralID',gid,'status',30,'unchanged',true,'feedbackId',report."objectId",'feedbackStatus',report."feedbackStatus",'teacherPay',(SELECT COALESCE(lr."teacherPaySnapshot",a."teacherPaySnapshot") FROM "LessonRecord" lr WHERE lr.company=co AND lr."objectId"=report."lessonId"),'payStatus',CASE WHEN (SELECT COALESCE(lr."teacherPaySnapshot",a."teacherPaySnapshot") FROM "LessonRecord" lr WHERE lr.company=co AND lr."objectId"=report."lessonId") IS NULL THEN 'pending' ELSE 'earned' END);END IF;
|
|
|
IF expected IS NULL OR a."updatedAt" IS DISTINCT FROM expected THEN RAISE EXCEPTION '预约已更新,请刷新详情后重试';END IF;
|
|
|
IF a.dszt NOT IN ('10','11','20') THEN RAISE EXCEPTION '请先开始课程';END IF;
|
|
|
+ -- Notes lessons have a real source record even when there is no vocabulary batch.
|
|
|
+ notes_lesson=COALESCE(a."courseCategoryKey" IN ('primary_writing','middle_writing','high_writing'),false);
|
|
|
+ IF notes_lesson AND NOT EXISTS(
|
|
|
+ SELECT 1 FROM "DailyStudyRecord" d JOIN "CommonModel" sc ON sc.company=d.company AND sc."modelId"=56 AND sc."itemId"=d.id AND sc.status=99
|
|
|
+ WHERE d.company=co AND d.dsid::text=gid AND d."userId"::text=a.szyh::text AND COALESCE(to_jsonb(d)->>'recordScope','')<>'lesson-alias'
|
|
|
+ ) THEN
|
|
|
+ study_id=nextval('xiaoshu_business_id');study_general_id=nextval('xiaoshu_business_id');study_object=xs_object_id();
|
|
|
+ INSERT INTO "DailyStudyRecord" SELECT * FROM jsonb_populate_record(NULL::"DailyStudyRecord",jsonb_build_object(
|
|
|
+ 'objectId',study_object,'company',co,'id',study_id,'createdAt',now(),'updatedAt',now(),'sourceKey','cloud:lesson-study:'||gid,
|
|
|
+ 'userId',a.szyh::numeric,'pl',a.pl,'dsid',gid,'recordScope','lesson','studyVersion',0,'dqrq',to_char(now() AT TIME ZONE 'Asia/Shanghai','YYYYMMDD'),
|
|
|
+ 'xxqs','[]','learned',0,'ygg',0,'djq',0,'con','语法写作课笔记复习'));
|
|
|
+ PERFORM xs_insert('CommonModel',jsonb_build_object('objectId',xs_object_id(),'company',co,'generalId',study_general_id,'itemId',study_id,
|
|
|
+ 'modelId',56,'nodeId',291,'tableName','ZL_C_ss','title','语法写作课学习记录','status',99,'hits',0,'createdAt',now(),'updatedAt',now(),
|
|
|
+ 'sourceKey','cloud:lesson-study:'||gid,'teachingManaged',true));
|
|
|
+ END IF;
|
|
|
-- Versioned batches and completion serialize on the same xs-credit lock.
|
|
|
IF to_regclass('"LessonStudyBatch"') IS NOT NULL THEN
|
|
|
IF EXISTS(SELECT 1 FROM "LessonStudyBatch" WHERE company=co AND "orderId"=gid AND status='draft') THEN RAISE EXCEPTION '还有未确认的学习批次,请先确认掌握状态或放弃该批次'; END IF;
|
|
|
@@ -74,6 +90,10 @@ BEGIN
|
|
|
UPDATE "DailyStudyRecord" SET fxrl=CASE WHEN COALESCE(learned,0)>0 THEN (SELECT string_agg(to_char((now() AT TIME ZONE 'Asia/Shanghai')::date+offset_days,'YYYYMMDD'),',' ORDER BY offset_days) FROM unnest(ARRAY[1,2,3,5,7,9,11,14,17,21]) offset_days) ELSE '' END WHERE company=co AND dsid::text=gid AND "recordScope"='lesson';
|
|
|
END IF;
|
|
|
END IF;
|
|
|
+ IF notes_lesson THEN
|
|
|
+ UPDATE "DailyStudyRecord" d SET fxrl=(SELECT string_agg(to_char((now() AT TIME ZONE 'Asia/Shanghai')::date+offset_days,'YYYYMMDD'),',' ORDER BY offset_days) FROM unnest(ARRAY[1,2,3,5,7,9,11,14,17,21]) offset_days)
|
|
|
+ WHERE d.company=co AND d.dsid::text=gid AND d."userId"::text=a.szyh::text AND COALESCE(to_jsonb(d)->>'recordScope','')<>'lesson-alias';
|
|
|
+ END IF;
|
|
|
SELECT count(*) INTO lesson_count FROM "LessonRecord" WHERE company=co AND yyds::text=gid;
|
|
|
IF lesson_count>1 THEN RAISE EXCEPTION '历史凭据存在重复上课记录,请由后台核对';END IF;
|
|
|
SELECT * INTO l FROM "LessonRecord" WHERE company=co AND yyds::text=gid LIMIT 1;
|
|
|
@@ -107,7 +127,7 @@ BEGIN
|
|
|
study_words=COALESCE(NULLIF(study.xxqs,'')::jsonb,'[]');
|
|
|
IF jsonb_typeof(study_words)<>'array' THEN RAISE EXCEPTION '课堂学习记录格式异常,请核对后重试';END IF;
|
|
|
words=words||study_words;study_course=COALESCE(study.study_course_id,a.kcid);
|
|
|
- IF jsonb_array_length(study_words)>0 THEN
|
|
|
+ IF jsonb_array_length(study_words)>0 OR notes_lesson THEN
|
|
|
FOR review_date IN SELECT DISTINCT value FROM unnest(string_to_array(COALESCE(study.fxrl,''),',')) value WHERE value ~ '^\d{8}$' LIMIT 15 LOOP
|
|
|
review_key='cloud:e_order_update:'||gid||CASE WHEN NULLIF(to_jsonb(study)->>'bindingId','') IS NOT NULL AND (to_jsonb(study)->>'bindingId') IS DISTINCT FROM a."bindingId" THEN ':study:'||study.study_general_id ELSE '' END||':review:'||review_date;
|
|
|
SELECT id,"objectId" INTO review_id,review_object FROM "MemoryPracticeRecord" WHERE company=co AND "sourceKey"=review_key LIMIT 1;
|