@steedos-labs/plugin-workflow 3.0.63 → 3.0.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/designer/dist/amis-renderer/amis-renderer.css +1 -1
- package/designer/dist/amis-renderer/amis-renderer.js +1 -1
- package/designer/dist/assets/{index-DIAKZCeb.css → index-DvvBwwsG.css} +1 -1
- package/designer/dist/assets/{index-CugibT25.js → index-IqLl5PBH.js} +40 -40
- package/designer/dist/index.html +2 -2
- package/main/default/manager/uuflow_manager.js +53 -23
- package/main/default/objectTranslations/flows.zh-CN/flows.zh-CN.objectTranslation.yml +1 -1
- package/main/default/objects/flows/flows.object.yml +12 -3
- package/main/default/pages/page_instance_print.page.amis.json +19 -0
- package/package.json +1 -1
- package/public/amis-renderer/amis-renderer.css +1 -1
- package/public/amis-renderer/amis-renderer.js +1 -1
- package/src/instance_record_queue.js +47 -80
- package/src/rests/getPageSchema.js +1 -1
- package/src/timeout_auto_submit.js +7 -6
|
@@ -485,14 +485,11 @@ InstanceRecordQueue.Configure = function (options) {
|
|
|
485
485
|
|
|
486
486
|
// Universal send function
|
|
487
487
|
var _querySend = async function (doc) {
|
|
488
|
-
console.log(`[InstanceRecordQueue._querySend] 开始调用 sendDoc: docId=${doc._id}, insId=${doc.info.instance_id}`);
|
|
489
488
|
if (InstanceRecordQueue.sendDoc) {
|
|
490
489
|
try {
|
|
491
490
|
await InstanceRecordQueue.sendDoc(doc);
|
|
492
|
-
console.log(`[InstanceRecordQueue._querySend] sendDoc 执行完成: docId=${doc._id}`);
|
|
493
491
|
} catch (error) {
|
|
494
|
-
console.error(
|
|
495
|
-
console.error(`[InstanceRecordQueue._querySend] 错误堆栈: ${error.stack}`);
|
|
492
|
+
console.error(`${new Date().toISOString()} [InstanceRecordQueue._querySend] sendDoc 异常: docId=${doc._id}, error=${error.message}`);
|
|
496
493
|
throw error;
|
|
497
494
|
}
|
|
498
495
|
} else {
|
|
@@ -513,11 +510,9 @@ InstanceRecordQueue.Configure = function (options) {
|
|
|
513
510
|
|
|
514
511
|
if (options.sendInterval !== null) {
|
|
515
512
|
var sendDoc = async function (doc) {
|
|
516
|
-
console.log(`[InstanceRecordQueue.sendDoc-queue] 处理队列文档: docId=${doc._id}, insId=${doc.info.instance_id}`);
|
|
517
513
|
// Reserve doc
|
|
518
514
|
var now = +new Date();
|
|
519
515
|
var timeoutAt = now + options.sendTimeout;
|
|
520
|
-
console.log(`[InstanceRecordQueue.sendDoc-queue] 尝试 reserve 文档: docId=${doc._id}, now=${now}, timeoutAt=${timeoutAt}`);
|
|
521
516
|
var reserved = await InstanceRecordQueue.collection.update({
|
|
522
517
|
_id: doc._id,
|
|
523
518
|
sent: false, // xxx: need to make sure this is set on create
|
|
@@ -532,20 +527,16 @@ InstanceRecordQueue.Configure = function (options) {
|
|
|
532
527
|
|
|
533
528
|
// Make sure we only handle docs reserved by this instance
|
|
534
529
|
if (reserved) {
|
|
535
|
-
console.log(`[InstanceRecordQueue.sendDoc-queue] 文档 reserve 成功: docId=${doc._id}, 开始调用 serverSend`);
|
|
536
530
|
// Send
|
|
537
531
|
var result = await self.serverSend(doc);
|
|
538
|
-
console.log(`[InstanceRecordQueue.sendDoc-queue] serverSend 返回结果: docId=${doc._id}, result=${JSON.stringify(result)}`);
|
|
539
532
|
|
|
540
533
|
if (!options.keepDocs) {
|
|
541
534
|
// Pr. Default we will remove docs
|
|
542
|
-
console.log(`[InstanceRecordQueue.sendDoc-queue] keepDocs=false, 删除文档: docId=${doc._id}`);
|
|
543
535
|
await InstanceRecordQueue.collection.remove({
|
|
544
536
|
_id: doc._id
|
|
545
537
|
});
|
|
546
538
|
} else {
|
|
547
539
|
// Update
|
|
548
|
-
console.log(`[InstanceRecordQueue.sendDoc-queue] keepDocs=true, 设置 sent=true: docId=${doc._id}`);
|
|
549
540
|
await InstanceRecordQueue.collection.update({
|
|
550
541
|
_id: doc._id
|
|
551
542
|
}, {
|
|
@@ -565,9 +556,7 @@ InstanceRecordQueue.Configure = function (options) {
|
|
|
565
556
|
}; // EO sendDoc
|
|
566
557
|
|
|
567
558
|
sendWorker(async function () {
|
|
568
|
-
console.log(`[InstanceRecordQueue.sendWorker] 定时器触发,开始处理待发送文档...`);
|
|
569
559
|
if (isSendingDoc) {
|
|
570
|
-
console.log(`[InstanceRecordQueue.sendWorker] 上一次还在处理中,跳过本次轮询`);
|
|
571
560
|
return;
|
|
572
561
|
}
|
|
573
562
|
// Set send fence
|
|
@@ -577,7 +566,6 @@ InstanceRecordQueue.Configure = function (options) {
|
|
|
577
566
|
|
|
578
567
|
var now = +new Date();
|
|
579
568
|
|
|
580
|
-
console.log(`[InstanceRecordQueue.sendWorker] 查询待处理文档: batchSize=${batchSize}, now=${now}`);
|
|
581
569
|
// Find docs that are not being or already sent
|
|
582
570
|
var pendingDocs = await InstanceRecordQueue.collection.find({
|
|
583
571
|
$and: [
|
|
@@ -605,14 +593,13 @@ InstanceRecordQueue.Configure = function (options) {
|
|
|
605
593
|
},
|
|
606
594
|
limit: batchSize
|
|
607
595
|
}).toArray();
|
|
608
|
-
console.log(`[InstanceRecordQueue.sendWorker] 找到待处理文档数: ${pendingDocs.length}`);
|
|
609
596
|
|
|
610
597
|
for (const doc of pendingDocs) {
|
|
611
598
|
try {
|
|
612
|
-
console.log(
|
|
599
|
+
console.log(`${new Date().toISOString()} [InstanceRecordQueue.sendWorker] 处理文档: docId=${doc._id}, insId=${doc.info.instance_id}`);
|
|
613
600
|
await sendDoc(doc);
|
|
614
601
|
} catch (error) {
|
|
615
|
-
console.error(
|
|
602
|
+
console.error(`${new Date().toISOString()} [InstanceRecordQueue.sendWorker] 文档处理异常: docId=${doc._id}`);
|
|
616
603
|
console.error(error.stack);
|
|
617
604
|
console.log('InstanceRecordQueue: Could not send doc id: "' + doc._id + '", Error: ' + error.message);
|
|
618
605
|
await InstanceRecordQueue.collection.update({
|
|
@@ -628,7 +615,6 @@ InstanceRecordQueue.Configure = function (options) {
|
|
|
628
615
|
|
|
629
616
|
// Remove the send fence
|
|
630
617
|
isSendingDoc = false;
|
|
631
|
-
console.log(`[InstanceRecordQueue.sendWorker] 本次轮询完成,已处理 ${pendingDocs.length} 个文档`);
|
|
632
618
|
}, options.sendInterval || 15000); // Default every 15th sec
|
|
633
619
|
} else {
|
|
634
620
|
if (InstanceRecordQueue.debug) {
|
|
@@ -980,6 +966,10 @@ InstanceRecordQueue.syncValues = async function (field_map_back, values, ins, ob
|
|
|
980
966
|
var relatedObjectName = key;
|
|
981
967
|
var relatedObjectValues = [];
|
|
982
968
|
var relatedObjectFields = await getObjectFields(relatedObjectName)
|
|
969
|
+
if (!values[tableCode] || !Array.isArray(values[tableCode])) {
|
|
970
|
+
console.warn(`[InstanceRecordQueue.syncValues] tableToRelated: values['${tableCode}'] is empty or not an array, skipping related object '${relatedObjectName}'`);
|
|
971
|
+
continue;
|
|
972
|
+
}
|
|
983
973
|
for (const tableValueItem of values[tableCode]) {
|
|
984
974
|
let relateRecord;
|
|
985
975
|
if (tableValueItem._id) {
|
|
@@ -1099,7 +1089,7 @@ InstanceRecordQueue.sendDoc = async function (doc) {
|
|
|
1099
1089
|
const docId = doc._id;
|
|
1100
1090
|
const insId = doc.info.instance_id;
|
|
1101
1091
|
|
|
1102
|
-
console.log(
|
|
1092
|
+
console.log(`${new Date().toISOString()} [InstanceRecordQueue.sendDoc] 开始处理: insId=${insId}`);
|
|
1103
1093
|
|
|
1104
1094
|
if (InstanceRecordQueue.debug) {
|
|
1105
1095
|
console.log("sendDoc:");
|
|
@@ -1107,7 +1097,6 @@ InstanceRecordQueue.sendDoc = async function (doc) {
|
|
|
1107
1097
|
}
|
|
1108
1098
|
|
|
1109
1099
|
var records = doc.info.records;
|
|
1110
|
-
console.log(`[InstanceRecordQueue.sendDoc] 文档中的记录数: ${records ? records.length : 0}`);
|
|
1111
1100
|
|
|
1112
1101
|
var fields = {
|
|
1113
1102
|
flow: 1,
|
|
@@ -1125,18 +1114,15 @@ InstanceRecordQueue.sendDoc = async function (doc) {
|
|
|
1125
1114
|
fields[f] = 1;
|
|
1126
1115
|
})
|
|
1127
1116
|
|
|
1128
|
-
console.log(`[InstanceRecordQueue.sendDoc] 查询实例: insId=${insId}`);
|
|
1129
1117
|
var ins = await objectql.getObject('instances').findOne(insId, {
|
|
1130
1118
|
fields: fields
|
|
1131
1119
|
})
|
|
1132
1120
|
|
|
1133
1121
|
if (!ins) {
|
|
1134
|
-
console.error(
|
|
1122
|
+
console.error(`${new Date().toISOString()} [InstanceRecordQueue.sendDoc] 实例不存在: insId=${insId}`);
|
|
1135
1123
|
throw new Error(`Instance not found: ${insId}`);
|
|
1136
1124
|
}
|
|
1137
1125
|
|
|
1138
|
-
console.log(`[InstanceRecordQueue.sendDoc] 获取实例成功: insId=${insId}, 实例状态=${ins.state}, 实例名称=${ins.name}`);
|
|
1139
|
-
|
|
1140
1126
|
var values = ins.values,
|
|
1141
1127
|
spaceId = ins.space;
|
|
1142
1128
|
|
|
@@ -1146,21 +1132,18 @@ InstanceRecordQueue.sendDoc = async function (doc) {
|
|
|
1146
1132
|
}
|
|
1147
1133
|
|
|
1148
1134
|
const flowId = ins.flow
|
|
1149
|
-
console.log(`[InstanceRecordQueue.sendDoc] 查询流程: flowId=${flowId}`);
|
|
1150
1135
|
const flow = await objectql.getObject('flows').findOne(flowId, { fields: { enable_amisform: 1 } })
|
|
1151
1136
|
|
|
1152
1137
|
if (!flow) {
|
|
1153
|
-
console.error(
|
|
1138
|
+
console.error(`${new Date().toISOString()} [InstanceRecordQueue.sendDoc] 流程不存在: flowId=${flowId}`);
|
|
1154
1139
|
throw new Error(`Flow not found: ${flowId}`);
|
|
1155
1140
|
}
|
|
1156
1141
|
|
|
1157
1142
|
const enableAmisform = flow.enable_amisform
|
|
1158
|
-
console.log(`[InstanceRecordQueue.sendDoc] 流程启用Amisform: ${enableAmisform}`);
|
|
1159
1143
|
|
|
1160
1144
|
if (records && !_.isEmpty(records)) {
|
|
1161
1145
|
// 此情况属于从creator中发起审批,或者已经从Apps同步到了creator
|
|
1162
1146
|
var objectName = records[0].o;
|
|
1163
|
-
console.log(`[InstanceRecordQueue.sendDoc] 检测到记录: objectName=${objectName}, recordIds=${JSON.stringify(records[0].ids)}`);
|
|
1164
1147
|
|
|
1165
1148
|
var ow = await objectql.getObject('object_workflows').findOne({
|
|
1166
1149
|
object_name: objectName,
|
|
@@ -1168,39 +1151,32 @@ InstanceRecordQueue.sendDoc = async function (doc) {
|
|
|
1168
1151
|
});
|
|
1169
1152
|
|
|
1170
1153
|
if (!ow) {
|
|
1171
|
-
console.error(
|
|
1154
|
+
console.error(`${new Date().toISOString()} [InstanceRecordQueue.sendDoc] 对象工作流配置不存在: objectName=${objectName}, flowId=${ins.flow}`);
|
|
1172
1155
|
throw new Error(`ObjectWorkflow not found for object=${objectName}, flow=${ins.flow}`);
|
|
1173
1156
|
}
|
|
1174
1157
|
|
|
1175
|
-
console.log(
|
|
1158
|
+
console.log(`${new Date().toISOString()} [InstanceRecordQueue.sendDoc] 同步到对象: objectName=${objectName}`);
|
|
1176
1159
|
|
|
1177
1160
|
var objectCollection = objectql.getObject(objectName),
|
|
1178
1161
|
sync_attachment = ow.sync_attachment;
|
|
1179
1162
|
syncDirection = ow.sync_direction || 'both';
|
|
1180
|
-
console.log(`[InstanceRecordQueue.sendDoc] 同步方向: ${syncDirection}, 同步附件: ${sync_attachment}`);
|
|
1181
1163
|
|
|
1182
1164
|
var objectInfo = await getObjectConfig(objectName);
|
|
1183
|
-
console.log(`[InstanceRecordQueue.sendDoc] 对象配置获取成功: objectName=${objectName}, 字段数=${Object.keys(objectInfo.fields || {}).length}`);
|
|
1184
1165
|
|
|
1185
1166
|
const recordsToProcess = await objectFind(objectName, { filters: [['_id', 'in', records[0].ids]] });
|
|
1186
|
-
console.log(`[InstanceRecordQueue.sendDoc] 查询得到的记录数: ${recordsToProcess.length}`);
|
|
1187
1167
|
|
|
1188
1168
|
for (const record of recordsToProcess) {
|
|
1189
1169
|
const recordId = record._id;
|
|
1190
|
-
console.log(`[InstanceRecordQueue.sendDoc] 处理记录: recordId=${recordId}`);
|
|
1191
1170
|
try {
|
|
1192
1171
|
if (!['both', 'ins_to_obj'].includes(syncDirection)) {
|
|
1193
|
-
console.log(`[InstanceRecordQueue.sendDoc] 跳过记录,同步方向不匹配: ${syncDirection}`);
|
|
1194
1172
|
continue;
|
|
1195
1173
|
}
|
|
1196
1174
|
var lock_record_after_approval = ow.lock_record_after_approval || false;
|
|
1197
|
-
console.log(`[InstanceRecordQueue.sendDoc] 同步值: recordId=${recordId}, flowId=${ins.flow}`);
|
|
1198
1175
|
var syncValues = await InstanceRecordQueue.syncValues(ow.field_map_back, values, ins, objectInfo, ow.field_map_back_script, record, enableAmisform)
|
|
1199
1176
|
var setObj = syncValues.mainObjectValue;
|
|
1200
1177
|
|
|
1201
|
-
console.log(`[InstanceRecordQueue.sendDoc] 字段映射结果: recordId=${recordId}, 映射字段数=${Object.keys(setObj).length}`);
|
|
1202
1178
|
if (InstanceRecordQueue.debug) {
|
|
1203
|
-
console.log(
|
|
1179
|
+
console.log(`${new Date().toISOString()} [InstanceRecordQueue.sendDoc] 映射值详情:`, JSON.stringify(setObj, null, 2));
|
|
1204
1180
|
}
|
|
1205
1181
|
|
|
1206
1182
|
var instance_state = ins.state;
|
|
@@ -1212,13 +1188,10 @@ InstanceRecordQueue.sendDoc = async function (doc) {
|
|
|
1212
1188
|
}
|
|
1213
1189
|
setObj['instances.0.state'] = setObj.instance_state = instance_state;
|
|
1214
1190
|
|
|
1215
|
-
console.log(`[InstanceRecordQueue.sendDoc] 更新记录: recordId=${recordId}, instanceState=${instance_state}`);
|
|
1216
1191
|
await objectUpdate(objectName, record._id, setObj);
|
|
1217
|
-
console.log(`[InstanceRecordQueue.sendDoc] 记录更新成功: recordId=${recordId}`);
|
|
1218
1192
|
|
|
1219
1193
|
var relatedObjects = await getRelateds(ow.object_name);
|
|
1220
1194
|
var relatedObjectsValue = syncValues.relatedObjectsValue;
|
|
1221
|
-
console.log(`[InstanceRecordQueue.sendDoc] 处理关联对象: 数量=${relatedObjects.length}`);
|
|
1222
1195
|
await InstanceRecordQueue.syncRelatedObjectsValue(record._id, relatedObjects, relatedObjectsValue, spaceId, ins);
|
|
1223
1196
|
|
|
1224
1197
|
// 以最终申请单附件为准,旧的record中附件删除
|
|
@@ -1230,7 +1203,6 @@ InstanceRecordQueue.sendDoc = async function (doc) {
|
|
|
1230
1203
|
ids: [record._id]
|
|
1231
1204
|
}
|
|
1232
1205
|
});
|
|
1233
|
-
console.log(`[InstanceRecordQueue.sendDoc] 删除旧附件: recordId=${recordId}`);
|
|
1234
1206
|
|
|
1235
1207
|
const cfsColl = await getCollection('cfs.files.filerecord');
|
|
1236
1208
|
await cfsColl.deleteMany({
|
|
@@ -1238,16 +1210,11 @@ InstanceRecordQueue.sendDoc = async function (doc) {
|
|
|
1238
1210
|
})
|
|
1239
1211
|
|
|
1240
1212
|
// 同步新附件
|
|
1241
|
-
console.log(`[InstanceRecordQueue.sendDoc] 同步新附件: recordId=${recordId}, insId=${insId}`);
|
|
1242
1213
|
await InstanceRecordQueue.syncAttach(sync_attachment, insId, record.space, record._id, objectName);
|
|
1243
1214
|
// 执行公式
|
|
1244
|
-
console.log(`[InstanceRecordQueue.sendDoc] 执行公式: recordId=${recordId}`);
|
|
1245
1215
|
await runQuoted(objectName, record._id);
|
|
1246
|
-
console.log(`[InstanceRecordQueue.sendDoc] 记录处理完成: recordId=${recordId}`);
|
|
1247
1216
|
} catch (error) {
|
|
1248
|
-
console.error(
|
|
1249
|
-
console.error(`[InstanceRecordQueue.sendDoc] 错误信息:`, error.message);
|
|
1250
|
-
console.error(`[InstanceRecordQueue.sendDoc] 错误堆栈:`, error.stack);
|
|
1217
|
+
console.error(`${new Date().toISOString()} [InstanceRecordQueue.sendDoc] 记录处理失败: recordId=${recordId}, error=${error.message}`);
|
|
1251
1218
|
|
|
1252
1219
|
await objectUpdateMany(objectName, [['_id', '=', record._id], ['instances._id', '=', insId]], {
|
|
1253
1220
|
'instances.$.state': 'pending',
|
|
@@ -1272,38 +1239,31 @@ InstanceRecordQueue.sendDoc = async function (doc) {
|
|
|
1272
1239
|
}
|
|
1273
1240
|
} else {
|
|
1274
1241
|
// 此情况属于从apps中发起审批
|
|
1275
|
-
console.log(`[InstanceRecordQueue.sendDoc] 从Apps发起的审批,创建新记录`);
|
|
1276
1242
|
const owsColl = await getCollection('object_workflows');
|
|
1277
1243
|
const ows = await owsColl.find({
|
|
1278
1244
|
flow_id: ins.flow
|
|
1279
1245
|
}).toArray();
|
|
1280
1246
|
|
|
1281
|
-
console.log(`[InstanceRecordQueue.sendDoc] 找到的对象工作流配置数: ${ows.length}`);
|
|
1282
1247
|
for (const ow of ows) {
|
|
1283
1248
|
const objectName = ow.object_name;
|
|
1284
|
-
console.log(`[InstanceRecordQueue.sendDoc] 处理对象工作流: objectName=${objectName}`);
|
|
1285
1249
|
try {
|
|
1286
1250
|
var sync_attachment = ow.sync_attachment,
|
|
1287
1251
|
newRecordId = await makeNewID(ow.object_name),
|
|
1288
1252
|
syncDirection = ow.sync_direction || 'both';
|
|
1289
1253
|
lock_record_after_approval = ow.lock_record_after_approval || false;
|
|
1254
|
+
var recordInserted = false;
|
|
1290
1255
|
|
|
1291
|
-
console.log(
|
|
1256
|
+
console.log(`${new Date().toISOString()} [InstanceRecordQueue.sendDoc] 新建记录: objectName=${objectName}, recordId=${newRecordId}`);
|
|
1292
1257
|
|
|
1293
1258
|
if (!['both', 'ins_to_obj'].includes(syncDirection)) {
|
|
1294
|
-
console.log(`[InstanceRecordQueue.sendDoc] 跳过对象工作流,同步方向不匹配: ${syncDirection}`);
|
|
1295
1259
|
continue;
|
|
1296
1260
|
}
|
|
1297
1261
|
|
|
1298
1262
|
var objectInfo = await getObjectConfig(ow.object_name);
|
|
1299
|
-
console.log(`[InstanceRecordQueue.sendDoc] 获取对象配置: objectName=${objectName}, 字段数=${Object.keys(objectInfo.fields || {}).length}`);
|
|
1300
1263
|
|
|
1301
|
-
console.log(`[InstanceRecordQueue.sendDoc] 同步字段值: objectName=${objectName}`);
|
|
1302
1264
|
var syncValues = await InstanceRecordQueue.syncValues(ow.field_map_back, values, ins, objectInfo, ow.field_map_back_script, null, enableAmisform);
|
|
1303
1265
|
var newObj = syncValues.mainObjectValue;
|
|
1304
1266
|
|
|
1305
|
-
console.log(`[InstanceRecordQueue.sendDoc] 字段映射完成: objectName=${objectName}, 映射字段数=${Object.keys(newObj).length}`);
|
|
1306
|
-
|
|
1307
1267
|
newObj.space = spaceId;
|
|
1308
1268
|
newObj.name = newObj.name || ins.name;
|
|
1309
1269
|
|
|
@@ -1325,6 +1285,7 @@ InstanceRecordQueue.sendDoc = async function (doc) {
|
|
|
1325
1285
|
newObj.modified_by = ins.applicant;
|
|
1326
1286
|
|
|
1327
1287
|
var r = await objectInsert(ow.object_name, newObj);
|
|
1288
|
+
recordInserted = !!r;
|
|
1328
1289
|
const insColl = await getCollection('instances');
|
|
1329
1290
|
if (r) {
|
|
1330
1291
|
await insColl.update({_id: ins._id}, {
|
|
@@ -1355,32 +1316,38 @@ InstanceRecordQueue.sendDoc = async function (doc) {
|
|
|
1355
1316
|
} catch (error) {
|
|
1356
1317
|
console.error(error);
|
|
1357
1318
|
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1319
|
+
if (recordInserted) {
|
|
1320
|
+
try {
|
|
1321
|
+
await objectRemove(ow.object_name, newRecordId);
|
|
1322
|
+
const insColl = await getObject('instances');
|
|
1323
|
+
await insColl.update(ins._id, {
|
|
1324
|
+
$pull: {
|
|
1325
|
+
record_ids: {
|
|
1326
|
+
o: objectName,
|
|
1327
|
+
ids: [newRecordId]
|
|
1328
|
+
}
|
|
1329
|
+
},
|
|
1330
|
+
$set: {
|
|
1331
|
+
modified: new Date()
|
|
1332
|
+
}
|
|
1333
|
+
});
|
|
1371
1334
|
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1335
|
+
const cfColl = await getCollection('cms_files');
|
|
1336
|
+
await cfColl.deleteMany({
|
|
1337
|
+
'parent': {
|
|
1338
|
+
o: objectName,
|
|
1339
|
+
ids: [newRecordId]
|
|
1340
|
+
}
|
|
1341
|
+
});
|
|
1379
1342
|
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1343
|
+
const cfsColl = await getCollection('cfs.files.filerecord');
|
|
1344
|
+
await cfsColl.deleteMany({
|
|
1345
|
+
'metadata.record_id': newRecordId
|
|
1346
|
+
})
|
|
1347
|
+
} catch (cleanupError) {
|
|
1348
|
+
console.error(`${new Date().toISOString()} [InstanceRecordQueue.sendDoc] 清理记录失败: objectName=${objectName}, recordId=${newRecordId}`, cleanupError);
|
|
1349
|
+
}
|
|
1350
|
+
}
|
|
1384
1351
|
throw error;
|
|
1385
1352
|
}
|
|
1386
1353
|
}
|
|
@@ -16,7 +16,7 @@ module.exports = {
|
|
|
16
16
|
return {};
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
// 直接 broker.call page.getMeSchema
|
|
19
|
+
// 直接 broker.call page.getMeSchema 获取页面 schema
|
|
20
20
|
// 参考 steedos-platform/services/service-pages/main/default/routes/page_schema.router.js
|
|
21
21
|
// flow_selector 这个 page 的 type 固定为 'page'
|
|
22
22
|
const result = await objectql.getSteedosSchema().broker.call('page.getMeSchema', {
|
|
@@ -35,7 +35,7 @@ TimeoutAutoSubmit.Configure = function (options = {}) {
|
|
|
35
35
|
_job = null;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
console.log(
|
|
38
|
+
console.log(`${new Date().toISOString()} [timeout_auto_submit] Configured with interval: ${sendInterval}ms`);
|
|
39
39
|
|
|
40
40
|
// Convert milliseconds interval to a cron-compatible schedule using node-schedule's RecurrenceRule
|
|
41
41
|
const intervalSeconds = Math.max(Math.round(sendInterval / 1000), 1);
|
|
@@ -56,14 +56,15 @@ TimeoutAutoSubmit.Configure = function (options = {}) {
|
|
|
56
56
|
_isProcessing = true;
|
|
57
57
|
const startTime = Date.now();
|
|
58
58
|
try {
|
|
59
|
-
console.log('[timeout_auto_submit] Starting timeout auto-submit check...');
|
|
60
59
|
await UUFlowManager.timeoutAutoSubmit();
|
|
61
60
|
const duration = Date.now() - startTime;
|
|
62
|
-
|
|
61
|
+
if (duration > 5000) {
|
|
62
|
+
console.log(`${new Date().toISOString()} [timeout_auto_submit] Completed in ${duration}ms`);
|
|
63
|
+
}
|
|
63
64
|
} catch (error) {
|
|
64
65
|
const duration = Date.now() - startTime;
|
|
65
|
-
console.error(
|
|
66
|
-
console.error(
|
|
66
|
+
console.error(`${new Date().toISOString()} [timeout_auto_submit] Fatal error after ${duration}ms: ${error.message}`);
|
|
67
|
+
console.error(`${new Date().toISOString()} [timeout_auto_submit] Stack trace:`, error.stack);
|
|
67
68
|
} finally {
|
|
68
69
|
_isProcessing = false;
|
|
69
70
|
}
|
|
@@ -79,7 +80,7 @@ TimeoutAutoSubmit.Stop = function () {
|
|
|
79
80
|
_job = null;
|
|
80
81
|
}
|
|
81
82
|
_isProcessing = false;
|
|
82
|
-
console.log(
|
|
83
|
+
console.log(`${new Date().toISOString()} [timeout_auto_submit] Stopped`);
|
|
83
84
|
};
|
|
84
85
|
|
|
85
86
|
module.exports = TimeoutAutoSubmit;
|