ow
This commit is contained in:
1 parent
d97a8884aa
commit
e9af73007e
4 files changed
+37
-67
No files matched your search
@@ -13,6 +13,7 @@ using CloudBuilder.Security.Policy;
|
|||||||
using CloudBuilder.Security.Service;
|
using CloudBuilder.Security.Service;
|
||||||
using CloudBuilder.Security.Utility;
|
using CloudBuilder.Security.Utility;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -791,50 +792,18 @@ namespace CloudBuilder.Master.Service
|
|||||||
throw new ValidatedException("您没有删除权限.");
|
throw new ValidatedException("您没有删除权限.");
|
||||||
}
|
}
|
||||||
|
|
||||||
repository.DeleteNow(ent);
|
// 整谱级联按 TreeId 集合式删除(三条 DELETE ... WHERE tree_id),取代旧「逐人递归删」:
|
||||||
|
// 大谱(数千族员)下递归对每人各发 SELECT+DELETE,单事务内上万次往返直接超时;
|
||||||
|
// 且旧逻辑只删了始祖一条 person,旁系 person 全遗留成孤儿。三表都带 tree_id,一把删净。
|
||||||
|
IRepository<FamilyTreeSpouseMapEntity> repositorySpouse = repository.GetRepository<IRepository<FamilyTreeSpouseMapEntity>>();
|
||||||
|
IRepository<FamilyTreeChildrenMapEntity> repositoryChild = repository.GetRepository<IRepository<FamilyTreeChildrenMapEntity>>();
|
||||||
IRepository<FamilyPersonEntity> repositoryPerson = repository.GetRepository<IRepository<FamilyPersonEntity>>();
|
IRepository<FamilyPersonEntity> repositoryPerson = repository.GetRepository<IRepository<FamilyPersonEntity>>();
|
||||||
FamilyPersonEntity familyPerson;
|
|
||||||
|
|
||||||
familyPerson = repositoryPerson.DetachedEntities.Where(x => x.PersonId == ent.AncestorPersonId).FirstOrDefault()!;
|
repositorySpouse.Entities.Where(x => x.TreeId == key).ExecuteDelete();
|
||||||
if (familyPerson != null)
|
repositoryChild.Entities.Where(x => x.TreeId == key).ExecuteDelete();
|
||||||
{
|
repositoryPerson.Entities.Where(x => x.TreeId == key).ExecuteDelete();
|
||||||
repositoryPerson.DeleteNow(familyPerson);
|
|
||||||
}
|
|
||||||
|
|
||||||
DeleteSpouses(ent.AncestorPersonId);
|
repository.DeleteNow(ent);
|
||||||
DeleteChildrens(ent.AncestorPersonId);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DeleteSpouses(string personId)
|
|
||||||
{
|
|
||||||
IRepository<FamilyTreeSpouseMapEntity> repositoryMap = repository.GetRepository<IRepository<FamilyTreeSpouseMapEntity>>();
|
|
||||||
|
|
||||||
FamilyTreeSpouseMapEntity[] olds = repositoryMap.Entities.Where(x => x.PersonId == personId).ToArray();
|
|
||||||
|
|
||||||
if (olds != null && olds.Length > 0)
|
|
||||||
{
|
|
||||||
repositoryMap.DeleteNow(olds);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DeleteChildrens(string personId)
|
|
||||||
{
|
|
||||||
IRepository<FamilyTreeChildrenMapEntity> repositoryMap = repository.GetRepository<IRepository<FamilyTreeChildrenMapEntity>>();
|
|
||||||
|
|
||||||
FamilyTreeChildrenMapEntity[] olds = repositoryMap.Entities.Where(x => x.PersonId == personId).ToArray();
|
|
||||||
|
|
||||||
if (olds != null && olds.Length > 0)
|
|
||||||
{
|
|
||||||
repositoryMap.DeleteNow(olds);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (FamilyTreeChildrenMapEntity old in olds)
|
|
||||||
{
|
|
||||||
DeleteChildrens(old.ChildrenId);
|
|
||||||
|
|
||||||
DeleteSpouses(old.ChildrenId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[PermissionOperate(name: MasterPermissionPolicy.FamilyTree, operate: Operate.Delete)]
|
[PermissionOperate(name: MasterPermissionPolicy.FamilyTree, operate: Operate.Delete)]
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<_PublishTargetUrl>C:\inetpub\wwwroot\dockwebapi2</_PublishTargetUrl>
|
<_PublishTargetUrl>C:\inetpub\wwwroot\dockwebapi2</_PublishTargetUrl>
|
||||||
<History>True|2026-10-26T01:48:34.0694643Z||;True|2026-10-23T16:26:07.0320450+08:00||;True|2026-10-23T15:18:36.1507056+08:00||;True|2026-10-23T09:45:02.7814696+08:00||;True|2026-10-22T14:27:02.4892588+08:00||;True|2026-10-21T21:22:01.1456473+08:00||;True|2026-10-20T15:45:39.3393674+08:00||;True|2026-10-17T20:49:21.0401213+08:00||;True|2026-09-23T13:19:13.0148919+08:00||;True|2026-09-23T13:16:07.8584304+08:00||;True|2026-09-22T23:03:13.6509491+08:00||;True|2026-09-22T16:07:15.9177123+08:00||;True|2026-09-22T11:19:19.6087109+08:00||;True|2026-09-22T11:09:24.9165065+08:00||;True|2026-09-21T22:40:07.1232044+08:00||;True|2026-09-21T22:35:06.9446571+08:00||;True|2026-09-21T22:27:42.1146825+08:00||;False|2026-09-21T22:27:17.6066573+08:00||;True|2026-09-21T21:01:22.8888913+08:00||;True|2026-09-21T19:15:03.4753747+08:00||;True|2026-09-21T18:08:30.0866986+08:00||;True|2026-09-21T16:51:19.8137872+08:00||;True|2026-09-21T16:30:01.0950896+08:00||;True|2026-09-21T15:09:00.2326737+08:00||;True|2026-09-21T14:47:09.6120256+08:00||;True|2026-09-21T14:16:35.3194409+08:00||;True|2026-09-21T13:54:58.2829712+08:00||;True|2026-09-21T13:36:45.3134499+08:00||;True|2026-09-19T09:48:52.0085130+08:00||;False|2026-09-19T09:47:56.1658214+08:00||;True|2026-09-17T18:50:15.9493380+08:00||;True|2026-09-17T18:11:11.5364547+08:00||;True|2026-09-17T18:07:27.7830758+08:00||;True|2026-09-17T17:58:16.5798560+08:00||;True|2026-09-17T15:37:30.9025614+08:00||;True|2026-09-17T15:25:46.9116292+08:00||;True|2026-09-17T15:05:18.6592403+08:00||;True|2026-09-17T14:57:28.7997437+08:00||;True|2026-09-17T14:36:00.6339386+08:00||;True|2026-09-17T13:56:43.2376873+08:00||;True|2026-09-16T13:56:51.8724546+08:00||;True|2026-09-15T20:44:46.6559899+08:00||;True|2026-09-13T19:02:59.5654245+08:00||;True|2026-09-10T09:14:56.2914193+08:00||;True|2026-09-09T16:40:16.6461154+08:00||;True|2026-09-08T13:55:23.1502435+08:00||;True|2026-09-08T08:04:53.4279263+08:00||;True|2026-09-07T08:48:17.4682304+08:00||;True|2026-09-04T14:39:08.7878670+08:00||;True|2026-09-04T14:35:48.2937877+08:00||;True|2026-09-04T11:45:16.1372876+08:00||;True|2026-09-04T11:42:59.9356436+08:00||;True|2026-09-03T16:05:52.5270232+08:00||;True|2026-09-03T14:52:56.8559144+08:00||;True|2026-09-02T11:08:23.8720038+08:00||;True|2026-09-02T10:58:16.8081797+08:00||;True|2026-08-26T13:34:12.3805892+08:00||;True|2026-08-25T08:31:30.7787234+08:00||;True|2026-08-20T13:10:46.4725468+08:00||;True|2026-08-20T13:10:28.3142576+08:00||;True|2026-08-19T16:10:27.3362887+08:00||;True|2026-08-19T16:01:12.6234971+08:00||;True|2026-08-19T15:42:46.6576265+08:00||;True|2026-08-19T13:39:59.9363522+08:00||;True|2026-08-19T13:36:53.0379313+08:00||;True|2026-08-19T13:31:36.0841398+08:00||;True|2026-08-19T11:44:37.5319626+08:00||;True|2026-08-19T09:36:45.6000047+08:00||;True|2026-08-19T09:34:36.8468631+08:00||;True|2026-08-19T08:35:41.2202300+08:00||;True|2026-08-18T16:20:59.0170916+08:00||;</History>
|
<History>True|2026-10-26T03:00:44.2611759Z||;True|2026-10-26T09:48:34.0694643+08:00||;True|2026-10-23T16:26:07.0320450+08:00||;True|2026-10-23T15:18:36.1507056+08:00||;True|2026-10-23T09:45:02.7814696+08:00||;True|2026-10-22T14:27:02.4892588+08:00||;True|2026-10-21T21:22:01.1456473+08:00||;True|2026-10-20T15:45:39.3393674+08:00||;True|2026-10-17T20:49:21.0401213+08:00||;True|2026-09-23T13:19:13.0148919+08:00||;True|2026-09-23T13:16:07.8584304+08:00||;True|2026-09-22T23:03:13.6509491+08:00||;True|2026-09-22T16:07:15.9177123+08:00||;True|2026-09-22T11:19:19.6087109+08:00||;True|2026-09-22T11:09:24.9165065+08:00||;True|2026-09-21T22:40:07.1232044+08:00||;True|2026-09-21T22:35:06.9446571+08:00||;True|2026-09-21T22:27:42.1146825+08:00||;False|2026-09-21T22:27:17.6066573+08:00||;True|2026-09-21T21:01:22.8888913+08:00||;True|2026-09-21T19:15:03.4753747+08:00||;True|2026-09-21T18:08:30.0866986+08:00||;True|2026-09-21T16:51:19.8137872+08:00||;True|2026-09-21T16:30:01.0950896+08:00||;True|2026-09-21T15:09:00.2326737+08:00||;True|2026-09-21T14:47:09.6120256+08:00||;True|2026-09-21T14:16:35.3194409+08:00||;True|2026-09-21T13:54:58.2829712+08:00||;True|2026-09-21T13:36:45.3134499+08:00||;True|2026-09-19T09:48:52.0085130+08:00||;False|2026-09-19T09:47:56.1658214+08:00||;True|2026-09-17T18:50:15.9493380+08:00||;True|2026-09-17T18:11:11.5364547+08:00||;True|2026-09-17T18:07:27.7830758+08:00||;True|2026-09-17T17:58:16.5798560+08:00||;True|2026-09-17T15:37:30.9025614+08:00||;True|2026-09-17T15:25:46.9116292+08:00||;True|2026-09-17T15:05:18.6592403+08:00||;True|2026-09-17T14:57:28.7997437+08:00||;True|2026-09-17T14:36:00.6339386+08:00||;True|2026-09-17T13:56:43.2376873+08:00||;True|2026-09-16T13:56:51.8724546+08:00||;True|2026-09-15T20:44:46.6559899+08:00||;True|2026-09-13T19:02:59.5654245+08:00||;True|2026-09-10T09:14:56.2914193+08:00||;True|2026-09-09T16:40:16.6461154+08:00||;True|2026-09-08T13:55:23.1502435+08:00||;True|2026-09-08T08:04:53.4279263+08:00||;True|2026-09-07T08:48:17.4682304+08:00||;True|2026-09-04T14:39:08.7878670+08:00||;True|2026-09-04T14:35:48.2937877+08:00||;True|2026-09-04T11:45:16.1372876+08:00||;True|2026-09-04T11:42:59.9356436+08:00||;True|2026-09-03T16:05:52.5270232+08:00||;True|2026-09-03T14:52:56.8559144+08:00||;True|2026-09-02T11:08:23.8720038+08:00||;True|2026-09-02T10:58:16.8081797+08:00||;True|2026-08-26T13:34:12.3805892+08:00||;True|2026-08-25T08:31:30.7787234+08:00||;True|2026-08-20T13:10:46.4725468+08:00||;True|2026-08-20T13:10:28.3142576+08:00||;True|2026-08-19T16:10:27.3362887+08:00||;True|2026-08-19T16:01:12.6234971+08:00||;True|2026-08-19T15:42:46.6576265+08:00||;True|2026-08-19T13:39:59.9363522+08:00||;True|2026-08-19T13:36:53.0379313+08:00||;True|2026-08-19T13:31:36.0841398+08:00||;True|2026-08-19T11:44:37.5319626+08:00||;True|2026-08-19T09:36:45.6000047+08:00||;True|2026-08-19T09:34:36.8468631+08:00||;True|2026-08-19T08:35:41.2202300+08:00||;True|2026-08-18T16:20:59.0170916+08:00||;</History>
|
||||||
<LastFailureDetails />
|
<LastFailureDetails />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -128,7 +128,7 @@ const BENIGN_ROUTER_PATTERNS = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
function isBenignRouterRejection(text: string): boolean {
|
function isBenignRouterRejection(text: string): boolean {
|
||||||
return BENIGN_ROUTER_PATTERNS.some(pattern => text.includes(pattern));
|
return BENIGN_ROUTER_PATTERNS.some((pattern) => text.includes(pattern));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 开发期弹窗最长占用时间:过了这个点就允许下一条弹窗顶上 */
|
/** 开发期弹窗最长占用时间:过了这个点就允许下一条弹窗顶上 */
|
||||||
|
|||||||
@@ -179,29 +179,26 @@ function downloadApk(info: AppUpdateInfo): Promise<string> {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
// 事件名是 statechanged(带 d),且进度字段挂在下载对象上(部分版本在 event.target),旧代码写错名/取错层→一直 0%
|
// 事件名是 statechanged(带 d),且进度字段挂在下载对象上(部分版本在 event.target),旧代码写错名/取错层→一直 0%
|
||||||
task.addEventListener(
|
task.addEventListener("statechanged", (event: any) => {
|
||||||
"statechanged",
|
const t = event?.target ?? event;
|
||||||
(event: any) => {
|
updateProgress.downloaded = Number(t?.downloadedSize ?? 0);
|
||||||
const t = event?.target ?? event;
|
updateProgress.total = Number(t?.totalSize ?? 0);
|
||||||
updateProgress.downloaded = Number(t?.downloadedSize ?? 0);
|
const state = Number(t?.state ?? 0);
|
||||||
updateProgress.total = Number(t?.totalSize ?? 0);
|
// state:3 开始接收数据 / 4 下载中 / 5 完成 / 6 失败
|
||||||
const state = Number(t?.state ?? 0);
|
if (state === 4 || state === 3) {
|
||||||
// state:3 开始接收数据 / 4 下载中 / 5 完成 / 6 失败
|
updateProgress.percent =
|
||||||
if (state === 4 || state === 3) {
|
updateProgress.total > 0
|
||||||
updateProgress.percent =
|
? Math.min(
|
||||||
updateProgress.total > 0
|
99,
|
||||||
? Math.min(
|
Math.floor(
|
||||||
99,
|
(updateProgress.downloaded / updateProgress.total) * 100,
|
||||||
Math.floor(
|
),
|
||||||
(updateProgress.downloaded / updateProgress.total) * 100,
|
)
|
||||||
),
|
: -1; // 无 Content-Length:不确定态动画
|
||||||
)
|
} else if (state === 6) {
|
||||||
: -1; // 无 Content-Length:不确定态动画
|
reject(new Error(`下载中断\n${url}`));
|
||||||
} else if (state === 6) {
|
}
|
||||||
reject(new Error(`下载中断\n${url}`));
|
});
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
|
||||||
task.start();
|
task.start();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -319,7 +316,11 @@ export async function checkAppUpdate(
|
|||||||
reason,
|
reason,
|
||||||
});
|
});
|
||||||
uni.showModal({
|
uni.showModal({
|
||||||
title: msg(failedInstall ? "AppUpdate.installFailed" : "AppUpdate.downloadFailed"),
|
title: msg(
|
||||||
|
failedInstall
|
||||||
|
? "AppUpdate.installFailed"
|
||||||
|
: "AppUpdate.downloadFailed",
|
||||||
|
),
|
||||||
content: reason,
|
content: reason,
|
||||||
showCancel: false,
|
showCancel: false,
|
||||||
confirmText: msg("AppUpdate.gotIt"),
|
confirmText: msg("AppUpdate.gotIt"),
|
||||||
|
|||||||
Reference in new issue
Block a user