@alanwang-merit/meritdata-platform-skill-package 1.0.0
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/CHANGELOG.md +1094 -0
- package/README.md +366 -0
- package/docs//344/270/211/346/226/271skill/346/230/240/345/260/204/345/205/263/347/263/273/346/270/205/345/215/225_20260907.md +349 -0
- package/docs//344/272/214/345/274/20012/351/230/266/346/256/265/345/274/200/345/217/221/346/265/201/347/250/213/346/226/207/346/241/243/346/241/206/346/236/266/346/217/220/345/217/226_20260907.md +286 -0
- package/package.json +7 -0
- package/rules/README.md +112 -0
- package/rules/api-design-rules.md +96 -0
- package/rules/code-dev-rules.md +167 -0
- package/rules/coding-standards-rules.md +99 -0
- package/rules/documentation-rules.md +102 -0
- package/rules/frontend-coding-rules.md +128 -0
- package/rules/frontend-component-rules.md +174 -0
- package/rules/git-workflow-rules.md +85 -0
- package/rules/meritdata-platform-data-boundary.md +183 -0
- package/rules/meritdata-platform-domain-model-rules.md +248 -0
- package/rules/nacos-rules.md +154 -0
- package/rules/naming-conventions-rules.md +98 -0
- package/rules/performance-rules.md +102 -0
- package/rules/requirement-dev-rules.md +77 -0
- package/rules/security-rules.md +91 -0
- package/rules/sql-naming-rules.md +397 -0
- package/rules/sql-script-rules.md +146 -0
- package/rules/system-test-rules.md +90 -0
- package/rules/test-case-dev-rules.md +96 -0
- package/skills/README.md +118 -0
- package/skills/meritdata-bootstrap-2nd-dev/SKILL.md +37 -0
- package/skills/meritdata-bootstrap-2nd-dev/references/guide.md +245 -0
- package/skills/meritdata-bootstrap-2nd-dev/references/template.md +229 -0
- package/skills/meritdata-bootstrap-2nd-dev/references/verify.md +204 -0
- package/skills/meritdata-dev-docs-file-finder/SKILL.md +215 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/205/254/345/205/261/350/265/204/344/272/247/346/270/205/345/215/225-/345/216/237/346/226/207/344/273/266.md +3516 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/244/226/351/203/250/346/216/245/345/217/243/346/270/205/345/215/225-/345/216/237/346/226/207/344/273/266.md +12391 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/270/203/357/274/211/357/274/232/347/263/273/347/273/237/344/270/232/345/212/241/346/227/245/345/277/227/350/247/204/350/214/203.md +95 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/270/211/357/274/211/357/274/232/347/273/204/347/273/207/345/222/214/344/272/272/345/221/230/345/257/274/345/205/245.md +88 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/271/235/357/274/211/357/274/232/345/257/206/347/272/247/344/272/214/346/254/241/345/274/200/345/217/221/346/226/207/346/241/243.md +198 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/271/235/357/274/211/357/274/232/345/257/206/347/272/247/345/212/237/350/203/275.md +128 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/271/235/357/274/211/357/274/232/347/273/204/347/273/207/345/222/214/344/272/272/345/221/230/345/220/214/346/255/245.md +912 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/272/214/357/274/211/357/274/232/347/263/273/347/273/237/351/205/215/347/275/256/351/241/271/347/256/241/347/220/206.md +923 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/205/253/357/274/211/357/274/232/346/227/245/345/277/227/345/244/207/344/273/275/345/212/237/350/203/275/344/275/277/347/224/250/350/257/264/346/230/216.md +110 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/205/255/357/274/211/357/274/232/347/263/273/347/273/237/346/216/210/346/235/203/344/272/247/345/223/201/345/214/205/346/211/251/345/261/225.md +136 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/215/201/344/270/200/357/274/211/357/274/232/346/266/210/346/201/257/344/270/255/345/277/203.md +1096 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/215/201/344/270/200/357/274/211/357/274/232/350/260/203/345/272/246/347/274/226/346/216/222/344/272/214/345/274/200/350/257/264/346/230/216.md +244 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/215/201/344/272/214/357/274/211/357/274/232VUE/345/211/215/347/253/257/345/205/254/345/205/261/345/274/271/346/241/206/347/273/204/344/273/266/344/275/277/347/224/250.md +136 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/215/201/345/233/233/357/274/211/357/274/232/346/225/260/346/215/256/346/272/220/346/250/241/345/235/227/346/211/251/345/261/225.md +197 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/215/201/357/274/211/357/274/232/345/233/275/351/231/205/345/214/226/351/233/206/346/210/220.md +116 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/215/201/357/274/211/357/274/232/345/256/232/346/227/266/350/260/203/345/272/246/344/273/273/345/212/241.md +392 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/233/233/357/274/211/357/274/232/347/263/273/347/273/237/350/256/244/350/257/201/351/233/206/346/210/220.md +907 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/270/200/357/274/211/357/274/232/346/265/201/347/250/213API/346/216/245/345/217/243.md +2930 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/270/203/357/274/211/357/274/232/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241/350/257/264/346/230/216/346/226/207/346/241/243.md +730 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/270/211/357/274/211/357/274/232/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217/345/274/200/345/217/221.md +463 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/272/214/357/274/211/357/274/232/345/267/245/344/275/234/346/265/201/347/250/213/345/272/224/347/224/250/345/274/200/345/217/221.md +2429 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/272/224/357/274/211/357/274/232/345/276/205/345/212/236/345/220/214/346/255/245/351/227/250/346/210/267/345/274/200/345/217/221.md +270 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/205/253/357/274/211/357/274/232/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266/345/217/212/346/226/271/346/263/225/350/257/264/346/230/216/346/226/207/346/241/243.md +685 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/205/255/357/274/211/357/274/232/346/265/201/347/250/213/350/277/275/350/270/252/351/241/265/351/235/242/345/265/214/345/205/245/350/241/250/345/215/225/345/274/200/345/217/221.md +229 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/233/233/357/274/211/357/274/232/350/207/252/345/256/232/344/271/211/344/272/272/345/221/230.md +112 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/01_/347/233/256/345/275/225/344/270/216/346/226/207/346/241/243/347/273/223/346/236/204.md +97 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/02_/344/270/200/345/237/272/347/241/200/350/256/276/346/226/275-1.1/347/274/223/345/255/230/346/223/215/344/275/234-SysCacheServiceFacade.md +423 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/03_/344/270/200/345/237/272/347/241/200/350/256/276/346/226/275-1.1/347/274/223/345/255/230/346/223/215/344/275/234-StringCacheFacade.md +78 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/04_/344/270/200/345/237/272/347/241/200/350/256/276/346/226/275-1.2/351/205/215/347/275/256/344/270/255/345/277/203-NacosUtils.md +193 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/05_/344/272/214/351/200/232/347/224/250/345/267/245/345/205/267-2.1/345/212/240/350/247/243/345/257/206-SM2-SM3-SM4.md +176 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/06_/344/270/211/345/271/263/345/217/260/346/234/215/345/212/241-3.1/346/227/245/345/277/227/346/234/215/345/212/241-ILogPostService.md +323 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/07_/344/270/211/345/271/263/345/217/260/346/234/215/345/212/241-3.1/346/227/245/345/277/227/346/263/250/350/247/243-LogDesc-LogOperation.md +210 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/08_/344/270/211/345/271/263/345/217/260/346/234/215/345/212/241-3.3/344/274/232/350/257/235/344/277/241/346/201/257-SessionUtils.md +349 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/09_/344/270/211/345/271/263/345/217/260/346/234/215/345/212/241-3.3/345/234/250/347/272/277/347/224/250/346/210/267-IUserOnlineTime.md +63 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/10_/344/270/211/345/271/263/345/217/260/346/234/215/345/212/241-3.4/345/244/232/347/263/273/347/273/237/351/233/206/346/210/220+3.5/346/225/260/346/215/256/345/257/206/347/272/247.md +91 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/11_/344/270/211/345/271/263/345/217/260/346/234/215/345/212/241-3.6/346/234/215/345/212/241/351/200/232/347/237/245-CloudFeignMessageClient.md +467 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/12_/345/233/233/344/270/232/345/212/241/347/273/204/344/273/266-4.1/345/267/245/344/275/234/346/265/201BpmEngine.md +86 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/13_/345/233/233/344/270/232/345/212/241/347/273/204/344/273/266-4.2/350/260/203/345/272/246/347/273/204/344/273/266ICloudClient.md +57 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/14_/345/233/233/344/270/232/345/212/241/347/273/204/344/273/266-4.3/345/256/232/346/227/266/344/273/273/345/212/241IJobApi.md +55 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/15_/344/272/224/345/211/215/347/253/257/350/265/204/344/272/247-5.1UI/347/273/204/344/273/266/345/272/223-/344/270/212/345/215/212.md +514 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/16_/344/272/224/345/211/215/347/253/257/350/265/204/344/272/247-5.1UI/347/273/204/344/273/266/345/272/223-/344/270/213/345/215/212.md +302 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/17_/351/231/204/345/275/225-/347/273/237/350/256/241/346/261/207/346/200/273-Maven/344/276/235/350/265/226-/346/263/250/346/204/217/344/272/213/351/241/271.md +131 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/18_/347/233/256/345/275/225/344/270/216/346/226/207/346/241/243/350/257/264/346/230/216.md +310 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/19_1.1-1.6/345/237/272/347/241/200/351/205/215/347/275/256-/345/271/263/345/217/260/344/277/241/346/201/257/347/261/273.md +371 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/20_1.7-1.10/345/237/272/347/241/200/351/205/215/347/275/256-/351/241/265/351/235/242/344/270/216/346/266/210/346/201/257/347/261/273.md +344 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/21_1.11-1.15/345/237/272/347/241/200/351/205/215/347/275/256-/346/266/210/346/201/257/344/270/216/351/205/215/347/275/256/347/261/273.md +302 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/22_1.16/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245.md +326 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/23_1.17/350/265/204/346/272/220/346/225/260/346/215/256/345/257/206/347/272/247-/344/270/212/345/215/212.md +303 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/24_1.17/350/265/204/346/272/220/346/225/260/346/215/256/345/257/206/347/272/247-/344/270/213/345/215/212.md +355 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/25_2.1/347/273/204/347/273/207/347/273/264/346/212/244-/344/270/212/345/215/212.md +459 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/26_2.1/347/273/204/347/273/207/347/273/264/346/212/244-/344/270/213/345/215/212.md +567 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/27_2.2/344/272/272/345/221/230/347/273/264/346/212/244-/344/270/212/345/215/212.md +838 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/28_2.2/344/272/272/345/221/230/347/273/264/346/212/244-/344/270/213/345/215/212.md +585 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/29_2.3/350/247/222/350/211/262/347/273/264/346/212/244-/344/270/212/345/215/212.md +576 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/30_2.3/350/247/222/350/211/262/347/273/264/346/212/244-/344/270/213/345/215/212.md +597 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/31_2.4/347/224/250/346/210/267/347/273/264/346/212/244-/344/270/212/345/215/212.md +490 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/32_2.4/347/224/250/346/210/267/347/273/264/346/212/244-/344/270/213/345/215/212.md +560 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/33_2.5/345/267/245/344/275/234/347/273/204/347/273/264/346/212/244.md +209 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/34_2.6/345/205/266/344/273/226/346/216/245/345/217/243-/344/270/212/345/215/212.md +653 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/35_2.6/345/205/266/344/273/226/346/216/245/345/217/243-/344/270/213/345/215/212.md +591 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/36_3.1-3.7/350/265/204/346/272/220/346/216/210/346/235/203/345/237/272/347/241/200.md +827 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/37_3.8-3.10/350/265/204/346/272/220/346/216/210/346/235/203/350/277/233/351/230/266.md +458 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/38_3.11/345/237/272/347/241/200/346/225/260/346/215/256.md +210 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/39_3.12/346/225/260/346/215/256/346/272/220/347/273/264/346/212/244.md +277 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/40_3.13/347/254/254/344/270/211/346/226/271/350/265/204/346/272/220/347/273/264/346/212/244.md +310 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/41_3.14/346/234/215/345/212/241/347/256/241/347/220/206.md +521 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/42_3.15/350/265/204/346/272/220/347/273/264/346/212/244-/344/270/212/345/215/212.md +767 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/43_3.15/350/265/204/346/272/220/347/273/264/346/212/244-/344/270/213/345/215/212.md +378 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/44_3.16/344/272/272/345/221/230/351/200/211/346/213/251/345/231/250-/344/270/212/345/215/212.md +311 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/45_3.16/344/272/272/345/221/230/351/200/211/346/213/251/345/231/250-/344/270/213/345/215/212.md +242 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/46_3.17/345/241/253/346/212/245/346/212/245/350/241/250+3.18/351/252/214/350/257/201/347/240/201.md +178 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/47_3.19/345/267/245/344/275/234/345/217/260/347/273/264/346/212/244.md +196 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/48_3.20/350/260/203/345/272/246/347/274/226/346/216/222.md +106 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/49_/351/231/204/345/275/225-4.1-4.3/350/277/224/345/233/236/347/240/201/344/270/216/347/211/210/346/234/254/346/270/205/345/215/225.md +43 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/AGENTS.md +252 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/CLAUDE.md +252 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/README.md +230 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs/REQUIREMENT_DESIGN_REFERENCE.md +543 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-00_/346/200/273/350/247/210.md +198 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20201_/345/211/215/347/275/256/346/235/241/344/273/266.md +11 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20202_/350/247/204/345/210/231/345/274/225/346/223/216/345/210/235/345/247/213/345/214/226/346/216/245/345/217/243.md +263 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20203_/345/220/257/345/212/250/346/265/201/347/250/213/345/256/236/344/276/213/346/216/245/345/217/243.md +187 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20204_/350/277/220/350/241/214/350/247/204/345/210/231/345/274/225/346/223/216.md +449 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20205_/345/256/214/346/210/220/344/273/273/345/212/241/346/216/245/345/217/243.md +232 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20206_/345/241/253/345/206/231/346/204/217/350/247/201/346/216/245/345/217/243.md +192 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20207_/346/240/271/346/215/256/344/273/273/345/212/241/350/212/202/347/202/271/350/216/267/345/217/226/346/204/217/350/247/201/345/206/205/345/256/271.md +212 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20208_/346/237/245/347/234/213/350/277/275/350/270/252/346/216/245/345/217/243.md +492 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20209_/351/200/200/345/233/236/346/213/237/347/250/277/344/272/272/346/216/245/345/217/243.md +187 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20210_/351/200/200/345/233/236/344/270/212/344/270/200/347/216/257/350/212/202/345/244/204/347/220/206/344/272/272/346/216/245/345/217/243.md +183 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20211_/346/265/201/347/250/213/350/256/276/350/256/241/345/231/250/345/210/227/350/241/250/346/237/245/350/257/242.md +314 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20212_/344/270/252/344/272/272/345/276/205/345/212/236.md +261 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20213_/351/230/205/347/237/245.md +306 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20214_/346/265/201/347/250/213/346/234/200/346/226/260/345/256/232/344/271/211ID.md +100 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20215_/344/270/232/345/212/241/347/233/270/345/205/263/346/216/245/345/217/243.md +637 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20216_/346/265/201/347/250/213/345/210/206/347/261/273/347/233/270/345/205/263.md +176 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-00_/346/200/273/350/247/210.md +84 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20201_/346/240/267/344/276/213/350/257/264/346/230/216.md +37 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20202_/345/220/216/347/253/257/345/267/245/347/250/213/345/210/233/345/273/272.md +39 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20203_/345/220/216/347/253/257/345/267/245/347/250/213/351/205/215/347/275/256.md +234 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20204_/345/220/216/347/253/257/345/267/245/347/250/213/344/270/232/345/212/241/347/261/273/345/210/233/345/273/272.md +548 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20205_/345/220/257/345/212/250/345/220/216/347/253/257/345/272/224/347/224/250/345/267/245/347/250/213.md +49 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20206_/346/265/201/347/250/213/345/272/224/347/224/250/345/211/215/347/253/257/345/274/200/345/217/221.md +1443 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20207_/345/220/257/345/212/250/345/211/215/347/253/257/345/272/224/347/224/250/345/267/245/347/250/213.md +78 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20208_/346/265/201/347/250/213/350/256/276/350/256/241.md +98 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-03-/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217-00_/346/200/273/350/247/210.md +51 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-03-/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217-/347/253/240/350/212/20201_/345/256/236/347/216/260/347/255/226/347/225/245.md +30 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-03-/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217-/347/253/240/350/212/20202_/350/207/252/345/256/232/344/271/211_jar_/345/214/205/347/232/204/345/256/236/347/216/260/346/265/201/347/250/213.md +242 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-03-/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217-/347/253/240/350/212/20203_/350/207/252/345/256/232/344/271/211/346/234/215/345/212/241/346/220/255/345/273/272/357/274/210/350/213/245/345/267/262/345/255/230/345/234/250/345/267/245/347/250/213/345/222/214/346/216/245/345/217/243/357/274/214/346/255/244/346/255/245/351/252/244/345/217/257/347/234/201/347/225/245/357/274/211.md +150 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-03-/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217-/347/253/240/350/212/20204_/346/265/201/347/250/213/350/256/276/350/256/241/344/270/255/350/256/276/347/275/256_listener_/345/217/202/346/225/260.md +44 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-03-/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217-/347/253/240/350/212/20205_/346/265/213/350/257/225/350/247/246/345/217/221/346/265/201/347/250/213/347/233/221/345/220/254/344/272/213/344/273/266/346/230/257/345/220/246/347/224/237/346/225/210.md +42 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-03-/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217-/347/253/240/350/212/20206_/345/244/207/346/263/250/357/274/232.md +26 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-06-/347/263/273/347/273/237/350/256/244/350/257/201-00_/346/200/273/350/247/210.md +47 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-06-/347/263/273/347/273/237/350/256/244/350/257/201-/347/253/240/350/212/20201_/347/263/273/347/273/237/350/256/244/350/257/201/351/233/206/346/210/220/344/273/213/347/273/215.md +14 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-06-/347/263/273/347/273/237/350/256/244/350/257/201-/347/253/240/350/212/20202_token_/350/256/244/350/257/201/351/233/206/346/210/220.md +568 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-06-/347/263/273/347/273/237/350/256/244/350/257/201-/347/253/240/350/212/20203_cas_/347/273/237/344/270/200/350/256/244/350/257/201/344/270/255/345/277/203.md +128 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-06-/347/263/273/347/273/237/350/256/244/350/257/201-/347/253/240/350/212/20204_/347/254/254/344/270/211/346/226/271/350/256/244/350/257/201/344/270/255/345/277/203.md +151 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-06-/347/263/273/347/273/237/350/256/244/350/257/201-/347/253/240/350/212/20205_/351/231/204/345/275/225_1_/350/256/244/350/257/201/344/270/255/345/277/203/347/253/257/351/205/215/347/275/256.md +93 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-00_/346/200/273/350/247/210.md +25 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20201_/350/203/214/346/231/257.md +12 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20202_/345/267/245/344/275/234/346/265/201/347/233/270/345/205/263/344/273/213/347/273/215.md +28 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20203_/345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260/346/265/201/347/250/213/345/214/205/345/220/253/346/250/241/345/235/227.md +18 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20204_/346/265/201/347/250/213/345/212/237/350/203/275/346/250/241/345/235/227/344/273/213/347/273/215.md +284 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20205_/346/265/201/347/250/213/345/220/216/347/253/257/350/256/276/350/256/241.md +226 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20206_/346/265/201/347/250/213/345/211/215/347/253/257/350/256/276/350/256/241.md +80 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20207_/344/272/214/346/254/241/345/274/200/345/217/221.md +38 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20208_/344/270/252/344/272/272/346/240/267/344/276/213/346/265/201/347/250/213/347/232/204/351/205/215/347/275/256.md +92 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-08-/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266-00_/346/200/273/350/247/210.md +66 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-08-/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266-/347/253/240/350/212/20201_/346/246/202/350/277/260.md +165 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-08-/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266-/347/253/240/350/212/20202_/347/273/204/344/273/266/344/270/216/346/226/271/346/263/225/346/246/202/350/247/210/350/241/250.md +45 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-08-/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266-/347/253/240/350/212/20203_BpmFormTools_-_BPM/350/241/250/345/215/225/345/267/245/345/205/267/347/273/204/344/273/266.md +145 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-08-/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266-/347/253/240/350/212/20204_BpmGridButtonsNew_-_BPM/350/241/250/346/240/274/346/214/211/351/222/256/347/273/204/344/273/266.md +239 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-08-/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266-/347/253/240/350/212/20205_/345/220/216/347/253/257BpmEngine/346/240/270/345/277/203/346/216/245/345/217/243.md +135 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-08-/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266-/347/253/240/350/212/20206_/351/231/204/345/275/225.md +43 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-00_/346/200/273/350/247/210.md +59 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-/347/253/240/350/212/20201_/346/246/202/350/277/260.md +16 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-/347/253/240/350/212/20202_/347/273/204/347/273/207/345/220/214/346/255/245.md +318 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-/347/253/240/350/212/20203_/344/272/272/345/221/230/345/220/214/346/255/245.md +187 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-/347/253/240/350/212/20204_/350/265/204/346/272/220/350/217/234/345/215/225/345/220/214/346/255/245.md +124 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-/347/253/240/350/212/20205_/350/247/222/350/211/262/345/220/214/346/255/245.md +79 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-/347/253/240/350/212/20206_/350/265/204/346/272/220/346/235/203/351/231/220/345/220/214/346/255/245.md +116 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-/347/253/240/350/212/20207_/347/273/204/347/273/207/345/220/214/346/255/245/351/205/215/347/275/256.md +173 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-00_/346/200/273/350/247/210.md +49 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-/347/253/240/350/212/20201_/344/275/277/347/224/250/350/203/214/346/231/257.md +12 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-/347/253/240/350/212/20202_/346/233/264/346/226/260/350/256/260/345/275/225.md +14 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-/347/253/240/350/212/20203_/350/260/203/345/272/246/347/233/270/345/205/263/345/272/224/347/224/250/345/214/205.md +15 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-/347/253/240/350/212/20204_/351/205/215/347/275/256/351/241/271/347/233/270/345/205/263.md +23 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-/347/253/240/350/212/20205_/350/260/203/345/272/246/345/212/237/350/203/275/344/275/277/347/224/250.md +132 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-/347/253/240/350/212/20206_/350/260/203/345/272/246/344/273/273/345/212/241_API_/346/216/245/345/217/243.md +14 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-/347/253/240/350/212/20207_/345/257/271/345/244/226/350/260/203/345/272/246/344/273/273/345/212/241_API_/346/216/245/345/217/243.md +245 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-11-/351/205/215/347/275/256/351/241/271-00_/346/200/273/350/247/210.md +49 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-11-/351/205/215/347/275/256/351/241/271-/347/253/240/350/212/20201_/345/272/224/347/224/250/351/205/215/347/275/256/351/241/271/347/233/270/345/205/263.md +28 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-11-/351/205/215/347/275/256/351/241/271-/347/253/240/350/212/20202_/351/205/215/347/275/256/344/270/255/345/277/203/351/205/215/347/275/256/351/241/271/350/257/264/346/230/216.md +876 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-11-/351/205/215/347/275/256/351/241/271-/347/253/240/350/212/20203_/351/205/215/347/275/256/351/241/271/347/232/204/344/275/277/347/224/250.md +45 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-12-/346/266/210/346/201/257/344/270/255/345/277/203-00_/346/200/273/350/247/210.md +56 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-12-/346/266/210/346/201/257/344/270/255/345/277/203-/347/253/240/350/212/20201_/346/266/210/346/201/257/344/270/255/345/277/203/344/275/277/347/224/250/345/234/272/346/231/257.md +12 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-12-/346/266/210/346/201/257/344/270/255/345/277/203-/347/253/240/350/212/20202_/346/266/210/346/201/257/344/270/255/345/277/203/351/241/265/351/235/242/345/212/237/350/203/275/344/275/277/347/224/250.md +396 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-12-/346/266/210/346/201/257/344/270/255/345/277/203-/347/253/240/350/212/20203_/346/266/210/346/201/257/344/270/255/345/277/203/346/216/245/345/217/243/345/212/237/350/203/275/344/275/277/347/224/250.md +578 -0
- package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-12-/346/266/210/346/201/257/344/270/255/345/277/203-/347/253/240/350/212/20204_/351/231/204/357/274/232/351/231/204/344/273/266/344/270/212/344/274/240/344/270/213/350/275/275/345/210/240/351/231/244/346/216/245/345/217/243.md +183 -0
- package/skills/meritdata-dev-docs-file-finder/references/keywords.md +153 -0
- package/skills/meritdata-dev-docs-file-finder/references/scenarios.md +313 -0
- package/skills/meritdata-nacos-importer/SKILL.md +37 -0
- package/skills/meritdata-nacos-importer/references/gray-publish.md +216 -0
- package/skills/meritdata-nacos-importer/references/guide.md +203 -0
- package/skills/meritdata-nacos-importer/references/yaml-spec.md +296 -0
- package/skills/meritdata-platform-2nd-dev-check/SKILL.md +38 -0
- package/skills/meritdata-platform-2nd-dev-check/references/ci-integration.md +307 -0
- package/skills/meritdata-platform-2nd-dev-check/references/guide.md +227 -0
- package/skills/meritdata-platform-2nd-dev-check/references/rules-checklist.md +250 -0
- package/skills/meritdata-platform-backend-deploy/SKILL.md +45 -0
- package/skills/meritdata-platform-backend-deploy/references/guide.md +255 -0
- package/skills/meritdata-platform-backend-deploy/references/health-monitor-log.md +325 -0
- package/skills/meritdata-platform-backend-deploy/references/release-strategies.md +256 -0
- package/skills/meritdata-platform-bpm/SKILL.md +39 -0
- package/skills/meritdata-platform-bpm/references/bpm-/346/224/273/347/225/245/INDEX.md +140 -0
- package/skills/meritdata-platform-bpm/references/guide.md +204 -0
- package/skills/meritdata-platform-bpm/references/status-mapping.md +36 -0
- package/skills/meritdata-platform-cache/SKILL.md +42 -0
- package/skills/meritdata-platform-cache/references/distributed-lock.md +199 -0
- package/skills/meritdata-platform-cache/references/guide.md +141 -0
- package/skills/meritdata-platform-cache/references/key-design.md +167 -0
- package/skills/meritdata-platform-cache/references/resilience.md +181 -0
- package/skills/meritdata-platform-cloud-dev/SKILL.md +81 -0
- package/skills/meritdata-platform-cloud-dev/references/modules-mapping.md +162 -0
- package/skills/meritdata-platform-cloud-dev/references/scenario-contract.md +75 -0
- package/skills/meritdata-platform-cloud-dev/references/skill-suite.json +52 -0
- package/skills/meritdata-platform-cloud-dev/references/skill-suite.schema.json +23 -0
- package/skills/meritdata-platform-code-review/SKILL.md +42 -0
- package/skills/meritdata-platform-code-review/references/guide.md +173 -0
- package/skills/meritdata-platform-code-review/references/performance.md +263 -0
- package/skills/meritdata-platform-code-review/references/security.md +278 -0
- package/skills/meritdata-platform-code-spec/SKILL.md +36 -0
- package/skills/meritdata-platform-code-spec/references/anti-patterns.md +533 -0
- package/skills/meritdata-platform-code-spec/references/validate-rules.md +321 -0
- package/skills/meritdata-platform-data-access/SKILL.md +131 -0
- package/skills/meritdata-platform-data-access/references/datasource.md +239 -0
- package/skills/meritdata-platform-data-access/references/inbound/adapter-pattern.md +431 -0
- package/skills/meritdata-platform-data-access/references/inbound/canonical-payload.md +313 -0
- package/skills/meritdata-platform-data-access/references/inbound/reconciliation.md +352 -0
- package/skills/meritdata-platform-data-access/references/inbound/sync-contracts.md +225 -0
- package/skills/meritdata-platform-data-access/references/inbound/xml-security.md +411 -0
- package/skills/meritdata-platform-data-access/references/outbound/batch-assembly.md +251 -0
- package/skills/meritdata-platform-data-access/references/outbound/dto-catalog.md +120 -0
- package/skills/meritdata-platform-data-access/references/outbound/dto-converter.md +211 -0
- package/skills/meritdata-platform-data-access/references/outbound/feign-guide.md +229 -0
- package/skills/meritdata-platform-data-access/references/outbound/querydsl-guide.md +177 -0
- package/skills/meritdata-platform-data-access/references/outbound/same-jvm-detection.md +157 -0
- package/skills/meritdata-platform-data-access/references/outbound/service-catalog.md +232 -0
- package/skills/meritdata-platform-data-access/references/outbound/third-party.md +278 -0
- package/skills/meritdata-platform-data-access/references/outbound/usage-patterns.md +257 -0
- package/skills/meritdata-platform-data-access/references/outbound/webapi.md +392 -0
- package/skills/meritdata-platform-data-access-review/SKILL.md +42 -0
- package/skills/meritdata-platform-data-access-review/references/anti-patterns.md +287 -0
- package/skills/meritdata-platform-data-access-review/references/ci-scan.md +225 -0
- package/skills/meritdata-platform-data-access-review/references/guide.md +228 -0
- package/skills/meritdata-platform-data-boundary/SKILL.md +41 -0
- package/skills/meritdata-platform-data-boundary/references/anti-patterns.md +519 -0
- package/skills/meritdata-platform-data-boundary/references/cloud-tables.md +32 -0
- package/skills/meritdata-platform-data-boundary/references/same-jvm.md +52 -0
- package/skills/meritdata-platform-data-boundary/references/validate-rules.md +341 -0
- package/skills/meritdata-platform-data-classification/SKILL.md +42 -0
- package/skills/meritdata-platform-data-classification/references/guide.md +179 -0
- package/skills/meritdata-platform-data-classification/references/hibernate-filter.md +255 -0
- package/skills/meritdata-platform-data-classification/references/integration-with-dam.md +206 -0
- package/skills/meritdata-platform-data-classification/references/masking.md +214 -0
- package/skills/meritdata-platform-domain-model/SKILL.md +41 -0
- package/skills/meritdata-platform-domain-model/references/anti-patterns.md +538 -0
- package/skills/meritdata-platform-domain-model/references/relationship-patterns.md +112 -0
- package/skills/meritdata-platform-domain-model/references/review-checklist.md +39 -0
- package/skills/meritdata-platform-domain-model/references/validate-rules.md +305 -0
- package/skills/meritdata-platform-file/SKILL.md +100 -0
- package/skills/meritdata-platform-file/references/acceptance.md +393 -0
- package/skills/meritdata-platform-file/references/api-contracts.md +392 -0
- package/skills/meritdata-platform-file/references/examples.md +421 -0
- package/skills/meritdata-platform-file/references/lifecycle.md +345 -0
- package/skills/meritdata-platform-file/references/security.md +423 -0
- package/skills/meritdata-platform-frontend/SKILL.md +45 -0
- package/skills/meritdata-platform-frontend/references/auth-and-api.md +300 -0
- package/skills/meritdata-platform-frontend/references/components.md +284 -0
- package/skills/meritdata-platform-frontend/references/http-client/INDEX.md +85 -0
- package/skills/meritdata-platform-frontend/references/http-client/acceptance.md +348 -0
- package/skills/meritdata-platform-frontend/references/http-client/gateway-paths.md +281 -0
- package/skills/meritdata-platform-frontend/references/http-client/http-plugin.md +293 -0
- package/skills/meritdata-platform-frontend/references/http-client/service-registry.md +281 -0
- package/skills/meritdata-platform-frontend/references/project-structure.md +318 -0
- package/skills/meritdata-platform-frontend-deploy/SKILL.md +45 -0
- package/skills/meritdata-platform-frontend-deploy/references/cdn-https-cache.md +222 -0
- package/skills/meritdata-platform-frontend-deploy/references/gray-and-rollback.md +236 -0
- package/skills/meritdata-platform-frontend-deploy/references/guide.md +199 -0
- package/skills/meritdata-platform-impexp/SKILL.md +41 -0
- package/skills/meritdata-platform-impexp/references/async-and-validate.md +353 -0
- package/skills/meritdata-platform-impexp/references/excel-guide.md +326 -0
- package/skills/meritdata-platform-impexp/references/scenarios.md +248 -0
- package/skills/meritdata-platform-job/SKILL.md +41 -0
- package/skills/meritdata-platform-job/references/idempotency.md +203 -0
- package/skills/meritdata-platform-job/references/scenarios.md +317 -0
- package/skills/meritdata-platform-job/references/scheduling-/346/224/273/347/225/245/INDEX.md +60 -0
- package/skills/meritdata-platform-job/references/xxl-job-guide.md +286 -0
- package/skills/meritdata-platform-lookup-api/SKILL.md +42 -0
- package/skills/meritdata-platform-lookup-api/references/cache-strategy.md +199 -0
- package/skills/meritdata-platform-lookup-api/references/guide.md +179 -0
- package/skills/meritdata-platform-lookup-api/references/tree-and-i18n.md +198 -0
- package/skills/meritdata-platform-menu-config/SKILL.md +42 -0
- package/skills/meritdata-platform-menu-config/references/guide.md +164 -0
- package/skills/meritdata-platform-menu-config/references/i18n-and-cache.md +180 -0
- package/skills/meritdata-platform-menu-config/references/role-and-tree.md +170 -0
- package/skills/meritdata-platform-menu-resource/SKILL.md +42 -0
- package/skills/meritdata-platform-menu-resource/references/auth-and-path.md +166 -0
- package/skills/meritdata-platform-menu-resource/references/guide.md +156 -0
- package/skills/meritdata-platform-menu-resource/references/scan-and-cache.md +197 -0
- package/skills/meritdata-platform-message-center/SKILL.md +42 -0
- package/skills/meritdata-platform-message-center/references/channels.md +222 -0
- package/skills/meritdata-platform-message-center/references/guide.md +151 -0
- package/skills/meritdata-platform-message-center/references/message-/346/224/273/347/225/245/INDEX.md +55 -0
- package/skills/meritdata-platform-message-center/references/reliability.md +208 -0
- package/skills/meritdata-platform-nacos-config/SKILL.md +44 -0
- package/skills/meritdata-platform-nacos-config/references/config-item-/346/224/273/347/225/245/INDEX.md +53 -0
- package/skills/meritdata-platform-nacos-config/references/configuration-properties.md +295 -0
- package/skills/meritdata-platform-nacos-config/references/dynamic-refresh.md +156 -0
- package/skills/meritdata-platform-nacos-config/references/encryption.md +182 -0
- package/skills/meritdata-platform-nacos-config/references/env-and-gray.md +178 -0
- package/skills/meritdata-platform-nacos-config/references/guide.md +127 -0
- package/skills/meritdata-platform-operation-log/SKILL.md +42 -0
- package/skills/meritdata-platform-operation-log/references/guide.md +175 -0
- package/skills/meritdata-platform-operation-log/references/query-and-export.md +218 -0
- package/skills/meritdata-platform-operation-log/references/sensitive-and-async.md +176 -0
- package/skills/meritdata-platform-org-user-api/SKILL.md +42 -0
- package/skills/meritdata-platform-org-user-api/references/guide.md +230 -0
- package/skills/meritdata-platform-org-user-api/references/masterdata-sync-/346/224/273/347/225/245/INDEX.md +64 -0
- package/skills/meritdata-platform-org-user-api/references/soft-delete-pitfalls.md +200 -0
- package/skills/meritdata-platform-org-user-api/references/tree-and-picker.md +176 -0
- package/skills/meritdata-platform-permission/SKILL.md +42 -0
- package/skills/meritdata-platform-permission/references/button-and-data.md +198 -0
- package/skills/meritdata-platform-permission/references/custom-rule.md +207 -0
- package/skills/meritdata-platform-permission/references/guide.md +196 -0
- package/skills/meritdata-platform-platform-config/SKILL.md +43 -0
- package/skills/meritdata-platform-platform-config/references/basic-config-api.md +221 -0
- package/skills/meritdata-platform-platform-config/references/cache-and-persist.md +234 -0
- package/skills/meritdata-platform-platform-config/references/guide.md +225 -0
- package/skills/meritdata-platform-platform-config/references/multi-tenant-and-audit.md +254 -0
- package/skills/meritdata-platform-playbook/SKILL.md +44 -0
- package/skills/meritdata-platform-playbook/references/flows.md +186 -0
- package/skills/meritdata-platform-playbook/references/intent-routing.md +180 -0
- package/skills/meritdata-platform-session/SKILL.md +42 -0
- package/skills/meritdata-platform-session/references/guide.md +157 -0
- package/skills/meritdata-platform-session/references/multi-device.md +149 -0
- package/skills/meritdata-platform-session/references/online-monitor.md +195 -0
- package/skills/meritdata-platform-sm-crypto/SKILL.md +41 -0
- package/skills/meritdata-platform-sm-crypto/references/guide.md +144 -0
- package/skills/meritdata-platform-sm-crypto/references/key-management.md +177 -0
- package/skills/meritdata-platform-sm-crypto/references/migration.md +181 -0
- package/skills/meritdata-platform-sso/SKILL.md +41 -0
- package/skills/meritdata-platform-sso/references/filter-config.md +391 -0
- package/skills/meritdata-platform-sso/references/oauth-providers.md +290 -0
- package/skills/meritdata-platform-sso/references/sso-guide.md +319 -0
- package/skills/meritdata-platform-test-case/SKILL.md +43 -0
- package/skills/meritdata-platform-test-case/references/guide.md +290 -0
- package/skills/meritdata-platform-test-case/references/integration-test.md +352 -0
- package/skills/meritdata-platform-test-case/references/unit-test.md +330 -0
- package/skills/meritdata-platform-ui-components/SKILL.md +43 -0
- package/skills/meritdata-platform-ui-components/references/business-wrappers.md +233 -0
- package/skills/meritdata-platform-ui-components/references/guide.md +199 -0
- package/skills/meritdata-platform-ui-components/references/theme-and-i18n.md +226 -0
- package/tools/skill-authoring-workflow/README.md +260 -0
- package/tools/skill-authoring-workflow/templates/SKILL-template.md +35 -0
- package/tools/skill-authoring-workflow/templates/references-template.md +59 -0
- package/tools/skill-stocktake/README.md +121 -0
- package/tools/skill-stocktake/run.sh +153 -0
- package/tools/skill-vetter/README.md +119 -0
- package/tools/skill-vetter/run.sh +294 -0
|
@@ -0,0 +1,3516 @@
|
|
|
1
|
+
# 前后端公共资产清单
|
|
2
|
+
|
|
3
|
+
**版本**:V1.0
|
|
4
|
+
**日期**:2026-05-20
|
|
5
|
+
**说明**:涵盖微服务前后端所有公共资产
|
|
6
|
+
**统计范围**:前端 `cloud_front` 模块 + 后端 `cloud_back` 模块
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 文档结构
|
|
11
|
+
|
|
12
|
+
- [一、基础设施类](#一基础设施类)
|
|
13
|
+
- [1.1 缓存操作](#11-缓存操作)
|
|
14
|
+
- [SysCacheServiceFacade](#syscacheservicefacade)
|
|
15
|
+
- [StringCacheFacade](#stringcachefacade)
|
|
16
|
+
- [1.2 配置中心](#12-配置中心)
|
|
17
|
+
- [NacosUtils](#nacosutils)
|
|
18
|
+
- [二、通用工具类](#二通用工具类)
|
|
19
|
+
- [2.1 SM2 SM3 SM4 加解密](#21-sm2-sm3-sm4-加解密)
|
|
20
|
+
- [Sm2Utils](#sm2utils)
|
|
21
|
+
- [SM3Encoder](#sm3encoder)
|
|
22
|
+
- [Sm4Utils](#sm4utils)
|
|
23
|
+
- [三、平台服务支撑](#三平台服务支撑)
|
|
24
|
+
- [3.1 日志服务](#31-日志服务)
|
|
25
|
+
- [ILogPostService](#ilogpostservice)
|
|
26
|
+
- [@LogDesc/@AddDesc/@DelDesc](#logdescadddescdeldesc)
|
|
27
|
+
- [@LogOperation](#logoperation)
|
|
28
|
+
- [3.3 会话信息获取](#33-会话信息获取)
|
|
29
|
+
- [SessionUtils](#sessionutils)
|
|
30
|
+
- [IUserOnlineTime](#iuseronlinetime)
|
|
31
|
+
- [3.4 多系统集成](#34-多系统集成)
|
|
32
|
+
- [3.5 数据密级过滤](#35-数据密级过滤)
|
|
33
|
+
- [3.6 服务通知](#36-服务通知)
|
|
34
|
+
- [租户同步](#租户同步)
|
|
35
|
+
- [用户权限同步](#用户权限同步)
|
|
36
|
+
- [服务通知二开接口](#服务通知二开接口)
|
|
37
|
+
- [四、业务组件](#四业务组件)
|
|
38
|
+
- [4.1 工作流组件](#41-工作流组件)
|
|
39
|
+
- [4.2 调度组件](#42-调度组件)
|
|
40
|
+
- [4.3 定时任务](#43-定时任务)
|
|
41
|
+
- [五、前端资产](#五前端资产)
|
|
42
|
+
- [5.1 UI组件库](#51-ui组件库)
|
|
43
|
+
- [CloudDialog](#511-通用对话框组件-clouddialog)
|
|
44
|
+
- [UserSelect](#512-用户选择组件-userselect)
|
|
45
|
+
- [UserSelectMulti](#513-多用户选择组件-userselectmulti)
|
|
46
|
+
- [DeptSelect](#514-部门选择组件-deptselect)
|
|
47
|
+
- [RoleSelect](#515-角色选择组件-roleselect)
|
|
48
|
+
- [ImportButton](#516-导入按钮组件-importbutton)
|
|
49
|
+
- [MenuAuth](#517-菜单权限认证组件-menuauth)
|
|
50
|
+
- [ResourceCodeAuth](#518-资源代码授权组件-resourcecodeauth)
|
|
51
|
+
- [ThreeMemberAuth](#519-三员授权组件-threememberauth)
|
|
52
|
+
- [TableHeadSearch](#5110-表格头部搜索组件-tableheadsearch)
|
|
53
|
+
- [VerifiyPassword](#5111-二级鉴别密码验证弹窗-verifiypassword)
|
|
54
|
+
- [CommonHeader](#5112-通用头部组件-commonheader)
|
|
55
|
+
- [5.2 前端工具函数库](#52-前端工具函数库)
|
|
56
|
+
- [数据格式化类](#数据格式化类)
|
|
57
|
+
- [表单校验类](#表单校验类)
|
|
58
|
+
- [防重复点击](#防重复点击)
|
|
59
|
+
- [加解密类](#加解密类)
|
|
60
|
+
- [访问日志类](#访问日志类)
|
|
61
|
+
- [5.3 流程组件与方法](#53-流程组件与方法)
|
|
62
|
+
- [组件及方法统计](#组件及方法统计)
|
|
63
|
+
- [A. Maven依赖坐标](#a-maven依赖坐标)
|
|
64
|
+
- [B. 组件开发注意事项](#b-组件开发注意事项)
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 一、基础设施类
|
|
69
|
+
|
|
70
|
+
### 1.1 缓存操作
|
|
71
|
+
|
|
72
|
+
#### SysCacheServiceFacade
|
|
73
|
+
|
|
74
|
+
##### 1.1.1 新增缓存
|
|
75
|
+
|
|
76
|
+
完整包路径:`com.meritdata.tempo.syscache.service.SysCacheServiceFacade`
|
|
77
|
+
|
|
78
|
+
方法:`put(key, value)`
|
|
79
|
+
|
|
80
|
+
入参:String key, Object value
|
|
81
|
+
|
|
82
|
+
返回:void
|
|
83
|
+
|
|
84
|
+
使用场景:系统存在高频访问且不刷新的变量时,将信息存入redis,无固定期限(永不失效)
|
|
85
|
+
|
|
86
|
+
示例:
|
|
87
|
+
```java
|
|
88
|
+
SysCacheServiceFacade.put("EXECPTION_EVENT_SESSION" + username, allSessions);
|
|
89
|
+
SysCacheServiceFacade.put("user:session:" + userId, userSession);
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
##### 1.1.2 添加缓存并设置生存时间
|
|
93
|
+
|
|
94
|
+
方法:`putExpire(key, value, seconds)`
|
|
95
|
+
|
|
96
|
+
入参:String key, Object value, int seconds
|
|
97
|
+
|
|
98
|
+
返回:void
|
|
99
|
+
|
|
100
|
+
使用场景:需要设置缓存过期时间的场景,如token缓存,seconds为过期秒数
|
|
101
|
+
|
|
102
|
+
示例:
|
|
103
|
+
```java
|
|
104
|
+
SysCacheServiceFacade.putExpire("nacosToken", accessToken, 14400);
|
|
105
|
+
SysCacheServiceFacade.putExpire("temp:data:" + id, value, 3600);
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
##### 1.1.3 添加缓存并设置到期时间
|
|
109
|
+
|
|
110
|
+
方法:`putExpireAt(key, value, unixTime)`
|
|
111
|
+
|
|
112
|
+
入参:String key, Object value, long unixTime
|
|
113
|
+
|
|
114
|
+
返回:void
|
|
115
|
+
|
|
116
|
+
使用场景:需要在指定时间点过期的缓存,unixTime为Unix时间戳(毫秒)
|
|
117
|
+
|
|
118
|
+
**注意**:实际实现内部会自动给unixTime加3000
|
|
119
|
+
|
|
120
|
+
示例:
|
|
121
|
+
```java
|
|
122
|
+
// unixTime为毫秒时间戳
|
|
123
|
+
SysCacheServiceFacade.putExpireAt("event:expire", value, System.currentTimeMillis() + 3600000);
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
##### 1.1.4 读取缓存
|
|
127
|
+
|
|
128
|
+
方法:`get(key)`
|
|
129
|
+
|
|
130
|
+
入参:String key
|
|
131
|
+
|
|
132
|
+
返回:Object
|
|
133
|
+
|
|
134
|
+
使用场景:获取已存储的缓存值
|
|
135
|
+
|
|
136
|
+
示例:
|
|
137
|
+
```java
|
|
138
|
+
String token = SysCacheServiceFacade.get("nacosToken").toString();
|
|
139
|
+
Object session = SysCacheServiceFacade.get("user:session:" + userId);
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
##### 1.1.5 判断key是否存在
|
|
143
|
+
|
|
144
|
+
方法:`isExist(key)`
|
|
145
|
+
|
|
146
|
+
入参:String key
|
|
147
|
+
|
|
148
|
+
返回:Boolean
|
|
149
|
+
|
|
150
|
+
使用场景:判断某个缓存是否已存在
|
|
151
|
+
|
|
152
|
+
示例:
|
|
153
|
+
```java
|
|
154
|
+
boolean exists = SysCacheServiceFacade.isExist("nacosToken");
|
|
155
|
+
if (exists) {
|
|
156
|
+
// token存在,刷新或使用
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
##### 1.1.6 清除缓存
|
|
161
|
+
|
|
162
|
+
方法:`remove(key)`
|
|
163
|
+
|
|
164
|
+
入参:String key
|
|
165
|
+
|
|
166
|
+
返回:void
|
|
167
|
+
|
|
168
|
+
使用场景:主动清除某个缓存
|
|
169
|
+
|
|
170
|
+
示例:
|
|
171
|
+
```java
|
|
172
|
+
SysCacheServiceFacade.remove("nacosToken");
|
|
173
|
+
SysCacheServiceFacade.remove("user:session:" + userId);
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
##### 1.1.7 读取Hash缓存
|
|
177
|
+
|
|
178
|
+
方法:`hget(h, hkey)`
|
|
179
|
+
|
|
180
|
+
入参:String h, String hkey
|
|
181
|
+
|
|
182
|
+
返回:Object
|
|
183
|
+
|
|
184
|
+
使用场景:从Hash结构中获取单个字段值
|
|
185
|
+
|
|
186
|
+
示例:
|
|
187
|
+
```java
|
|
188
|
+
User user = (User) SysCacheServiceFacade.hget(CACHE_SESSION_LIST_KEY, loginName);
|
|
189
|
+
Object value = SysCacheServiceFacade.hget("user:hash", "username");
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
##### 1.1.8 写入Hash缓存
|
|
193
|
+
|
|
194
|
+
方法:`hset(h, hkey, hvalue)`
|
|
195
|
+
|
|
196
|
+
入参:String h, String hkey, Object hvalue
|
|
197
|
+
|
|
198
|
+
返回:void
|
|
199
|
+
|
|
200
|
+
使用场景:将数据以Hash结构存储,常用于存储用户会话信息
|
|
201
|
+
|
|
202
|
+
示例:
|
|
203
|
+
```java
|
|
204
|
+
SysCacheServiceFacade.hset(CACHE_SESSION_LIST_KEY, user.getUsername(), user);
|
|
205
|
+
SysCacheServiceFacade.hset("user:profile", userId, userProfile);
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
##### 1.1.9 获取Hash所有数据
|
|
209
|
+
|
|
210
|
+
方法:`hgetAll(key)`
|
|
211
|
+
|
|
212
|
+
入参:String key
|
|
213
|
+
|
|
214
|
+
返回:Map<String, Object>
|
|
215
|
+
|
|
216
|
+
使用场景:获取Hash结构中的所有键值对
|
|
217
|
+
|
|
218
|
+
示例:
|
|
219
|
+
```java
|
|
220
|
+
Map<String, Object> allUsers = SysCacheServiceFacade.hgetAll(CACHE_SESSION_LIST_KEY);
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
##### 1.1.10 删除Hash字段
|
|
224
|
+
|
|
225
|
+
方法:`hdel(h, hkey)`
|
|
226
|
+
|
|
227
|
+
入参:String h, String hkey
|
|
228
|
+
|
|
229
|
+
返回:Long
|
|
230
|
+
|
|
231
|
+
使用场景:删除Hash中的指定字段
|
|
232
|
+
|
|
233
|
+
示例:
|
|
234
|
+
```java
|
|
235
|
+
SysCacheServiceFacade.hdel(CACHE_SESSION_LIST_KEY, loginName);
|
|
236
|
+
SysCacheServiceFacade.hdel("user:profile", userId);
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
##### 1.1.11 获取Hash所有字段
|
|
240
|
+
|
|
241
|
+
方法:`hkeys(h)`
|
|
242
|
+
|
|
243
|
+
入参:String h
|
|
244
|
+
|
|
245
|
+
返回:Set<String>
|
|
246
|
+
|
|
247
|
+
使用场景:获取Hash结构中的所有字段名
|
|
248
|
+
|
|
249
|
+
示例:
|
|
250
|
+
```java
|
|
251
|
+
Set<String> fields = SysCacheServiceFacade.hkeys(CACHE_SESSION_LIST_KEY);
|
|
252
|
+
for (String key : fields) {
|
|
253
|
+
// 遍历所有缓存的用户名
|
|
254
|
+
}
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
##### 1.1.12 获取Hash所有值
|
|
258
|
+
|
|
259
|
+
方法:`hvalues(h)`
|
|
260
|
+
|
|
261
|
+
入参:String h
|
|
262
|
+
|
|
263
|
+
返回:List<Object>
|
|
264
|
+
|
|
265
|
+
使用场景:获取Hash结构中的所有值
|
|
266
|
+
|
|
267
|
+
示例:
|
|
268
|
+
```java
|
|
269
|
+
List<Object> allUsers = SysCacheServiceFacade.hvalues(CACHE_SESSION_LIST_KEY);
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
##### 1.1.13 批量读取
|
|
273
|
+
|
|
274
|
+
方法:`multiGet(keys)`
|
|
275
|
+
|
|
276
|
+
入参:List keys
|
|
277
|
+
|
|
278
|
+
返回:List<Object>
|
|
279
|
+
|
|
280
|
+
使用场景:一次性获取多个缓存值,减少网络开销
|
|
281
|
+
|
|
282
|
+
示例:
|
|
283
|
+
```java
|
|
284
|
+
List<String> keys = Arrays.asList("key1", "key2", "key3");
|
|
285
|
+
List<Object> values = SysCacheServiceFacade.multiGet(keys);
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
##### 1.1.14 队列入队
|
|
289
|
+
|
|
290
|
+
方法:`enqueue(key, value)`
|
|
291
|
+
|
|
292
|
+
入参:String key, T value
|
|
293
|
+
|
|
294
|
+
返回:Long
|
|
295
|
+
|
|
296
|
+
使用场景:实现消息队列的入队操作
|
|
297
|
+
|
|
298
|
+
示例:
|
|
299
|
+
```java
|
|
300
|
+
SysCacheServiceFacade.enqueue("task_queue", taskData);
|
|
301
|
+
SysCacheServiceFacade.enqueue("async:job:queue", jobMessage);
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
##### 1.1.15 队列出队
|
|
305
|
+
|
|
306
|
+
方法:`dequeue(key)`
|
|
307
|
+
|
|
308
|
+
入参:String key
|
|
309
|
+
|
|
310
|
+
返回:Object
|
|
311
|
+
|
|
312
|
+
使用场景:实现消息队列的出队操作
|
|
313
|
+
|
|
314
|
+
示例:
|
|
315
|
+
```java
|
|
316
|
+
Object data = SysCacheServiceFacade.dequeue("task_queue");
|
|
317
|
+
while ((data = SysCacheServiceFacade.dequeue("task_queue")) != null) {
|
|
318
|
+
// 处理队列数据
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
##### 1.1.16 批量出队
|
|
323
|
+
|
|
324
|
+
方法:`dequeueList(key)`
|
|
325
|
+
|
|
326
|
+
入参:String key
|
|
327
|
+
|
|
328
|
+
返回:List<Object>
|
|
329
|
+
|
|
330
|
+
使用场景:一次性出队多个数据
|
|
331
|
+
|
|
332
|
+
示例:
|
|
333
|
+
```java
|
|
334
|
+
List<Object> batchData = SysCacheServiceFacade.dequeueList("task_queue");
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
##### 1.1.17 获取队列长度
|
|
338
|
+
|
|
339
|
+
方法:`queueSize(key)`
|
|
340
|
+
|
|
341
|
+
入参:String key
|
|
342
|
+
|
|
343
|
+
返回:Long
|
|
344
|
+
|
|
345
|
+
使用场景:查看队列中等待处理的任务数量
|
|
346
|
+
|
|
347
|
+
示例:
|
|
348
|
+
```java
|
|
349
|
+
Long size = SysCacheServiceFacade.queueSize("task_queue");
|
|
350
|
+
if (size > 100) {
|
|
351
|
+
// 队列积压告警
|
|
352
|
+
}
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
##### 1.1.18 递增
|
|
356
|
+
|
|
357
|
+
方法:`increment(k)` / `increment(k, delta)`
|
|
358
|
+
|
|
359
|
+
入参:String k, long delta(可选)
|
|
360
|
+
|
|
361
|
+
返回:Long
|
|
362
|
+
|
|
363
|
+
使用场景:计数器实现,如访问次数统计、序列号生成
|
|
364
|
+
|
|
365
|
+
示例:
|
|
366
|
+
```java
|
|
367
|
+
SysCacheServiceFacade.increment("page:views");
|
|
368
|
+
SysCacheServiceFacade.increment("request:count", 1);
|
|
369
|
+
Long newValue = SysCacheServiceFacade.increment("order:seq");
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
##### 1.1.19 递减
|
|
373
|
+
|
|
374
|
+
方法:`decrement(k)` / `decrement(k, delta)`
|
|
375
|
+
|
|
376
|
+
入参:String k, long delta(可选)
|
|
377
|
+
|
|
378
|
+
返回:Long
|
|
379
|
+
|
|
380
|
+
使用场景:计数器递减,如库存扣减
|
|
381
|
+
|
|
382
|
+
示例:
|
|
383
|
+
```java
|
|
384
|
+
SysCacheServiceFacade.decrement("stock:count");
|
|
385
|
+
Long remaining = SysCacheServiceFacade.decrement("inventory:qty", quantity);
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
##### 1.1.20 不存在则设置
|
|
389
|
+
|
|
390
|
+
方法:`setIfAbsent(k, v)`
|
|
391
|
+
|
|
392
|
+
入参:String k, Object v
|
|
393
|
+
|
|
394
|
+
返回:boolean
|
|
395
|
+
|
|
396
|
+
使用场景:分布式锁、幂等性控制、新用户标识
|
|
397
|
+
|
|
398
|
+
示例:
|
|
399
|
+
```java
|
|
400
|
+
boolean locked = SysCacheServiceFacade.setIfAbsent("lock:order:" + orderId, "locked");
|
|
401
|
+
if (locked) {
|
|
402
|
+
// 获取锁成功,处理订单
|
|
403
|
+
}
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
##### 1.1.21 获取旧值并设置新值
|
|
407
|
+
|
|
408
|
+
方法:`getAndSet(k, v)`
|
|
409
|
+
|
|
410
|
+
入参:String k, Object v
|
|
411
|
+
|
|
412
|
+
返回:Object
|
|
413
|
+
|
|
414
|
+
使用场景:原子性获取旧值并设置新值,如token刷新
|
|
415
|
+
|
|
416
|
+
示例:
|
|
417
|
+
```java
|
|
418
|
+
Object oldToken = SysCacheServiceFacade.getAndSet("user:token:" + userId, newToken);
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
##### 1.1.22 发布消息
|
|
422
|
+
|
|
423
|
+
方法:`publish(channel, message)`
|
|
424
|
+
|
|
425
|
+
入参:String channel, String message
|
|
426
|
+
|
|
427
|
+
返回:void
|
|
428
|
+
|
|
429
|
+
使用场景:Redis发布订阅模式的消息发布
|
|
430
|
+
|
|
431
|
+
示例:
|
|
432
|
+
```java
|
|
433
|
+
SysCacheServiceFacade.publish("channel:notify", "有新消息通知");
|
|
434
|
+
SysCacheServiceFacade.publish("event:update", JSON.toJSONString(event));
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
##### 1.1.23 订阅消息
|
|
438
|
+
|
|
439
|
+
方法:`subscribe(channel, ICacheSubscribeListener)`
|
|
440
|
+
|
|
441
|
+
入参:String channel, ICacheSubscribeListener listener
|
|
442
|
+
|
|
443
|
+
返回:void
|
|
444
|
+
|
|
445
|
+
使用场景:Redis发布订阅模式的消息订阅
|
|
446
|
+
|
|
447
|
+
**调用链**:
|
|
448
|
+
- `SysCacheServiceFacade.subscribe(channel, listener)` - 公开API,参数顺序 `(channel, listener)`
|
|
449
|
+
- 内部调用 `SysCacheServiceContext.subscribe(listener, channel)` - 参数顺序被调换
|
|
450
|
+
- 底层 `ICacheService.subscribe(listener, channel)` - Redis标准顺序
|
|
451
|
+
|
|
452
|
+
**注意**:`ICacheSubscribeListener.onMessage(msg)`回调接口**只接收一个参数msg**
|
|
453
|
+
|
|
454
|
+
示例:
|
|
455
|
+
```java
|
|
456
|
+
// subscribe方法接收(channel, listener),回调onMessage只接收(msg)
|
|
457
|
+
SysCacheServiceFacade.subscribe("channel:notify", (msg) -> {
|
|
458
|
+
// 处理接收到的消息
|
|
459
|
+
System.out.println("收到消息: " + msg);
|
|
460
|
+
});
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
---
|
|
464
|
+
|
|
465
|
+
#### StringCacheFacade
|
|
466
|
+
|
|
467
|
+
##### 1.1.24 String类型缓存-新增
|
|
468
|
+
|
|
469
|
+
完整包路径:`com.meritdata.tempo.syscache.service.StringCacheFacade`
|
|
470
|
+
|
|
471
|
+
方法:`put(key, value)`
|
|
472
|
+
|
|
473
|
+
入参:String key, String value
|
|
474
|
+
|
|
475
|
+
返回:void
|
|
476
|
+
|
|
477
|
+
使用场景:存储字符串类型的缓存数据
|
|
478
|
+
|
|
479
|
+
示例:
|
|
480
|
+
```java
|
|
481
|
+
StringCacheFacade.put("config:version", "1.0.0");
|
|
482
|
+
StringCacheFacade.put("user:name:" + userId, username);
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
##### 1.1.25 String类型缓存-读取
|
|
486
|
+
|
|
487
|
+
方法:`get(key)`
|
|
488
|
+
|
|
489
|
+
入参:String key
|
|
490
|
+
|
|
491
|
+
返回:String
|
|
492
|
+
|
|
493
|
+
使用场景:获取字符串类型的缓存值
|
|
494
|
+
|
|
495
|
+
示例:
|
|
496
|
+
```java
|
|
497
|
+
String version = StringCacheFacade.get("config:version");
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
##### 1.1.26 String类型缓存-批量读取
|
|
501
|
+
|
|
502
|
+
方法:`multiGet(keys)`
|
|
503
|
+
|
|
504
|
+
入参:List keys
|
|
505
|
+
|
|
506
|
+
返回:List<String>
|
|
507
|
+
|
|
508
|
+
使用场景:批量获取字符串缓存
|
|
509
|
+
|
|
510
|
+
示例:
|
|
511
|
+
```java
|
|
512
|
+
List<String> keys = Arrays.asList("key1", "key2");
|
|
513
|
+
List<String> values = StringCacheFacade.multiGet(keys);
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
---
|
|
517
|
+
|
|
518
|
+
### 1.2 配置中心
|
|
519
|
+
|
|
520
|
+
#### NacosUtils
|
|
521
|
+
|
|
522
|
+
**注意**:`NacosUtils` **不是静态工具类**,它是一个Spring Bean,需要通过依赖注入获取实例。类上有`@DisableEncrypt`注解,但方法使用`@Autowired`注入`MeritdataCloudProperties`和`Environment`。
|
|
523
|
+
|
|
524
|
+
**正确用法**(通过Spring注入):
|
|
525
|
+
```java
|
|
526
|
+
@Autowired
|
|
527
|
+
private NacosUtils nacosUtils;
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
##### 1.2.1 获取配置列表
|
|
531
|
+
|
|
532
|
+
完整包路径:`com.meritdata.cloud.utils.NacosUtils`
|
|
533
|
+
|
|
534
|
+
方法:`getConfigList(dataId)`
|
|
535
|
+
|
|
536
|
+
入参:String dataId
|
|
537
|
+
|
|
538
|
+
返回:Map
|
|
539
|
+
|
|
540
|
+
使用场景:获取Nacos上某个配置分组的所有配置项
|
|
541
|
+
|
|
542
|
+
示例:
|
|
543
|
+
```java
|
|
544
|
+
Map configMap = nacosUtils.getConfigList("common-cloud-system-manage.properties");
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
##### 1.2.2 获取配置文件
|
|
548
|
+
|
|
549
|
+
方法:`getConfigFile(dataId)`
|
|
550
|
+
|
|
551
|
+
入参:String dataId
|
|
552
|
+
|
|
553
|
+
返回:String
|
|
554
|
+
|
|
555
|
+
使用场景:获取Nacos上某个配置文件的完整内容
|
|
556
|
+
|
|
557
|
+
示例:
|
|
558
|
+
```java
|
|
559
|
+
String content = nacosUtils.getConfigFile("application.properties");
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
##### 1.2.3 获取配置值
|
|
563
|
+
|
|
564
|
+
方法:`getConfigValue(dataId, configKey)`
|
|
565
|
+
|
|
566
|
+
入参:String dataId, String configKey
|
|
567
|
+
|
|
568
|
+
返回:String
|
|
569
|
+
|
|
570
|
+
使用场景:获取Nacos上指定配置项的值
|
|
571
|
+
|
|
572
|
+
示例:
|
|
573
|
+
```java
|
|
574
|
+
String value = nacosUtils.getConfigValue("common-cloud-system-manage.properties", "meritdata.cloud.security-label-show");
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
##### 1.2.4 获取所有配置文件
|
|
578
|
+
|
|
579
|
+
方法:`getAllConfigFile()`
|
|
580
|
+
|
|
581
|
+
入参:无
|
|
582
|
+
|
|
583
|
+
返回:Map<String, String>
|
|
584
|
+
|
|
585
|
+
使用场景:获取Nacos上所有配置文件的键值对
|
|
586
|
+
|
|
587
|
+
示例:
|
|
588
|
+
```java
|
|
589
|
+
Map<String, String> allConfigs = nacosUtils.getAllConfigFile();
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
##### 1.2.5 修改配置
|
|
593
|
+
|
|
594
|
+
方法:`updateConfig(dataId, configKey, configValue)`
|
|
595
|
+
|
|
596
|
+
入参:String dataId, String configKey, String configValue
|
|
597
|
+
|
|
598
|
+
返回:boolean
|
|
599
|
+
|
|
600
|
+
使用场景:修改Nacos上的配置值
|
|
601
|
+
|
|
602
|
+
示例:
|
|
603
|
+
```java
|
|
604
|
+
boolean success = nacosUtils.updateConfig("common-cloud-system-manage.properties",
|
|
605
|
+
"meritdata.cloud.security-label-show", "true");
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
##### 1.2.6 更新配置文件
|
|
609
|
+
|
|
610
|
+
方法:`updateConfigFile(dataId, quote)`
|
|
611
|
+
|
|
612
|
+
入参:String dataId, String quote
|
|
613
|
+
|
|
614
|
+
返回:boolean
|
|
615
|
+
|
|
616
|
+
使用场景:更新整个配置文件内容
|
|
617
|
+
|
|
618
|
+
示例:
|
|
619
|
+
```java
|
|
620
|
+
boolean success = nacosUtils.updateConfigFile("application.properties", newConfigContent);
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
##### 1.2.7 新增配置
|
|
624
|
+
|
|
625
|
+
方法:`addConfig(dataId, configKey, configValue)`
|
|
626
|
+
|
|
627
|
+
入参:String dataId, String configKey, String configValue
|
|
628
|
+
|
|
629
|
+
返回:boolean
|
|
630
|
+
|
|
631
|
+
使用场景:在Nacos上新增配置项
|
|
632
|
+
|
|
633
|
+
示例:
|
|
634
|
+
```java
|
|
635
|
+
boolean added = nacosUtils.addConfig("custom.properties", "custom.key", "customValue");
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
##### 1.2.8 重置配置文件
|
|
639
|
+
|
|
640
|
+
方法:`reSetConfigFile(dataId, quote)`
|
|
641
|
+
|
|
642
|
+
入参:String dataId, String quote
|
|
643
|
+
|
|
644
|
+
返回:boolean
|
|
645
|
+
|
|
646
|
+
使用场景:重置配置文件内容
|
|
647
|
+
|
|
648
|
+
示例:
|
|
649
|
+
```java
|
|
650
|
+
nacosUtils.reSetConfigFile("reset.properties", defaultContent);
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
##### 1.2.9 清除配置文件
|
|
654
|
+
|
|
655
|
+
方法:`clearConfigFile(dataId)`
|
|
656
|
+
|
|
657
|
+
入参:String dataId
|
|
658
|
+
|
|
659
|
+
返回:boolean
|
|
660
|
+
|
|
661
|
+
使用场景:清除Nacos上某个配置文件的所有内容
|
|
662
|
+
|
|
663
|
+
示例:
|
|
664
|
+
```java
|
|
665
|
+
nacosUtils.clearConfigFile(dataId);
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
##### 1.2.10 获取Nacos Token
|
|
669
|
+
|
|
670
|
+
方法:`getNacosToken()`
|
|
671
|
+
|
|
672
|
+
入参:无
|
|
673
|
+
|
|
674
|
+
返回:String
|
|
675
|
+
|
|
676
|
+
使用场景:获取Nacos访问令牌
|
|
677
|
+
|
|
678
|
+
示例:
|
|
679
|
+
```java
|
|
680
|
+
String token = nacosUtils.getNacosToken();
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
---
|
|
684
|
+
|
|
685
|
+
## 二、通用工具类
|
|
686
|
+
|
|
687
|
+
### 2.1 SM2 SM3 SM4 加解密
|
|
688
|
+
|
|
689
|
+
#### Sm2Utils
|
|
690
|
+
|
|
691
|
+
##### 2.1.1 生成SM2密钥对
|
|
692
|
+
|
|
693
|
+
完整包路径:`com.meritdata.cloud.utils.Sm2Utils`
|
|
694
|
+
|
|
695
|
+
方法:`createSM2Key()`
|
|
696
|
+
|
|
697
|
+
入参:无
|
|
698
|
+
|
|
699
|
+
返回:MutablePair<String, String> (公钥, 私钥)
|
|
700
|
+
|
|
701
|
+
使用场景:生成SM2密钥对用于数据加密传输
|
|
702
|
+
|
|
703
|
+
示例:
|
|
704
|
+
```java
|
|
705
|
+
MutablePair<String, String> keyPair = Sm2Utils.createSM2Key();
|
|
706
|
+
String publicKey = keyPair.getLeft();
|
|
707
|
+
String privateKey = keyPair.getRight();
|
|
708
|
+
```
|
|
709
|
+
|
|
710
|
+
##### 2.1.2 SM2加密
|
|
711
|
+
|
|
712
|
+
方法:`encrypt(data, publicKey)`
|
|
713
|
+
|
|
714
|
+
入参:String data, String publicKey
|
|
715
|
+
|
|
716
|
+
返回:String
|
|
717
|
+
|
|
718
|
+
使用场景:SM2公钥加密,用于数据加密传输
|
|
719
|
+
|
|
720
|
+
示例:
|
|
721
|
+
```java
|
|
722
|
+
String encrypted = Sm2Utils.encrypt(data, publicKey);
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
##### 2.1.3 SM2解密
|
|
726
|
+
|
|
727
|
+
方法:`decrypt(data, privateKey)`
|
|
728
|
+
|
|
729
|
+
入参:String data, String privateKey
|
|
730
|
+
|
|
731
|
+
返回:String
|
|
732
|
+
|
|
733
|
+
使用场景:SM2私钥解密,用于解密接收的加密数据,从header获取SM4密钥
|
|
734
|
+
|
|
735
|
+
示例:
|
|
736
|
+
```java
|
|
737
|
+
// 从请求header获取SM4密钥
|
|
738
|
+
String key = Sm2Utils.decrypt(request.getHeader("smPrivate"), meritdataCloudProperties.getSmPrivateKey());
|
|
739
|
+
```
|
|
740
|
+
|
|
741
|
+
#### SM3Encoder
|
|
742
|
+
|
|
743
|
+
##### 2.1.4 SM3加密
|
|
744
|
+
|
|
745
|
+
完整包路径:`com.meritdata.cloud.utils.SM3Encoder`
|
|
746
|
+
|
|
747
|
+
方法:`encryptWithHMacMD5(str)` / `encode(str)`
|
|
748
|
+
|
|
749
|
+
入参:String str
|
|
750
|
+
|
|
751
|
+
返回:String
|
|
752
|
+
|
|
753
|
+
使用场景:SM3哈希算法,用于数据完整性校验、密码加密
|
|
754
|
+
|
|
755
|
+
**注意**:`SM3Encoder`没有`encrypt(str)`方法,应该使用`encryptWithHMacMD5(str)`或从`PasswordEncoder`接口继承的`encode(CharSequence)`方法
|
|
756
|
+
|
|
757
|
+
示例:
|
|
758
|
+
```java
|
|
759
|
+
// 正确用法 - 使用encryptWithHMacMD5
|
|
760
|
+
String hash = SM3Encoder.encryptWithHMacMD5(originalPassword);
|
|
761
|
+
boolean matches = SM3Encoder.encryptWithHMacMD5(rawPassword).equals(hash);
|
|
762
|
+
|
|
763
|
+
// 或者实现PasswordEncoder接口的encode方法
|
|
764
|
+
String encoded = SM3Encoder.encode(rawPassword);
|
|
765
|
+
```
|
|
766
|
+
|
|
767
|
+
##### 2.1.5 SM3加密(带HMAC)
|
|
768
|
+
|
|
769
|
+
方法:`encryptWithHMacMD5(src)`
|
|
770
|
+
|
|
771
|
+
入参:String src
|
|
772
|
+
|
|
773
|
+
返回:String
|
|
774
|
+
|
|
775
|
+
使用场景:SM3带密钥的哈希运算
|
|
776
|
+
|
|
777
|
+
示例:
|
|
778
|
+
```java
|
|
779
|
+
String sm3Data = SM3Encoder.encryptWithHMacMD5(word);
|
|
780
|
+
```
|
|
781
|
+
|
|
782
|
+
#### Sm4Utils
|
|
783
|
+
|
|
784
|
+
##### 2.1.6 SM4加密(默认密钥)
|
|
785
|
+
|
|
786
|
+
完整包路径:`com.meritdata.cloud.utils.Sm4Utils`
|
|
787
|
+
|
|
788
|
+
常量:`SM4_KEY = "nXwqj7JVe@czbD4E"`
|
|
789
|
+
|
|
790
|
+
方法:`encrypt(text)` / `encrypt(text, key)`
|
|
791
|
+
|
|
792
|
+
入参:String text, String key(可选)
|
|
793
|
+
|
|
794
|
+
返回:String
|
|
795
|
+
|
|
796
|
+
使用场景:SM4对称加密,用于大量数据的加密存储
|
|
797
|
+
|
|
798
|
+
示例:
|
|
799
|
+
```java
|
|
800
|
+
// 使用默认密钥加密
|
|
801
|
+
String encrypted = Sm4Utils.encrypt(plainText);
|
|
802
|
+
|
|
803
|
+
// 使用指定密钥加密
|
|
804
|
+
String encrypted = Sm4Utils.encrypt(plainText, privateKey);
|
|
805
|
+
|
|
806
|
+
// 加密用户数据
|
|
807
|
+
handset = Sm4Utils.encrypt(handset, privateKey);
|
|
808
|
+
email = Sm4Utils.encrypt(email, privateKey);
|
|
809
|
+
```
|
|
810
|
+
|
|
811
|
+
##### 2.1.7 SM4解密
|
|
812
|
+
|
|
813
|
+
方法:`decrypt(encryptStr)` / `decrypt(encryptStr, key)` / `decrypt(encryptStr, sm4privateKey, privateKey, flag)`
|
|
814
|
+
|
|
815
|
+
入参:String encryptStr, String key(可选), String sm4privateKey(可选), String flag(可选)
|
|
816
|
+
|
|
817
|
+
返回:String
|
|
818
|
+
|
|
819
|
+
使用场景:SM4对称解密,用于解密存储的加密数据
|
|
820
|
+
|
|
821
|
+
示例:
|
|
822
|
+
```java
|
|
823
|
+
// 使用默认密钥解密
|
|
824
|
+
String decrypted = Sm4Utils.decrypt(encryptStr);
|
|
825
|
+
|
|
826
|
+
// 使用指定密钥解密
|
|
827
|
+
String decrypted = Sm4Utils.decrypt(encryptStr, privateKey);
|
|
828
|
+
|
|
829
|
+
// SM2解密后SM4解密 (flag="1"表示需要SM2解密)
|
|
830
|
+
userNameDec = Sm4Utils.decrypt(username, key, "", "1");
|
|
831
|
+
passwordDec = Sm4Utils.decrypt(password, key, "", "1");
|
|
832
|
+
```
|
|
833
|
+
|
|
834
|
+
---
|
|
835
|
+
|
|
836
|
+
## 三、平台服务支撑
|
|
837
|
+
|
|
838
|
+
### 3.1 日志服务
|
|
839
|
+
|
|
840
|
+
基于 `ILogPostService` 的日志服务,所有对外接口均通过 Feign 远程调用实现。支持操作日志、访问日志、登录日志、错误日志等多种日志类型。
|
|
841
|
+
|
|
842
|
+
**二开服务使用方式**:通过 `@Autowired` 注入 `ILogPostService`,直接调用其方法。
|
|
843
|
+
|
|
844
|
+
#### ILogPostService
|
|
845
|
+
|
|
846
|
+
完整包路径:`com.meritdata.cloud.log.service.ILogPostService`
|
|
847
|
+
|
|
848
|
+
服务名称:`cloud-system-manage`
|
|
849
|
+
|
|
850
|
+
基础路径:`/api/basic/log`
|
|
851
|
+
|
|
852
|
+
##### 3.1.1 记录操作日志
|
|
853
|
+
|
|
854
|
+
方法:`POST /post`
|
|
855
|
+
|
|
856
|
+
入参:Message param
|
|
857
|
+
|
|
858
|
+
返回:boolean
|
|
859
|
+
|
|
860
|
+
使用场景:记录系统操作日志,支持新增、编辑、删除等操作类型的日志记录
|
|
861
|
+
|
|
862
|
+
**使用步骤:**
|
|
863
|
+
|
|
864
|
+
日志示例: [用户1:user1] 新增人员[测试用户1:testUser1]
|
|
865
|
+
|
|
866
|
+
[用户1:user1] 编辑人员[测试用户1:testUser1]:"姓名"由[测试用户1]变更为[测试用户2],"身份证号码"变更,"邮件地址"变更,"手机号"变更
|
|
867
|
+
|
|
868
|
+
[[用户1:user1] 删除人员[测试用户1:testUser1]
|
|
869
|
+
|
|
870
|
+
1. **注入日志服务**
|
|
871
|
+
|
|
872
|
+
```java
|
|
873
|
+
// 注入日志服务
|
|
874
|
+
@Autowired
|
|
875
|
+
private ILogPostService logPostService;
|
|
876
|
+
```
|
|
877
|
+
|
|
878
|
+
2. **实体类添加日志注解**@LogDesc(value = "实体类描述", keyField = "name")标注实体描述和新增/编辑/删除等操作日志需要记录的主键字段
|
|
879
|
+
|
|
880
|
+
3. 对实体类中需要记录到日志中的**字段添加操作日志注解@LogDesc**("字段的中文描述") ,当字段发生变化时会记录变化日志,当添加changeFlag=true时打印"xxx"变更,用于一些敏感信息日志不打印细节仅打印变更操作,多个字段变更操作逗号分隔。
|
|
881
|
+
|
|
882
|
+
```java
|
|
883
|
+
// 此处为类上的注解,value为实体类的中文描述,如新增人员/编辑人员/删除人员,keyField为日志需要记录的字段:新增人员[用户1]
|
|
884
|
+
@LogDesc(value = "人员", keyField = "name")
|
|
885
|
+
@Entity
|
|
886
|
+
@Table(name = "[PF_ORG_USER]")
|
|
887
|
+
public class Emp extends CloudBaseEntity implements Serializable {
|
|
888
|
+
|
|
889
|
+
@Id
|
|
890
|
+
@Column(name = "[ID]", length = 32)
|
|
891
|
+
private String id;
|
|
892
|
+
|
|
893
|
+
// "姓名"由[修改前值]变更为[修改后值]
|
|
894
|
+
@Column(name = "[NAME]", length = 200)
|
|
895
|
+
@LogDesc("姓名") // 字段描述
|
|
896
|
+
@DelDesc // 删除时记录此字段
|
|
897
|
+
@AddDesc // 新增时记录此字段
|
|
898
|
+
private String name;
|
|
899
|
+
|
|
900
|
+
// "编码"由[修改前值]变更为[修改后值]
|
|
901
|
+
@Column(name = "[CODE]")
|
|
902
|
+
@LogDesc("编码")
|
|
903
|
+
private String code;
|
|
904
|
+
|
|
905
|
+
// "性别"由[空]变更为[女]
|
|
906
|
+
@Column(name = "[SEX]")
|
|
907
|
+
@LogDesc(value = "性别", lookupType = "sex") // lookupType自动转换数据字典
|
|
908
|
+
private Integer sex;
|
|
909
|
+
|
|
910
|
+
// changeFlag=true打印:"手机号"变更
|
|
911
|
+
@Column(name = "[HANDSET]", length = 256)
|
|
912
|
+
@LogDesc(value = "手机号", changeFlag = true)
|
|
913
|
+
private String handset;
|
|
914
|
+
|
|
915
|
+
// changeFlag=true打印:"身份证号码"变更
|
|
916
|
+
@Column(name = "[CARD]", length = 60)
|
|
917
|
+
@LogDesc(value = "身份证号码", changeFlag = true)
|
|
918
|
+
private String card;
|
|
919
|
+
}
|
|
920
|
+
```
|
|
921
|
+
|
|
922
|
+
与消息构造时进行消息比对搭配使用:
|
|
923
|
+
|
|
924
|
+
```java
|
|
925
|
+
Emp empDb = service.getEmpById(emp.getId());
|
|
926
|
+
// 自动生成变更日志: "字段描述1"由[修改前值]变更为[修改后值],"字段描述2"由[修改前值]变更为[修改后值]
|
|
927
|
+
String compareLog = CompareUtils.getCompareLog(empDb, emp);
|
|
928
|
+
```
|
|
929
|
+
|
|
930
|
+
4. **配置日志模板文件**
|
|
931
|
+
|
|
932
|
+
在 `src/main/resources/logs/` 目录下创建 `{module}.logs.properties` 文件:
|
|
933
|
+
|
|
934
|
+
必须配置业务模块: {module}.xxx.bmodule;功能模块{module}.xxx.fmodule;
|
|
935
|
+
|
|
936
|
+
在日志管理页面展示按业务模块、功能模块进行记录,可进行筛选
|
|
937
|
+
|
|
938
|
+
```
|
|
939
|
+
# 配置文件示例:ou.logs.properties
|
|
940
|
+
ou.org.bmodule=组织机构
|
|
941
|
+
ou.emp.fmodule=人员维护
|
|
942
|
+
ou.emp.create=新增人员
|
|
943
|
+
ou.emp.create.message=新增人员[{}]
|
|
944
|
+
ou.emp.update=编辑人员
|
|
945
|
+
ou.emp.delete=删除人员
|
|
946
|
+
ou.emp.delete.message=删除人员{}
|
|
947
|
+
```
|
|
948
|
+
|
|
949
|
+
搭配LogPattenUtils进行获取使用:
|
|
950
|
+
|
|
951
|
+
```
|
|
952
|
+
LogPattenUtils.getProperty("ou.org.bmodule")
|
|
953
|
+
```
|
|
954
|
+
|
|
955
|
+
5. **日志对象构建与记录**
|
|
956
|
+
|
|
957
|
+
// 新增日志
|
|
958
|
+
Message msg = new Message(操作类型,业务模块,功能模块,操作说明,操作信息,操作状态);
|
|
959
|
+
logPostService.postLog(msg);
|
|
960
|
+
|
|
961
|
+
```java
|
|
962
|
+
// 新增日志
|
|
963
|
+
Message msg = new Message(Message.TYPE_OPT,
|
|
964
|
+
LogPattenUtils.getProperty("ou.org.bmodule"), // 业务模块
|
|
965
|
+
LogPattenUtils.getProperty("ou.emp.fmodule"), // 功能模块
|
|
966
|
+
LogPattenUtils.getProperty("ou.emp.create"), // 操作说明
|
|
967
|
+
StrUtil.format(LogPattenUtils.getProperty("ou.emp.create.message"), emp.getName()), // 操作信息
|
|
968
|
+
Message.STATUS_SUCESS); // 操作状态
|
|
969
|
+
logPostService.postLog(msg);
|
|
970
|
+
|
|
971
|
+
// 编辑日志(自动对比变更)
|
|
972
|
+
Emp empDb = service.getEmpById(emp.getId());
|
|
973
|
+
String compareLog = CompareUtils.getCompareLog(empDb, emp); // 自动生成变更日志
|
|
974
|
+
Message msg = new Message(Message.TYPE_OPT,
|
|
975
|
+
LogPattenUtils.getProperty("ou.org.bmodule"),
|
|
976
|
+
LogPattenUtils.getProperty("ou.emp.fmodule"),
|
|
977
|
+
LogPattenUtils.getProperty("ou.emp.update"),
|
|
978
|
+
compareLog,
|
|
979
|
+
Message.STATUS_SUCESS);
|
|
980
|
+
logPostService.postLog(msg);
|
|
981
|
+
|
|
982
|
+
// 删除日志
|
|
983
|
+
Message msg = new Message(Message.TYPE_OPT,
|
|
984
|
+
LogPattenUtils.getProperty("ou.org.bmodule"),
|
|
985
|
+
LogPattenUtils.getProperty("ou.emp.fmodule"),
|
|
986
|
+
LogPattenUtils.getProperty("ou.emp.delete"),
|
|
987
|
+
StrUtil.format(LogPattenUtils.getProperty("ou.emp.delete.message"), emp.getName()),
|
|
988
|
+
Message.STATUS_SUCESS);
|
|
989
|
+
logPostService.postLog(msg);
|
|
990
|
+
```
|
|
991
|
+
|
|
992
|
+
###### 3.1.1.1. **Message 参数说明**:
|
|
993
|
+
|
|
994
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
995
|
+
|------|------|------|------|
|
|
996
|
+
| type | String | 是 | 日志类型:0-操作日志,1-访问日志,2-登录日志,3-错误日志,5-安全日志,6-服务日志,7-登出日志 |
|
|
997
|
+
| bmodule | String | 是 | 业务模块 |
|
|
998
|
+
| fmodule | String | 是 | 功能模块 |
|
|
999
|
+
| operation | String | 是 | 操作描述,如"新增"、"编辑"、"删除" |
|
|
1000
|
+
| message | String | 否 | 日志内容/变更详情 |
|
|
1001
|
+
| status | String | 是 | 操作状态:1-成功,0-失败 |
|
|
1002
|
+
|
|
1003
|
+
###### 3.1.1.2.**@LogDesc 实体字段注解**
|
|
1004
|
+
|
|
1005
|
+
完整包路径:`com.meritdata.cloud.base.LogDesc`
|
|
1006
|
+
|
|
1007
|
+
用于标注实体类字段,配合 `CompareUtils` 自动生成变更日志。
|
|
1008
|
+
|
|
1009
|
+
```java
|
|
1010
|
+
@Target({ElementType.FIELD, ElementType.TYPE})
|
|
1011
|
+
@Retention(RetentionPolicy.RUNTIME)
|
|
1012
|
+
@Documented
|
|
1013
|
+
public @interface LogDesc {
|
|
1014
|
+
String value() default ""; // 字段中文描述
|
|
1015
|
+
String keyField() default ""; // 主键列名(用于生成日志前缀)
|
|
1016
|
+
String[] relationField() default {}; // 关系列
|
|
1017
|
+
String relationWord() default ""; // 关系列拼接字符
|
|
1018
|
+
String lookupType() default ""; // 数据字典类型(自动转换编码为标签)
|
|
1019
|
+
String moduleType() default ""; // 自定义字段MODULE_TYPE
|
|
1020
|
+
String[] typeCustom() default {}; // 自定义类型映射
|
|
1021
|
+
boolean booleanFlag() default false; // 布尔类型转换标识
|
|
1022
|
+
boolean changeFlag() default false; // 变更类型标识(打印"XX变更")
|
|
1023
|
+
boolean themType() default false; // 主题类型标识
|
|
1024
|
+
}
|
|
1025
|
+
```
|
|
1026
|
+
|
|
1027
|
+
**相关注解**:
|
|
1028
|
+
- `@AddDesc` - 标记新增操作需要记录的字段
|
|
1029
|
+
|
|
1030
|
+
- `@DelDesc` - 标记删除操作需要记录的字段
|
|
1031
|
+
|
|
1032
|
+
changeFlag = true时,打印:"${字段描述}"变更
|
|
1033
|
+
|
|
1034
|
+
**@LogDesc 实体类配置示例**
|
|
1035
|
+
|
|
1036
|
+
来源:`Emp.java` - 人员实体类
|
|
1037
|
+
|
|
1038
|
+
```java
|
|
1039
|
+
@LogDesc(value = "人员", keyField = "name")
|
|
1040
|
+
@Entity
|
|
1041
|
+
@Table(name = "[PF_ORG_USER]")
|
|
1042
|
+
public class Emp extends CloudBaseEntity implements Serializable {
|
|
1043
|
+
|
|
1044
|
+
@Id
|
|
1045
|
+
@Column(name = "[ID]", length = 32)
|
|
1046
|
+
private String id;
|
|
1047
|
+
|
|
1048
|
+
@Column(name = "[NAME]", length = 200)
|
|
1049
|
+
@LogDesc("姓名") // 字段描述
|
|
1050
|
+
@DelDesc // 删除时记录此字段
|
|
1051
|
+
@AddDesc // 新增时记录此字段
|
|
1052
|
+
private String name;
|
|
1053
|
+
|
|
1054
|
+
@Column(name = "[CODE]")
|
|
1055
|
+
@LogDesc("编码")
|
|
1056
|
+
private String code;
|
|
1057
|
+
|
|
1058
|
+
@Column(name = "[SEX]")
|
|
1059
|
+
@LogDesc(value = "性别", lookupType = "sex") // lookupType自动转换数据字典
|
|
1060
|
+
private Integer sex;
|
|
1061
|
+
|
|
1062
|
+
@Column(name = "[HANDSET]", length = 256)
|
|
1063
|
+
@LogDesc(value = "手机号", changeFlag = true) // changeFlag=true打印"手机号变更"
|
|
1064
|
+
private String handset;
|
|
1065
|
+
|
|
1066
|
+
@Column(name = "[CARD]", length = 60)
|
|
1067
|
+
@LogDesc(value = "身份证号码", changeFlag = true)
|
|
1068
|
+
private String card;
|
|
1069
|
+
}
|
|
1070
|
+
```
|
|
1071
|
+
|
|
1072
|
+
**CompareUtils 自动生成变更日志**
|
|
1073
|
+
|
|
1074
|
+
完整包路径:`com.meritdata.cloud.log.compare.CompareUtils`
|
|
1075
|
+
|
|
1076
|
+
```java
|
|
1077
|
+
// 对比两个实体对象,生成变更日志
|
|
1078
|
+
// 格式:编辑人员[张三]: "姓名"由[张三]变更为[李四], "编码"由[001]变更为[002]
|
|
1079
|
+
String compareLog = CompareUtils.getCompareLog(oldEmp, newEmp);
|
|
1080
|
+
|
|
1081
|
+
// 示例输出:
|
|
1082
|
+
// 编辑人员[张三]: "姓名"由[张三]变更为[李四], "性别"由[男]变更为[女], "手机号"变更
|
|
1083
|
+
```
|
|
1084
|
+
|
|
1085
|
+
---
|
|
1086
|
+
|
|
1087
|
+
###### 3.1.1.3.**@LogOperation 注解说明**
|
|
1088
|
+
|
|
1089
|
+
完整包路径:`com.meritdata.cloud.log.aspect.LogOperation`
|
|
1090
|
+
|
|
1091
|
+
```java
|
|
1092
|
+
@Target({ElementType.METHOD})
|
|
1093
|
+
@Retention(RetentionPolicy.RUNTIME)
|
|
1094
|
+
@Documented
|
|
1095
|
+
public @interface LogOperation {
|
|
1096
|
+
/**
|
|
1097
|
+
* 操作类型
|
|
1098
|
+
*/
|
|
1099
|
+
String type() default "select";
|
|
1100
|
+
}
|
|
1101
|
+
```
|
|
1102
|
+
|
|
1103
|
+
**type 参数可选值**:
|
|
1104
|
+
|
|
1105
|
+
| 值 | 说明 |
|
|
1106
|
+
|---|---|
|
|
1107
|
+
| add | 新增 |
|
|
1108
|
+
| edit | 修改 |
|
|
1109
|
+
| delete | 删除 |
|
|
1110
|
+
| select | 查询 |
|
|
1111
|
+
| visit | 访问 |
|
|
1112
|
+
| loginIn | 登录 |
|
|
1113
|
+
| loginOut | 登出 |
|
|
1114
|
+
| import | 导入 |
|
|
1115
|
+
| export | 导出 |
|
|
1116
|
+
| download | 下载 |
|
|
1117
|
+
| upload | 上传 |
|
|
1118
|
+
| assign | 分配/变更 |
|
|
1119
|
+
|
|
1120
|
+
---
|
|
1121
|
+
|
|
1122
|
+
###### 3.1.1.4.**使用示例:**
|
|
1123
|
+
|
|
1124
|
+
公共src\main\resources\logs\ou.logs.properties
|
|
1125
|
+
|
|
1126
|
+
```
|
|
1127
|
+
ou.org.bmodule=组织机构
|
|
1128
|
+
# 人员维护
|
|
1129
|
+
ou.emp.fmodule=人员维护
|
|
1130
|
+
ou.emp.create=新增人员
|
|
1131
|
+
ou.emp.create.message=新增人员[{}]
|
|
1132
|
+
ou.emp.update=编辑人员
|
|
1133
|
+
ou.emp.delete=删除人员
|
|
1134
|
+
ou.emp.delete.message=删除人员{}
|
|
1135
|
+
```
|
|
1136
|
+
|
|
1137
|
+
人员新增(add)
|
|
1138
|
+
|
|
1139
|
+
```java
|
|
1140
|
+
@RequestMapping(value = "create", method = {RequestMethod.POST})
|
|
1141
|
+
@LogOperation(type = "add")
|
|
1142
|
+
@Operation(summary = "新增人员信息")
|
|
1143
|
+
@ResponseBody
|
|
1144
|
+
public boolean create(@RequestParam Map param) throws Exception {
|
|
1145
|
+
Emp emp = mapperToEmp(param, null, "");
|
|
1146
|
+
User user = null;
|
|
1147
|
+
if (emp.getSystemUser() != null && 1 == (emp.getSystemUser())) {
|
|
1148
|
+
user = mapperToUser(param, "");
|
|
1149
|
+
}
|
|
1150
|
+
boolean flag = service.insertEmp(emp, user);
|
|
1151
|
+
if (flag) {
|
|
1152
|
+
Message msg = new Message(Message.TYPE_OPT,
|
|
1153
|
+
LogPattenUtils.getProperty("ou.org.bmodule"),
|
|
1154
|
+
LogPattenUtils.getProperty("ou.emp.fmodule"),
|
|
1155
|
+
LogPattenUtils.getProperty("ou.emp.create"),
|
|
1156
|
+
StrUtil.format(LogPattenUtils.getProperty("ou.emp.create.message"), emp.getName()),
|
|
1157
|
+
Message.STATUS_SUCESS);
|
|
1158
|
+
logPostService.postLog(msg);
|
|
1159
|
+
}
|
|
1160
|
+
// ... 后续处理
|
|
1161
|
+
return flag;
|
|
1162
|
+
}
|
|
1163
|
+
|
|
1164
|
+
// 日志打印:[用户1:user1]新增人员[测试人员:test1]
|
|
1165
|
+
```
|
|
1166
|
+
|
|
1167
|
+
---
|
|
1168
|
+
|
|
1169
|
+
人员编辑(edit)
|
|
1170
|
+
|
|
1171
|
+
```java
|
|
1172
|
+
@RequestMapping(value = "update", method = {RequestMethod.POST})
|
|
1173
|
+
@LogOperation(type = "edit")
|
|
1174
|
+
@ResponseBody
|
|
1175
|
+
public boolean update(@RequestParam Map map) throws Exception {
|
|
1176
|
+
boolean flag = false;
|
|
1177
|
+
Emp emp = mapperToEmp(map, null, "");
|
|
1178
|
+
Emp empDb = service.getEmpById(emp.getId());
|
|
1179
|
+
String compareLog = CompareUtils.getCompareLog(empDb, emp);
|
|
1180
|
+
if (map != null) {
|
|
1181
|
+
flag = service.updateEmp(emp);
|
|
1182
|
+
}
|
|
1183
|
+
if (flag && StrUtil.isNotBlank(compareLog)) {
|
|
1184
|
+
Message msg = new Message(Message.TYPE_OPT,
|
|
1185
|
+
LogPattenUtils.getProperty("ou.org.bmodule"),
|
|
1186
|
+
LogPattenUtils.getProperty("ou.emp.fmodule"),
|
|
1187
|
+
LogPattenUtils.getProperty("ou.emp.update"),
|
|
1188
|
+
StrUtil.format(compareLog),
|
|
1189
|
+
Message.STATUS_SUCESS);
|
|
1190
|
+
logPostService.postLog(msg);
|
|
1191
|
+
}
|
|
1192
|
+
// ... 后续处理
|
|
1193
|
+
return flag;
|
|
1194
|
+
}
|
|
1195
|
+
// 日志打印:[用户1:user1]编辑人员[测试人员:test1]:"姓名"由[测试人员]变更为[测试人员1]
|
|
1196
|
+
```
|
|
1197
|
+
|
|
1198
|
+
---
|
|
1199
|
+
|
|
1200
|
+
人员删除(delete)
|
|
1201
|
+
|
|
1202
|
+
```java
|
|
1203
|
+
@RequestMapping("delete")
|
|
1204
|
+
@Operation(summary = "删除人员信息", description = "删除人员信息")
|
|
1205
|
+
@ResponseBody
|
|
1206
|
+
public Map<String, String> removeEmp(@RequestParam Map param) {
|
|
1207
|
+
long l = System.currentTimeMillis();
|
|
1208
|
+
EmpListDto empListDto = new EmpListDto();
|
|
1209
|
+
UserListDto userListDto = new UserListDto();
|
|
1210
|
+
String idStr = param.get("ids").toString();
|
|
1211
|
+
List<String> ids = Arrays.asList(StringUtils.split(idStr, ","));
|
|
1212
|
+
|
|
1213
|
+
// ... 获取删除前的人员信息用于同步
|
|
1214
|
+
|
|
1215
|
+
Map<String, String> map = service.deleteEmp(param);
|
|
1216
|
+
|
|
1217
|
+
// 构建删除日志内容
|
|
1218
|
+
String message = empList.stream()
|
|
1219
|
+
.map(e -> String.format("[%s:%s]", e.getName(), e.getCode()))
|
|
1220
|
+
.collect(Collectors.joining(","));
|
|
1221
|
+
|
|
1222
|
+
if ("true".equals(map.get("result"))) {
|
|
1223
|
+
Message msg = new Message(Message.TYPE_OPT,
|
|
1224
|
+
LogPattenUtils.getProperty("ou.org.bmodule"),
|
|
1225
|
+
LogPattenUtils.getProperty("ou.emp.fmodule"),
|
|
1226
|
+
LogPattenUtils.getProperty("ou.emp.delete"),
|
|
1227
|
+
StrUtil.format(LogPattenUtils.getProperty("ou.emp.delete.message"), message),
|
|
1228
|
+
Message.STATUS_SUCESS);
|
|
1229
|
+
msg.setEndTime(System.currentTimeMillis());
|
|
1230
|
+
msg.setStartTime(l);
|
|
1231
|
+
msg.setOperationType("delete");
|
|
1232
|
+
logPostService.postLog(msg);
|
|
1233
|
+
}
|
|
1234
|
+
return map;
|
|
1235
|
+
}
|
|
1236
|
+
// 日志打印:[用户1:user1]删除人员[测试人员1:test1]
|
|
1237
|
+
```
|
|
1238
|
+
|
|
1239
|
+
---
|
|
1240
|
+
|
|
1241
|
+
使用 @LogOperation 注解自动记录时间
|
|
1242
|
+
|
|
1243
|
+
```java
|
|
1244
|
+
@RequestMapping(value = "/add", method = RequestMethod.POST)
|
|
1245
|
+
@Operation(summary = "新增调度任务", description = "新增调度任务")
|
|
1246
|
+
@LogOperation(type = "add")
|
|
1247
|
+
@ResponseBody
|
|
1248
|
+
public ReturnT<String> add(@Parameter(name = "调度任务对象", required = true) @Valid CloudJobInfo jobInfo) {
|
|
1249
|
+
Message msg = new Message(Message.TYPE_OPT,
|
|
1250
|
+
LogPattenUtils.getProperty("job.job-info.bmodule"),
|
|
1251
|
+
LogPattenUtils.getProperty("job.job-info.fmodule"),
|
|
1252
|
+
LogPattenUtils.getProperty("job.job-info.add"),
|
|
1253
|
+
StrUtil.format(LogPattenUtils.getProperty("job.job-info.add.message"), jobInfo.getJobDesc()),
|
|
1254
|
+
Message.STATUS_SUCESS);
|
|
1255
|
+
// 可选:若不设置,@LogOperation中会自行设置
|
|
1256
|
+
msg.setStartTime(System.currentTimeMillis());
|
|
1257
|
+
msg.setEndTime(System.currentTimeMillis());
|
|
1258
|
+
logPostService.postLog(msg);
|
|
1259
|
+
return CloudJobService.add(jobInfo);
|
|
1260
|
+
}
|
|
1261
|
+
```
|
|
1262
|
+
|
|
1263
|
+
##### 3.1.2 记录自定义日志
|
|
1264
|
+
|
|
1265
|
+
方法:`POST /post-diy`
|
|
1266
|
+
|
|
1267
|
+
入参:Message param
|
|
1268
|
+
|
|
1269
|
+
返回:boolean
|
|
1270
|
+
|
|
1271
|
+
使用场景:记录用户自定义日志,支持自定义日志类型和内容的灵活记录
|
|
1272
|
+
|
|
1273
|
+
示例:
|
|
1274
|
+
```java
|
|
1275
|
+
@Autowired
|
|
1276
|
+
private ILogPostService logPostService;
|
|
1277
|
+
|
|
1278
|
+
private void postLoginLog(User user,Long startTime) {
|
|
1279
|
+
Long executeTime = 0L;
|
|
1280
|
+
if(startTime !=null){
|
|
1281
|
+
executeTime = System.currentTimeMillis()-startTime;
|
|
1282
|
+
}
|
|
1283
|
+
Message msg = new Message(Message.TYPE_LOGOUT,
|
|
1284
|
+
LogPattenUtils.getProperty("common.basic.bmodule"),
|
|
1285
|
+
LogPattenUtils.getProperty("common.logout.fmodule"),
|
|
1286
|
+
LogPattenUtils.getProperty("common.logout.fmodule"),
|
|
1287
|
+
StrUtil.format(LogPattenUtils.getProperty("common.loginout.user")),
|
|
1288
|
+
Message.STATUS_SUCESS);
|
|
1289
|
+
msg.setIp(user.getLoginIp());
|
|
1290
|
+
msg.setFullname(user.getUsername());
|
|
1291
|
+
msg.setUserid(user.getUserId());
|
|
1292
|
+
msg.setTenantId(user.getTenantId());
|
|
1293
|
+
msg.setGrade(user.getGrade());
|
|
1294
|
+
msg.setCode(user.getCode());
|
|
1295
|
+
msg.setOperationType("loginOut");
|
|
1296
|
+
msg.setExecuteTime(executeTime);
|
|
1297
|
+
logPostService.postDiyLog(msg);
|
|
1298
|
+
}
|
|
1299
|
+
```
|
|
1300
|
+
|
|
1301
|
+
---
|
|
1302
|
+
|
|
1303
|
+
|
|
1304
|
+
|
|
1305
|
+
### 3.2 外部接口-详细参考技术共享中心文档《外部接口清单》
|
|
1306
|
+
|
|
1307
|
+
**详细说明**:请参考技术共享中心文档《外部接口清单》
|
|
1308
|
+
|
|
1309
|
+
---
|
|
1310
|
+
|
|
1311
|
+
### 3.3 会话信息获取
|
|
1312
|
+
|
|
1313
|
+
#### 3.3.1 SessionUtils会话工具类
|
|
1314
|
+
|
|
1315
|
+
完整包路径:`com.meritdata.cloud.utils.SessionUtils`
|
|
1316
|
+
|
|
1317
|
+
会话工具类,获取当前登录用户的相关信息
|
|
1318
|
+
|
|
1319
|
+
##### 3.3.1.1 获取当前登录用户的用户ID
|
|
1320
|
+
|
|
1321
|
+
方法:`getUserId()`
|
|
1322
|
+
|
|
1323
|
+
入参:无
|
|
1324
|
+
|
|
1325
|
+
返回:String (pf_user_info表的id字段)
|
|
1326
|
+
|
|
1327
|
+
使用场景:获取当前登录用户的ID
|
|
1328
|
+
|
|
1329
|
+
示例:`String userId = sessionUtils.getUserId();`
|
|
1330
|
+
|
|
1331
|
+
##### 3.3.1.2 获取当前登录用户的用户名
|
|
1332
|
+
|
|
1333
|
+
方法:`getUserName()` / `getCurrentUserName()`
|
|
1334
|
+
|
|
1335
|
+
入参:无
|
|
1336
|
+
|
|
1337
|
+
返回:String
|
|
1338
|
+
|
|
1339
|
+
使用场景:获取当前登录用户的用户名
|
|
1340
|
+
|
|
1341
|
+
示例:`String userName = sessionUtils.getUserName();`
|
|
1342
|
+
|
|
1343
|
+
##### 3.3.1.3 获取当前登录用户的人员ID
|
|
1344
|
+
|
|
1345
|
+
方法:`getEmpId()`
|
|
1346
|
+
|
|
1347
|
+
入参:无
|
|
1348
|
+
|
|
1349
|
+
返回:String (pf_org_user表的id字段)
|
|
1350
|
+
|
|
1351
|
+
使用场景:获取当前登录人员的ID
|
|
1352
|
+
|
|
1353
|
+
示例:
|
|
1354
|
+
```java
|
|
1355
|
+
@Autowired
|
|
1356
|
+
private SessionUtils sessionUtils;
|
|
1357
|
+
|
|
1358
|
+
String empId = sessionUtils.getEmpId();
|
|
1359
|
+
```
|
|
1360
|
+
|
|
1361
|
+
##### 3.3.1.4 获取当前登录用户的人员姓名
|
|
1362
|
+
|
|
1363
|
+
方法:`getEmpName()`
|
|
1364
|
+
|
|
1365
|
+
入参:无
|
|
1366
|
+
|
|
1367
|
+
返回:String
|
|
1368
|
+
|
|
1369
|
+
使用场景:获取当前登录用户的人员姓名
|
|
1370
|
+
|
|
1371
|
+
示例:
|
|
1372
|
+
```java
|
|
1373
|
+
String empName = sessionUtils.getEmpName();
|
|
1374
|
+
```
|
|
1375
|
+
|
|
1376
|
+
##### 3.3.1.5 获取当前登录用户的人员编号
|
|
1377
|
+
|
|
1378
|
+
方法:`getEmpCode()`
|
|
1379
|
+
|
|
1380
|
+
入参:无
|
|
1381
|
+
|
|
1382
|
+
返回:String
|
|
1383
|
+
|
|
1384
|
+
使用场景:获取当前登录人员的人员编号
|
|
1385
|
+
|
|
1386
|
+
示例:
|
|
1387
|
+
```java
|
|
1388
|
+
String empCode = sessionUtils.getEmpCode();
|
|
1389
|
+
```
|
|
1390
|
+
|
|
1391
|
+
##### 3.3.1.6 获取当前登录用户所属部门的部门ID
|
|
1392
|
+
|
|
1393
|
+
方法:`getDeptId()`
|
|
1394
|
+
|
|
1395
|
+
入参:无
|
|
1396
|
+
|
|
1397
|
+
返回:String
|
|
1398
|
+
|
|
1399
|
+
使用场景:获取当前登录用户所属部门的部门ID
|
|
1400
|
+
|
|
1401
|
+
示例:
|
|
1402
|
+
```java
|
|
1403
|
+
String deptId = sessionUtils.getDeptId();
|
|
1404
|
+
```
|
|
1405
|
+
|
|
1406
|
+
##### 3.3.1.7 获取当前登录用户所属部门的部门编码
|
|
1407
|
+
|
|
1408
|
+
方法:`getDeptCode()`
|
|
1409
|
+
|
|
1410
|
+
入参:无
|
|
1411
|
+
|
|
1412
|
+
返回:String
|
|
1413
|
+
|
|
1414
|
+
使用场景:获取当前登录用户所属部门的部门编码
|
|
1415
|
+
|
|
1416
|
+
示例:
|
|
1417
|
+
```java
|
|
1418
|
+
String deptCode = sessionUtils.getDeptCode();
|
|
1419
|
+
```
|
|
1420
|
+
|
|
1421
|
+
##### 3.3.1.8 获取当前登录用户所属部门的部门名称
|
|
1422
|
+
|
|
1423
|
+
方法:`getDeptName()`
|
|
1424
|
+
|
|
1425
|
+
入参:无
|
|
1426
|
+
|
|
1427
|
+
返回:String
|
|
1428
|
+
|
|
1429
|
+
使用场景:获取当前登录用户所属部门的部门名称
|
|
1430
|
+
|
|
1431
|
+
示例:
|
|
1432
|
+
```java
|
|
1433
|
+
String deptName = sessionUtils.getDeptName();
|
|
1434
|
+
```
|
|
1435
|
+
|
|
1436
|
+
##### 3.3.1.9 获取当前登录用户所属部门的部门对象
|
|
1437
|
+
|
|
1438
|
+
方法:`getDept()`
|
|
1439
|
+
|
|
1440
|
+
入参:无
|
|
1441
|
+
|
|
1442
|
+
返回:Organization
|
|
1443
|
+
|
|
1444
|
+
使用场景:获取当前登录用户所属部门的部门对象
|
|
1445
|
+
|
|
1446
|
+
示例:
|
|
1447
|
+
```java
|
|
1448
|
+
Organization dept = sessionUtils.getDept();
|
|
1449
|
+
String deptId = dept.getId();
|
|
1450
|
+
String deptName = dept.getName();
|
|
1451
|
+
```
|
|
1452
|
+
|
|
1453
|
+
##### 3.3.1.10 获取当前登录用户所属组织的组织ID
|
|
1454
|
+
|
|
1455
|
+
方法:`getOrgId()`
|
|
1456
|
+
|
|
1457
|
+
入参:无
|
|
1458
|
+
|
|
1459
|
+
返回:String
|
|
1460
|
+
|
|
1461
|
+
使用场景:获取当前登录用户所属组织的组织ID
|
|
1462
|
+
|
|
1463
|
+
示例:
|
|
1464
|
+
```java
|
|
1465
|
+
String orgId = sessionUtils.getOrgId();
|
|
1466
|
+
```
|
|
1467
|
+
|
|
1468
|
+
##### 3.3.1.11 获取当前登录用户所属组织的组织名称
|
|
1469
|
+
|
|
1470
|
+
方法:`getOrgName()`
|
|
1471
|
+
|
|
1472
|
+
入参:无
|
|
1473
|
+
|
|
1474
|
+
返回:String
|
|
1475
|
+
|
|
1476
|
+
使用场景:获取当前登录用户所属组织的组织名称
|
|
1477
|
+
|
|
1478
|
+
示例:
|
|
1479
|
+
```java
|
|
1480
|
+
String orgName = sessionUtils.getOrgName();
|
|
1481
|
+
```
|
|
1482
|
+
|
|
1483
|
+
##### 3.3.1.12 获取当前登录用户所属组织的组织层级编码
|
|
1484
|
+
|
|
1485
|
+
方法:`getOrgDlevelCode()`
|
|
1486
|
+
|
|
1487
|
+
入参:无
|
|
1488
|
+
|
|
1489
|
+
返回:String
|
|
1490
|
+
|
|
1491
|
+
使用场景:获取当前组织的层级编码
|
|
1492
|
+
|
|
1493
|
+
示例:
|
|
1494
|
+
```java
|
|
1495
|
+
String dlevelCode = sessionUtils.getOrgDlevelCode();
|
|
1496
|
+
```
|
|
1497
|
+
|
|
1498
|
+
##### 3.3.1.13 获取当前登录用户所属组织的根组织ID
|
|
1499
|
+
|
|
1500
|
+
方法:`getRootOrgId()`
|
|
1501
|
+
|
|
1502
|
+
入参:无
|
|
1503
|
+
|
|
1504
|
+
返回:String
|
|
1505
|
+
|
|
1506
|
+
使用场景:获取根组织ID
|
|
1507
|
+
|
|
1508
|
+
示例:
|
|
1509
|
+
```java
|
|
1510
|
+
String rootOrgId = sessionUtils.getRootOrgId();
|
|
1511
|
+
```
|
|
1512
|
+
|
|
1513
|
+
##### 3.3.1.14 获取当前登录用户所属组织的根组织对象
|
|
1514
|
+
|
|
1515
|
+
方法:`getRootOrg()`
|
|
1516
|
+
|
|
1517
|
+
入参:无
|
|
1518
|
+
|
|
1519
|
+
返回:Organization
|
|
1520
|
+
|
|
1521
|
+
使用场景:获取当前登录用户所属组织的根组织对象
|
|
1522
|
+
|
|
1523
|
+
示例:
|
|
1524
|
+
```java
|
|
1525
|
+
Organization rootOrg = sessionUtils.getRootOrg();
|
|
1526
|
+
String rootOrgName = rootOrg.getName();
|
|
1527
|
+
```
|
|
1528
|
+
|
|
1529
|
+
##### 3.3.1.15 获取当前登录用户的系统角色编码列表
|
|
1530
|
+
|
|
1531
|
+
方法:`getSysRoleCodes()`
|
|
1532
|
+
|
|
1533
|
+
入参:无
|
|
1534
|
+
|
|
1535
|
+
返回:List<String>
|
|
1536
|
+
|
|
1537
|
+
使用场景:获取当前用户的系统角色编码列表
|
|
1538
|
+
|
|
1539
|
+
示例:
|
|
1540
|
+
```java
|
|
1541
|
+
List<String> sysRoleCodes = sessionUtils.getSysRoleCodes();
|
|
1542
|
+
for (String roleCode : sysRoleCodes) {
|
|
1543
|
+
System.out.println("系统角色: " + roleCode);
|
|
1544
|
+
}
|
|
1545
|
+
```
|
|
1546
|
+
|
|
1547
|
+
##### 3.3.1.16 获取当前登录用户的角色编码列表
|
|
1548
|
+
|
|
1549
|
+
方法:`getRoleCodes()`
|
|
1550
|
+
|
|
1551
|
+
入参:无
|
|
1552
|
+
|
|
1553
|
+
返回:List<String>
|
|
1554
|
+
|
|
1555
|
+
使用场景:获取当前用户的所有角色编码
|
|
1556
|
+
|
|
1557
|
+
示例:
|
|
1558
|
+
```java
|
|
1559
|
+
List<String> roleCodes = sessionUtils.getRoleCodes();
|
|
1560
|
+
```
|
|
1561
|
+
|
|
1562
|
+
##### 3.3.1.17 获取当前登录用户的角色名称列表
|
|
1563
|
+
|
|
1564
|
+
方法:`getRoleNames()`
|
|
1565
|
+
|
|
1566
|
+
入参:无
|
|
1567
|
+
|
|
1568
|
+
返回:List<String>
|
|
1569
|
+
|
|
1570
|
+
使用场景:获取当前用户的所有角色名称
|
|
1571
|
+
|
|
1572
|
+
示例:
|
|
1573
|
+
```java
|
|
1574
|
+
List<String> roleNames = sessionUtils.getRoleNames();
|
|
1575
|
+
```
|
|
1576
|
+
|
|
1577
|
+
##### 3.3.1.18 获取当前登录用户的权限ID列表
|
|
1578
|
+
|
|
1579
|
+
方法:`getAuthoritiesIds()`
|
|
1580
|
+
|
|
1581
|
+
入参:无
|
|
1582
|
+
|
|
1583
|
+
返回:List<String>
|
|
1584
|
+
|
|
1585
|
+
使用场景:获取当前用户的所有权限ID
|
|
1586
|
+
|
|
1587
|
+
示例:
|
|
1588
|
+
```java
|
|
1589
|
+
List<String> authoritiesIds = sessionUtils.getAuthoritiesIds();
|
|
1590
|
+
```
|
|
1591
|
+
|
|
1592
|
+
##### 3.3.1.19 获取当前登录用户所属的租户ID
|
|
1593
|
+
|
|
1594
|
+
方法:`getTenantId()`
|
|
1595
|
+
|
|
1596
|
+
入参:无
|
|
1597
|
+
|
|
1598
|
+
返回:String
|
|
1599
|
+
|
|
1600
|
+
使用场景:获取当前用户所属租户ID
|
|
1601
|
+
|
|
1602
|
+
示例:
|
|
1603
|
+
```java
|
|
1604
|
+
String tenantId = sessionUtils.getTenantId();
|
|
1605
|
+
```
|
|
1606
|
+
|
|
1607
|
+
##### 3.3.1.20 获取当前登录用户的当前登录IP
|
|
1608
|
+
|
|
1609
|
+
方法:`getCurrentLoginIp()`
|
|
1610
|
+
|
|
1611
|
+
入参:无
|
|
1612
|
+
|
|
1613
|
+
返回:String
|
|
1614
|
+
|
|
1615
|
+
使用场景:获取当前用户的当前登录IP
|
|
1616
|
+
|
|
1617
|
+
示例:
|
|
1618
|
+
```java
|
|
1619
|
+
String loginIp = sessionUtils.getCurrentLoginIp();
|
|
1620
|
+
```
|
|
1621
|
+
|
|
1622
|
+
##### 3.3.1.21 获取当前登录用户的整个用户对象
|
|
1623
|
+
|
|
1624
|
+
方法:`getPrincipal()`
|
|
1625
|
+
|
|
1626
|
+
入参:无
|
|
1627
|
+
|
|
1628
|
+
返回:User
|
|
1629
|
+
|
|
1630
|
+
使用场景:获取当前用户的整个用户对象
|
|
1631
|
+
|
|
1632
|
+
示例:`User user = sessionUtils.getPrincipal();`
|
|
1633
|
+
|
|
1634
|
+
---
|
|
1635
|
+
|
|
1636
|
+
#### 3.3.2. IUserOnlineTime 在线用户服务
|
|
1637
|
+
|
|
1638
|
+
完整包路径:`com.meritdata.cloud.security.sso.IUserOnlineTime`
|
|
1639
|
+
|
|
1640
|
+
Feign客户端接口,用于在线用户相关操作,包括踢出用户、记录登录登出时间等。
|
|
1641
|
+
|
|
1642
|
+
##### 3.3.2.1 踢出在线用户
|
|
1643
|
+
|
|
1644
|
+
方法:getOutOnlineByUserNames
|
|
1645
|
+
|
|
1646
|
+
接口路径:`POST /api/basic/online-account/getOutOnlineByUserNames`
|
|
1647
|
+
|
|
1648
|
+
接口说明:批量踢出指定用户名的在线用户,清除其所有会话信息
|
|
1649
|
+
|
|
1650
|
+
请求参数:
|
|
1651
|
+
|
|
1652
|
+
| 参数名 | 类型 | 必填 | 说明 |
|
|
1653
|
+
|--------|------|------|------|
|
|
1654
|
+
| userNames | String | 是 | 用户名,多个用逗号分隔 |
|
|
1655
|
+
|
|
1656
|
+
返回结果:`ResultBody` 结果集
|
|
1657
|
+
|
|
1658
|
+
日志记录:操作类型为 `loginOut`,记录每个被踢出用户信息
|
|
1659
|
+
|
|
1660
|
+
**使用示例**:
|
|
1661
|
+
|
|
1662
|
+
```java
|
|
1663
|
+
@Autowired
|
|
1664
|
+
private IUserOnlineTime iUserOnlineTime;
|
|
1665
|
+
|
|
1666
|
+
// 踢出单个用户
|
|
1667
|
+
iUserOnlineTime.getOutOnlineByUserNames(userName);
|
|
1668
|
+
|
|
1669
|
+
// 踢出多个用户
|
|
1670
|
+
iUserOnlineTime.getOutOnlineByUserNames("user1,user2,user3");
|
|
1671
|
+
```
|
|
1672
|
+
|
|
1673
|
+
---
|
|
1674
|
+
|
|
1675
|
+
### 3.4 多系统集成
|
|
1676
|
+
|
|
1677
|
+
**详细参考**:应用开发平台-基础平台-使用攻略(三):组织和人员同步.md
|
|
1678
|
+
|
|
1679
|
+
基于 WebService 和 RESTful API 的组织、人员、资源、角色、权限同步功能,支持外部系统数据接入。
|
|
1680
|
+
|
|
1681
|
+
#### 3.4.1 WebService同步接口
|
|
1682
|
+
|
|
1683
|
+
WebService 地址格式:`http://网关地址/应用名称/ws/{服务名}?wsdl`
|
|
1684
|
+
|
|
1685
|
+
| 服务名 | 方法名 | 参数 | 返回值 | 说明 | 使用场景 |
|
|
1686
|
+
|--------|--------|------|--------|------|----------|
|
|
1687
|
+
| syncOrgWebService | syncOrg | xml字符串 | "1"成功/"0"失败 | 组织同步 | 外部HR系统同步组织架构到平台 |
|
|
1688
|
+
| syncUserWebService | syncUser | xml字符串 | "1"成功/"0"失败 | 人员同步 | 外部系统同步人员信息(入职、离职、调动) |
|
|
1689
|
+
| syncResourceWebService | syncResource | xml字符串 | "1"成功/"0"失败 | 资源同步 | 同步菜单、资源、按钮等权限数据 |
|
|
1690
|
+
| syncRoleWebService | syncRole | xml字符串 | "1"成功/"0"失败 | 角色同步 | 同步角色数据到平台 |
|
|
1691
|
+
| syncAssignWebService | syncAssign | xml字符串 | "1"成功/"0"失败 | 权限同步 | 同步人员-角色、资源-角色分配关系 |
|
|
1692
|
+
|
|
1693
|
+
**完整包路径**:`com.meritdata.cloud.system.manager.ou.sync.ws.impl`
|
|
1694
|
+
|
|
1695
|
+
#### 3.4.2 RESTful API同步接口
|
|
1696
|
+
|
|
1697
|
+
完整包路径:`com.meritdata.cloud.system.manager.ou.sync.controller.WebApiSyncController`
|
|
1698
|
+
|
|
1699
|
+
基础路径:`/webapi/ou/sync`
|
|
1700
|
+
|
|
1701
|
+
| 接口路径 | 方法 | 参数 | 说明 | 使用场景 |
|
|
1702
|
+
|----------|------|------|------|----------|
|
|
1703
|
+
| /webapi/ou/sync/org | POST | orgInfo (xml字符串) | 组织同步 | 外部系统通过REST API同步组织数据 |
|
|
1704
|
+
| /webapi/ou/sync/user | POST | userInfo (xml字符串) | 人员同步 | 外部系统通过REST API同步人员数据 |
|
|
1705
|
+
| /webapi/ou/sync/resource | POST | resourceInfo (xml字符串) | 资源同步 | 外部系统同步菜单资源数据 |
|
|
1706
|
+
| /webapi/ou/sync/role | POST | roleInfo (xml字符串) | 角色同步 | 外部系统同步角色数据 |
|
|
1707
|
+
| /webapi/ou/sync/duty | POST | dutyInfo (xml字符串) | 职务同步 | 外部系统同步职务数据 |
|
|
1708
|
+
| /webapi/ou/sync/assign | POST | assignInfo (xml字符串) | 权限同步 | 外部系统同步权限分配数据 |
|
|
1709
|
+
|
|
1710
|
+
**注意**:调用RESTful API需要在请求Header中携带app-key和app-token进行认证。
|
|
1711
|
+
|
|
1712
|
+
---
|
|
1713
|
+
|
|
1714
|
+
### 3.5 数据密级过滤
|
|
1715
|
+
|
|
1716
|
+
数据密级过滤是基于 Hibernate `@Filter` 实现的行级数据访问控制机制,通过在实体类上标注 `@EnableDataSecretFilter` 注解,自动拦截并过滤用户可访问的数据范围。
|
|
1717
|
+
|
|
1718
|
+
#### EnableDataSecretFilter 注解
|
|
1719
|
+
|
|
1720
|
+
**使用说明**:
|
|
1721
|
+
|
|
1722
|
+
在需要进行数据密级过滤的实体类或方法上添加 `@EnableDataSecretFilter` 注解,`DataSecretInterceptor` 拦截器会自动启用 Hibernate 的 `secretDataFilter`,根据当前用户的密级过滤高于当前用户密级的数据,只能看低于或等于其密级的数据。
|
|
1723
|
+
|
|
1724
|
+
**使用示例**:
|
|
1725
|
+
|
|
1726
|
+
```java
|
|
1727
|
+
// 标注在方法上
|
|
1728
|
+
@LogOperation(type = "select")
|
|
1729
|
+
@EnableDataSecretFilter
|
|
1730
|
+
public List<Emp> selectEmpList() {
|
|
1731
|
+
return empRepository.findAll();
|
|
1732
|
+
}
|
|
1733
|
+
```
|
|
1734
|
+
|
|
1735
|
+
|
|
1736
|
+
### 3.6 服务通知
|
|
1737
|
+
|
|
1738
|
+
#### 3.6.1 租户同步
|
|
1739
|
+
|
|
1740
|
+
**使用场景**:创建租户时,同步信息给二开服务
|
|
1741
|
+
|
|
1742
|
+
##### 3.6.1.1 动态FeignClient构建
|
|
1743
|
+
|
|
1744
|
+
完整包路径:`com.meritdata.cloud.feignclient.DynamicCloudFeignClient`
|
|
1745
|
+
|
|
1746
|
+
方法:`getFeignClient(serviceName, type)`
|
|
1747
|
+
|
|
1748
|
+
入参:String serviceName, Class<T> type
|
|
1749
|
+
|
|
1750
|
+
返回:T (泛型FeignClient)
|
|
1751
|
+
|
|
1752
|
+
使用场景:根据服务名称动态获取FeignClient,用于调用二开服务的接口
|
|
1753
|
+
|
|
1754
|
+
**Nacos配置**:
|
|
1755
|
+
```properties
|
|
1756
|
+
meritdata.cloud.sync-tenancy-receiver: cloud-system-demo # 二开服务名称,多个服务用逗号分隔
|
|
1757
|
+
```
|
|
1758
|
+
|
|
1759
|
+
##### 3.6.1.2 租户同步发送
|
|
1760
|
+
|
|
1761
|
+
完整包路径:`com.meritdata.cloud.system.manager.ou.tenancy.dynsync.CloudTenancySync`
|
|
1762
|
+
|
|
1763
|
+
方法:`syncAdd(Tenancy tenancy)`
|
|
1764
|
+
|
|
1765
|
+
入参:Tenancy tenancy
|
|
1766
|
+
|
|
1767
|
+
返回:ResultBody<String>
|
|
1768
|
+
|
|
1769
|
+
使用场景:当新建租户时,平台异步向已配置的二开服务发送租户同步消息
|
|
1770
|
+
|
|
1771
|
+
**Nacos配置**:
|
|
1772
|
+
```properties
|
|
1773
|
+
meritdata.cloud.sync-tenancy-receiver: cloud-system-demo1,cloud-system-demo2 # 多个服务用逗号分隔
|
|
1774
|
+
```
|
|
1775
|
+
|
|
1776
|
+
##### 3.6.1.3 租户同步接收
|
|
1777
|
+
|
|
1778
|
+
完整包路径:`com.meritdata.cloud.system.manager.ou.tenancy.dynsync.CloudTenancySync`
|
|
1779
|
+
|
|
1780
|
+
方法:`POST /api/tenancy/sync/add`
|
|
1781
|
+
|
|
1782
|
+
入参:Tenancy tenancy
|
|
1783
|
+
|
|
1784
|
+
返回:ResultBody<String>
|
|
1785
|
+
|
|
1786
|
+
使用场景:二开服务实现租户同步接收接口,接收平台发送的租户信息
|
|
1787
|
+
|
|
1788
|
+
**二开服务实现示例**:
|
|
1789
|
+
```java
|
|
1790
|
+
/**
|
|
1791
|
+
* 二开服务实现租户同步接收接口
|
|
1792
|
+
*/
|
|
1793
|
+
@RestController
|
|
1794
|
+
@RequestMapping("/api/tenancy/sync")
|
|
1795
|
+
public class TenancySyncReceiver {
|
|
1796
|
+
|
|
1797
|
+
@PostMapping("/add")
|
|
1798
|
+
public ResultBody<String> syncAdd(@RequestBody Tenancy tenancy) {
|
|
1799
|
+
log.info("收到租户同步消息: {}", tenancy);
|
|
1800
|
+
// 创建租户专属数据空间、初始化租户配置等
|
|
1801
|
+
return ResultBody.success("同步成功");
|
|
1802
|
+
}
|
|
1803
|
+
}
|
|
1804
|
+
```
|
|
1805
|
+
|
|
1806
|
+
---
|
|
1807
|
+
|
|
1808
|
+
#### 3.6.2 用户权限同步
|
|
1809
|
+
|
|
1810
|
+
**使用场景**:用户、角色、权限变更时,发送消息通知订阅的二开服务
|
|
1811
|
+
|
|
1812
|
+
**Nacos配置**:
|
|
1813
|
+
```properties
|
|
1814
|
+
meritdata.cloud.sync-cloud-data-application-name: cloud-system-demo # 订阅消息的二开服务名称
|
|
1815
|
+
```
|
|
1816
|
+
|
|
1817
|
+
**公共消息体 MessageBody 字段说明**:
|
|
1818
|
+
|
|
1819
|
+
| 字段 | 类型 | 说明 |
|
|
1820
|
+
|------|------|------|
|
|
1821
|
+
| tid | String | 租户ID |
|
|
1822
|
+
| theme | String | 消息主题(ROLE/RESOURCE/USER_ROLE/ASSIGN) |
|
|
1823
|
+
| data | List | 消息数据列表(RoleMessage/ResourceMessage/RoleUserMessage/AssignMessage) |
|
|
1824
|
+
|
|
1825
|
+
##### 3.6.2.1 发送角色变更消息
|
|
1826
|
+
|
|
1827
|
+
完整包路径:`com.meritdata.cloud.feignclient.CloudFeignMessageClient`
|
|
1828
|
+
|
|
1829
|
+
方法:`sendRoleMessage(MessageBody messageBody)`
|
|
1830
|
+
|
|
1831
|
+
入参:MessageBody(data为List<RoleMessage>)
|
|
1832
|
+
|
|
1833
|
+
返回:boolean
|
|
1834
|
+
|
|
1835
|
+
使用场景:角色信息变更时,发送消息通知相关系统
|
|
1836
|
+
|
|
1837
|
+
**角色消息(RoleMessage)字段说明**:
|
|
1838
|
+
|
|
1839
|
+
| 字段 | 类型 | 说明 |
|
|
1840
|
+
|------|------|------|
|
|
1841
|
+
| id | String | 角色ID |
|
|
1842
|
+
| deptId | String | 部门ID |
|
|
1843
|
+
| deptCode | String | 部门编码 |
|
|
1844
|
+
| code | String | 角色编码 |
|
|
1845
|
+
| name | String | 角色名称 |
|
|
1846
|
+
| type | Integer | 角色类型 |
|
|
1847
|
+
| application | String | 产品名称 |
|
|
1848
|
+
| operation | String | 操作:add新增、update更新、del删除 |
|
|
1849
|
+
| timeStamp | String | 时间戳 |
|
|
1850
|
+
|
|
1851
|
+
**二开服务接收示例**:
|
|
1852
|
+
|
|
1853
|
+
```java
|
|
1854
|
+
@PostMapping("/send-role-message")
|
|
1855
|
+
public boolean sendRoleMessage(@RequestBody MessageBody messageBody) {
|
|
1856
|
+
List<RoleMessage> roleList = (List<RoleMessage>) messageBody.getData();
|
|
1857
|
+
for (RoleMessage role : roleList) {
|
|
1858
|
+
String operation = role.getOperation(); // add/update/del
|
|
1859
|
+
String roleCode = role.getCode();
|
|
1860
|
+
String roleName = role.getName();
|
|
1861
|
+
}
|
|
1862
|
+
return true;
|
|
1863
|
+
}
|
|
1864
|
+
```
|
|
1865
|
+
|
|
1866
|
+
##### 3.6.2.2 发送资源变更消息
|
|
1867
|
+
|
|
1868
|
+
方法:`sendResourceMessage(MessageBody messageBody)`
|
|
1869
|
+
|
|
1870
|
+
入参:MessageBody(data为List<ResourceMessage>)
|
|
1871
|
+
|
|
1872
|
+
返回:boolean
|
|
1873
|
+
|
|
1874
|
+
使用场景:资源(菜单)信息变更时,发送消息通知相关系统
|
|
1875
|
+
|
|
1876
|
+
**资源消息(ResourceMessage)字段说明**:
|
|
1877
|
+
|
|
1878
|
+
| 字段 | 类型 | 说明 |
|
|
1879
|
+
|------|------|------|
|
|
1880
|
+
| id | String | 资源ID |
|
|
1881
|
+
| parentId | String | 父资源ID |
|
|
1882
|
+
| type | String | 类型:0模块、1菜单、2组件、4分组 |
|
|
1883
|
+
| name | String | 资源名称 |
|
|
1884
|
+
| url | String | 菜单路由 |
|
|
1885
|
+
| embedUrl | String | 嵌入URL |
|
|
1886
|
+
| application | String | 产品名称 |
|
|
1887
|
+
| sort | Integer | 排序 |
|
|
1888
|
+
| iconPath | String | 图标路径 |
|
|
1889
|
+
| operation | String | 操作:add新增、update更新、del删除 |
|
|
1890
|
+
| timeStamp | String | 时间戳 |
|
|
1891
|
+
|
|
1892
|
+
**二开服务接收示例**:
|
|
1893
|
+
|
|
1894
|
+
```java
|
|
1895
|
+
@PostMapping("/send-resource-message")
|
|
1896
|
+
public boolean sendResourceMessage(@RequestBody MessageBody messageBody) {
|
|
1897
|
+
List<ResourceMessage> resourceList = (List<ResourceMessage>) messageBody.getData();
|
|
1898
|
+
for (ResourceMessage resource : resourceList) {
|
|
1899
|
+
String operation = resource.getOperation(); // add/update/del
|
|
1900
|
+
String type = resource.getType(); // 0模块/1菜单/2组件/4分组
|
|
1901
|
+
String url = resource.getUrl(); // 菜单路由
|
|
1902
|
+
}
|
|
1903
|
+
return true;
|
|
1904
|
+
}
|
|
1905
|
+
```
|
|
1906
|
+
|
|
1907
|
+
##### 3.6.2.3 发送用户角色变更消息
|
|
1908
|
+
|
|
1909
|
+
方法:`sendUserRoleMessage(MessageBody messageBody)`
|
|
1910
|
+
|
|
1911
|
+
入参:MessageBody(data为List<RoleUserMessage>)
|
|
1912
|
+
|
|
1913
|
+
返回:boolean
|
|
1914
|
+
|
|
1915
|
+
使用场景:用户角色分配变更时,发送消息通知相关系统
|
|
1916
|
+
|
|
1917
|
+
**用户角色消息(RoleUserMessage)字段说明**:
|
|
1918
|
+
|
|
1919
|
+
| 字段 | 类型 | 说明 |
|
|
1920
|
+
|------|------|------|
|
|
1921
|
+
| userId | String | 用户ID |
|
|
1922
|
+
| userCode | String | 用户编码 |
|
|
1923
|
+
| roleCode | String | 角色编码 |
|
|
1924
|
+
| operation | String | 操作:add新增、del删除 |
|
|
1925
|
+
| timeStamp | String | 时间戳 |
|
|
1926
|
+
|
|
1927
|
+
**二开服务接收示例**:
|
|
1928
|
+
|
|
1929
|
+
```java
|
|
1930
|
+
@PostMapping("/send-user-role-message")
|
|
1931
|
+
public boolean sendUserRoleMessage(@RequestBody MessageBody messageBody) {
|
|
1932
|
+
List<RoleUserMessage> userRoleList = (List<RoleUserMessage>) messageBody.getData();
|
|
1933
|
+
for (RoleUserMessage userRole : userRoleList) {
|
|
1934
|
+
String operation = userRole.getOperation(); // add/del
|
|
1935
|
+
String userId = userRole.getUserId();
|
|
1936
|
+
String roleCode = userRole.getRoleCode();
|
|
1937
|
+
}
|
|
1938
|
+
return true;
|
|
1939
|
+
}
|
|
1940
|
+
```
|
|
1941
|
+
|
|
1942
|
+
##### 3.6.2.4 发送权限分配变更消息
|
|
1943
|
+
|
|
1944
|
+
方法:`sendAssignMessage(MessageBody messageBody)`
|
|
1945
|
+
|
|
1946
|
+
入参:MessageBody(data为List<AssignMessage>)
|
|
1947
|
+
|
|
1948
|
+
返回:boolean
|
|
1949
|
+
|
|
1950
|
+
使用场景:权限分配变更时,发送消息通知相关系统
|
|
1951
|
+
|
|
1952
|
+
**权限分配消息(AssignMessage)字段说明**:
|
|
1953
|
+
|
|
1954
|
+
| 字段 | 类型 | 说明 |
|
|
1955
|
+
|------|------|------|
|
|
1956
|
+
| resourceId | String | 资源ID |
|
|
1957
|
+
| type | String | 授权类型:3按机构、4按角色、6按人员 |
|
|
1958
|
+
| code | String | 角色编码或机构编码 |
|
|
1959
|
+
| url | String | 菜单路由 |
|
|
1960
|
+
| application | String | 产品名称 |
|
|
1961
|
+
| operation | String | 操作:add新增、del删除 |
|
|
1962
|
+
| timeStamp | String | 时间戳 |
|
|
1963
|
+
|
|
1964
|
+
**二开服务接收示例**:
|
|
1965
|
+
|
|
1966
|
+
```java
|
|
1967
|
+
@PostMapping("/send-assign-message")
|
|
1968
|
+
public boolean sendAssignMessage(@RequestBody MessageBody messageBody) {
|
|
1969
|
+
List<AssignMessage> assignList = (List<AssignMessage>) messageBody.getData();
|
|
1970
|
+
for (AssignMessage assign : assignList) {
|
|
1971
|
+
String operation = assign.getOperation(); // add/del
|
|
1972
|
+
String type = assign.getType(); // 3按机构/4按角色/6按人员
|
|
1973
|
+
String resourceId = assign.getResourceId();
|
|
1974
|
+
}
|
|
1975
|
+
return true;
|
|
1976
|
+
}
|
|
1977
|
+
```
|
|
1978
|
+
|
|
1979
|
+
---
|
|
1980
|
+
|
|
1981
|
+
#### 3.6.3 服务通知二开接口
|
|
1982
|
+
|
|
1983
|
+
**使用场景**:平台端用户、组织、人员等变更时,通知二开服务进行相应处理
|
|
1984
|
+
|
|
1985
|
+
##### 3.6.3.1 用户新增通知
|
|
1986
|
+
|
|
1987
|
+
完整包路径:`com.meritdata.cloud.system.manager.ou.user.controller.IUserPortalService`
|
|
1988
|
+
|
|
1989
|
+
FeignClient接口:`POST /user-add`
|
|
1990
|
+
|
|
1991
|
+
入参:User user
|
|
1992
|
+
|
|
1993
|
+
返回:void
|
|
1994
|
+
|
|
1995
|
+
**Nacos配置(二开服务)**:
|
|
1996
|
+
```properties
|
|
1997
|
+
meritdata.cloud.user-customization-extension-application-name: cloud-system-demo # 二开服务名,平台端调用
|
|
1998
|
+
```
|
|
1999
|
+
|
|
2000
|
+
**二开服务实现**:
|
|
2001
|
+
```java
|
|
2002
|
+
@PostMapping("/user-add")
|
|
2003
|
+
public void userAdd(@RequestBody User user) {
|
|
2004
|
+
// 处理用户新增逻辑
|
|
2005
|
+
}
|
|
2006
|
+
```
|
|
2007
|
+
|
|
2008
|
+
##### 3.6.3.2 用户编辑通知
|
|
2009
|
+
|
|
2010
|
+
方法:`POST /user-update`
|
|
2011
|
+
|
|
2012
|
+
入参:User user
|
|
2013
|
+
|
|
2014
|
+
返回:void
|
|
2015
|
+
|
|
2016
|
+
**二开服务实现**:
|
|
2017
|
+
```java
|
|
2018
|
+
@PostMapping("/user-update")
|
|
2019
|
+
public void userUpdate(@RequestBody User user) {
|
|
2020
|
+
// 处理用户编辑逻辑
|
|
2021
|
+
}
|
|
2022
|
+
```
|
|
2023
|
+
|
|
2024
|
+
##### 3.6.3.3 用户删除通知
|
|
2025
|
+
|
|
2026
|
+
方法:`POST /user-remove`
|
|
2027
|
+
|
|
2028
|
+
入参:UserListDto userListDto
|
|
2029
|
+
|
|
2030
|
+
返回:void
|
|
2031
|
+
|
|
2032
|
+
**二开服务实现**:
|
|
2033
|
+
```java
|
|
2034
|
+
@PostMapping("/user-remove")
|
|
2035
|
+
public void userRemove(@RequestBody UserListDto userListDto) {
|
|
2036
|
+
// 处理用户删除逻辑
|
|
2037
|
+
}
|
|
2038
|
+
```
|
|
2039
|
+
|
|
2040
|
+
##### 3.6.3.4 初始化密码通知
|
|
2041
|
+
|
|
2042
|
+
方法:`POST /resetPass`
|
|
2043
|
+
|
|
2044
|
+
入参:User user
|
|
2045
|
+
|
|
2046
|
+
返回:void
|
|
2047
|
+
|
|
2048
|
+
**二开服务实现**:
|
|
2049
|
+
```java
|
|
2050
|
+
@PostMapping("/resetPass")
|
|
2051
|
+
public void resetPass(@RequestBody User user) {
|
|
2052
|
+
// 处理初始化密码逻辑
|
|
2053
|
+
}
|
|
2054
|
+
```
|
|
2055
|
+
|
|
2056
|
+
##### 3.6.3.5 修改密码通知
|
|
2057
|
+
|
|
2058
|
+
方法:`POST /changePass`
|
|
2059
|
+
|
|
2060
|
+
入参:User user
|
|
2061
|
+
|
|
2062
|
+
返回:void
|
|
2063
|
+
|
|
2064
|
+
**二开服务实现**:
|
|
2065
|
+
```java
|
|
2066
|
+
@PostMapping("/changePass")
|
|
2067
|
+
public void changePass(@RequestBody User user) {
|
|
2068
|
+
// 处理修改密码逻辑
|
|
2069
|
+
}
|
|
2070
|
+
```
|
|
2071
|
+
|
|
2072
|
+
##### 3.6.3.6 组织新增通知
|
|
2073
|
+
|
|
2074
|
+
完整包路径:`com.meritdata.cloud.system.manager.ou.org.controller.IOrgPortalService`
|
|
2075
|
+
|
|
2076
|
+
FeignClient接口:`POST /api/ou/org/create`
|
|
2077
|
+
|
|
2078
|
+
入参:Organization org
|
|
2079
|
+
|
|
2080
|
+
返回:void
|
|
2081
|
+
|
|
2082
|
+
**Nacos配置(二开服务)**:
|
|
2083
|
+
```properties
|
|
2084
|
+
meritdata.cloud.org-emp-customization-extension-application-name: cloud-system-demo # 二开服务名
|
|
2085
|
+
```
|
|
2086
|
+
|
|
2087
|
+
**二开服务实现**:
|
|
2088
|
+
```java
|
|
2089
|
+
@PostMapping("/api/ou/org/create")
|
|
2090
|
+
public void orgAdd(@RequestBody Organization org) {
|
|
2091
|
+
// 处理组织新增逻辑
|
|
2092
|
+
}
|
|
2093
|
+
```
|
|
2094
|
+
|
|
2095
|
+
##### 3.6.3.7 组织修改通知
|
|
2096
|
+
|
|
2097
|
+
方法:`POST /api/ou/org/update`
|
|
2098
|
+
|
|
2099
|
+
入参:Organization org
|
|
2100
|
+
|
|
2101
|
+
返回:void
|
|
2102
|
+
|
|
2103
|
+
**二开服务实现**:
|
|
2104
|
+
```java
|
|
2105
|
+
@PostMapping("/api/ou/org/update")
|
|
2106
|
+
public void orgUpdate(@RequestBody Organization org) {
|
|
2107
|
+
// 处理组织修改逻辑
|
|
2108
|
+
}
|
|
2109
|
+
```
|
|
2110
|
+
|
|
2111
|
+
##### 3.6.3.8 组织删除通知
|
|
2112
|
+
|
|
2113
|
+
方法:`POST /api/ou/org/delete`
|
|
2114
|
+
|
|
2115
|
+
入参:OrgListDto orgListDto
|
|
2116
|
+
|
|
2117
|
+
返回:void
|
|
2118
|
+
|
|
2119
|
+
**二开服务实现**:
|
|
2120
|
+
```java
|
|
2121
|
+
@PostMapping("/api/ou/org/delete")
|
|
2122
|
+
public void orgRemove(@RequestBody OrgListDto orgListDto) {
|
|
2123
|
+
// 处理组织删除逻辑
|
|
2124
|
+
}
|
|
2125
|
+
```
|
|
2126
|
+
|
|
2127
|
+
##### 3.6.3.9 人员新增通知
|
|
2128
|
+
|
|
2129
|
+
方法:`POST /emp-add`
|
|
2130
|
+
|
|
2131
|
+
入参:Emp emp
|
|
2132
|
+
|
|
2133
|
+
返回:void
|
|
2134
|
+
|
|
2135
|
+
**二开服务实现**:
|
|
2136
|
+
```java
|
|
2137
|
+
@PostMapping("/emp-add")
|
|
2138
|
+
public void empAdd(@RequestBody Emp emp) {
|
|
2139
|
+
// 处理人员新增逻辑
|
|
2140
|
+
}
|
|
2141
|
+
```
|
|
2142
|
+
|
|
2143
|
+
##### 3.6.3.10 人员修改通知
|
|
2144
|
+
|
|
2145
|
+
方法:`POST /emp-update`
|
|
2146
|
+
|
|
2147
|
+
入参:Emp emp
|
|
2148
|
+
|
|
2149
|
+
返回:void
|
|
2150
|
+
|
|
2151
|
+
**二开服务实现**:
|
|
2152
|
+
```java
|
|
2153
|
+
@PostMapping("/emp-update")
|
|
2154
|
+
public void empUpdate(@RequestBody Emp emp) {
|
|
2155
|
+
// 处理人员修改逻辑
|
|
2156
|
+
}
|
|
2157
|
+
```
|
|
2158
|
+
|
|
2159
|
+
##### 3.6.3.11 人员删除通知
|
|
2160
|
+
|
|
2161
|
+
方法:`POST /emp-delete`
|
|
2162
|
+
|
|
2163
|
+
入参:EmpListDto empListDto
|
|
2164
|
+
|
|
2165
|
+
返回:void
|
|
2166
|
+
|
|
2167
|
+
**二开服务实现**:
|
|
2168
|
+
```java
|
|
2169
|
+
@PostMapping("/emp-delete")
|
|
2170
|
+
public void empRemove(@RequestBody EmpListDto empListDto) {
|
|
2171
|
+
// 处理人员删除逻辑
|
|
2172
|
+
}
|
|
2173
|
+
```
|
|
2174
|
+
|
|
2175
|
+
---
|
|
2176
|
+
|
|
2177
|
+
## 四、业务组件
|
|
2178
|
+
|
|
2179
|
+
### 4.1 工作流组件-详细参考:应用开发平台-流程管理-使用攻略(一):流程API接口.md
|
|
2180
|
+
|
|
2181
|
+
基于 Camunda BPM 7.21.0 的工作流引擎,所有对外接口均通过 `BpmEngine` 提供。
|
|
2182
|
+
|
|
2183
|
+
**二开服务使用方式**:通过 `@Autowired` 注入 `BpmEngine`,直接调用其方法。
|
|
2184
|
+
|
|
2185
|
+
```
|
|
2186
|
+
@Autowired
|
|
2187
|
+
private BpmEngine bpmEngine;
|
|
2188
|
+
```
|
|
2189
|
+
|
|
2190
|
+
方法概览表:
|
|
2191
|
+
|
|
2192
|
+
| 来源类 | 方法名 | 作用场景 | 说明 |
|
|
2193
|
+
|------|--------|----------|------|
|
|
2194
|
+
| BpmEngine | startProcess | 启动流程 | 根据流程定义Key和businessId启动流程 |
|
|
2195
|
+
| BpmEngine | ruleEngineInit | 规则引擎初始化 | 查询流程按钮配置信息,初始化流程操作界面 |
|
|
2196
|
+
| BpmEngine | ruleEngineRun | 规则引擎执行 | 根据businessId查询待办任务 |
|
|
2197
|
+
| BpmEngine | complete | 完成任务 | 完成当前任务,推进流程到下一节点 |
|
|
2198
|
+
| BpmEngine | processRetfirnode | 退回拟稿人 | 退回流程至拟稿人(流程起点) |
|
|
2199
|
+
| BpmEngine | processRetprenode | 退回上一环节 | 退回流程至上一环节处理人 |
|
|
2200
|
+
| BpmEngine | deleteProcInsts | 删除流程实例 | 根据businessIds删除流程实例 |
|
|
2201
|
+
| BpmEngine | queryMainForms | 流程实例查询 | 分页查询流程实例列表 |
|
|
2202
|
+
| BpmEngine | getPage | 文字追踪 | 获取流程流转路径文字信息 |
|
|
2203
|
+
| BpmEngine | getGraphTrack | 图表追踪 | 获取流程图形追踪信息 |
|
|
2204
|
+
| BpmEngine | getOpinions | 审批意见 | 获取流程审批意见列表 |
|
|
2205
|
+
| BpmEngine | addOrUpdate | 填写意见 | 在节点填写审批意见 |
|
|
2206
|
+
| BpmEngine | getUndoPage | 个人待办列表 | 获取当前用户的待办任务列表 |
|
|
2207
|
+
|
|
2208
|
+
**重要变量说明**:
|
|
2209
|
+
|
|
2210
|
+
| 变量名 | 类型 | 说明 | 示例值 |
|
|
2211
|
+
|--------|------|------|--------|
|
|
2212
|
+
| businessId | String | 业务ID(唯一标识业务数据) | "3f28824f77d7e9a60177d8110b670002" |
|
|
2213
|
+
| procDefKey | String | 流程定义Key(在BPMN文件中定义) | "Process_Demo1" |
|
|
2214
|
+
| procInstId | String | 流程实例ID(启动后生成) | "57f63abb-74b1-11eb-bd66-00d861edd189" |
|
|
2215
|
+
| taskId | String | 任务ID(当前待办任务) | "9f2c6791-7748-11eb-90ec-00d861edd189" |
|
|
2216
|
+
| taskDefKey | String | 任务节点定义Key | "Activity_0vjczzn" |
|
|
2217
|
+
| procDefId | String | 流程定义ID(包含版本信息) | "Process_Demo1:4:d349d3dd-7689-11eb-ac36-00d861edd189" |
|
|
2218
|
+
| bpmOperValue | String | 操作按钮值(对应流程配置) | "bpmSendBtn"、"bpmRetfirnodeBtn" |
|
|
2219
|
+
| bpmOperName | String | 操作按钮名称 | "发送"、"退回" |
|
|
2220
|
+
| approve[type] | String | 审批方式 | "onlyApprove"(唯一审批)、"anyApprove"(或签)、"paraApprove"(会签)、"seqApprove"(顺序审批) |
|
|
2221
|
+
|
|
2222
|
+
**组合场景表**:
|
|
2223
|
+
|
|
2224
|
+
| 场景 | 使用场景 | 详细参考 |
|
|
2225
|
+
|------|----------|----------|
|
|
2226
|
+
| 流程API接口 | 了解BpmEngine提供的所有API接口,包括启动流程、完成任务、查询实例等 | 应用开发平台-流程管理-使用攻略(一):流程API接口.md |
|
|
2227
|
+
| 工作流程应用开发 | 基于差旅费报销等业务场景,学习如何创建后端工程、配置流程、设计表单、集成前后端 | 应用开发平台-流程管理-使用攻略(二):工作流程应用开发.md |
|
|
2228
|
+
| 监听表达式开发 | 开发自定义监听器jar包,实现流程监听表达式,在流程事件触发时执行自定义业务逻辑 | 应用开发平台-流程管理-使用攻略(三):监听表达式开发.md |
|
|
2229
|
+
| 自定义人员 | 配置自定义人员选择器,通过后端接口动态返回流程下一环节的处理人 | 应用开发平台-流程管理-使用攻略(四):自定义人员.md |
|
|
2230
|
+
| 待办同步门户开发 | 将流程产生的待办信息同步到其他门户页面处理,支持Portal和RTX两种方式 | 应用开发平台-流程管理-使用攻略(五):待办同步门户开发.md |
|
|
2231
|
+
| 流程追踪页面嵌入表单 | 将流程追踪页面(文字追踪、图表追踪、审批意见)嵌入到自定义表单页面中 | 应用开发平台-流程管理-使用攻略(六):流程追踪页面嵌入表单开发.md |
|
|
2232
|
+
| 流程模块设计 | 了解流程模块的整体设计思路、架构组成和业务逻辑 | 应用开发平台-流程管理-使用攻略(七):流程模块设计说明文档.md |
|
|
2233
|
+
|
|
2234
|
+
---
|
|
2235
|
+
|
|
2236
|
+
### 4.2 调度组件-**详细可参考:应用开发平台-基础平台-使用攻略(十三):调度编排二开说明.md**
|
|
2237
|
+
|
|
2238
|
+
基于 Taier 调度平台(基于 DolphinScheduler)的任务调度引擎,所有对外接口均通过 `ICloudClient` 提供。
|
|
2239
|
+
|
|
2240
|
+
**二开服务使用方式**:通过 `@Autowired` 注入 `ICloudClient`,直接调用其方法。
|
|
2241
|
+
|
|
2242
|
+
```java
|
|
2243
|
+
@Autowired
|
|
2244
|
+
private ICloudClient cloudClient;
|
|
2245
|
+
```
|
|
2246
|
+
|
|
2247
|
+
方法概览表
|
|
2248
|
+
|
|
2249
|
+
| 方法名 | 作用场景 | 说明 |
|
|
2250
|
+
|--------|----------|------|
|
|
2251
|
+
| submit | 提交任务 | 外部系统向调度平台提交任务执行 |
|
|
2252
|
+
| status | 获取任务状态 | 查询任务的执行状态 |
|
|
2253
|
+
| log | 获取任务日志 | 获取任务的执行日志 |
|
|
2254
|
+
| getTaskList | 获取任务列表 | 分页查询任务列表 |
|
|
2255
|
+
| getParamList | 获取任务参数列表 | 获取任务的参数配置列表 |
|
|
2256
|
+
| cancelJob | 取消任务 | 取消正在执行或等待执行的任务 |
|
|
2257
|
+
| getScheduleStatus | 获取调度状态 | 获取业务系统的任务是否在被编排 |
|
|
2258
|
+
| createFlowAndTask | 创建流程和任务 | 创建工作流和任务 |
|
|
2259
|
+
| frozenTask | 冻结任务 | 冻结或解冻任务 |
|
|
2260
|
+
| getTaskListBySyncId | 根据同步ID获取任务列表 | 根据同步ID获取任务列表 |
|
|
2261
|
+
| queryLastJobLogBySyncId | 查询最近任务日志 | 根据同步ID查询最近的任务执行日志 |
|
|
2262
|
+
| queryLastJobStatusBySyncId | 查询最近任务状态 | 根据同步ID查询最近的任务执行状态 |
|
|
2263
|
+
|
|
2264
|
+
---
|
|
2265
|
+
|
|
2266
|
+
|
|
2267
|
+
### 4.3 定时任务-**详细方法说明请参考**:应用开发平台-基础平台-使用攻略(五):定时调度任务.md
|
|
2268
|
+
|
|
2269
|
+
基于 XXL-JOB 的分布式任务调度引擎,所有对外接口均通过 `IJobApi` 提供。
|
|
2270
|
+
|
|
2271
|
+
**二开服务使用方式**:通过 `@Autowired` 注入 `IJobApi`,直接调用其方法。
|
|
2272
|
+
|
|
2273
|
+
```java
|
|
2274
|
+
@Autowired
|
|
2275
|
+
private IJobApi webServerJobService;
|
|
2276
|
+
```
|
|
2277
|
+
|
|
2278
|
+
方法概览表
|
|
2279
|
+
|
|
2280
|
+
| 来源类 | 方法名 | 作用场景 | 说明 |
|
|
2281
|
+
|------|--------|----------|------|
|
|
2282
|
+
| webServerJobService | getJob | 获取任务信息 | 根据任务ID获取单个调度任务的详情 |
|
|
2283
|
+
| webServerJobService | pageList | 获取任务信息列表 | 分页查询调度任务列表 |
|
|
2284
|
+
| webServerJobService | triggerJob | 执行调度任务 | 手动触发任务立即执行 |
|
|
2285
|
+
| webServerJobService | startJob | 启动调度任务 | 启动一个已停止的调度任务 |
|
|
2286
|
+
| webServerJobService | stopJob | 停止调度任务 | 停止一个运行中的调度任务 |
|
|
2287
|
+
| webServerJobService | add | 新增调度任务 | 新增一个定时调度任务 |
|
|
2288
|
+
| webServerJobService | update | 更新调度任务 | 更新已存在的调度任务 |
|
|
2289
|
+
| webServerJobService | remove | 删除调度任务 | 删除指定的调度任务 |
|
|
2290
|
+
| webServerJobService | getByAppName | 根据应用名获取执行器 | 根据应用名获取执行器信息 |
|
|
2291
|
+
| webServerJobService | getHandlerList | 根据handler获取任务列表 | 根据执行器名称获取关联的任务列表 |
|
|
2292
|
+
| webServerJobService | getHandlerAndGroup | 根据handler和执行器获取job | 根据执行器名称和执行器组ID获取任务信息 |
|
|
2293
|
+
|
|
2294
|
+
|
|
2295
|
+
|
|
2296
|
+
## 五、前端资产
|
|
2297
|
+
|
|
2298
|
+
### 5.1 UI组件库
|
|
2299
|
+
|
|
2300
|
+
#### 全局安装方式
|
|
2301
|
+
|
|
2302
|
+
```javascript
|
|
2303
|
+
// cloud-module-base 全局安装
|
|
2304
|
+
import base from 'cloud-module-base';
|
|
2305
|
+
Vue.use(base);
|
|
2306
|
+
|
|
2307
|
+
// cloud-module-bpm 全局安装
|
|
2308
|
+
import bpm from 'cloud-module-bpm';
|
|
2309
|
+
Vue.use(bpm);
|
|
2310
|
+
```
|
|
2311
|
+
|
|
2312
|
+
---
|
|
2313
|
+
|
|
2314
|
+
#### cloud-module-base 公共组件
|
|
2315
|
+
|
|
2316
|
+
##### 5.1.1 通用对话框组件 (CloudDialog)
|
|
2317
|
+
|
|
2318
|
+
**文件路径**: `cloud-module/cloud-module-base/packages/cloud-dialog/cloud-dialog.vue`
|
|
2319
|
+
|
|
2320
|
+
**功能说明**: 平台通用对话框组件,支持标题定制、密级标签提示、异步关闭控制等特性。
|
|
2321
|
+
|
|
2322
|
+
**导入方式**:
|
|
2323
|
+
```javascript
|
|
2324
|
+
import cloudDialog from 'cloud-module-base/packages/cloud-dialog';
|
|
2325
|
+
Vue.component(cloudDialog.name, cloudDialog);
|
|
2326
|
+
```
|
|
2327
|
+
|
|
2328
|
+
**Props 属性**:
|
|
2329
|
+
| 属性名 | 类型 | 默认值 | 说明 |
|
|
2330
|
+
|--------|------|--------|------|
|
|
2331
|
+
| visible | Boolean | null | 控制对话框显示/隐藏,支持 .sync 或 v-model 双向绑定 |
|
|
2332
|
+
| title | String | '' | 对话框主标题文本 |
|
|
2333
|
+
| tip | String/null | null | 强制指定的密级标签提示 |
|
|
2334
|
+
| beforeClose | Function | null | 自定义关闭前钩子,用于异步关闭控制 |
|
|
2335
|
+
| showSecretLabel | Boolean | true | 是否显示密级标签区域 |
|
|
2336
|
+
|
|
2337
|
+
**Events 事件**:
|
|
2338
|
+
- `open` - 对话框打开时触发
|
|
2339
|
+
- `close` - 对话框关闭时触发
|
|
2340
|
+
- `opened` - 对话框打开动画完成时触发
|
|
2341
|
+
- `closed` - 对话框关闭动画完成时触发
|
|
2342
|
+
|
|
2343
|
+
**Slots 插槽**:
|
|
2344
|
+
- `title` - 自定义标题区域
|
|
2345
|
+
- `secretTip` - 密级标签插槽
|
|
2346
|
+
- `default` - 对话框内容区
|
|
2347
|
+
- `footer` - 对话框底部
|
|
2348
|
+
|
|
2349
|
+
**实际使用示例**:
|
|
2350
|
+
```vue
|
|
2351
|
+
<!-- 来源: cloud-system-bpm/src/pages/procdesigner/view/ConfigDialog.vue -->
|
|
2352
|
+
<cloud-dialog
|
|
2353
|
+
:title="titleconfig"
|
|
2354
|
+
:visible.sync="dialogVisible"
|
|
2355
|
+
width="600px"
|
|
2356
|
+
top="8vh"
|
|
2357
|
+
:before-close="handleClose"
|
|
2358
|
+
@open="onOpen"
|
|
2359
|
+
:close-on-click-modal="false"
|
|
2360
|
+
append-to-body
|
|
2361
|
+
>
|
|
2362
|
+
<div>对话框内容区域</div>
|
|
2363
|
+
<template #footer>
|
|
2364
|
+
<el-button @click="dialogVisible = false">取消</el-button>
|
|
2365
|
+
<el-button type="primary" @click="handleConfirm">确定</el-button>
|
|
2366
|
+
</template>
|
|
2367
|
+
</cloud-dialog>
|
|
2368
|
+
```
|
|
2369
|
+
|
|
2370
|
+
**常用Props**:
|
|
2371
|
+
| 属性名 | 类型 | 说明 |
|
|
2372
|
+
|--------|------|------|
|
|
2373
|
+
| visible.sync | Boolean | 控制对话框显示/隐藏 |
|
|
2374
|
+
| title | String | 对话框标题 |
|
|
2375
|
+
| width | String | 宽度,如 "600px", "800px", "1030px" |
|
|
2376
|
+
| top | String | 距顶部距离,如 "8vh", "2vh" |
|
|
2377
|
+
| before-close | Function | 关闭前回调,可用于异步关闭控制 |
|
|
2378
|
+
| close-on-click-modal | Boolean | 点击遮罩是否关闭 |
|
|
2379
|
+
| append-to-body | Boolean | 是否插入到body |
|
|
2380
|
+
|
|
2381
|
+
---
|
|
2382
|
+
|
|
2383
|
+
##### 5.1.2 用户选择组件 (UserSelect)
|
|
2384
|
+
|
|
2385
|
+
**文件路径**: `cloud-module/cloud-module-base/packages/user-select/UserSelect.vue`
|
|
2386
|
+
|
|
2387
|
+
**功能说明**: 人员选择对话框组件,支持组织机构、角色,工作组等多种选人模式。
|
|
2388
|
+
|
|
2389
|
+
**导入方式**:
|
|
2390
|
+
```javascript
|
|
2391
|
+
import userSelect from 'cloud-module-base/packages/user-select';
|
|
2392
|
+
Vue.component(userSelect.name, userSelect);
|
|
2393
|
+
```
|
|
2394
|
+
|
|
2395
|
+
**Props 属性**:
|
|
2396
|
+
| 属性名 | 类型 | 必填 | 说明 |
|
|
2397
|
+
|--------|------|------|------|
|
|
2398
|
+
| dialogVisible | Boolean | true | 控制对话框显示/隐藏 |
|
|
2399
|
+
| options | Object | false | 配置选项 |
|
|
2400
|
+
| showSecretLabel | Boolean | false | 是否显示密级标签 |
|
|
2401
|
+
|
|
2402
|
+
**options 配置项**:
|
|
2403
|
+
| 属性名 | 类型 | 默认值 | 说明 |
|
|
2404
|
+
|--------|------|--------|------|
|
|
2405
|
+
| title | String | 'base.user_select.title' | 对话框标题 |
|
|
2406
|
+
| selectType | String | 'org' | 选人模式:org/role/workgroup/category |
|
|
2407
|
+
| orgUrl | String | '/cloud-system-manage/api/ou/org/tree' | 组织机构树接口 |
|
|
2408
|
+
| listUserByOrgIdUrl | String | '/cloud-system-manage/api/ou/emp/listEmp' | 人员列表接口 |
|
|
2409
|
+
| selectedUsers | Array | [] | 已选择的人员ID或编码集合 |
|
|
2410
|
+
| filterSwitch | Boolean | false | 是否过滤已选人员 |
|
|
2411
|
+
| userIds | Array | [] | 需要过滤的已选人员列表 |
|
|
2412
|
+
| isShowNoUser | Boolean | true | 是否过滤没有账户的人员 |
|
|
2413
|
+
|
|
2414
|
+
**Events 事件**:
|
|
2415
|
+
- `dialog-save` - 确认选择时触发,返回选中的人员数据
|
|
2416
|
+
- `dialog-close` - 关闭对话框时触发
|
|
2417
|
+
|
|
2418
|
+
**实际使用示例**:
|
|
2419
|
+
```vue
|
|
2420
|
+
<!-- 来源: cloud-system-bpm/src/pages/procdesigner/view/ConfigDialog.vue -->
|
|
2421
|
+
<!-- 人员选择弹窗 -->
|
|
2422
|
+
<user-select
|
|
2423
|
+
:showSecretLabel="true"
|
|
2424
|
+
:dialogVisible="dialogVisibleUser"
|
|
2425
|
+
:options="optionsUser"
|
|
2426
|
+
@dialog-close="dialogClose"
|
|
2427
|
+
@dialog-save="dialogSaveUser"
|
|
2428
|
+
/>
|
|
2429
|
+
```
|
|
2430
|
+
|
|
2431
|
+
```javascript
|
|
2432
|
+
// 对话框数据
|
|
2433
|
+
dialogVisibleUser: false,
|
|
2434
|
+
optionsUser: {
|
|
2435
|
+
selectedUsers: []
|
|
2436
|
+
},
|
|
2437
|
+
|
|
2438
|
+
// 打开人员选择对话框
|
|
2439
|
+
changePeop () {
|
|
2440
|
+
this.dialogVisibleUser = true;
|
|
2441
|
+
this.optionsUser.selectedUsers = this.formData.userConfigIds
|
|
2442
|
+
? this.formData.userConfigIds.split(',') : [];
|
|
2443
|
+
},
|
|
2444
|
+
|
|
2445
|
+
// 保存选择的人员
|
|
2446
|
+
dialogSaveUser (selectedUser) {
|
|
2447
|
+
selectedUser = selectedUser || [];
|
|
2448
|
+
let selectCodes = '';
|
|
2449
|
+
let selectNames = '';
|
|
2450
|
+
if (selectedUser.length > 0) {
|
|
2451
|
+
let userName = [];
|
|
2452
|
+
let userCode = [];
|
|
2453
|
+
selectedUser.forEach(item => {
|
|
2454
|
+
userName.push(item.name);
|
|
2455
|
+
userCode.push(item.code);
|
|
2456
|
+
});
|
|
2457
|
+
selectNames = userName.join(',');
|
|
2458
|
+
selectCodes = userCode.join(',');
|
|
2459
|
+
}
|
|
2460
|
+
this.formData.userConfigNames = selectNames;
|
|
2461
|
+
this.formData.userConfigIds = selectCodes;
|
|
2462
|
+
this.dialogVisibleUser = false;
|
|
2463
|
+
}
|
|
2464
|
+
```
|
|
2465
|
+
|
|
2466
|
+
---
|
|
2467
|
+
|
|
2468
|
+
##### 5.1.3 多用户选择组件 (UserSelectMulti)
|
|
2469
|
+
|
|
2470
|
+
**文件路径**: `cloud-module/cloud-module-base/packages/user-select-multi/UserSelect.vue`
|
|
2471
|
+
|
|
2472
|
+
**功能说明**: 增强版多用户选择组件,支持组织、角色,工作组、职务等多种维度选择。
|
|
2473
|
+
|
|
2474
|
+
**导入方式**:
|
|
2475
|
+
```javascript
|
|
2476
|
+
import userSelectMulti from 'cloud-module-base/packages/user-select-multi';
|
|
2477
|
+
Vue.component(userSelectMulti.name, userSelectMulti);
|
|
2478
|
+
```
|
|
2479
|
+
|
|
2480
|
+
**Props 属性**:
|
|
2481
|
+
| 属性名 | 类型 | 必填 | 说明 |
|
|
2482
|
+
|--------|------|------|------|
|
|
2483
|
+
| dialogVisible | Boolean | true | 控制对话框显示/隐藏 |
|
|
2484
|
+
| options | Object | false | 配置选项 |
|
|
2485
|
+
| showSecretLabel | Boolean | false | 是否显示密级标签 |
|
|
2486
|
+
|
|
2487
|
+
**options 配置项**:
|
|
2488
|
+
| 属性名 | 类型 | 默认值 | 说明 |
|
|
2489
|
+
|--------|------|--------|------|
|
|
2490
|
+
| title | String | - | 对话框标题 |
|
|
2491
|
+
| selectType | String | 'all' | 选人模式:org/role/workgroup/category/duty/all |
|
|
2492
|
+
| selectedUsers | Array | [] | 已选择的人员 |
|
|
2493
|
+
| limit | Number | null | 选择人数限制 |
|
|
2494
|
+
| radioFlag | Boolean | false | 是否单选模式 |
|
|
2495
|
+
| threeMemberApply | Boolean | false | 是否三员申请模式 |
|
|
2496
|
+
|
|
2497
|
+
**Events 事件**:
|
|
2498
|
+
- `dialog-save` - 确认选择时触发
|
|
2499
|
+
- `dialog-close` - 关闭对话框时触发
|
|
2500
|
+
|
|
2501
|
+
**实际使用示例**:
|
|
2502
|
+
```vue
|
|
2503
|
+
<!-- 来源: cloud-system-schedule/src/pages/monitor/view/messageSubscribe.vue -->
|
|
2504
|
+
<!-- 人员选择器 -->
|
|
2505
|
+
<user-select-multi
|
|
2506
|
+
:showSecretLabel="true"
|
|
2507
|
+
:dialogVisible="editDialogVisible"
|
|
2508
|
+
:options="options"
|
|
2509
|
+
@dialog-close="editDialogClose"
|
|
2510
|
+
@dialog-save="editDialogSave"
|
|
2511
|
+
/>
|
|
2512
|
+
```
|
|
2513
|
+
|
|
2514
|
+
```javascript
|
|
2515
|
+
// 数据
|
|
2516
|
+
editDialogVisible: false,
|
|
2517
|
+
options: {
|
|
2518
|
+
title: "人员选择",
|
|
2519
|
+
selectedUsers: [],
|
|
2520
|
+
secirtFlag: false
|
|
2521
|
+
},
|
|
2522
|
+
|
|
2523
|
+
// 事件处理
|
|
2524
|
+
editDialogSave (selectedUsers) {
|
|
2525
|
+
// selectedUsers 为选中的人员数组
|
|
2526
|
+
console.log('选中人员', selectedUsers);
|
|
2527
|
+
this.editDialogVisible = false;
|
|
2528
|
+
},
|
|
2529
|
+
editDialogClose () {
|
|
2530
|
+
this.editDialogVisible = false;
|
|
2531
|
+
}
|
|
2532
|
+
```
|
|
2533
|
+
|
|
2534
|
+
---
|
|
2535
|
+
|
|
2536
|
+
##### 5.1.4 部门选择组件 (DeptSelect)
|
|
2537
|
+
|
|
2538
|
+
**文件路径**: `cloud-module/cloud-module-base/packages/dept-select/dept-select.vue`
|
|
2539
|
+
|
|
2540
|
+
**功能说明**: 部门机构树选择对话框组件。
|
|
2541
|
+
|
|
2542
|
+
**导入方式**:
|
|
2543
|
+
```javascript
|
|
2544
|
+
import deptSelect from 'cloud-module-base/packages/dept-select';
|
|
2545
|
+
Vue.component(deptSelect.name, deptSelect);
|
|
2546
|
+
```
|
|
2547
|
+
|
|
2548
|
+
**Props 属性**:
|
|
2549
|
+
| 属性名 | 类型 | 必填 | 说明 |
|
|
2550
|
+
|--------|------|------|------|
|
|
2551
|
+
| dialogVisible | Boolean | true | 控制对话框显示/隐藏 |
|
|
2552
|
+
| options | Object | false | 配置选项 |
|
|
2553
|
+
| showSecretLabel | Boolean | false | 是否显示密级标签 |
|
|
2554
|
+
|
|
2555
|
+
**options 配置项**:
|
|
2556
|
+
| 属性名 | 类型 | 默认值 | 说明 |
|
|
2557
|
+
|--------|------|--------|------|
|
|
2558
|
+
| title | String | 'base.dept_select.title' | 对话框标题 |
|
|
2559
|
+
| treeUrl | String | '/api/ou/org/orgDeptTree' | 部门树接口 |
|
|
2560
|
+
| checkedIds | Array | [] | 默认选中的部门ID列表 |
|
|
2561
|
+
|
|
2562
|
+
**Events 事件**:
|
|
2563
|
+
- `dialog-save` - 确认选择时触发,返回选中的部门节点数据
|
|
2564
|
+
- `dialog-close` - 关闭对话框时触发
|
|
2565
|
+
|
|
2566
|
+
**实际使用示例**:
|
|
2567
|
+
```vue
|
|
2568
|
+
<!-- 来源: cloud-system-bpm/src/pages/procdesigner/view/ConfigDialog.vue -->
|
|
2569
|
+
<!-- 部门选择弹窗 -->
|
|
2570
|
+
<dept-select
|
|
2571
|
+
:showSecretLabel="true"
|
|
2572
|
+
:dialogVisible="dialogVisibleDept"
|
|
2573
|
+
:options="optionsDept"
|
|
2574
|
+
@dialog-close="dialogClose"
|
|
2575
|
+
@dialog-save="dialogSaveDept"
|
|
2576
|
+
/>
|
|
2577
|
+
```
|
|
2578
|
+
|
|
2579
|
+
```javascript
|
|
2580
|
+
// 数据
|
|
2581
|
+
dialogVisibleDept: false,
|
|
2582
|
+
optionsDept: {
|
|
2583
|
+
checkedIds: []
|
|
2584
|
+
},
|
|
2585
|
+
|
|
2586
|
+
// 打开部门选择对话框
|
|
2587
|
+
changeDep () {
|
|
2588
|
+
this.dialogVisibleDept = true;
|
|
2589
|
+
this.optionsDept.checkedIds = this.formData.deptConfigIds
|
|
2590
|
+
? this.formData.deptConfigIds.split(',') : [];
|
|
2591
|
+
},
|
|
2592
|
+
|
|
2593
|
+
// 保存选择的部门
|
|
2594
|
+
dialogSaveDept (selectedDept) {
|
|
2595
|
+
selectedDept = selectedDept || [];
|
|
2596
|
+
let selectCodes = '';
|
|
2597
|
+
let selectNames = '';
|
|
2598
|
+
if (selectedDept.length > 0) {
|
|
2599
|
+
let deptName = [];
|
|
2600
|
+
let deptCode = [];
|
|
2601
|
+
selectedDept.forEach(item => {
|
|
2602
|
+
deptName.push(item.name);
|
|
2603
|
+
deptCode.push(item.code);
|
|
2604
|
+
});
|
|
2605
|
+
selectCodes = deptCode.join(',');
|
|
2606
|
+
selectNames = deptName.join(',');
|
|
2607
|
+
}
|
|
2608
|
+
this.formData.deptConfigNames = selectNames;
|
|
2609
|
+
this.formData.deptConfigIds = selectCodes;
|
|
2610
|
+
this.dialogVisibleDept = false;
|
|
2611
|
+
}
|
|
2612
|
+
```
|
|
2613
|
+
|
|
2614
|
+
---
|
|
2615
|
+
|
|
2616
|
+
##### 5.1.5 角色选择组件 (RoleSelect)
|
|
2617
|
+
|
|
2618
|
+
**文件路径**: `cloud-module/cloud-module-base/packages/role-select/role-select.vue`
|
|
2619
|
+
|
|
2620
|
+
**功能说明**: 角色树选择对话框组件。
|
|
2621
|
+
|
|
2622
|
+
**导入方式**:
|
|
2623
|
+
```javascript
|
|
2624
|
+
import roleSelect from 'cloud-module-base/packages/role-select';
|
|
2625
|
+
Vue.component(roleSelect.name, roleSelect);
|
|
2626
|
+
```
|
|
2627
|
+
|
|
2628
|
+
**Props 属性**:
|
|
2629
|
+
| 属性名 | 类型 | 必填 | 说明 |
|
|
2630
|
+
|--------|------|------|------|
|
|
2631
|
+
| dialogVisible | Boolean | true | 控制对话框显示/隐藏 |
|
|
2632
|
+
| options | Object | false | 配置选项 |
|
|
2633
|
+
| showSecretLabel | Boolean | false | 是否显示密级标签 |
|
|
2634
|
+
|
|
2635
|
+
**options 配置项**:
|
|
2636
|
+
| 属性名 | 类型 | 默认值 | 说明 |
|
|
2637
|
+
|--------|------|--------|------|
|
|
2638
|
+
| title | String | 'base.role_select.title' | 对话框标题 |
|
|
2639
|
+
| treeUrl | String | '/api/ou/org/orgRoleTree' | 角色树接口 |
|
|
2640
|
+
| checkedIds | Array | [] | 默认选中的角色ID列表 |
|
|
2641
|
+
|
|
2642
|
+
**Events 事件**:
|
|
2643
|
+
- `dialog-save` - 确认选择时触发
|
|
2644
|
+
- `dialog-close` - 关闭对话框时触发
|
|
2645
|
+
|
|
2646
|
+
**实际使用示例**:
|
|
2647
|
+
```vue
|
|
2648
|
+
<!-- 来源: cloud-system-manage/src/pages/us/workbench/view/workbench-base.vue -->
|
|
2649
|
+
<role-select
|
|
2650
|
+
:dialogVisible="dialogVisibleRole"
|
|
2651
|
+
:options="optionsRoles"
|
|
2652
|
+
@dialog-close="dialogClose"
|
|
2653
|
+
@dialog-save="dialogSaveRole"
|
|
2654
|
+
/>
|
|
2655
|
+
```
|
|
2656
|
+
|
|
2657
|
+
```javascript
|
|
2658
|
+
// 数据
|
|
2659
|
+
dialogVisibleRole: false,
|
|
2660
|
+
optionsRoles: {
|
|
2661
|
+
checkedIds: []
|
|
2662
|
+
},
|
|
2663
|
+
|
|
2664
|
+
// 事件处理
|
|
2665
|
+
dialogSaveRole (selectedRoles) {
|
|
2666
|
+
// selectedRoles 为选中的角色数组
|
|
2667
|
+
console.log('选中角色', selectedRoles);
|
|
2668
|
+
this.dialogVisibleRole = false;
|
|
2669
|
+
},
|
|
2670
|
+
dialogClose () {
|
|
2671
|
+
this.dialogVisibleRole = false;
|
|
2672
|
+
}
|
|
2673
|
+
```
|
|
2674
|
+
|
|
2675
|
+
---
|
|
2676
|
+
|
|
2677
|
+
##### 5.1.6 导入按钮组件 (ImportButton)
|
|
2678
|
+
|
|
2679
|
+
**文件路径**: `cloud-module/cloud-module-base/packages/import-button/import-button.vue`
|
|
2680
|
+
|
|
2681
|
+
**功能说明**: 数据导入按钮组件,支持下载模板、上传文件、导入验证等功能。
|
|
2682
|
+
|
|
2683
|
+
**导入方式**:
|
|
2684
|
+
```javascript
|
|
2685
|
+
import importButton from 'cloud-module-base/packages/import-button';
|
|
2686
|
+
Vue.component(importButton.name, importButton);
|
|
2687
|
+
```
|
|
2688
|
+
|
|
2689
|
+
**Props 属性**:
|
|
2690
|
+
| 属性名 | 类型 | 必填 | 说明 |
|
|
2691
|
+
|--------|------|------|------|
|
|
2692
|
+
| options | Object | true | 导入配置选项 |
|
|
2693
|
+
| isDisAble | Boolean | true | 是否禁用按钮 |
|
|
2694
|
+
|
|
2695
|
+
**options 配置项**:
|
|
2696
|
+
| 属性名 | 类型 | 说明 |
|
|
2697
|
+
|--------|------|------|
|
|
2698
|
+
| applicationName | String | 应用名称 |
|
|
2699
|
+
| configId | String | 导入配置ID |
|
|
2700
|
+
| text | String | 按钮文本,默认'导入' |
|
|
2701
|
+
| rootOrgCode | String | 根组织编码 |
|
|
2702
|
+
| rootOrgId | String | 根组织ID |
|
|
2703
|
+
| rootDLevelCode | String | 密级编码 |
|
|
2704
|
+
|
|
2705
|
+
**Events 事件**:
|
|
2706
|
+
- `requestGridData` - 导入完成或取消时触发,用于刷新列表
|
|
2707
|
+
|
|
2708
|
+
**实际使用示例**:
|
|
2709
|
+
```vue
|
|
2710
|
+
<!-- 来源: cloud-system-manage/src/pages/ou/emp/view/Grid.vue -->
|
|
2711
|
+
<cloud-import-button
|
|
2712
|
+
buttonCode="emp_import"
|
|
2713
|
+
:disabled_custom="canShowImport"
|
|
2714
|
+
:options="importOpts"
|
|
2715
|
+
class="marL8"
|
|
2716
|
+
@requestGridData="requestGridData"
|
|
2717
|
+
/>
|
|
2718
|
+
```
|
|
2719
|
+
|
|
2720
|
+
```javascript
|
|
2721
|
+
// 导入配置
|
|
2722
|
+
importOpts: {
|
|
2723
|
+
applicationName: 'cloud-system-manage',
|
|
2724
|
+
configId: 'emp_import_config',
|
|
2725
|
+
rootOrgCode: 'YRD',
|
|
2726
|
+
rootOrgId: 'org-root-id',
|
|
2727
|
+
rootDLevelCode: '3'
|
|
2728
|
+
},
|
|
2729
|
+
|
|
2730
|
+
// 刷新列表
|
|
2731
|
+
requestGridData () {
|
|
2732
|
+
this.queryGridData(); // 重新查询列表数据
|
|
2733
|
+
}
|
|
2734
|
+
|
|
2735
|
+
// 控制按钮是否禁用
|
|
2736
|
+
canShowImport () {
|
|
2737
|
+
// 根据权限或其他业务逻辑判断
|
|
2738
|
+
return false; // false=启用, true=禁用
|
|
2739
|
+
}
|
|
2740
|
+
```
|
|
2741
|
+
|
|
2742
|
+
---
|
|
2743
|
+
|
|
2744
|
+
##### 5.1.7 菜单权限认证组件 (MenuAuth)
|
|
2745
|
+
|
|
2746
|
+
**文件路径**: `cloud-module/cloud-module-base/packages/authenticate/menu-auth.vue`
|
|
2747
|
+
|
|
2748
|
+
**功能说明**: 页面权限控制组件,用于控制用户是否有页面访问权限。
|
|
2749
|
+
|
|
2750
|
+
**导入方式**:
|
|
2751
|
+
```javascript
|
|
2752
|
+
import MenuAuth from 'cloud-module-base/packages/authenticate/menu-auth';
|
|
2753
|
+
Vue.component(MenuAuth.name, MenuAuth);
|
|
2754
|
+
```
|
|
2755
|
+
|
|
2756
|
+
**使用示例**:
|
|
2757
|
+
```vue
|
|
2758
|
+
<menu-auth>
|
|
2759
|
+
<div>需要权限才能显示的内容</div>
|
|
2760
|
+
</menu-auth>
|
|
2761
|
+
```
|
|
2762
|
+
|
|
2763
|
+
**实际使用示例**:
|
|
2764
|
+
```vue
|
|
2765
|
+
<!-- 来源: cloud-system-manage/src/pages/webapi/app/Index.vue -->
|
|
2766
|
+
<!-- 包裹整个页面布局,根据菜单权限控制访问 -->
|
|
2767
|
+
<menu-auth>
|
|
2768
|
+
<el-container class="el-root-container">
|
|
2769
|
+
<el-header height="50px">
|
|
2770
|
+
<v-header />
|
|
2771
|
+
</el-header>
|
|
2772
|
+
<el-container class="el-main-container">
|
|
2773
|
+
<el-aside>
|
|
2774
|
+
<v-tree />
|
|
2775
|
+
</el-aside>
|
|
2776
|
+
<v-grid />
|
|
2777
|
+
</el-container>
|
|
2778
|
+
</el-container>
|
|
2779
|
+
</menu-auth>
|
|
2780
|
+
```
|
|
2781
|
+
|
|
2782
|
+
---
|
|
2783
|
+
|
|
2784
|
+
##### 5.1.8 资源代码授权组件 (ResourceCodeAuth)
|
|
2785
|
+
|
|
2786
|
+
**文件路径**: `cloud-module/cloud-module-base/packages/resource-code-auth/resource-code-auth.vue`
|
|
2787
|
+
|
|
2788
|
+
**功能说明**: 基于资源代码的权限控制组件。
|
|
2789
|
+
|
|
2790
|
+
**导入方式**:
|
|
2791
|
+
```javascript
|
|
2792
|
+
import resourceCodeAuth from 'cloud-module-base/packages/resource-code-auth';
|
|
2793
|
+
Vue.component(resourceCodeAuth.name, resourceCodeAuth);
|
|
2794
|
+
```
|
|
2795
|
+
|
|
2796
|
+
**Props 属性**:
|
|
2797
|
+
| 属性名 | 类型 | 必填 | 说明 |
|
|
2798
|
+
|--------|------|------|------|
|
|
2799
|
+
| resourceCode | String | true | 资源代码 |
|
|
2800
|
+
| url | String | true | 请求授权验证的URL |
|
|
2801
|
+
|
|
2802
|
+
**使用示例**:
|
|
2803
|
+
```vue
|
|
2804
|
+
<resource-code-auth
|
|
2805
|
+
resourceCode="emp_export"
|
|
2806
|
+
url="/api/authority/resource/resource-code-auth">
|
|
2807
|
+
<el-button>导出</el-button>
|
|
2808
|
+
</resource-code-auth>
|
|
2809
|
+
```
|
|
2810
|
+
|
|
2811
|
+
**工作原理**: 组件会调用 `/api/authority/resource/resource-code-auth` 接口进行权限验证,只有授权通过才显示插槽内容。
|
|
2812
|
+
|
|
2813
|
+
---
|
|
2814
|
+
|
|
2815
|
+
##### 5.1.9 三员授权组件 (ThreeMemberAuth)
|
|
2816
|
+
|
|
2817
|
+
**文件路径**: `cloud-module/cloud-module-base/packages/three-member-auth/three-member-auth.vue`
|
|
2818
|
+
|
|
2819
|
+
**功能说明**: 三员权限控制组件,用于判断角色是否具有三员授权。
|
|
2820
|
+
|
|
2821
|
+
**导入方式**:
|
|
2822
|
+
```javascript
|
|
2823
|
+
import threeMemberAuth from 'cloud-module-base/packages/three-member-auth';
|
|
2824
|
+
Vue.component(threeMemberAuth.name, threeMemberAuth);
|
|
2825
|
+
```
|
|
2826
|
+
|
|
2827
|
+
**Props 属性**:
|
|
2828
|
+
| 属性名 | 类型 | 必填 | 说明 |
|
|
2829
|
+
|--------|------|------|------|
|
|
2830
|
+
| roleCode | String | true | 角色代码 |
|
|
2831
|
+
|
|
2832
|
+
**使用示例**:
|
|
2833
|
+
```vue
|
|
2834
|
+
<three-member-auth roleCode="security_admin">
|
|
2835
|
+
<el-button>安全管理</el-button>
|
|
2836
|
+
</three-member-auth>
|
|
2837
|
+
```
|
|
2838
|
+
|
|
2839
|
+
**实际使用示例**:
|
|
2840
|
+
```vue
|
|
2841
|
+
<!-- 来源: cloud-system-manage/src/pages/authority/system/view/role-grid.vue -->
|
|
2842
|
+
<!-- 多角色逗号分隔,只要满足任一角色即可显示 -->
|
|
2843
|
+
<three-member-auth role-code="XTGLY,AQGLY">
|
|
2844
|
+
<el-button
|
|
2845
|
+
:disabled="addDisabled"
|
|
2846
|
+
type="primary"
|
|
2847
|
+
@click="addBtnClick"
|
|
2848
|
+
>{{ $t('base.button.add') }}</el-button>
|
|
2849
|
+
<el-button
|
|
2850
|
+
:disabled="isdisabled"
|
|
2851
|
+
@click="deleteBtnClick"
|
|
2852
|
+
>
|
|
2853
|
+
{{ $t('base.button.delete') }}
|
|
2854
|
+
</el-button>
|
|
2855
|
+
</three-member-auth>
|
|
2856
|
+
```
|
|
2857
|
+
|
|
2858
|
+
---
|
|
2859
|
+
|
|
2860
|
+
##### 5.1.10 表格头部搜索组件 (TableHeadSearch)
|
|
2861
|
+
|
|
2862
|
+
**文件路径**: `cloud-module/cloud-module-base/packages/components/tableHeadSearch.vue`
|
|
2863
|
+
|
|
2864
|
+
**功能说明**: 表格列筛选组件,用于表头的筛选操作。
|
|
2865
|
+
|
|
2866
|
+
**导入方式**:
|
|
2867
|
+
```javascript
|
|
2868
|
+
import tableHeadSearch from 'cloud-module-base/packages/components/tableHeadSearch';
|
|
2869
|
+
Vue.component(tableHeadSearch.name, tableHeadSearch);
|
|
2870
|
+
```
|
|
2871
|
+
|
|
2872
|
+
**Props 属性**:
|
|
2873
|
+
| 属性名 | 类型 | 必填 | 说明 |
|
|
2874
|
+
|--------|------|------|------|
|
|
2875
|
+
| filedSearchName | String | - | 表头显示名称 |
|
|
2876
|
+
| showSelectFlag | Boolean | - | 是否显示选中标识 |
|
|
2877
|
+
| value / v-model | Boolean | false | popover显示状态 |
|
|
2878
|
+
| checkList.sync | Array | - | 选中列表 |
|
|
2879
|
+
| filterList | Array | - | 筛选数据列表 |
|
|
2880
|
+
|
|
2881
|
+
**Events 事件**:
|
|
2882
|
+
- `findTypeList` - 确认筛选时触发
|
|
2883
|
+
- `resetTypeList` - 重置筛选时触发
|
|
2884
|
+
- `showList` - 显示列表时触发
|
|
2885
|
+
|
|
2886
|
+
**实际使用示例**:
|
|
2887
|
+
```vue
|
|
2888
|
+
<!-- 来源: cloud-system-manage/src/pages/ou/org/view/Grid.vue -->
|
|
2889
|
+
<template slot="header" slot-scope="scope">
|
|
2890
|
+
<div v-if="field.code == 'dLevel'">
|
|
2891
|
+
<table-head-search
|
|
2892
|
+
ref="resetDLevelSearch"
|
|
2893
|
+
filedSearchName="组织类型"
|
|
2894
|
+
:showSelectFlag="dLevelSelectFlag"
|
|
2895
|
+
v-model="showDLevelPopover"
|
|
2896
|
+
:checkList.sync="dLevelLists"
|
|
2897
|
+
:filterList="filterDLevelList"
|
|
2898
|
+
@findTypeList="findDLevel"
|
|
2899
|
+
@resetTypeList="resetDLevel"
|
|
2900
|
+
@showList="resetDLevelModule"
|
|
2901
|
+
></table-head-search>
|
|
2902
|
+
</div>
|
|
2903
|
+
<div v-else-if="field.code == 'isAble'">
|
|
2904
|
+
<table-head-search
|
|
2905
|
+
ref="resetStatusSearch"
|
|
2906
|
+
filedSearchName="状态"
|
|
2907
|
+
:showSelectFlag="statusSelectFlag"
|
|
2908
|
+
v-model="showStatusPopover"
|
|
2909
|
+
:checkList.sync="statusLists"
|
|
2910
|
+
:filterList="filterStatusList"
|
|
2911
|
+
@findTypeList="findStatusList"
|
|
2912
|
+
@resetTypeList="resetStatus"
|
|
2913
|
+
@showList="resetStatusModule"
|
|
2914
|
+
></table-head-search>
|
|
2915
|
+
</div>
|
|
2916
|
+
</template>
|
|
2917
|
+
|
|
2918
|
+
<script>
|
|
2919
|
+
import TableHeadSearch from '@/components/tableHeadSearch';
|
|
2920
|
+
export default {
|
|
2921
|
+
components: { TableHeadSearch },
|
|
2922
|
+
data() {
|
|
2923
|
+
return {
|
|
2924
|
+
dLevelLists: [],
|
|
2925
|
+
filterDLevelList: [
|
|
2926
|
+
{ code: '0', name: '机构' },
|
|
2927
|
+
{ code: '1', name: '部门' }
|
|
2928
|
+
]
|
|
2929
|
+
};
|
|
2930
|
+
}
|
|
2931
|
+
}
|
|
2932
|
+
</script>
|
|
2933
|
+
```
|
|
2934
|
+
|
|
2935
|
+
---
|
|
2936
|
+
|
|
2937
|
+
##### 5.1.11 二级鉴别密码验证弹窗 (VerifiyPassword)
|
|
2938
|
+
|
|
2939
|
+
**文件路径**: `cloud-module/cloud-module-base/packages/components/verifiy-password.vue`
|
|
2940
|
+
|
|
2941
|
+
**功能说明**: 二级密码鉴别组件,用于安全验证。
|
|
2942
|
+
|
|
2943
|
+
**导入方式**:
|
|
2944
|
+
```javascript
|
|
2945
|
+
import verifiyPassword from 'cloud-module-base/packages/components/verifiy-password';
|
|
2946
|
+
Vue.component(verifiyPassword.name, verifiyPassword);
|
|
2947
|
+
```
|
|
2948
|
+
|
|
2949
|
+
**Props 属性**:
|
|
2950
|
+
| 属性名 | 类型 | 必填 | 说明 |
|
|
2951
|
+
|--------|------|------|------|
|
|
2952
|
+
| dialogFormVisible | Boolean | false | 对话框显示状态 |
|
|
2953
|
+
| title | String | '' | 对话框标题 |
|
|
2954
|
+
|
|
2955
|
+
**Events 事件**:
|
|
2956
|
+
- `close` - 关闭对话框时触发
|
|
2957
|
+
- `define` - 验证通过确认时触发
|
|
2958
|
+
|
|
2959
|
+
**实际使用示例**:
|
|
2960
|
+
```vue
|
|
2961
|
+
<!-- 来源: cloud-system-manage/src/pages/ou/user/view/Grid.vue -->
|
|
2962
|
+
<template>
|
|
2963
|
+
<verifiy-password
|
|
2964
|
+
:title="title1"
|
|
2965
|
+
:dialogFormVisible="jianquanVisible"
|
|
2966
|
+
@close="dialogClose"
|
|
2967
|
+
@define="handelConfirm"
|
|
2968
|
+
></verifiy-password>
|
|
2969
|
+
</template>
|
|
2970
|
+
|
|
2971
|
+
<script>
|
|
2972
|
+
import verifiyPassword from '@/components/verifiy-password';
|
|
2973
|
+
export default {
|
|
2974
|
+
components: { verifiyPassword },
|
|
2975
|
+
data() {
|
|
2976
|
+
return {
|
|
2977
|
+
title1: '安全验证',
|
|
2978
|
+
jianquanVisible: false,
|
|
2979
|
+
buttonCode: ''
|
|
2980
|
+
};
|
|
2981
|
+
},
|
|
2982
|
+
methods: {
|
|
2983
|
+
handelConfirmJianquan() {
|
|
2984
|
+
// 打开验证弹窗
|
|
2985
|
+
this.jianquanVisible = true;
|
|
2986
|
+
},
|
|
2987
|
+
dialogClose() {
|
|
2988
|
+
// 关闭验证弹窗
|
|
2989
|
+
this.jianquanVisible = false;
|
|
2990
|
+
},
|
|
2991
|
+
handelConfirm() {
|
|
2992
|
+
// 验证通过后的回调
|
|
2993
|
+
this.jianquanVisible = false;
|
|
2994
|
+
if (this.buttonCode === 'user_delete') {
|
|
2995
|
+
this.handleDeletes();
|
|
2996
|
+
} else if (this.buttonCode === 'user_enable') {
|
|
2997
|
+
this.enableDept();
|
|
2998
|
+
}
|
|
2999
|
+
// ... 其他操作
|
|
3000
|
+
},
|
|
3001
|
+
triggerVerify(code) {
|
|
3002
|
+
// 触发验证前记录操作码
|
|
3003
|
+
this.buttonCode = code;
|
|
3004
|
+
this.jianquanVisible = true;
|
|
3005
|
+
}
|
|
3006
|
+
}
|
|
3007
|
+
}
|
|
3008
|
+
</script>
|
|
3009
|
+
```
|
|
3010
|
+
|
|
3011
|
+
---
|
|
3012
|
+
|
|
3013
|
+
##### 5.1.12 通用头部组件 (CommonHeader)
|
|
3014
|
+
|
|
3015
|
+
**文件路径**: `cloud-module/cloud-module-base/packages/components/common-header.vue`
|
|
3016
|
+
|
|
3017
|
+
**功能说明**: 通用页面头部组件,包含面包屑导航和密级标签显示。
|
|
3018
|
+
|
|
3019
|
+
**导入方式**:
|
|
3020
|
+
```javascript
|
|
3021
|
+
import commonHeader from 'cloud-module-base/packages/components/common-header';
|
|
3022
|
+
Vue.component(commonHeader.name, commonHeader);
|
|
3023
|
+
```
|
|
3024
|
+
|
|
3025
|
+
**实际使用示例**:
|
|
3026
|
+
```vue
|
|
3027
|
+
<!-- 来源: cloud-system-manage/src/pages/ou/tenancy/view/Dialog.vue -->
|
|
3028
|
+
<template>
|
|
3029
|
+
<el-container>
|
|
3030
|
+
<el-header height="50px">
|
|
3031
|
+
<el-row>
|
|
3032
|
+
<el-col :span="12">
|
|
3033
|
+
<v-header></v-header>
|
|
3034
|
+
</el-col>
|
|
3035
|
+
<el-col :span="12" style="text-align:right;line-height:50px;">
|
|
3036
|
+
<el-button type="primary" size="medium" @click="submitForm">
|
|
3037
|
+
{{ $t('base.button.save') }}
|
|
3038
|
+
</el-button>
|
|
3039
|
+
</el-col>
|
|
3040
|
+
</el-row>
|
|
3041
|
+
</el-header>
|
|
3042
|
+
<el-main>
|
|
3043
|
+
<!-- 表单内容 -->
|
|
3044
|
+
</el-main>
|
|
3045
|
+
</el-container>
|
|
3046
|
+
</template>
|
|
3047
|
+
|
|
3048
|
+
<script>
|
|
3049
|
+
import header from 'cloud-module-base/packages/components/common-header';
|
|
3050
|
+
export default {
|
|
3051
|
+
components: { 'v-header': header }
|
|
3052
|
+
}
|
|
3053
|
+
</script>
|
|
3054
|
+
```
|
|
3055
|
+
|
|
3056
|
+
---
|
|
3057
|
+
|
|
3058
|
+
### 5.2 前端工具函数库
|
|
3059
|
+
|
|
3060
|
+
#### 工具类清单
|
|
3061
|
+
|
|
3062
|
+
路径:`cloud-module/cloud-module-base/static/js/utils/`
|
|
3063
|
+
|
|
3064
|
+
| 文件名 | 说明 | 分类 |
|
|
3065
|
+
|-------|------|------|
|
|
3066
|
+
| accessLogs.js | 访问日志工具 | 日志服务 |
|
|
3067
|
+
| dataFormat.js | 数据格式化工具 | 数据格式化 |
|
|
3068
|
+
| form-rules.js | 表单校验规则 | 表单校验 |
|
|
3069
|
+
| globalValitor.js | 全局校验器 | 表单校验 |
|
|
3070
|
+
| preventReClick.js | 防重复点击工具 | 安全生产 |
|
|
3071
|
+
| sm2.js | SM2加密工具 | 加解密 |
|
|
3072
|
+
| sm4-utils.js | SM4加密工具 | 加解密 |
|
|
3073
|
+
| sm4.js | SM4加密(简化版) | 加解密 |
|
|
3074
|
+
|
|
3075
|
+
---
|
|
3076
|
+
|
|
3077
|
+
#### 数据格式化类
|
|
3078
|
+
|
|
3079
|
+
##### 5.2.1 日期格式化
|
|
3080
|
+
|
|
3081
|
+
文件路径:`cloud-module/cloud-module-base/static/js/utils/dataFormat.js`
|
|
3082
|
+
|
|
3083
|
+
方法:`formatter(value)`
|
|
3084
|
+
|
|
3085
|
+
入参:Date 或 String(支持 Date 对象或日期字符串)
|
|
3086
|
+
|
|
3087
|
+
返回:String (格式: 'yyyy-MM-dd hh:mm')
|
|
3088
|
+
|
|
3089
|
+
使用场景:日期对象格式化为指定格式字符串,默认格式为 'yyyy-MM-dd hh:mm'
|
|
3090
|
+
|
|
3091
|
+
**实际使用示例**:
|
|
3092
|
+
```javascript
|
|
3093
|
+
// 来源: cloud-system-bpm-demo/src/pages/example/form-edit.vue
|
|
3094
|
+
import dateFormat from 'cloud-module-base/static/js/utils/dataFormat.js';
|
|
3095
|
+
|
|
3096
|
+
// 在模板中使用
|
|
3097
|
+
<span class="text">{{ dateFormat(row.createTime) }}</span>
|
|
3098
|
+
|
|
3099
|
+
// 日期格式化
|
|
3100
|
+
dateFormat(new Date()) // 返回: '2026-04-30 10:30'
|
|
3101
|
+
dateFormat('2026-04-30') // 返回: '2026-04-30 00:00'
|
|
3102
|
+
dateFormat(1744363800000) // 返回: 对应日期的格式化字符串
|
|
3103
|
+
```
|
|
3104
|
+
|
|
3105
|
+
---
|
|
3106
|
+
|
|
3107
|
+
#### 表单校验类
|
|
3108
|
+
|
|
3109
|
+
##### 5.2.2 表单校验规则库 form-rules.js
|
|
3110
|
+
|
|
3111
|
+
文件路径:`cloud-module/cloud-module-base/static/js/utils/form-rules.js`
|
|
3112
|
+
|
|
3113
|
+
说明:提供与 Element UI 表单规则格式兼容的校验规则对象,可直接作为 `rules` 属性使用。
|
|
3114
|
+
|
|
3115
|
+
**导入方式**:
|
|
3116
|
+
```javascript
|
|
3117
|
+
import FormRules from 'cloud-module-base/static/js/utils/form-rules'
|
|
3118
|
+
```
|
|
3119
|
+
|
|
3120
|
+
**校验规则清单**:
|
|
3121
|
+
|
|
3122
|
+
| 规则名称 | 说明 | 正则表达式 | 错误提示 |
|
|
3123
|
+
|---------|------|-----------|---------|
|
|
3124
|
+
| `FormRules.required` | 必填校验,不允许空格 | `/^[^\s]*$/` | 不允许输入空格 |
|
|
3125
|
+
| `FormRules.nospecial` | 字母数字下划线校验 | `/^[a-zA-Z0-9_]+$/` | 只允许输入英文字符或数字或_ |
|
|
3126
|
+
| `FormRules.noSpecialCode` | 中文字母数字下划线校验 | `/^[\u4e00-\u9fa5A-Za-z0-9_]+$/` | 不允许输入特殊字符 |
|
|
3127
|
+
| `FormRules.name` | 名称校验 | `/^[a-zA-Z0-9\-_\u4e00-\u9fa5]*$/` | 仅支持数值、中文字符、英文字母、下划线、横线 |
|
|
3128
|
+
| `FormRules.cellphone` | 手机号校验 | `/^1[0-9]{10}$/` | 请输入正确的手机号码 |
|
|
3129
|
+
| `FormRules.telephone` | 电话号码校验 | `/^[0-9]{3,4}-[0-9]{7,8}$/` | 请输入正确的电话号码 |
|
|
3130
|
+
| `FormRules.email` | 邮箱校验 | `/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/` | 请输入有效的电子邮件地址 |
|
|
3131
|
+
| `FormRules.idcard` | 身份证校验 | `/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|12|20|30|31)\d{3}[0-9Xx]$/` | 请输入有效的身份证号码 |
|
|
3132
|
+
| `FormRules.url` | URL校验 | 标准URL正则 | 请输入有效的URL地址 |
|
|
3133
|
+
| `FormRules.ip` | IP地址校验 | IPv4正则 | 请输入有效的ip地址 |
|
|
3134
|
+
| `FormRules.mac` | MAC地址校验 | `/^[A-Fa-f0-9]{2}(-[A-Fa-f0-9]{2}){5}$|^[A-Fa-f0-9]{2}(:[A-Fa-f0-9]{2}){5}$/` | 请输入有效的mac地址 |
|
|
3135
|
+
|
|
3136
|
+
**实际使用示例**:
|
|
3137
|
+
```javascript
|
|
3138
|
+
// 来源: cloud-system-manage/src/pages/ou/workgroup/view/edit-workgroup.vue
|
|
3139
|
+
import formRules from 'cloud-module-base/static/js/utils/form-rules';
|
|
3140
|
+
|
|
3141
|
+
// 在 el-form 的 rules 属性中使用
|
|
3142
|
+
rules: {
|
|
3143
|
+
code: [
|
|
3144
|
+
{
|
|
3145
|
+
required: true,
|
|
3146
|
+
message: this.$i18n.t("workgroup.code_add"),
|
|
3147
|
+
trigger: "blur"
|
|
3148
|
+
},
|
|
3149
|
+
{
|
|
3150
|
+
pattern: formRules.nospecial.pattern, // 获取正则表达式
|
|
3151
|
+
message: formRules.nospecial.message, // 获取错误提示
|
|
3152
|
+
trigger: "blur"
|
|
3153
|
+
}
|
|
3154
|
+
],
|
|
3155
|
+
name: [
|
|
3156
|
+
{ required: true, message: '名称不能为空', trigger: 'blur' },
|
|
3157
|
+
{
|
|
3158
|
+
pattern: formRules.name.pattern,
|
|
3159
|
+
message: formRules.name.message,
|
|
3160
|
+
trigger: 'blur'
|
|
3161
|
+
}
|
|
3162
|
+
]
|
|
3163
|
+
}
|
|
3164
|
+
```
|
|
3165
|
+
|
|
3166
|
+
**使用 pattern 和 message 的标准写法**:
|
|
3167
|
+
```javascript
|
|
3168
|
+
// 导入
|
|
3169
|
+
import formRules from 'cloud-module-base/static/js/utils/form-rules';
|
|
3170
|
+
|
|
3171
|
+
// 使用 - 分别取出 pattern 和 message
|
|
3172
|
+
{
|
|
3173
|
+
pattern: formRules.required.pattern,
|
|
3174
|
+
message: formRules.required.message,
|
|
3175
|
+
trigger: 'blur'
|
|
3176
|
+
}
|
|
3177
|
+
```
|
|
3178
|
+
|
|
3179
|
+
---
|
|
3180
|
+
|
|
3181
|
+
#### 防重复点击
|
|
3182
|
+
|
|
3183
|
+
##### 5.2.4 防重复点击指令 preventReClick.js
|
|
3184
|
+
|
|
3185
|
+
文件路径:`cloud-module/cloud-module-base/static/js/utils/preventReClick.js`
|
|
3186
|
+
|
|
3187
|
+
说明:Vue 指令,用于防止用户快速重复点击按钮,防止重复提交。指令会在点击后禁用按钮,延迟指定时间后自动恢复。
|
|
3188
|
+
|
|
3189
|
+
**导入方式**:
|
|
3190
|
+
```javascript
|
|
3191
|
+
import { preventReClick } from 'cloud-module-base/static/js/utils/preventReClick'
|
|
3192
|
+
```
|
|
3193
|
+
|
|
3194
|
+
**入参说明**:
|
|
3195
|
+
- `delay`: 延迟毫秒数,默认 3000ms(3秒)
|
|
3196
|
+
|
|
3197
|
+
**使用示例**:
|
|
3198
|
+
```javascript
|
|
3199
|
+
// 1. 注册全局指令
|
|
3200
|
+
import { preventReClick } from 'cloud-module-base/static/js/utils/preventReClick'
|
|
3201
|
+
Vue.directive('preventReClick', preventReClick)
|
|
3202
|
+
|
|
3203
|
+
// 2. 在组件中使用
|
|
3204
|
+
export default {
|
|
3205
|
+
methods: {
|
|
3206
|
+
submitForm() {
|
|
3207
|
+
// 提交表单逻辑
|
|
3208
|
+
}
|
|
3209
|
+
}
|
|
3210
|
+
}
|
|
3211
|
+
```
|
|
3212
|
+
|
|
3213
|
+
```vue
|
|
3214
|
+
<!-- 模板中使用,3秒内不可重复点击 -->
|
|
3215
|
+
<el-button @click="submitForm" v-prevent-re-click>提交</el-button>
|
|
3216
|
+
|
|
3217
|
+
<!-- 自定义延迟时间,1秒内不可重复点击 -->
|
|
3218
|
+
<el-button @click="submitForm" v-prevent-re-click="1000">快速提交</el-button>
|
|
3219
|
+
|
|
3220
|
+
<!-- 禁用按钮(指令仍然生效) -->
|
|
3221
|
+
<el-button type="primary" :disabled="submitting" v-prevent-re-click="2000">
|
|
3222
|
+
{{ submitting ? '提交中...' : '提交' }}
|
|
3223
|
+
</el-button>
|
|
3224
|
+
```
|
|
3225
|
+
|
|
3226
|
+
**实际使用示例**:
|
|
3227
|
+
```javascript
|
|
3228
|
+
// 来源: cloud-system-schedule/src/pages/taskManage/main.js
|
|
3229
|
+
import { preventReClick } from 'cloud-module-base/static/js/utils/preventReClick';
|
|
3230
|
+
Vue.use(preventReClick); // 全局注册指令
|
|
3231
|
+
|
|
3232
|
+
// 来源: cloud-module-bpm/packages/bpm-form-tools/bpm-form-tools.vue
|
|
3233
|
+
// 直接在模板中使用
|
|
3234
|
+
<el-button type="primary" v-prevent-re-click @click="handleSubmit">提交</el-button>
|
|
3235
|
+
```
|
|
3236
|
+
|
|
3237
|
+
---
|
|
3238
|
+
|
|
3239
|
+
#### 加解密类
|
|
3240
|
+
|
|
3241
|
+
##### 5.2.5 SM2加密 sm2.js
|
|
3242
|
+
|
|
3243
|
+
文件路径:`cloud-module/cloud-module-base/static/js/utils/sm2.js`
|
|
3244
|
+
|
|
3245
|
+
说明:SM2 国密算法加密解密工具,支持加密、解密、签名、验签等操作。
|
|
3246
|
+
|
|
3247
|
+
**导入方式**:
|
|
3248
|
+
```javascript
|
|
3249
|
+
import sm2 from 'cloud-module-base/static/js/utils/sm2'
|
|
3250
|
+
```
|
|
3251
|
+
|
|
3252
|
+
**方法说明**:
|
|
3253
|
+
|
|
3254
|
+
| 方法 | 说明 | 入参 | 返回 |
|
|
3255
|
+
|------|------|------|------|
|
|
3256
|
+
| `sm2.generateKeyPairHex()` | 生成SM2密钥对 | 无 | `{ privateKey, publicKey }` |
|
|
3257
|
+
| `sm2.doEncrypt(data, publicKey, mode)` | SM2加密 | data: 待加密数据, publicKey: 公钥, mode: '0'=C1C3C2, '1'=C1C2C3 | 加密后字符串 |
|
|
3258
|
+
| `sm2.doDecrypt(data, privateKey, mode)` | SM2解密 | data: 加密数据, privateKey: 私钥, mode: 加密模式 | 解密后字符串 |
|
|
3259
|
+
| `sm2.doSignature(data, privateKey)` | SM2签名 | data: 待签名数据, privateKey: 私钥 | 签名字符串 |
|
|
3260
|
+
| `sm2.doVerifySignature(data, signature, publicKey)` | SM2验签 | data: 原始数据, signature: 签名, publicKey: 公钥 | boolean |
|
|
3261
|
+
| `sm2.getPublicKeyFromPrivateKey(privateKey)` | 从私钥获取公钥 | privateKey | 公钥 |
|
|
3262
|
+
|
|
3263
|
+
**实际使用示例**:
|
|
3264
|
+
```javascript
|
|
3265
|
+
// 来源: cloud-system-portal/src/views/login.vue
|
|
3266
|
+
import sm2 from 'cloud-module-base/static/js/utils/sm2';
|
|
3267
|
+
|
|
3268
|
+
// 生成SM4密钥并用SM2加密传输
|
|
3269
|
+
let sm4Key = this.getUUID(); // 生成随机16字节密钥
|
|
3270
|
+
let privateKey = sm2.doEncrypt(sm4Key, window.localStorage.getItem("smKey"), '1');
|
|
3271
|
+
// privateKey 用于后续解密
|
|
3272
|
+
```
|
|
3273
|
+
|
|
3274
|
+
---
|
|
3275
|
+
|
|
3276
|
+
##### 5.2.6 SM4加密 sm4-utils.js
|
|
3277
|
+
|
|
3278
|
+
文件路径:`cloud-module/cloud-module-base/static/js/utils/sm4-utils.js`
|
|
3279
|
+
|
|
3280
|
+
说明:SM4 国密算法对称加密工具,基于 sm4.js 封装,提供 encrypt 和 decrypt 方法。
|
|
3281
|
+
|
|
3282
|
+
**导入方式**:
|
|
3283
|
+
```javascript
|
|
3284
|
+
import { encrypt, decrypt } from 'cloud-module-base/static/js/utils/sm4-utils'
|
|
3285
|
+
```
|
|
3286
|
+
|
|
3287
|
+
**方法说明**:
|
|
3288
|
+
|
|
3289
|
+
| 方法 | 说明 | 入参 | 返回 |
|
|
3290
|
+
|------|------|------|------|
|
|
3291
|
+
| `encrypt(msg, key)` | SM4加密 | msg: 待加密字符串, key: 16字节密钥 | Base64加密字符串 |
|
|
3292
|
+
| `decrypt(data, key)` | SM4解密 | data: 加密字符串, key: 16字节密钥 | 解密后字符串 |
|
|
3293
|
+
|
|
3294
|
+
**使用示例**:
|
|
3295
|
+
```javascript
|
|
3296
|
+
import { encrypt, decrypt } from 'cloud-module-base/static/js/utils/sm4-utils'
|
|
3297
|
+
|
|
3298
|
+
// 16字节密钥
|
|
3299
|
+
const key = 'nXwqj7JVe@czbD4E'
|
|
3300
|
+
|
|
3301
|
+
// 加密
|
|
3302
|
+
const plainText = '需要加密的数据'
|
|
3303
|
+
const encrypted = encrypt(plainText, key)
|
|
3304
|
+
|
|
3305
|
+
// 解密
|
|
3306
|
+
const decrypted = decrypt(encrypted, key)
|
|
3307
|
+
```
|
|
3308
|
+
|
|
3309
|
+
**实际使用示例**:
|
|
3310
|
+
```javascript
|
|
3311
|
+
// 来源: cloud-system-portal/src/views/login.vue
|
|
3312
|
+
import { encrypt, decrypt } from 'cloud-module-base/static/js/utils/sm4-utils';
|
|
3313
|
+
import sm2 from 'cloud-module-base/static/js/utils/sm2';
|
|
3314
|
+
|
|
3315
|
+
login () {
|
|
3316
|
+
let sm4Key = this.getUUID(); // 生成随机密钥
|
|
3317
|
+
// 用SM2加密SM4密钥
|
|
3318
|
+
let privateKey = sm2.doEncrypt(sm4Key, window.localStorage.getItem("smKey"), '1');
|
|
3319
|
+
window.sessionStorage.setItem("smPrivate", privateKey);
|
|
3320
|
+
|
|
3321
|
+
// 用SM4加密用户名和密码
|
|
3322
|
+
let encryptedUserName = encrypt(this.account.username, sm4Key);
|
|
3323
|
+
let encryptedPass = encrypt(this.account.pass, sm4Key);
|
|
3324
|
+
|
|
3325
|
+
// 发送到服务器
|
|
3326
|
+
this.$http({
|
|
3327
|
+
url: '/login',
|
|
3328
|
+
data: { username: encryptedUserName, pass: encryptedPass }
|
|
3329
|
+
});
|
|
3330
|
+
}
|
|
3331
|
+
```
|
|
3332
|
+
|
|
3333
|
+
---
|
|
3334
|
+
|
|
3335
|
+
#### 访问日志类
|
|
3336
|
+
|
|
3337
|
+
##### 5.2.8 访问日志记录 accessLogs.js
|
|
3338
|
+
|
|
3339
|
+
文件路径:`cloud-module/cloud-module-base/static/js/utils/accessLogs.js`
|
|
3340
|
+
|
|
3341
|
+
说明:记录用户访问日志,用于审计追踪。
|
|
3342
|
+
|
|
3343
|
+
**导入方式**:
|
|
3344
|
+
```javascript
|
|
3345
|
+
import saveAcessLog from 'cloud-module-base/static/js/utils/accessLogs'
|
|
3346
|
+
```
|
|
3347
|
+
|
|
3348
|
+
**方法说明**:
|
|
3349
|
+
|
|
3350
|
+
| 方法 | 说明 | 入参 |
|
|
3351
|
+
|------|------|------|
|
|
3352
|
+
| `saveAcessLog(bmodule, fmodule)` | 保存访问日志 | bmodule: 业务模块, fmodule: 功能模块 |
|
|
3353
|
+
|
|
3354
|
+
**实际使用示例**:
|
|
3355
|
+
```javascript
|
|
3356
|
+
// 来源: cloud-system-manage/src/pages/basic/log/App.vue
|
|
3357
|
+
import saveAcessLog from 'cloud-module-base/static/js/utils/accessLogs';
|
|
3358
|
+
|
|
3359
|
+
export default {
|
|
3360
|
+
name: 'Index',
|
|
3361
|
+
created () {
|
|
3362
|
+
// 在页面创建时记录访问日志
|
|
3363
|
+
saveAcessLog('基础数据', '系统日志')
|
|
3364
|
+
},
|
|
3365
|
+
};
|
|
3366
|
+
|
|
3367
|
+
// 更多示例
|
|
3368
|
+
saveAcessLog('在线管理', '用户在线时长') // cloud-system-manage
|
|
3369
|
+
saveAcessLog('审核管理', '申请记录') // cloud-system-manage
|
|
3370
|
+
saveAcessLog('组织机构', '用户维护') // cloud-system-manage
|
|
3371
|
+
saveAcessLog('调度编排', '业务流管理') // cloud-system-schedule
|
|
3372
|
+
saveAcessLog('调度编排', '统一调度监控') // cloud-system-schedule
|
|
3373
|
+
```
|
|
3374
|
+
|
|
3375
|
+
**参数说明**:
|
|
3376
|
+
- `bmodule`: 大模块名称,如 '基础数据'、'在线管理'、'审核管理'
|
|
3377
|
+
- `fmodule`: 功能模块名称,如 '系统日志'、'用户在线时长'、'申请记录'
|
|
3378
|
+
|
|
3379
|
+
### 5.3 流程组件与方法-**详细说明请参考**:应用开发平台-流程管理-使用攻略(八):流程前端组件及方法说明文档.md
|
|
3380
|
+
|
|
3381
|
+
#### 前端组件
|
|
3382
|
+
|
|
3383
|
+
| 来源 | 组件/方法名 | 作用场景 | 说明 |
|
|
3384
|
+
|------|------------|----------|------|
|
|
3385
|
+
| bpm-form-tools.vue | BpmFormTools | BPM表单工具组件 | 流程表单核心组件,集成发送、暂存等流程操作按钮 |
|
|
3386
|
+
| bpm-grid-buttons-new.vue | BpmGridButtonsNew | BPM表格按钮组件 | 流程列表页操作按钮,提供新建、我的申请、我的审批等 |
|
|
3387
|
+
|
|
3388
|
+
#### 后端接口
|
|
3389
|
+
|
|
3390
|
+
| 来源类 | 方法名 | 作用场景 | 说明 |
|
|
3391
|
+
|------|--------|----------|------|
|
|
3392
|
+
| BpmEngine | startProcess | 启动流程 | 根据流程定义Key和businessId启动流程 |
|
|
3393
|
+
| BpmEngine | ruleEngineInit | 规则引擎初始化 | 查询流程按钮配置信息,初始化流程操作界面 |
|
|
3394
|
+
| BpmEngine | ruleEngineRun | 规则引擎执行 | 根据businessId查询待办任务 |
|
|
3395
|
+
| BpmEngine | complete | 完成任务 | 完成当前任务,推进流程到下一节点 |
|
|
3396
|
+
| BpmEngine | deleteProcInsts | 删除流程实例 | 根据businessIds删除流程实例 |
|
|
3397
|
+
| BpmEngine | queryMainForms | 流程实例查询 | 分页查询流程实例列表 |
|
|
3398
|
+
| BpmEngine | getPage | 文字追踪 | 获取流程流转路径文字信息 |
|
|
3399
|
+
| BpmEngine | getGraphTrack | 图表追踪 | 获取流程图形追踪信息 |
|
|
3400
|
+
| BpmEngine | getOpinions | 审批意见 | 获取流程审批意见列表 |
|
|
3401
|
+
| BpmEngine | addOrUpdate | 填写意见 | 在节点填写审批意见 |
|
|
3402
|
+
| BpmEngine | getUndoPage | 个人待办列表 | 获取当前用户的待办任务列表 |
|
|
3403
|
+
|
|
3404
|
+
#### MeritBPM方法与后端API对应关系
|
|
3405
|
+
|
|
3406
|
+
| MeritBPM方法 | 后端API | 说明 |
|
|
3407
|
+
|--------------|---------|------|
|
|
3408
|
+
| MeritBPM.create / initRuleEngine | POST /api/engine/bpm/ruleengine/init/{procDefKey} | 创建流程/初始化规则引擎 |
|
|
3409
|
+
| MeritBPM.open / runRuleEngine | POST /api/engine/bpm/ruleengine/run | 打开流程/运行规则引擎 |
|
|
3410
|
+
| MeritBPM.startProcess | POST /api/engine/bpm/{procDefKey}/startprocess | 发起流程 |
|
|
3411
|
+
| MeritBPM.validatePermit | POST /api/engine/bpm/{procDefKey}/validate/permit | 验证流程权限 |
|
|
3412
|
+
| MeritBPM.openProcTrackWindow | POST /api/engine/track/port | 打开流程跟踪窗口 |
|
|
3413
|
+
|
|
3414
|
+
---
|
|
3415
|
+
|
|
3416
|
+
## 组件及方法统计
|
|
3417
|
+
|
|
3418
|
+
本文档共涵盖 **9个后端工具类**、**7个后端组件**、**7组外部接口**、**14个前端组件**、**6个前端工具方法**,共计 **43个组件/工具类**,包含 **111+个方法**。
|
|
3419
|
+
|
|
3420
|
+
---
|
|
3421
|
+
|
|
3422
|
+
| 分类 | 序号 | 名称 | 方法数 | 作用说明 |
|
|
3423
|
+
|------|------|------|--------|----------|
|
|
3424
|
+
| **后端工具类** | 1 | SysCacheServiceFacade | 23 | Redis缓存操作工具类,提供put/get/hget/hset/queue等23种缓存操作方法 |
|
|
3425
|
+
| | 2 | StringCacheFacade | 3 | String类型缓存工具类,提供put/get/multiGet方法 |
|
|
3426
|
+
| | 3 | NacosUtils | 10 | Nacos配置中心工具类,提供获取/修改/新增配置等10种方法 |
|
|
3427
|
+
| | 4 | Sm2Utils | 3 | SM2非对称加密工具类,提供密钥生成/加密/解密3种方法 |
|
|
3428
|
+
| | 5 | SM3Encoder | 2 | SM3哈希加密工具类,提供encryptWithHMacMD5/encode方法 |
|
|
3429
|
+
| | 6 | Sm4Utils | 2 | SM4对称加密工具类,提供encrypt/decrypt方法 |
|
|
3430
|
+
| | 7 | SessionUtils | 21 | 会话信息工具类,提供获取当前用户ID/姓名/部门/角色等21种方法 |
|
|
3431
|
+
| | 8 | LogPattenUtils | 1 | 日志模板工具类,提供getProperty获取日志模板配置 |
|
|
3432
|
+
| | 9 | CompareUtils | 1 | 日志对比工具类,提供getCompareLog自动生成变更日志 |
|
|
3433
|
+
| **后端组件** | 1 | ILogPostService | 2 | 日志服务组件,提供postLog/POST /post(操作日志)、postDiyLog/POST /post-diy(自定义日志)2个接口 |
|
|
3434
|
+
| | 2 | BpmEngine | 13 | 工作流引擎组件,提供启动流程/完成任务/退回/删除/查询/追踪等13个接口 |
|
|
3435
|
+
| | 3 | IJobApi | 10 | 任务调度组件,提供getJob/pageList/triggerJob/startJob/stopJob/add/update/remove等10个接口 |
|
|
3436
|
+
| | 4 | CloudFeignMessageClient | 5 | 服务通知Feign客户端,提供sendRoleMessage/sendResourceMessage/sendUserRoleMessage/sendAssignMessage/sendUserAppMessage 5个消息发送方法 |
|
|
3437
|
+
| | 5 | @LogDesc/@AddDesc/@DelDesc | 3 | 日志注解组件,@LogDesc标注字段描述、@AddDesc新增记录、@DelDesc删除记录 |
|
|
3438
|
+
| | 6 | EnableDataSecretFilter | 1 | 数据脱敏注解组件,标注后自动启用Hibernate数据密级过滤 |
|
|
3439
|
+
| | 7 | DynamicCloudFeignClient | 1 | 动态FeignClient构建组件,提供getFeignClient动态构建Feign客户端 |
|
|
3440
|
+
| **外部接口** | 1 | ISecurityAuthService | 7 | 安全认证接口,提供用户认证、权限查询等7个方法 |
|
|
3441
|
+
| | 2 | ICloudClient | 4 | 云服务客户端接口,提供服务端注册/心跳等4个方法 |
|
|
3442
|
+
| | 3 | IJobApi | 10 | 任务调度API接口,提供任务CRUD/触发/启停等10个方法 |
|
|
3443
|
+
| | 4 | IMessageApi | 3 | 消息服务接口,提供消息发送等3个方法 |
|
|
3444
|
+
| | 5 | IResourceApi | 4 | 资源管理接口,提供资源查询/分配等4个方法 |
|
|
3445
|
+
| | 6 | IUserPortalApi | 3 | 用户门户接口,提供用户信息/Token等3个方法 |
|
|
3446
|
+
| | 7 | 其他Feign接口 | - | 包含ISysLogApi、IOrgApi、IEmpApi等若干Feign接口 |
|
|
3447
|
+
| **前端组件** | 1 | CloudDialog | - | 通用对话框组件,提供对话框显示/关闭等交互 |
|
|
3448
|
+
| | 2 | UserSelect | - | 用户选择组件,通过props控制选择模式,通过events交互 |
|
|
3449
|
+
| | 3 | UserSelectMulti | - | 多用户选择组件,通过props控制选择模式,通过events交互 |
|
|
3450
|
+
| | 4 | DeptSelect | - | 部门选择组件,通过props控制选择模式,通过events交互 |
|
|
3451
|
+
| | 5 | RoleSelect | - | 角色选择组件,通过props控制选择模式,通过events交互 |
|
|
3452
|
+
| | 6 | ImportButton | - | 导入按钮组件,支持导入模板下载/数据导入/错误文件下载,通过events交互 |
|
|
3453
|
+
| | 7 | MenuAuth | - | 菜单权限组件,通过props控制权限显示 |
|
|
3454
|
+
| | 8 | ResourceCodeAuth | - | 资源权限组件,通过props控制资源权限显示 |
|
|
3455
|
+
| | 9 | ThreeMemberAuth | - | 三员授权组件,通过props和events与外部交互 |
|
|
3456
|
+
| | 10 | TableHeadSearch | - | 表格头部搜索组件 |
|
|
3457
|
+
| | 11 | VerifiyPassword | - | 二级鉴别密码验证弹窗组件 |
|
|
3458
|
+
| | 12 | CommonHeader | - | 通用头部组件 |
|
|
3459
|
+
| | 13 | BpmGridButtonsNew | - | BPM表格按钮组件,提供新建/我的申请/我的审批/所有流程等操作按钮,通过props和events与外部交互 |
|
|
3460
|
+
| | 14 | BpmFormTools | - | BPM表单工具组件,集成发送/暂存等流程操作按钮 |
|
|
3461
|
+
| **前端工具方法** | 1 | sm4-utils.js | 2 | SM4加密解密工具,提供encrypt/decrypt方法 |
|
|
3462
|
+
| | 2 | sm2.js | - | SM2加密工具 |
|
|
3463
|
+
| | 3 | accessLogs.js | 1 | 访问日志工具,提供saveAcessLog方法 |
|
|
3464
|
+
| | 4 | dataFormat.js | 1 | 日期格式化工具,提供formatter方法 |
|
|
3465
|
+
| | 5 | form-rules.js | 12 | 表单校验规则,提供required/nospecial/noSpecialCode/name/cellphone/telephone/email/idcard/url/ip/mac等12种校验规则 |
|
|
3466
|
+
| | 6 | globalValitor.js | - | 全局校验器 |
|
|
3467
|
+
|
|
3468
|
+
---
|
|
3469
|
+
|
|
3470
|
+
### 统计汇总
|
|
3471
|
+
|
|
3472
|
+
| 分类 | 数量 | 方法/接口数 |
|
|
3473
|
+
|------|------|-------------|
|
|
3474
|
+
| 后端工具类 | 9个 | 66个方法 |
|
|
3475
|
+
| 后端组件 | 7个 | 25个接口 |
|
|
3476
|
+
| 外部接口 | 7组 | 20+个接口 |
|
|
3477
|
+
| 前端组件 | 14个 | - |
|
|
3478
|
+
| 前端工具方法 | 6个 | - |
|
|
3479
|
+
| **合计** | **43个** | **111+个** |
|
|
3480
|
+
|
|
3481
|
+
---
|
|
3482
|
+
|
|
3483
|
+
### A. Maven依赖坐标
|
|
3484
|
+
|
|
3485
|
+
```xml
|
|
3486
|
+
<!-- cloud-module-base -->
|
|
3487
|
+
<dependency>
|
|
3488
|
+
<groupId>com.meritdata.cloud</groupId>
|
|
3489
|
+
<artifactId>cloud-module-base</artifactId>
|
|
3490
|
+
<version>6.13.2</version>
|
|
3491
|
+
</dependency>
|
|
3492
|
+
|
|
3493
|
+
<!-- cloud-module-cache -->
|
|
3494
|
+
<dependency>
|
|
3495
|
+
<groupId>com.meritdata.cloud</groupId>
|
|
3496
|
+
<artifactId>cloud-module-cache</artifactId>
|
|
3497
|
+
<version>6.13.2</version>
|
|
3498
|
+
</dependency>
|
|
3499
|
+
|
|
3500
|
+
<!-- cloud-starter-core -->
|
|
3501
|
+
<dependency>
|
|
3502
|
+
<groupId>com.meritdata.cloud</groupId>
|
|
3503
|
+
<artifactId>cloud-starter-core</artifactId>
|
|
3504
|
+
<version>6.13.2</version>
|
|
3505
|
+
</dependency>
|
|
3506
|
+
```
|
|
3507
|
+
|
|
3508
|
+
---
|
|
3509
|
+
|
|
3510
|
+
### B. 组件开发注意事项
|
|
3511
|
+
|
|
3512
|
+
1. **EventBus**: 所有组件通过 `Vue.prototype.EventBus` 进行内部通信
|
|
3513
|
+
2. **国际化**: 组件使用 `$t()` 函数进行国际化处理,需要配置 i18n
|
|
3514
|
+
3. **依赖**: BPM 组件依赖 Element-UI 和 cloud-module-base
|
|
3515
|
+
4. **样式**: CloudDialog 组件需要引入样式文件: `import 'cloud-module-base/static/css/cloud-dialog.css';`
|
|
3516
|
+
|