zhzf/server/documents/详细设计说明书.md

3934 lines
174 KiB
Markdown
Raw Normal View History

2025-02-28 16:49:05 +08:00
# 概述
## 文档编制目的
本文档旨在详细描述综合执法一体化系统的设计方案,包括系统架构、功能模块、接口设计和数据库设计等,为后续的开发、测试和维护工作提供依据。
## 系统概述
综合执法一体化系统是一个集成了案事件管理、动态数据管理、行政执法管理、非现场执法、执法文书送达、档案管理、统计报表和执法一张图等功能的综合性平台。旨在提高执法效率,规范执法行为,实现执法信息的统一管理和共享。
## 设计原则
- **模块化设计:** 将系统划分为多个高内聚、低耦合的模块,便于开发和维护。
- **可扩展性:** 系统设计应具备良好的可扩展性,能够方便地增加新的功能模块。
- **标准化:** 遵循业界通用的标准和规范如RESTful API设计风格。
- **安全性:** 保证系统数据的安全性和完整性,具备完善的权限控制机制。
- **用户友好:** 提供简洁、直观、易于操作的用户界面。
## 参考资料
- 《软件需求规格说明书》
- 《数据库设计说明书》
- 《接口设计说明书》
# 系统总体架构
## 系统架构
本系统采用基于Spring Boot的微服务架构前后端分离。后端主要技术栈包括Java、Spring Boot、Spring Data JPA、Hibernate前端采用Vue.js框架。数据库使用关系型数据库如MySQL或PostgreSQL
## 功能架构
(留空)
## 技术架构
(留空)
# 系统详细设计
## 综合执法系统
### 案事件管理
#### 案事件录入
##### 实现设计
案事件档案录入实现案事件的新增、修改、查询、删除等功能。
- **用例:** 案事件档案管理
- **参与者:** 执法人员
- **简要说明:** 新增、查询、修改、删除案事件档案。
- **通讯:** 通过HTTP/HTTPS协议与后端服务进行通讯。
- **安全性:** 通过系统统一的权限控制,对不同角色的用户进行访问控制。
##### 程序流程图
(留空)
##### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :------------------------------------------------------------------------ | :--------- | :--- |
| `com.aisino.iles.lawenforcement.controller.CaseController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.CaseService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.CaseRepository.java` | Repo | Java |
##### 静态模型
(留空)
##### 实现类
###### Controller类
```java
com.aisino.iles.lawenforcement.controller.CaseController
getCasesPage(CaseQuery, RemoteUserInfo)
getCaseById(String)
listCases(CaseQuery, RemoteUserInfo)
updateCase(String, Case)
addEvidenceFile(FormDataDto)
addEvidenceFileByPath(String, Case)
createCase(Case)
deleteCase(String)
mergeAndDownload(String)
```
###### Service类
```java
com.aisino.iles.lawenforcement.service.CaseService
findCasesPage(CaseQuery, RemoteUserInfo)
listCases(CaseQuery, RemoteUserInfo)
findCaseById(String)
saveCase(Case)
saveEvidence(FormDataDto)
saveEvidenceByPath(Case)
deleteCase(String)
getCaseDetailInfo(Case)
mergeAndDownload(String)
```
###### Repo类
```java
com.aisino.iles.lawenforcement.repository.CaseRepository
findByEnforcementInfoEnforcementId(String)
```
##### 界面设计
(留空)
### 动态数据管理
#### 企业信息管理
##### 实现设计
实现企业信息的新增、修改、查询、删除、导入、导出等功能。
##### 程序流程图
(留空)
##### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :-------------------------------------------------------------------------- | :--------------------- | :--- |
| `com.aisino.iles.lawenforcement.controller.EnterpriseController.java` | 企业信息控制器 | Java |
| `com.aisino.iles.lawenforcement.service.EnterpriseService.java` | 企业信息服务 | Java |
| `com.aisino.iles.lawenforcement.repository.EnterpriseRepository.java` | 企业信息数据访问层 | Java |
##### 静态模型
###### 包结构
```
com.aisino.iles.lawenforcement
├── controller
│ └── EnterpriseController.java # 企业信息控制器
├── service
│ └── EnterpriseService.java # 企业信息服务
├── repository
│ └── EnterpriseRepository.java # 企业信息数据访问接口
└── model
├── Enterprise.java # 企业信息实体类
├── dto
│ └── EnterpriseDto.java # 企业信息数据传输对象
└── query
└── EnterpriseQuery.java # 企业信息查询条件
```
###### 包调用关系
```mermaid
graph TD
EnterpriseController --> EnterpriseService
EnterpriseService --> EnterpriseRepository
EnterpriseService --> EnterpriseHistoryRepository
EnterpriseService --> AgencyRepository
EnterpriseService --> EnforceCheckRepository
EnterpriseService --> AdministrativeLicenseService
```
##### 实现类
###### Controller类
```java
com.aisino.iles.lawenforcement.controller.EnterpriseController
createEnterprise(Enterprise, RemoteUserInfo) # 创建企业信息
getEnterpriseById(String) # 根据ID查询企业信息
getEnterprisesPage(EnterpriseQuery, RemoteUserInfo) # 分页查询企业信息
updateEnterprise(String, Enterprise, RemoteUserInfo) # 更新企业信息
deleteEnterpriseById(String, RemoteUserInfo) # 删除企业信息
deleteEnterprisesByIds(List<String>, RemoteUserInfo) # 批量删除企业信息
ledgerStatistics(EnterpriseQuery, RemoteUserInfo) # 企业信息统计
enterpriseExport(ExportExcelParam, HttpServletResponse, RemoteUserInfo) # 导出企业信息
importFile(HttpServletRequest, RemoteUserInfo) # 导入企业信息
getEnterprisesByAgencyId(String, RemoteUserInfo) # 根据机构查询企业列表
getInsStartEnterprisesPage(EnterpriseQuery, RemoteUserInfo) # 分页查询启动巡查企业信息
getInsEnterprisesPage(EnterpriseQuery, RemoteUserInfo) # 分页查询待巡查企业信息
visualizeStatistics(EnterpriseQuery, RemoteUserInfo) # 企业管理可视化统计
getEnterpriseSelfInsAndSelfReportPage(EnterpriseQuery, RemoteUserInfo) # 企业信息自查自报
```
###### Service类
```java
com.aisino.iles.lawenforcement.service.EnterpriseService
saveEnterprise(Enterprise, RemoteUserInfo) # 保存企业信息
findEnterpriseById(String) # 根据ID查询企业信息
findEnterprisesPage(EnterpriseQuery, RemoteUserInfo) # 分页查询企业信息
deleteEnterpriseById(String, RemoteUserInfo) # 删除企业信息
deleteEnterprisesByIds(List<String>, RemoteUserInfo) # 批量删除企业信息
ledgerStatistics(EnterpriseQuery, RemoteUserInfo) # 企业信息统计
visualizeStatistics(EnterpriseQuery, RemoteUserInfo) # 企业管理可视化统计
findEnterprisesByAgencyId(String, RemoteUserInfo) # 根据机构ID查询企业列表
getEnterpriseSelfInsAndSelfReportPage(EnterpriseQuery, RemoteUserInfo) # 企业信息自查自报
```
###### Repo类
```java
com.aisino.iles.lawenforcement.repository.EnterpriseRepository
findByUnifiedSocialCode(String) # 根据统一社会信用代码查询企业
findByUnitNameContaining(String) # 根据单位名称模糊查询
findByIndustryType(String) # 根据行业类型查询
findByRiskCategory(String) # 根据风险类别查询
findByAgencyAgencyCodeLike(String) # 根据机构代码查询
findByAgencyAgencyId(String) # 根据机构ID查询
ledgerStatistics(String) # 企业台账统计
visualizeStatistics(String) # 企业可视化统计
findQyjrtj() # 企业接入统计
findQyjrlxtj() # 企业接入类型统计
findQyjzsgtj() # 企业建筑施工统计
findQyyytj() # 企业医院统计
buildingConstruction(String) # 建筑施工企业统计
hospital(String) # 医院企业统计
ohter(String) # 其他企业统计
```
##### 界面设计
(无)
#### 企业信息查询
##### 实现设计
实现企业信息的多种查询功能,包括:
- 分页查询企业基本信息
- 根据ID查询企业详细信息
- 根据机构ID查询企业列表
- 查询启动巡查企业信息
- 查询待巡查企业信息
- 企业信息可视化统计
- 企业信息自查自报
支持多种查询条件,包括企业名称、统一社会信用代码、行业类型、风险类别、营业状态等。
##### 程序流程图
```mermaid
sequenceDiagram
participant 用户
participant 前端
participant Controller
participant Service
participant Repository
participant 数据库
用户->>前端: 输入查询条件
前端->>Controller: 发送查询请求
Controller->>Service: 调用查询方法
Service->>Repository: 构建查询条件
Repository->>数据库: 执行查询
数据库-->>Repository: 返回查询结果
Repository-->>Service: 返回查询结果
Service-->>Controller: 返回查询结果
Controller-->>前端: 返回查询结果
前端-->>用户: 显示查询结果
```
##### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :-------------------------------------------------------------------------- | :--------------------- | :--- |
| `com.aisino.iles.lawenforcement.controller.EnterpriseController.java` | 企业信息查询控制器 | Java |
| `com.aisino.iles.lawenforcement.service.EnterpriseService.java` | 企业信息查询服务 | Java |
| `com.aisino.iles.lawenforcement.repository.EnterpriseRepository.java` | 企业信息查询数据访问层 | Java |
| `com.aisino.iles.lawenforcement.model.query.EnterpriseQuery.java` | 企业信息查询条件对象 | Java |
##### 静态模型
###### 包结构
```
com.aisino.iles.lawenforcement
├── controller
│ └── EnterpriseController.java # 企业信息查询控制器
├── service
│ └── EnterpriseService.java # 企业信息查询服务
├── repository
│ └── EnterpriseRepository.java # 企业信息查询数据访问接口
└── model
├── dto
│ └── EnterpriseDto.java # 企业信息查询结果DTO
└── query
└── EnterpriseQuery.java # 企业信息查询条件
```
###### 包调用关系
```mermaid
graph TD
EnterpriseController --> EnterpriseService
EnterpriseService --> EnterpriseRepository
EnterpriseService --> EnforceCheckRepository
EnterpriseService --> AdministrativeLicenseService
EnterpriseRepository --> Enterprise
EnterpriseQuery --> Enterprise
```
##### 实现类
###### Controller类
```java
com.aisino.iles.lawenforcement.controller.EnterpriseController
// 分页查询企业信息
getEnterprisesPage(EnterpriseQuery, RemoteUserInfo)
// 根据ID查询企业信息
getEnterpriseById(String)
// 根据机构ID查询企业列表
getEnterprisesByAgencyId(String, RemoteUserInfo)
// 分页查询启动巡查企业信息
getInsStartEnterprisesPage(EnterpriseQuery, RemoteUserInfo)
// 分页查询待巡查企业信息
getInsEnterprisesPage(EnterpriseQuery, RemoteUserInfo)
// 企业信息可视化统计
visualizeStatistics(EnterpriseQuery, RemoteUserInfo)
// 企业信息自查自报
getEnterpriseSelfInsAndSelfReportPage(EnterpriseQuery, RemoteUserInfo)
// 企业信息统计
ledgerStatistics(EnterpriseQuery, RemoteUserInfo)
// 导出企业信息
enterpriseExport(ExportExcelParam, HttpServletResponse, RemoteUserInfo)
```
###### Service类
```java
com.aisino.iles.lawenforcement.service.EnterpriseService
// 根据ID查询企业信息
findEnterpriseById(String)
// 查询所有企业信息
findAllEnterprises(EnterpriseQuery, RemoteUserInfo)
// 分页查询企业信息
findEnterprisesPage(EnterpriseQuery, RemoteUserInfo)
// 根据机构ID查询企业列表
findEnterprisesByAgencyId(String, RemoteUserInfo)
// 企业信息统计
ledgerStatistics(EnterpriseQuery, RemoteUserInfo)
// 企业信息可视化统计
visualizeStatistics(EnterpriseQuery, RemoteUserInfo)
// 企业信息自查自报
getEnterpriseSelfInsAndSelfReportPage(EnterpriseQuery, RemoteUserInfo)
```
###### Repo类
```java
com.aisino.iles.lawenforcement.repository.EnterpriseRepository
// 根据ID查询企业
findById(String)
// 查询所有企业
findAll(Specification<Enterprise>)
// 根据机构ID查询企业
findByAgencyAgencyId(String)
// 企业信息统计
ledgerStatistics(String)
// 企业信息可视化统计
visualizeStatistics(String)
```
###### 查询条件类
```java
com.aisino.iles.lawenforcement.model.query.EnterpriseQuery
// 企业ID
private String enterpriseId;
// 企业ID列表
private List<String> enterpriseIds;
// 单位名称
private String unitName;
// 统一社会信用代码
private String unifiedSocialCode;
// 机构ID
private String agencyId;
// 机构代码
private String agencyCode;
// 行业类型
private String industryType;
// 行业类型列表
private List<String> industryTypes;
// 风险类别
private String riskCategory;
// 法定代表人
private String legalRepresentative;
// 联系电话
private String contactPhone;
// 营业状态
private String businessStatus;
// 动态风险等级
private String dynamicRiskLevel;
// 单位联系人
private String contactPerson;
// 单位类型
private String unitType;
// 运营状态
private String operationStatus;
// 成立日期范围
private LocalDate[] establishmentDateList;
// 机构等级
private Integer agencyLevel;
// 数据来源
private String dataSource;
// 标签
private String tag;
// 视频接入
private String videoAccess;
// 感知接入
private String perceptionAccess;
// 资料接入
private String infoAccess;
// 许可接入
private String permitAccess;
// 国民经济行业分类
private String econCategory;
// 国民经济行业分类B型
private String econCategoryTypeb;
```
##### 界面设计
(无)
#### 企业信息上报审核
##### 实现设计
实现企业信息的上报、审核功能,包括:
- 企业信息上报
- 企业信息审核(通过/不通过)
- 企业信息修改后重新提交审核
- 审核历史记录查询
支持多级审核流程,记录审核意见和审核时间。
##### 程序流程图
```mermaid
sequenceDiagram
participant 用户
participant 前端
participant EnterpriseAuditController
participant EnterpriseAuditService
participant EnterpriseAuditRepository
participant 数据库
用户->>前端: 提交企业信息
前端->>EnterpriseAuditController: POST /enterpriseAudits
EnterpriseAuditController->>EnterpriseAuditService: saveEnterpriseAudit(enterpriseAudit, user, "add")
EnterpriseAuditService->>EnterpriseAuditRepository: save(enterpriseAudit)
EnterpriseAuditRepository->>数据库: 保存企业审核信息
数据库-->>EnterpriseAuditRepository: 保存成功
EnterpriseAuditRepository-->>EnterpriseAuditService: 返回保存的实体
EnterpriseAuditService-->>EnterpriseAuditController: 返回保存结果
EnterpriseAuditController-->>前端: 返回操作结果
前端-->>用户: 显示操作结果
用户->>前端: 提交审核
前端->>EnterpriseAuditController: PUT /enterpriseAudits/audit/{enterpriseId}
EnterpriseAuditController->>EnterpriseAuditService: saveEnterpriseAudit(enterpriseAudit, user, "audit")
alt 审核通过
EnterpriseAuditService->>EnterpriseService: saveEnterprise(enterprise, user)
EnterpriseService->>EnterpriseRepository: save(enterprise)
end
EnterpriseAuditService->>EnterpriseAuditRepository: save(enterpriseAudit)
EnterpriseAuditRepository-->>EnterpriseAuditService: 返回保存的实体
EnterpriseAuditService-->>EnterpriseAuditController: 返回审核结果
EnterpriseAuditController-->>前端: 返回操作结果
前端-->>用户: 显示审核结果
```
##### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :-------------------------------------------------------------------------- | :--------------------- | :--- |
| `com.aisino.iles.lawenforcement.controller.EnterpriseAuditController.java` | 企业信息审核控制器 | Java |
| `com.aisino.iles.lawenforcement.service.EnterpriseAuditService.java` | 企业信息审核服务 | Java |
| `com.aisino.iles.lawenforcement.repository.EnterpriseAuditRepository.java` | 企业信息审核数据访问层 | Java |
| `com.aisino.iles.lawenforcement.model.EnterpriseAudit.java` | 企业信息审核实体类 | Java |
##### 静态模型
###### 包结构
```
com.aisino.iles.lawenforcement
├── controller
│ └── EnterpriseAuditController.java # 企业信息审核控制器
├── service
│ └── EnterpriseAuditService.java # 企业信息审核服务
├── repository
│ └── EnterpriseAuditRepository.java # 企业信息审核数据访问接口
└── model
└── EnterpriseAudit.java # 企业信息审核实体类
```
###### 包调用关系
```mermaid
graph TD
EnterpriseAuditController --> EnterpriseAuditService
EnterpriseAuditService --> EnterpriseAuditRepository
EnterpriseAuditService --> EnterpriseService
EnterpriseAuditService --> EnterpriseHistoryRepository
EnterpriseAuditService --> AdministrativeLicenseService
EnterpriseAuditRepository --> EnterpriseAudit
```
##### 实现类
###### Controller类
```java
com.aisino.iles.lawenforcement.controller.EnterpriseAuditController
// 创建企业审核信息
createEnterpriseAudit(EnterpriseAudit, RemoteUserInfo)
// 根据ID查询企业审核信息
getEnterpriseAuditById(String)
// 分页查询企业审核信息
getEnterpriseAuditsPage(EnterpriseQuery)
// 更新企业审核信息
updateEnterpriseAudit(String, EnterpriseAudit, RemoteUserInfo)
// 企业上报审核
audit(String, EnterpriseAudit, RemoteUserInfo)
// 根据ID删除企业审核信息
deleteEnterpriseAuditById(String)
// 批量删除企业审核信息
deleteEnterpriseAuditsByIds(List<String>)
// 导出Excel
taskExport(ExportExcelParam, HttpServletResponse)
```
###### Service类
```java
com.aisino.iles.lawenforcement.service.EnterpriseAuditService
// 保存企业审核信息
saveEnterpriseAudit(EnterpriseAudit, RemoteUserInfo, String)
// 批量保存企业审核信息
saveEnterpriseAudits(List<EnterpriseAudit>)
// 根据ID查询企业审核信息
findEnterpriseAuditById(String)
// 查询所有企业审核信息
findAllEnterpriseAudits(EnterpriseQuery)
// 分页查询企业审核信息
findEnterpriseAuditsPage(PageRequest)
// 根据查询条件分页查询企业审核信息
findEnterpriseAuditsPage(EnterpriseQuery)
// 根据ID删除企业审核信息
deleteEnterpriseAuditById(String)
// 批量删除企业审核信息
deleteEnterpriseAuditsByIds(List<String>)
// 检查企业审核信息是否存在
existsEnterpriseAuditById(String)
```
###### Repo类
```java
com.aisino.iles.lawenforcement.repository.EnterpriseAuditRepository
// 根据ID查询企业审核信息
findById(String)
// 查询所有企业审核信息
findAll(Specification<EnterpriseAudit>)
// 根据社会统一信用代码查询
existsByUnifiedSocialCodeAndDelFlag(String, Short)
// 根据社会统一信用代码和ID查询
existsByUnifiedSocialCodeAndDelFlagAndEnterpriseIdNot(String, Short, String)
// 根据社会统一信用代码列表查询
findByUnifiedSocialCodeInAndDelFlag(Collection<String>, Short)
```
###### 实体类
```java
com.aisino.iles.lawenforcement.model.EnterpriseAudit
// 企业ID
private String enterpriseId;
// 单位名称
private String unitName;
// 统一社会信用代码
private String unifiedSocialCode;
// 营业状态
private String businessStatus;
// 所属机构
private Agency agency;
// 国民经济行业分类
private String regulatedIndustry;
// 注册详细地址
private String detailedAddress;
// 监管行业
private String industryType;
// 法定代表人
private String legalRepresentative;
// 法人联系电话
private String legalPhone;
// 企业分级
private String businessRating;
// 企业分类
private String businessCategory;
// 主要负责人姓名
private String mainName;
// 主要负责人电话
private String mainPhone;
// 审核状态 0未审核 1审核通过 2审核未通过
private String auditStatus;
// 审核时间
private LocalDateTime auditTime;
// 审核人用户名
private String auditUserName;
// 审核人用户昵称
private String auditNickName;
// 审核意见
private String auditOpinion;
// 行政许可信息列表
private List<AdministrativeLicense> administrativeLicenseInfos;
```
##### 界面设计
(无)
#### 企业信息导入导出
##### 实现设计
实现企业信息的批量导入和导出功能支持Excel格式。
- **导入功能**
- 支持Excel模板下载
- 支持Excel文件上传导入
- 支持数据校验和错误提示
- 支持导入预览和确认
- **导出功能**
- 支持按条件导出企业信息
- 支持自定义导出字段
- 支持大数据量分批次导出
##### 程序流程图
```mermaid
sequenceDiagram
participant 用户
participant 前端
participant EnterpriseController
participant EnterpriseService
participant ExportExcelUtil
用户->>前端: 点击导出按钮
前端->>EnterpriseController: POST /enterprises/export
EnterpriseController->>EnterpriseService: findAllEnterprises(query, user)
EnterpriseService->>EnterpriseRepository: findAll(spec)
EnterpriseRepository-->>EnterpriseService: 返回企业列表
EnterpriseService-->>EnterpriseController: 返回企业DTO列表
EnterpriseController->>ExportExcelUtil: exportExcel(response, excelParam, list)
ExportExcelUtil-->>前端: 返回Excel文件流
前端-->>用户: 下载Excel文件
用户->>前端: 选择Excel文件并上传
前端->>EnterpriseController: POST /enterprises/importFile
EnterpriseController->>EnterpriseService: enterpriseByImport(request, user)
EnterpriseService->>EnterpriseService: parseExcelFile(file)
EnterpriseService->>EnterpriseService: validateAndConvertToEntity(rowData)
loop 每一行数据
EnterpriseService->>EnterpriseRepository: save(enterprise)
end
EnterpriseService-->>EnterpriseController: 返回导入结果
EnterpriseController-->>前端: 返回导入结果
前端-->>用户: 显示导入结果
```
##### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :-------------------------------------------------------------------------- | :--------------------- | :--- |
| `com.aisino.iles.lawenforcement.controller.EnterpriseController.java` | 企业信息导入导出控制器 | Java |
| `com.aisino.iles.lawenforcement.service.EnterpriseService.java` | 企业信息导入导出服务 | Java |
| `com.aisino.iles.common.util.ExportExcelUtil.java` | Excel导出工具类 | Java |
| `com.aisino.iles.lawenforcement.model.dto.EnterpriseDto.java` | 企业信息DTO | Java |
##### 实现类
###### Controller方法
```java
com.aisino.iles.lawenforcement.controller.EnterpriseController
// 导出Excel
@PostMapping("/export")
public void enterpriseExport(
@RequestBody(required = false) ExportExcelParam<EnterpriseQuery> excelParam,
HttpServletResponse response,
@CurrentUser RemoteUserInfo user)
// 导入Excel
@PostMapping("/importFile")
public Result<Void> importFile(
HttpServletRequest request,
@CurrentUser RemoteUserInfo user)
```
###### Service方法
```java
com.aisino.iles.lawenforcement.service.EnterpriseService
// 导出企业信息
List<EnterpriseDto> findAllEnterprises(EnterpriseQuery query, RemoteUserInfo user)
// 导入企业信息
void enterpriseByImport(MultipartHttpServletRequest request, RemoteUserInfo user)
// 解析Excel文件
private List<Map<String, String>> parseExcelFile(MultipartFile file)
// 验证并转换为实体
private Enterprise validateAndConvertToEntity(Map<String, String> rowData)
```
##### 界面设计
(无)
#### 企业信息统计分析
##### 实现设计
实现企业信息的统计分析功能,包括:
- 企业数量统计(按行业、区域、风险等级等)
- 企业信息可视化展示
- 企业趋势分析
- 企业分布热力图
##### 程序流程图
```mermaid
sequenceDiagram
participant 用户
participant 前端
participant EnterpriseController
participant EnterpriseService
participant EnterpriseRepository
用户->>前端: 查看统计图表
前端->>EnterpriseController: GET /enterprises/visualizeStatistics
EnterpriseController->>EnterpriseService: visualizeStatistics(query, user)
EnterpriseService->>EnterpriseRepository: visualizeStatistics(agencyCode)
EnterpriseRepository-->>EnterpriseService: 返回统计结果
EnterpriseService-->>EnterpriseController: 返回统计结果
EnterpriseController-->>前端: 返回统计结果
前端-->>用户: 渲染统计图表
用户->>前端: 查看企业分布
前端->>EnterpriseController: GET /enterprises/distribution
EnterpriseController->>EnterpriseService: getEnterpriseDistribution(query, user)
EnterpriseService->>EnterpriseRepository: findEnterpriseDistribution(agencyCode)
EnterpriseRepository-->>EnterpriseService: 返回分布数据
EnterpriseService-->>EnterpriseController: 返回分布数据
EnterpriseController-->>前端: 返回分布数据
前端-->>用户: 渲染地图分布
```
##### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :-------------------------------------------------------------------------- | :--------------------- | :--- |
| `com.aisino.iles.lawenforcement.controller.EnterpriseController.java` | 企业统计控制器 | Java |
| `com.aisino.iles.lawenforcement.service.EnterpriseService.java` | 企业统计服务 | Java |
| `com.aisino.iles.lawenforcement.repository.EnterpriseRepository.java` | 企业统计数据访问层 | Java |
| `com.aisino.iles.lawenforcement.model.dto.EnterpriseStatisticsDto.java` | 企业统计DTO | Java |
##### 实现类
###### Controller方法
```java
com.aisino.iles.lawenforcement.controller.EnterpriseController
// 企业信息可视化统计
@GetMapping("/visualizeStatistics")
public Result<Map<String, Long>> visualizeStatistics(
EnterpriseQuery query,
@CurrentUser RemoteUserInfo user)
// 获取企业分布数据
@GetMapping("/distribution")
public Result<List<Map<String, Object>>> getEnterpriseDistribution(
EnterpriseQuery query,
@CurrentUser RemoteUserInfo user)
```
###### Service方法
```java
com.aisino.iles.lawenforcement.service.EnterpriseService
// 企业信息可视化统计
Map<String, Long> visualizeStatistics(EnterpriseQuery query, RemoteUserInfo user)
// 获取企业分布数据
List<Map<String, Object>> getEnterpriseDistribution(EnterpriseQuery query, RemoteUserInfo user)
// 企业统计信息
Map<String, Object> getEnterpriseStatistics(EnterpriseQuery query, RemoteUserInfo user)
```
###### Repository方法
```java
com.aisino.iles.lawenforcement.repository.EnterpriseRepository
// 企业信息可视化统计
@Query("select new com.aisino.iles.lawenforcement.model.dto.EnterpriseStatisticsDto(" +
"a.industryType, cast(count(a) as long))" +
" from Enterprise a join Agency b on a.agency = b" +
" where a.delFlag = 0 and b.agencyCode like :agencyCode" +
" group by a.industryType")
List<EnterpriseStatisticsDto> visualizeStatistics(String agencyCode);
// 企业分布统计
@Query("select new map(a.province as province, count(a) as count)" +
" from Enterprise a join Agency b on a.agency = b" +
" where a.delFlag = 0 and b.agencyCode like :agencyCode" +
" group by a.province")
List<Map<String, Object>> findEnterpriseDistribution(String agencyCode);
```
##### 界面设计
(无)
| :---------------------------------------------------------------------------- | :--------- | :--- |
| `com.aisino.iles.lawenforcement.controller.EnterpriseController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.EnterpriseService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.EnterpriseRepository.java` | Repo | Java |
##### 静态模型
(留空)
##### 实现类
###### Controller类
```java
com.aisino.iles.lawenforcement.controller.EnterpriseController
createEnterprise(Enterprise, RemoteUserInfo)
getEnterpriseById(String)
getEnterprisesPage(EnterpriseQuery, RemoteUserInfo)
updateEnterprise(String, Enterprise, RemoteUserInfo)
deleteEnterpriseById(String, RemoteUserInfo)
deleteEnterprisesByIds(List<String>, RemoteUserInfo)
ledgerStatistics(EnterpriseQuery, RemoteUserInfo)
enterpriseExport(ExportExcelParam<EnterpriseQuery>, HttpServletResponse, RemoteUserInfo)
enterpriseImport(MultipartHttpServletRequest, HttpServletRequest, RemoteUserInfo)
downloadTemplate(HttpServletResponse)
listEnterprises(EnterpriseQuery, RemoteUserInfo)
```
###### Service类
```java
com.aisino.iles.lawenforcement.service.EnterpriseService
saveEnterprise(Enterprise, RemoteUserInfo)
findEnterpriseById(String)
findAllEnterprises(EnterpriseQuery, RemoteUserInfo)
findEnterprisesPage(EnterpriseQuery, RemoteUserInfo)
existsEnterpriseById(String)
deleteEnterpriseById(String, RemoteUserInfo)
deleteEnterprisesByIds(List<String>, RemoteUserInfo)
ledgerStatistics(EnterpriseQuery, RemoteUserInfo)
importEnterprise(MultipartHttpServletRequest, RemoteUserInfo)
operateEnterprise(Enterprise, RemoteUserInfo)
findEnterprisesForCheckPlan(EnterpriseQuery, RemoteUserInfo)
getSelfInsAndSelfReport(String)
```
###### Repo类
```java
com.aisino.iles.lawenforcement.repository.EnterpriseRepository
findByUnifiedSocialCode(String)
findByUnitNameContaining(String)
findByIndustryType(String)
findByRiskCategory(String)
findByAgencyAgencyCodeLike(String)
findByAgencyAgencyId(String)
ledgerStatistics(String)
existsByUnifiedSocialCodeAndDelFlag(String, Short)
existsByUnifiedSocialCodeAndDelFlagAndEnterpriseIdNot(String, Short, String)
findByUnifiedSocialCodeInAndDelFlag(Collection<String>, Short)
visualizeStatistics(String)
findByAgency_AgencyCodeLike(String)
findQyjrtj()
findQyjrlxtj()
findQyjzsgtj()
findQyyytj()
buildingConstruction(String)
hospital(String)
ohter(String)
```
##### 界面设计
(留空)
### 检查事项管理
#### 实现设计
实现对检查事项的创建、查询、更新、删除和启用/禁用等功能。检查事项是构成检查表的基础单元。
#### 程序流程图
```mermaid
sequenceDiagram
participant Client
participant CheckItemController
participant CheckItemService
participant CheckItemRepository
Client->>+CheckItemController: GET /api/lawenforcement/checkItems?page=0&size=10
CheckItemController->>+CheckItemService: findCheckItemPage(query)
CheckItemService->>+CheckItemRepository: findAll(spec, pageable)
CheckItemRepository-->>-CheckItemService: Page<CheckItem>
CheckItemService-->>-CheckItemController: Page<CheckItem>
CheckItemController-->>-Client: 200 OK (PageResult<CheckItem>)
```
#### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :---------------------------------------------------------------------------------- | :--------- | :--- |
| `com.aisino.iles.lawenforcement.controller.CheckItemController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.CheckItemService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.CheckItemRepository.java` | Repo | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── CheckItemController.java
├── service
│ └── CheckItemService.java
├── repository
│ └── CheckItemRepository.java
└── model
├── CheckItem.java
└── query
└── CheckItemQuery.java
```
#### 实现类
##### Controller类
```java
com.aisino.iles.lawenforcement.controller.CheckItemController
createCheckItem(CheckItem, RemoteUserInfo)
getCheckItemById(String)
getCheckItemPage(CheckItemQuery)
getCheckItems(CheckItemQuery)
updateCheckItem(String, CheckItem, RemoteUserInfo)
deleteCheckItemById(String)
deleteCheckItemByIds(List<String>)
getCheckItems(CheckItemQuery)
```
##### Service类
```java
com.aisino.iles.lawenforcement.service.CheckItemService
saveCheckItem(CheckItem, RemoteUserInfo, String)
findCheckItemById(String)
findCheckItemPage(CheckItemQuery)
deleteCheckItemById(String)
existsCheckItemById(String)
deleteCheckItemByIds(List<String>)
findCheckItems(CheckItemQuery)
findCheckItemsByIds(String[])
findEnabledByItemTable(String)
```
##### Repo类
```java
com.aisino.iles.lawenforcement.repository.CheckItemRepository
findByItemIdIn(String[])
findByEnabled(Boolean)
findByItemTableAndEnabled(String, Boolean)
```
#### 界面设计
(留空)
### 执法机构管理
#### 实现设计
实现执法机构的新增、修改、查询、删除以及层级树查询等功能。
#### 程序流程图
```mermaid
sequenceDiagram
participant Client
participant AgencyController
participant AgencyService
participant AgencyRepository
Client->>+AgencyController: GET /api/lawenforcement/agencies?page=0&size=10
AgencyController->>+AgencyService: findAgenciesPage(query)
AgencyService->>+AgencyRepository: findAll(spec, pageable)
AgencyRepository-->>-AgencyService: Page<Agency>
AgencyService-->>-AgencyController: Page<Agency>
AgencyController-->>-Client: 200 OK (PageResult<Agency>)
```
#### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :------------------------------------------------------------------------ | :--------- | :--- |
| `com.aisino.iles.lawenforcement.controller.AgencyController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.AgencyService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.AgencyRepository.java` | Repo | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── AgencyController.java
├── service
│ └── AgencyService.java
├── repository
│ └── AgencyRepository.java
└── model
├── Agency.java
└── query
└── AgencyQuery.java
```
#### 实现类
##### Controller类
```java
com.aisino.iles.lawenforcement.controller.AgencyController
createAgency(Agency)
getAgencyById(String)
getAgencyByCode(String)
getAgenciesPage(AgencyQuery)
updateAgency(String, Agency)
deleteAgencyById(String)
deleteAgenciesByIds(List<String>)
getAgencyTree()
getAgencyList(AgencyQuery)
```
##### Service类
```java
com.aisino.iles.lawenforcement.service.AgencyService
saveAgency(Agency)
saveAgencies(List<Agency>)
findAgencyById(String)
findAgencyByAgencyCode(String)
findAgenciesPage(AgencyQuery)
existsAgencyById(String)
deleteAgencyById(String)
deleteAgenciesByIds(List<String>)
getAgencyTree()
findAll(AgencyQuery)
```
##### Repo类
```java
com.aisino.iles.lawenforcement.repository.AgencyRepository
findByAgencyCode(String)
findByAgencyName(String)
findByAgencyId(String)
findByParentIsNull()
findByParentAgencyId(String)
findLikeAgencyCode(String, Integer)
```
#### 界面设计
(留空)
updateChecklist(String, Checklist, RemoteUserInfo)
deleteChecklistById(String)
deleteChecklistByIds(List<String>)
```
##### Service类
```java
com.aisino.iles.lawenforcement.service.ChecklistService
saveChecklist(Checklist, RemoteUserInfo, String)
findChecklistById(String)
findChecklistPage(ChecklistQuery)
deleteChecklistById(String)
existsChecklistById(String)
deleteChecklistByIds(List<String>)
getChecklistList(ChecklistQuery)
```
##### Repo类
```java
com.aisino.iles.lawenforcement.repository.ChecklistRepository
// 继承自 BaseRepo, 包含标准CRUD方法
```
#### 界面设计
(留空)
### 送达方式管理
#### 实现设计
实现对文书送达方式的创建、查询、更新和删除功能。这些送达方式可用于记录法律文书的送达过程。
#### 程序流程图
```mermaid
sequenceDiagram
participant Client
participant DeliveryMethodController
participant DeliveryMethodService
participant DeliveryMethodRepository
Client->>+DeliveryMethodController: GET /api/lawenforcement/deliveryMethods
DeliveryMethodController->>+DeliveryMethodService: findDeliveryMethodPage(query)
DeliveryMethodService->>+DeliveryMethodRepository: findAll(spec, pageable)
DeliveryMethodRepository-->>-DeliveryMethodService: Page<DeliveryMethod>
DeliveryMethodService-->>-DeliveryMethodController: Page<DeliveryMethod>
DeliveryMethodController-->>-Client: 200 OK (PageResult<DeliveryMethod>)
```
#### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :-------------------------------------------------------------------------------------- | :--------- | :--- |
| `com.aisino.iles.lawenforcement.controller.DeliveryMethodController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.DeliveryMethodService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.DeliveryMethodRepository.java` | Repo | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── DeliveryMethodController.java
├── service
│ └── DeliveryMethodService.java
├── repository
│ └── DeliveryMethodRepository.java
└── model
├── DeliveryMethod.java
└── query
└── DeliveryQuery.java
```
#### 实现类
##### Controller类
```java
com.aisino.iles.lawenforcement.controller.DeliveryMethodController
createDeliveryMethod(DeliveryMethod, RemoteUserInfo)
getDeliveryMethodById(String)
getDeliveryMethodPage(DeliveryQuery)
getDeliveryMethodList(DeliveryQuery)
updateDeliveryMethod(String, DeliveryMethod, RemoteUserInfo)
deleteDeliveryMethodById(String)
deleteDeliveryMethodByIds(List<String>)
```
##### Service类
```java
com.aisino.iles.lawenforcement.service.DeliveryMethodService
saveDeliveryMethod(DeliveryMethod, RemoteUserInfo, String)
findDeliveryMethodById(String)
findDeliveryMethodPage(DeliveryQuery)
deleteDeliveryMethodById(String)
existsDeliveryMethodById(String)
deleteDeliveryMethodByIds(List<String>)
getDeliveryMethodList(DeliveryQuery)
```
##### Repo类
```java
com.aisino.iles.lawenforcement.repository.DeliveryMethodRepository
// 继承自 BaseRepo, 包含标准CRUD方法
```
#### 界面设计
(留空)
### 送达记录管理
#### 实现设计
实现对文书送达记录的创建、查询、更新和删除功能。此模块还集成了第三方服务,用于发送短信和语音通知,并提供回调接口以接收发送状态的更新。此外,还提供了送达业务的统计功能。
#### 程序流程图
```mermaid
sequenceDiagram
participant Client
participant DeliveryRecordController
participant DeliveryRecordService
participant DeliveryRecordRepository
Client->>+DeliveryRecordController: POST /api/lawenforcement/deliveryRecords
DeliveryRecordController->>+DeliveryRecordService: saveDeliveryRecord(record, user, "add")
DeliveryRecordService->>+DeliveryRecordRepository: save(record)
DeliveryRecordRepository-->>-DeliveryRecordService: DeliveryRecord
DeliveryRecordService-->>-DeliveryRecordController: DeliveryRecord
DeliveryRecordController-->>-Client: 200 OK (Result<DeliveryRecord>)
```
#### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :-------------------------------------------------------------------------------------- | :--------- | :--- |
| `com.aisino.iles.lawenforcement.controller.DeliveryRecordController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.DeliveryRecordService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.DeliveryRecordRepository.java` | Repo | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── DeliveryRecordController.java
├── service
│ └── DeliveryRecordService.java
├── repository
│ └── DeliveryRecordRepository.java
└── model
├── DeliveryRecord.java
├── SmsSendRecord.java
└── query
└── DeliveryQuery.java
```
#### 实现类
##### Controller类
```java
com.aisino.iles.lawenforcement.controller.DeliveryRecordController
createDeliveryRecord(DeliveryRecord, RemoteUserInfo)
getDeliveryRecordById(String)
getDeliveryRecordPage(DeliveryQuery)
updateDeliveryRecord(String, DeliveryRecord, RemoteUserInfo)
deleteDeliveryRecordById(String)
deleteDeliveryRecordByIds(List<String>)
statistics(DeliveryQuery, RemoteUserInfo)
publishSmsCall(List<String>, RemoteUserInfo)
publishVoiceCall(DeliveryRecord, RemoteUserInfo)
smsStatusCallback(SmsStatusCallbackRequest)
```
##### Service类
```java
com.aisino.iles.lawenforcement.service.DeliveryRecordService
saveDeliveryRecord(DeliveryRecord, RemoteUserInfo, String)
findDeliveryRecordById(String)
findDeliveryRecordByIds(List<String>)
findDeliveryRecordPage(DeliveryQuery)
deleteDeliveryRecordById(String)
existsDeliveryRecordById(String)
deleteDeliveryRecordByIds(List<String>)
statistics(DeliveryQuery, RemoteUserInfo)
publishSmsCall(List<String>, RemoteUserInfo)
publishVoiceCall(DeliveryRecord, RemoteUserInfo)
smsStatusCallback(SmsSendRecord)
```
##### Repo类
```java
com.aisino.iles.lawenforcement.repository.DeliveryRecordRepository
statistics(String)
```
#### 界面设计
(留空)
### 文书管理
#### 实现设计
实现对执法文书的创建、查询、更新、删除和文件上传功能。文书与具体案件关联支持通过FTP服务管理文书文件。
#### 程序流程图
```mermaid
sequenceDiagram
participant Client
participant DocumentController
participant DocumentService
participant FtpService
participant DocumentRepository
Client->>+DocumentController: POST /api/lawenforcement/documents/upload-file
DocumentController->>+DocumentService: addDocumentFile(formData)
DocumentService->>+FtpService: uploadTempFile(...)
FtpService-->>-DocumentService: fileUrl
DocumentService->>+DocumentRepository: save(document)
DocumentRepository-->>-DocumentService: Document
DocumentService-->>-DocumentController: Document
DocumentController-->>-Client: 200 OK (Result<Document>)
```
#### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :------------------------------------------------------------------------------ | :--------- | :--- |
| `com.aisino.iles.lawenforcement.controller.DocumentController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.DocumentService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.DocumentRepository.java` | Repo | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── DocumentController.java
├── service
│ └── DocumentService.java
├── repository
│ └── DocumentRepository.java
└── model
├── Document.java
└── query
└── DocumentQuery.java
```
#### 实现类
##### Controller类
```java
com.aisino.iles.lawenforcement.controller.DocumentController
getDocumentPage(DocumentQuery)
geDocumentList(DocumentQuery)
findByCaseIdAndDocumentName(DocumentQuery)
createOfficer(Document)
updateDocument(String, Document)
deleteDocumentById(String)
deleteDocumentsByIds(List<String>)
addDocumentFile(FormDataDto)
```
##### Service类
```java
com.aisino.iles.lawenforcement.service.DocumentService
findDocumentsPage(DocumentQuery)
listDocuments(DocumentQuery)
saveDocument(Document)
deleteDocumentById(String)
deleteDocumentsByIds(List<String>)
addDocumentFile(FormDataDto)
findByCaseIdAndDocumentName(String, String)
```
##### Repo类
```java
com.aisino.iles.lawenforcement.repository.DocumentRepository
countByCaseIdAndStatus(String, Document.DocumentStatus)
countByStatus(Document.DocumentStatus)
findByCaseIdAndStatus(String, Document.DocumentStatus)
findByCaseIdAndDocumentName(String, String)
```
#### 界面设计
(留空)
addScenePicOrFile(FormDataDto)
getEnforceCheckByEnforcementId(String)
deleteByIdScenePicFile(EnforceCheckResDto)
addSpotCheck(SpotCheck)
getSpotCheck(String)
modifySpotCheck(String, SpotCheck)
findEnforceCheckDtoPage(EnforceCheckQuery, RemoteUserInfo)
saveSupplement(EnforceCheck, RemoteUserInfo)
updateSupplementVerify(EnforceCheck, RemoteUserInfo)
```
##### Repo类
```java
com.aisino.iles.lawenforcement.repository.EnforceCheckRepository
findByEnforcementId(String)
findFirstByEnforcementIdOrderByCreateTimeDesc(String)
countByEnforcementInfo_EnterpriseId(String)
```
#### 界面设计
(留空)
```
com.aisino.iles.lawenforcement
├── controller
│ └── EnforcementInfoController.java
├── service
│ └── EnforcementInfoService.java
├── repository
│ └── EnforcementInfoRepository.java
└── model
├── EnforcementInfo.java
├── dto
│ ├── EnforcementInfoDto.java
│ └── CaseInfoDto.java
└── query
└── EnforcementInfoQuery.java
```
#### 实现类
##### Controller类
```java
com.aisino.iles.lawenforcement.controller.EnforcementInfoController
createEnforcementInfo(EnforcementInfoDto, RemoteUserInfo)
getEnforcementInfosPage(EnforcementInfoQuery)
getEnforcementInfoById(String)
updateEnforcementInfo(String, EnforcementInfoDto)
deleteEnforcementInfoById(String)
deleteEnforcementInfosByIds(List<String>)
createPlanApproval(EnforcementInfoDto)
createSummarize(EnforcementInfoDto)
createCaseInfo(CaseInfoDto)
pushCaseInfo(CaseInfoDto)
createBrainstorm(EnforcementInfoDto)
createCaseExamine(EnforcementInfoDto)
createCaseApprove(EnforcementInfoDto)
```
##### Service类
```java
com.aisino.iles.lawenforcement.service.EnforcementInfoService
saveEnforcementInfo(EnforcementInfoDto, RemoteUserInfo)
findEnforcementInfosPage(EnforcementInfoQuery)
findEnforcementInfoById(String)
existsEnforcementInfoById(String)
updateEnforcementInfo(EnforcementInfoDto)
deleteEnforcementInfoById(String)
deleteEnforcementInfosByIds(List<String>)
savePlanApproval(EnforcementInfoDto)
saveSummarize(EnforcementInfoDto)
saveCaseInfo(CaseInfoDto)
pushCaseInfo(CaseInfoDto)
saveBrainstorm(EnforcementInfoDto)
saveCaseExamine(EnforcementInfoDto)
saveCaseApprove(EnforcementInfoDto)
```
##### Repo类
```java
com.aisino.iles.lawenforcement.repository.EnforcementInfoRepository
// 继承自 BaseRepo, 包含标准CRUD方法
```
#### 界面设计
(留空)
### 企业信息管理
#### 实现设计
企业信息管理模块是系统的基础数据模块之一,负责对监管企业的基本信息进行全生命周期管理。功能包括企业的登记、修改、查询、删除,并支持批量导入和导出,以方便数据迁移和线下处理。此外,模块还提供了企业台账统计功能,并记录企业信息的变更历史,确保数据的可追溯性。
#### 程序流程图
```mermaid
sequenceDiagram
participant Client
participant EnterpriseController
participant EnterpriseService
participant EnterpriseRepository
participant EnterpriseHistoryRepository
Client->>+EnterpriseController: POST /api/lawenforcement/enterprises
EnterpriseController->>+EnterpriseService: saveEnterprise(enterprise, userInfo)
alt update
EnterpriseService->>+EnterpriseRepository: findById(enterpriseId)
EnterpriseRepository-->>-EnterpriseService: Optional<Enterprise>
EnterpriseService->>+EnterpriseHistoryRepository: save(history)
EnterpriseHistoryRepository-->>-EnterpriseService: EnterpriseHistory
end
EnterpriseService->>+EnterpriseRepository: save(enterprise)
EnterpriseRepository-->>-EnterpriseService: Enterprise
EnterpriseService-->>-EnterpriseController: Enterprise
EnterpriseController-->>-Client: 200 OK
```
#### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :------------------------------------------------------------------------------ | :--------- | :--- |
| `com.aisino.iles.lawenforcement.controller.EnterpriseController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.EnterpriseService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.EnterpriseRepository.java` | Repo | Java |
| `com.aisino.iles.lawenforcement.repository.EnterpriseHistoryRepository.java` | Repo | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── EnterpriseController.java
├── service
│ └── EnterpriseService.java
├── repository
│ ├── EnterpriseRepository.java
│ └── EnterpriseHistoryRepository.java
└── model
├── Enterprise.java
├── EnterpriseHistory.java
├── dto
│ └── EnterpriseDto.java
└── query
└── EnterpriseQuery.java
```
#### 实现类
##### Controller类
```java
com.aisino.iles.lawenforcement.controller.EnterpriseController
createEnterprise(Enterprise, RemoteUserInfo)
getEnterpriseById(String)
getEnterprisesPage(EnterpriseQuery, RemoteUserInfo)
updateEnterprise(String, Enterprise, RemoteUserInfo)
deleteEnterpriseById(String, RemoteUserInfo)
deleteEnterprisesByIds(List<String>, RemoteUserInfo)
ledgerStatistics(EnterpriseQuery, RemoteUserInfo)
enterpriseExport(ExportExcelParam<EnterpriseQuery>, HttpServletResponse, RemoteUserInfo)
importFile(HttpServletRequest, RemoteUserInfo)
getEnterprisesByAgencyId(String, RemoteUserInfo)
```
##### Service类
```java
com.aisino.iles.lawenforcement.service.EnterpriseService
saveEnterprise(Enterprise, RemoteUserInfo)
findEnterpriseById(String)
findAllEnterprises(EnterpriseQuery, RemoteUserInfo)
findEnterprisesPage(EnterpriseQuery, RemoteUserInfo)
existsEnterpriseById(String)
deleteEnterpriseById(String, RemoteUserInfo)
deleteEnterprisesByIds(List<String>, RemoteUserInfo)
operateEnterprise(Enterprise, RemoteUserInfo)
ledgerStatistics(EnterpriseQuery, RemoteUserInfo)
enterpriseByImport(MultipartHttpServletRequest, RemoteUserInfo)
findEnterprisesByAgencyId(String, RemoteUserInfo)
```
##### Repo类
```java
com.aisino.iles.lawenforcement.repository.EnterpriseRepository
// 继承自 BaseRepo, 包含标准CRUD方法
com.aisino.iles.lawenforcement.repository.EnterpriseHistoryRepository
// 继承自 BaseRepo, 包含标准CRUD方法
```
#### 界面设计
(留空)
### 企业审核管理
#### 实现设计
企业审核管理模块作为企业信息正式入库前的缓冲区,负责处理外部系统或用户上报的企业信息。它提供了一个完整的审核工作流,包括信息的提交、修改、审核(通过/不通过)和删除。审核通过后,企业信息将自动同步到核心的企业信息管理模块中,确保了数据的准确性和合规性。此模块还与企业历史记录模块联动,完整记录了信息的每次变更和审核过程。
#### 程序流程图
```mermaid
sequenceDiagram
participant Client
participant EnterpriseAuditController
participant EnterpriseAuditService
participant EnterpriseService
participant EnterpriseAuditRepository
participant EnterpriseRepository
Client->>+EnterpriseAuditController: PUT /api/lawenforcement/enterpriseAudits/audit/{id}
EnterpriseAuditController->>+EnterpriseAuditService: saveEnterpriseAudit(auditDto, user, "audit")
EnterpriseAuditService->>+EnterpriseAuditRepository: findById(enterpriseId)
EnterpriseAuditRepository-->>-EnterpriseAuditService: Optional<EnterpriseAudit>
alt Audit Passed
EnterpriseAuditService->>+EnterpriseService: saveEnterprise(enterprise, user)
EnterpriseService->>+EnterpriseRepository: save(enterprise)
EnterpriseRepository-->>-EnterpriseService: Enterprise
EnterpriseService-->>-EnterpriseAuditService: Enterprise
end
EnterpriseAuditService->>+EnterpriseAuditRepository: save(enterpriseAudit)
EnterpriseAuditRepository-->>-EnterpriseAuditService: EnterpriseAudit
EnterpriseAuditService-->>-EnterpriseAuditController: EnterpriseAudit
EnterpriseAuditController-->>-Client: 200 OK
```
#### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :---------------------------------------------------------------------------------- | :--------- | :--- |
| `com.aisino.iles.lawenforcement.controller.EnterpriseAuditController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.EnterpriseAuditService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.EnterpriseAuditRepository.java` | Repo | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── EnterpriseAuditController.java
├── service
│ └── EnterpriseAuditService.java
├── repository
│ └── EnterpriseAuditRepository.java
└── model
├── EnterpriseAudit.java
└── query
└── EnterpriseQuery.java
```
#### 实现类
##### Controller类
```java
com.aisino.iles.lawenforcement.controller.EnterpriseAuditController
createEnterpriseAudit(EnterpriseAudit, RemoteUserInfo)
getEnterpriseAuditById(String)
getEnterpriseAuditsPage(EnterpriseQuery)
updateEnterpriseAudit(String, EnterpriseAudit, RemoteUserInfo)
audit(String, EnterpriseAudit, RemoteUserInfo)
deleteEnterpriseAuditById(String)
deleteEnterpriseAuditsByIds(List<String>)
taskExport(ExportExcelParam<EnterpriseQuery>, HttpServletResponse)
```
##### Service类
```java
com.aisino.iles.lawenforcement.service.EnterpriseAuditService
saveEnterpriseAudit(EnterpriseAudit, RemoteUserInfo, String)
saveEnterpriseAudits(List<EnterpriseAudit>)
findEnterpriseAuditById(String)
findAllEnterpriseAudits(EnterpriseQuery)
findEnterpriseAuditsPage(EnterpriseQuery)
existsEnterpriseAuditById(String)
deleteEnterpriseAuditById(String)
deleteEnterpriseAuditsByIds(List<String>)
uploadEnterprise(Enterprise, RemoteUserInfo)
```
##### Repo类
```java
com.aisino.iles.lawenforcement.repository.EnterpriseAuditRepository
existsByUnifiedSocialCodeAndDelFlag(String, Short)
existsByUnifiedSocialCodeAndDelFlagAndEnterpriseIdNot(String, Short, String)
```
#### 界面设计
(留空)
### 监管部门管理
#### 实现设计
监管部门管理是系统的组织架构基础,负责定义和维护执法机构的层级关系。该模块支持机构的增、删、改、查,并能够以树形结构展示完整的组织架构,便于用户直观地理解和操作。机构信息是关联企业、执法人员及执法活动的基础数据,同时,此模块也支持通过定时任务从第三方系统同步机构数据,确保信息的一致性与准确性。
#### 程序流程图
```mermaid
sequenceDiagram
participant Client
participant AgencyController
participant AgencyService
participant AgencyRepository
Client->>+AgencyController: GET /api/lawenforcement/agencies/tree
AgencyController->>+AgencyService: findAgenciesTree(query)
AgencyService->>+AgencyRepository: findByParentAgencyId(parentId)
AgencyRepository-->>-AgencyService: List<Agency> (root nodes)
loop for each root agency
AgencyService->>+AgencyRepository: findByParentAgencyId(root.agencyId)
AgencyRepository-->>-AgencyService: List<Agency> (children)
end
AgencyService-->>-AgencyController: List<Agency> (tree structure)
AgencyController-->>-Client: 200 OK
```
#### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :-------------------------------------------------------------------------- | :--------- | :--- |
| `com.aisino.iles.lawenforcement.controller.AgencyController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.AgencyService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.AgencyRepository.java` | Repo | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── AgencyController.java
├── service
│ └── AgencyService.java
├── repository
│ └── AgencyRepository.java
└── model
├── Agency.java
└── query
└── AgencyQuery.java
```
#### 实现类
##### Controller类
```java
com.aisino.iles.lawenforcement.controller.AgencyController
createAgency(Agency)
getAgencyById(String)
getAgencyByCode(String)
getAgenciesPage(AgencyQuery)
updateAgency(String, Agency)
deleteAgencyById(String)
deleteAgenciesByIds(List<String>)
getAgencies(AgencyQuery)
getAgenciesTree(AgencyQuery)
```
##### Service类
```java
com.aisino.iles.lawenforcement.service.AgencyService
saveAgency(Agency)
saveAgencies(List<Agency>)
findAgencyById(String)
findAgencyByAgencyCode(String)
findAgenciesPage(AgencyQuery)
findAgencies(AgencyQuery)
deleteAgencyById(String)
deleteAgenciesByIds(List<String>)
existsAgencyById(String)
findAgenciesTree(AgencyQuery)
```
##### Repo类
```java
com.aisino.iles.lawenforcement.repository.AgencyRepository
findByAgencyCode(String)
findByAgencyName(String)
findByAgencyId(String)
findByParentIsNull()
findByParentAgencyId(String)
findLikeAgencyCode(String, Integer)
```
#### 界面设计
(留空)
### 认证授权管理
#### 实现设计
认证授权管理模块是整个系统的安全基石,它通过与`SmartLX SSO`单点登录服务深度集成为系统提供统一、安全的身份认证和会话管理。该模块封装了OAuth2.0协议的核心流程包括通过授权码获取访问令牌Access Token、刷新令牌、获取用户信息以及注销登录。所有用户会话信息在获取后会缓存在Redis中以提高性能并实现分布式会话管理。
#### 程序流程图
```mermaid
sequenceDiagram
participant Client
participant AuthController
participant AuthService
participant SsoClientService
participant RedisTemplate
Client->>+AuthController: POST /lawenforcement/v1/auth/login?code=...
AuthController->>+AuthService: login(code)
AuthService->>+SsoClientService: getAccessToken(code)
SsoClientService-->>-AuthService: Result<AccessToken>
AuthService->>+SsoClientService: getRemoteUserInfo(accessToken)
SsoClientService-->>-AuthService: RemoteUserInfo
AuthService->>+RedisTemplate: opsForValue().set(key, userInfo, ...)
RedisTemplate-->>-AuthService: void
AuthService-->>-AuthController: AccessToken
AuthController-->>-Client: 200 OK with AccessToken
```
#### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
| :---------------------------------------------------------------------- | :------ | :--- |
| `com.aisino.iles.lawenforcement.controller.AuthController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.AuthService.java` | Service | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── AuthController.java
└── service
└── AuthService.java
```
#### 实现类
##### Controller类
```java
com.aisino.iles.lawenforcement.controller.AuthController
getUserInfo(String)
login(String)
sysLogout(String)
logout(String, RemoteUserInfo)
getLoginUrl()
refreshToken(String)
```
##### Service类
```java
com.aisino.iles.lawenforcement.service.AuthService
getUserInfo(String)
login(String)
sysLogout(String)
logout(String, RemoteUserInfo)
getLoginUrl()
refreshToken(String)
refreshTokenBackend(String, String, String, String)
getTokenBackendByIdno(String, String, String, String)
```
#### 界面设计
(留空)
### 消息管理
#### 实现设计
消息管理模块负责系统内用户之间的消息通信。该模块允许用户发送、接收、查看和管理消息。核心功能是实现一个站内信系统,支持向一个或多个用户发送消息,并管理每个接收者的消息状态(如未读、已读、删除)。为了防止重复发送由同一业务事件触发的消息,系统通过唯一的业务键(`businessKey`)进行消息去重。
主要功能包括:
- **发送消息**:允许指定一个或多个接收者发送消息。消息内容包括标题、正文、可选的路由地址和业务键。
- **消息查询**:用户可以获取自己的消息列表,并可以根据消息状态(未读、已读)进行筛选,结果支持分页。
- **状态管理**:用户可以将消息标记为已读或逻辑删除。删除是针对接收者而言的,并不会从系统中物理删除消息本身。
- **未读计数**:提供一个接口,用于快速查询当前用户的未读消息数量,通常用于在界面上显示通知角标。
#### 程序流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant MessageController as 消息控制器
participant MessageService as 消息服务
participant MessageReceiverRepository as 消息接收者仓库
participant MessageRepository as 消息仓库
Client->>+MessageController: GET /api/lawenforcement/messages (获取消息列表)
MessageController->>+MessageService: getUserMessages(status, pageable, user)
MessageService->>+MessageReceiverRepository: findByReceiverIdAndStatusIn(userId, statuses, pageable)
MessageReceiverRepository-->>-MessageService: 返回 MessageReceiver 分页列表
MessageService-->>-MessageController: 返回 MessageResponse 分页列表
MessageController-->>-Client: 返回消息分页结果
Client->>+MessageController: POST /api/lawenforcement/messages (发送消息)
MessageController->>+MessageService: sendMessage(request, user)
MessageService->>+MessageRepository: findByBusinessKey(businessKey) (去重检查)
alt 消息已存在
MessageRepository-->>-MessageService: 返回已存在的消息
MessageService-->>-MessageController: 返回现有消息ID
else 消息不存在
MessageRepository-->>-MessageService: Optional.empty()
MessageService->>+MessageRepository: save(message)
MessageRepository-->>-MessageService: 保存成功
MessageService-->>-MessageController: 返回新消息ID
end
MessageController-->>-Client: 返回操作结果
Client->>+MessageController: PUT /api/lawenforcement/messages/{id}/status (更新状态)
MessageController->>+MessageService: updateMessageStatus(id, status, user)
MessageService->>+MessageReceiverRepository: findByReceiverIdAndMessageId(userId, messageId)
MessageReceiverRepository-->>-MessageService: 返回 MessageReceiver
MessageService->>MessageReceiverRepository: save(receiver) (更新状态)
MessageReceiverRepository-->>-MessageService: 保存成功
MessageService-->>-MessageController: 返回成功
MessageController-->>-Client: 返回操作结果
```
#### 程序设计表
| 文件路径 | 类型 | 语言 |
| ------------------------------------------------------------------------------------- | ---------- | ---- |
| `com.aisino.iles.lawenforcement.controller.MessageController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.MessageService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.MessageRepository.java` | Repo | Java |
| `com.aisino.iles.lawenforcement.repository.MessageReceiverRepository.java` | Repo | Java |
#### 静态模型
```java
com.aisino.iles.lawenforcement
├── controller
│ └── MessageController.java
├── service
│ └── MessageService.java
├── repository
│ ├── MessageRepository.java
│ └── MessageReceiverRepository.java
├── model
│ ├── Message.java
│ └── MessageReceiver.java
└── model.dto.message
└── MessageDto.java
```
#### 实现类方法列表
* **MessageController**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------------------------------------------------------------------- | -------------------- |
| `sendMessage(SendMessageRequest request, RemoteUserInfo user)` | 发送消息 |
| `deleteMessages(DeleteMessagesRequest request, RemoteUserInfo user)` | 批量删除消息 |
| `getUserMessages(MessageStatus status, Pageable pageable, RemoteUserInfo user)` | 获取当前用户的消息列表 |
| `getMessageById(String id, RemoteUserInfo user)` | 获取消息详情 |
| `updateMessageStatus(String id, UpdateStatusRequest request, RemoteUserInfo user)` | 更新消息状态 |
| `deleteMessage(String id, RemoteUserInfo user)` | 删除单条消息 |
| `getUnreadMessageCount(RemoteUserInfo user)` | 获取未读消息数量 |
* **MessageService**
| 方法签名 | 描述 |
| ----------------------------------------------------------------------------- | -------------------- |
| `sendMessage(SendMessageRequest request, RemoteUserInfo user)` | 发送消息 |
| `getUserMessages(MessageStatus status, Pageable pageable, RemoteUserInfo user)` | 获取用户的消息列表 |
| `getMessageById(String messageId, RemoteUserInfo user)` | 获取消息详情 |
| `updateMessageStatus(String messageId, MessageStatus status, RemoteUserInfo user)` | 更新消息状态 |
| `deleteMessage(String messageId, RemoteUserInfo user)` | 删除单条消息 |
| `deleteMessagesForCurrentUser(List<String> messageIds, RemoteUserInfo user)` | 批量删除消息 |
| `getUnreadMessageCount(RemoteUserInfo user)` | 获取未读消息数量 |
* **MessageRepository**
| 方法签名 | 描述 |
| -------------------------------------- | ---------------- |
| `findByBusinessKey(String businessKey)` | 根据业务键查找消息 |
* **MessageReceiverRepository**
| 方法签名 | 描述 |
| ---------------------------------------------------------------------------------------------------- | ------------------------------ |
| `findByReceiverIdAndStatusIn(String receiverId, Collection<MessageStatus> statuses, Pageable pageable)` | 根据接收者和状态分页查找记录 |
| `findByReceiverIdAndMessageIdIn(String receiverId, List<String> messageIds)` | 根据接收者和消息ID列表查找记录 |
| `countByReceiverIdAndStatus(String receiverId, MessageStatus status)` | 根据接收者和状态统计数量 |
#### 界面设计
(无)
### 案件管理
#### 实现设计
案件管理是行政处罚流程的核心模块,负责从案件创建到结案归档的全生命周期管理。该模块基于一个执法信息(`EnforcementInfo`)创建案件,并贯穿调查取证、分析研判、立案上报、审核、结案等多个流程节点。
系统支持以下核心功能:
- **动态查询与数据隔离**:提供强大的分页和列表查询功能,能够根据案件名称、编号、状态、日期范围等多种条件进行动态筛选。查询逻辑会根据当前登录用户的机构级别进行数据隔离,确保数据的安全性和相关性。
- **流程状态管理**:严格管理案件在不同业务节点(`FlowNode`)的状态流转,如从“已立案”到“调查取证中”,再到“审查完成”等。
- **证据管理**:支持调查取证阶段的证据上传,既可以直接上传文件,也可以保存已上传文件的路径。
- **案卷自动生成**:能够将案件关联的所有文书(`Document`合并成一个完整的PDF案卷文件并提供下载功能。此功能集成了FTP服务和PDF处理库。
- **立案上报与审核**:包含立案信息的补充填报、上报以及上级审核的完整工作流。
#### 程序流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant CaseController as 案件控制器
participant CaseService as 案件服务
participant FtpService as FTP服务
Client->>+CaseController: GET /api/lawenforcement/cases (分页查询案件)
CaseController->>+CaseService: findCasesPage(query)
CaseService->>+CaseRepository: findAll(spec, pageable)
CaseRepository-->>-CaseService: 返回 Case 分页列表
CaseService-->>-CaseController: 返回处理后的 Case 分页列表
CaseController-->>-Client: 返回案件分页结果
Client->>+CaseController: PUT /api/lawenforcement/cases/{id}/status (更新状态)
CaseController->>+CaseService: updateCaseStatus(id, status)
CaseService->>+CaseRepository: save(case)
CaseRepository-->>-CaseService: 保存成功
CaseService-->>-CaseController: 返回成功
CaseController-->>-Client: 返回操作结果
Client->>+CaseController: GET /downloadDocument/{caseId} (生成案卷)
CaseController->>+CaseService: exportPdf(caseId)
CaseService->>CaseRepository: findById(caseId)
CaseService->>FtpService: getFileUrl(path) / upload(file)
CaseService-->>-CaseController: 返回包含案卷路径的 Case
CaseController-->>-Client: 返回操作结果
```
#### 程序设计表
| 文件路径 | 类型 | 语言 |
| ------------------------------------------------------------------------------- | ---------- | ---- |
| `com.aisino.iles.lawenforcement.controller.CaseController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.CaseService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.CaseRepository.java` | Repo | Java |
#### 静态模型
```java
com.aisino.iles.lawenforcement
├── controller
│ └── CaseController.java
├── service
│ └── CaseService.java
├── repository
│ └── CaseRepository.java
├── model
│ └── Case.java
└── model.query
└── CaseQuery.java
```
#### 实现类方法列表
* **CaseController**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | -------------------- |
| `getCasesPage(CaseQuery query)` | 分页查询案件信息 |
| `getCaseById(String caseId)` | 查询单个案件信息 |
| `listCases(CaseQuery query)` | 查询案件列表(不分页) |
| `updateCase(String caseId, Case caseInfo)` | 更新案件信息 |
| `addEvidenceFile(FormDataDto formData)` | 上传证据文件 |
| `saveEvidence(String caseId, Case caseInfo)` | 保存证据信息 |
| `fxyp(String caseId, Case caseInfo)` | 分析研判 |
| `downloadDocument(String caseId)` | 生成并下载案卷文件 |
| `updateSupplement(String caseId, Case caseInfo, RemoteUserInfo user)` | 立案上报 |
| `updateSupplementVerify(String caseId, Case caseInfo, RemoteUserInfo user)` | 立案上报审核 |
| `listZflatj(CaseQuery query, RemoteUserInfo user)` | 查询执法立案统计 |
* **CaseService**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | -------------------- |
| `findCasesPage(CaseQuery query)` | 分页查询案件信息 |
| `listCases(CaseQuery query)` | 查询案件列表(不分页) |
| `saveCase(Case c)` | 保存案件信息 |
| `deleteCase(String caseId)` | 删除单个案件 |
| `deleteCases(List<String> caseIds)` | 批量删除案件 |
| `addEvidenceFile(FormDataDto formData)` | 上传证据文件 |
| `saveEvidence(Case caseInfo)` | 保存证据信息 |
| `fxyp(Case caseInfo)` | 分析研判 |
| `exportPdf(String caseId)` | 导出PDF案卷 |
| `saveSupplement(Case caseInfo, RemoteUserInfo user)` | 保存立案上报信息 |
| `updateSupplementVerify(Case caseInfo, RemoteUserInfo user)` | 更新立案上报审核状态 |
| `listZflatj(CaseQuery query, RemoteUserInfo user)` | 查询执法立案统计 |
* **CaseRepository**
| 方法签名 | 描述 |
| ---------------------------------------------------- | ------------------------ |
| `findByEnforcementInfoEnforcementId(String enforcementId)` | 根据执法ID查找关联的案件 |
#### 界面设计
(无)
### 文书管理
#### 实现设计
文书管理模块是案件处理流程中的关键支撑部分,负责与案件关联的各类执法文书的创建、存储、查询和管理。每个文书都与一个具体的案件(`Case`)关联。
该模块的核心功能包括:
- **文书生命周期管理**提供对文书完整的CRUD创建、读取、更新、删除操作支持单个及批量删除。
- **动态查询**支持灵活的查询机制包括分页查询、按ID查询、按执法证号查询、按所属机构查询以及按姓名模糊查询。
- **文件上传集成**通过与FTP服务集成实现了文书附件的上传功能。在上传成功后系统会自动更新文书的存储路径和状态标记为“已完成”确保了数据的一致性。
- **精确查找与统计**提供根据案件ID和文书名称精确查找特定文书的接口并能统计特定案件或全局范围内不同状态的文书数量。
#### 程序流程
```mermaid
sequenceDiagram
participant Client
participant DocumentController
participant DocumentService
participant FtpService
participant DocumentRepository
Client->>+DocumentController: GET /api/lawenforcement/documents (查询文书)
DocumentController->>+DocumentService: findDocumentsPage(query)
DocumentService->>+DocumentRepository: findAll(spec, pageable)
DocumentRepository-->>-DocumentService: 返回 Document 分页列表
DocumentService-->>-DocumentController: 返回处理后的 Document 分页列表
DocumentController-->>-Client: 返回文书分页结果
Client->>+DocumentController: POST /api/lawenforcement/documents/upload-file (上传文书附件)
DocumentController->>+DocumentService: addDocumentFile(formData)
DocumentService->>+FtpService: uploadTempFile(file)
FtpService-->>-DocumentService: 返回文件URL
DocumentService->>+DocumentRepository: save(document)
DocumentRepository-->>-DocumentService: 保存成功
DocumentService-->>-DocumentController: 返回更新后的 Document
DocumentController-->>-Client: 返回操作结果
```
#### 程序设计表
| 文件路径 | 类型 | 语言 |
| ------------------------------------------------------------------------------- | ---------- | ---- |
| `com.aisino.iles.lawenforcement.controller.DocumentController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.DocumentService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.DocumentRepository.java` | Repo | Java |
#### 静态模型
```java
com.aisino.iles.lawenforcement
├── controller
│ └── DocumentController.java
├── service
│ └── DocumentService.java
├── repository
│ └── DocumentRepository.java
├── model
│ └── Document.java
└── model.query
└── DocumentQuery.java
```
#### 实现类方法列表
* **DocumentController**
| 方法签名 | 描述 |
| --------------------------------------------------- | -------------------- |
| `getDocumentPage(DocumentQuery query)` | 分页查询文书信息 |
| `geDocumentList(DocumentQuery query)` | 查询文书列表(不分页) |
| `findByCaseIdAndDocumentName(DocumentQuery query)` | 精确查询单个文书 |
| `createOfficer(Document document)` | 创建文书信息 |
| `updateDocument(String documentId, Document document)` | 更新文书信息 |
| `deleteDocumentById(String documentId)` | 删除单个文书 |
| `deleteDocumentsByIds(List<String> documentIds)` | 批量删除文书 |
| `addDocumentFile(FormDataDto formData)` | 上传执法文书附件 |
* **DocumentService**
| 方法签名 | 描述 |
| --------------------------------------------------- | -------------------- |
| `findDocumentsPage(DocumentQuery query)` | 分页查询文书信息 |
| `listDocuments(DocumentQuery query)` | 查询文书列表(不分页) |
| `saveDocument(Document document)` | 保存文书信息 |
| `deleteDocumentById(String documentId)` | 删除单个文书 |
| `deleteDocumentsByIds(List<String> documentIds)` | 批量删除文书 |
| `addDocumentFile(FormDataDto formData)` | 上传文书附件并保存 |
| `findByCaseIdAndDocumentName(String caseId, String documentName)` | 精确查询单个文书 |
* **DocumentRepository**
| 方法签名 | 描述 |
| --------------------------------------------------------- | -------------------------- |
| `countByCaseIdAndStatus(String caseId, Document.DocumentStatus status)` | 根据案件和状态统计文书数量 |
| `countByStatus(Document.DocumentStatus status)` | 根据状态统计文书数量 |
| `findByCaseIdAndStatus(String caseId, Document.DocumentStatus status)` | 根据案件和状态查找文书列表 |
| `findByCaseIdAndDocumentName(String caseId, String documentName)` | 根据案件和名称查找单个文书 |
#### 界面设计
(无)
### 执法人员管理
#### 实现设计
执法人员管理模块是系统的基础数据模块之一,负责对执法人员信息进行统一维护。该模块与执法人员信息同步调度服务(`OfficerScheduleService`紧密配合一方面通过定时任务从外部系统同步数据另一方面提供API接口供前端进行手动的增、删、改、查操作。
该模块的核心功能包括:
- **全面的CRUD操作**提供对执法人员信息的完整生命周期管理包括创建、更新、按ID删除及批量删除。
- **多维度查询**支持灵活的查询机制包括分页查询、按ID查询、按执法证号查询、按所属机构查询以及按姓名模糊查询。
- **性能优化**在列表查询中通过JPA实体图Entity Graph技术急切加载关联的执法机构信息有效避免了N+1查询问题提升了查询效率。
- **数据统计**:提供统计执法人员总数的功能。
#### 程序流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant OfficerController as 执法人员控制器
participant OfficerService as 执法人员服务
participant OfficerRepository as 执法人员仓库
Client->>+OfficerController: GET /api/lawenforcement/officers (分页查询执法人员)
OfficerController->>+OfficerService: findOfficersPage(query)
OfficerService->>+OfficerRepository: findAll(spec, pageable)
OfficerRepository-->>-OfficerService: 返回 Officer 分页列表
OfficerService-->>-OfficerController: 返回 Officer 分页结果
OfficerController-->>-Client: 返回分页结果
Client->>+OfficerController: POST /api/lawenforcement/officers (创建执法人员)
OfficerController->>+OfficerService: saveOfficer(officer)
OfficerService->>+OfficerRepository: save(officer)
OfficerRepository-->>-OfficerService: 返回保存后的 Officer
OfficerService-->>-OfficerController: 返回 Officer
OfficerController-->>-Client: 返回创建成功的 Officer
```
#### 程序设计表
| 文件路径 | 类型 | 语言 |
| ------------------------------------------------------------------------------- | ---------- | ---- |
| `com.aisino.iles.lawenforcement.controller.OfficerController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.OfficerService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.OfficerRepository.java` | Repo | Java |
#### 静态模型
```java
com.aisino.iles.lawenforcement
├── controller
│ └── OfficerController.java
├── service
│ └── OfficerService.java
├── repository
│ └── OfficerRepository.java
├── model
│ └── Officer.java
└── model.query
└── OfficerQuery.java
```
#### 实现类方法列表
* **OfficerController**
| 方法签名 | 描述 |
| --------------------------------------------------- | ------------------------ |
| `createOfficer(Officer officer)` | 创建执法人员 |
| `getOfficerById(String officerId)` | 根据ID查询执法人员 |
| `getOfficerByCertificateNo(String certificateNo)` | 根据执法证号查询执法人员 |
| `getOfficersByAgencyId(String agencyId)` | 根据机构ID查询执法人员 |
| `getOfficersPage(OfficerQuery query)` | 分页查询执法人员 |
| `updateOfficer(String officerId, Officer officer)` | 更新执法人员 |
| `deleteOfficerById(String officerId)` | 根据ID删除执法人员 |
| `deleteOfficersByIds(List<String> officerIds)` | 批量删除执法人员 |
| `countOfficers()` | 获取执法人员总数 |
| `listOfficers(OfficerQuery query)` | 查询执法人员列表(不分页) |
* **OfficerService**
| 方法签名 | 描述 |
| --------------------------------------------------- | -------------------------- |
| `saveOfficer(Officer officer)` | 保存执法人员信息 |
| `saveOfficers(List<Officer> officers)` | 批量保存执法人员信息 |
| `findOfficerById(String officerId)` | 根据ID查询执法人员 |
| `findOfficerByCertificateNo(String certificateNo)` | 根据执法证号查询执法人员 |
| `findOfficersByAgencyId(String agencyId)` | 根据机构ID查询执法人员列表 |
| `findOfficersPage(OfficerQuery officerQuery)` | 分页查询执法人员信息 |
| `deleteOfficerById(String officerId)` | 根据ID删除执法人员 |
| `deleteOfficersByIds(List<String> officerIds)` | 批量删除执法人员 |
| `countOfficers()` | 获取执法人员总数 |
| `listOfficers(OfficerQuery query)` | 查询执法人员列表(不分页) |
* **OfficerRepository**
| 方法签名 | 描述 |
| --------------------------------------------------- | -------------------------- |
| `findByCertificateNo(String certificateNo)` | 根据执法证号查询执法人员 |
| `findByAgencyId(String agencyId)` | 根据机构ID查询执法人员列表 |
| `findByOfficerNameContaining(String officerName)` | 根据姓名模糊查询执法人员 |
#### 界面设计
(无)
### 执法信息管理
#### 实现设计
执法信息管理是系统的核心业务流程引擎负责驱动从执法计划到案件完成的整个生命周期。它不仅仅是一个数据管理模块更是一个状态机通过一系列API精确控制执法流程在不同节点间的流转。
该模块的核心功能包括:
- **流程驱动与状态管理**:定义了从“方案待审批”到“完成”的多个流程节点(`FlowNode`),并通过 `savePlanApproval`, `saveSummarize`, `saveCaseInfo` 等方法实现状态的精确流转。
- **实体聚合与数据整合**:在查询单个执法信息时,能聚合显示企业、机构、所有检查记录、执法人员、检查项以及关联案件的完整信息,为前端提供了一站式的数据视图。
- **案件创建与关联**:支持在执法流程中直接创建案件(`Case`),自动生成案件编号,并将执法信息与新建的案件进行关联,实现了执法与办案的无缝衔接。
- **动态查询与数据隔离**使用JPA `Specification` 实现了复杂、动态的条件查询,并能根据当前用户的机构代码进行数据隔离,确保了数据的安全性和相关性。
- **事务性保证**:所有涉及数据变更的操作均在事务(`@Transactional`)中执行,确保了跨多个实体(如 `EnforcementInfo`, `EnforceCheck`, `Case`)更新时的数据一致性。
#### 程序流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant EnforcementInfoController as 执法信息控制器
participant EnforcementInfoService as 执法信息服务
participant EnforcementInfoRepository as 执法信息仓库
participant CaseRepository as 案件仓库
Client->>+EnforcementInfoController: POST /api/lawenforcement/enforcements (创建执法信息)
EnforcementInfoController->>+EnforcementInfoService: saveEnforcementInfo(dto, user)
EnforcementInfoService->>+EnforcementInfoRepository: save(enforcementInfo)
EnforcementInfoRepository-->>-EnforcementInfoService: 保存成功
EnforcementInfoService-->>-EnforcementInfoController: 返回成功
EnforcementInfoController-->>-Client: 返回操作结果
Client->>+EnforcementInfoController: POST /api/lawenforcement/enforcements/case (执法信息创建案件)
EnforcementInfoController->>+EnforcementInfoService: saveCaseInfo(caseInfoDto)
EnforcementInfoService->>+EnforcementInfoRepository: findById(enforcementId)
EnforcementInfoRepository-->>-EnforcementInfoService: 返回 EnforcementInfo
EnforcementInfoService->>EnforcementInfoService: 更新当前节点为 '已立案'
EnforcementInfoService->>+CaseRepository: save(caseInfo)
CaseRepository-->>-EnforcementInfoService: 保存案件成功
EnforcementInfoService-->>-EnforcementInfoController: 返回成功
EnforcementInfoController-->>-Client: 返回操作结果
```
#### 程序设计表
| 文件路径 | 类型 | 语言 |
| --------------------------------------------------------------------------------------- | ---------- | ---- |
| `com.aisino.iles.lawenforcement.controller.EnforcementInfoController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.EnforcementInfoService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.EnforcementInfoRepository.java` | Repo | Java |
| `com.aisino.iles.lawenforcement.repository.EnforceCheckRepository.java` | Repo | Java |
#### 静态模型
```java
com.aisino.iles.lawenforcement
├── controller
│ └── EnforcementInfoController.java
├── service
│ └── EnforcementInfoService.java
├── repository
│ ├── EnforcementInfoRepository.java
│ └── EnforceCheckRepository.java
├── model
│ ├── EnforcementInfo.java
│ └── EnforceCheck.java
├── model.dto
│ ├── EnforcementInfoDto.java
│ └── CaseInfoDto.java
└── model.query
└── EnforcementInfoQuery.java
```
#### 实现类方法列表
* **EnforcementInfoController**
| 方法签名 | 描述 |
| ------------------------------------------------------------- | ------------------ |
| `createEnforcementInfo(EnforcementInfoDto dto, RemoteUserInfo user)` | 创建执法信息 |
| `getEnforcementInfosPage(EnforcementInfoQuery query)` | 分页查询执法信息 |
| `getEnforcementInfoById(String enforcementId)` | 根据ID查询执法信息 |
| `updateEnforcementInfo(String id, EnforcementInfoDto dto)` | 更新执法信息 |
| `deleteEnforcementInfoById(String enforcementId)` | 删除单个执法信息 |
| `deleteEnforcementInfosByIds(List<String> ids)` | 批量删除执法信息 |
| `createPlanApproval(EnforcementInfoDto dto)` | 执法信息方案审批 |
| `createSummarize(EnforcementInfoDto dto)` | 执法信息总结 |
| `createCaseInfo(CaseInfoDto dto)` | 执法信息创建案件 |
| `pushCaseInfo(CaseInfoDto dto)` | 执法信息推送案件 |
| `createBrainstorm(EnforcementInfoDto dto)` | 执法信息集体讨论 |
| `createCaseExamine(EnforcementInfoDto dto)` | 执法信息案件审核 |
| `createCaseApprove(EnforcementInfoDto dto)` | 执法信息案件审批 |
* **EnforcementInfoService**
| 方法签名 | 描述 |
| ------------------------------------------------------------- | -------------------- |
| `saveEnforcementInfo(EnforcementInfoDto dto, RemoteUserInfo user)` | 保存执法信息 |
| `findEnforcementInfosPage(EnforcementInfoQuery query)` | 分页查询执法信息 |
| `findEnforcementInfoById(String enforcementId)` | 根据ID查询执法信息 |
| `updateEnforcementInfo(EnforcementInfoDto dto)` | 修改执法信息 |
| `deleteEnforcementInfoById(String enforcementId)` | 根据ID删除执法信息 |
| `deleteEnforcementInfosByIds(List<String> ids)` | 批量删除执法信息 |
| `savePlanApproval(EnforcementInfoDto dto)` | 保存方案审批信息 |
| `saveSummarize(EnforcementInfoDto dto)` | 保存总结信息 |
| `saveCaseInfo(CaseInfoDto dto)` | 保存案件信息 |
| `pushCaseInfo(CaseInfoDto dto)` | 推送案件信息 |
| `saveBrainstorm(EnforcementInfoDto dto)` | 保存集体讨论信息 |
| `saveCaseExamine(EnforcementInfoDto dto)` | 保存案件审核信息 |
| `saveCaseApprove(EnforcementInfoDto dto)` | 保存案件审批信息 |
* **EnforceCheckRepository**
| 方法签名 | 描述 |
| --------------------------------------------------------------- | ------------------------------ |
| `findByEnforcementId(String enforcementId)` | 根据执法ID查找检查记录 |
| `findFirstByEnforcementIdOrderByCreateTimeDesc(String enforcementId)` | 根据执法ID查找最新的检查记录 |
| `countByEnforcementInfo_EnterpriseId(String enterpriseId)` | 统计企业关联的检查记录总数 |
#### 界面设计
(无)
### 企业摄像头管理
#### 实现设计
企业摄像头管理模块是“非现场执法”功能的基础,旨在提供对企业监控点信息的查询能力。通过此模块,系统可以获取特定企业的所有摄像头数据,为后续的视频分析、远程巡查等非现场执法活动提供数据支持。
该模块的核心功能非常明确:
- **按企业查询**提供一个核心API允许根据企业的统一社会信用代码USCC查询其所有关联的监控点位信息。
- **动态查询构建**后端服务层利用JPA `Specification` 动态构建查询条件。值得注意的是当前实现中按USCC过滤的逻辑被注释这意味着查询会返回所有企业的摄像头信息这可能是一个待实现或需要修正的功能点。
- **简洁的API设计**控制器层暴露了一个单一的GET端点接收USCC作为查询参数设计清晰易于集成。
#### 程序流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant EnterpriseCameraController as 企业摄像头控制器
participant EnterpriseCameraService as 企业摄像头服务
participant EnterpriseCameraRepository as 企业摄像头仓库
Client->>+EnterpriseCameraController: GET /api/lawenforcement/enterprises/camera?uscc={uscc}
EnterpriseCameraController->>+EnterpriseCameraService: findEnterpriseCamera(uscc)
EnterpriseCameraService->>EnterpriseCameraService: buildSpecification(uscc)
EnterpriseCameraService->>+EnterpriseCameraRepository: findAll(specification)
EnterpriseCameraRepository-->>-EnterpriseCameraService: 返回 EnterpriseCamera 列表
EnterpriseCameraService-->>-EnterpriseCameraController: 返回摄像头列表
EnterpriseCameraController-->>-Client: 返回摄像头信息JSON数组
```
#### 程序设计表
| 文件路径 | 类型 | 语言 |
| ----------------------------------------------------------------------------------------- | ---------- | ---- |
| `com.aisino.iles.lawenforcement.controller.EnterpriseCameraController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.EnterpriseCameraService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.EnterpriseCameraRepository.java` | Repo | Java |
#### 静态模型
```java
com.aisino.iles.lawenforcement
├── controller
│ └── EnterpriseCameraController.java
├── service
│ └── EnterpriseCameraService.java
├── repository
│ └── EnterpriseCameraRepository.java
└── model
└── EnterpriseCamera.java
```
#### 实现类方法列表
* **EnterpriseCameraController**
| 方法签名 | 描述 |
| -------------------------------------- | -------------------- |
| `getEnterpriseCamera(String uscc)` | 根据USCC查询企业摄像头 |
* **EnterpriseCameraService**
| 方法签名 | 描述 |
| -------------------------------------- | -------------------- |
| `findEnterpriseCamera(String uscc)` | 查询企业摄像头信息 |
* **EnterpriseCameraRepository**
| 方法签名 | 描述 |
| -------- | ---- |
| (继承自 `BaseRepo`) | 提供基础CRUD功能 |
#### 界面设计
(无)
### 举报核查管理
#### 实现设计
举报核查管理模块是系统处理外部举报、投诉的核心工作流引擎。它不仅负责记录和管理举报信息,更重要的是驱动从接收举报到核查、转交、立案、反馈的完整业务闭环。
该模块的核心功能包括:
- **完整的工作流管理**:支持举报信息的“转交”和“反馈”操作。其中,“转交”操作是核心,它不仅会更新举报单的状态,还会自动调用`EnforcementInfoService`,为被举报企业创建一个新的执法检查任务,从而实现从被动响应到主动监管的无缝衔接。
- **复杂数据输入处理**:通过`FormDataDto`后端能够优雅地处理同时包含JSON业务数据和文件上传的复杂请求将举报详情与相关证据材料如截图、文档一并保存。
- **深度FTP集成**:与`FtpService`紧密集成所有上传的举报材料都会被安全地存储在FTP服务器上。在查询详情时系统会动态生成文件的预览和下载URL方便用户查看。
- **全面的操作可追溯性**:每一次关键操作(如新增、转交、反馈)都会被`ReportCheckOperRepository`记录下来,确保了整个处理过程都有据可查,满足审计要求。
- **严格的数据隔离**:查询逻辑与用户权限紧密挂钩,系统会根据当前登录用户的机构级别自动过滤数据,确保用户只能访问其管辖范围内的举报信息,保障了数据的安全性和合规性。
#### 程序流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant ReportCheckController as 举报核查控制器
participant ReportCheckService as 举报核查服务
participant FtpService as FTP服务
participant ReportCheckRepository as 举报核查仓库
participant EnforcementInfoService as 执法信息服务
Client->>+ReportCheckController: POST /api/lawenforcement/reportChecks (创建举报,含文件)
ReportCheckController->>+ReportCheckService: saveReportCheck(formData, user, "add")
ReportCheckService->>+FtpService: uploadTempFile(file)
FtpService-->>-ReportCheckService: 返回文件URL
ReportCheckService->>+ReportCheckRepository: save(reportCheck)
ReportCheckRepository-->>-ReportCheckService: 保存成功
ReportCheckService-->>-ReportCheckController: 返回成功
ReportCheckController-->>-Client: 返回操作结果
Client->>+ReportCheckController: PUT /api/lawenforcement/reportChecks/transferAll (批量转交)
ReportCheckController->>+ReportCheckService: transferReportChecksByIds(ids, user)
ReportCheckService->>+ReportCheckRepository: findById(id)
ReportCheckRepository-->>-ReportCheckService: 返回 ReportCheck
ReportCheckService->>ReportCheckService: 更新状态为 '已转交'
ReportCheckService->>+EnforcementInfoService: saveEnforcementInfo(dto, user)
EnforcementInfoService-->>-ReportCheckService: 创建执法任务成功
ReportCheckService-->>-ReportCheckController: 返回成功
ReportCheckController-->>-Client: 返回操作结果
```
#### 程序设计表
| 文件路径 | 类型 | 语言 |
| --------------------------------------------------------------------------------------- | ---------- | ---- |
| `com.aisino.iles.lawenforcement.controller.ReportCheckController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.ReportCheckService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.ReportCheckRepository.java` | Repo | Java |
| `com.aisino.iles.lawenforcement.repository.ReportCheckOperRepository.java` | Repo | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── ReportCheckController.java
├── service
│ └── ReportCheckService.java
├── repository
│ ├── ReportCheckRepository.java
│ └── ReportCheckOperRepository.java
├── model
│ ├── ReportCheck.java
│ └── ReportCheckOper.java
├── model.dto
│ └── FormDataDto.java
└── model.query
└── ReportCheckQuery.java
```
#### 实现类方法列表
* **ReportCheckController**
| 方法签名 | 描述 |
| ------------------------------------------------------------- | ------------------ |
| `createReportCheck(FormDataDto dto, RemoteUserInfo user)` | 创建举报核查信息 |
| `getReportCheckById(String id)` | 根据ID查询举报信息 |
| `getReportChecksPage(ReportCheckQuery query, RemoteUserInfo user)` | 分页查询举报信息 |
| `updateReportCheck(String id, FormDataDto dto, RemoteUserInfo user)` | 更新举报信息 |
| `deleteReportChecksByIds(List<String> ids)` | 批量删除举报信息 |
| `transferReportChecksByIds(List<String> ids, RemoteUserInfo user)` | 批量转交举报 |
| `transferReportChecksByIds(ReportCheck check, RemoteUserInfo user)` | 单个转交举报 |
| `backReportCheck(String id, ReportCheck check, RemoteUserInfo user)` | 反馈举报处理结果 |
* **ReportCheckService**
| 方法签名 | 描述 |
| ------------------------------------------------------------- | ---------------------- |
| `saveReportCheck(FormDataDto dto, RemoteUserInfo user, String type)` | 保存举报核查信息 |
| `findReportCheckById(String id)` | 根据ID查询举报信息 |
| `findReportChecksPage(ReportCheckQuery query, RemoteUserInfo user)` | 分页查询举报信息 |
| `deleteReportChecksByIds(List<String> ids)` | 批量删除举报信息 |
| `transferReportChecksByIds(List<String> ids, RemoteUserInfo user)` | 批量转交并自动立案 |
| `transferReportChecksById(ReportCheck check, RemoteUserInfo user)` | 单个转交举报 |
| `backReportCheck(String id, ReportCheck check, RemoteUserInfo user)` | 反馈举报处理结果 |
* **ReportCheckRepository**
| 方法签名 | 描述 |
| -------------------------------------- | ---------------------------------------- |
| `getMaxAcceptTime()` | 获取特定来源的最大受理时间 |
| `findByPumpId(String pumpId)` | 根据外部系统ID查询举报 |
#### 界面设计
(无)
### 监督检查管理
#### 实现设计
监督检查管理模块是系统实现上级对下级执法行为进行监督和指导的核心功能模块。该模块通过创建监督检查任务,对下级执法机构的执法行为进行全流程跟踪和评估,确保执法工作的规范性和有效性。
该模块的核心功能包括:
- **多级监督检查**:支持上级机关对下级机关的执法行为进行监督检查,包括任务下发、进度跟踪、结果反馈等完整流程。
- **灵活的任务管理**:支持单个企业或批量企业监督检查任务的创建、查询、更新和删除操作。
- **执法信息关联**监督检查任务可与执法检查信息EnforcementInfo和检查项EnforceCheck关联形成完整的执法监督链条。
- **状态管理**:监督检查任务具有明确的状态流转(待完成/已完结),便于跟踪任务执行情况。
- **数据统计**:提供监督检查数据的统计分析功能,支持按机构、时间等维度进行数据汇总和展示。
#### 程序流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant SupervisionCheckController as 监督检查控制器
participant SupervisionCheckService as 监督检查服务
participant SupervisionCheckRepository as 监督检查仓库
participant EnforcementInfoService as 执法信息服务
participant EnforceCheckRepository as 检查项仓库
Client->>+SupervisionCheckController: POST /api/lawenforcement/supervisions (创建监督检查)
SupervisionCheckController->>+SupervisionCheckService: saveSupervisionChecks(supervisionCheckDto, user)
alt 单个企业检查
SupervisionCheckService->>SupervisionCheckService: 创建单个监督检查任务
else 批量企业检查
SupervisionCheckService->>SupervisionCheckService: 批量创建监督检查任务
end
SupervisionCheckService->>+SupervisionCheckRepository: saveAll(supervisionChecks)
SupervisionCheckRepository-->>-SupervisionCheckService: 保存成功
SupervisionCheckService-->>-SupervisionCheckController: 返回成功
SupervisionCheckController-->>-Client: 返回操作结果
Client->>+SupervisionCheckController: POST /api/lawenforcement/supervisions/addEnforcementInfoCheck (添加执法检查)
SupervisionCheckController->>+SupervisionCheckService: addEnforcementInfoCheck(supervisionCheckDto, user)
SupervisionCheckService->>+EnforcementInfoService: 创建执法信息
EnforcementInfoService-->>-SupervisionCheckService: 返回执法信息
SupervisionCheckService->>+EnforceCheckRepository: 保存检查项
EnforceCheckRepository-->>-SupervisionCheckService: 保存成功
SupervisionCheckService->>+SupervisionCheckRepository: 更新监督检查状态
SupervisionCheckRepository-->>-SupervisionCheckService: 更新成功
SupervisionCheckService-->>-SupervisionCheckController: 返回成功
SupervisionCheckController-->>-Client: 返回操作结果
```
#### 程序设计表
| 文件路径 | 类型 | 语言 |
| --------------------------------------------------------------------------------------- | ---------- | ---- |
| `com.aisino.iles.lawenforcement.controller.SupervisionCheckController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.SupervisionCheckService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.SupervisionCheckRepository.java` | Repository | Java |
| `com.aisino.iles.lawenforcement.model.SupervisionCheck.java` | Entity | Java |
| `com.aisino.iles.lawenforcement.model.dto.SupervisionCheckDto.java` | DTO | Java |
| `com.aisino.iles.lawenforcement.model.query.SupervisionCheckQuery.java` | Query | Java |
| `com.aisino.iles.lawenforcement.model.dto.SupervisionCheckStatisticsDto.java` | DTO | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── SupervisionCheckController.java
├── service
│ └── SupervisionCheckService.java
├── repository
│ └── SupervisionCheckRepository.java
├── model
│ └── SupervisionCheck.java
├── model.dto
│ ├── SupervisionCheckDto.java
│ └── SupervisionCheckStatisticsDto.java
└── model.query
└── SupervisionCheckQuery.java
```
#### 实现类方法列表
* **SupervisionCheckController**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | ------------------------------ |
| `getSupervisionChecksPage(SupervisionCheckQuery query, RemoteUserInfo user)` | 分页查询监督检查任务 |
| `createSupervisionCheck(SupervisionCheckDto dto, RemoteUserInfo user)` | 创建监督检查任务 |
| `addEnforcementInfoCheck(SupervisionCheckDto dto, RemoteUserInfo user)` | 添加执法检查信息 |
| `getSupervisionCheckById(String checkId)` | 根据ID查询监督检查任务 |
| `updateSupervisionCheck(String checkId, SupervisionCheck check)` | 更新监督检查任务 |
| `updateSupervisionCheckStatus(String checkId, CheckStatus status)` | 更新监督检查状态 |
| `deleteSupervisionCheckById(String checkId)` | 删除监督检查任务 |
| `deleteSupervisionChecksByIds(List<String> checkIds)` | 批量删除监督检查任务 |
| `countSupervisionChecks()` | 获取监督检查任务总数 |
| `checkStatistics(SupervisionCheckQuery query, RemoteUserInfo user)` | 监督检查统计 |
| `sdywStatistics(SupervisionCheckQuery query, RemoteUserInfo user)` | 监督检查业务统计 |
* **SupervisionCheckService**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | ------------------------------ |
| `saveSupervisionChecks(SupervisionCheckDto dto, RemoteUserInfo user)` | 保存监督检查任务 |
| `saveSupervisionCheck(SupervisionCheck check)` | 保存单条监督检查任务 |
| `saveSupervisionChecks(List<SupervisionCheck> checks)` | 批量保存监督检查任务 |
| `addEnforcementInfoCheck(SupervisionCheckDto dto, RemoteUserInfo user)` | 添加执法检查信息 |
| `findSupervisionCheckById(String checkId)` | 根据ID查询监督检查任务 |
| `findSupervisionChecksPage(SupervisionCheckQuery query, RemoteUserInfo user)` | 分页查询监督检查任务 |
| `deleteSupervisionCheckById(String checkId)` | 删除监督检查任务 |
| `deleteSupervisionChecksByIds(List<String> checkIds)` | 批量删除监督检查任务 |
| `existsSupervisionCheckById(String checkId)` | 检查监督检查任务是否存在 |
| `countSupervisionChecks()` | 获取监督检查任务总数 |
| `updateSupervisionCheckStatus(String checkId, CheckStatus status)` | 更新监督检查状态 |
| `checkStatistics(SupervisionCheckQuery query, RemoteUserInfo user)` | 监督检查统计 |
| `sdywStatistics(SupervisionCheckQuery query, RemoteUserInfo user)` | 监督检查业务统计 |
* **SupervisionCheckRepository**
| 方法签名 | 描述 |
| ------------------------------------------------------------- | ------------------------------ |
| `findByEnterpriseId(String enterpriseId)` | 根据企业ID查询监督检查任务 |
| `findByAgencyId(String agencyId)` | 根据机构ID查询监督检查任务 |
| `findByCheckStatus(CheckStatus status)` | 根据状态查询监督检查任务 |
| `findByEnterpriseIdAndCheckStatus(String enterpriseId, CheckStatus status)` | 根据企业和状态查询监督检查任务 |
| `checkStatistics(String gxdwbm, Integer ilevel)` | 监督检查统计 |
#### 界面设计
(无)
### 自动执法计划管理
#### 实现设计
自动执法计划管理模块是系统实现执法任务自动化管理的核心功能模块。该模块通过创建自动执法计划,实现对企业执法任务的自动化派发和管理,提高执法效率和管理水平。
该模块的核心功能包括:
- **计划管理**:支持创建、查询、更新和删除自动执法计划,包括任务名称、描述、时间范围等基本信息管理。
- **任务状态跟踪**:跟踪自动执法计划的任务状态(待派发/已派发),确保任务执行过程可追溯。
- **企业清单管理**:支持关联多个企业到执法计划,实现批量执法任务管理。
- **计划类型支持**:支持不同类型的执法计划,包括重点检查企业清单和双重双随机一公开清单。
- **执法信息关联**:与执法信息模块集成,实现执法任务的自动派发和执行。
#### 程序流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant AutoEnforcementPlanController as 自动执法计划控制器
participant AutoEnforcementPlanService as 自动执法计划服务
participant AutoEnforcementPlanRepository as 自动执法计划仓库
participant EnforcementInfoService as 执法信息服务
participant EnterpriseRepository as 企业仓库
Client->>+AutoEnforcementPlanController: POST /api/lawenforcement/autoEnforcementPlans (创建自动执法计划)
AutoEnforcementPlanController->>+AutoEnforcementPlanService: saveAutoEnforcementPlan(autoEnforcementPlan, user, "add")
AutoEnforcementPlanService->>AutoEnforcementPlanRepository: save(autoEnforcementPlan)
AutoEnforcementPlanRepository-->>-AutoEnforcementPlanService: 保存成功
AutoEnforcementPlanService-->>-AutoEnforcementPlanController: 返回保存结果
AutoEnforcementPlanController-->>-Client: 返回操作结果
Client->>+AutoEnforcementPlanController: PUT /api/lawenforcement/autoEnforcementPlans/{planId} (派发自动执法计划)
AutoEnforcementPlanController->>+AutoEnforcementPlanService: saveAutoEnforcementPlan(autoEnforcementPlan, user, "dispatched")
alt 有关联企业
AutoEnforcementPlanService->>+EnforcementInfoService: 创建执法信息
EnforcementInfoService-->>-AutoEnforcementPlanService: 返回执法信息
end
AutoEnforcementPlanService->>AutoEnforcementPlanRepository: save(autoEnforcementPlan)
AutoEnforcementPlanRepository-->>-AutoEnforcementPlanService: 更新成功
AutoEnforcementPlanService-->>-AutoEnforcementPlanController: 返回更新结果
AutoEnforcementPlanController-->>-Client: 返回操作结果
Client->>+AutoEnforcementPlanController: GET /api/lawenforcement/autoEnforcementPlans (分页查询自动执法计划)
AutoEnforcementPlanController->>+AutoEnforcementPlanService: findAutoEnforcementPlansPage(query)
AutoEnforcementPlanService->>AutoEnforcementPlanRepository: findAll(spec, pageable)
AutoEnforcementPlanRepository-->>-AutoEnforcementPlanService: 返回分页结果
AutoEnforcementPlanService-->>-AutoEnforcementPlanController: 返回分页结果
AutoEnforcementPlanController-->>-Client: 返回分页数据
```
#### 程序设计表
| 文件路径 | 类型 | 语言 |
| --------------------------------------------------------------------------------------- | ---------- | ---- |
| `com.aisino.iles.lawenforcement.controller.AutoEnforcementPlanController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.AutoEnforcementPlanService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.AutoEnforcementPlanRepository.java` | Repository | Java |
| `com.aisino.iles.lawenforcement.model.AutoEnforcementPlan.java` | Entity | Java |
| `com.aisino.iles.lawenforcement.model.query.AutoEnforcementPlanQuery.java` | Query | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── AutoEnforcementPlanController.java
├── service
│ └── AutoEnforcementPlanService.java
├── repository
│ └── AutoEnforcementPlanRepository.java
├── model
│ └── AutoEnforcementPlan.java
└── model.query
└── AutoEnforcementPlanQuery.java
```
#### 实现类方法列表
* **AutoEnforcementPlanController**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | ------------------------------ |
| `createAutoEnforcementPlan(AutoEnforcementPlan, RemoteUserInfo)` | 创建自动执法计划 |
| `getAutoEnforcementPlanById(String)` | 根据ID查询自动执法计划 |
| `getAutoEnforcementPlansPage(AutoEnforcementPlanQuery)` | 分页查询自动执法计划 |
| `updateAutoEnforcementPlan(String, AutoEnforcementPlan, RemoteUserInfo)`| 更新自动执法计划 |
| `deleteAutoEnforcementPlanById(String)` | 删除自动执法计划 |
| `deleteAutoEnforcementPlansByIds(List<String>)` | 批量删除自动执法计划 |
* **AutoEnforcementPlanService**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | ------------------------------ |
| `saveAutoEnforcementPlan(AutoEnforcementPlan, RemoteUserInfo, String)` | 保存自动执法计划 |
| `saveAutoEnforcementPlans(List<AutoEnforcementPlan>)` | 批量保存自动执法计划 |
| `findAutoEnforcementPlanById(String)` | 根据ID查询自动执法计划 |
| `findAutoEnforcementPlansPage(AutoEnforcementPlanQuery)` | 分页查询自动执法计划 |
| `deleteAutoEnforcementPlanById(String)` | 删除自动执法计划 |
| `deleteAutoEnforcementPlansByIds(List<String>)` | 批量删除自动执法计划 |
| `existsAutoEnforcementPlanById(String)` | 检查自动执法计划是否存在 |
| `countAutoEnforcementPlans()` | 获取自动执法计划总数 |
* **AutoEnforcementPlanRepository**
| 方法签名 | 描述 |
| ------------------------------------------------------------- | ------------------------------ |
| `findById(String)` | 根据ID查询自动执法计划 |
| `findAll(Specification<AutoEnforcementPlan>, Pageable)` | 根据条件分页查询自动执法计划 |
| `existsById(String)` | 检查自动执法计划是否存在 |
| `deleteById(String)` | 删除自动执法计划 |
| `deleteAllById(Iterable<String>)` | 批量删除自动执法计划 |
#### 界面设计
(无)
### 执法一张图
#### 实现设计
执法一张图模块是系统实现数据可视化分析的核心功能模块。该模块通过图表、地图和统计卡片等形式,直观展示执法数据、企业数据和案件数据的综合统计分析结果,为决策提供数据支持。
该模块的核心功能包括:
- **数据概览**:展示企业总数、案件总数等关键指标
- **企业统计分析**:按行业、风险等级等维度统计企业分布情况
- **执法检查统计**:按时间、区域等维度统计执法检查情况
- **案件办理统计**:展示案件总数、处罚案件数等案件相关统计
- **执法形式分析**:统计不同执法形式的使用情况
- **案件来源分析**:分析案件来源分布情况
- **检查案件趋势**:展示检查案件的时间趋势
- **任务完成情况**:统计各区域任务完成情况
- **监督检查计划**:展示监督检查计划的执行情况
#### 程序流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant BigScreenController as 执法一张图控制器
participant BigScreenService as 执法一张图服务
participant BigScreenRepository as 执法一张图数据仓库
participant EnforcementInfoRepository as 执法信息仓库
participant EnterpriseRepository as 企业仓库
participant OnlinePatrolRepository as 在线巡查仓库
Client->>+BigScreenController: GET /api/bigscreen/dataoverview (数据概览)
BigScreenController->>+BigScreenService: getDataOverview()
BigScreenService->>BigScreenRepository: getqys()
BigScreenRepository-->>BigScreenService: 返回企业总数
BigScreenService->>BigScreenRepository: getajs()
BigScreenRepository-->>BigScreenService: 返回案件总数
BigScreenService-->>-BigScreenController: 返回数据概览
BigScreenController-->>-Client: 返回数据概览
Client->>+BigScreenController: GET /api/bigscreen/qytj (企业统计)
BigScreenController->>+BigScreenService: getEnterpriseStatistics()
BigScreenService->>BigScreenRepository: getqyfjfl()
BigScreenRepository-->>BigScreenService: 返回企业分类统计
BigScreenService-->>-BigScreenController: 返回企业统计数据
BigScreenController-->>-Client: 返回企业统计数据
Client->>+BigScreenController: GET /api/bigscreen/zfjc (执法检查统计)
BigScreenController->>+BigScreenService: getZfjcs(bigScreenDto)
alt 按月统计
BigScreenService->>BigScreenRepository: getzfjcs(本月开始时间, 当前时间)
else 按年统计
BigScreenService->>BigScreenRepository: getzfjcs(本年开始时间, 当前时间)
end
BigScreenRepository-->>BigScreenService: 返回执法检查统计
BigScreenService-->>-BigScreenController: 返回执法检查统计数据
BigScreenController-->>-Client: 返回执法检查统计数据
```
#### 程序设计表
| 文件路径 | 类型 | 语言 |
| --------------------------------------------------------------------------------------- | ---------- | ---- |
| `com.aisino.iles.lawenforcement.controller.BigScreenController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.BigScreenService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.BigScreenRepository.java` | Repository | Java |
| `com.aisino.iles.lawenforcement.model.dto.BigScreenDto.java` | DTO | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── BigScreenController.java
├── service
│ └── BigScreenService.java
├── repository
│ └── BigScreenRepository.java
└── model.dto
└── BigScreenDto.java
```
#### 实现类方法列表
* **BigScreenController**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | ------------------------------ |
| `getDataOverview()` | 获取数据概览统计 |
| `getEnterpriseStatistics()` | 获取企业信息统计 |
| `getZfjcs(BigScreenDto)` | 获取执法检查统计 |
| `getAjbl()` | 获取案件办理统计 |
| `getZfxs()` | 获取执法形式统计 |
| `getAjly()` | 获取案件来源统计 |
| `getJcajqs(BigScreenDto)` | 获取检查案件趋势 |
| `getRwwc(BigScreenDto)` | 获取任务完成情况 |
| `getJdjcl()` | 获取监督检查计划 |
* **BigScreenService**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | ------------------------------ |
| `getDataOverview()` | 获取数据概览统计 |
| `getEnterpriseStatistics()` | 获取企业信息统计 |
| `getZfjcs(BigScreenDto)` | 获取执法检查统计 |
| `getAjbl()` | 获取案件办理统计 |
| `getZfxs()` | 获取执法形式统计 |
| `getAjly()` | 获取案件来源统计 |
| `getJcajqs(BigScreenDto)` | 获取检查案件趋势 |
| `getRwwc(BigScreenDto)` | 获取任务完成情况 |
| `getJdjcl()` | 获取监督检查计划 |
* **BigScreenRepository**
| 方法签名 | 描述 |
| ------------------------------------------------------------- | ------------------------------ |
| `getqys()` | 获取企业总数 |
| `getqyfjfl()` | 获取企业分类统计 |
| `getajs()` | 获取案件总数 |
| `getzfjcs(LocalDateTime, LocalDateTime)` | 获取执法检查统计 |
| `getajzs()` | 获取案件总数 |
| `getajcfs()` | 获取处罚案件数 |
| `getzfxs()` | 获取执法形式统计 |
| `getajly()` | 获取案件来源统计 |
| `getjfjcByMonth(LocalDateTime, LocalDateTime)` | 按月获取检查统计 |
| `getjfjcByYear(LocalDateTime, LocalDateTime)` | 按年获取检查统计 |
| `getsaslByMonth(LocalDate, LocalDate)` | 按月获取受案数量 |
| `getsaslByYear(LocalDate, LocalDate)` | 按年获取受案数量 |
| `getrwwc(LocalDateTime, LocalDateTime)` | 获取任务完成情况 |
| `getjdjcjh()` | 获取监督检查计划 |
#### 界面设计
(无)
### 检查表管理
#### 实现设计
检查表管理模块是系统实现执法检查标准化、规范化管理的核心功能模块。该模块通过定义和管理标准化的检查表,确保执法人员在执法检查过程中能够全面、系统地进行检查,提高执法检查的质量和效率。
该模块的核心功能包括:
- **检查表管理**:支持创建、查询、更新和删除检查表,包括检查表名称、描述等基本信息管理。
- **状态管理**:支持启用/禁用检查表,控制检查表的使用状态。
- **逻辑删除**:支持检查表的逻辑删除,保留历史数据。
- **灵活查询**:支持按检查表名称、描述等条件进行组合查询。
- **分页查询**:支持检查表信息的分页查询,提高大数据量下的查询效率。
#### 程序流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant ChecklistController as 检查表控制器
participant ChecklistService as 检查表服务
participant ChecklistRepository as 检查表仓库
Client->>+ChecklistController: POST /api/lawenforcement/checklists (创建检查表)
ChecklistController->>+ChecklistService: saveChecklist(checklist, user, "add")
ChecklistService->>ChecklistRepository: save(checklist)
ChecklistRepository-->>ChecklistService: 返回保存结果
ChecklistService-->>-ChecklistController: 返回保存结果
ChecklistController-->>-Client: 返回操作结果
Client->>+ChecklistController: GET /api/lawenforcement/checklists (分页查询检查表)
ChecklistController->>+ChecklistService: findChecklistPage(query)
ChecklistService->>ChecklistRepository: findAll(spec, pageable)
ChecklistRepository-->>ChecklistService: 返回分页结果
ChecklistService-->>-ChecklistController: 返回分页结果
ChecklistController-->>-Client: 返回分页数据
Client->>+ChecklistController: PUT /api/lawenforcement/checklists/{checklistId} (更新检查表)
ChecklistController->>+ChecklistService: saveChecklist(checklist, user, "up")
ChecklistService->>ChecklistRepository: save(checklist)
ChecklistRepository-->>ChecklistService: 返回更新结果
ChecklistService-->>-ChecklistController: 返回更新结果
ChecklistController-->>-Client: 返回操作结果
Client->>+ChecklistController: DELETE /api/lawenforcement/checklists/{checklistId} (删除检查表)
ChecklistController->>+ChecklistService: deleteChecklistById(checklistId)
ChecklistService->>ChecklistRepository: findById(checklistId)
ChecklistRepository-->>ChecklistService: 返回检查表
ChecklistService->>ChecklistRepository: save(checklist) # 逻辑删除
ChecklistRepository-->>ChecklistService: 返回保存结果
ChecklistService-->>-ChecklistController: 返回操作结果
ChecklistController-->>-Client: 返回操作结果
```
#### 程序设计表
| 文件路径 | 类型 | 语言 |
| --------------------------------------------------------------------------------------- | ---------- | ---- |
| `com.aisino.iles.lawenforcement.controller.ChecklistController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.ChecklistService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.ChecklistRepository.java` | Repository | Java |
| `com.aisino.iles.lawenforcement.model.Checklist.java` | Entity | Java |
| `com.aisino.iles.lawenforcement.model.query.ChecklistQuery.java` | Query | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── ChecklistController.java
├── service
│ └── ChecklistService.java
├── repository
│ └── ChecklistRepository.java
├── model
│ └── Checklist.java
└── model.query
└── ChecklistQuery.java
```
#### 实现类方法列表
* **ChecklistController**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | ------------------------------ |
| `createChecklist(Checklist, RemoteUserInfo)` | 创建检查表 |
| `getChecklistById(String)` | 根据ID查询检查表 |
| `getChecklistPage(ChecklistQuery)` | 分页查询检查表 |
| `getChecklistList(ChecklistQuery)` | 获取检查表列表 |
| `updateChecklist(String, Checklist, RemoteUserInfo)` | 更新检查表 |
| `deleteChecklistById(String)` | 删除检查表 |
| `deleteChecklistsByIds(List<String>)` | 批量删除检查表 |
* **ChecklistService**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | ------------------------------ |
| `saveChecklist(Checklist, RemoteUserInfo, String)` | 保存检查表 |
| `findChecklistById(String)` | 根据ID查询检查表 |
| `findChecklistPage(ChecklistQuery)` | 分页查询检查表 |
| `getChecklistList(ChecklistQuery)` | 获取检查表列表 |
| `deleteChecklistById(String)` | 删除检查表 |
| `deleteChecklistsByIds(List<String>)` | 批量删除检查表 |
| `existsChecklistById(String)` | 检查检查表是否存在 |
| `countChecklists()` | 获取检查表总数 |
| `build(ChecklistQuery)` | 构建查询条件 |
* **ChecklistRepository**
| 方法签名 | 描述 |
| ------------------------------------------------------------- | ------------------------------ |
| `findById(String)` | 根据ID查询检查表 |
| `findAll(Specification<Checklist>, Pageable)` | 根据条件分页查询检查表 |
| `existsById(String)` | 检查检查表是否存在 |
| `save(Checklist)` | 保存检查表 |
| `deleteById(String)` | 删除检查表 |
| `deleteAllById(Iterable<String>)` | 批量删除检查表 |
#### 界面设计
(无)
### 送达方式管理
#### 实现设计
送达方式管理模块是系统实现文书送达方式管理的核心功能模块。该模块通过定义和管理标准化的文书送达方式,确保执法人员在执法过程中能够规范、高效地进行文书送达,提高执法工作的规范性和效率。
该模块的核心功能包括:
- **送达方式管理**:支持创建、查询、更新和删除送达方式,包括方式名称、描述等基本信息管理。
- **状态管理**:支持启用/禁用到达方式,控制送达方式的使用状态。
- **逻辑删除**:支持送达方式的逻辑删除,保留历史数据。
- **灵活查询**:支持按方式名称、描述等条件进行组合查询。
- **分页查询**:支持送达方式信息的分页查询,提高大数据量下的查询效率。
#### 程序流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant DeliveryMethodController as 送达方式控制器
participant DeliveryMethodService as 送达方式服务
participant DeliveryMethodRepository as 送达方式仓库
Client->>+DeliveryMethodController: POST /api/lawenforcement/deliveryMethods (创建送达方式)
DeliveryMethodController->>+DeliveryMethodService: saveDeliveryMethod(deliveryMethod, user, "add")
DeliveryMethodService->>DeliveryMethodRepository: save(deliveryMethod)
DeliveryMethodRepository-->>DeliveryMethodService: 返回保存结果
DeliveryMethodService-->>-DeliveryMethodController: 返回保存结果
DeliveryMethodController-->>-Client: 返回操作结果
Client->>+DeliveryMethodController: GET /api/lawenforcement/deliveryMethods (分页查询送达方式)
DeliveryMethodController->>+DeliveryMethodService: findDeliveryMethodPage(query)
DeliveryMethodService->>DeliveryMethodRepository: findAll(spec, pageable)
DeliveryMethodRepository-->>DeliveryMethodService: 返回分页结果
DeliveryMethodService-->>-DeliveryMethodController: 返回分页结果
DeliveryMethodController-->>-Client: 返回分页数据
Client->>+DeliveryMethodController: PUT /api/lawenforcement/deliveryMethods/{deliveryMethodId} (更新送达方式)
DeliveryMethodController->>+DeliveryMethodService: saveDeliveryMethod(deliveryMethod, user, "up")
DeliveryMethodService->>DeliveryMethodRepository: save(deliveryMethod)
DeliveryMethodRepository-->>DeliveryMethodService: 返回更新结果
DeliveryMethodService-->>-DeliveryMethodController: 返回更新结果
DeliveryMethodController-->>-Client: 返回操作结果
Client->>+DeliveryMethodController: DELETE /api/lawenforcement/deliveryMethods/{deliveryMethodId} (删除送达方式)
DeliveryMethodController->>+DeliveryMethodService: deleteDeliveryMethodById(deliveryMethodId)
DeliveryMethodService->>DeliveryMethodRepository: findById(deliveryMethodId)
DeliveryMethodRepository-->>DeliveryMethodService: 返回送达方式
DeliveryMethodService->>DeliveryMethodRepository: save(deliveryMethod) # 逻辑删除
DeliveryMethodRepository-->>DeliveryMethodService: 返回保存结果
DeliveryMethodService-->>-DeliveryMethodController: 返回操作结果
DeliveryMethodController-->>-Client: 返回操作结果
```
#### 程序设计表
| 文件路径 | 类型 | 语言 |
| --------------------------------------------------------------------------------------- | ---------- | ---- |
| `com.aisino.iles.lawenforcement.controller.DeliveryMethodController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.DeliveryMethodService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.DeliveryMethodRepository.java` | Repository | Java |
| `com.aisino.iles.lawenforcement.model.DeliveryMethod.java` | Entity | Java |
| `com.aisino.iles.lawenforcement.model.query.DeliveryQuery.java` | Query | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── DeliveryMethodController.java
├── service
│ └── DeliveryMethodService.java
├── repository
│ └── DeliveryMethodRepository.java
├── model
│ └── DeliveryMethod.java
└── model.query
└── DeliveryQuery.java
```
#### 实现类方法列表
* **DeliveryMethodController**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | ------------------------------ |
| `createDeliveryMethod(DeliveryMethod, RemoteUserInfo)` | 创建送达方式 |
| `getDeliveryMethodById(String)` | 根据ID查询送达方式 |
| `getDeliveryMethodPage(DeliveryQuery)` | 分页查询送达方式 |
| `getDeliveryMethodList(DeliveryQuery)` | 获取送达方式列表 |
| `updateDeliveryMethod(String, DeliveryMethod, RemoteUserInfo)` | 更新送达方式 |
| `deleteDeliveryMethodById(String)` | 删除送达方式 |
| `deleteDeliveryMethodsByIds(List<String>)` | 批量删除送达方式 |
* **DeliveryMethodService**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | ------------------------------ |
| `saveDeliveryMethod(DeliveryMethod, RemoteUserInfo, String)` | 保存送达方式 |
| `findDeliveryMethodById(String)` | 根据ID查询送达方式 |
| `findDeliveryMethodPage(DeliveryQuery)` | 分页查询送达方式 |
| `getDeliveryMethodList(DeliveryQuery)` | 获取送达方式列表 |
| `deleteDeliveryMethodById(String)` | 删除送达方式 |
| `deleteDeliveryMethodsByIds(List<String>)` | 批量删除送达方式 |
| `existsDeliveryMethodById(String)` | 检查送达方式是否存在 |
| `countDeliveryMethods()` | 获取送达方式总数 |
| `build(DeliveryQuery)` | 构建查询条件 |
* **DeliveryMethodRepository**
| 方法签名 | 描述 |
| ------------------------------------------------------------- | ------------------------------ |
| `findById(String)` | 根据ID查询送达方式 |
| `findAll(Specification<DeliveryMethod>, Pageable)` | 根据条件分页查询送达方式 |
| `existsById(String)` | 检查送达方式是否存在 |
| `save(DeliveryMethod)` | 保存送达方式 |
| `deleteById(String)` | 删除送达方式 |
| `deleteAllById(Iterable<String>)` | 批量删除送达方式 |
#### 界面设计
(无)
### 文书送达记录管理
#### 实现设计
文书送达记录管理模块是系统实现执法文书送达过程记录与管理的核心功能模块。该模块通过记录文书送达的全过程,包括送达方式、送达时间、受送达人信息等,确保文书送达的合法性、规范性和可追溯性。
该模块的核心功能包括:
- **送达记录管理**:支持创建、查询、更新和删除文书送达记录,包括送达时间、送达方式、受送达人等信息的记录。
- **送达状态管理**:记录文书的送达状态,包括待送达、已送达、签收状态等。
- **多种送达方式支持**:支持直接送达、邮寄送达、电子送达等多种送达方式。
- **送达回证管理**:上传和管理送达回证,记录送达结果。
- **物流信息跟踪**:对于邮寄送达方式,记录快递单号和物流信息。
- **统计分析**:提供送达记录的统计分析功能,支持按机构、送达方式等维度进行统计。
#### 程序流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant DeliveryRecordController as 送达记录控制器
participant DeliveryRecordService as 送达记录服务
participant DeliveryRecordRepository as 送达记录仓库
participant SmsSendRecordRepository as 短信记录仓库
Client->>+DeliveryRecordController: POST /api/lawenforcement/deliveryRecords (创建送达记录)
DeliveryRecordController->>+DeliveryRecordService: saveDeliveryRecord(deliveryRecord, user, "add")
DeliveryRecordService->>DeliveryRecordRepository: save(deliveryRecord)
DeliveryRecordRepository-->>DeliveryRecordService: 返回保存结果
DeliveryRecordService-->>-DeliveryRecordController: 返回保存结果
DeliveryRecordController-->>-Client: 返回操作结果
Client->>+DeliveryRecordController: GET /api/lawenforcement/deliveryRecords (分页查询送达记录)
DeliveryRecordController->>+DeliveryRecordService: findDeliveryRecordPage(query)
DeliveryRecordService->>DeliveryRecordRepository: findAll(spec, pageable)
DeliveryRecordRepository-->>DeliveryRecordService: 返回分页结果
DeliveryRecordService-->>-DeliveryRecordController: 返回分页结果
DeliveryRecordController-->>-Client: 返回分页数据
Client->>+DeliveryRecordController: PUT /api/lawenforcement/deliveryRecords/{deliveryId} (更新送达记录)
DeliveryRecordController->>+DeliveryRecordService: saveDeliveryRecord(deliveryRecord, user, "up")
DeliveryRecordService->>DeliveryRecordRepository: save(deliveryRecord)
DeliveryRecordRepository-->>DeliveryRecordService: 返回更新结果
DeliveryRecordService-->>-DeliveryRecordController: 返回更新结果
DeliveryRecordController-->>-Client: 返回操作结果
Client->>+DeliveryRecordController: POST /api/lawenforcement/deliveryRecords/{deliveryId}/send (发送文书)
DeliveryRecordController->>+DeliveryRecordService: sendDeliveryRecord(deliveryId, deliveryMethod, user)
DeliveryRecordService->>DeliveryRecordRepository: findById(deliveryId)
DeliveryRecordRepository-->>DeliveryRecordService: 返回送达记录
DeliveryRecordService->>SmsSendRecordRepository: save(smsSendRecord) # 记录短信发送
SmsSendRecordRepository-->>DeliveryRecordService: 返回保存结果
DeliveryRecordService->>DeliveryRecordRepository: save(deliveryRecord) # 更新状态为已发送
DeliveryRecordRepository-->>DeliveryRecordService: 返回保存结果
DeliveryRecordService-->>-DeliveryRecordController: 返回发送结果
DeliveryRecordController-->>-Client: 返回操作结果
```
#### 程序设计表
| 文件路径 | 类型 | 语言 |
| --------------------------------------------------------------------------------------- | ---------- | ---- |
| `com.aisino.iles.lawenforcement.controller.DeliveryRecordController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.DeliveryRecordService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.DeliveryRecordRepository.java` | Repository | Java |
| `com.aisino.iles.lawenforcement.model.DeliveryRecord.java` | Entity | Java |
| `com.aisino.iles.lawenforcement.model.SmsSendRecord.java` | Entity | Java |
| `com.aisino.iles.lawenforcement.model.dto.DeliveryRecordStatisticsDto.java` | DTO | Java |
| `com.aisino.iles.lawenforcement.model.query.DeliveryQuery.java` | Query | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── DeliveryRecordController.java
├── service
│ └── DeliveryRecordService.java
├── repository
│ └── DeliveryRecordRepository.java
│ └── SmsSendRecordRepository.java
├── model
│ └── DeliveryRecord.java
│ └── SmsSendRecord.java
├── model.dto
│ └── DeliveryRecordStatisticsDto.java
└── model.query
└── DeliveryQuery.java
```
#### 实现类方法列表
* **DeliveryRecordController**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | ------------------------------ |
| `createDeliveryRecord(DeliveryRecord, RemoteUserInfo)` | 创建文书送达记录 |
| `getDeliveryRecordById(String)` | 根据ID查询文书送达记录 |
| `getDeliveryRecordPage(DeliveryQuery)` | 分页查询文书送达记录 |
| `updateDeliveryRecord(String, DeliveryRecord, RemoteUserInfo)` | 更新文书送达记录 |
| `deleteDeliveryRecordById(String)` | 删除文书送达记录 |
| `sendDeliveryRecord(String, String, RemoteUserInfo)` | 发送文书 |
| `getDeliveryStatistics(String)` | 获取送达统计信息 |
* **DeliveryRecordService**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | ------------------------------ |
| `saveDeliveryRecord(DeliveryRecord, RemoteUserInfo, String)` | 保存文书送达记录 |
| `findDeliveryRecordById(String)` | 根据ID查询文书送达记录 |
| `findDeliveryRecordPage(DeliveryQuery)` | 分页查询文书送达记录 |
| `deleteDeliveryRecordById(String)` | 删除文书送达记录 |
| `existsDeliveryRecordById(String)` | 检查文书送达记录是否存在 |
| `sendDeliveryRecord(String, String, RemoteUserInfo)` | 发送文书 |
| `getDeliveryStatistics(String)` | 获取送达统计信息 |
| `build(DeliveryQuery)` | 构建查询条件 |
| `processSmsDelivery(DeliveryRecord, String, RemoteUserInfo)` | 处理短信送达 |
| `processMailDelivery(DeliveryRecord, String, RemoteUserInfo)` | 处理邮寄送达 |
| `processDirectDelivery(DeliveryRecord, String, RemoteUserInfo)` | 处理直接送达 |
* **DeliveryRecordRepository**
| 方法签名 | 描述 |
| ------------------------------------------------------------- | ------------------------------ |
| `findById(String)` | 根据ID查询文书送达记录 |
| `findAll(Specification<DeliveryRecord>, Pageable)` | 根据条件分页查询文书送达记录 |
| `existsById(String)` | 检查文书送达记录是否存在 |
| `save(DeliveryRecord)` | 保存文书送达记录 |
| `deleteById(String)` | 删除文书送达记录 |
| `statistics(String)` | 统计送达记录 |
#### 界面设计
(无)
### 执法文书管理
#### 实现设计
执法文书管理模块是系统实现执法文书全生命周期管理的核心功能模块。该模块通过标准化的文书管理流程,实现文书的创建、编辑、查询、统计和归档等功能,确保执法文书的规范性、完整性和可追溯性。
该模块的核心功能包括:
- **文书全生命周期管理**:支持文书的创建、编辑、查询、删除等全生命周期管理
- **文书模板化**:支持多种文书类型的模板化管理,确保文书格式规范统一
- **文书编号管理**:自动生成符合规范的文书编号,确保编号唯一性和连续性
- **文书状态管理**:跟踪文书的起草、审核、签发、作废等状态变更
- **文书关联管理**:建立文书与案件、企业等业务实体的关联关系
- **文书查询与统计**:提供多条件组合查询和统计分析功能
- **文书导出与打印**支持文书导出为Word、PDF等格式支持套打
#### 程序流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant DocumentController as 文书控制器
participant DocumentService as 文书服务
participant DocumentRepository as 文书仓库
participant FtpService as 文件服务
Client->>+DocumentController: POST /api/lawenforcement/documents (创建文书)
DocumentController->>+DocumentService: saveDocument(document)
DocumentService->>DocumentRepository: save(document)
DocumentRepository-->>DocumentService: 返回保存结果
DocumentService-->>-DocumentController: 返回保存结果
DocumentController-->>-Client: 返回操作结果
Client->>+DocumentController: GET /api/lawenforcement/documents (分页查询文书)
DocumentController->>+DocumentService: findDocumentsPage(query)
DocumentService->>DocumentRepository: findAll(spec, pageable)
DocumentRepository-->>DocumentService: 返回分页结果
DocumentService->>DocumentService: 处理结果数据
DocumentService-->>-DocumentController: 返回分页结果
DocumentController-->>-Client: 返回分页数据
Client->>+DocumentController: PUT /api/lawenforcement/documents/{documentId} (更新文书)
DocumentController->>+DocumentService: saveDocument(document)
DocumentService->>DocumentRepository: save(document)
DocumentRepository-->>DocumentService: 返回更新结果
DocumentService-->>-DocumentController: 返回更新结果
DocumentController-->>-Client: 返回操作结果
Client->>+DocumentController: DELETE /api/lawenforcement/documents/{documentId} (删除文书)
DocumentController->>+DocumentService: deleteDocumentById(documentId)
DocumentService->>DocumentRepository: deleteById(documentId)
DocumentRepository-->>DocumentService: 返回删除结果
DocumentService-->>-DocumentController: 返回操作结果
DocumentController-->>-Client: 返回操作结果
Client->>+DocumentController: GET /api/lawenforcement/documents/getOneByCaseIdAndDocumentName (按案件和名称查询)
DocumentController->>+DocumentService: findByCaseIdAndDocumentName(caseId, documentName)
DocumentService->>DocumentRepository: findByCaseIdAndDocumentName(caseId, documentName)
DocumentRepository-->>DocumentService: 返回查询结果
DocumentService-->>-DocumentController: 返回查询结果
DocumentController-->>-Client: 返回文书信息
```
#### 程序设计表
| 文件路径 | 类型 | 语言 |
| --------------------------------------------------------------------------------------- | ---------- | ---- |
| `com.aisino.iles.lawenforcement.controller.DocumentController.java` | Controller | Java |
| `com.aisino.iles.lawenforcement.service.DocumentService.java` | Service | Java |
| `com.aisino.iles.lawenforcement.repository.DocumentRepository.java` | Repository | Java |
| `com.aisino.iles.lawenforcement.model.Document.java` | Entity | Java |
| `com.aisino.iles.lawenforcement.model.query.DocumentQuery.java` | Query | Java |
| `com.aisino.iles.lawenforcement.model.dto.FormDataDto.java` | DTO | Java |
#### 静态模型
```
com.aisino.iles.lawenforcement
├── controller
│ └── DocumentController.java
├── service
│ └── DocumentService.java
├── repository
│ └── DocumentRepository.java
├── model
│ └── Document.java
├── model.dto
│ └── FormDataDto.java
└── model.query
└── DocumentQuery.java
```
#### 实现类方法列表
* **DocumentController**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | ------------------------------ |
| `getDocumentPage(DocumentQuery)` | 分页查询文书信息 |
| `getDocumentList(DocumentQuery)` | 查询文书列表(不分页) |
| `findByCaseIdAndDocumentName(DocumentQuery)` | 按案件ID和文书名称查询 |
| `createOfficer(Document)` | 创建文书 |
| `updateDocument(String, Document)` | 更新文书信息 |
| `deleteDocumentById(String)` | 删除文书 |
* **DocumentService**
| 方法签名 | 描述 |
| ------------------------------------------------------------------------ | ------------------------------ |
| `findDocumentsPage(DocumentQuery)` | 分页查询文书信息 |
| `listDocuments(DocumentQuery)` | 查询文书列表 |
| `findByCaseIdAndDocumentName(String, String)` | 按案件ID和文书名称查询 |
| `saveDocument(Document)` | 保存文书 |
| `deleteDocumentById(String)` | 删除文书 |
| `buildSpec(DocumentQuery)` | 构建查询条件 |
| `handleResult(Document)` | 处理查询结果 |
* **DocumentRepository**
| 方法签名 | 描述 |
| ------------------------------------------------------------- | ------------------------------ |
| `countByCaseIdAndStatus(String, DocumentStatus)` | 统计案件下指定状态的文书数量 |
| `countByStatus(DocumentStatus)` | 统计指定状态的文书数量 |
| `findByCaseIdAndStatus(String, DocumentStatus)` | 查询案件下指定状态的文书 |
| `findByCaseIdAndDocumentName(String, String)` | 按案件ID和文书名称查询 |
| `save(Document)` | 保存文书 |
| `deleteById(String)` | 删除文书 |
| `findAll(Specification<Document>, Pageable)` | 分页查询文书 |
#### 界面设计
(无)
### 执法检查管理
#### 实现设计
执法检查管理模块负责处理执法检查记录的创建、查询、更新和删除操作。该模块与执法信息、检查事项等模块有关联,支持现场检查记录的完整生命周期管理。
##### 功能概述
1. **检查记录管理**:创建、查询、更新、删除执法检查记录
2. **现场检查**:记录现场检查的详细信息,包括检查时间、地点、参与人员等
3. **检查结果处理**:记录检查结果、发现的问题及处理建议
4. **数据统计**:支持按部门、时间等维度统计检查情况
##### 技术实现
- 采用RESTful API设计风格
- 使用JPA进行数据持久化
- 支持分页查询和条件过滤
- 集成工作流引擎处理检查流程
- 支持文件上传和关联检查记录
#### 程序流程
```mermaid
sequenceDiagram
participant C as Client
participant Ctrl as EnforceCheckController
participant Svc as EnforceCheckService
participant Repo as EnforceCheckRepository
participant WF as WorkflowEngine
C->>Ctrl: 创建/更新检查记录
Ctrl->>Svc: saveEnforceCheck()
Svc->>Repo: 保存检查记录
Repo-->>Svc: 返回保存结果
Svc->>WF: 触发工作流
Svc-->>Ctrl: 返回操作结果
Ctrl-->>C: 返回响应
C->>Ctrl: 查询检查记录
Ctrl->>Svc: findEnforceCheckPage()
Svc->>Repo: 执行分页查询
Repo-->>Svc: 返回查询结果
Svc-->>Ctrl: 返回分页数据
Ctrl-->>C: 返回响应
```
#### 程序设计表
| 方法名 | 参数 | 返回值 | 描述 |
|--------|------|--------|------|
| createEnforceCheck | EnforceCheck, RemoteUserInfo | Result<EnforceCheck> | 创建执法检查记录 |
| getEnforceCheckById | String enforceCheckId | Result<EnforceCheck> | 根据ID查询检查记录 |
| getEnforceCheckPage | EnforceCheckQuery, RemoteUserInfo | PageResult<EnforceCheck> | 分页查询检查记录 |
| updateEnforceCheck | String enforceCheckId, EnforceCheck, RemoteUserInfo | Result<EnforceCheck> | 更新检查记录 |
| deleteEnforceCheck | String enforceCheckId | Result<Void> | 删除检查记录 |
| uploadScenePhotos | String enforceCheckId, List<MultipartFile> files | Result<List<String>> | 上传现场照片 |
| getEnforceCheckByEnforcementId | String enforcementId | Result<EnforceCheck> | 根据执法ID查询检查记录 |
| getEnforceCheckStatistics | EnforceCheckQuery, RemoteUserInfo | Result<Map<String, Object>> | 获取检查统计信息 |
#### 静态模型
##### 包结构
```
com.aisino.iles.lawenforcement
├── controller
│ └── EnforceCheckController.java # 控制器
├── service
│ └── EnforceCheckService.java # 服务层
├── repository
│ └── EnforceCheckRepository.java # 数据访问层
├── model
│ ├── EnforceCheck.java # 实体类
│ └── dto
│ ├── EnforceCheckDto.java # DTO对象
│ └── EnforceCheckResDto.java # 响应DTO
└── model/query
└── EnforceCheckQuery.java # 查询条件
```
## 非现场执法管理
### 在线巡查管理
#### 实现设计
在线巡查管理模块实现了对企业进行远程视频巡查的功能,支持巡查计划的制定、执行和记录。该模块通过对接视频监控系统,实现对企业现场的远程可视化巡查,记录巡查过程和发现的问题,并支持生成巡查报告。
主要功能包括:
- 巡查计划管理:创建、查询、修改和删除巡查计划
- 视频巡查:通过视频监控进行远程巡查
- 问题记录:记录巡查过程中发现的问题
- 巡查报告:生成巡查报告并支持导出
#### 程序流程
```mermaid
sequenceDiagram
participant 用户
participant 前端
participant Controller
participant Service
participant Repository
participant 视频监控系统
用户->>前端: 创建巡查计划
前端->>Controller: POST /api/online/patrol/plan
Controller->>Service: createPatrolPlan(plan)
Service->>Repository: save(plan)
Repository-->>Service: 保存成功
Service-->>Controller: 返回成功结果
Controller-->>前端: 返回成功响应
用户->>前端: 开始视频巡查
前端->>Controller: GET /api/online/patrol/video/{cameraId}
Controller->>Service: getVideoStream(cameraId)
Service->>视频监控系统: 请求视频流
视频监控系统-->>Service: 返回视频流
Service-->>Controller: 转发视频流
Controller-->>前端: 推送视频流
用户->>前端: 提交巡查记录
前端->>Controller: POST /api/online/patrol/record
Controller->>Service: savePatrolRecord(record)
Service->>Repository: save(record)
Repository-->>Service: 保存成功
Service-->>Controller: 返回成功结果
Controller-->>前端: 返回成功响应
```
#### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
|------------|------|------|
| `com.aisino.iles.lawenforcement.controller.OnlinePatrolController.java` | 在线巡查控制器 | Java |
| `com.aisino.iles.lawenforcement.service.OnlinePatrolService.java` | 在线巡查服务 | Java |
| `com.aisino.iles.lawenforcement.repository.OnlinePatrolRepository.java` | 在线巡查数据访问 | Java |
| `com.aisino.iles.lawenforcement.model.OnlinePatrolPlan.java` | 在线巡查计划实体 | Java |
| `com.aisino.iles.lawenforcement.model.OnlinePatrolRecord.java` | 在线巡查记录实体 | Java |
#### 静态模型
```
src/main/java/com/aisino/iles/lawenforcement/
├── controller/
│ └── OnlinePatrolController.java
├── service/
│ ├── impl/
│ │ └── OnlinePatrolServiceImpl.java
│ └── OnlinePatrolService.java
├── repository/
│ └── OnlinePatrolRepository.java
└── model/
├── OnlinePatrolPlan.java
├── OnlinePatrolRecord.java
└── dto/
├── OnlinePatrolPlanDto.java
└── OnlinePatrolRecordDto.java
```
#### 实现类
##### Controller类
```java
com.aisino.iles.lawenforcement.controller.OnlinePatrolController
@PostMapping("/api/online/patrol/plan")
public Result<OnlinePatrolPlan> createPatrolPlan(@RequestBody OnlinePatrolPlan plan) {
// 创建巡查计划
}
@GetMapping("/api/online/patrol/plan/{id}")
public Result<OnlinePatrolPlan> getPatrolPlan(@PathVariable String id) {
// 获取巡查计划详情
}
@GetMapping("/api/online/patrol/video/{cameraId}")
public void getVideoStream(@PathVariable String cameraId, HttpServletResponse response) {
// 获取视频流
}
@PostMapping("/api/online/patrol/record")
public Result<Void> savePatrolRecord(@RequestBody OnlinePatrolRecord record) {
// 保存巡查记录
}
@GetMapping("/api/online/patrol/report/{planId}")
public void generateReport(@PathVariable String planId, HttpServletResponse response) {
// 生成巡查报告
}
```
##### Service类
```java
com.aisino.iles.lawenforcement.service.OnlinePatrolService
OnlinePatrolPlan createPatrolPlan(OnlinePatrolPlan plan);
OnlinePatrolPlan getPatrolPlan(String id);
void getVideoStream(String cameraId, HttpServletResponse response);
void savePatrolRecord(OnlinePatrolRecord record);
void generateReport(String planId, HttpServletResponse response);
Page<OnlinePatrolPlan> queryPatrolPlans(PatrolPlanQuery query, Pageable pageable);
Page<OnlinePatrolRecord> queryPatrolRecords(PatrolRecordQuery query, Pageable pageable);
```
##### Repository类
```java
public interface OnlinePatrolRepository extends JpaRepository<OnlinePatrolPlan, String> {
Page<OnlinePatrolPlan> findByPlanNameContainingAndStatus(String planName, String status, Pageable pageable);
List<OnlinePatrolRecord> findByPlanIdOrderByCreateTimeDesc(String planId);
}
```
### 企业预警管理
#### 实现设计
企业预警管理模块负责监控企业相关指标,当发现异常情况时自动生成预警信息,并通知相关人员处理。
主要功能:
- 预警规则配置:设置预警条件和阈值
- 预警信息管理:查看和处理预警信息
- 预警通知:通过站内信、短信等方式通知相关人员
- 预警统计:统计预警处理情况
#### 程序流程
```mermaid
sequenceDiagram
participant 定时任务
participant 预警服务
participant 企业数据服务
participant 消息服务
定时任务->>预警服务: 执行预警检测
预警服务->>企业数据服务: 获取企业监控数据
企业数据服务-->>预警服务: 返回企业数据
预警服务->>预警服务: 分析数据,判断是否触发预警
alt 触发预警
预警服务->>预警服务: 生成预警记录
预警服务->>消息服务: 发送预警通知
消息服务-->>预警服务: 通知发送成功
end
```
#### 程序设计
| 后台逻辑实现 | 说明 | 类型 |
|------------|------|------|
| `com.aisino.iles.lawenforcement.controller.EnterpriseWarningController.java` | 企业预警控制器 | Java |
| `com.aisino.iles.lawenforcement.service.EnterpriseWarningService.java` | 企业预警服务 | Java |
| `com.aisino.iles.lawenforcement.repository.EnterpriseWarningRepository.java` | 企业预警数据访问 | Java |
| `com.aisino.iles.lawenforcement.model.EnterpriseWarningRule.java` | 预警规则实体 | Java |
| `com.aisino.iles.lawenforcement.model.EnterpriseWarningRecord.java` | 预警记录实体 | Java |
#### 静态模型
```
src/main/java/com/aisino/iles/lawenforcement/
├── controller/
│ └── EnterpriseWarningController.java
├── service/
│ ├── impl/
│ │ └── EnterpriseWarningServiceImpl.java
│ └── EnterpriseWarningService.java
├── repository/
│ └── EnterpriseWarningRepository.java
└── model/
├── EnterpriseWarningRule.java
├── EnterpriseWarningRecord.java
└── dto/
├── WarningRuleDto.java
└── WarningRecordDto.java
```
#### 实现类
##### Controller类
```java
com.aisino.iles.lawenforcement.controller.EnterpriseWarningController
@PostMapping("/api/warning/rule")
public Result<WarningRuleDto> createWarningRule(@RequestBody WarningRuleDto rule) {
// 创建预警规则
}
@GetMapping("/api/warning/records")
public Result<Page<WarningRecordDto>> queryWarningRecords(
@RequestParam(required = false) String status,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size) {
// 查询预警记录
}
@PutMapping("/api/warning/record/{id}/process")
public Result<Void> processWarning(@PathVariable String id, @RequestParam String processResult) {
// 处理预警
}
```
##### Service类
```java
com.aisino.iles.lawenforcement.service.EnterpriseWarningService
WarningRuleDto createWarningRule(WarningRuleDto rule);
Page<WarningRuleDto> queryWarningRules(WarningRuleQuery query, Pageable pageable);
Page<WarningRecordDto> queryWarningRecords(WarningRecordQuery query, Pageable pageable);
void processWarning(String id, String processResult, String processor);
void checkEnterpriseWarnings();
```
##### Repository类
```java
public interface EnterpriseWarningRepository extends JpaRepository<EnterpriseWarningRecord, String> {
Page<EnterpriseWarningRecord> findByStatusAndEnterpriseNameContaining(
String status, String enterpriseName, Pageable pageable);
@Query("SELECT e FROM EnterpriseWarningRecord e WHERE e.warningTime BETWEEN :startTime AND :endTime")
List<EnterpriseWarningRecord> findWarningRecordsByTimeRange(
@Param("startTime") Date startTime,
@Param("endTime") Date endTime);
}
```
#### 界面设计
(无)
##### 核心类说明
1. **EnforceCheck (实体类)**
- enforceCheckId: 主键ID
- enforcementId: 关联的执法ID
- checkDate: 检查日期
- checkLocation: 检查地点
- checkResult: 检查结果
- problems: 发现问题
- suggestions: 处理建议
- status: 状态
- supplement: 补充信息(JSON格式)
- createTime: 创建时间
- createdBy: 创建人
- updateTime: 更新时间
- updatedBy: 更新人
2. **EnforceCheckDto (DTO对象)**
- 用于接收前端传入的检查记录数据
- 包含必要的验证注解
3. **EnforceCheckQuery (查询条件)**
- 支持按部门、时间范围、状态等条件查询
- 实现分页和排序
#### 实现类方法列表
##### EnforceCheckController
| 方法签名 | 描述 |
|---------|------|
| createEnforceCheck(@RequestBody EnforceCheck enforceCheck, @CurrentUser RemoteUserInfo user) | 创建检查记录 |
| getEnforceCheckById(@PathVariable String enforceCheckId) | 根据ID查询检查记录 |
| getEnforceCheckPage(EnforceCheckQuery query, @CurrentUser RemoteUserInfo user) | 分页查询检查记录 |
| updateEnforceCheck(@PathVariable String enforceCheckId, @RequestBody EnforceCheck enforceCheck, @CurrentUser RemoteUserInfo user) | 更新检查记录 |
| deleteEnforceCheck(@PathVariable String enforceCheckId) | 删除检查记录 |
| uploadScenePhotos(@PathVariable String enforceCheckId, @RequestParam("files") List<MultipartFile> files) | 上传现场照片 |
| getEnforceCheckByEnforcementId(@PathVariable String enforcementId) | 根据执法ID查询检查记录 |
| getEnforceCheckStatistics(EnforceCheckQuery query, @CurrentUser RemoteUserInfo user) | 获取检查统计信息 |
##### EnforceCheckService
| 方法签名 | 描述 |
|---------|------|
| saveEnforceCheck(EnforceCheck enforceCheck, RemoteUserInfo user, String type) | 保存检查记录 |
| findEnforceCheckById(String enforceCheckId) | 根据ID查询检查记录 |
| findEnforceCheckPage(EnforceCheckQuery query, RemoteUserInfo user) | 分页查询检查记录 |
| deleteEnforceCheck(String enforceCheckId) | 删除检查记录 |
| uploadScenePhotos(String enforceCheckId, List<MultipartFile> files) | 处理现场照片上传 |
| getEnforceCheckByEnforcementId(String enforcementId) | 根据执法ID查询检查记录 |
| getEnforceCheckStatistics(EnforceCheckQuery query, RemoteUserInfo user) | 获取检查统计信息 |
##### EnforceCheckRepository
| 方法签名 | 描述 |
|---------|------|
| List<EnforceCheck> findByEnforcementId(String enforcementId) | 根据执法ID查询检查记录列表 |
| Optional<EnforceCheck> findFirstByEnforcementIdOrderByCreateTimeDesc(String enforcementId) | 根据执法ID查询最新的检查记录 |
| long countByEnforcementInfo_EnterpriseId(String enterpriseId) | 统计企业的检查记录数量 |
#### 界面设计
(无)
(无)