# XQ-20260414-001 开发文档

## 任务概述
**PMS待办编号**: XQ-20260414-001  
**来源**: 内蒙古市场监督管理局信用监管系统改造  
**功能点**: 内蒙信用监管-营业执照作废公告进行公示  
**截止日期**: 2026-04-16

## 需求分析

### 1. 功能开发
**需求描述**: 强制注销审批成功后，将营业执照作废声明数据插入到 `LICENSE_CANCELLATION_DECLARE` 表

**业务背景**:
- 内蒙古市场监督管理局需要对强制注销的企业进行营业执照作废公告公示
- 当强制注销审批流程完成后，需要自动生成营业执照作废声明记录

**实现方案**:
- 修改 `RevokeServiceImpl.toForcedLogoutEnter()` 方法
- 在强制注销公告生成完成后，遍历 `ForceLogoutNoticeDetail` 列表
- 为每个未剔除的企业创建 `LicenseCancellationDeclare` 记录

**数据映射关系**:

| LicenseCancellationDeclare 字段 | 数据来源 | 说明 |
|-------------------------------|---------|------|
| recId | UUID.randomUUID().toString() | 主键 |
| bizseqId | forceLogoutNoticeDetail.getBizseqId() | 业务ID |
| pripid | forceLogoutNoticeDetail.getPripid() | 主体标识 |
| entName | forceLogoutNoticeDetail.getEntName() | 企业名称 |
| uniscid | forceLogoutNoticeDetail.getUniscid() | 统一社会信用代码 |
| regOrg | forceLogoutNoticeDetail.getRegOrg() | 登记机关 |
| regOrgCn | forceLogoutNoticeDetail.getRegOrgCn() | 登记机关中文名 |
| regType | "FORCE_LOGOUT" | 登记业务类型-强制注销 |
| licCanReason | "1" | 作废原因-无法缴回（默认） |
| isoriCop | "1" | 正副本标识-正副本（默认） |
| licCanSta | "营业执照因强制注销公告作废" | 作废声明内容 |
| licCanDate | LocalDate.now() | 作废声明发布日期 |
| sExtFromnode | forceLogoutNoticeDetail.getSExtFromnode() | 二级部署标识 |
| sExtDatetime | LocalDateTime.now() | 更新时间 |
| createTime | LocalDateTime.now() | 创建时间 |
| lauptime | LocalDateTime.now() | 更新时间 |

### 2. Bug修复
**问题描述**: 营业执照作废记录点击后数据库读写异常（测试账号：xudy）

**可能原因分析**:
- 待排查，需联系测试人员提供更详细的错误日志
- 需要在测试环境复现问题并获取完整堆栈信息

**修复方案**:
- 待定，需进一步定位问题
- 建议：
  1. 检查数据库表 `LICENSE_CANCELLATION_DECLARE` 的字段与实体是否匹配
  2. 检查是否有空值处理问题
  3. 检查事务配置是否正确

## 代码检查

### Git提交信息
```
XQ-20260414-001: 强制注销审批成功后生成营业执照作废声明

- 在 RevokeServiceImpl.toForcedLogoutEnter() 方法中添加逻辑
- 强制注销审批通过后，遍历 ForceLogoutNoticeDetail 列表
- 为每个未剔除的企业创建 LicenseCancellationDeclare 记录
- 添加了 LicenseCancellationDeclareService 依赖注入
- 新增 devdoc/XQ-20260414-001.md 开发文档
```

### 分支信息
- 分支名: XQ-20260414-001
- 已推送到远程仓库

### 后续工作
1. Bug修复需要更多错误日志信息才能定位
2. 需要在测试环境验证功能是否正常

## 代码修改

### 修改文件
`src/main/java/com/chinaweal/aiccs/aiccs/revoke/service/impl/RevokeServiceImpl.java`

### 修改内容

#### 1. 新增导入
```java
import com.chinaweal.aiccs.aiccs.forcedCancellation.entity.LicenseCancellationDeclare;
import com.chinaweal.aiccs.aiccs.forcedCancellation.service.LicenseCancellationDeclareService;
```

#### 2. 新增服务注入
```java
@Autowired
private LicenseCancellationDeclareService licenseCancellationDeclareService;
```

#### 3. 在 toForcedLogoutEnter 方法末尾添加逻辑
在 `forceLogoutNoticeService.deactivationNotice(bizseq,loginUser,tsbizrevlist,taskList);` 调用之后添加：

```java
// 生成营业执照作废声明
for (ForceLogoutNoticeDetail detail : forceLogoutNoticeDetailList) {
    // 跳过已剔除的企业
    if ("1".equals(detail.getIsRemove())) {
        continue;
    }
    
    LicenseCancellationDeclare declare = new LicenseCancellationDeclare();
    declare.setRecId(UUID.randomUUID().toString());
    declare.setBizseqId(detail.getBizseqId());
    declare.setPripid(detail.getPripid());
    declare.setEntName(detail.getEntName());
    declare.setUniscid(detail.getUniscid());
    declare.setRegOrg(detail.getRegOrg());
    declare.setRegOrgCn(detail.getRegOrgCn());
    declare.setRegType("FORCE_LOGOUT");
    declare.setLicCanReason("1");
    declare.setIsoriCop("1");
    declare.setLicCanSta("营业执照因强制注销公告作废");
    declare.setLicCanDate(LocalDate.now());
    declare.setSExtFromnode(detail.getSExtFromnode());
    declare.setSExtDatetime(LocalDateTime.now());
    declare.setCreateTime(LocalDateTime.now());
    declare.setLauptime(LocalDateTime.now());
    
    licenseCancellationDeclareService.save(declare);
}
```

## 测试要点

### 功能测试
1. 创建强制注销业务，添加企业名单
2. 完成全部审批流程，直到强制注销审批通过
3. 验证 `LICENSE_CANCELLATION_DECLARE` 表中是否生成了对应的作废声明记录
4. 验证记录字段值是否正确

### 回归测试
1. 原有强制注销流程是否正常
2. 营业执照作废声明查询功能是否正常

## 风险评估
- **风险等级**: 低
- **影响范围**: 仅在强制注销审批通过后新增数据写入，不影响原有业务流程
- **回滚方案**: 注释掉新增的循环代码即可

## 开发记录
- 创建分支: XQ-20260414-001
- 开始日期: 2026-04-14
