<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RuoYiPlus</title><link>https://ruoyiplus.com/en/plus/</link><atom:link href="https://ruoyiplus.com/en/plus/index.xml" rel="self" type="application/rss+xml"/><description>RuoYiPlus</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><image><url>https://ruoyiplus.com/media/icon_hu_eee4a95885829ab2.png</url><title>RuoYiPlus</title><link>https://ruoyiplus.com/en/plus/</link></image><item><title>Business Vision</title><link>https://ruoyiplus.com/en/plus/business-vision/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/business-vision/</guid><description>&lt;h2 id="core-positioning"&gt;Core Positioning&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;In a nutshell&lt;/strong&gt;: RuoYiPlus aims to become the leader in &amp;ldquo;enterprise application infrastructure&amp;rdquo;, helping software vendors and enterprise IT teams obtain production-grade capabilities at the lowest cost.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="what-problems-it-solves"&gt;What Problems It Solves&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Customer Type&lt;/th&gt;
&lt;th&gt;Core Pain Point&lt;/th&gt;
&lt;th&gt;RuoYiPlus Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Software Vendors&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High cost and long cycle of self-built frameworks&lt;/td&gt;
&lt;td&gt;Rapid delivery based on mature framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enterprise IT Departments&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Purchased products hard to customize&lt;/td&gt;
&lt;td&gt;Open-source, controllable, deep customization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;System Integrators&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tight project delivery timelines&lt;/td&gt;
&lt;td&gt;Modular rapid assembly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SaaS Operators&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Complex multi-tenant architecture&lt;/td&gt;
&lt;td&gt;Out-of-the-box SaaS architecture&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="target-customer-profile"&gt;Target Customer Profile&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Target Customer Groups"
A["Software Vendors"]
B["Enterprise IT Departments"]
C["System Integrators"]
D["SaaS Operators"]
end
subgraph "Core Pain Points"
A1["High cost of self-built frameworks"]
B1["Purchased products hard to customize"]
C1["Tight project delivery timelines"]
D1["Complex multi-tenant architecture"]
end
subgraph "Our Value"
A2["Rapid delivery based on mature framework"]
B2["Open-source, controllable, deep customization"]
C2["Modular rapid assembly"]
D2["Out-of-the-box SaaS architecture"]
end
A --&gt; A1 --&gt; A2
B --&gt; B1 --&gt; B2
C --&gt; C1 --&gt; C2
D --&gt; D1 --&gt; D2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="1-product-matrix"&gt;1. Product Matrix&lt;/h2&gt;
&lt;h3 id="11-version-system"&gt;1.1 Version System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Product Version System"
A["Community Edition - Free"]
B["Professional Edition - ¥29,800/year"]
C["Enterprise Edition - ¥99,800/year"]
D["Flagship Edition - ¥199,800/year"]
end
subgraph "Target Customers"
A1["Individual Developers"]
B1["SMEs"]
C1["Large Enterprises"]
D1["Group Enterprises"]
end
A --&gt; A1
B --&gt; B1
C --&gt; C1
D --&gt; D1
&lt;/div&gt;
&lt;h3 id="12-feature-comparison"&gt;1.2 Feature Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature Module&lt;/th&gt;
&lt;th style="text-align: center"&gt;Community&lt;/th&gt;
&lt;th style="text-align: center"&gt;Professional&lt;/th&gt;
&lt;th style="text-align: center"&gt;Enterprise&lt;/th&gt;
&lt;th style="text-align: center"&gt;Flagship&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Framework&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enhanced RBAC&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SSO Single Sign-On&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MFA Multi-Factor Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unified Audit Center&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Blockchain Attestation&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Email Middleware&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Message Notification Center&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License Authorization&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-Tenant Management&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Permission Engine&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sensitive Data Masking&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Technical Support&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Community&lt;/td&gt;
&lt;td style="text-align: center"&gt;Email&lt;/td&gt;
&lt;td style="text-align: center"&gt;7x24&lt;/td&gt;
&lt;td style="text-align: center"&gt;Dedicated Support&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-business-model"&gt;2. Business Model&lt;/h2&gt;
&lt;h3 id="21-licensing-model"&gt;2.1 Licensing Model&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["User Count"] --&gt; B{"Choose Plan"}
B --&gt;|50 Users| C["Basic ¥9,800/year"]
B --&gt;|200 Users| D["Standard ¥29,800/year"]
B --&gt;|500 Users| E["Advanced ¥59,800/year"]
B --&gt;|Unlimited Users| F["Unlimited ¥99,800/year"]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;User Count&lt;/th&gt;
&lt;th&gt;Annual Fee&lt;/th&gt;
&lt;th&gt;Cost Per User&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;50 Users&lt;/td&gt;
&lt;td&gt;¥9,800/year&lt;/td&gt;
&lt;td&gt;¥196/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;200 Users&lt;/td&gt;
&lt;td&gt;¥29,800/year&lt;/td&gt;
&lt;td&gt;¥149/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Advanced&lt;/td&gt;
&lt;td&gt;500 Users&lt;/td&gt;
&lt;td&gt;¥59,800/year&lt;/td&gt;
&lt;td&gt;¥120/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;¥99,800/year&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="22-module-based-licensing"&gt;2.2 Module-Based Licensing&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Module&lt;/th&gt;
&lt;th&gt;Professional&lt;/th&gt;
&lt;th&gt;Enterprise&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IAM Unified Identity Center&lt;/td&gt;
&lt;td&gt;¥8,800/year&lt;/td&gt;
&lt;td&gt;¥15,800/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit Compliance Center&lt;/td&gt;
&lt;td&gt;¥8,800/year&lt;/td&gt;
&lt;td&gt;¥15,800/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mail Email Middleware&lt;/td&gt;
&lt;td&gt;¥3,800/year&lt;/td&gt;
&lt;td&gt;¥6,800/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notify Message Center&lt;/td&gt;
&lt;td&gt;¥3,800/year&lt;/td&gt;
&lt;td&gt;¥6,800/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License Authorization Management&lt;/td&gt;
&lt;td&gt;¥5,800/year&lt;/td&gt;
&lt;td&gt;¥9,800/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tenant Multi-Tenant Management&lt;/td&gt;
&lt;td&gt;¥5,800/year&lt;/td&gt;
&lt;td&gt;¥9,800/year&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="23-service-model"&gt;2.3 Service Model&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Pricing&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Technical Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Issue resolution, bug fixes&lt;/td&gt;
&lt;td&gt;¥8,000/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Custom Development&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;On-demand feature development&lt;/td&gt;
&lt;td&gt;¥1,500/person-day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Training Services&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Product training, ops training&lt;/td&gt;
&lt;td&gt;¥3,000/person-day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment &amp;amp; Implementation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Production environment deployment&lt;/td&gt;
&lt;td&gt;¥5,000/time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Migration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Historical data migration&lt;/td&gt;
&lt;td&gt;¥10,000/time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance Certification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Information security certification support&lt;/td&gt;
&lt;td&gt;¥50,000/time&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-ecosystem-partnerships"&gt;3. Ecosystem Partnerships&lt;/h2&gt;
&lt;h3 id="31-partner-ecosystem"&gt;3.1 Partner Ecosystem&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Partner Ecosystem"
A["ISV Partnership"]
B["Integrator Partnership"]
C["Cloud Vendor Partnership"]
D["Training Partnership"]
E["Implementation Partnership"]
end
subgraph "Partnership Value"
A1["Integrated sales commission"]
B1["Project collaboration"]
C1["Cloud marketplace listing"]
D1["Training commission"]
E1["Implementation project collaboration"]
end
A --&gt; A1
B --&gt; B1
C --&gt; C1
D --&gt; D1
E --&gt; E1
&lt;/div&gt;
&lt;h3 id="32-isv-partnership-model"&gt;3.2 ISV Partnership Model&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["Partner"] --&gt; B["Joint Solution"]
B --&gt; C["Industry Customer Delivery"]
C --&gt; D["Sales Commission Model"]
D --&gt; A
D --&gt; E["RuoYiPlus"]
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="4-development-roadmap"&gt;4. Development Roadmap&lt;/h2&gt;
&lt;h3 id="41-short-term-plan"&gt;4.1 Short-Term Plan&lt;/h3&gt;
&lt;div class="mermaid"&gt;gantt
title Development Roadmap
dateFormat YYYY-MM-DD
section MVP
IAM/Audit/Mail Core Features :2024-01-01, 90d
section Productization
License/Tenant Commercialization :2024-04-01, 90d
section Ecosystem Building
First Batch of Partners :2024-07-01, 90d
section Market Promotion
Industry Solutions :2024-10-01, 90d
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Timeline&lt;/th&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MVP&lt;/td&gt;
&lt;td&gt;Q1&lt;/td&gt;
&lt;td&gt;IAM/Audit/Mail core features&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Productization&lt;/td&gt;
&lt;td&gt;Q2&lt;/td&gt;
&lt;td&gt;License/Tenant commercialization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ecosystem Building&lt;/td&gt;
&lt;td&gt;Q3&lt;/td&gt;
&lt;td&gt;First batch of partners&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Market Promotion&lt;/td&gt;
&lt;td&gt;Q4&lt;/td&gt;
&lt;td&gt;Industry solutions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="42-medium-to-long-term-vision"&gt;4.2 Medium-to-Long-Term Vision&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Medium-to-Long-Term Goals"
A["AI Enhancement&lt;br/&gt;Intelligent Q&amp;A, Smart Reports"]
B["Microservices&lt;br/&gt;Full microservices architecture"]
C["Multi-Cloud Deployment&lt;br/&gt;Cloud-native K8s support"]
D["Internationalization&lt;br/&gt;Multi-language, multi-timezone"]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AI Enhancement&lt;/td&gt;
&lt;td&gt;Intelligent Q&amp;amp;A, smart reports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microservices&lt;/td&gt;
&lt;td&gt;Full microservices architecture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-Cloud Deployment&lt;/td&gt;
&lt;td&gt;Cloud-native K8s support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Internationalization&lt;/td&gt;
&lt;td&gt;Multi-language, multi-timezone&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-success-stories"&gt;5. Success Stories&lt;/h2&gt;
&lt;h3 id="case-1-provincial-government-cloud-platform"&gt;Case 1: Provincial Government Cloud Platform&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["A Provincial Government Cloud Operator"] --&gt; B["Needed unified office platform for 200+ bureaus"]
B --&gt; C["RuoYiPlus Enterprise + OA Enhancement"]
C --&gt; D["100K+ Users"]
D --&gt; E["Delivered in 3 months&lt;br/&gt;Saved 5M+ in development costs"]
&lt;/div&gt;
&lt;h3 id="case-2-financial-institution-crm"&gt;Case 2: Financial Institution CRM&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["A City Commercial Bank"] --&gt; B["High compliance requirements&lt;br/&gt;Needed Level 3 Protection certification"]
B --&gt; C["RuoYiPlus Flagship&lt;br/&gt;+ CRM Enhancement + Audit"]
C --&gt; D["2000+ Users"]
D --&gt; E["Passed Level 3 Protection certification&lt;br/&gt;Zero-risk audit compliance"]
&lt;/div&gt;
&lt;h3 id="case-3-manufacturing-group-erp"&gt;Case 3: Manufacturing Group ERP&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["A Listed Manufacturing Group"] --&gt; B["30+ subsidiaries&lt;br/&gt;Needed data isolation"]
B --&gt; C["RuoYiPlus Enterprise&lt;br/&gt;+ Tenant Multi-Tenant"]
C --&gt; D["5000+ Users&lt;br/&gt;30+ Tenants"]
D --&gt; E["Unified platform + data isolation&lt;br/&gt;60% reduction in ops costs"]
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="contact-us"&gt;Contact Us&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Contact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pre-Sales Inquiry&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Business Cooperation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Channel Partnership&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Technical Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;: RuoYiPlus is developed based on the RuoYi-Vue-Pro / Yudao open-source framework, following the original framework&amp;rsquo;s open-source license. We do not claim ownership of the framework itself, and only provide enterprise-level enhancements and commercial packaging on top of the open-source framework.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Yudao Framework Enhancement Capabilities</title><link>https://ruoyiplus.com/en/plus/framework-enhancement/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/framework-enhancement/</guid><description>&lt;h2 id="core-positioning"&gt;Core Positioning&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;In a nutshell&lt;/strong&gt;: On top of Yudao&amp;rsquo;s native capabilities, RuoYiPlus has made enterprise-level enhancements across 8 major dimensions to the framework infrastructure, giving the framework &amp;ldquo;out-of-the-box&amp;rdquo; production-grade capabilities.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="what-problems-it-solves"&gt;What Problems It Solves&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pain Point&lt;/th&gt;
&lt;th&gt;Yudao Native&lt;/th&gt;
&lt;th&gt;After RuoYiPlus Enhancement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Insufficient data permissions&lt;/td&gt;
&lt;td&gt;Dept-level filtering only&lt;/td&gt;
&lt;td&gt;User/Role/Post/Dept four layers + field-level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensitive information leak risk&lt;/td&gt;
&lt;td&gt;No masking mechanism&lt;/td&gt;
&lt;td&gt;Annotation-based auto masking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Incomplete operation logs&lt;/td&gt;
&lt;td&gt;Basic logging&lt;/td&gt;
&lt;td&gt;Intelligent change tracking + risk scoring + blockchain attestation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lack of API protection&lt;/td&gt;
&lt;td&gt;Basic routing&lt;/td&gt;
&lt;td&gt;Request signing + rate limiting + circuit breaking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weak distributed capabilities&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Distributed transactions + locks + idempotency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single caching strategy&lt;/td&gt;
&lt;td&gt;Redis single layer&lt;/td&gt;
&lt;td&gt;Caffeine + Redis multi-level cache&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Difficult database scaling&lt;/td&gt;
&lt;td&gt;Single database&lt;/td&gt;
&lt;td&gt;Read/write separation + sharding + data archiving&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weak monitoring capabilities&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;SkyWalking full-chain tracing + custom metrics&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="suitable-users"&gt;Suitable Users&lt;/h2&gt;
&lt;div class="mermaid"&gt;mindmap
root((Suitable Users))
Software Vendors
Need authorization management
Need commercial infrastructure
Enterprise IT Teams
Need security compliance
Need multi-tenant isolation
System Integrators
Need rapid delivery
Need modular assembly
SaaS Operators
Need multi-tenant architecture
Need billing system
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="1-data-permission-engine"&gt;1. Data Permission Engine&lt;/h2&gt;
&lt;h3 id="11-four-layer-permission-model"&gt;1.1 Four-Layer Permission Model&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph "Permission Sources"
F["User Permissions&lt;br/&gt;Highest Priority"]
G["Role Permissions"]
H["Post Permissions"]
I["Dept Permissions&lt;br/&gt;Lowest Priority"]
F ~~~ G ~~~ H ~~~ I
end
subgraph "Permission Decision Engine"
A["User Request"] --&gt; B["Permission Resolution"]
B --&gt; C["Permission Merge"]
C --&gt; D["Data Filtering"]
D --&gt; E["Level Filtering"]
end
subgraph "Permission Filtering"
J["SQL Filtering"] --&gt; K["Return Results"]
end
PS["Permission Sources"] --&gt; PDE["Permission Decision Engine"]
PDE["Permission Decision Engine"] --&gt; PF["Permission Filtering"]
style B fill:#FFA500,color:#fff,font-weight:bold
&lt;/div&gt;
&lt;h3 id="12-capability-comparison"&gt;1.2 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Native Support&lt;/th&gt;
&lt;th&gt;After Enhancement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dept-level data filtering&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Role-level data filtering&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom SQL filtering&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Field-level permission control&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic data permission rules&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer level filtering&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-usage"&gt;1.3 Usage&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Role-based data permission: Sales manager sees team data, regional director sees region data&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;roles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;sales_manager&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;region_director&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CustomerServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Dept-based hierarchical permission&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;deptIds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#{currentUser.deptId}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ReportService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Custom data scope&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;custom&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlFilter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;region_id = #{currentUser.regionId}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RegionService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Field hiding&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;salary&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;bankCard&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DataPermission&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Operation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;HIDE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;EmployeeService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Field read-only&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;createTime&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;creator&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DataPermission&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Operation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;READONLY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrderService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="2-sensitive-field-masking"&gt;2. Sensitive Field Masking&lt;/h2&gt;
&lt;h3 id="21-masking-architecture"&gt;2.1 Masking Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["Data Query"] --&gt; B["Masking Rule Match"]
B --&gt; C["Field Type Identification"]
C --&gt; D["Masking Algorithm Application"]
D --&gt; E["Return Masked Result"]
&lt;/div&gt;
&lt;h3 id="22-supported-masking-types"&gt;2.2 Supported Masking Types&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Masking Type&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Phone Number&lt;/td&gt;
&lt;td&gt;&lt;code&gt;138****1234&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Middle 4 digits masked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;&lt;code&gt;a***@163.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Username masked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ID Card&lt;/td&gt;
&lt;td&gt;&lt;code&gt;310***********1234&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Birth date + last 4 digits masked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bank Card&lt;/td&gt;
&lt;td&gt;&lt;code&gt;**** **** **** 1234&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Only last 4 digits retained&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Zhang*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All but surname masked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Address&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Shanghai Xuhui District****&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Detailed address masked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Password&lt;/td&gt;
&lt;td&gt;&lt;code&gt;******&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fully masked&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="23-usage"&gt;2.3 Usage&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Annotation-based masking&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Customer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@SensitiveField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SensitiveType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;PHONE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@SensitiveField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SensitiveType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EMAIL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@SensitiveField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SensitiveType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ID_CARD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idCard&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Auto-masking on query&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@SensitiveQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;phone&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Customer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getCustomerList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CustomerQuery&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="3-operation-log-center"&gt;3. Operation Log Center&lt;/h2&gt;
&lt;h3 id="31-log-system"&gt;3.1 Log System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Log Collection"
A["Operation Behavior"]
B["Login Events"]
C["API Calls"]
end
subgraph "Log Processing"
D["Log Parsing"]
E["Change Comparison"]
F["Risk Scoring"]
end
subgraph "Log Storage"
G["Hot Data Storage"]
H["Cold Data Archiving"]
I["Blockchain Attestation"]
end
A --&gt; D
B --&gt; D
C --&gt; D
D --&gt; E
E --&gt; F
F --&gt; G
F --&gt; H
F --&gt; I
&lt;/div&gt;
&lt;h3 id="32-intelligent-change-tracking"&gt;3.2 Intelligent Change Tracking&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Auto-compare before/after changes, only record changed fields&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@OperateLog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Customer Management&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;businessType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BusinessType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;UPDATE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;updateCustomer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Customer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="33-sensitive-operation-alerts"&gt;3.3 Sensitive Operation Alerts&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;aegis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;audit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;alert-rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Data Export&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# More than 10 times in 10 minutes&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;notify_admin&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Batch Delete&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;require_approval&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-api-gateway-enhancement"&gt;4. API Gateway Enhancement&lt;/h2&gt;
&lt;h3 id="41-gateway-architecture"&gt;4.1 Gateway Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["Client Request"] --&gt; B["API Gateway"]
B --&gt; C["Request Signature Verification"]
C --&gt; D["Traffic Control"]
D --&gt; E["Circuit Breaking"]
E --&gt; F["Request Caching"]
F --&gt; G["Protocol Conversion"]
G --&gt; H["Backend Service"]
&lt;/div&gt;
&lt;h3 id="42-enhancement-features"&gt;4.2 Enhancement Features&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Request Signing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;API request signature verification, anti-tampering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Traffic Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-dimensional rate limiting strategies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Circuit Breaking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Service circuit breaker protection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Request Caching&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;API response caching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Protocol Conversion&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SOAP → REST conversion&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-service-governance"&gt;5. Service Governance&lt;/h2&gt;
&lt;h3 id="51-distributed-transactions"&gt;5.1 Distributed Transactions&lt;/h3&gt;
&lt;p&gt;Seata-based distributed transaction solution:&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
A["Business Request"] --&gt; B["Transaction Initiator"]
B --&gt; C["Seata TC"]
C --&gt; D["Branch Transaction 1"]
C --&gt; E["Branch Transaction 2"]
C --&gt; F["Branch Transaction 3"]
D --&gt; G["Global Commit/Rollback"]
E --&gt; G
F --&gt; G
&lt;/div&gt;
&lt;h3 id="52-distributed-lock-and-idempotency"&gt;5.2 Distributed Lock and Idempotency&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Redis + Redisson distributed lock&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DistributedLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;order:lock:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;waitTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;leaseTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;processOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Idempotency control&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Idempotent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;order:create:{userId}:{productId}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expireTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;createOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CreateOrderRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="6-cache-enhancement"&gt;6. Cache Enhancement&lt;/h2&gt;
&lt;h3 id="61-multi-level-cache-architecture"&gt;6.1 Multi-Level Cache Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["Application Request"] --&gt; B["L1 Caffeine"]
B --&gt; C["L2 Redis"]
C --&gt; D["Database"]
D --&gt; C
C --&gt; B
B --&gt; A
&lt;/div&gt;
&lt;h3 id="62-annotation-based-caching"&gt;6.2 Annotation-Based Caching&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Cacheable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;user:list:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expire&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;300&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getUserList&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@CacheEvict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;user:list:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;updateUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@CachePut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;user:{id}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="7-database-enhancement"&gt;7. Database Enhancement&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
A["Write Request"] --&gt; B["Primary DB"]
C["Read Request"] --&gt; D["Replica DB"]
B --&gt; E["Data Sync"]
E --&gt; D
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Read/Write Separation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Auto-route read/write requests, dynamic-datasource&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sharding&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ShardingSphere sharding strategies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Archiving&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Auto hot/cold data separation, scheduled archiving&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="8-monitoring-enhancement"&gt;8. Monitoring Enhancement&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
A["Client"] --&gt; B["Gateway"]
B --&gt; C["Service 1"]
C --&gt; D["Service 2"]
D --&gt; E["Service 3"]
E --&gt; F["Database"]
G["SkyWalking"] -.-&gt; B
G -.-&gt; C
G -.-&gt; D
G -.-&gt; E
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Full-Chain Tracing&lt;/strong&gt;: Integrated SkyWalking distributed tracing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom Metrics&lt;/strong&gt;: &lt;code&gt;@CustomMonitor&lt;/code&gt; annotation auto-records&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alert Rules&lt;/strong&gt;: Supports multi-level threshold alerts&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="technical-architecture-overview"&gt;Technical Architecture Overview&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus Framework Enhancement Layer"
P1["Data Permission Engine&lt;br/&gt;Four-Layer Permissions + Field-Level"]
P2["Sensitive Field Masking&lt;br/&gt;Annotation-Based Auto Masking"]
P3["Operation Log Center&lt;br/&gt;Change Tracking + Blockchain Attestation"]
P4["API Gateway&lt;br/&gt;Signing + Rate Limiting + Circuit Breaking"]
P5["Service Governance&lt;br/&gt;Distributed Transactions + Locks + Idempotency"]
P6["Multi-Level Cache&lt;br/&gt;Caffeine + Redis"]
P7["Database Enhancement&lt;br/&gt;Read/Write Separation + Sharding"]
P8["Full-Chain Monitoring&lt;br/&gt;SkyWalking + Custom Metrics"]
end
subgraph "Yudao Framework Core"
CORE["Spring Boot 3 + MyBatis-Plus + Redis"]
end
P1 --&gt; CORE
P2 --&gt; CORE
P3 --&gt; CORE
P4 --&gt; CORE
P5 --&gt; CORE
P6 --&gt; CORE
P7 --&gt; CORE
P8 --&gt; CORE
&lt;/div&gt;</description></item><item><title>Security Compliance Capabilities</title><link>https://ruoyiplus.com/en/plus/security-compliance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/security-compliance/</guid><description>&lt;h2 id="core-positioning"&gt;Core Positioning&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;In a nutshell&lt;/strong&gt;: Build a defense-in-depth security system for enterprises, meeting Level 3 Information Security Protection and financial-grade security audit requirements, making business systems &amp;ldquo;natively compliant&amp;rdquo;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="what-problems-it-solves"&gt;What Problems It Solves&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Compliance Requirement&lt;/th&gt;
&lt;th&gt;RuoYiPlus Security Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Level 3 Information Security Protection certification&lt;/td&gt;
&lt;td&gt;Identity verification + access control + security audit + data integrity + data confidentiality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Financial-grade audit&lt;/td&gt;
&lt;td&gt;Blockchain hash chain attestation + tamper-proof operation logs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data privacy protection&lt;/td&gt;
&lt;td&gt;Auto masking of sensitive fields + transport encryption + storage encryption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Risk prevention&lt;/td&gt;
&lt;td&gt;Real-time risk monitoring + abnormal behavior alerts + account freezing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="suitable-users"&gt;Suitable Users&lt;/h2&gt;
&lt;div class="mermaid"&gt;mindmap
root((Security Compliance Users))
Financial Institutions
Level 3 Protection certification
Financial audit compliance
Healthcare Industry
HIPAA compliance
Patient data protection
Government Platforms
Leveled protection
Data security
SaaS Enterprises
Multi-tenant security isolation
Data privacy compliance
&lt;/div&gt;
&lt;h2 id="user-roles"&gt;User Roles&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Security Roles"
SA["Security Administrator&lt;br/&gt;Configure security policies"]
AUDITOR["Auditor&lt;br/&gt;Review operation logs"]
ADMIN["System Administrator&lt;br/&gt;Security operations"]
DEV["Developer&lt;br/&gt;Secure coding"]
end
SA --&gt;|Configure| MFA["Multi-Factor Authentication"]
SA --&gt;|Configure| PWD["Password Policy"]
AUDITOR --&gt;|Review| LOG["Operation Logs"]
AUDITOR --&gt;|Generate| REPORT["Compliance Reports"]
ADMIN --&gt;|Manage| KEY["Key Management"]
ADMIN --&gt;|Monitor| ALERT["Security Alerts"]
DEV --&gt;|Follow| SECURE["Secure Coding Standards"]
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="1-security-system-architecture"&gt;1. Security System Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus Security Compliance System"
subgraph "Identity Authentication Layer"
A1["IAM Center"]
A2["Multi-Factor Authentication"]
A3["SSO Single Sign-On"]
end
subgraph "Access Control Layer"
B1["RBAC Permissions"]
B2["Data Permissions"]
B3["API Permissions"]
end
subgraph "Data Security Layer"
C1["Encryption &amp; Masking"]
C2["Tamper Prevention"]
C3["Data Classification"]
end
subgraph "Security Audit Layer"
D1["Audit Center"]
D2["Risk Alerts"]
D3["Compliance Reports"]
end
subgraph "Security Protection Layer"
E1["WAF"]
E2["Injection Prevention"]
E3["XSS Prevention"]
E4["CSRF Prevention"]
E5["DDoS Prevention"]
E6["Key Management"]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
B1 --&gt; C1
B2 --&gt; C1
B3 --&gt; C1
C1 --&gt; D1
C2 --&gt; D1
C3 --&gt; D1
D1 --&gt; E1
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="2-identity-authentication-security"&gt;2. Identity Authentication Security&lt;/h2&gt;
&lt;h3 id="21-multi-factor-authentication-mfa"&gt;2.1 Multi-Factor Authentication (MFA)&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["User Login"] --&gt; B{"MFA Required?"}
B --&gt;|Yes| C["Enter Password"]
C --&gt; D{"Select Verification Method"}
D --&gt; E["SMS OTP"]
D --&gt; F["Email OTP"]
D --&gt; G["TOTP"]
D --&gt; H["Hardware Key"]
E --&gt; I["Authentication Successful"]
F --&gt; I
G --&gt; I
H --&gt; I
B --&gt;|No| I
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Authentication Method&lt;/th&gt;
&lt;th&gt;Security Level&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Password + CAPTCHA&lt;/td&gt;
&lt;td&gt;⭐⭐&lt;/td&gt;
&lt;td&gt;Basic two-factor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Password + SMS OTP&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;Dynamic SMS verification code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Password + Email OTP&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;Email verification code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Password + TOTP&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;Time-based one-time password&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Password + Hardware Key&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;FIDO2/U2F highest security&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="22-sso-single-sign-on"&gt;2.2 SSO Single Sign-On&lt;/h3&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant User as User
participant App1 as App 1
participant IAM as IAM Auth Center
participant App2 as App 2
User-&gt;&gt;App1: Access App 1
App1-&gt;&gt;IAM: Not authenticated, redirect to auth
User-&gt;&gt;IAM: Enter credentials
IAM-&gt;&gt;IAM: Authentication success, issue Token
IAM-&gt;&gt;App1: Return Token
User-&gt;&gt;App2: Access App 2
App2-&gt;&gt;IAM: Verify Token
IAM-&gt;&gt;App2: Token valid
App2-&gt;&gt;User: Direct access
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protocol&lt;/th&gt;
&lt;th&gt;Supported&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OAuth 2.0&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Third-party app authorization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OIDC&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Modern app SSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SAML 2.0&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Enterprise SSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LDAP&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Enterprise directory integration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="23-login-security-policy"&gt;2.3 Login Security Policy&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;security&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;login&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min-length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;require-uppercase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;require-lowercase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;require-digit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;require-special&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;expiry-days&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;90&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;history-count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lockout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;max-failed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lockout-duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;30m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;abnormal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;notify-on-new-device&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;block-high-risk&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="3-access-control"&gt;3. Access Control&lt;/h2&gt;
&lt;h3 id="31-rbac-permission-model"&gt;3.1 RBAC Permission Model&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A["User"] --&gt; B["Role"]
B --&gt; C["Menu Permission"]
B --&gt; D["Operation Permission"]
B --&gt; E["Data Permission"]
A --&gt; F["Post"]
F --&gt; G["Role Inheritance"]
F --&gt; H["Data Scope"]
&lt;/div&gt;
&lt;h3 id="32-data-permission-control"&gt;3.2 Data Permission Control&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["Data Request"] --&gt; B{"Permission Type"}
B --&gt;|All Data| C["*"]
B --&gt;|Dept Data| D["dept_id = current.dept_id"]
B --&gt;|Own Data| E["creator_id = current.user_id"]
B --&gt;|Custom Data| F["region_id IN current.regions"]
C --&gt; G["Return Data"]
D --&gt; G
E --&gt; G
F --&gt; G
&lt;/div&gt;
&lt;h3 id="33-api-permission-control"&gt;3.3 API Permission Control&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Method-level permission control&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@RequiresPermissions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;system:user:add&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;system:user:edit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;logical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Logical&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;OR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;saveUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Role permission control&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@RequiresRoles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;admin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;manager&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;exportReport&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Custom permission check&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@RequiresCustomPermissions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data:export:financial&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;exportFinancial&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-data-security"&gt;4. Data Security&lt;/h2&gt;
&lt;h3 id="41-sensitive-field-masking-flow"&gt;4.1 Sensitive Field Masking Flow&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A["Data Query"] --&gt; B["Masking Rule Match"]
B --&gt; C{"Field Type"}
C --&gt;|Phone| D["Middle 4 digits masked"]
C --&gt;|Email| E["Username masked"]
C --&gt;|ID Card| F["Birth date + last 4 digits"]
C --&gt;|Bank Card| G["Only last 4 digits"]
C --&gt;|Name| H["All but surname masked"]
C --&gt;|Password| I["Fully hidden"]
D --&gt; J["Return Masked Result"]
E --&gt; J
F --&gt; J
G --&gt; J
H --&gt; J
I --&gt; J
&lt;/div&gt;
&lt;h3 id="42-transport-and-storage-security"&gt;4.2 Transport and Storage Security&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HTTPS Enforced&lt;/td&gt;
&lt;td&gt;Site-wide HTTPS, HTTP auto-redirect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TLS Version&lt;/td&gt;
&lt;td&gt;TLS 1.3 (compatible with TLS 1.2)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HSTS&lt;/td&gt;
&lt;td&gt;Enforce HTTPS usage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database Encryption&lt;/td&gt;
&lt;td&gt;AES encryption for sensitive fields&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-audit-trail"&gt;5. Audit Trail&lt;/h2&gt;
&lt;h3 id="51-audit-event-collection"&gt;5.1 Audit Event Collection&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Audit Event Collection"
A1["Login Audit"]
A2["Operation Audit"]
A3["Permission Audit"]
A4["Export Audit"]
A5["Sensitive Audit"]
A6["API Audit"]
end
subgraph "Audit Processing"
B1["Event Parsing"]
B2["Risk Scoring"]
B3["Rule Matching"]
end
subgraph "Audit Storage"
C1["Hot Data"]
C2["Cold Data"]
C3["Blockchain"]
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
A5 --&gt; B1
A6 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
B3 --&gt; C2
B3 --&gt; C3
&lt;/div&gt;
&lt;h3 id="52-blockchain-hash-chain"&gt;5.2 Blockchain Hash Chain&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Genesis Block"
A1["blockHash = SHA256"]
A2["genesisData"]
end
subgraph "Block N"
B1["blockHash = SHA256"]
B2["previousHash"]
B3["merkleRoot"]
B4["signature"]
end
subgraph "Block N+1"
C1["blockHash = SHA256"]
C2["previousHash = Block N hash"]
C3["merkleRoot"]
C4["signature"]
end
A1 --&gt; B2
B1 --&gt; C2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="6-compliance-support"&gt;6. Compliance Support&lt;/h2&gt;
&lt;h3 id="61-level-3-information-security-protection-coverage"&gt;6.1 Level 3 Information Security Protection Coverage&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["Level 3 Protection Requirements"] --&gt; B["Identity Verification"]
A --&gt; C["Access Control"]
A --&gt; D["Security Audit"]
A --&gt; E["Data Integrity"]
A --&gt; F["Data Confidentiality"]
A --&gt; G["Backup &amp; Recovery"]
B --&gt; H["MFA/SSO"]
C --&gt; I["RBAC/Data Permissions"]
D --&gt; J["Audit Center"]
E --&gt; K["Blockchain Hash Chain"]
F --&gt; L["Encryption &amp; Masking"]
G --&gt; M["Data Backup Solution"]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protection Requirement&lt;/th&gt;
&lt;th&gt;Implementation&lt;/th&gt;
&lt;th&gt;Coverage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Identity Verification&lt;/td&gt;
&lt;td&gt;MFA/SSO&lt;/td&gt;
&lt;td&gt;✅ Complete&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access Control&lt;/td&gt;
&lt;td&gt;RBAC/Data Permissions&lt;/td&gt;
&lt;td&gt;✅ Complete&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security Audit&lt;/td&gt;
&lt;td&gt;Audit Center&lt;/td&gt;
&lt;td&gt;✅ Complete&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data Integrity&lt;/td&gt;
&lt;td&gt;Blockchain Hash Chain&lt;/td&gt;
&lt;td&gt;✅ Complete&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data Confidentiality&lt;/td&gt;
&lt;td&gt;Encryption &amp;amp; Masking&lt;/td&gt;
&lt;td&gt;✅ Complete&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backup &amp;amp; Recovery&lt;/td&gt;
&lt;td&gt;Data Backup Solution&lt;/td&gt;
&lt;td&gt;✅ Complete&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="7-security-monitoring"&gt;7. Security Monitoring&lt;/h2&gt;
&lt;h3 id="71-real-time-risk-monitoring"&gt;7.1 Real-Time Risk Monitoring&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Risk Monitoring"
A1["Remote Login"]
A2["Brute Force"]
A3["Abnormal Query"]
A4["Batch Export"]
A5["Permission Abuse"]
end
subgraph "Risk Assessment"
B["Risk Engine"]
end
subgraph "Response Actions"
C1["SMS Alert"]
C2["Account Freeze"]
C3["Log Marking"]
C4["Require Approval"]
C5["Real-Time Alert"]
end
A1 --&gt; B
A2 --&gt; B
A3 --&gt; B
A4 --&gt; B
A5 --&gt; B
B --&gt; C1
B --&gt; C2
B --&gt; C3
B --&gt; C4
B --&gt; C5
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Monitoring Item&lt;/th&gt;
&lt;th&gt;Risk Threshold&lt;/th&gt;
&lt;th&gt;Response Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Remote Login&lt;/td&gt;
&lt;td&gt;Login from new city&lt;/td&gt;
&lt;td&gt;SMS alert&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brute Force&lt;/td&gt;
&lt;td&gt;&amp;gt;10 failures in 5 min&lt;/td&gt;
&lt;td&gt;Account freeze&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Abnormal Query&lt;/td&gt;
&lt;td&gt;&amp;gt;100 queries/min per user&lt;/td&gt;
&lt;td&gt;Log marking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch Export&lt;/td&gt;
&lt;td&gt;&amp;gt;50 records/min&lt;/td&gt;
&lt;td&gt;Require approval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permission Abuse&lt;/td&gt;
&lt;td&gt;Core data access during off-hours&lt;/td&gt;
&lt;td&gt;Real-time alert&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="8-security-configuration-checklist"&gt;8. Security Configuration Checklist&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;th&gt;Recommended Value&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Min Password Length&lt;/td&gt;
&lt;td&gt;12 characters&lt;/td&gt;
&lt;td&gt;Strong password policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Password Expiry&lt;/td&gt;
&lt;td&gt;90 days&lt;/td&gt;
&lt;td&gt;Enforce periodic changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Login Failure Lockout&lt;/td&gt;
&lt;td&gt;5 attempts&lt;/td&gt;
&lt;td&gt;Brute force prevention&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MFA&lt;/td&gt;
&lt;td&gt;Enforced&lt;/td&gt;
&lt;td&gt;Must be enabled for admins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTPS&lt;/td&gt;
&lt;td&gt;Enforced&lt;/td&gt;
&lt;td&gt;Site-wide encryption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Log Retention&lt;/td&gt;
&lt;td&gt;1 year&lt;/td&gt;
&lt;td&gt;Compliance requirement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Session Timeout&lt;/td&gt;
&lt;td&gt;30 minutes&lt;/td&gt;
&lt;td&gt;Auto logout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API Rate Limit&lt;/td&gt;
&lt;td&gt;100 QPS&lt;/td&gt;
&lt;td&gt;DDoS prevention&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="security-capability-overview"&gt;Security Capability Overview&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Defense-in-Depth Security"
L1["🔐 Identity Authentication Layer&lt;br/&gt;MFA + SSO + Password Policy"]
L2["🛡️ Access Control Layer&lt;br/&gt;RBAC + Data Permissions + API Permissions"]
L3["🔒 Data Security Layer&lt;br/&gt;Masking + Encryption + Tamper Prevention"]
L4["📋 Audit Trail Layer&lt;br/&gt;Full-Chain Audit + Blockchain Attestation"]
L5["🚨 Security Monitoring Layer&lt;br/&gt;Real-Time Risk Monitoring + Auto Response"]
end
L1 --&gt; L2
L2 --&gt; L3
L3 --&gt; L4
L4 --&gt; L5
&lt;/div&gt;</description></item><item><title>IAM Identity &amp; Access Center</title><link>https://ruoyiplus.com/en/plus/iam-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/iam-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Build an enterprise unified identity authentication and fine-grained permission governance system, achieving &amp;ldquo;One Account, One Authentication, Access Anywhere&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="core-positioning"&gt;Core Positioning&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;In a nutshell&lt;/strong&gt;: IAM is the &amp;ldquo;Identity and Access Hub&amp;rdquo; for all business systems, centrally managing user authentication, authorization, and data permissions so that each subsystem no longer operates in isolation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="what-problems-it-solves"&gt;What Problems It Solves&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pain Point&lt;/th&gt;
&lt;th&gt;Traditional Approach&lt;/th&gt;
&lt;th&gt;RuoYiPlus IAM Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Repeated logins across systems&lt;/td&gt;
&lt;td&gt;Each system has independent login&lt;/td&gt;
&lt;td&gt;SSO single sign-on, one authentication for all systems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scattered permission management&lt;/td&gt;
&lt;td&gt;Each system builds its own permissions&lt;/td&gt;
&lt;td&gt;Unified RBAC + data permission engine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uncontrollable security risks&lt;/td&gt;
&lt;td&gt;Inconsistent password policies&lt;/td&gt;
&lt;td&gt;MFA multi-factor + password policy + remote login detection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Incomplete compliance auditing&lt;/td&gt;
&lt;td&gt;Scattered logs&lt;/td&gt;
&lt;td&gt;Unified audit event collection, connected to Audit Center&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="suitable-users"&gt;Suitable Users&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Medium-to-large enterprises with multiple business systems requiring unified identity management&lt;/li&gt;
&lt;li&gt;Organizations needing Level 3 Information Security Protection certification&lt;/li&gt;
&lt;li&gt;Platforms needing to integrate with third-party systems (OAuth/OIDC/SAML)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="user-roles"&gt;User Roles&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "IAM User Roles"
ADMIN["System Administrator&lt;br/&gt;Configure authentication policies, manage users"]
SECURITY["Security Administrator&lt;br/&gt;Configure MFA, password policies"]
DEV["Application Developer&lt;br/&gt;Integrate SSO, connect OAuth"]
USER["Regular User&lt;br/&gt;Login authentication, access applications"]
end
ADMIN --&gt;|Manage| USER_POOL["User Pool"]
SECURITY --&gt;|Configure| AUTH_POLICY["Authentication Policies"]
DEV --&gt;|Integrate| SSO_PROTOCOL["SSO Protocols"]
USER --&gt;|Use| LOGIN["Unified Login"]
&lt;/div&gt;
&lt;h2 id="core-capabilities"&gt;Core Capabilities&lt;/h2&gt;
&lt;h3 id="sso-single-sign-on-flow"&gt;SSO Single Sign-On Flow&lt;/h3&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant User as User
participant App1 as App A
participant IAM as IAM Auth Center
participant App2 as App B
User-&gt;&gt;App1: Access App A
App1-&gt;&gt;IAM: Not authenticated, 302 redirect
User-&gt;&gt;IAM: Enter username/password
IAM-&gt;&gt;IAM: Verify + MFA
IAM-&gt;&gt;App1: Issue JWT Token
User-&gt;&gt;App2: Access App B
App2-&gt;&gt;IAM: Verify Token
IAM-&gt;&gt;App2: Token valid
App2-&gt;&gt;User: Direct access, no re-login required
&lt;/div&gt;
&lt;h3 id="supported-protocols"&gt;Supported Protocols&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protocol&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OAuth 2.0&lt;/td&gt;
&lt;td&gt;Authorization framework&lt;/td&gt;
&lt;td&gt;Third-party app authorization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OIDC&lt;/td&gt;
&lt;td&gt;Identity layer based on OAuth 2.0&lt;/td&gt;
&lt;td&gt;Modern app SSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SAML 2.0&lt;/td&gt;
&lt;td&gt;Enterprise federated identity&lt;/td&gt;
&lt;td&gt;Traditional enterprise apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LDAP&lt;/td&gt;
&lt;td&gt;Lightweight directory access&lt;/td&gt;
&lt;td&gt;Enterprise directory integration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="multi-factor-authentication-mfa"&gt;Multi-Factor Authentication (MFA)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Authentication Method&lt;/th&gt;
&lt;th&gt;Security Level&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Password + SMS OTP&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;Dynamic SMS verification code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Password + Email OTP&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;Email verification code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Password + TOTP&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;Time-based one-time password&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Password + Hardware Key&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;FIDO2/U2F highest security&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="permission-model"&gt;Permission Model&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A["User"] --&gt; B["Role"]
B --&gt; C["Menu Permission"]
B --&gt; D["Operation Permission"]
B --&gt; E["Data Permission"]
A --&gt; F["Post"]
F --&gt; G["Role Inheritance"]
F --&gt; H["Data Scope"]
subgraph "Data Permission Hierarchy"
E1["User Level (Highest)"]
E2["Role Level"]
E3["Post Level"]
E4["Dept Level (Lowest)"]
end
E --&gt; E1
E --&gt; E2
E --&gt; E3
E --&gt; E4
&lt;/div&gt;
&lt;h2 id="technical-architecture"&gt;Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "IAM Module"
AUTH["Auth Service&lt;br/&gt;Login/MFA/SSO"]
USER_MGR["User Management&lt;br/&gt;Users/Departments/Posts"]
ROLE_MGR["Role Management&lt;br/&gt;Roles/Permissions/Menus"]
PERM_ENGINE["Permission Engine&lt;br/&gt;Data Permissions/Field Permissions"]
AUDIT_CLIENT["Audit Client&lt;br/&gt;Event Reporting"]
end
subgraph "External Dependencies"
REDIS["Redis&lt;br/&gt;Session/Token Storage"]
DB["MySQL&lt;br/&gt;User/Permission Data"]
SMS["SMS Service&lt;br/&gt;OTP Codes"]
MAIL["Email Service&lt;br/&gt;OTP Codes"]
end
AUTH --&gt; REDIS
USER_MGR --&gt; DB
ROLE_MGR --&gt; DB
PERM_ENGINE --&gt; DB
AUTH --&gt; SMS
AUTH --&gt; MAIL
&lt;/div&gt;
&lt;h2 id="business-value"&gt;Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;One Authentication&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SSO single sign-on, reducing repeated logins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security Enhancement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MFA multi-factor + password policy + remote detection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unified Permissions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RBAC + data permission engine, fine-grained control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance Ready&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Connected to Audit Center, meeting Information Security Protection requirements&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Audit Compliance Center</title><link>https://ruoyiplus.com/en/plus/audit-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/audit-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 5 DOs / 5 Controllers, menu ID starting from 10500, building an enterprise unified audit compliance center&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="module-scale"&gt;Module Scale&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="core-data-tables"&gt;Core Data Tables&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;audit_event&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Audit Event&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;audit_block&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Audit Block&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;audit_rule&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Audit Rule&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;audit_statistics&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Audit Statistics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;audit_auditor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Auditor&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="core-positioning"&gt;Core Positioning&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;In one sentence&lt;/strong&gt;: Audit is the platform&amp;rsquo;s &amp;ldquo;black box&amp;rdquo;, recording the complete chain of all key operations and using blockchain technology to ensure data immutability, meeting Level 3 classified protection and financial-grade audit requirements.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="what-problems-does-it-solve"&gt;What Problems Does It Solve&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pain Point&lt;/th&gt;
&lt;th&gt;Traditional Approach&lt;/th&gt;
&lt;th&gt;RuoYiPlus Audit Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;No operation traceability&lt;/td&gt;
&lt;td&gt;Logs scattered across services&lt;/td&gt;
&lt;td&gt;Unified audit event collection center&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data may be tampered with&lt;/td&gt;
&lt;td&gt;Regular database logs&lt;/td&gt;
&lt;td&gt;Blockchain hash chain proof&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Low audit efficiency&lt;/td&gt;
&lt;td&gt;Manual log checking&lt;/td&gt;
&lt;td&gt;Change comparison + risk scoring + automated reports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Non-compliant&lt;/td&gt;
&lt;td&gt;Incomplete logs&lt;/td&gt;
&lt;td&gt;Covers all Level 3 classified protection audit requirements&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="who-is-it-for"&gt;Who Is It For&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Enterprises that need to pass Level 3 classified protection certification&lt;/li&gt;
&lt;li&gt;Heavily regulated industries such as finance and healthcare&lt;/li&gt;
&lt;li&gt;Internal management systems that require audit trails&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="user-roles"&gt;User Roles&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Audit User Roles"
AUDITOR["Auditor&lt;br/&gt;Review operation logs, generate reports"]
SECURITY["Security Administrator&lt;br/&gt;Configure audit rules, risk strategies"]
ADMIN["System Administrator&lt;br/&gt;Manage audit storage, archiving policies"]
DEV["Developer&lt;br/&gt;Integrate audit SDK"]
end
AUDITOR --&gt;|Review| LOG["Operation Logs"]
AUDITOR --&gt;|Generate| REPORT["Compliance Reports"]
SECURITY --&gt;|Configure| RULE["Audit Rules"]
SECURITY --&gt;|Monitor| ALERT["Risk Alerts"]
ADMIN --&gt;|Manage| STORAGE["Storage Policies"]
DEV --&gt;|Integrate| SDK["Audit SDK"]
&lt;/div&gt;
&lt;h2 id="core-collaboration-flow"&gt;Core Collaboration Flow&lt;/h2&gt;
&lt;h3 id="audit-event-full-chain"&gt;Audit Event Full Chain&lt;/h3&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant BIZ as Business System
participant AUDIT as Audit Center
participant BC as Blockchain Service
participant REPORT as Report Engine
BIZ-&gt;&gt;AUDIT: Report operation event
AUDIT-&gt;&gt;AUDIT: Event parsing + standardization
AUDIT-&gt;&gt;AUDIT: Change comparison (before/after)
AUDIT-&gt;&gt;AUDIT: Risk scoring
AUDIT-&gt;&gt;BC: Generate block hash
BC-&gt;&gt;BC: Link to previous block
AUDIT-&gt;&gt;AUDIT: Tiered storage (hot/cold)
REPORT-&gt;&gt;AUDIT: Scheduled compliance report generation
&lt;/div&gt;
&lt;h3 id="audit-event-types"&gt;Audit Event Types&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Audit Event Collection"
A1["Login Audit&lt;br/&gt;Login/Logout/Failure"]
A2["Operation Audit&lt;br/&gt;Create/Update/Delete/Query"]
A3["Permission Audit&lt;br/&gt;Role/Permission Changes"]
A4["Export Audit&lt;br/&gt;Data Export/Report Download"]
A5["Sensitive Audit&lt;br/&gt;Critical Data Access"]
A6["API Audit&lt;br/&gt;Call Statistics"]
end
subgraph "Audit Processing"
B1["Event Parsing"]
B2["Change Comparison"]
B3["Risk Scoring"]
end
A1 &amp; A2 &amp; A3 &amp; A4 &amp; A5 &amp; A6 --&gt; B1
B1 --&gt; B2 --&gt; B3
&lt;/div&gt;
&lt;h3 id="blockchain-hash-chain"&gt;Blockchain Hash Chain&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Genesis Block"
G1["blockHash = SHA256(data)"]
end
subgraph "Block N"
BN1["blockHash = SHA256(data + prevHash)"]
BN2["previousHash = Block N-1 hash"]
end
subgraph "Block N+1"
BN3["blockHash = SHA256(data + prevHash)"]
BN4["previousHash = Block N hash"]
end
G1 --&gt; BN2
BN1 --&gt; BN4
&lt;/div&gt;
&lt;h3 id="audit-event-content"&gt;Audit Event Content&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;eventId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;evt_20240101_001&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;timestamp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2024-01-01 10:30:00.123&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;userId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;user_10001&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;userName&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Zhang San&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;userIp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;192.168.1.100&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;actionType&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;UPDATE&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;resourceType&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;customer&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;resourceId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;cust_20001&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;changes&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;&amp;#34;old&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Old Name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;new&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;New Name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;phone&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;&amp;#34;old&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;13800001111&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;new&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;138****2222&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;riskLevel&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;duration&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;125&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="audit-scope"&gt;Audit Scope&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Type&lt;/th&gt;
&lt;th&gt;Audit Content&lt;/th&gt;
&lt;th&gt;Granularity&lt;/th&gt;
&lt;th&gt;Retention Period&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Login Audit&lt;/td&gt;
&lt;td&gt;Login/Logout/Failure&lt;/td&gt;
&lt;td&gt;Per event&lt;/td&gt;
&lt;td&gt;1 year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operation Audit&lt;/td&gt;
&lt;td&gt;Create/Update/Delete/Query&lt;/td&gt;
&lt;td&gt;Per event&lt;/td&gt;
&lt;td&gt;3 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permission Audit&lt;/td&gt;
&lt;td&gt;Role changes/Permission adjustments&lt;/td&gt;
&lt;td&gt;Per event&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Export Audit&lt;/td&gt;
&lt;td&gt;Data export/Report download&lt;/td&gt;
&lt;td&gt;Per event&lt;/td&gt;
&lt;td&gt;3 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensitive Audit&lt;/td&gt;
&lt;td&gt;Critical data access&lt;/td&gt;
&lt;td&gt;Per event&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API Audit&lt;/td&gt;
&lt;td&gt;API call statistics&lt;/td&gt;
&lt;td&gt;Aggregated&lt;/td&gt;
&lt;td&gt;1 year&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="sensitive-operation-alerts"&gt;Sensitive Operation Alerts&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;audit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;alert-rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Data Export&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;window&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;10m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;notify_admin&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Batch Delete&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;require_approval&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Permission Change&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;after_role = admin&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;notify_security&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="business-value"&gt;Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance Achievement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Meets Level 3 classified protection and financial audit requirements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tamper-proof&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Blockchain hash chain, data non-repudiation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Traceable&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full-chain audit, replayable operations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Automated Reports&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scheduled compliance report generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Risk Early Warning&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time risk scoring + anomaly alerts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Report Platform</title><link>https://ruoyiplus.com/en/plus/report-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/report-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 1 DO / 2 Controllers, menu ID starting from 15000, integrated with GoView data visualization platform&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus Report is based on the GoView open-source project, focusing on three core areas for enterprise enhancement: &lt;strong&gt;Data Visualization&lt;/strong&gt;, &lt;strong&gt;Dashboard Design&lt;/strong&gt;, and &lt;strong&gt;Report Management&lt;/strong&gt;, building an enterprise data visualization and reporting platform.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-report&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;report_go_view_project&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GoView Projects&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus Report Enhanced Architecture"
subgraph "Data Access"
A1[Database Access]
A2[API Access]
A3[Excel Import]
end
subgraph "Visualization Design"
B1[Dashboard Designer]
B2[Chart Components]
B3[Layout Management]
end
subgraph "Display &amp; Publishing"
C1[Dashboard Display]
C2[Report Export]
C3[Scheduled Refresh]
end
subgraph "Control Layer"
D1[Permission Control]
D2[Data Permissions]
D3[Access Audit]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C1 --&gt; D1
B1 --&gt; D2
C1 --&gt; D3
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Traditional Reports&lt;/th&gt;
&lt;th&gt;RuoYiPlus Report Enhanced&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Single database&lt;/td&gt;
&lt;td&gt;Multi-source + API access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Visualization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fixed charts&lt;/td&gt;
&lt;td&gt;Drag-and-drop dashboard design&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Publishing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Static reports&lt;/td&gt;
&lt;td&gt;Real-time dashboard + scheduled refresh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic permissions&lt;/td&gt;
&lt;td&gt;Dashboard-level + data-level permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Export Capability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple export&lt;/td&gt;
&lt;td&gt;Multi-format export + scheduled push&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit &amp;amp; Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Access audit + operation logs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-data-access"&gt;2. Data Access&lt;/h2&gt;
&lt;h3 id="21-data-source-management"&gt;2.1 Data Source Management&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Data Sources"
A[MySQL] --&gt; E[Data Access Layer]
B[PostgreSQL] --&gt; E
C[API Interface] --&gt; E
D[Static Data] --&gt; E
E --&gt; F[Dataset Management]
F --&gt; G[Dashboard Design]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Data Source Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Relational Database&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MySQL/PostgreSQL direct connection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API Interface&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RESTful API data access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Static Data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JSON/CSV static data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Real-Time Data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;WebSocket real-time push&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-visualization-design"&gt;3. Visualization Design&lt;/h2&gt;
&lt;h3 id="31-dashboard-designer"&gt;3.1 Dashboard Designer&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Drag-and-Drop Design&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Visual drag-and-drop layout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chart Components&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rich chart component library&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Theme Configuration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multiple themes + customization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Responsive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-resolution adaptive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Component Linking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cross-chart data linking&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="32-chart-types"&gt;3.2 Chart Types&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Chart Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Line Chart&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Trend analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bar Chart&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Comparison analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pie Chart&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Proportion analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Map&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Geographic distribution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gauge&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Metric monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Table&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Detail data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-display-and-publishing"&gt;4. Display and Publishing&lt;/h2&gt;
&lt;h3 id="41-publishing-management"&gt;4.1 Publishing Management&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Dashboard Design] --&gt; B[Preview &amp; Test]
B --&gt; C[Publish Online]
C --&gt; D[Permission Assignment]
D --&gt; E[Dashboard Display]
E --&gt; F[Access Statistics]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dashboard Preview&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time preview during design&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Publishing Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Version publishing + rollback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dashboard access permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scheduled Refresh&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scheduled data refresh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Export Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Image/PDF export&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-technical-architecture"&gt;5. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-report-plus"
subgraph "report-biz"
A1[datasource Data Source Management]
A2[dataset Dataset Management]
A3[design Dashboard Design]
A4[publish Publishing Management]
A5[export Export Management]
A6[goview GoView Integration]
end
subgraph "Permissions &amp; Audit"
B1[permission Permission Control]
B2[audit Audit Logs]
end
end
A1 --&gt; B1
A3 --&gt; B1
A4 --&gt; B2
A6 --&gt; B1
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="6-business-value"&gt;6. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Visualization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Drag-and-drop dashboard design&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Decision Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time data monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rapid Construction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rich components + templates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flexible Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-data source support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dashboard permissions + access audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open Integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GoView open-source ecosystem&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>AI Intelligent Applications</title><link>https://ruoyiplus.com/en/plus/ai-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/ai-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 14 DOs / 14 Controllers, menu ID starting from 9000, building an enterprise AI intelligent application platform&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus AI focuses on three core areas for enterprise enhancement: &lt;strong&gt;Intelligent Conversation&lt;/strong&gt;, &lt;strong&gt;Knowledge Base Management&lt;/strong&gt;, and &lt;strong&gt;AI Creation&lt;/strong&gt;, building an enterprise AI application platform.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;9000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-ai&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_chat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Intelligent Conversation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_image&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Image Generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_knowledge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Knowledge Base&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_music&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Music Generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_workflow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_writing&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AI Writing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Model Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_api_key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;API Key Management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus AI Enhanced Architecture"
subgraph "Conversation Interaction"
A1[Intelligent Conversation]
A2[Multi-Round Conversation]
A3[Role Play]
end
subgraph "Content Creation"
B1[AI Writing]
B2[Image Generation]
B3[Music Generation]
end
subgraph "Knowledge Management"
C1[Knowledge Base]
C2[Document Parsing]
C3[Semantic Search]
end
subgraph "Platform Management"
D1[Model Management]
D2[API Management]
D3[Workflow]
end
subgraph "Control Layer"
E1[Permission Control]
E2[Content Moderation]
E3[Usage Statistics]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
B1 --&gt; C1
B2 --&gt; C1
B3 --&gt; C2
C1 --&gt; D1
C2 --&gt; D2
C3 --&gt; D3
A1 --&gt; E1
B1 --&gt; E2
C1 --&gt; E3
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Traditional Solution&lt;/th&gt;
&lt;th&gt;RuoYiPlus AI Enhanced&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intelligent Conversation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Multi-round conversation + role play&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Content Creation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Writing + images + music&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knowledge Base&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Knowledge base + semantic search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Model Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Multi-model unified management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workflow&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;AI workflow orchestration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;API key + usage control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Content Moderation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;AI content safety moderation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-intelligent-conversation"&gt;2. Intelligent Conversation&lt;/h2&gt;
&lt;h3 id="21-conversation-architecture"&gt;2.1 Conversation Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Intelligent Conversation"
A[User Input] --&gt; B[Intent Recognition]
B --&gt; C[Knowledge Retrieval]
C --&gt; D[Model Inference]
D --&gt; E[Response Generation]
E --&gt; F[Conversation Record]
B --&gt; B1[Question Classification]
B --&gt; B2[Entity Recognition]
C --&gt; C1[Knowledge Base Retrieval]
C --&gt; C2[Document Retrieval]
D --&gt; D1[LLM Invocation]
D --&gt; D2[Context Management]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intelligent Conversation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-round conversation + context understanding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Role Play&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Custom roles + prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knowledge Q&amp;amp;A&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Knowledge base-based Q&amp;amp;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multimodal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Text + images + voice&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-ai-content-creation"&gt;3. AI Content Creation&lt;/h2&gt;
&lt;h3 id="31-creation-capabilities"&gt;3.1 Creation Capabilities&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Creation Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Writing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Article generation + polishing + continuation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image Generation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Text-to-image + image-to-image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Music Generation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI music creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Video Generation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Text-to-video + image-to-video&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-knowledge-base-management"&gt;4. Knowledge Base Management&lt;/h2&gt;
&lt;h3 id="41-knowledge-base-architecture"&gt;4.1 Knowledge Base Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Knowledge Base Management"
A[Document Upload] --&gt; B[Document Parsing]
B --&gt; C[Vectorization]
C --&gt; D[Knowledge Storage]
D --&gt; E[Semantic Search]
E --&gt; F[Knowledge Q&amp;A]
A --&gt; A1[PDF]
A --&gt; A2[Word]
A --&gt; A3[Web Pages]
B --&gt; B1[Text Extraction]
B --&gt; B2[Segmentation]
C --&gt; C1[Embedding]
C --&gt; C2[Vector Index]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Document Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Upload + parsing + management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vector Search&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Semantic search + similarity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knowledge Q&amp;amp;A&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Knowledge base-based Q&amp;amp;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knowledge Update&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Incremental update + version management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-technical-architecture"&gt;5. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-ai-plus"
subgraph "ai-biz"
A1[chat Intelligent Conversation]
A2[image Image Generation]
A3[knowledge Knowledge Base]
A4[music Music Generation]
A5[workflow Workflow]
A6[writing AI Writing]
A7[model Model Management]
A8[api_key API Key]
A9[analytics Usage Statistics]
end
subgraph "Permissions &amp; Audit"
B1[permission Permission Control]
B2[audit Audit Logs]
B3[content Content Moderation]
end
end
A1 --&gt; B1
A2 --&gt; B3
A3 --&gt; B1
A4 --&gt; B3
A5 --&gt; B2
A7 --&gt; B1
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="6-business-value"&gt;6. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Efficiency Boost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI-assisted writing + conversation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knowledge Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Enterprise knowledge base + intelligent search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Creative Creation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Image + music + video generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost Optimization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-model management + usage control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security &amp;amp; Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Content moderation + operation audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open Integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;API management + workflow orchestration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Mall System</title><link>https://ruoyiplus.com/en/plus/mall-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/mall-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 49 DOs / 73 Controllers, menu ID starting from 14000, building a complete e-commerce mall solution&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus Mall focuses on three core areas for enterprise enhancement: &lt;strong&gt;Product Management&lt;/strong&gt;, &lt;strong&gt;Order Transactions&lt;/strong&gt;, and &lt;strong&gt;Marketing Promotions&lt;/strong&gt;, building a complete B2C e-commerce mall system.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;73&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;14000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-mall&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_product&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Product Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_order&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Order Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_promotion&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Promotion Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_delivery&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delivery Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_after_sale&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;After-Sales Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_statistics&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Statistics Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_coupon&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Coupons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_bargain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bargain Activities&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_combination&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Combination Packages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_seckill&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Flash Sale Activities&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus Mall Enhanced Architecture"
subgraph "Product Layer"
A1[Product Management]
A2[Category Management]
A3[Brand Management]
A4[Review Management]
end
subgraph "Transaction Layer"
B1[Cart]
B2[Order Management]
B3[Payment Management]
B4[Delivery Management]
end
subgraph "Marketing Layer"
C1[Coupons]
C2[Flash Sale Activities]
C3[Bargain Activities]
C4[Combination Packages]
end
subgraph "Service Layer"
D1[After-Sales Management]
D2[Refund Management]
D3[Customer Service Integration]
end
subgraph "Control Layer"
E1[Permission Control]
E2[Data Audit]
E3[Risk Control Management]
end
end
A1 --&gt; B1
A2 --&gt; A1
A3 --&gt; A1
A4 --&gt; A1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
C1 --&gt; B2
C2 --&gt; B2
C3 --&gt; B2
C4 --&gt; B2
B4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
A1 --&gt; E1
B2 --&gt; E2
B3 --&gt; E3
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Traditional Mall&lt;/th&gt;
&lt;th&gt;RuoYiPlus Mall Enhanced&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Product Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic products&lt;/td&gt;
&lt;td&gt;Multi-spec + multi-SKU management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Order Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic orders&lt;/td&gt;
&lt;td&gt;Full-process order management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Marketing Promotions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple discounts&lt;/td&gt;
&lt;td&gt;Flash sales + bargains + combo packages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Delivery Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Multi-carrier + shipping templates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;After-Sales Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Refund + return + exchange&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple statistics&lt;/td&gt;
&lt;td&gt;Transaction analysis + product analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic permissions&lt;/td&gt;
&lt;td&gt;Merchant-level + product-level permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Risk &amp;amp; Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Transaction risk control + operation audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-product-management-system"&gt;2. Product Management System&lt;/h2&gt;
&lt;h3 id="21-product-architecture"&gt;2.1 Product Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Product Management"
A[Product Category] --&gt; B[Product SPU]
B --&gt; C[Product SKU]
C --&gt; D[Product Inventory]
B --&gt; B1[Product Name]
B --&gt; B2[Product Details]
B --&gt; B3[Product Images]
B --&gt; B4[Product Parameters]
C --&gt; C1[Spec Combinations]
C --&gt; C2[Price Management]
C --&gt; C3[Inventory Management]
C --&gt; C4[Barcode Management]
D --&gt; D1[Inventory Alert]
D --&gt; D2[Inventory Sync]
D --&gt; D3[Inventory Records]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Product Category&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-level category management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Product Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SPU/SKU model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Spec Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-spec multi-SKU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inventory Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time inventory + alerts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Review Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Product reviews + follow-up reviews&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Product Search&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full-text search + filtering&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-order-transaction-management"&gt;3. Order Transaction Management&lt;/h2&gt;
&lt;h3 id="31-order-flow"&gt;3.1 Order Flow&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A[Add to Cart] --&gt; B[Confirm Order]
B --&gt; C[Submit Order]
C --&gt; D[Payment Processing]
D --&gt; E{Payment Result}
E --&gt;|Success| F[Merchant Shipment]
E --&gt;|Failed| G[Order Cancellation]
F --&gt; H[Logistics Delivery]
H --&gt; I[Confirm Receipt]
I --&gt; J[Order Completed]
I --&gt; K[Request After-Sales]
B --&gt; B1[Select Address]
B --&gt; B2[Select Promotion]
B --&gt; B3[Calculate Shipping]
F --&gt; F1[Picking]
F --&gt; F2[Packaging]
F --&gt; F3[Shipping]
&lt;/div&gt;
&lt;h3 id="32-order-management"&gt;3.2 Order Management&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cart&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-product + promotion calculation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Order Creation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Order placement + inventory lock&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Order Payment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-payment methods&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Order Shipment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Shipping + logistics tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Order After-Sales&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Refund + return + exchange&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Order Statistics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Transaction analysis + trends&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-marketing-promotion-system"&gt;4. Marketing Promotion System&lt;/h2&gt;
&lt;h3 id="41-marketing-activities"&gt;4.1 Marketing Activities&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Marketing System"
A[Coupons] --&gt; B[Threshold Coupons]
A --&gt; C[Discount Coupons]
A --&gt; D[Free Shipping Coupons]
E[Flash Sale Activities] --&gt; F[Time-Limited Flash Sale]
E --&gt; G[Quantity-Limited Flash Sale]
H[Bargain Activities] --&gt; I[Share Bargain]
H --&gt; J[Assist Bargain]
K[Combination Packages] --&gt; L[Bundled Sales]
K --&gt; M[Matching Packages]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Activity Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Coupons&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Threshold coupons, discount coupons, free shipping coupons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flash Sale Activities&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Time-limited flash sale, quantity-limited flash sale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bargain Activities&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Share bargain, friend assist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Combination Packages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bundled sales, matching packages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Threshold Promotions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tiered threshold, storewide threshold&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-technical-architecture"&gt;5. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-mall-plus"
subgraph "mall-biz"
A1[product Product Management]
A2[order Order Management]
A3[cart Shopping Cart]
A4[promotion Promotion Management]
A5[delivery Delivery Management]
A6[after_sale After-Sales Management]
A7[coupon Coupon Management]
A8[seckill Flash Sale Management]
A9[bargain Bargain Management]
A10[analytics Data Analysis]
end
subgraph "Permissions &amp; Audit"
B1[permission Permission Control]
B2[audit Audit Logs]
B3[risk Risk Control Management]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B1
A4 --&gt; B3
A5 --&gt; B2
A6 --&gt; B2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="6-business-value"&gt;6. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Complete Mall&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Product + order + payment + delivery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Marketing Enablement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flash sale + bargain + coupons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User Growth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Social virality + membership marketing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data-Driven&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Transaction analysis + user profiling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Transaction audit + risk control management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flexible Extension&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Modular design + open API&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>CRM Customer Relationship Management</title><link>https://ruoyiplus.com/en/plus/crm-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/crm-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 75 DOs / 54 Controllers, menu ID starting at 2000, providing deep business enhancements for full customer lifecycle management, intelligent permission control, and audit compliance&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus CRM builds on Yudao&amp;rsquo;s native capabilities, providing enterprise-level enhancements around three core areas: &lt;strong&gt;customer asset control&lt;/strong&gt;, &lt;strong&gt;sales process automation&lt;/strong&gt;, and &lt;strong&gt;data permission compliance&lt;/strong&gt;, creating a complete business loop from lead acquisition to customer success.&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus CRM Enhancement Architecture"
subgraph "Business Layer"
A1[Customer Full Lifecycle]
A2[Opportunity Management]
A3[Contract Management]
A4[Marketing Automation]
end
subgraph "Capability Layer"
B1[Intelligent Public Pool]
B2[Sales Forecasting]
B3[E-Signing]
B4[BI Analytics]
end
subgraph "Infrastructure Layer"
C1[Data Permission Engine]
C2[Operation Audit]
C3[Sensitive Data Masking]
C4[Multi-Tenancy Isolation]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B3
A4 --&gt; B4
B1 --&gt; C1
B2 --&gt; C2
B3 --&gt; C3
B4 --&gt; C4
&lt;/div&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-crm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_customer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Customer basic info&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_contact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contact info&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_business&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Opportunity management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_contract&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contract management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_quote&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quotation management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_invoice&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Invoice management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_receivable&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Receivables management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_return_visit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Customer return visit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_product&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Product management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_event&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Event management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_marketing_campaign&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Marketing campaigns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_survey&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Survey management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_approval_flow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Approval workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;File management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_permission&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Data permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Yudao Native CRM&lt;/th&gt;
&lt;th&gt;RuoYiPlus CRM Enhancement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Customer Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic customer info&lt;/td&gt;
&lt;td&gt;Full lifecycle management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Public Pool&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple public pool&lt;/td&gt;
&lt;td&gt;Intelligent recycling + allocation strategy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Opportunity Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic opportunities&lt;/td&gt;
&lt;td&gt;Kanban + forecasting + automation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Contract Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic contracts&lt;/td&gt;
&lt;td&gt;E-signing + fulfillment tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Analytics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple reports&lt;/td&gt;
&lt;td&gt;BI intelligent analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Marketing Automation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Marketing automation engine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic RBAC&lt;/td&gt;
&lt;td&gt;Four-layer data permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Operation logs&lt;/td&gt;
&lt;td&gt;Full-chain audit trail&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-customer-full-lifecycle-management"&gt;2. Customer Full Lifecycle Management&lt;/h2&gt;
&lt;h3 id="21-lifecycle-stages"&gt;2.1 Lifecycle Stages&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Prospect Stage] --&gt; B[New Customer Stage]
B --&gt; C[Active Stage]
C --&gt; D[Mature Stage]
D --&gt; E[Churn Stage]
A --&gt; A1[Lead Acquisition]
A --&gt; A2[Lead Cleansing]
A --&gt; A3[Lead Scoring]
A --&gt; A4[Customer Profiling]
B --&gt; B1[Customer Tiering]
B --&gt; B2[Initial Follow-up]
B --&gt; B3[Need Discovery]
B --&gt; B4[Opportunity Creation]
C --&gt; C1[Continuous Follow-up]
C --&gt; C2[Opportunity Advancement]
C --&gt; C3[Contract Signing]
C --&gt; C4[Payment Collection]
D --&gt; D1[Upsell Discovery]
D --&gt; D2[Renewal Reminder]
D --&gt; D3[Service Upgrade]
D --&gt; D4[Satisfaction Survey]
E --&gt; E1[Churn Alert]
E --&gt; E2[Retention Strategy]
E --&gt; E3[Churn Analysis]
E --&gt; E4[Public Pool Recycling]
&lt;/div&gt;
&lt;h3 id="22-data-permission-control"&gt;2.2 Data Permission Control&lt;/h3&gt;
&lt;p&gt;The CRM system implements a &lt;strong&gt;four-layer data permission model&lt;/strong&gt; to ensure strict isolation of customer data based on organizational structure and job responsibilities.&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Permission Decision Engine"
A[Sales Request] --&gt; B[Permission Resolution]
B --&gt; C{Permission Source}
C --&gt; D[User-Level Permission]
C --&gt; E[Role-Level Permission]
C --&gt; F[Position-Level Permission]
C --&gt; G[Department-Level Permission]
D --&gt; H[Permission Merge]
E --&gt; H
F --&gt; H
G --&gt; H
H --&gt; I[Customer Level Filter]
I --&gt; J[Data Filter SQL]
J --&gt; K[Return Results]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User-Level&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sales person&amp;rsquo;s own customers&lt;/td&gt;
&lt;td&gt;Sales person can only view their own customers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Role-Level&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sales team&lt;/td&gt;
&lt;td&gt;Sales manager can view all team customers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Position-Level&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Regional management&lt;/td&gt;
&lt;td&gt;Regional director can view all customers in their region&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Department-Level&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Branch office&lt;/td&gt;
&lt;td&gt;Branch GM can view all branch customers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// CRM data permission example&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;roles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;sales_manager&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CustomerServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Sales manager can view team customers&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Automatically filters data by department hierarchy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Customer level filter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;custom&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlFilter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;customer_level &amp;lt;= #{currentUser.maxLevel}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CustomerLevelService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Filter by customer levels accessible to the user&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-operation-audit"&gt;2.3 Operation Audit&lt;/h3&gt;
&lt;p&gt;All customer data operations record complete audit logs, supporting data change traceability and compliance audits.&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Audit Event Collection"
A1[Customer Creation]
A2[Customer Edit]
A3[Customer Transfer]
A4[Customer Deletion]
A5[Data Export]
end
subgraph "Audit Processing"
B1[Change Comparison]
B2[Risk Scoring]
B3[Rule Matching]
end
subgraph "Audit Storage"
C1[Operation Log]
C2[Change History]
C3[Blockchain Evidence]
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
B3 --&gt; C2
B3 --&gt; C3
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Type&lt;/th&gt;
&lt;th&gt;Recorded Content&lt;/th&gt;
&lt;th&gt;Retention Period&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Operation Audit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Customer creation, edit, deletion, transfer&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Change&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Before/after field values&lt;/td&gt;
&lt;td&gt;3 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Export Audit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Export time, exporter, data volume&lt;/td&gt;
&lt;td&gt;3 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Change&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Customer owner change history&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-intelligent-public-pool"&gt;3. Intelligent Public Pool&lt;/h2&gt;
&lt;h3 id="31-public-pool-architecture"&gt;3.1 Public Pool Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Public Pool Management"
A[Customer Enters Pool] --&gt; B{Allocation Strategy}
B --&gt; C[Allocate by Region]
B --&gt; D[Allocate by Industry]
B --&gt; E[Allocate by Capability]
C --&gt; F[Sales Pickup]
D --&gt; F
E --&gt; F
F --&gt; G{Follow-Up Rules}
G --&gt;|N days no follow-up| H[Auto Recycle]
G --&gt;|Normal follow-up| I[Continue Follow-Up]
H --&gt; A
end
&lt;/div&gt;
&lt;h3 id="32-core-capabilities"&gt;3.2 Core Capabilities&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auto Recycle Rules&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Auto recycle after N days without follow-up&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pickup Limits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Daily pickup cap, total cap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Allocation Strategy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Intelligent allocation by region/industry/capability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Protection Mechanism&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Key customer protection, follow-up exemption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Recycle Alert&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Auto reminder 3 days before recycling&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="33-configuration-example"&gt;3.3 Configuration Example&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;crm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;recycle-rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;30 days no follow-up&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;last_follow_days &amp;gt; 30&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;recycle&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;exclude-levels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;VIP&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;KA&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;90 days no opportunity&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;no_business_days &amp;gt; 90&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;recycle&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pickup-limits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;daily&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;total&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cooldown-hours&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;24&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-opportunity-management-and-forecasting"&gt;4. Opportunity Management and Forecasting&lt;/h2&gt;
&lt;h3 id="41-opportunity-process"&gt;4.1 Opportunity Process&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Lead Conversion] --&gt; B[Need Confirmation]
B --&gt; C[Solution Development]
C --&gt; D[Quotation &amp; Negotiation]
D --&gt; E[Win/Loss]
E --&gt; F[Contract Signing]
B --&gt; B1[Need Analysis]
B --&gt; B2[Customer Evaluation]
C --&gt; C1[Solution Design]
C --&gt; C2[Solution Demo]
D --&gt; D1[Quotation Approval]
D --&gt; D2[Contract Negotiation]
&lt;/div&gt;
&lt;h3 id="42-opportunity-kanban-and-forecasting"&gt;4.2 Opportunity Kanban and Forecasting&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Visual Kanban&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Drag-and-drop opportunity stage management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Win Rate Prediction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Win rate model based on historical data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sales Forecasting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Quarterly/annual sales revenue forecasting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stage Conversion Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Conversion rate analysis per stage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bottleneck Identification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatic conversion bottleneck identification&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-contract-management-and-e-signing"&gt;5. Contract Management and E-Signing&lt;/h2&gt;
&lt;h3 id="51-contract-process"&gt;5.1 Contract Process&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A[Contract Drafting] --&gt; B[Contract Approval]
B --&gt; C[E-Signing]
C --&gt; D[Contract Execution]
D --&gt; E[Contract Archiving]
A --&gt; A1[Template-Based Drafting]
A --&gt; A2[Clause Configuration]
B --&gt; B1[Multi-Level Approval]
B --&gt; B2[Legal Review]
C --&gt; C1[Electronic Seal]
C --&gt; C2[Identity Verification]
D --&gt; D1[Fulfillment Tracking]
D --&gt; D2[Payment Collection]
E --&gt; E1[Electronic Archiving]
E --&gt; E2[Expiry Reminder]
&lt;/div&gt;
&lt;h3 id="52-contract-audit"&gt;5.2 Contract Audit&lt;/h3&gt;
&lt;p&gt;All contract operations record complete audit logs, ensuring compliant and traceable contract management.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Contract Creation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records drafter, drafting time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Contract Approval&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records approval process, approval comments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Contract Signing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records signing time, signing parties&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Contract Change&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records change content, change reason&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Contract Archiving&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records archiving time, archiver&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-marketing-automation-engine"&gt;6. Marketing Automation Engine&lt;/h2&gt;
&lt;h3 id="61-automation-process"&gt;6.1 Automation Process&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Trigger Condition] --&gt; B{Condition Check}
B --&gt;|Satisfied| C[Execute Action]
B --&gt;|Not Satisfied| D[No Action]
C --&gt; E[Record Result]
E --&gt; F{Follow-Up Condition}
F --&gt;|Yes| G[Continue Execution]
F --&gt;|No| H[Process End]
&lt;/div&gt;
&lt;h3 id="62-automation-rule-example"&gt;6.2 Automation Rule Example&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Automation rule example&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AutomationRule&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Customer Created&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;conditions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;industry = &amp;#39;Manufacturing&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;region = &amp;#39;East China&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;assignTo: &amp;#39;East China Sales Team&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;sendEmail: &amp;#39;Welcome Email Template&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;createTask: &amp;#39;Initial Follow-Up Task&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="7-data-analytics-enhancement"&gt;7. Data Analytics Enhancement&lt;/h2&gt;
&lt;h3 id="71-sales-funnel-analysis"&gt;7.1 Sales Funnel Analysis&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A[Leads] --&gt; B[Customers]
B --&gt; C[Opportunities]
C --&gt; D[Contracts]
D --&gt; E[Collections]
A --&gt; A1[Lead Conversion Rate]
B --&gt; B1[Opportunity Creation Rate]
C --&gt; C1[Stage Conversion Rate]
D --&gt; D1[Win Rate]
E --&gt; E1[Collection Completion Rate]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Analysis Dimension&lt;/th&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lead → Customer&lt;/td&gt;
&lt;td&gt;Lead conversion rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer → Opportunity&lt;/td&gt;
&lt;td&gt;Opportunity creation rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opportunity Stages&lt;/td&gt;
&lt;td&gt;Stage conversion rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opportunity → Contract&lt;/td&gt;
&lt;td&gt;Win rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contract → Collection&lt;/td&gt;
&lt;td&gt;Collection completion rate&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="72-customer-value-analysis"&gt;7.2 Customer Value Analysis&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Analysis Model&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RFM Model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Recency, Frequency, Monetary analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Customer Tiering&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;VIP/KA/Normal/Potential customer tiers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lifetime Value&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CLV customer lifetime value prediction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Churn Risk Scoring&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Churn probability prediction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="8-technical-architecture"&gt;8. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-crm-plus"
subgraph "crm-biz"
A1[customer Customer Management]
A2[leads Lead Management]
A3[business Opportunity Management]
A4[contract Contract Management]
A5[pool Public Pool]
A6[automation Marketing Automation]
A7[analytics Data Analytics]
A8[integration External Integration]
end
subgraph "Permissions &amp; Audit"
B1[permission Permission Control]
B2[audit Audit Logs]
B3[masking Data Masking]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B3
A7 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="9-business-value"&gt;9. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Increase Conversion Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Intelligent follow-up reminders, opportunity forecasting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reduce Churn Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Churn alert, retention strategy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Improve Efficiency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Marketing automation, mobile office&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data-Driven&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;BI analytics, decision support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Four-layer permissions, full-chain audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sensitive data masking, operation traceability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>CRM Four-Layer Data Permission Solution</title><link>https://ruoyiplus.com/en/plus/crm-data-permission/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/crm-data-permission/</guid><description>&lt;h2 id="core-positioning"&gt;Core Positioning&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;In a nutshell&lt;/strong&gt;: On top of Yudao&amp;rsquo;s native &lt;code&gt;@CrmPermission&lt;/code&gt; annotation, build a complete permission system with &amp;ldquo;User-Role-Post-Department&amp;rdquo; four-layer data permissions + customer level cascade filtering.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="what-problems-it-solves"&gt;What Problems It Solves&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;th&gt;Current Status&lt;/th&gt;
&lt;th&gt;After Enhancement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;User-Level&lt;/td&gt;
&lt;td&gt;✅ Supported&lt;/td&gt;
&lt;td&gt;✅ Maintained&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Role-Level&lt;/td&gt;
&lt;td&gt;❌ Not supported&lt;/td&gt;
&lt;td&gt;✅ Role-permission association&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Post-Level&lt;/td&gt;
&lt;td&gt;❌ Not supported&lt;/td&gt;
&lt;td&gt;✅ Post-permission association&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dept-Level&lt;/td&gt;
&lt;td&gt;❌ Not supported&lt;/td&gt;
&lt;td&gt;✅ Dept-permission association&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer Level&lt;/td&gt;
&lt;td&gt;❌ Not supported&lt;/td&gt;
&lt;td&gt;✅ Level stacking + cascade filtering&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="suitable-users"&gt;Suitable Users&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CRM systems requiring fine-grained data permission control&lt;/li&gt;
&lt;li&gt;Enterprises with customer level tiered management needs&lt;/li&gt;
&lt;li&gt;Organizations needing to isolate customer data by department/post&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="1-four-layer-data-permission-model"&gt;1. Four-Layer Data Permission Model&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Permission Decision Engine"
A["User Request"] --&gt; B["Permission Resolution"]
B --&gt; C["Permission Merge&lt;br/&gt;Union"]
C --&gt; D["Data Scope Filtering"]
D --&gt; E["Customer Level Filtering&lt;br/&gt;AND Stacking"]
end
subgraph "Permission Sources"
F["User-Level Permission&lt;br/&gt;Priority 1 (Highest)"]
G["Role-Level Permission&lt;br/&gt;Priority 2"]
H["Post-Level Permission&lt;br/&gt;Priority 3"]
I["Dept-Level Permission&lt;br/&gt;Priority 4 (Lowest)"]
end
F --&gt; B
G --&gt; B
H --&gt; B
I --&gt; B
E --&gt; J["SQL Filtering"]
J --&gt; K["Return Results"]
&lt;/div&gt;
&lt;h2 id="2-permission-verification-flow"&gt;2. Permission Verification Flow&lt;/h2&gt;
&lt;h3 id="21-operation-permission-verification"&gt;2.1 Operation Permission Verification&lt;/h3&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant User as User
participant Controller as Controller
participant Aspect as @CrmPermission Aspect
participant Engine as Permission Engine
participant DB as Database
User-&gt;&gt;Controller: Request customer operation
Controller-&gt;&gt;Aspect: Trigger permission check
Aspect-&gt;&gt;Engine: hasBizOperationPermission()
Engine-&gt;&gt;Engine: Check user-level permission
Engine-&gt;&gt;Engine: Check role-level permission
Engine-&gt;&gt;Engine: Check post-level permission
Engine-&gt;&gt;Engine: Check dept-level permission
Engine-&gt;&gt;Engine: Merge results (union)
alt Has Permission
Engine-&gt;&gt;Aspect: Return true
Aspect-&gt;&gt;Controller: Allow
Controller-&gt;&gt;DB: Execute business operation
else No Permission
Engine-&gt;&gt;Aspect: Return false
Aspect-&gt;&gt;Controller: Throw permission exception
end
&lt;/div&gt;
&lt;h3 id="22-data-permission-filtering-flow"&gt;2.2 Data Permission Filtering Flow&lt;/h3&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant User as User
participant Controller as Controller
participant Interceptor as MyBatis Interceptor
participant Engine as Permission Engine
participant DB as Database
User-&gt;&gt;Controller: Query customer list
Controller-&gt;&gt;Interceptor: Trigger SQL interception
Interceptor-&gt;&gt;Engine: buildDataScopeSql()
Engine-&gt;&gt;Engine: Get data scope conditions
Engine-&gt;&gt;Engine: Get customer level conditions
Engine-&gt;&gt;Engine: Determine if cascade (related tables)
Engine-&gt;&gt;Interceptor: Return SQL filter conditions
Interceptor-&gt;&gt;Interceptor: Inject WHERE conditions
Interceptor-&gt;&gt;DB: Execute filtered SQL
DB-&gt;&gt;User: Return filtered results
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="3-database-table-structure"&gt;3. Database Table Structure&lt;/h2&gt;
&lt;h3 id="31-business-object-operation-permission-table"&gt;3.1 Business Object Operation Permission Table&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;crm_biz_object_permission&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Primary Key&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;biz_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Business Object Type (1=Lead/2=Customer/3=Contact/4=Opportunity/5=Contract)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;biz_type_name&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Business Object Name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;operation_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Operation Type (CREATE/READ/UPDATE/DELETE/TRANSFER)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;operation_name&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Operation Name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;role_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Role ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Post ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;dept_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Department ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;User ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TINYINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Status (0=Disabled/1=Enabled)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;creator&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Creator&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;create_time&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DATETIME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Create Time&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;updater&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Updater&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;update_time&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DATETIME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;UPDATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;deleted&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Is Deleted&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;tenant_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Tenant ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_biz_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;biz_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_role_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;role_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_post_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_dept_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;dept_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_user_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENGINE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;InnoDB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CHARSET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;utf8mb4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Business Object Operation Permission Table&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="32-data-scope-permission-table-including-customer-level"&gt;3.2 Data Scope Permission Table (Including Customer Level)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;crm_data_scope_permission&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Primary Key&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;biz_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Business Object Type&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;scope_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Data Scope Type (ALL/SELF/DEPT/DEPT_AND_CHILD/CUSTOM)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;scope_value&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Custom Scope Value (JSON format)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;max_customer_level&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Max Customer Level (NULL=No Limit)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;role_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Role ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Post ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;dept_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Department ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;User ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TINYINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Status (0=Disabled/1=Enabled)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;creator&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Creator&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;create_time&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DATETIME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Create Time&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;updater&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Updater&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;update_time&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DATETIME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;UPDATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;deleted&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Is Deleted&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;tenant_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Tenant ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_biz_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;biz_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_role_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;role_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_post_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_dept_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;dept_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_user_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENGINE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;InnoDB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CHARSET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;utf8mb4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Data Scope Permission Table&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="33-data-scope-type-description"&gt;3.3 Data Scope Type Description&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scope Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;SQL Filter Logic&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ALL&lt;/td&gt;
&lt;td&gt;All data&lt;/td&gt;
&lt;td&gt;No filter condition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SELF&lt;/td&gt;
&lt;td&gt;Own data&lt;/td&gt;
&lt;td&gt;&lt;code&gt;owner_user_id = current_user&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DEPT&lt;/td&gt;
&lt;td&gt;Dept data&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dept_id IN (current_dept)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DEPT_AND_CHILD&lt;/td&gt;
&lt;td&gt;Dept and sub-dept data&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dept_id IN (current_dept_and_children)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CUSTOM&lt;/td&gt;
&lt;td&gt;Custom scope&lt;/td&gt;
&lt;td&gt;Generate filter condition based on scope_value&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="34-customer-level-filtering-description"&gt;3.4 Customer Level Filtering Description&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Level Config&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;SQL Filter Logic&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;No customer level restriction&lt;/td&gt;
&lt;td&gt;No filter condition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Level 0 only&lt;/td&gt;
&lt;td&gt;&lt;code&gt;level = 0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&amp;lt;= Level 1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;level &amp;lt;= 1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&amp;lt;= Level 2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;level &amp;lt;= 2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-permission-engine-core-implementation"&gt;4. Permission Engine Core Implementation&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CrmPermissionEngineServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CrmPermissionEngineService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@Override&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;hasBizOperationPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bizType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operationType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Check by priority high to low: User → Role → Post → Dept&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hasUserPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bizType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operationType&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hasRolePermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bizType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operationType&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hasPostPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bizType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operationType&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hasDeptPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bizType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operationType&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@Override&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;buildDataScopeSql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bizType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DataScopePermissionDO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;getDataScope&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bizType&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1=0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;StringBuilder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;StringBuilder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Data scope filtering&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;switch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScopeType&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ALL&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;SELF&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;owner_user_id = &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;DEPT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dept_id = &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;getUserDeptId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;DEPT_AND_CHILD&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dept_id IN (&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;getUserDeptAndChildIds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;CUSTOM&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScopeValue&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1=0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Customer level filtering (AND stacking)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;maxLevel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMaxCustomerLevel&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maxLevel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34; AND &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;level &amp;lt;= &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maxLevel&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="5-mybatis-data-permission-interceptor"&gt;5. MyBatis Data Permission Interceptor&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Component&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Intercepts&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nd"&gt;@Signature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Executor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;MappedStatement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RowBounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ResultHandler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;})})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CrmDataPermissionInterceptor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Interceptor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Tables that need cascade customer level filtering via customer_id&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CASCADE_CUSTOMER_LEVEL_TABLES&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;crm_business&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;crm_contract&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;crm_contact&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;crm_receivable&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;crm_receivable_plan&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@Override&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;intercept&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Invocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;invocation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Throwable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 1. Determine if data permission filtering is needed&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 2. Get current user ID&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 3. Parse business type&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 4. Build data permission filter conditions&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 5. Modify SQL, add WHERE filter conditions&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 6. Execute query&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="cascade-association-relationships"&gt;Cascade Association Relationships&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Customer Level Cascade"
CUSTOMER["Customer Table&lt;br/&gt;crm_customer&lt;br/&gt;level field"] --&gt;|customer_id| CONTACT["Contact&lt;br/&gt;crm_contact"]
CUSTOMER --&gt;|customer_id| CONTRACT["Contract&lt;br/&gt;crm_contract"]
CUSTOMER --&gt;|customer_id| RECEIVABLE["Receivable&lt;br/&gt;crm_receivable"]
CUSTOMER --&gt;|customer_id| RECEIVABLE_PLAN["Receivable Plan&lt;br/&gt;crm_receivable_plan"]
CUSTOMER --&gt;|customer_id| BUSINESS["Opportunity&lt;br/&gt;crm_business"]
end
CLUE["Lead&lt;br/&gt;crm_clue"] -.-&gt;|No Cascade| CUSTOMER
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Business Object&lt;/th&gt;
&lt;th&gt;Association Field&lt;/th&gt;
&lt;th&gt;Cascade?&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Customer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;level&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ Source&lt;/td&gt;
&lt;td&gt;Directly apply level condition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contact&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;Inherit level via customer ID association&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contract&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;Inherit level via customer ID association&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Receivable&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;Inherit level via customer ID association&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opportunity&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;Inherit level via customer ID association&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lead&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;Leads are not associated with customers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-frontend-permission-configuration-interface"&gt;6. Frontend Permission Configuration Interface&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "CRM Permission Management"
subgraph "Permission Level Switch"
A1["Dept Permission"]
A2["Post Permission"]
A3["Role Permission"]
A4["User Permission"]
end
subgraph "Business Object Selection"
B1["Customer"]
B2["Opportunity"]
B3["Contract"]
B4["Contact"]
B5["Lead"]
B6["Receivable"]
end
subgraph "Operation Permission Config"
C1["Create"]
C2["View"]
C3["Edit"]
C4["Delete"]
C5["Transfer"]
C6["Export"]
end
subgraph "Data Scope Config"
D1["All Data"]
D2["Own Data"]
D3["Dept Data"]
D4["Dept &amp; Sub-Dept"]
D5["Custom Scope"]
end
subgraph "Customer Level Filter"
E1["All Levels"]
E2["Level 0"]
E3["&lt;= Level 1"]
E4["&lt;= Level 2"]
end
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="7-implementation-progress"&gt;7. Implementation Progress&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Database table structure design &amp;amp; creation&lt;/td&gt;
&lt;td&gt;✅ Completed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Backend entity classes &amp;amp; Mapper&lt;/td&gt;
&lt;td&gt;✅ Completed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Permission engine service implementation&lt;/td&gt;
&lt;td&gt;✅ Completed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MyBatis data permission interceptor&lt;/td&gt;
&lt;td&gt;✅ Completed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;API interface implementation&lt;/td&gt;
&lt;td&gt;✅ Completed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Frontend page development&lt;/td&gt;
&lt;td&gt;✅ Completed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Customer level cascade filtering&lt;/td&gt;
&lt;td&gt;✅ Completed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 8&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Testing &amp;amp; verification&lt;/td&gt;
&lt;td&gt;✅ Completed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="summary"&gt;Summary&lt;/h2&gt;
&lt;p&gt;This solution implements a four-layer data permission filtering mechanism based on &lt;strong&gt;Department-Post-Role-User&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Operation Permission&lt;/strong&gt;: Managed via &lt;code&gt;crm_biz_object_permission&lt;/code&gt; table, four-level priority checking&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Scope&lt;/strong&gt;: Supports five scope types: ALL/SELF/DEPT/DEPT_AND_CHILD/CUSTOM&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customer Level Filtering&lt;/strong&gt;: &lt;code&gt;max_customer_level&lt;/code&gt; field, supports level range stacking filter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cascade Inheritance&lt;/strong&gt;: Contracts, contacts, etc. automatically inherit customer level restrictions via &lt;code&gt;customer_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQL Interceptor&lt;/strong&gt;: Auto-injects WHERE conditions without modifying existing business code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frontend Configuration&lt;/strong&gt;: Unified permission configuration interface with level switching and level configuration&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>CS Customer Service System</title><link>https://ruoyiplus.com/en/plus/cs-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/cs-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 6 DOs / 5 Controllers, menu ID starting at 8500, building an omnichannel intelligent customer service and ticket management system&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus CS Customer Service System centers around three core pillars—&lt;strong&gt;Omnichannel Access&lt;/strong&gt;, &lt;strong&gt;Intelligent Ticket Routing&lt;/strong&gt;, and &lt;strong&gt;Service Quality Control&lt;/strong&gt;—to deliver enterprise-level enhancement, achieving full-process digital management from customer touchpoints to problem resolution.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-cs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cs_conversation&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Conversation Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cs_ticket&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ticket Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cs_contact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contact Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cs_inbox&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Inbox Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cs_canned_response&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Canned Responses&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus CS Enhanced Architecture"
subgraph "Channel Access Layer"
A1[WeChat Channel]
A2[APP Channel]
A3[Phone Channel]
A4[Email Channel]
A5[Social Media Channel]
end
subgraph "Business Processing Layer"
B1[Conversation Management]
B2[Ticket Management]
B3[Intelligent Bot]
B4[Knowledge Base]
end
subgraph "Control Layer"
C1[SLA Management]
C2[Quality Scoring]
C3[Permission Control]
C4[Audit Tracking]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
A5 --&gt; B1
B1 --&gt; B2
B1 --&gt; B3
B3 --&gt; B4
B2 --&gt; C1
B2 --&gt; C2
B1 --&gt; C3
B2 --&gt; C4
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Traditional CS&lt;/th&gt;
&lt;th&gt;RuoYiPlus CS Enhanced&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Channel Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Single channel&lt;/td&gt;
&lt;td&gt;Unified omnichannel access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ticket Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple tickets&lt;/td&gt;
&lt;td&gt;Full-process ticket management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intelligent CS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;AI intelligent Q&amp;amp;A + bot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knowledge Base&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Knowledge base + intelligent search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Service Quality&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;SLA management + quality scoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;CS tiered permissions + data isolation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Conversation audit + quality traceability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-omnichannel-access"&gt;2. Omnichannel Access&lt;/h2&gt;
&lt;h3 id="21-channel-architecture"&gt;2.1 Channel Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Omnichannel Access"
subgraph "Instant Messaging"
A1[WeChat Official Account]
A2[WeChat Mini Program]
A3[WeCom]
A4[DingTalk]
A5[Feishu]
end
subgraph "Traditional Channels"
B1[Phone Support]
B2[Email Support]
B3[SMS Support]
end
subgraph "Social Media Channels"
C1[Weibo]
C2[TikTok]
C3[Xiaohongshu]
end
subgraph "Unified Access"
D1[Message Aggregation]
D2[Conversation Management]
D3[Customer Identification]
D4[Context Persistence]
end
end
A1 --&gt; D1
A2 --&gt; D1
A3 --&gt; D1
A4 --&gt; D1
A5 --&gt; D1
B1 --&gt; D1
B2 --&gt; D1
B3 --&gt; D1
C1 --&gt; D1
C2 --&gt; D1
C3 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; D4
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Channel Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WeChat Channels&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Official account, mini program, WeCom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;APP Channels&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;In-app embedded, H5 pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phone Channels&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Inbound/outbound, IVR navigation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Email Channels&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Email tickets, auto-reply&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Social Media Channels&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Weibo, TikTok and other social platforms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-full-process-ticket-management"&gt;3. Full-Process Ticket Management&lt;/h2&gt;
&lt;h3 id="31-ticket-workflow"&gt;3.1 Ticket Workflow&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A[Ticket Creation] --&gt; B[Auto Classification]
B --&gt; C[Auto Assignment]
C --&gt; D[Ticket Processing]
D --&gt; E{Resolved?}
E --&gt;|Yes| F[Customer Confirmation]
E --&gt;|No| G[Ticket Escalation]
G --&gt; D
F --&gt; H[Satisfaction Rating]
H --&gt; I[Ticket Archiving]
A --&gt; A1[Multi-Channel Creation]
A --&gt; A2[Template-Based Creation]
C --&gt; C1[Assignment by Type]
C --&gt; C2[Assignment by Skill]
C --&gt; C3[Assignment by Region]
D --&gt; D1[Accept and Process]
D --&gt; D2[Collaborative Processing]
D --&gt; D3[Progress Update]
&lt;/div&gt;
&lt;h3 id="32-ticket-permission-control"&gt;3.2 Ticket Permission Control&lt;/h3&gt;
&lt;p&gt;The ticket system implements role-based data permission control, ensuring agents can only access tickets within their permission scope.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Own tickets&lt;/td&gt;
&lt;td&gt;Can only view and process tickets assigned to them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Team Lead&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Team tickets&lt;/td&gt;
&lt;td&gt;Can view and assign all team tickets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CS Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All tickets&lt;/td&gt;
&lt;td&gt;Can view all tickets and perform statistical analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;QA Personnel&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sampled tickets&lt;/td&gt;
&lt;td&gt;Can randomly sample tickets for quality scoring&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="33-ticket-audit"&gt;3.3 Ticket Audit&lt;/h3&gt;
&lt;p&gt;All ticket operations record complete audit logs, supporting ticket processing traceability.&lt;/p&gt;
&lt;div class="mermaid"&gt;graph LR
A[Ticket Creation] --&gt; B[Ticket Assignment]
B --&gt; C[Ticket Processing]
C --&gt; D[Ticket Escalation]
D --&gt; E[Ticket Resolution]
E --&gt; F[Ticket Archiving]
A -.-&gt; G[Audit Log]
B -.-&gt; G
C -.-&gt; G
D -.-&gt; G
E -.-&gt; G
F -.-&gt; G
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="4-intelligent-customer-service-bot"&gt;4. Intelligent Customer Service Bot&lt;/h2&gt;
&lt;h3 id="41-bot-architecture"&gt;4.1 Bot Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Intelligent Bot"
subgraph "Q&amp;A Engine"
A1[Knowledge Base Search]
A2[Semantic Understanding]
A3[Intelligent Matching]
end
subgraph "Business Processing"
B1[Business Query]
B2[Business Processing]
B3[Ticket Creation]
end
subgraph "Human-Bot Collaboration"
C1[Bot Reception]
C2[Intelligent Handoff to Human]
C3[Human Assistance]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
&lt;/div&gt;
&lt;h3 id="42-core-capabilities"&gt;4.2 Core Capabilities&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intelligent Q&amp;amp;A&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Knowledge base search, semantic matching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-Turn Dialogue&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Context understanding, intent recognition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Business Processing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Self-service query, self-service processing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intelligent Handoff&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatic handoff to human for complex issues&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Human Assistance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Knowledge recommendations, script suggestions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-knowledge-base-management"&gt;5. Knowledge Base Management&lt;/h2&gt;
&lt;h3 id="51-knowledge-base-system"&gt;5.1 Knowledge Base System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Knowledge Management"
subgraph "Knowledge Collection"
A1[FAQ Entry]
A2[Document Import]
A3[Knowledge Extraction]
end
subgraph "Knowledge Organization"
B1[Knowledge Classification]
B2[Knowledge Tags]
B3[Knowledge Association]
end
subgraph "Knowledge Application"
C1[Intelligent Search]
C2[Knowledge Recommendation]
C3[Knowledge Push]
end
subgraph "Knowledge Maintenance"
D1[Knowledge Update]
D2[Knowledge Expiration]
D3[Knowledge Archiving]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knowledge Entry&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;FAQ, documents, Q&amp;amp;A pairs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intelligent Search&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Semantic search, keyword search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knowledge Recommendation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Related knowledge recommendations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knowledge Statistics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Usage statistics, effectiveness evaluation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-service-quality-management"&gt;6. Service Quality Management&lt;/h2&gt;
&lt;h3 id="61-sla-service-levels"&gt;6.1 SLA Service Levels&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Ticket Creation] --&gt; B{Priority}
B --&gt;|Critical| C[5-Min Response]
B --&gt;|Important| D[15-Min Response]
B --&gt;|Normal| E[30-Min Response]
C --&gt; F[30-Min Resolution]
D --&gt; G[2-Hour Resolution]
E --&gt; H[24-Hour Resolution]
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sla&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;levels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Critical&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;response-time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;5m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resolve-time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;30m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Important&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;response-time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;15m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resolve-time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2h&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Normal&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;response-time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;30m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resolve-time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;24h&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;monitoring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;alert-threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="l"&gt;% &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Alert if compliance rate falls below 80%&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="62-quality-scoring"&gt;6.2 Quality Scoring&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;QA Dimension&lt;/th&gt;
&lt;th&gt;Metrics&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Response Speed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Response time compliance rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resolution Quality&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Problem resolution rate, first-contact resolution rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Service Attitude&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Polite language, service standards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Professional Competence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Knowledge accuracy, processing capability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Customer Satisfaction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Satisfaction score, positive rating rate&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="7-technical-architecture"&gt;7. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-cs-plus"
subgraph "cs-biz"
A1[channel - Channel Access]
A2[session - Conversation Management]
A3[ticket - Ticket Management]
A4[robot - Intelligent Bot]
A5[knowledge - Knowledge Base]
A6[sla - SLA Management]
A7[quality - Quality Management]
A8[agent - Agent Management]
A9[workspace - Workspace]
A10[analytics - Data Analysis]
end
subgraph "Permissions and Audit"
B1[permission - Permission Control]
B2[audit - Audit Logs]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
A4 --&gt; B1
A5 --&gt; B1
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="8-business-value"&gt;8. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Efficiency Improvement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Intelligent bot, quick tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost Reduction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bot diversion, self-service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Satisfaction Improvement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Quick response, professional service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Service Quality Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SLA management, quality scoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data-Driven Optimization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Performance analysis, issue analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance and Traceability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ticket audit, conversation traceability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Member Marketing</title><link>https://ruoyiplus.com/en/plus/member-marketing-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/member-marketing-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 26 DOs / 31 Controllers, menu ID starting from 13000, building a complete member operations and marketing automation system&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning--architecture"&gt;1. Enhancement Positioning &amp;amp; Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus Member Marketing provides enterprise-grade enhancements around three core areas: &lt;strong&gt;member full-lifecycle operations&lt;/strong&gt;, &lt;strong&gt;intelligent marketing automation&lt;/strong&gt;, and &lt;strong&gt;member data compliance&lt;/strong&gt;, achieving a complete business closed loop from acquisition to retention.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;13000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-member&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_user&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Member Information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_point&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Points Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_balance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Balance Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_coupon&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Coupon Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_package&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Package Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_level&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Level Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_tag&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tag Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_sign_in&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sign-in Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_recharge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Recharge Management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus Member Marketing Enhanced Architecture"
subgraph "Operations Layer"
A1[Member Lifecycle]
A2[Level System]
A3[Points System]
A4[Benefits Management]
end
subgraph "Marketing Layer"
B1[Marketing Activity Engine]
B2[Automation Triggers]
B3[Member Profile]
B4[RFM Analysis]
end
subgraph "Data Layer"
C1[Member Data Analysis]
C2[Campaign Effect Analysis]
C3[Operational Metrics Monitoring]
end
subgraph "Compliance Layer"
D1[Member Data Permissions]
D2[Privacy Data Masking]
D3[Operation Audit]
D4[Data Encryption]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
A4 --&gt; B3
B1 --&gt; C1
B2 --&gt; C2
B3 --&gt; C3
C1 --&gt; D1
C2 --&gt; D2
C3 --&gt; D3
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Yudao Native Member&lt;/th&gt;
&lt;th&gt;RuoYiPlus Member Marketing Enhancement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Member Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic member info&lt;/td&gt;
&lt;td&gt;Full-lifecycle operations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Level System&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple levels&lt;/td&gt;
&lt;td&gt;Dynamic levels + benefits system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Points System&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic points&lt;/td&gt;
&lt;td&gt;Points store + redemption system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Marketing Activities&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Marketing activity management engine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Member Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple statistics&lt;/td&gt;
&lt;td&gt;RFM analysis + profile tags&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Marketing Automation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Marketing automation triggers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic permissions&lt;/td&gt;
&lt;td&gt;Tiered member data permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Privacy Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Privacy data masking + audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-member-full-lifecycle-operations"&gt;2. Member Full-Lifecycle Operations&lt;/h2&gt;
&lt;h3 id="21-lifecycle-stages"&gt;2.1 Lifecycle Stages&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Acquisition Stage] --&gt; B[Activation Stage]
B --&gt; C[Retention Stage]
C --&gt; D[Monetization Stage]
D --&gt; E[Referral Stage]
A --&gt; A1[Registration &amp; Lead Gen]
A --&gt; A2[New Customer Incentives]
A --&gt; A3[First Purchase Conversion]
A --&gt; A4[Channel Attribution]
B --&gt; B1[Activation Guidance]
B --&gt; B2[First Purchase]
B --&gt; B3[Habit Building]
B --&gt; B4[New Customer Gift Pack]
C --&gt; C1[Sign-in Incentives]
C --&gt; C2[Points Accumulation]
C --&gt; C3[Member Upgrade]
C --&gt; C4[Exclusive Offers]
D --&gt; D1[Upsell Recommendations]
D --&gt; D2[Cross-selling]
D --&gt; D3[High-value Conversion]
D --&gt; D4[Paid Membership]
E --&gt; E1[Referral Rewards]
E --&gt; E2[Social Virality]
E --&gt; E3[KOC Cultivation]
E --&gt; E4[Member Ambassador]
&lt;/div&gt;
&lt;h3 id="22-member-data-permissions"&gt;2.2 Member Data Permissions&lt;/h3&gt;
&lt;p&gt;The Member module implements data-tier-based permission control to ensure member privacy data security.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Regular Member&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Personal info&lt;/td&gt;
&lt;td&gt;Can only view their own member information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Customer Service Agent&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Assigned members&lt;/td&gt;
&lt;td&gt;Can view basic info of assigned members&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Operations Specialist&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All members&lt;/td&gt;
&lt;td&gt;Can view all member data (masked)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Analyst&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Analytical data&lt;/td&gt;
&lt;td&gt;Can view statistical data but not personal information&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Member data permission example&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;member_level&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MemberServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Operations specialists can view member data&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Sensitive fields are automatically masked&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Privacy data masking&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@SensitiveField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SensitiveType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;PHONE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@SensitiveField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SensitiveType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EMAIL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-member-operation-audit"&gt;2.3 Member Operation Audit&lt;/h3&gt;
&lt;p&gt;All member data operations are recorded with complete audit logs, supporting member data traceability.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Member Registration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records registration time, registration channel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Level Change&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records upgrade/downgrade time, reason&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Points Change&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records points earned and spent details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Benefits Usage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records benefit usage time and content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Export&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records export time, exporter, exported data volume&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-dynamic-level-system"&gt;3. Dynamic Level System&lt;/h2&gt;
&lt;h3 id="31-level-system"&gt;3.1 Level System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Level System"
A[Regular Member] --&gt; B[Silver Member]
B --&gt; C[Gold Member]
C --&gt; D[Diamond Member]
A --&gt; A1[0 Points]
B --&gt; B1[1000 Points]
C --&gt; C1[5000 Points]
D --&gt; D1[20000 Points]
A --&gt; A2[Basic Points]
A --&gt; A3[Birthday Offer]
B --&gt; B1[Double Points]
B --&gt; B2[Dedicated Support]
B --&gt; B3[Priority Shipping]
C --&gt; C1[Triple Points]
C --&gt; C2[Free Shipping]
C --&gt; C3[Exclusive Discounts]
D --&gt; D1[Quintuple Points]
D --&gt; D2[Exclusive Gifts]
D --&gt; D3[VIP Events]
end
&lt;/div&gt;
&lt;h3 id="32-level-configuration"&gt;3.2 Level Configuration&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;member&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;levels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Regular Member&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min-points&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;benefits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Basic Points&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Birthday Offer&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Silver Member&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min-points&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;benefits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Double Points&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Dedicated Support&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Priority Shipping&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Gold Member&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min-points&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;benefits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Triple Points&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Free Shipping&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Exclusive Discounts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Member Day Privileges&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Diamond Member&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min-points&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;benefits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Quintuple Points&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Exclusive Gifts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;VIP Events&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Birthday Double&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;upgrade-rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;auto-upgrade&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;grace-period&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;90&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 90-day grace period&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;downgrade-warning&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 30-day advance warning before downgrade&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-points-system-enhancement"&gt;4. Points System Enhancement&lt;/h2&gt;
&lt;h3 id="41-points-process"&gt;4.1 Points Process&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Points Earning] --&gt; B[Points Accumulation]
B --&gt; C[Points Redemption]
C --&gt; D[Points Settlement]
A --&gt; A1[Purchase Points]
A --&gt; A2[Activity Points]
A --&gt; A3[Task Points]
B --&gt; B1[Points Balance]
B --&gt; B2[Points Validity]
C --&gt; C1[Points Exchange]
C --&gt; C2[Points Deduction]
C --&gt; C3[Points Lottery]
D --&gt; D1[Points Expiry]
D --&gt; D2[Points Reset]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Points Earning&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Purchase points, activity points, task points&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Points Redemption&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Points exchange, points deduction, points lottery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Points Validity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Points expiry rules, reset reminders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Points Freeze&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Points freeze on order cancellation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Points Traceability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Detailed points change records&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-marketing-activity-engine"&gt;5. Marketing Activity Engine&lt;/h2&gt;
&lt;h3 id="51-activity-types"&gt;5.1 Activity Types&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Activity Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Registration Activity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;New member registration gift pack, first purchase offer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sign-in Activity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Consecutive sign-in rewards, sign-in lottery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Purchase Activity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Purchase points rebate, tiered discounts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Festival Activity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Member day, birthday offer, holiday promotions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Viral Activity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Referral rewards, group buying&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Activity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Complete tasks to earn rewards&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="52-marketing-automation"&gt;5.2 Marketing Automation&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Marketing Automation"
subgraph "Triggers"
A1[Event Trigger]
A2[Condition Trigger]
A3[Time Trigger]
A4[Behavior Trigger]
end
subgraph "Rule Engine"
B1[Rule Matching]
B2[Condition Evaluation]
B3[Action Execution]
end
subgraph "Execution Actions"
C1[Send Coupon]
C2[Grant Points]
C3[Send SMS]
C4[Send Email]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
B3 --&gt; C2
B3 --&gt; C3
B3 --&gt; C4
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;member&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;automation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;New Customer First Order Incentive&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;first_order&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;sendCoupon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;New Customer Repurchase Coupon&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;addPoints&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;sendSms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Thank you for your purchase, 100 points awarded&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Member Upgrade Congratulations&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;level_upgrade&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;sendEmail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Upgrade Congratulations Email&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;sendGift&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Upgrade Gift Pack&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;addPoints&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Churn Warning Recall&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;rfm_change&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;R &amp;gt; 60&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;sendCoupon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Recall Exclusive Coupon&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;sendSms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Long time no see, exclusive offer waiting for you&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="6-rfm-analysis-model"&gt;6. RFM Analysis Model&lt;/h2&gt;
&lt;h3 id="61-rfm-segmentation"&gt;6.1 RFM Segmentation&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;RFM Segment&lt;/th&gt;
&lt;th&gt;Definition&lt;/th&gt;
&lt;th&gt;Operations Strategy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Important Value Customers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R Near, F High, M High&lt;/td&gt;
&lt;td&gt;VIP service, exclusive benefits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Important Development Customers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R Near, F Low, M High&lt;/td&gt;
&lt;td&gt;Increase frequency, build habits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Important Retention Customers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R Far, F High, M High&lt;/td&gt;
&lt;td&gt;Reactivate recall, retention&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Important At-Risk Customers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R Far, F Low, M High&lt;/td&gt;
&lt;td&gt;Priority retention, exclusive offers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;General Value Customers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R Near, F High, M Low&lt;/td&gt;
&lt;td&gt;Increase order value, upgrade guidance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;General Development Customers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R Near, F Low, M Low&lt;/td&gt;
&lt;td&gt;New customer cultivation, first order incentives&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;General Retention Customers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R Far, F High, M Low&lt;/td&gt;
&lt;td&gt;Reactivate recall&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Low-value Customers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R Far, F Low, M Low&lt;/td&gt;
&lt;td&gt;Low-cost maintenance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="62-rfm-configuration"&gt;6.2 RFM Configuration&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;member&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rfm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r-thresholds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;90&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Days since last purchase&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;f-thresholds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Purchase frequency&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;m-thresholds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Purchase amount&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;analysis-cycle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;monthly&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="7-technical-architecture"&gt;7. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-member-plus"
subgraph "member-biz"
A1[lifecycle]
A2[level]
A3[points]
A4[benefits]
A5[activity]
A6[automation]
A7[rfm]
A8[tag]
A9[analytics]
end
subgraph "Permissions &amp; Audit"
B1[permission]
B2[audit]
B3[masking]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
A4 --&gt; B2
A5 --&gt; B3
A6 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="8-business-value"&gt;8. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Increase Repurchase Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Member benefit incentives, points system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reduce Churn Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RFM early warning, automated recall&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Increase Average Order Value&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Upgrade guidance, high-value conversion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reduce Operational Costs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Marketing automation, intelligent segmentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data-driven Decisions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Profile analysis, effect tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Privacy Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Data masking, operation audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>MP WeChat Official Account Management</title><link>https://ruoyiplus.com/en/plus/mp-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/mp-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 8 DOs / 12 Controllers, menu ID starting from 12000, building a WeChat Official Account operations management platform&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus MP focuses on three core areas for enterprise enhancement: &lt;strong&gt;Official Account Management&lt;/strong&gt;, &lt;strong&gt;Material Management&lt;/strong&gt;, and &lt;strong&gt;User Interaction&lt;/strong&gt;, enabling digital WeChat Official Account operations management.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;12000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-mp&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mp_account&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Official Account Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mp_material&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Material Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mp_menu&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Menu Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mp_auto_reply&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Auto Reply&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mp_message&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Message Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mp_tag&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;User Tags&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mp_user&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Follower Management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus MP Enhanced Architecture"
subgraph "Official Account Management"
A1[Account Configuration]
A2[Menu Management]
A3[Auto Reply]
end
subgraph "Content Management"
B1[Material Management]
B2[Rich Media Messages]
B3[Template Messages]
end
subgraph "User Management"
C1[Follower Management]
C2[User Tags]
C3[Message Interaction]
end
subgraph "Control Layer"
D1[Permission Control]
D2[Data Audit]
D3[Content Moderation]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C1 --&gt; D1
B3 --&gt; D2
A3 --&gt; D3
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Traditional Solution&lt;/th&gt;
&lt;th&gt;RuoYiPlus MP Enhanced&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Official Account Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Single account&lt;/td&gt;
&lt;td&gt;Multi-account unified management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Material Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;WeChat backend&lt;/td&gt;
&lt;td&gt;Local material library + sync&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auto Reply&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic reply&lt;/td&gt;
&lt;td&gt;Smart reply + keywords&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Follower Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;WeChat backend&lt;/td&gt;
&lt;td&gt;Follower management + tag grouping&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Message Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Message records + analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Account-level data permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Content Moderation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Content moderation + compliance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-official-account-management"&gt;2. Official Account Management&lt;/h2&gt;
&lt;h3 id="21-account-configuration"&gt;2.1 Account Configuration&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Official Account Management"
A[Account Registration] --&gt; B[Basic Configuration]
B --&gt; C[Menu Configuration]
C --&gt; D[Auto Reply]
D --&gt; E[Template Messages]
B --&gt; B1[AppID Configuration]
B --&gt; B2[Key Management]
B --&gt; B3[Server Configuration]
C --&gt; C1[Custom Menu]
C --&gt; C2[Personalized Menu]
D --&gt; D1[Follow Reply]
D --&gt; D2[Keyword Reply]
D --&gt; D3[Message Reply]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-Account&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-account unified management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Custom menu + personalized menu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auto Reply&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Follow reply + keyword + message reply&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Template Messages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Template message sending&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-material-and-content-management"&gt;3. Material and Content Management&lt;/h2&gt;
&lt;h3 id="31-material-management"&gt;3.1 Material Management&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Material Management"
A[Material Upload] --&gt; B[Material Classification]
B --&gt; C[Material Sync]
C --&gt; D[Material Usage]
A --&gt; A1[Image Materials]
A --&gt; A2[Video Materials]
A --&gt; A3[Audio Materials]
A --&gt; A4[Rich Media Materials]
C --&gt; C1[Sync to WeChat]
C --&gt; C2[Material Update]
D --&gt; D1[Rich Media Messages]
D --&gt; D2[Broadcast Messages]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Material Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image Materials&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Image upload + management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Video Materials&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Video upload + management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audio Materials&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Audio upload + management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rich Media Materials&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rich media editing + publishing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-follower-and-user-management"&gt;4. Follower and User Management&lt;/h2&gt;
&lt;h3 id="41-follower-management"&gt;4.1 Follower Management&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[User Follow] --&gt; B[Follower Registration]
B --&gt; C[Tag Grouping]
C --&gt; D[Message Interaction]
D --&gt; E[Data Analysis]
B --&gt; B1[Basic Information]
B --&gt; B2[Follow Time]
B --&gt; B3[Source Channel]
C --&gt; C1[Auto Tagging]
C --&gt; C2[Manual Grouping]
D --&gt; D1[Message Records]
D --&gt; D2[Customer Service Messages]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Follower Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Follower list + details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tag Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;User tags + grouping&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Message Records&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Message history + reply&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User Profiling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;User analysis + tagging&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-technical-architecture"&gt;5. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-mp-plus"
subgraph "mp-biz"
A1[account Official Account Management]
A2[material Material Management]
A3[menu Menu Management]
A4[auto_reply Auto Reply]
A5[message Message Management]
A6[tag Tag Management]
A7[user User Management]
A8[analytics Data Analysis]
end
subgraph "Permissions &amp; Audit"
B1[permission Permission Control]
B2[audit Audit Logs]
B3[content Content Moderation]
end
end
A1 --&gt; B1
A2 --&gt; B3
A3 --&gt; B1
A4 --&gt; B3
A5 --&gt; B2
A7 --&gt; B1
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="6-business-value"&gt;6. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-Account Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-account unified management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Content Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Material management + content publishing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Follower Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tag grouping + precise targeting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Insights&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;User analysis + message analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Content moderation + operation audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;System Integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Integration with CRM / membership&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>ERP Enterprise Resource Planning</title><link>https://ruoyiplus.com/en/plus/erp-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/erp-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 41 DOs / 30 Controllers, menu ID starting at 4000, building a complete integrated inventory and financial management system&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus ERP builds on Yudao&amp;rsquo;s native capabilities, providing enterprise-level enhancements around three core areas: &lt;strong&gt;procurement-sales-inventory-finance integrated management&lt;/strong&gt;, &lt;strong&gt;multi-dimensional data permissions&lt;/strong&gt;, and &lt;strong&gt;business operation auditing&lt;/strong&gt;, achieving a complete closed loop from business transactions to financial accounting.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-erp&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_product&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Product management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_supplier&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Supplier management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_customer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Customer management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_warehouse&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Warehouse management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_purchase&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Purchase management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_sale&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sales management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_inventory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Inventory management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_finance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Financial management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus ERP Enhancement Architecture"
subgraph "Business Layer"
A1[Purchase Management]
A2[Sales Management]
A3[Inventory Management]
A4[Financial Management]
A5[Production Management]
end
subgraph "Capability Layer"
B1[Supplier Management]
B2[Cost Accounting]
B3[Business Analysis]
end
subgraph "Infrastructure Layer"
C1[Data Permission Engine]
C2[Business Audit]
C3[Sensitive Data Masking]
C4[Multi-Tenancy Isolation]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
A4 --&gt; B3
A5 --&gt; B3
B1 --&gt; C1
B2 --&gt; C2
B3 --&gt; C3
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Yudao Native Capability&lt;/th&gt;
&lt;th&gt;RuoYiPlus ERP Enhancement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Purchase Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic purchasing&lt;/td&gt;
&lt;td&gt;Full purchase process + supplier management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sales Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic sales&lt;/td&gt;
&lt;td&gt;Full sales process + customer management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inventory Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic inventory&lt;/td&gt;
&lt;td&gt;Multi-warehouse + fine-grained location management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Financial Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Receivables/payables + cost accounting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Production Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Simplified production + process management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Report Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple reports&lt;/td&gt;
&lt;td&gt;Business analysis + decision support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic RBAC&lt;/td&gt;
&lt;td&gt;Multi-dimensional data permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Operation logs&lt;/td&gt;
&lt;td&gt;Full-chain business operation audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-purchase-management-enhancement"&gt;2. Purchase Management Enhancement&lt;/h2&gt;
&lt;h3 id="21-purchase-process"&gt;2.1 Purchase Process&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Purchase Process"
A[Purchase Demand] --&gt; B[Purchase Request]
B --&gt; C[Supplier Comparison]
C --&gt; D[Purchase Order]
D --&gt; E[Order Approval]
E --&gt; F[Receiving Appointment]
F --&gt; G[Quality Inspection]
G --&gt; H[Receipt Confirmation]
H --&gt; I[Purchase Settlement]
I --&gt; J[Payment Request]
J --&gt; K[Payment Execution]
end
A --&gt; A1[Sales Forecast]
A --&gt; A2[Inventory Alert]
A --&gt; A3[Demand Aggregation]
C --&gt; C1[Multi-Supplier Comparison]
C --&gt; C2[Supplier Evaluation]
I --&gt; I1[Reconciliation Statement]
I --&gt; I2[Invoice Registration]
&lt;/div&gt;
&lt;h3 id="22-purchase-permission-control"&gt;2.2 Purchase Permission Control&lt;/h3&gt;
&lt;p&gt;The purchase module implements role-based and data-scope-based permission control to ensure purchase data security.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Purchaser&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Personally responsible POs&lt;/td&gt;
&lt;td&gt;Can only view and process their own purchase orders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Purchase Supervisor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Department POs&lt;/td&gt;
&lt;td&gt;Can view and approve all department purchase orders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Finance Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All purchase settlements&lt;/td&gt;
&lt;td&gt;Can view all purchase settlement data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;General Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All purchase data&lt;/td&gt;
&lt;td&gt;Can view all purchase data and approve&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Purchase data permission example&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;roles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;purchase_manager&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PurchaseOrderServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Purchase supervisor can view department purchase orders&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Automatically filters data by department hierarchy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-purchase-audit"&gt;2.3 Purchase Audit&lt;/h3&gt;
&lt;p&gt;All purchase operations record complete audit logs, supporting purchase process traceability.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Purchase Request&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records requester, request time, request reason&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Purchase Order&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records order creation, approval, changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Receiving &amp;amp; Inbound&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records receiving time, quantity, inspection results&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Purchase Settlement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records reconciliation, invoice, payment info&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-sales-management-enhancement"&gt;3. Sales Management Enhancement&lt;/h2&gt;
&lt;h3 id="31-sales-process"&gt;3.1 Sales Process&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Sales Process"
A[Customer Inquiry] --&gt; B[Quotation]
B --&gt; C[Quotation Approval]
C --&gt; D[Quotation Tracking]
D --&gt; E[Sales Order]
E --&gt; F[Order Approval]
F --&gt; G[Inventory Reservation]
G --&gt; H[Outbound &amp; Shipping]
H --&gt; I[Logistics Tracking]
I --&gt; J[Receipt Confirmation]
J --&gt; K[Invoice Issuance]
K --&gt; L[Receivable Registration]
L --&gt; M[Collection Registration]
end
&lt;/div&gt;
&lt;h3 id="32-sales-permission-control"&gt;3.2 Sales Permission Control&lt;/h3&gt;
&lt;p&gt;The sales module implements a four-layer data permission model to ensure strict isolation of sales data by organizational structure.&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Sales Permission Decision"
A[Sales Request] --&gt; B[Permission Resolution]
B --&gt; C{Permission Source}
C --&gt; D[User-Level Permission]
C --&gt; E[Role-Level Permission]
C --&gt; F[Position-Level Permission]
C --&gt; G[Department-Level Permission]
D --&gt; H[Permission Merge]
E --&gt; H
F --&gt; H
G --&gt; H
H --&gt; I[Data Filtering]
I --&gt; J[Return Results]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Salesperson&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Personal orders&lt;/td&gt;
&lt;td&gt;Can only view their own sales orders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sales Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Team orders&lt;/td&gt;
&lt;td&gt;Can view all team sales orders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Regional Director&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Regional orders&lt;/td&gt;
&lt;td&gt;Can view all regional sales orders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;General Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All orders&lt;/td&gt;
&lt;td&gt;Can view all sales orders&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-financial-management-enhancement"&gt;4. Financial Management Enhancement&lt;/h2&gt;
&lt;h3 id="41-financial-management-architecture"&gt;4.1 Financial Management Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Financial Management"
subgraph "Receivables Management"
A1[Accounts Receivable]
A2[Collection Registration]
A3[Reconciliation]
A4[Aging Analysis]
A5[Collection Management]
end
subgraph "Payables Management"
B1[Accounts Payable]
B2[Payment Request]
B3[Payment Execution]
B4[Reconciliation]
B5[Aging Analysis]
end
subgraph "Cost Management"
C1[Purchase Cost]
C2[Sales Cost]
C3[Cost Accounting]
C4[Cost Analysis]
C5[Profit Analysis]
end
subgraph "Financial Reports"
D1[Receivables &amp; Payables Report]
D2[Income &amp; Expense Report]
D3[Profit Report]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
C1 --&gt; C3
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; C5
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;h3 id="42-financial-permission-control"&gt;4.2 Financial Permission Control&lt;/h3&gt;
&lt;p&gt;The financial module implements strict data permission control to ensure financial data security.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Finance Staff&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Assigned books&lt;/td&gt;
&lt;td&gt;Can only view their assigned book data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Finance Supervisor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Department books&lt;/td&gt;
&lt;td&gt;Can view all department book data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Finance Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All books&lt;/td&gt;
&lt;td&gt;Can view all book data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auditor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Read-only&lt;/td&gt;
&lt;td&gt;Can view all financial data but cannot modify&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="43-financial-audit"&gt;4.3 Financial Audit&lt;/h3&gt;
&lt;p&gt;All financial operations record complete audit logs, supporting financial data traceability.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Receivables&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records receivable creation, collection, write-off&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Payables&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records payable creation, payment, write-off&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost Accounting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records cost calculation process&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Invoice Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records invoice issuance, voiding, red-ink offset&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-supplier-management"&gt;5. Supplier Management&lt;/h2&gt;
&lt;h3 id="51-supplier-evaluation"&gt;5.1 Supplier Evaluation&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Supplier Evaluation"
A[Supplier Profile] --&gt; B[Evaluation Dimensions]
B --&gt; C[Quality Dimension 40%]
B --&gt; D[Delivery Dimension 30%]
B --&gt; E[Price Dimension 20%]
B --&gt; F[Service Dimension 10%]
C --&gt; G[Composite Score]
D --&gt; G
E --&gt; G
F --&gt; G
G --&gt; H[Supplier Tiering]
H --&gt; I[Procurement Strategy]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Evaluation Dimension&lt;/th&gt;
&lt;th&gt;Metrics&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Quality Dimension&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Inspection pass rate, return rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Delivery Dimension&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;On-time delivery rate, lead time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Price Dimension&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Price competitiveness, price stability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Service Dimension&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Response speed, service satisfaction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;erp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;supplier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;evaluation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dimensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Quality&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;40&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;quality_rate&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;return_rate&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Delivery&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;delivery_rate&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;lead_time&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Price&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;price_competitiveness&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Service&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;response_time&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;satisfaction&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cycle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;quarterly&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="6-cost-accounting"&gt;6. Cost Accounting&lt;/h2&gt;
&lt;h3 id="61-cost-accounting-methods"&gt;6.1 Cost Accounting Methods&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Accounting Method&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Moving Weighted Average&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time average cost calculation&lt;/td&gt;
&lt;td&gt;General scenarios&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FIFO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Account by receipt order&lt;/td&gt;
&lt;td&gt;High price volatility&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LIFO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Account by latest receipt&lt;/td&gt;
&lt;td&gt;Special industries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Standard Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Account by preset standards&lt;/td&gt;
&lt;td&gt;Manufacturing enterprises&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="62-cost-analysis"&gt;6.2 Cost Analysis&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Analysis Dimension&lt;/th&gt;
&lt;th&gt;Metrics&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Purchase Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unit purchase price, purchase amount, cost trends&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sales Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sales cost, gross margin, cost ratio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inventory Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Inventory value, holding cost, loss cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Profit Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Product profit, customer profit, regional profit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="7-technical-architecture"&gt;7. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-erp-plus"
subgraph "erp-biz"
A1[purchase Purchase Management]
A2[sale Sales Management]
A3[inventory Inventory Management]
A4[finance Financial Management]
A5[production Production Management]
A6[supplier Supplier Management]
A7[cost Cost Accounting]
A8[report Report Analysis]
A9[analytics Business Analysis]
end
subgraph "Permissions &amp; Audit"
B1[permission Permission Control]
B2[audit Audit Logs]
B3[masking Data Masking]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B3
A7 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="8-business-value"&gt;8. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Integrated Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Purchase-sales-inventory-finance integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost Reduction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Purchase optimization, cost accounting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Efficiency Improvement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Process automation, approval workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Transparency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time reports, business analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Decision Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Predictive analysis, optimization suggestions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-dimensional permissions, full-chain audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>WMS Warehouse Management</title><link>https://ruoyiplus.com/en/plus/wms-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/wms-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 30 DOs / 29 Controllers, menu ID starting at 5000, building an intelligent warehousing and supply chain collaboration system&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus WMS provides enterprise-level enhancements around three core areas: &lt;strong&gt;multi-warehouse management&lt;/strong&gt;, &lt;strong&gt;intelligent operations&lt;/strong&gt;, and &lt;strong&gt;precise inventory control&lt;/strong&gt;, achieving a complete warehousing management closed loop from inbound to outbound.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-wms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_receipt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Receiving management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_shipment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shipping management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_movement&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Inventory movement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_check&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Counting management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_qc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;QC management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_damage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Damage management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_replenishment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Replenishment management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_inventory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Inventory management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_item&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Item management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_batch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Batch management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_merchant&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Merchant management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_warehouse&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Warehouse management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus WMS Enhancement Architecture"
subgraph "Warehouse Layer"
A1[Central Warehouse]
A2[Regional Warehouse]
A3[Forward Warehouse]
A4[Store Warehouse]
A5[Virtual Warehouse]
end
subgraph "Operations Layer"
B1[Inbound Management]
B2[Outbound Management]
B3[In-Warehouse Management]
B4[Counting Management]
end
subgraph "Strategy Layer"
C1[Location Recommendation]
C2[Wave Picking]
C3[Inventory Alert]
C4[Replenishment Suggestions]
end
subgraph "Execution Layer"
D1[PDA Mobile Operations]
D2[Task Management]
D3[Operations Monitoring]
end
subgraph "Control Layer"
E1[Warehouse Permissions]
E2[Inventory Permissions]
E3[Operation Audit]
E4[Data Security]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; E1
E1 --&gt; E2
E2 --&gt; E3
E3 --&gt; E4
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Yudao Native Capability&lt;/th&gt;
&lt;th&gt;RuoYiPlus WMS Enhancement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inventory Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic inventory&lt;/td&gt;
&lt;td&gt;Multi-warehouse + fine-grained location management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inbound Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple inbound&lt;/td&gt;
&lt;td&gt;Multi-source inbound + QC process&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Outbound Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple outbound&lt;/td&gt;
&lt;td&gt;Intelligent picking + wave management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inventory Alert&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Multi-dimensional alerts + replenishment suggestions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Warehouse Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;PDA mobile operations + task management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Analytics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Inventory turnover + operational efficiency analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic permissions&lt;/td&gt;
&lt;td&gt;Warehouse-level data permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple logs&lt;/td&gt;
&lt;td&gt;Full-chain inventory operation audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-multi-warehouse-management-system"&gt;2. Multi-Warehouse Management System&lt;/h2&gt;
&lt;h3 id="21-warehouse-architecture"&gt;2.1 Warehouse Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Multi-Warehouse Architecture"
subgraph "Physical Warehouses"
A1[Central Warehouse]
A2[Regional Warehouse]
A3[Forward Warehouse]
A4[Store Warehouse]
A5[3PL Warehouse]
end
subgraph "Virtual Warehouses"
B1[In-Transit Warehouse]
B2[QC Pending Warehouse]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A1 --&gt; A5
A1 --&gt; B1
A1 --&gt; B2
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Warehouse Types&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Central / Branch / Store / 3PL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Warehouse Attributes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Region, type, capacity, operational capability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inventory Transfer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Inter-warehouse transfer, transfer approval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inventory Sync&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time multi-warehouse inventory sync&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intelligent Allocation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Intelligent order split by warehouse for shipping&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="22-warehouse-permission-control"&gt;2.2 Warehouse Permission Control&lt;/h3&gt;
&lt;p&gt;The WMS system implements warehouse-based and data-scope-based permission control to ensure inventory data security.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Warehouse Keeper&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Own warehouse&lt;/td&gt;
&lt;td&gt;Can only manage inventory and operations of their warehouse&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Regional Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Regional warehouses&lt;/td&gt;
&lt;td&gt;Can view all regional warehouse data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HQ Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All warehouses&lt;/td&gt;
&lt;td&gt;Can view all warehouse data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Finance Staff&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Inventory value&lt;/td&gt;
&lt;td&gt;Can view inventory value but cannot modify inventory&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// WMS data permission example&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;warehouse&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;InventoryServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Warehouse keeper can only manage their own warehouse inventory&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Automatically filters data by warehouse&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-inventory-operation-audit"&gt;2.3 Inventory Operation Audit&lt;/h3&gt;
&lt;p&gt;All inventory operations record complete audit logs, supporting inventory change traceability.&lt;/p&gt;
&lt;div class="mermaid"&gt;graph LR
A[Inbound Operation] --&gt; B[Inventory Increase]
C[Outbound Operation] --&gt; D[Inventory Decrease]
E[Transfer Operation] --&gt; F[Inventory Movement]
G[Counting Operation] --&gt; H[Inventory Adjustment]
B -.-&gt; I[Audit Log]
D -.-&gt; I
F -.-&gt; I
H -.-&gt; I
I --&gt; J[Inventory Traceability]
I --&gt; K[Compliance Report]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inbound Record&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records inbound time, quantity, warehouse&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Outbound Record&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records outbound time, quantity, warehouse&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transfer Record&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records transfer time, source warehouse, target warehouse&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Counting Record&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records counting time, counter, discrepancy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inventory Adjustment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records adjustment time, reason, quantity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-fine-grained-location-management"&gt;3. Fine-Grained Location Management&lt;/h2&gt;
&lt;h3 id="31-location-management"&gt;3.1 Location Management&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Location Management"
subgraph "Location Encoding"
A1[Warehouse]
A2[Zone]
A3[Shelf]
A4[Level]
A5[Position]
end
subgraph "Location Types"
B1[Storage Location]
B2[Picking Location]
B3[Staging Location]
B4[Exception Location]
end
subgraph "Location Status"
C1[Empty]
C2[Occupied]
C3[Locked]
C4[Disabled]
end
subgraph "Location Strategy"
D1[Location Recommendation]
D2[Location Optimization]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;wms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;encoding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;WH-ZONE-SHELF-LEVEL-POSITION&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;types&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Storage Location&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;picking&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Picking Location&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;staging&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Staging Location&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Exception Location&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;recommendation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;frequency-based&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Recommend by turnover frequency&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hot-zone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Zone A&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# High-frequency item zone&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-inbound-and-outbound-processes"&gt;4. Inbound and Outbound Processes&lt;/h2&gt;
&lt;h3 id="41-inbound-process"&gt;4.1 Inbound Process&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Inbound Process"
subgraph "Purchase Inbound"
A1[Purchase Order]
A2[Receiving Appointment]
A3[Receiving Registration]
A4[QC Process]
A5[Putaway Operation]
A6[Location Recommendation]
A7[Inbound Confirmation]
end
subgraph "Return Inbound"
B1[Return Request]
B2[Return Approval]
B3[Return Receiving]
B4[QC Process]
B5[Inbound / Scrap]
end
subgraph "Transfer Inbound"
C1[Transfer Order]
C2[In-Transit Tracking]
C3[Receipt Confirmation]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; A6
A6 --&gt; A7
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
C1 --&gt; C2
C2 --&gt; C3
&lt;/div&gt;
&lt;h3 id="42-outbound-process"&gt;4.2 Outbound Process&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Outbound Process"
subgraph "Sales Outbound"
A1[Order Receiving]
A2[Order Validation]
A3[Inventory Reservation]
A4[Wave Generation]
A5[Wave Assignment]
A6[Picking Task]
A7[Picking Operation]
A8[Picking Verification]
A9[Packing Operation]
A10[Shipping Operation]
A11[Logistics Integration]
A12[Outbound Confirmation]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; A6
A6 --&gt; A7
A7 --&gt; A8
A8 --&gt; A9
A9 --&gt; A10
A10 --&gt; A11
A11 --&gt; A12
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="5-inventory-alert-system"&gt;5. Inventory Alert System&lt;/h2&gt;
&lt;h3 id="51-alert-types"&gt;5.1 Alert Types&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Alert Type&lt;/th&gt;
&lt;th&gt;Trigger Condition&lt;/th&gt;
&lt;th&gt;Response Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Insufficient Stock&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stock &amp;lt; Safety stock&lt;/td&gt;
&lt;td&gt;Generate replenishment suggestion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overstock&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Inventory turnover &amp;gt; 90 days&lt;/td&gt;
&lt;td&gt;Promotion suggestion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Expiry Alert&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Days to expiry &amp;lt; 30&lt;/td&gt;
&lt;td&gt;Priority outbound / promotion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Location Overload&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Location occupancy &amp;gt; 90%&lt;/td&gt;
&lt;td&gt;Location adjustment suggestion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Abnormal Inventory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Quality issue locked&lt;/td&gt;
&lt;td&gt;Exception handling reminder&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="52-replenishment-suggestions"&gt;5.2 Replenishment Suggestions&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;wms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replenishment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;safety-stock&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;formula&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;avg_daily_sales * lead_time * safety_factor&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;safety-factor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1.5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;suggestions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;stock &amp;lt; safety_stock&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;create_purchase_suggestion&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;priority&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;high&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;stock &amp;lt; min_stock&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;urgent_purchase&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;priority&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;critical&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="6-technical-architecture"&gt;6. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-wms-plus"
subgraph "wms-biz"
A1[warehouse Warehouse Management]
A2[location Location Management]
A3[inventory Inventory Management]
A4[inbound Inbound Management]
A5[outbound Outbound Management]
A6[wave Wave Management]
A7[picking Picking Management]
A8[task Task Management]
A9[alert Alert Management]
A10[replenishment Replenishment Management]
A11[counting Counting Management]
A12[analytics Data Analytics]
end
subgraph "Permissions &amp; Audit"
B1[permission Permission Control]
B2[audit Audit Logs]
B3[traceability Inventory Traceability]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B2
A7 --&gt; B3
A8 --&gt; B2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="7-business-value"&gt;7. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reduce Inventory Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Precise inventory, reduce overstock&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Improve Operational Efficiency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Intelligent picking, mobile operations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Increase Accuracy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scan-based operations, verification process&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Optimize Locations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Location recommendation, turnover optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Alert Response&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Timely replenishment, expiry management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Warehouse permissions, inventory audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>MES Manufacturing Execution System</title><link>https://ruoyiplus.com/en/plus/mes-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/mes-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, covering production planning, work order management, process routing, quality control, building a digital workshop and intelligent manufacturing execution system&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus MES provides enterprise-level enhancements around three core areas: &lt;strong&gt;intelligent scheduling&lt;/strong&gt;, &lt;strong&gt;quality control&lt;/strong&gt;, and &lt;strong&gt;material traceability&lt;/strong&gt;, achieving a complete manufacturing execution closed loop from production planning to product receipt.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-mes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mes_production_plan&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Production plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mes_work_order&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Work order management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mes_process&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Process management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mes_quality&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quality management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mes_equipment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Equipment management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mes_material&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Material management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mes_traceability&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Traceability management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus MES Enhancement Architecture"
subgraph "Planning Layer"
A1[MPS Master Production Schedule]
A2[MRP Material Requirements Planning]
A3[APS Advanced Planning &amp; Scheduling]
end
subgraph "Execution Layer"
B1[Work Order Management]
B2[Process Routing]
B3[Material Management]
B4[Personnel Management]
end
subgraph "Control Layer"
C1[Quality Management]
C2[Equipment Management]
C3[Data Collection]
C4[Real-Time Monitoring]
end
subgraph "Traceability Layer"
D1[Material Traceability]
D2[Quality Traceability]
D3[Production Traceability]
end
subgraph "Compliance Layer"
E1[Operation Permissions]
E2[Production Audit]
E3[Quality Audit]
E4[Data Encryption]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; E1
E1 --&gt; E2
E2 --&gt; E3
E3 --&gt; E4
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Traditional MES&lt;/th&gt;
&lt;th&gt;RuoYiPlus MES Enhancement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Production Planning&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual scheduling&lt;/td&gt;
&lt;td&gt;Intelligent scheduling + APS integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Production Execution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Paper-based routing&lt;/td&gt;
&lt;td&gt;Electronic work orders + process routing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Quality Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Offline inspection&lt;/td&gt;
&lt;td&gt;Online inspection + SPC analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Equipment Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Equipment ledger&lt;/td&gt;
&lt;td&gt;Equipment monitoring + predictive maintenance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Material Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual material picking&lt;/td&gt;
&lt;td&gt;Intelligent batching + material traceability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Collection&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual entry&lt;/td&gt;
&lt;td&gt;Automatic collection + real-time monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic permissions&lt;/td&gt;
&lt;td&gt;Workshop-level permission control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple logs&lt;/td&gt;
&lt;td&gt;Full-chain production audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-production-planning-and-scheduling"&gt;2. Production Planning and Scheduling&lt;/h2&gt;
&lt;h3 id="21-production-planning-system"&gt;2.1 Production Planning System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Production Planning"
subgraph "Demand Sources"
A1[Sales Orders]
A2[Forecast Orders]
A3[Outsourcing Orders]
end
subgraph "Plan Decomposition"
B1[MPS Master Production Schedule]
B2[MRP Material Requirements Plan]
B3[Procurement Plan]
B4[Production Plan]
B5[Workshop Job Plan]
end
subgraph "Intelligent Scheduling"
C1[APS Scheduling Algorithm]
C2[Capacity Balancing]
C3[Equipment Assignment]
C4[Personnel Assignment]
end
subgraph "Plan Execution"
D1[Work Order Release]
D2[Execution Tracking]
D3[Progress Feedback]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B2 --&gt; B4
B4 --&gt; B5
B5 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;h3 id="22-production-permission-control"&gt;2.2 Production Permission Control&lt;/h3&gt;
&lt;p&gt;The MES system implements workshop and process-based permission control to ensure production data security.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Operator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Own process&lt;/td&gt;
&lt;td&gt;Can only view and operate their own process tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Team Leader&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Own team&lt;/td&gt;
&lt;td&gt;Can view all production tasks of their team&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workshop Director&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Own workshop&lt;/td&gt;
&lt;td&gt;Can view all production data of their workshop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Production Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All workshops&lt;/td&gt;
&lt;td&gt;Can view all workshop production data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// MES data permission example&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;workshop&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;WorkOrderServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Workshop director can view their own workshop work orders&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Automatically filters data by workshop&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-production-operation-audit"&gt;2.3 Production Operation Audit&lt;/h3&gt;
&lt;p&gt;All production operations record complete audit logs, supporting production process traceability.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Work Order Creation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records creator, creation time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Work Order Release&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records release time, recipient&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Process Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records start time, operator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Process Completion&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records completion time, completed quantity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;QC Record&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records inspection time, inspection result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Material Withdrawal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records withdrawal time, withdrawal quantity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-production-execution-management"&gt;3. Production Execution Management&lt;/h2&gt;
&lt;h3 id="31-production-execution-process"&gt;3.1 Production Execution Process&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Production Execution"
subgraph "Work Order Management"
A1[Work Order Creation]
A2[Work Order Approval]
A3[Work Order Release]
A4[Work Order Start]
A5[Work Order Completion]
A6[Work Order Close]
end
subgraph "Process Routing"
B1[Process Start]
B2[Process Operation]
B3[Process QC]
B4[Process Completion]
B5[Process Transfer]
end
subgraph "Material Management"
C1[Material Withdrawal]
C2[Material Consumption]
C3[Excess Material Return]
C4[Material Traceability]
end
subgraph "Personnel Management"
D1[Personnel Dispatch]
D2[Operation Record]
D3[Piece-Rate Statistics]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; A6
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;h3 id="32-electronic-work-orders"&gt;3.2 Electronic Work Orders&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Electronic Work Orders&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Digitized work orders, scan to start&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Process Routing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Process status tracking, routing records&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Completion Reporting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Completed quantity, good/defective products&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Exception Handling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Exception reporting, exception resolution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Progress Tracking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time progress, estimated completion&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-quality-management-enhancement"&gt;4. Quality Management Enhancement&lt;/h2&gt;
&lt;h3 id="41-quality-management-system"&gt;4.1 Quality Management System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Quality Management"
subgraph "QC Configuration"
A1[QC Standards]
A2[QC Items]
A3[QC Methods]
A4[QC Frequency]
end
subgraph "QC Execution"
B1[Incoming QC]
B2[First Article QC]
B3[In-Process QC]
B4[Final QC]
B5[Outgoing QC]
end
subgraph "Quality Analysis"
C1[Defect Statistics]
C2[Root Cause Analysis]
C3[Corrective Actions]
C4[SPC Analysis]
end
subgraph "Quality Traceability"
D1[Batch Traceability]
D2[Process Traceability]
D3[Personnel Traceability]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;h3 id="42-quality-audit"&gt;4.2 Quality Audit&lt;/h3&gt;
&lt;p&gt;All QC operations record complete audit logs, supporting quality data traceability.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;QC Record&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records inspection time, inspector, inspection result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Defect Record&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records defect type, defect cause&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Corrective Action&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records corrective action, execution result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SPC Data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records SPC analysis data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-material-traceability"&gt;5. Material Traceability&lt;/h2&gt;
&lt;h3 id="51-traceability-system"&gt;5.1 Traceability System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Material Traceability"
subgraph "Raw Material Traceability"
A1[Supplier]
A2[Receipt Batch]
A3[QC Result]
A4[Storage Location]
A5[Withdrawal Record]
end
subgraph "Production Traceability"
B1[Production Work Order]
B2[Process Routing]
B3[Consumption Record]
B4[Operator]
B5[Equipment Info]
B6[QC Record]
end
subgraph "Product Traceability"
C1[Finished Batch]
C2[Receipt Record]
C3[Shipping Record]
C4[Customer Order]
C5[Delivery Record]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; B6
B6 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; C5
&lt;/div&gt;
&lt;h3 id="52-traceability-query"&gt;5.2 Traceability Query&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query Direction&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Forward Traceability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Raw material → Finished product → Customer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reverse Traceability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Customer → Finished product → Raw material&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Horizontal Traceability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Same batch product distribution&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-technical-architecture"&gt;6. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-mes-plus"
subgraph "mes-biz"
A1[plan Production Planning]
A2[scheduling Intelligent Scheduling]
A3[workorder Work Order Management]
A4[process Process Management]
A5[quality Quality Management]
A6[equipment Equipment Management]
A7[material Material Management]
A8[traceability Traceability Management]
A9[collection Data Collection]
A10[monitor Real-Time Monitoring]
A11[report Report Analysis]
end
subgraph "Permissions &amp; Audit"
B1[permission Permission Control]
B2[audit Audit Logs]
B3[traceability Traceability Audit]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
A4 --&gt; B2
A5 --&gt; B3
A6 --&gt; B2
A7 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="7-business-value"&gt;7. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Increase Production Efficiency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Intelligent scheduling, process optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Improve Product Quality&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Online inspection, SPC control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reduce Equipment Failure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Predictive maintenance, OEE optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Achieve Traceability Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full-chain traceability, batch management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data-Driven Decisions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time monitoring, analysis reports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Production Traceability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full-chain audit, quality traceability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>PM Project Management</title><link>https://ruoyiplus.com/en/plus/pm-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/pm-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 16 DOs / 15 Controllers, menu ID starting at 2500, building a digital project management and team collaboration system&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus PM centers around three core pillars—&lt;strong&gt;Full Project Lifecycle Management&lt;/strong&gt;, &lt;strong&gt;Multi-Project Collaborative Scheduling&lt;/strong&gt;, and &lt;strong&gt;Project Permission and Audit&lt;/strong&gt;—to deliver enterprise-level enhancement, achieving a complete project management loop from initiation to closure.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-pm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_project&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Project Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_task&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Task Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_warning&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Alert Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_cost&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cost Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_affiliated&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sub-Project Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_track_project&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Project Tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_label&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Label Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_project_member&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Project Members&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus PM Enhanced Architecture"
subgraph "Project Layer"
A1[Project Initiation]
A2[Project Planning]
A3[Project Execution]
A4[Project Monitoring]
A5[Project Closure]
end
subgraph "Capability Layer"
B1[WBS Work Breakdown]
B2[Gantt Chart]
B3[Milestone Management]
B4[Resource Scheduling]
B5[Risk Management]
end
subgraph "Collaboration Layer"
C1[Task Collaboration]
C2[Timesheet Management]
C3[Document Management]
C4[Communication Collaboration]
end
subgraph "Control Layer"
D1[Project Permissions]
D2[Data Isolation]
D3[Operation Audit]
D4[Compliance Reports]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; D4
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Yudao Native Capability&lt;/th&gt;
&lt;th&gt;RuoYiPlus PM Enhanced&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Project Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic project information&lt;/td&gt;
&lt;td&gt;Full lifecycle management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple tasks&lt;/td&gt;
&lt;td&gt;WBS decomposition + dependency relationships&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Progress Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Gantt chart + milestones + critical path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resource Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Resource scheduling + timesheet management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Risk Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Risk identification + response strategies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Project health score + efficiency analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic permissions&lt;/td&gt;
&lt;td&gt;Project-level data permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple logs&lt;/td&gt;
&lt;td&gt;Full-chain project audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-full-project-lifecycle-management"&gt;2. Full Project Lifecycle Management&lt;/h2&gt;
&lt;h3 id="21-lifecycle-phases"&gt;2.1 Lifecycle Phases&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Initiation Phase] --&gt; B[Planning Phase]
B --&gt; C[Execution Phase]
C --&gt; D[Monitoring Phase]
D --&gt; E[Closure Phase]
A --&gt; A1[Requirements Analysis]
A --&gt; A2[Feasibility Assessment]
A --&gt; A3[Project Initiation Approval]
B --&gt; B1[WBS Decomposition]
B --&gt; B2[Schedule Planning]
B --&gt; B3[Resource Planning]
B --&gt; B4[Risk Planning]
C --&gt; C1[Task Assignment]
C --&gt; C2[Task Execution]
C --&gt; C3[Timesheet Reporting]
C --&gt; C4[Progress Reporting]
D --&gt; D1[Progress Monitoring]
D --&gt; D2[Deviation Analysis]
D --&gt; D3[Change Management]
D --&gt; D4[Risk Alert]
E --&gt; E1[Acceptance Review]
E --&gt; E2[Lessons Learned]
E --&gt; E3[Project Archiving]
&lt;/div&gt;
&lt;h3 id="22-project-data-permissions"&gt;2.2 Project Data Permissions&lt;/h3&gt;
&lt;p&gt;The PM system implements data permission control based on projects and roles, ensuring strict isolation of project data by organizational structure.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Project Member&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Participating projects&lt;/td&gt;
&lt;td&gt;Can only view and participate in assigned projects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Project Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Responsible projects&lt;/td&gt;
&lt;td&gt;Can manage all project data, including task assignment and progress adjustment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Department Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Department projects&lt;/td&gt;
&lt;td&gt;Can view progress and resources of all department projects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PMO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All projects&lt;/td&gt;
&lt;td&gt;Can view all project data and perform portfolio analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// PM Data Permission Example&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;project&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ProjectServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Project managers can manage all data of their projects&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Automatically filter tasks, timesheets, documents by project&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Project Member Permission&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;roles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;project_member&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TaskServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Project members can only view their own tasks&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Automatically filter by task assignee&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-project-operation-audit"&gt;2.3 Project Operation Audit&lt;/h3&gt;
&lt;p&gt;All key project operations record complete audit logs, supporting project process traceability.&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Audit Event Collection"
A1[Project Initiation]
A2[Plan Change]
A3[Task Assignment]
A4[Progress Adjustment]
A5[Milestone Change]
A6[Project Closure]
end
subgraph "Audit Processing"
B1[Change Comparison]
B2[Risk Scoring]
B3[Rule Matching]
end
subgraph "Audit Storage"
C1[Operation Logs]
C2[Change History]
C3[Blockchain Notarization]
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
A5 --&gt; B1
A6 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
B3 --&gt; C2
B3 --&gt; C3
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Retention Period&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Project Initiation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records initiator, initiation time, project objectives&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plan Change&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records before/after comparison, change reason&lt;/td&gt;
&lt;td&gt;Project lifecycle + 3 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Assignment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records assigner, assignee, assignment time&lt;/td&gt;
&lt;td&gt;Project lifecycle + 3 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Progress Adjustment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records before/after duration, adjustment reason&lt;/td&gt;
&lt;td&gt;Project lifecycle + 3 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Milestone Change&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records change content, approver&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Project Closure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records closure time, acceptance results&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-wbs-work-breakdown-and-task-management"&gt;3. WBS Work Breakdown and Task Management&lt;/h2&gt;
&lt;h3 id="31-wbs-breakdown-structure"&gt;3.1 WBS Breakdown Structure&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "WBS Work Breakdown"
A[Project] --&gt; B[Phase 1]
A --&gt; C[Phase 2]
A --&gt; D[Phase 3]
B --&gt; B1[Task 1.1]
B --&gt; B2[Task 1.2]
B --&gt; B3[Task 1.3]
C --&gt; C1[Task 2.1]
C --&gt; C2[Task 2.2]
D --&gt; D1[Task 3.1]
D --&gt; D2[Task 3.2]
D --&gt; D3[Task 3.3]
B1 --&gt; B1a[Sub-task 1.1.1]
B1 --&gt; B1b[Sub-task 1.1.2]
end
&lt;/div&gt;
&lt;h3 id="32-task-management"&gt;3.2 Task Management&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Creation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task definition, priority, duration estimation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Assignment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Intelligent assignment by skill/load&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Dependencies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;FS/FF/SS/SF dependency relationships&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sub-tasks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-level sub-task decomposition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Board&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kanban view, list view&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Reminders&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Due reminders, overdue alerts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="33-task-status-flow"&gt;3.3 Task Status Flow&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[To Do] --&gt; B[In Progress]
B --&gt; C[Pending Acceptance]
C --&gt; D[Completed]
B --&gt; E[Blocked]
E --&gt; B
C --&gt; F[Acceptance Failed]
F --&gt; B
D --&gt; G[Closed]
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="4-progress-control"&gt;4. Progress Control&lt;/h2&gt;
&lt;h3 id="41-gantt-chart"&gt;4.1 Gantt Chart&lt;/h3&gt;
&lt;div class="mermaid"&gt;gantt
title Project Progress Gantt Chart Example
dateFormat YYYY-MM-DD
section Requirements Phase
Requirements Analysis :a1, 2024-01-01, 15d
Requirements Review :a2, after a1, 5d
section Design Phase
High-Level Design :b1, after a2, 10d
Detailed Design :b2, after b1, 15d
Design Review :b3, after b2, 5d
section Development Phase
Coding :c1, after b3, 30d
Unit Testing :c2, after c1, 10d
section Testing Phase
Integration Testing :d1, after c2, 15d
Acceptance Testing :d2, after d1, 10d
section Go-Live Phase
Deployment :e1, after d2, 5d
&lt;/div&gt;
&lt;h3 id="42-milestone-management"&gt;4.2 Milestone Management&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Milestone 1: Requirements Confirmed] --&gt; B[Milestone 2: Design Complete]
B --&gt; C[Milestone 3: Development Complete]
C --&gt; D[Milestone 4: Testing Passed]
D --&gt; E[Milestone 5: Official Launch]
A -.-&gt; A1[Plan: 01-20]
B -.-&gt; B1[Plan: 02-15]
C -.-&gt; C1[Plan: 03-30]
D -.-&gt; D1[Plan: 04-20]
E -.-&gt; E1[Plan: 05-01]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Milestone Setting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Key node definition and marking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Progress Tracking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time milestone completion tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deviation Alert&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatic alert for milestone delays&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Change Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Milestone changes require approval workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="43-critical-path-analysis"&gt;4.3 Critical Path Analysis&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A[Task A: 10d] --&gt; C[Task C: 15d]
C --&gt; E[Task E: 10d]
A --&gt; D[Task D: 5d]
D --&gt; F[Task F: 8d]
F --&gt; E
B[Task B: 20d] --&gt; E
style A fill:none
style C fill:none
style E fill:none
style B fill:none
&lt;/div&gt;
&lt;p&gt;Critical path: B -&amp;gt; E = 30 days (minimum project duration)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="5-resource-and-timesheet-management"&gt;5. Resource and Timesheet Management&lt;/h2&gt;
&lt;h3 id="51-resource-scheduling"&gt;5.1 Resource Scheduling&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Resource Scheduling"
A[Resource Demand] --&gt; B{Resource Matching}
B --&gt; C[Skill Matching]
B --&gt; D[Load Assessment]
B --&gt; E[Availability Check]
C --&gt; F[Resource Allocation]
D --&gt; F
E --&gt; F
F --&gt; G[Conflict Detection]
G --&gt; H{Conflict?}
H --&gt;|Yes| I[Resource Coordination]
H --&gt;|No| J[Confirm Allocation]
I --&gt; J
end
&lt;/div&gt;
&lt;h3 id="52-timesheet-management"&gt;5.2 Timesheet Management&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Timesheet Reporting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Report daily hours by task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Timesheet Approval&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Timesheet approval workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Timesheet Statistics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Individual/team/project timesheet statistics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Timesheet Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Utilization rate, overtime analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost Accounting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Labor cost accounting based on timesheets&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timesheet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;daily-max&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;24h &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Maximum daily hours&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weekly-max&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;60h &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Maximum weekly hours&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;approval-required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Approval required&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;overtime-threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;8h &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Overtime threshold&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hourly-rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Default hourly rate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;overtime-multiplier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1.5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Overtime multiplier&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="6-risk-management"&gt;6. Risk Management&lt;/h2&gt;
&lt;h3 id="61-risk-management-process"&gt;6.1 Risk Management Process&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Risk Management"
A[Risk Identification] --&gt; B[Risk Assessment]
B --&gt; C[Risk Classification]
C --&gt; D[Response Strategy]
D --&gt; E[Risk Monitoring]
E --&gt; F{Risk Occurred?}
F --&gt;|Yes| G[Emergency Response]
F --&gt;|No| E
G --&gt; H[Risk Closure]
end
&lt;/div&gt;
&lt;h3 id="62-risk-classification"&gt;6.2 Risk Classification&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Risk Level&lt;/th&gt;
&lt;th&gt;Impact&lt;/th&gt;
&lt;th&gt;Occurrence Probability&lt;/th&gt;
&lt;th&gt;Response Requirement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Critical Risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Project halted&lt;/td&gt;
&lt;td&gt;High probability&lt;/td&gt;
&lt;td&gt;Immediate response plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;High Risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Severe delay&lt;/td&gt;
&lt;td&gt;Relatively high probability&lt;/td&gt;
&lt;td&gt;Response plan within 3 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Medium Risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Partial impact&lt;/td&gt;
&lt;td&gt;Medium probability&lt;/td&gt;
&lt;td&gt;Preventive measures within 1 week&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Low Risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Minor impact&lt;/td&gt;
&lt;td&gt;Low probability&lt;/td&gt;
&lt;td&gt;Continuous monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="7-project-data-analysis"&gt;7. Project Data Analysis&lt;/h2&gt;
&lt;h3 id="71-project-health-score"&gt;7.1 Project Health Score&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Project Health Assessment"
A[Schedule Deviation] --&gt; E[Health Score]
B[Cost Deviation] --&gt; E
C[Quality Metrics] --&gt; E
D[Risk Status] --&gt; E
E --&gt; F{Health Level}
F --&gt;|&gt;=90| G[Green - Healthy]
F --&gt;|70-89| H[Yellow - Attention]
F --&gt;|&lt;70| I[Red - Alert]
end
&lt;/div&gt;
&lt;h3 id="72-analysis-dimensions"&gt;7.2 Analysis Dimensions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Analysis Dimension&lt;/th&gt;
&lt;th&gt;Metrics&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Progress Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Planned completion rate, milestone achievement rate, schedule deviation rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resource Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Resource utilization rate, timesheet distribution, load balance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Budget execution rate, labor cost, deviation analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Quality Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Defect density, rework rate, acceptance pass rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Efficiency Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task completion efficiency, team collaboration efficiency&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="8-multi-project-management-pmo"&gt;8. Multi-Project Management (PMO)&lt;/h2&gt;
&lt;h3 id="81-pmo-view"&gt;8.1 PMO View&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "PMO Multi-Project Management"
subgraph "Project Portfolio"
A1[Strategic Project A]
A2[Strategic Project B]
A3[Regular Project C]
A4[Regular Project D]
end
subgraph "Resource Pool"
B1[Development Resource Pool]
B2[Testing Resource Pool]
B3[Design Resource Pool]
end
subgraph "PMO Control"
C1[Project Priority]
C2[Resource Coordination]
C3[Portfolio Analysis]
C4[Health Monitoring]
end
end
A1 --&gt; C1
A2 --&gt; C1
A3 --&gt; C2
A4 --&gt; C2
C1 --&gt; C3
C2 --&gt; C3
C3 --&gt; C4
&lt;/div&gt;
&lt;h3 id="82-pmo-permissions"&gt;8.2 PMO Permissions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PMO Director&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All projects&lt;/td&gt;
&lt;td&gt;Can view all project data and adjust project priorities&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PMO Specialist&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Designated project portfolio&lt;/td&gt;
&lt;td&gt;Can view designated portfolio data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resource Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Resource pool&lt;/td&gt;
&lt;td&gt;Can manage resource allocation but cannot view project business data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="9-technical-architecture"&gt;9. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-pm-plus"
subgraph "pm-biz"
A1[project - Project Management]
A2[wbs - WBS Decomposition]
A3[task - Task Management]
A4[schedule - Schedule Management]
A5[milestone - Milestone Management]
A6[resource - Resource Management]
A7[timesheet - Timesheet Management]
A8[risk - Risk Management]
A9[document - Document Management]
A10[analytics - Data Analysis]
end
subgraph "Permissions and Audit"
B1[permission - Permission Control]
B2[audit - Audit Logs]
B3[compliance - Compliance Reports]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B1
A7 --&gt; B2
A8 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="10-business-value"&gt;10. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Progress Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Gantt chart, milestones, critical path analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resource Optimization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Intelligent scheduling, load balancing, timesheet management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Risk Pre-Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Risk identification, alert mechanism, emergency response&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Efficient Collaboration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task collaboration, document sharing, communication collaboration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data-Driven&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Project health score, efficiency analysis, decision support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance and Traceability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Project-level permissions, full-chain audit, change traceability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>IOT Internet of Things Platform</title><link>https://ruoyiplus.com/en/plus/iot-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/iot-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, covering device management, device grouping, alert configuration and alert records, building a device connectivity, data collection and intelligent operations system&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus IOT centers around three core pillars—&lt;strong&gt;Multi-Protocol Device Access&lt;/strong&gt;, &lt;strong&gt;Real-Time Data Processing&lt;/strong&gt;, and &lt;strong&gt;Device Security Control&lt;/strong&gt;—to deliver enterprise-level enhancement, achieving a complete IoT solution from device access to intelligent operations.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-iot&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;iot_device&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Device Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;iot_device_group&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Device Grouping&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;iot_alert_config&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Alert Configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;iot_alert_record&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Alert Records&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus IOT Enhanced Architecture"
subgraph "Device Access Layer"
A1[MQTT Protocol]
A2[CoAP Protocol]
A3[HTTP/HTTPS]
A4[Modbus]
A5[OPC-UA]
A6[LoRaWAN]
end
subgraph "Gateway Layer"
B1[Edge Gateway]
B2[Protocol Gateway]
B3[Security Gateway]
end
subgraph "Platform Layer"
C1[Device Management]
C2[Data Collection]
C3[Rule Engine]
C4[Alert Management]
end
subgraph "Application Layer"
D1[Real-Time Monitoring]
D2[Predictive Maintenance]
D3[Data Analysis]
end
subgraph "Security Layer"
E1[Device Authentication]
E2[Permission Control]
E3[Operation Audit]
E4[Data Encryption]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B2
B1 --&gt; C1
B2 --&gt; C1
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
C1 --&gt; E1
C2 --&gt; E2
C3 --&gt; E3
C4 --&gt; E4
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Traditional Solution&lt;/th&gt;
&lt;th&gt;RuoYiPlus IOT Enhanced&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Device Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Single protocol access&lt;/td&gt;
&lt;td&gt;Multi-protocol multi-gateway access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Collection&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual collection&lt;/td&gt;
&lt;td&gt;Automatic collection with real-time reporting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Processing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple storage&lt;/td&gt;
&lt;td&gt;Stream processing + rule engine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Device Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Device ledger&lt;/td&gt;
&lt;td&gt;Device lifecycle management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Operations Monitoring&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Offline monitoring&lt;/td&gt;
&lt;td&gt;Real-time monitoring + predictive maintenance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Historical query&lt;/td&gt;
&lt;td&gt;Real-time analysis + AI prediction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic permissions&lt;/td&gt;
&lt;td&gt;Device-level permission control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple logs&lt;/td&gt;
&lt;td&gt;Full-chain device operation audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-multi-protocol-device-access"&gt;2. Multi-Protocol Device Access&lt;/h2&gt;
&lt;h3 id="21-protocol-adaptation-architecture"&gt;2.1 Protocol Adaptation Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Protocol Adaptation Layer"
subgraph "IoT Standard Protocols"
A1[MQTT]
A2[CoAP]
end
subgraph "General Protocols"
B1[HTTP/HTTPS]
B2[TCP/UDP]
end
subgraph "Industrial Protocols"
C1[Modbus]
C2[OPC-UA]
end
subgraph "Low-Power Protocols"
D1[LoRaWAN]
end
end
subgraph "Gateway Layer"
E1[Edge Gateway]
E2[Protocol Gateway]
E3[Security Gateway]
end
subgraph "Platform Layer"
F1[Device Registration]
F2[Device Authentication]
F3[Connection Management]
F4[Data Reporting]
end
A1 --&gt; E1
A2 --&gt; E1
B1 --&gt; E2
B2 --&gt; E2
C1 --&gt; E2
C2 --&gt; E2
D1 --&gt; E3
E1 --&gt; F1
E2 --&gt; F1
E3 --&gt; F1
F1 --&gt; F2
F2 --&gt; F3
F3 --&gt; F4
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protocol Type&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Characteristics&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MQTT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;IoT standard&lt;/td&gt;
&lt;td&gt;Lightweight, publish/subscribe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CoAP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Resource-constrained devices&lt;/td&gt;
&lt;td&gt;UDP, low power&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HTTP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;General access&lt;/td&gt;
&lt;td&gt;RESTful, easy integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Modbus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Industrial devices&lt;/td&gt;
&lt;td&gt;PLC, sensors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OPC-UA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Industrial automation&lt;/td&gt;
&lt;td&gt;MES/SCADA integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LoRaWAN&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Wide-area IoT&lt;/td&gt;
&lt;td&gt;Low power, long range&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-device-lifecycle-management"&gt;3. Device Lifecycle Management&lt;/h2&gt;
&lt;h3 id="31-device-lifecycle"&gt;3.1 Device Lifecycle&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Device Registration] --&gt; B[Device Authentication]
B --&gt; C[Device Activation]
C --&gt; D[Device Operation]
D --&gt; E[Device Maintenance]
E --&gt; F[Device Decommissioning]
A --&gt; A1[Device Modeling]
A --&gt; A2[Device Type]
A --&gt; A3[Device Properties]
B --&gt; B1[Token Auth]
B --&gt; B2[Certificate Auth]
B --&gt; B3[Key Auth]
C --&gt; C1[Device Connection]
C --&gt; C2[Data Reporting]
C --&gt; C3[Command Issuance]
D --&gt; D1[Status Monitoring]
D --&gt; D2[Alert Management]
D --&gt; D3[Remote Maintenance]
E --&gt; E1[Device Diagnostics]
E --&gt; E2[Fault Handling]
E --&gt; E3[Firmware Upgrade]
F --&gt; F1[Device Deactivation]
F --&gt; F2[Device Deregistration]
F --&gt; F3[Data Archiving]
&lt;/div&gt;
&lt;h3 id="32-device-permission-control"&gt;3.2 Device Permission Control&lt;/h3&gt;
&lt;p&gt;The IOT platform implements device-level permission control to ensure device operation security.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Device Level&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Single device&lt;/td&gt;
&lt;td&gt;Can only operate specified devices&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Device Group&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Device grouping&lt;/td&gt;
&lt;td&gt;Can operate all devices within the group&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Region Level&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Regional devices&lt;/td&gt;
&lt;td&gt;Can operate all devices within the region&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Global Level&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All devices&lt;/td&gt;
&lt;td&gt;Can operate all devices&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Device Permission Example&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;device_group&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DeviceServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Device group admins can only operate devices within their group&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Automatically filter by device group&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="33-device-operation-audit"&gt;3.3 Device Operation Audit&lt;/h3&gt;
&lt;p&gt;All device operations record complete audit logs, supporting device operation traceability.&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Device Audit"
A[Device Operation] --&gt; B[Operation Record]
B --&gt; C[Command Issuance]
B --&gt; D[Configuration Update]
B --&gt; E[Firmware Upgrade]
B --&gt; F[Data Query]
C --&gt; G[Audit Log]
D --&gt; G
E --&gt; G
F --&gt; G
G --&gt; H[Operation Traceability]
G --&gt; I[Compliance Reports]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Device Registration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records device registration info, registration time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Device Authentication&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records authentication method, authentication result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Command Issuance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records command content, issuance time, execution result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Configuration Update&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records configuration changes, before/after comparison&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Firmware Upgrade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records upgrade version, upgrade time, upgrade result&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-data-collection-and-processing"&gt;4. Data Collection and Processing&lt;/h2&gt;
&lt;h3 id="41-data-processing-flow"&gt;4.1 Data Processing Flow&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Data Processing"
subgraph "Data Collection"
A1[Device Reporting]
A2[Data Parsing]
A3[Format Conversion]
A4[Data Validation]
A5[Data Cleansing]
end
subgraph "Data Processing"
B1[Stream Processing]
B2[Real-Time Computing]
B3[Rule Engine]
B4[Data Aggregation]
end
subgraph "Data Storage"
C1[Time-Series Database]
C2[Relational Database]
C3[Object Storage]
end
subgraph "Data Distribution"
D1[Message Queue]
D2[Downstream Systems]
D3[Real-Time Push]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; C1
B4 --&gt; C2
B4 --&gt; C3
C1 --&gt; D1
C2 --&gt; D2
C3 --&gt; D3
&lt;/div&gt;
&lt;h3 id="42-rule-engine"&gt;4.2 Rule Engine&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;iot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Temperature Alert&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;temperature &amp;gt; 80&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;High Temperature Alert&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Operations Personnel&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Device Cooling&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Device Linkage&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;motion_detected == true&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;light_on&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;camera_record&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Data Aggregation&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;time_window = 5m&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;aggregate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;avg(temperature)&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;store&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Aggregated Data&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rule Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Alert Rules&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Threshold alerts, trend alerts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Linkage Rules&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Device linkage, scenario linkage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Computation Rules&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time computation, data aggregation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Notification Rules&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Message push, alert notifications&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-device-operations-enhancement"&gt;5. Device Operations Enhancement&lt;/h2&gt;
&lt;h3 id="51-alert-management"&gt;5.1 Alert Management&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Alert Workflow"
A[Rule Triggered] --&gt; B[Alert Generation]
B --&gt; C[Alert Classification]
C --&gt; D[Alert Notification]
D --&gt; E[Alert Acknowledgment]
E --&gt; F[Alert Processing]
F --&gt; G[Alert Closure]
C --&gt; C1[Critical Alert]
C --&gt; C2[Important Alert]
C --&gt; C3[General Alert]
C --&gt; C4[Info Alert]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Alert Level&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Response Requirement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Critical Alert&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Device failure, security risk&lt;/td&gt;
&lt;td&gt;Immediate response&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Important Alert&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Parameter anomaly, performance degradation&lt;/td&gt;
&lt;td&gt;30-minute response&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;General Alert&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Minor anomaly, early warning&lt;/td&gt;
&lt;td&gt;2-hour response&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Info Alert&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Information notification, status change&lt;/td&gt;
&lt;td&gt;Same-day processing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="52-predictive-maintenance"&gt;5.2 Predictive Maintenance&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fault Prediction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI model-based fault prediction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lifespan Prediction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Device lifespan prediction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maintenance Suggestions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Intelligent maintenance recommendations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Spare Parts Alert&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Spare parts demand prediction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-technical-architecture"&gt;6. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-iot-plus"
subgraph "iot-biz"
A1[device - Device Management]
A2[protocol - Protocol Adaptation]
A3[gateway - Gateway Management]
A4[data - Data Processing]
A5[rule - Rule Engine]
A6[alert - Alert Management]
A7[monitor - Real-Time Monitoring]
A8[maintenance - Maintenance Management]
A9[edge - Edge Computing]
A10[analytics - Data Analysis]
end
subgraph "Permissions and Audit"
B1[permission - Permission Control]
B2[audit - Audit Logs]
B3[security - Security Authentication]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B3
A4 --&gt; B2
A5 --&gt; B2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="7-business-value"&gt;7. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Device Visibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time monitoring, status transparency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intelligent Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Predictive maintenance, intelligent alerts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fault Reduction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fault prediction, rapid response&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Value&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Data analysis, AI enablement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Edge Intelligence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Local computing, edge-cloud collaboration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Device authentication, operation audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Asset Management</title><link>https://ruoyiplus.com/en/plus/asset-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/asset-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 4 DOs / 4 Controllers, menu ID starting from 10000, building an enterprise asset full-lifecycle digital management system&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning--architecture"&gt;1. Enhancement Positioning &amp;amp; Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus Asset builds upon Yudao OA&amp;rsquo;s native asset management, providing enterprise-grade enhancements around five core areas: &lt;strong&gt;full asset lifecycle management&lt;/strong&gt;, &lt;strong&gt;multi-dimensional asset accounting&lt;/strong&gt;, &lt;strong&gt;intelligent inventory &amp;amp; IoT tracking&lt;/strong&gt;, and &lt;strong&gt;asset permissions &amp;amp; auditing&lt;/strong&gt;, achieving a complete asset closed loop from procurement to disposal.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-asset&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;asset_category&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Asset Category&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;asset_goods&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Asset Goods&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;asset_info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Asset Information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;asset_lifecycle&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Asset Lifecycle&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus Asset Enhanced Architecture"
subgraph "Asset Ledger Layer"
A1[Fixed Assets]
A2[Intangible Assets]
A3[IT Assets]
A4[Low-value Consumables]
end
subgraph "Lifecycle Layer"
B1[Procurement &amp; Inbound]
B2[Assignment &amp; Allocation]
B3[Transfer &amp; Relocation]
B4[Maintenance &amp; Repair]
B5[Scrap &amp; Disposal]
end
subgraph "Accounting Layer"
C1[Depreciation Management]
C2[Value Assessment]
C3[Impairment Processing]
C4[Cost Allocation]
end
subgraph "Intelligence Layer"
D1[IoT Asset Tracking]
D2[Smart Inventory]
D3[RFID/Barcode]
D4[Asset Analytics]
end
subgraph "Control Layer"
E1[Asset Permissions]
E2[Data Isolation]
E3[Operation Audit]
E4[Compliance Reporting]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; D4
D4 --&gt; E1
E1 --&gt; E2
E2 --&gt; E3
E3 --&gt; E4
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Yudao Native Capability&lt;/th&gt;
&lt;th&gt;RuoYiPlus Asset Enhancement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Asset Types&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic classification&lt;/td&gt;
&lt;td&gt;Full coverage: Fixed/Intangible/IT/Low-value consumables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lifecycle&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Check-out/return&lt;/td&gt;
&lt;td&gt;Procurement → Assignment → Transfer → Maintenance → Disposal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Depreciation Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Multiple depreciation methods + auto accrual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Asset Inventory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual inventory&lt;/td&gt;
&lt;td&gt;RFID/Barcode smart inventory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IoT Tracking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Real-time positioning + geofencing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Financial Integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Linked with ERP financial modules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic permissions&lt;/td&gt;
&lt;td&gt;Org-level + asset-category-level data permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple logging&lt;/td&gt;
&lt;td&gt;Full-chain asset audit + blockchain proof of existence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-asset-full-lifecycle-management"&gt;2. Asset Full-Lifecycle Management&lt;/h2&gt;
&lt;h3 id="21-lifecycle-stages"&gt;2.1 Lifecycle Stages&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Procurement &amp; Inbound] --&gt; B[Assignment &amp; Allocation]
B --&gt; C[In-Use Management]
C --&gt; D[Transfer &amp; Relocation]
D --&gt; E[Maintenance &amp; Repair]
E --&gt; F[Scrap &amp; Disposal]
A --&gt; A1[Purchase Request]
A --&gt; A2[Acceptance &amp; Inbound]
A --&gt; A3[Asset Numbering]
A --&gt; A4[Label Printing]
B --&gt; B1[Assignment Request]
B --&gt; B2[Approval Workflow]
B --&gt; B3[Asset Allocation]
C --&gt; C1[Usage Registration]
C --&gt; C2[Status Monitoring]
C --&gt; C3[Location Tracking]
D --&gt; D1[Transfer Request]
D --&gt; D2[Approval Confirmation]
D --&gt; D3[Handover &amp; Receipt]
E --&gt; E1[Repair Request]
E --&gt; E2[Repair Record]
E --&gt; E3[Acceptance Confirmation]
F --&gt; F1[Disposal Assessment]
F --&gt; F2[Residual Value Processing]
F --&gt; F3[Asset Deregistration]
&lt;/div&gt;
&lt;h3 id="22-asset-classification-system"&gt;2.2 Asset Classification System&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Asset Category&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Typical Assets&lt;/th&gt;
&lt;th&gt;Management Requirements&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fixed Assets&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Useful life &amp;gt; 1 year, relatively high unit value&lt;/td&gt;
&lt;td&gt;Office equipment, vehicles, furniture&lt;/td&gt;
&lt;td&gt;Depreciation accrual + annual inventory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intangible Assets&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Long-term assets without physical form&lt;/td&gt;
&lt;td&gt;Software licenses, patents, trademarks&lt;/td&gt;
&lt;td&gt;Amortization management + value assessment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IT Assets&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Information technology related assets&lt;/td&gt;
&lt;td&gt;Servers, network equipment, terminals&lt;/td&gt;
&lt;td&gt;Lifecycle + security compliance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Low-value Consumables&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low-value, fast-consuming assets&lt;/td&gt;
&lt;td&gt;Office supplies, tools&lt;/td&gt;
&lt;td&gt;Batch management + inventory control&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="23-asset-data-permissions"&gt;2.3 Asset Data Permissions&lt;/h3&gt;
&lt;p&gt;The Asset system implements multi-dimensional data permission control based on organization and asset categories.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Asset Administrator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Assets within jurisdiction&lt;/td&gt;
&lt;td&gt;Can manage asset inbound, allocation, transfer, and disposal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Department Asset Admin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Department assets&lt;/td&gt;
&lt;td&gt;Can manage assets assigned to their department&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Regular Employee&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Personally used assets&lt;/td&gt;
&lt;td&gt;Can only view assets assigned to themselves&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Financial Administrator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All assets&lt;/td&gt;
&lt;td&gt;Can view asset value and depreciation data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auditor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All assets&lt;/td&gt;
&lt;td&gt;Read-only access + audit logs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Asset data permission example&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;asset&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AssetServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Asset administrators can manage all assets within their jurisdiction&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Automatically filtered by organization + asset category&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Department asset administrator permission&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;roles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dept_asset_admin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DeptAssetServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Can only manage assets assigned to their department&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Automatically filtered by department&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="3-depreciation-management"&gt;3. Depreciation Management&lt;/h2&gt;
&lt;h3 id="31-depreciation-methods"&gt;3.1 Depreciation Methods&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Depreciation Method&lt;/th&gt;
&lt;th&gt;Formula&lt;/th&gt;
&lt;th&gt;Applicable Scenarios&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Straight-line&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;(Cost - Residual Value) / Useful Life&lt;/td&gt;
&lt;td&gt;General fixed assets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Units of Production&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;(Cost - Residual Value) / Total Output × Current Output&lt;/td&gt;
&lt;td&gt;Vehicles, production equipment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Double Declining Balance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Net Book Value × (2 / Useful Life)&lt;/td&gt;
&lt;td&gt;Rapidly evolving technology equipment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sum of Years&amp;rsquo; Digits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;(Cost - Residual Value) × Remaining Years / Sum of Years&lt;/td&gt;
&lt;td&gt;Assets with heavy early wear&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="32-depreciation-process"&gt;3.2 Depreciation Process&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Depreciation Management"
A[Asset Inbound] --&gt; B[Set Depreciation Parameters]
B --&gt; C[Select Depreciation Method]
C --&gt; D[Monthly Auto Accrual]
D --&gt; E{Accrual Result}
E --&gt; F[Generate Depreciation Voucher]
E --&gt; G[Update Net Asset Value]
F --&gt; H[Financial Reconciliation]
G --&gt; H
H --&gt; I{Asset Status}
I --&gt;|In Use| D
I --&gt;|Disposed| J[Stop Accrual]
I --&gt;|Impaired| K[Impairment Processing]
end
&lt;/div&gt;
&lt;h3 id="33-depreciation-configuration"&gt;3.3 Depreciation Configuration&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;asset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;depreciation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;straight-line &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Straight-line method&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;work-quantity &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Units of production method&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;double-declining &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Double declining balance method&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;sum-of-years &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Sum of years&amp;#39; digits method&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;auto-calculate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Auto accrual&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;calculate-day&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Monthly accrual day&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;residual-rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0.05&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Default residual rate 5%&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min-value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Minimum asset value for depreciation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;electronic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;straight-line&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;years&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vehicle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;work-quantity&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;years&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;furniture&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;straight-line&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;years&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-asset-inventory"&gt;4. Asset Inventory&lt;/h2&gt;
&lt;h3 id="41-inventory-process"&gt;4.1 Inventory Process&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Asset Inventory"
A[Inventory Plan] --&gt; B[Inventory Preparation]
B --&gt; C[Inventory Execution]
C --&gt; D[Discrepancy Handling]
D --&gt; E[Inventory Report]
A --&gt; A1[Define Inventory Scope]
A --&gt; A2[Assign Inventory Personnel]
A --&gt; A3[Set Inventory Schedule]
B --&gt; B1[Print Inventory Checklist]
B --&gt; B2[Prepare Inventory Tools]
B --&gt; B3[Freeze Asset Changes]
C --&gt; C1[Scan/RFID Inventory]
C --&gt; C2[Photo Evidence]
C --&gt; C3[Record Asset Status]
D --&gt; D1[Discrepancy Analysis]
D --&gt; D2[Surplus Processing]
D --&gt; D3[Shortage Processing]
E --&gt; E1[Generate Inventory Report]
E --&gt; E2[Approval Confirmation]
E --&gt; E3[Update Asset Ledger]
end
&lt;/div&gt;
&lt;h3 id="42-smart-inventory-technology"&gt;4.2 Smart Inventory Technology&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Inventory Method&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Applicable Scenarios&lt;/th&gt;
&lt;th&gt;Efficiency Improvement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Barcode Inventory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;QR code scanning&lt;/td&gt;
&lt;td&gt;General assets&lt;/td&gt;
&lt;td&gt;3-5x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RFID Inventory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Radio frequency identification&lt;/td&gt;
&lt;td&gt;Large-volume assets&lt;/td&gt;
&lt;td&gt;10-20x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IoT Inventory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sensor auto-reporting&lt;/td&gt;
&lt;td&gt;High-value/mobile assets&lt;/td&gt;
&lt;td&gt;Real-time inventory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mobile Inventory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mobile APP&lt;/td&gt;
&lt;td&gt;Dispersed assets&lt;/td&gt;
&lt;td&gt;Anytime, anywhere&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="43-iot-asset-tracking"&gt;4.3 IoT Asset Tracking&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "IoT Asset Tracking"
subgraph "Perception Layer"
A1[RFID Tags]
A2[GPS Trackers]
A3[Environmental Sensors]
end
subgraph "Network Layer"
B1[RFID Readers]
B2[4G/5G Gateways]
B3[WiFi Positioning]
end
subgraph "Platform Layer"
C1[Asset Positioning]
C2[Trajectory Tracking]
C3[Geofencing]
C4[Anomaly Alerts]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
B1 --&gt; C1
B2 --&gt; C2
B3 --&gt; C3
C1 --&gt; C4
C2 --&gt; C4
C3 --&gt; C4
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="5-asset-operation-audit"&gt;5. Asset Operation Audit&lt;/h2&gt;
&lt;h3 id="51-audit-events"&gt;5.1 Audit Events&lt;/h3&gt;
&lt;p&gt;All key asset operations are recorded with complete audit logs, supporting full-chain asset traceability.&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Audit Event Collection"
A1[Asset Inbound]
A2[Asset Assignment]
A3[Asset Transfer]
A4[Asset Repair]
A5[Asset Disposal]
A6[Depreciation Accrual]
A7[Inventory Operations]
end
subgraph "Audit Processing"
B1[Change Comparison]
B2[Compliance Check]
B3[Risk Assessment]
end
subgraph "Audit Storage"
C1[Operation Logs]
C2[Change History]
C3[Blockchain Proof]
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
A5 --&gt; B1
A6 --&gt; B1
A7 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
B3 --&gt; C2
B3 --&gt; C3
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Retention Period&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Asset Inbound&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records procurement info, acceptor, inbound time&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Asset Assignment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records assignee, assignment time, approver&lt;/td&gt;
&lt;td&gt;Asset lifecycle + 5 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Asset Transfer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records pre/post transfer location, transfer reason&lt;/td&gt;
&lt;td&gt;Asset lifecycle + 5 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Asset Repair&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records repair details, cost, service provider&lt;/td&gt;
&lt;td&gt;Asset lifecycle + 5 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Asset Disposal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records disposal reason, residual value, disposal method&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Depreciation Accrual&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records monthly depreciation amount, accumulated depreciation&lt;/td&gt;
&lt;td&gt;Asset lifecycle + 5 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inventory Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records inventory personnel, inventory time, inventory results&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="52-audit-permissions"&gt;5.2 Audit Permissions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Audit Permission&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Asset Administrator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;View audit logs for assets under jurisdiction&lt;/td&gt;
&lt;td&gt;Can view audit records for assets within their jurisdiction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Department Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;View department asset audit&lt;/td&gt;
&lt;td&gt;Can view audit records for department assets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auditor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;View all asset audit&lt;/td&gt;
&lt;td&gt;Read-only access, can export audit reports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;System Administrator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manage audit configuration&lt;/td&gt;
&lt;td&gt;Can configure audit rules and retention policies&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-asset-analytics"&gt;6. Asset Analytics&lt;/h2&gt;
&lt;h3 id="61-analysis-dimensions"&gt;6.1 Analysis Dimensions&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Asset Analytics"
subgraph "Asset Overview"
A1[Total Assets]
A2[Total Asset Value]
A3[Asset Distribution]
end
subgraph "Usage Analysis"
B1[Utilization Analysis]
B2[Idle Analysis]
B3[Efficiency Assessment]
end
subgraph "Financial Analysis"
C1[Depreciation Analysis]
C2[Maintenance Cost]
C3[Net Asset Value]
end
subgraph "Decision Support"
D1[Purchase Suggestions]
D2[Disposal Suggestions]
D3[Optimization Plans]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B3
B1 --&gt; C1
B2 --&gt; C2
B3 --&gt; C3
C1 --&gt; D1
C2 --&gt; D2
C3 --&gt; D3
&lt;/div&gt;
&lt;h3 id="62-core-metrics"&gt;6.2 Core Metrics&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Calculation Method&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Asset Utilization Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Actual usage time / Planned usage time&lt;/td&gt;
&lt;td&gt;Actual hours ÷ Planned hours × 100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Idle Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Idle assets / Total assets&lt;/td&gt;
&lt;td&gt;Idle asset count ÷ Total asset count × 100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maintenance Cost Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Maintenance cost / Asset original value&lt;/td&gt;
&lt;td&gt;Annual maintenance cost ÷ Asset original value × 100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Net Asset Value Ratio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Net asset value / Asset original value&lt;/td&gt;
&lt;td&gt;Net asset value ÷ Asset original value × 100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inventory Accuracy Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Matching records / Total inventory count&lt;/td&gt;
&lt;td&gt;Matching asset count ÷ Total inventory count × 100%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="7-technical-architecture"&gt;7. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-asset-plus"
subgraph "asset-biz"
A1[ledger]
A2[lifecycle]
A3[depreciation]
A4[inventory]
A5[maintenance]
A6[disposal]
A7[IoT tracking]
A8[analytics]
end
subgraph "Permissions &amp; Audit"
B1[permission]
B2[audit]
B3[compliance]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B2
A7 --&gt; B1
A8 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="8-business-value"&gt;8. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Account-Reality Alignment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Smart inventory + IoT tracking ensures account-reality consistency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Accurate depreciation accounting + maintenance cost analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Asset Optimization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Utilization analysis + idle alerts + purchase suggestions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance Traceability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full-chain audit + blockchain proof + compliance reports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Efficiency Improvement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automated inventory + mobile operations + intelligent analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Risk Prevention&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Asset loss alerts + geofencing + anomaly alerts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>OA Administrative Office</title><link>https://ruoyiplus.com/en/plus/oa-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/oa-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 48 DOs / 27 Controllers, menu ID starting at 3000, building a digital administrative office and workflow collaboration system&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus OA centers around three core pillars—&lt;strong&gt;Intelligent Approval&lt;/strong&gt;, &lt;strong&gt;Document Management&lt;/strong&gt;, and &lt;strong&gt;Administrative Resource Control&lt;/strong&gt;—to deliver enterprise-level enhancement, achieving full-process digitalization from workflow approval to administrative management.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-oa&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_workflow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Workflow Approval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_meeting_room&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Meeting Room Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;File Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_knowledge_base&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Knowledge Base&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_car&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vehicle Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_schedule&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Schedule Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_seal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Seal Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_material&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Material Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_form&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Form Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_information&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Information Management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus OA Enhanced Architecture"
subgraph "Workflow Layer"
A1[Intelligent Approval]
A2[Document Management]
A3[Workflow Designer]
end
subgraph "Collaboration Layer"
B1[Schedule Management]
B2[Meeting Management]
B3[Task Collaboration]
end
subgraph "Administrative Layer"
C1[Asset Management]
C2[Seal Management]
C3[Attendance Management]
end
subgraph "Control Layer"
D1[Approval Permissions]
D2[Workflow Audit]
D3[Data Security]
D4[Compliance Reports]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; D4
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Yudao Native OA&lt;/th&gt;
&lt;th&gt;RuoYiPlus OA Enhanced&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workflow Approval&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic approval&lt;/td&gt;
&lt;td&gt;Intelligent approval + workflow optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Document Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Full-process document management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Schedule Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple schedule&lt;/td&gt;
&lt;td&gt;Team schedule + meeting management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Task collaboration + progress tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Administrative Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Asset management + seal management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mobile Office&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple mobile&lt;/td&gt;
&lt;td&gt;Full-featured mobile office&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic permissions&lt;/td&gt;
&lt;td&gt;Approval-level hierarchical permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple logs&lt;/td&gt;
&lt;td&gt;Full-chain workflow audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-intelligent-approval-enhancement"&gt;2. Intelligent Approval Enhancement&lt;/h2&gt;
&lt;h3 id="21-approval-workflow-system"&gt;2.1 Approval Workflow System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Approval Workflow"
subgraph "Workflow Design"
A1[Workflow Modeling]
A2[Conditional Branching]
A3[Parallel Approval]
A4[Workflow Templates]
A5[Workflow Publishing]
end
subgraph "Approval Execution"
B1[Approval Initiation]
B2[Approval Routing]
B3[Approval Processing]
B4[Countersign]
B5[Reassign]
B6[Withdrawal]
B7[Rejection]
end
subgraph "Intelligent Approval"
C1[Intelligent Routing]
C2[Conditional Auto-Judgment]
C3[Automatic Routing]
C4[Intelligent Reminders]
end
subgraph "Mobile Approval"
D1[Mobile Initiation]
D2[Mobile Approval]
D3[Mobile Query]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; B6
B6 --&gt; B7
B7 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;h3 id="22-approval-permission-control"&gt;2.2 Approval Permission Control&lt;/h3&gt;
&lt;p&gt;The OA system implements approval permission control based on workflow and position, ensuring approval process compliance.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Initiator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Own approvals&lt;/td&gt;
&lt;td&gt;Can only initiate and view their own approvals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Approver&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pending approval items&lt;/td&gt;
&lt;td&gt;Can only approve items assigned to them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Department Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Department approvals&lt;/td&gt;
&lt;td&gt;Can view all approvals within the department&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Administrator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All approvals&lt;/td&gt;
&lt;td&gt;Can view and manage all approvals&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// OA Approval Permission Example&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;approval&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ApprovalServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Approvers can only process their own pending items&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Department managers can view department approvals&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-approval-audit"&gt;2.3 Approval Audit&lt;/h3&gt;
&lt;p&gt;All approval operations record complete audit logs, supporting approval workflow traceability.&lt;/p&gt;
&lt;div class="mermaid"&gt;graph LR
A[Approval Initiation] --&gt; B[Approval Routing]
B --&gt; C[Approval Processing]
C --&gt; D[Approval Completion]
A -.-&gt; E[Audit Log]
B -.-&gt; E
C -.-&gt; E
D -.-&gt; E
E --&gt; F[Workflow Traceability]
E --&gt; G[Compliance Reports]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Approval Initiation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records initiator, initiation time, approval content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Approval Routing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records routing time, routing path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Approval Processing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records approver, approval time, approval comments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Approval Withdrawal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records withdrawer, withdrawal time, withdrawal reason&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Approval Rejection&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records rejector, rejection time, rejection reason&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-document-management-enhancement"&gt;3. Document Management Enhancement&lt;/h2&gt;
&lt;h3 id="31-document-management-workflow"&gt;3.1 Document Management Workflow&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Document Management"
subgraph "Document Drafting"
A1[Document Templates]
A2[Document Editing]
A3[Document Formatting]
A4[Document Approval]
A5[Document Issuance]
end
subgraph "Document Circulation"
B1[Document Distribution]
B2[Document Receipt]
B3[Document Circulation]
B4[Document Supervision]
B5[Document Archiving]
end
subgraph "Document Query"
C1[Document Search]
C2[Document Statistics]
C3[Document Analysis]
end
subgraph "Document Security"
D1[Document Encryption]
D2[Document Watermark]
D3[Document Audit]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Document Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Outgoing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Official outgoing documents, notices and announcements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Incoming&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;External incoming documents, superior incoming documents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Internal Documents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Internal notices, work arrangements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Meeting Minutes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Meeting minutes, resolution documents&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-schedule-and-meeting-management"&gt;4. Schedule and Meeting Management&lt;/h2&gt;
&lt;h3 id="41-schedule-and-meeting-system"&gt;4.1 Schedule and Meeting System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Schedule and Meeting"
subgraph "Personal Schedule"
A1[Schedule Creation]
A2[Schedule Reminders]
A3[Schedule Sync]
A4[Schedule Sharing]
end
subgraph "Team Schedule"
B1[Team Calendar]
B2[Schedule Coordination]
B3[Schedule Conflict Detection]
end
subgraph "Meeting Management"
C1[Meeting Booking]
C2[Meeting Invitation]
C3[Meeting Confirmation]
C4[Meeting Check-in]
C5[Meeting Minutes]
end
subgraph "Meeting Room Management"
D1[Meeting Room Booking]
D2[Meeting Room Status]
D3[Meeting Room Statistics]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; C5
C5 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="5-administrative-management-enhancement"&gt;5. Administrative Management Enhancement&lt;/h2&gt;
&lt;h3 id="51-asset-management"&gt;5.1 Asset Management&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Asset Management"
subgraph "Asset Ledger"
A1[Asset Registration]
A2[Asset Classification]
A3[Asset Labeling]
A4[Asset Location]
end
subgraph "Asset Usage"
B1[Asset Requisition]
B2[Asset Return]
B3[Asset Transfer]
B4[Asset Repair]
B5[Asset Disposal]
end
subgraph "Asset Inventory"
C1[Inventory Plan]
C2[Inventory Execution]
C3[Inventory Discrepancy]
C4[Inventory Report]
end
subgraph "Asset Analysis"
D1[Asset Statistics]
D2[Asset Valuation]
D3[Asset Utilization Rate]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;h3 id="52-seal-management"&gt;5.2 Seal Management&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Seal Management"
subgraph "Seal Ledger"
A1[Seal Registration]
A2[Seal Type]
A3[Seal Status]
A4[Seal Custody]
A5[Seal Authorization]
end
subgraph "Seal Usage"
B1[Seal Application]
B2[Seal Approval]
B3[Seal Registration]
B4[Seal Record]
B5[Seal Traceability]
end
subgraph "Seal Security"
C1[Seal Monitoring]
C2[Seal Audit]
C3[Seal Alert]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
&lt;/div&gt;
&lt;h3 id="53-seal-audit"&gt;5.3 Seal Audit&lt;/h3&gt;
&lt;p&gt;All seal usage operations record complete audit logs, ensuring seal usage compliance.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seal Application&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records applicant, application time, reason for seal use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seal Approval&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records approver, approval time, approval comments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seal Registration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records seal time, sealed document, seal count&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seal Traceability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records seal history, seal trail&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-technical-architecture"&gt;6. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-oa-plus"
subgraph "oa-biz"
A1[workflow - Workflow Approval]
A2[document - Document Management]
A3[schedule - Schedule Management]
A4[meeting - Meeting Management]
A5[task - Task Management]
A6[asset - Asset Management]
A7[seal - Seal Management]
A8[attendance - Attendance Management]
A9[mobile - Mobile Office]
A10[analytics - Data Analysis]
end
subgraph "Permissions and Audit"
B1[permission - Permission Control]
B2[audit - Audit Logs]
B3[compliance - Compliance Reports]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B1
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B2
A7 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="7-business-value"&gt;7. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workflow Efficiency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Intelligent approval, workflow optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Collaboration Efficiency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Schedule collaboration, task collaboration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Administrative Standardization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Asset management, seal management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mobile Office&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full-featured mobile office&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data-Driven&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Efficiency analysis, optimization suggestions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Approval permissions, workflow audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>EHR Human Resources</title><link>https://ruoyiplus.com/en/plus/ehr-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/ehr-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 30 DOs / 15 Controllers, menu ID starting from 7000, building an enterprise HR digital management system&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning--architecture"&gt;1. Enhancement Positioning &amp;amp; Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus EHR provides enterprise-grade enhancements around three core areas: &lt;strong&gt;employee full-lifecycle management&lt;/strong&gt;, &lt;strong&gt;compensation &amp;amp; performance management&lt;/strong&gt;, and &lt;strong&gt;recruitment &amp;amp; training management&lt;/strong&gt;, achieving digital HR management.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-ehr&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_employee&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Employee Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_attendance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Attendance Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_insurance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Social Insurance Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_performance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Performance Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_recruitment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Recruitment Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_salary&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Salary Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_contract&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contract Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_education&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Training Management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus EHR Enhanced Architecture"
subgraph "Organization &amp; Personnel"
A1[Employee Records]
A2[Org Structure]
A3[Contract Management]
A4[Onboarding/Offboarding]
end
subgraph "Compensation &amp; Benefits"
B1[Salary Calculation]
B2[Social Insurance &amp; Housing Fund]
B3[Income Tax Management]
end
subgraph "Attendance &amp; Performance"
C1[Attendance Clock-in]
C2[Performance Appraisal]
C3[Leave Management]
end
subgraph "Recruitment &amp; Training"
D1[Recruitment Management]
D2[Training Management]
D3[Talent Development]
end
subgraph "Control Layer"
E1[Data Permissions]
E2[Privacy Masking]
E3[Operation Audit]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
A4 --&gt; C1
B1 --&gt; C2
B2 --&gt; C2
C1 --&gt; C3
C3 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
A1 --&gt; E1
B1 --&gt; E2
C2 --&gt; E3
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Traditional HR System&lt;/th&gt;
&lt;th&gt;RuoYiPlus EHR Enhancement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Employee Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic info&lt;/td&gt;
&lt;td&gt;Full-lifecycle + digital records&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compensation Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual calculation&lt;/td&gt;
&lt;td&gt;Auto payroll + tax calculation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Attendance Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple clock-in&lt;/td&gt;
&lt;td&gt;Multi-dimensional attendance + smart scheduling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Performance Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;KPI + 360-degree appraisal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Recruitment Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Full-process recruitment management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Training Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Training plans + effectiveness evaluation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic permissions&lt;/td&gt;
&lt;td&gt;Department-level + position-level data permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Privacy Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Privacy data masking + audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-employee-full-lifecycle-management"&gt;2. Employee Full-Lifecycle Management&lt;/h2&gt;
&lt;h3 id="21-employee-lifecycle"&gt;2.1 Employee Lifecycle&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Recruitment &amp; Onboarding] --&gt; B[Probation Management]
B --&gt; C[Regular Employee]
C --&gt; D[Transfer &amp; Promotion]
D --&gt; E[Offboarding Management]
A --&gt; A1[Resume Screening]
A --&gt; A2[Interview Assessment]
A --&gt; A3[Onboarding Processing]
B --&gt; B1[Probation Assessment]
B --&gt; B2[Mentor Guidance]
B --&gt; B3[Confirmation Review]
C --&gt; C1[Performance Management]
C --&gt; C2[Training &amp; Development]
C --&gt; C3[Compensation &amp; Benefits]
D --&gt; D1[Position Adjustment]
D --&gt; D2[Rank Promotion]
D --&gt; D3[Salary Adjustment]
E --&gt; E1[Resignation Application]
E --&gt; E2[Exit Handover]
E --&gt; E3[Exit Analysis]
&lt;/div&gt;
&lt;h3 id="22-data-permission-control"&gt;2.2 Data Permission Control&lt;/h3&gt;
&lt;p&gt;The EHR system implements data permission control based on departments and positions to ensure HR data security.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Employee Self&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Personal info&lt;/td&gt;
&lt;td&gt;Can only view their own basic information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Department Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Department employees&lt;/td&gt;
&lt;td&gt;Can view department employee information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HR Specialist&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All employees&lt;/td&gt;
&lt;td&gt;Can view all employee information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Executive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All data&lt;/td&gt;
&lt;td&gt;Can view all HR data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// EHR data permission example&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;department&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;EmployeeServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Department managers can only view employees in their department&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Automatically filtered by department&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="3-compensation-management"&gt;3. Compensation Management&lt;/h2&gt;
&lt;h3 id="31-compensation-system"&gt;3.1 Compensation System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Compensation Management"
A[Compensation Structure] --&gt; B[Salary Calculation]
B --&gt; C[Social Insurance &amp; Housing Fund]
B --&gt; D[Income Tax Calculation]
C --&gt; E[Salary Disbursement]
D --&gt; E
E --&gt; F[Salary Reports]
A --&gt; A1[Base Salary]
A --&gt; A2[Performance Pay]
A --&gt; A3[Allowances &amp; Subsidies]
A --&gt; A4[Bonuses]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compensation Structure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Base salary + performance + allowances + bonuses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auto Payroll&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rule-based automatic salary calculation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Social Insurance Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatic social insurance &amp;amp; housing fund calculation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Income Tax Calculation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cumulative withholding method tax calculation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Salary Disbursement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bank direct deposit, pay slips&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="32-compensation-audit"&gt;3.2 Compensation Audit&lt;/h3&gt;
&lt;p&gt;All compensation operations are recorded with complete audit logs to ensure salary data security.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Salary Adjustment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records adjustment time, amount, reason&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Salary Calculation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records calculation process, calculation formulas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Salary Disbursement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records disbursement time, disbursement amount&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Export&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records export time, exporter&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-attendance--performance-management"&gt;4. Attendance &amp;amp; Performance Management&lt;/h2&gt;
&lt;h3 id="41-attendance-system"&gt;4.1 Attendance System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Attendance Management"
A[Shift Scheduling] --&gt; B[Attendance Clock-in]
B --&gt; C[Attendance Statistics]
C --&gt; D[Exception Handling]
D --&gt; E[Attendance Reports]
A --&gt; A1[Fixed Shifts]
A --&gt; A2[Flexible Shifts]
A --&gt; A3[Rotating Shifts]
B --&gt; B1[GPS Clock-in]
B --&gt; B2[WiFi Clock-in]
B --&gt; B3[Face Recognition]
C --&gt; C1[Attendance Statistics]
C --&gt; C2[Overtime Statistics]
C --&gt; C3[Leave Statistics]
end
&lt;/div&gt;
&lt;h3 id="42-performance-appraisal"&gt;4.2 Performance Appraisal&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Appraisal Method&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;KPI Appraisal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Key Performance Indicator appraisal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OKR Appraisal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Objectives and Key Results appraisal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;360-Degree Appraisal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-dimensional comprehensive evaluation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MBO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Management by Objectives appraisal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-technical-architecture"&gt;5. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-ehr-plus"
subgraph "ehr-biz"
A1[employee]
A2[salary]
A3[attendance]
A4[performance]
A5[recruitment]
A6[education]
A7[contract]
A8[insurance]
A9[analytics]
end
subgraph "Permissions &amp; Audit"
B1[permission]
B2[audit]
B3[masking]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
A4 --&gt; B2
A5 --&gt; B1
A6 --&gt; B1
A7 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="6-business-value"&gt;6. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HR Efficiency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automated processes, digital records&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compensation Accuracy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Auto payroll, compliant tax&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Talent Development&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Performance management, training system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data-driven Decisions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;HR analytics, talent review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Data permissions, privacy protection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit Traceability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Operation audit, change traceability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>IM Instant Messaging</title><link>https://ruoyiplus.com/en/plus/im-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/im-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 16 DOs / 29 Controllers, menu ID starting at 11000, building an enterprise instant messaging and collaborative office system&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus IM centers around three core pillars—&lt;strong&gt;Rich Media Messaging&lt;/strong&gt;, &lt;strong&gt;Deep Business Integration&lt;/strong&gt;, and &lt;strong&gt;Message Security and Compliance&lt;/strong&gt;—to deliver enterprise-level enhancement, creating a secure and controllable enterprise communication platform.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;11000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-im&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;im_channel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Channel Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;im_group&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Group Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;im_private_message&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Private Messages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;im_rtc_call&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;RTC Calls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;im_emoticon&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Emoticons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;im_sensitive_word&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sensitive Words&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;im_friend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Friend Management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus IM Enhanced Architecture"
subgraph "Message Layer"
A1[Basic Messages]
A2[Rich Media Messages]
A3[Business Messages]
A4[Card Messages]
end
subgraph "Group Layer"
B1[Work Groups]
B2[Project Groups]
B3[Department Groups]
B4[Notification Groups]
end
subgraph "Collaboration Layer"
C1[File Collaboration]
C2[Schedule Collaboration]
C3[Task Collaboration]
end
subgraph "Security Layer"
D1[Message Encryption]
D2[Message Audit]
D3[Permission Control]
D4[Compliance Reports]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B3
A4 --&gt; B4
B1 --&gt; C1
B2 --&gt; C2
B3 --&gt; C3
C1 --&gt; D1
C2 --&gt; D2
C3 --&gt; D3
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Traditional IM&lt;/th&gt;
&lt;th&gt;RuoYiPlus IM Enhanced&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Message Types&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Text messages&lt;/td&gt;
&lt;td&gt;Rich media + business messages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Group Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple groups&lt;/td&gt;
&lt;td&gt;Multi-type groups + permission management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Message Security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No encryption&lt;/td&gt;
&lt;td&gt;Message encryption + audit compliance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Business Integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Business messages + work notifications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Collaboration Capability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;File collaboration + schedule collaboration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Activity analysis + efficiency analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-rich-media-message-support"&gt;2. Rich Media Message Support&lt;/h2&gt;
&lt;h3 id="21-message-type-system"&gt;2.1 Message Type System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Message Types"
subgraph "Basic Messages"
A1[Text Messages]
A2[Emoticon Messages]
A3["@Mentions"]
A4[Image Messages]
A5[Voice Messages]
A6[Video Messages]
end
subgraph "File Messages"
B1[File Sending]
B2[File Preview]
B3[File Download]
B4[File Collaboration]
end
subgraph "Business Messages"
C1[Ticket Messages]
C2[Approval Messages]
C3[Task Messages]
C4[Notification Messages]
end
subgraph "Card Messages"
D1[Info Cards]
D2[Action Cards]
D3[Form Cards]
end
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Message Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Text Messages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Text, emoticons, @mentions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rich Media Messages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Images, voice, video, files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Business Messages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tickets, approvals, tasks and other business notifications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Card Messages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Interactive information cards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Location Messages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Location sharing, check-in&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-group-management-enhancement"&gt;3. Group Management Enhancement&lt;/h2&gt;
&lt;h3 id="31-group-management-system"&gt;3.1 Group Management System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Group Management"
subgraph "Group Types"
A1[Work Groups]
A2[Project Groups]
A3[Department Groups]
A4[Discussion Groups]
A5[Notification Groups]
end
subgraph "Group Permissions"
B1[Group Owner]
B2[Admin]
B3[Regular Member]
end
subgraph "Group Features"
C1[Group Announcement]
C2[Group Files]
C3[Group Schedule]
C4[Group Poll]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Group Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Work Groups&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Daily work communication groups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Project Groups&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Project collaboration groups, linked to projects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Department Groups&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Department communication groups, auto-sync members&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Discussion Groups&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Temporary discussion groups, flexible creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Notification Groups&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One-way notification groups, only admins can post&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-message-security-and-compliance"&gt;4. Message Security and Compliance&lt;/h2&gt;
&lt;h3 id="41-message-security-system"&gt;4.1 Message Security System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Message Security"
subgraph "Transport Security"
A1[SSL/TLS Encryption]
A2[Message Signing]
A3[Tamper Prevention]
end
subgraph "Storage Security"
B1[Encrypted Message Storage]
B2[Sensitive Content Encryption]
B3[Data Isolation]
end
subgraph "Audit Compliance"
C1[Message Audit]
C2[Keyword Monitoring]
C3[Risk Alert]
C4[Compliance Reports]
end
subgraph "Permission Control"
D1[Message Permissions]
D2[Group Permissions]
D3[Feature Permissions]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
B1 --&gt; C1
B2 --&gt; C1
B3 --&gt; C1
C1 --&gt; D1
C2 --&gt; D1
C3 --&gt; D1
&lt;/div&gt;
&lt;h3 id="42-message-audit"&gt;4.2 Message Audit&lt;/h3&gt;
&lt;p&gt;All messages record complete audit logs, supporting message content traceability and compliance auditing.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Message Sending&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records sender, recipient, send time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Message Content&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records message content (encrypted storage)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Message Recall&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records recall operations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;File Transfer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records file uploads and downloads&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Group Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records group creation, member changes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph LR
A[Message Sent] --&gt; B[Message Audit]
B --&gt; C[Keyword Detection]
C --&gt; D{Sensitive Word?}
D --&gt;|Yes| E[Risk Flagging]
D --&gt;|No| F[Normal Storage]
E --&gt; G[Alert Notification]
F --&gt; H[Encrypted Storage]
G --&gt; H
&lt;/div&gt;
&lt;h3 id="43-message-permission-control"&gt;4.3 Message Permission Control&lt;/h3&gt;
&lt;p&gt;The IM system implements role-based permission control to ensure message data security.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Regular User&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Personal messages&lt;/td&gt;
&lt;td&gt;Can only view their own messages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Group Admin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Group messages&lt;/td&gt;
&lt;td&gt;Can manage group messages and members&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auditor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All messages&lt;/td&gt;
&lt;td&gt;Can view all messages for auditing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;System Admin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;System configuration&lt;/td&gt;
&lt;td&gt;Can configure system parameters but cannot view message content&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-business-integration-enhancement"&gt;5. Business Integration Enhancement&lt;/h2&gt;
&lt;h3 id="51-business-integration-architecture"&gt;5.1 Business Integration Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Business Integration"
subgraph "Business Messages"
A1[Ticket Notifications]
A2[Approval Notifications]
A3[Task Notifications]
A4[Schedule Reminders]
end
subgraph "Business Actions"
B1[Quick Approval]
B2[Quick Processing]
B3[Business Navigation]
end
subgraph "Business Collaboration"
C1[File Collaboration]
C2[Schedule Collaboration]
C3[Task Collaboration]
C4[Meeting Collaboration]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
A4 --&gt; B2
B1 --&gt; C1
B2 --&gt; C2
B3 --&gt; C3
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Business Type&lt;/th&gt;
&lt;th&gt;Integration Method&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ticket System&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ticket creation, status change notifications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Approval System&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Approval initiation, approval result notifications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task System&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task assignment, progress update notifications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Schedule System&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Schedule reminders, meeting invitations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Report System&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Report generation, push notifications&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-collaborative-office-enhancement"&gt;6. Collaborative Office Enhancement&lt;/h2&gt;
&lt;h3 id="61-file-collaboration"&gt;6.1 File Collaboration&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;File Sharing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Group files, personal file library&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Online Preview&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Office, PDF online preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Collaborative Editing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-person collaborative document editing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Version Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;File version history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;File Search&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;File content search&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="62-schedule-collaboration"&gt;6.2 Schedule Collaboration&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Schedule Creation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Personal schedule, group schedule&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Schedule Reminders&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Timed reminders, recurring reminders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Schedule Sharing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Schedule sharing, schedule subscription&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Meeting Invitations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Meeting invitations, attendance confirmation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Schedule Sync&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sync with external calendars&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="63-task-collaboration"&gt;6.3 Task Collaboration&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Creation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Group tasks, personal tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Assignment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task assignment, task claiming&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Progress Tracking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task progress, completion status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Reminders&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task due reminders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Statistics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task completion statistics&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="7-technical-architecture"&gt;7. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-im-plus"
subgraph "im-biz"
A1[message - Message Management]
A2[group - Group Management]
A3[user - User Management]
A4[security - Message Security]
A5[audit - Message Audit]
A6[integration - Business Integration]
A7[collaboration - Collaborative Office]
A8[file - File Collaboration]
A9[schedule - Schedule Collaboration]
A10[task - Task Collaboration]
A11[search - Message Search]
A12[archive - Message Archiving]
A13[analytics - Data Analysis]
end
subgraph "Permissions and Audit"
B1[permission - Permission Control]
B2[audit - Audit Logs]
B3[monitoring - Monitoring and Alerting]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="8-business-value"&gt;8. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Communication Efficiency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rich media messages, business integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Collaborative Office&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;File collaboration, schedule collaboration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Message encryption, audit compliance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Business Enablement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Business messages, quick actions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Insights&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Activity analysis, efficiency analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hierarchical permissions, data isolation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Mail Middleware</title><link>https://ruoyiplus.com/en/plus/mail-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/mail-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 5 DOs / 5 Controllers, menu ID starting from 11500, building an enterprise-grade email sending/receiving and marketing automation system&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning--architecture"&gt;1. Enhancement Positioning &amp;amp; Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus Mail provides enterprise-grade enhancements around three core areas: &lt;strong&gt;multi-channel sending&lt;/strong&gt;, &lt;strong&gt;email receiving management&lt;/strong&gt;, and &lt;strong&gt;marketing automation&lt;/strong&gt;, building a highly reliable, auditable enterprise email infrastructure.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;11500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-mail&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mail_attachment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Attachment Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mail_blacklist&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Blacklist Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mail_send_log&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Send Log&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mail_receive_log&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Receive Log&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mail_template&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Email Template&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus Mail Enhanced Architecture"
subgraph "Sending Layer"
A1[Alibaba Cloud DirectMail]
A2[AWS SES]
A3[Local SMTP]
A4[Corporate Email]
end
subgraph "Engine Layer"
B1[Async Sending]
B2[Smart Retry]
B3[Rate Limiting]
B4[Batch Optimization]
end
subgraph "Business Layer"
C1[Template Engine]
C2[Email Receiving]
C3[Marketing Email]
C4[Attachment Management]
end
subgraph "Monitoring Layer"
D1[Full-Chain Tracking]
D2[Statistical Analysis]
D3[Send Audit]
D4[Compliance Reports]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; D4
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Yudao Native Capability&lt;/th&gt;
&lt;th&gt;RuoYiPlus Mail Enhancement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sending Capability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple sending&lt;/td&gt;
&lt;td&gt;Multi-channel + async sending&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Receiving Capability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;IMAP/POP3 receiving&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Template Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Template engine + variable substitution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Attachment Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple attachments&lt;/td&gt;
&lt;td&gt;Multi-storage + version management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Send Monitoring&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Full-chain tracking + statistical analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Marketing Email&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Marketing email + batch sending&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple logging&lt;/td&gt;
&lt;td&gt;Full-chain email send audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-multi-channel-sending-architecture"&gt;2. Multi-Channel Sending Architecture&lt;/h2&gt;
&lt;h3 id="21-sending-channel-architecture"&gt;2.1 Sending Channel Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Sending Channels"
subgraph "Domestic Channels"
A1[Alibaba Cloud DirectMail]
A2[Tencent Corporate Email]
end
subgraph "International Channels"
B1[AWS SES]
end
subgraph "Self-built Channels"
C1[Local SMTP]
end
subgraph "Send Engine"
D1[Async Sending]
D2[Smart Retry]
D3[Rate Limiting]
D4[Failover]
end
end
A1 --&gt; D1
A2 --&gt; D1
B1 --&gt; D1
C1 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; D4
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Channel Type&lt;/th&gt;
&lt;th&gt;Applicable Scenarios&lt;/th&gt;
&lt;th&gt;Features&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Alibaba Cloud DirectMail&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Domestic business&lt;/td&gt;
&lt;td&gt;High deliverability, domestic optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS SES&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;International business&lt;/td&gt;
&lt;td&gt;Global coverage, low cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Local SMTP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Self-built systems&lt;/td&gt;
&lt;td&gt;Full control, privacy protection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Corporate Email&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Internal enterprise&lt;/td&gt;
&lt;td&gt;Enterprise authentication, brand image&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="22-async-send-engine"&gt;2.2 Async Send Engine&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;mail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;async&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pool-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;queue-capacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;batch-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;retry&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;max-attempts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backoff&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;initial-interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;multiplier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;max-interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rate-limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;qps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;burst&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Async Sending&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Thread pool async processing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Smart Retry&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Exponential backoff retry strategy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rate Limiting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Token bucket algorithm rate limiting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Batch Optimization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Batch send optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Failover&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatic channel failover&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-email-receiving-management"&gt;3. Email Receiving Management&lt;/h2&gt;
&lt;h3 id="31-receiving-architecture"&gt;3.1 Receiving Architecture&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Email Receiving"
subgraph "Receiving Protocols"
A1[IMAP]
A2[POP3]
end
subgraph "Receive Processing"
B1[Email Parsing]
B2[Content Extraction]
B3[Attachment Processing]
B4[Auto Classification]
end
subgraph "Receive Storage"
C1[Email Archiving]
C2[Search &amp; Retrieval]
C3[Data Analysis]
end
end
A1 --&gt; B1
A2 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IMAP Receiving&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time inbox sync&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;POP3 Receiving&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scheduled email pull&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Email Parsing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Content and attachment parsing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auto Classification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rule-based auto classification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auto Reply&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Auto reply templates&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-template-engine-enhancement"&gt;4. Template Engine Enhancement&lt;/h2&gt;
&lt;h3 id="41-template-management-system"&gt;4.1 Template Management System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Template Management"
subgraph "Template Creation"
A1[Template Design]
A2[Variable Definition]
A3[Style Configuration]
A4[Template Review]
A5[Template Publishing]
end
subgraph "Template Types"
B1[Business Templates]
B2[Marketing Templates]
B3[System Templates]
end
subgraph "Template Application"
C1[Variable Substitution]
C2[Conditional Rendering]
C3[Loop Rendering]
C4[Template Preview]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
A5 --&gt; B2
A5 --&gt; B3
B1 --&gt; C1
B2 --&gt; C1
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Thymeleaf Templates&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;HTML template rendering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Variable Substitution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dynamic variable injection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Conditional Rendering&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Conditional branch display&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Template Versioning&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Version management, history tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Template Testing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Test send, effect preview&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-marketing-email-enhancement"&gt;5. Marketing Email Enhancement&lt;/h2&gt;
&lt;h3 id="51-marketing-automation"&gt;5.1 Marketing Automation&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Trigger Event] --&gt; B{Condition Check}
B --&gt;|Satisfied| C[Execute Action]
B --&gt;|Not Satisfied| D[Skip]
C --&gt; E[Send Email]
E --&gt; F[Record Result]
F --&gt; G{Follow-up Condition}
G --&gt;|Yes| H[Continue Execution]
G --&gt;|No| I[End Flow]
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;mail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;marketing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;automation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Member Registration&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Welcome Email&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Member Upgrade&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Upgrade Congratulations&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;7 Days After Purchase&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Repurchase Reminder&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;7d&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Birthday&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Birthday Greeting&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;member.birthday == today&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="52-blacklist-management"&gt;5.2 Blacklist Management&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auto Blacklist&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bounced emails automatically added to blacklist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Manual Blacklist&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manually add to blacklist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Blacklist Filtering&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Auto filter when sending&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Blacklist Appeal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Blacklist appeal for removal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-send-monitoring--analytics"&gt;6. Send Monitoring &amp;amp; Analytics&lt;/h2&gt;
&lt;h3 id="61-full-chain-tracking"&gt;6.1 Full-Chain Tracking&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Send Request] --&gt; B[Queue Waiting]
B --&gt; C[Send Execution]
C --&gt; D[Delivery Status]
D --&gt; E[Open Tracking]
E --&gt; F[Click Tracking]
A -.-&gt; G[Audit Log]
B -.-&gt; G
C -.-&gt; G
D -.-&gt; G
E -.-&gt; G
F -.-&gt; G
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tracking Node&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Send Request&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Send request record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Queue Status&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Queue waiting status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Send Execution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Send execution status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Delivery Status&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Delivery success/failure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open Tracking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Email open tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Click Tracking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Link click tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="62-email-send-audit"&gt;6.2 Email Send Audit&lt;/h3&gt;
&lt;p&gt;All email send operations are recorded with complete audit logs, supporting email send traceability.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audit Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Send Request&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records sender, recipient, send time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Email Content&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records email subject, content (encrypted storage)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Send Result&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records send success/failure, failure reason&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open Record&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records email open time, open count&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Click Record&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records link click time, click count&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="63-statistical-analysis"&gt;6.3 Statistical Analysis&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Analysis Dimension&lt;/th&gt;
&lt;th&gt;Metrics&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Send Statistics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Send volume, success rate, failure rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Delivery Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Delivery rate, bounce rate, bounce reasons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Effect Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open rate, click rate, conversion rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Channel Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Channel performance comparison&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Template Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Template effect comparison&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="7-technical-architecture"&gt;7. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-mail-plus"
subgraph "mail-biz"
A1[adapter]
A2[storage]
A3[engine]
A4[template]
A5[receive]
A6[marketing]
A7[blacklist]
A8[tracking]
A9[analytics]
end
subgraph "Permissions &amp; Audit"
B1[permission]
B2[audit]
B3[masking]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
A4 --&gt; B3
A5 --&gt; B2
A6 --&gt; B2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="8-business-value"&gt;8. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;High Deliverability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-channel, intelligent routing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reliable Sending&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Async sending, smart retry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Marketing Empowerment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Marketing email, automated triggers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Effect Tracking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open rate, click rate analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost Optimization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Channel selection, batch optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance Audit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full-chain tracking, send audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Pay Payment System</title><link>https://ruoyiplus.com/en/plus/pay-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/pay-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 14 DOs / 19 Controllers, menu ID starting from 12500, building a unified payment and fund management platform&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus Pay focuses on three core areas for enterprise enhancement: &lt;strong&gt;Multi-Channel Payment&lt;/strong&gt;, &lt;strong&gt;Fund Management&lt;/strong&gt;, and &lt;strong&gt;Transaction Security&lt;/strong&gt;, building a unified payment infrastructure.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;12500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-pay&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pay_order&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Payment Orders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pay_refund&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Refund Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pay_transfer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Transfer Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pay_wallet&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Wallet Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pay_recharge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Recharge Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pay_channel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Payment Channels&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pay_app&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Payment Applications&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus Pay Enhanced Architecture"
subgraph "Payment Channels"
A1[WeChat Pay]
A2[Alipay]
A3[UnionPay]
A4[Balance Payment]
end
subgraph "Payment Capabilities"
B1[Payment Ordering]
B2[Payment Refund]
B3[Transfer Payment]
B4[Wallet Management]
end
subgraph "Fund Management"
C1[Recharge Management]
C2[Reconciliation Management]
C3[Bill Management]
end
subgraph "Control Layer"
D1[Payment Security]
D2[Risk Control Management]
D3[Operation Audit]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
B1 --&gt; D1
B2 --&gt; D2
C3 --&gt; D3
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Traditional Solution&lt;/th&gt;
&lt;th&gt;RuoYiPlus Pay Enhanced&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Payment Channels&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Single channel&lt;/td&gt;
&lt;td&gt;WeChat + Alipay + UnionPay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Refund Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual processing&lt;/td&gt;
&lt;td&gt;Automatic refund + original route return&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wallet Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Balance + recharge + withdrawal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reconciliation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual reconciliation&lt;/td&gt;
&lt;td&gt;Automatic reconciliation + discrepancy handling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transfer Payment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Enterprise payment to user balance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security &amp;amp; Risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Payment security + risk control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit &amp;amp; Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple logging&lt;/td&gt;
&lt;td&gt;Full-chain payment audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-payment-channel-management"&gt;2. Payment Channel Management&lt;/h2&gt;
&lt;h3 id="21-multi-channel-access"&gt;2.1 Multi-Channel Access&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Payment Channels"
subgraph "WeChat Pay"
A1[JSAPI Payment]
A2[Mini Program Payment]
A3[H5 Payment]
A4[Native Payment]
end
subgraph "Alipay"
B1[Mobile Website Payment]
B2[Desktop Website Payment]
B3[QR Code Payment]
end
subgraph "UnionPay"
C1[Gateway Payment]
C2[No-Redirect Payment]
end
subgraph "Balance Payment"
D1[Wallet Balance]
D2[Points Deduction]
end
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Payment Channel&lt;/th&gt;
&lt;th&gt;Supported Methods&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WeChat Pay&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JSAPI / Mini Program / H5 / Native / APP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Alipay&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mobile Website / Desktop Website / QR Code / APP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UnionPay&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Gateway Payment / No-Redirect Payment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Balance Payment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Wallet Balance / Points Deduction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-payment-transaction-management"&gt;3. Payment Transaction Management&lt;/h2&gt;
&lt;h3 id="31-payment-flow"&gt;3.1 Payment Flow&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A[Business Ordering] --&gt; B[Create Payment Order]
B --&gt; C[Select Payment Channel]
C --&gt; D[Initiate Payment]
D --&gt; E{Payment Result}
E --&gt;|Success| F[Payment Callback]
E --&gt;|Failed| G[Payment Closure]
F --&gt; H[Business Notification]
H --&gt; I[Transaction Complete]
D --&gt; D1[Get Payment Parameters]
D --&gt; D2[Invoke Payment]
D --&gt; D3[Wait for Payment]
F --&gt; F1[Signature Verification]
F --&gt; F2[Update Status]
F --&gt; F3[Notify Business]
&lt;/div&gt;
&lt;h3 id="32-core-capabilities"&gt;3.2 Core Capabilities&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Payment Ordering&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unified payment order interface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Payment Refund&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Original route refund + partial refund&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Payment Query&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time payment status query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Payment Callback&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Async notification + signature verification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Payment Closure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Timeout closure + manual closure&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-wallet-and-fund-management"&gt;4. Wallet and Fund Management&lt;/h2&gt;
&lt;h3 id="41-wallet-system"&gt;4.1 Wallet System&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Recharge] --&gt; B[Wallet Balance]
B --&gt; C[Consumption Payment]
B --&gt; D[Withdrawal]
C --&gt; E[Transaction Records]
D --&gt; E
A --&gt; E
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wallet Recharge&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-channel recharge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Balance Payment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Wallet balance payment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Withdrawal Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Withdrawal request + approval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bill Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Transaction records + billing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reconciliation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatic reconciliation + discrepancy handling&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-technical-architecture"&gt;5. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-pay-plus"
subgraph "pay-biz"
A1[order Payment Orders]
A2[refund Refund Management]
A3[transfer Transfer Management]
A4[wallet Wallet Management]
A5[recharge Recharge Management]
A6[channel Channel Management]
A7[app Application Management]
A8[notify Callback Notification]
A9[reconciliation Reconciliation Management]
end
subgraph "Permissions &amp; Audit"
B1[security Payment Security]
B2[audit Audit Logs]
B3[risk Risk Control Management]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
A4 --&gt; B3
A5 --&gt; B2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="6-business-value"&gt;6. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Payment Convenience&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unified multi-channel access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fund Security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Payment security + risk control management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Efficient Reconciliation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatic reconciliation + discrepancy handling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fund Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Wallet + recharge + withdrawal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance Audit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full-chain payment audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flexible Extension&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pluggable payment channels&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>FITS Issue Feedback System</title><link>https://ruoyiplus.com/en/plus/fits-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/en/plus/fits-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Based on the latest RuoyiPlus backend architecture, 7 DOs / 2 Controllers, menu IDs starting from 8000, building an enterprise-level issue feedback and tracking system&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-enhancement-positioning-and-architecture"&gt;1. Enhancement Positioning and Architecture&lt;/h2&gt;
&lt;h3 id="11-product-positioning"&gt;1.1 Product Positioning&lt;/h3&gt;
&lt;p&gt;RuoYiPlus FITS provides enterprise-level enhancements around three core areas: &lt;strong&gt;Issue Tracking&lt;/strong&gt;, &lt;strong&gt;Exception Reporting&lt;/strong&gt;, and &lt;strong&gt;Project Management&lt;/strong&gt;, building an efficient issue feedback and resolution closed loop.&lt;/p&gt;
&lt;h3 id="12-module-scale"&gt;1.2 Module Scale&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Objects (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Controllers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menu ID Start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven Module&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-fits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-core-data-tables"&gt;1.3 Core Data Tables&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fits_issue&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Issue Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fits_project&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Project Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fits_exception_report&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exception Report&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus FITS Enhancement Architecture"
subgraph "Issue Management"
A1[Issue Creation]
A2[Issue Assignment]
A3[Issue Processing]
A4[Issue Closure]
end
subgraph "Exception Report"
B1[Exception Capture]
B2[Exception Classification]
B3[Exception Statistics]
end
subgraph "Project Management"
C1[Project Configuration]
C2[Member Management]
end
subgraph "Governance Layer"
D1[Permission Control]
D2[Operation Audit]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
B1 --&gt; B2
B2 --&gt; B3
C1 --&gt; C2
A1 --&gt; D1
B1 --&gt; D2
&lt;/div&gt;
&lt;h3 id="14-capability-comparison"&gt;1.4 Capability Comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Traditional Approach&lt;/th&gt;
&lt;th&gt;RuoYiPlus FITS Enhancement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Issue Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple recording&lt;/td&gt;
&lt;td&gt;Full-process tracking + assignment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Exception Reporting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scattered logs&lt;/td&gt;
&lt;td&gt;Unified exception capture + classification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Project Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Multi-project independent management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Statistical Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Issue trends + exception statistics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Project-level permission isolation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Operation audit + change traceability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-issue-management"&gt;2. Issue Management&lt;/h2&gt;
&lt;h3 id="21-issue-workflow"&gt;2.1 Issue Workflow&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A[Issue Creation] --&gt; B[Issue Assignment]
B --&gt; C[Issue Processing]
C --&gt; D{Resolved?}
D --&gt;|Yes| E[Verification &amp; Closure]
D --&gt;|No| F[Re-process]
F --&gt; C
E --&gt; G[Issue Archiving]
A --&gt; A1[Issue Description]
A --&gt; A2[Priority]
A --&gt; A3[Attachment Upload]
C --&gt; C1[Processing Records]
C --&gt; C2[Status Update]
C --&gt; C3[Notify Stakeholders]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Issue Creation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Description + priority + attachments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Issue Assignment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual assignment + auto assignment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Issue Processing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Processing records + status transitions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Issue Closure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Verification + archiving&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Notification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Email + in-app notifications&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-exception-report-management"&gt;3. Exception Report Management&lt;/h2&gt;
&lt;h3 id="31-exception-handling"&gt;3.1 Exception Handling&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[Exception Capture] --&gt; B[Exception Classification]
B --&gt; C[Exception Aggregation]
C --&gt; D[Trend Analysis]
D --&gt; E[Alert Notification]
B --&gt; B1[System Exception]
B --&gt; B2[Business Exception]
B --&gt; B3[Performance Exception]
C --&gt; C1[Similar Aggregation]
C --&gt; C2[Frequency Statistics]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Exception Capture&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Auto capture + manual reporting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Exception Classification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;System/business/performance classification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Exception Aggregation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Similar exception aggregation analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Trend Analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Exception trends + frequency statistics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Alert Notification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Threshold alerts + notifications&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-technical-architecture"&gt;4. Technical Architecture&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-fits-plus"
subgraph "fits-biz"
A1[issue Issue Management]
A2[project Project Management]
A3[exception Exception Report]
A4[notification Notification Management]
A5[analytics Statistical Analysis]
end
subgraph "Permission &amp; Audit"
B1[permission Permission Control]
B2[audit Audit Log]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
A4 --&gt; B2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="5-business-value"&gt;5. Business Value&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value Point&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Issue Closed Loop&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Create → Assign → Process → Close&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Exception Monitoring&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time capture + trend analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Efficiency Improvement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Auto assignment + notification reminders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Insights&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Issue trends + exception statistics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-Project Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-project independent management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Operation audit + change traceability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item></channel></rss>