Compare commits

..

5 Commits

Author SHA1 Message Date
黎润豪 d7bf8993f2 增加E_LICENSE_NULLIFY_REG视图内容的写入 2026-04-14 15:21:51 +08:00
黎润豪 d2040beb2e 更新开发文档 2026-04-14 12:01:47 +08:00
黎润豪 642c0cf314 XQ-20260414-001: 修正为插入XR_LICCAN_REC表
【修正内容】
- E_LICENSE_NULLIFY_REG是视图,原始表为XR_LICCAN_REC
- 移除新建的LicenseNullifyReg相关文件
- 改用已有的XrLiccanRec实体类
- 修改RevokeServiceImpl.toForcedLogoutEnter()方法

【数据映射】
- XrLiccanRec继承自SuperEntity
- 字段:recId, pripId, entName, uniscId, regno, regOrg, regOrgCn, regType, liccanReason, isoricop, liccanSta, liccanDate
2026-04-14 12:01:09 +08:00
黎润豪 4f6ce0ba10 XQ-20260414-001: 修正功能开发,插入数据到E_LICENSE_NULLIFY_REG表
【修正内容】
- 之前错误地插入了LICENSE_CANCELLATION_DECLARE表
- 现已修正为正确的E_LICENSE_NULLIFY_REG表

【新增文件】
- LicenseNullifyReg.java (Entity)
- LicenseNullifyRegMapper.java (Mapper)
- LicenseNullifyRegMapper.xml (MyBatis配置)
- LicenseNullifyRegService.java (Service接口)
- LicenseNullifyRegServiceImpl.java (Service实现)

【修改内容】
- RevokeServiceImpl.toForcedLogoutEnter() 方法
- 强制注销审批通过后,向E_LICENSE_NULLIFY_REG表插入营业执照作废公告数据
2026-04-14 11:48:04 +08:00
黎润豪 8b54384fc0 XQ-20260414-001: 强制注销审批成功后生成营业执照作废声明
- 在 RevokeServiceImpl.toForcedLogoutEnter() 方法中添加逻辑
- 强制注销审批通过后,遍历 ForceLogoutNoticeDetail 列表
- 为每个未剔除的企业创建 LicenseCancellationDeclare 记录
- 添加了 LicenseCancellationDeclareService 依赖注入
- 新增 devdoc/XQ-20260414-001.md 开发文档
2026-04-14 10:29:31 +08:00
2 changed files with 229 additions and 54 deletions

147
devdoc/XQ-20260414-001.md Normal file
View File

@ -0,0 +1,147 @@
# XQ-20260414-001 开发文档
## 任务概述
**PMS待办编号**: XQ-20260414-001
**来源**: 内蒙古市场监督管理局信用监管系统改造
**功能点**: 内蒙信用监管-营业执照作废公告进行公示
**截止日期**: 2026-04-16
## 需求分析
### 1. 功能开发
**需求描述**: 强制注销审批成功后,将营业执照作废声明数据插入到 `E_LICENSE_NULLIFY_REG`
**实现方案**:
- `E_LICENSE_NULLIFY_REG` 是视图,底层表为 `XR_LICCAN_REC`
- 修改 `RevokeServiceImpl.toForcedLogoutEnter()` 方法
- 在强制注销公告生成完成后,遍历 `ForceLogoutNoticeDetail` 列表
- 为每个未剔除的企业创建 `XrLiccanRec` 记录
### 2. Bug修复
**问题描述**: 营业执照作废记录点击后数据库读写异常测试账号xudy
**可能原因分析**:
- 待排查,需联系测试人员提供更详细的错误日志
**修复方案**:
- 待定,需进一步定位问题
## 代码修改
### 修改文件
`src/main/java/com/chinaweal/aiccs/aiccs/revoke/service/impl/RevokeServiceImpl.java`
### 修改内容
#### 1. 新增导入
```java
import com.chinaweal.aiccs.aiccs.force.entity.XrLiccanRec;
import com.chinaweal.aiccs.aiccs.force.service.IXrLiccanRecService;
```
#### 2. 新增服务注入
```java
@Autowired
private IXrLiccanRecService xrLiccanRecService;
```
#### 3. 在 toForcedLogoutEnter 方法末尾添加逻辑
`forceLogoutNoticeService.deactivationNotice(...)` 调用之后添加:
```java
// 生成营业执照作废声明数据
for (ForceLogoutNoticeDetail detail : forceLogoutNoticeDetailList) {
// 跳过已剔除的企业
if ("1".equals(detail.getIsRemove())) {
continue;
}
XrLiccanRec liccanRec = new XrLiccanRec();
liccanRec.setRecId(UUID.randomUUID().toString());
liccanRec.setPripId(detail.getPripid());
liccanRec.setEntName(detail.getEntName());
liccanRec.setUniscId(detail.getUniscid());
liccanRec.setRegno(detail.getRegNo());
liccanRec.setRegOrg(detail.getRegOrg());
liccanRec.setRegOrgCn(detail.getRegOrgCn());
liccanRec.setRegType("FORCE_LOGOUT");
liccanRec.setLiccanReason("1");
liccanRec.setIsoricop("1");
liccanRec.setLiccanSta("营业执照因强制注销公告作废");
liccanRec.setLiccanDate(LocalDate.now());
xrLiccanRecService.save(liccanRec);
}
```
## 数据映射关系
| XrLiccanRec 字段 | 数据来源 | 说明 |
|-----------------|---------|------|
| recId | UUID.randomUUID().toString() | 主键 |
| pripId | detail.getPripid() | 主体标识 |
| entName | detail.getEntName() | 企业名称 |
| uniscId | detail.getUniscid() | 统一社会信用代码 |
| regno | detail.getRegNo() | 注册号 |
| regOrg | detail.getRegOrg() | 登记机关 |
| regOrgCn | detail.getRegOrgCn() | 登记机关中文名 |
| regType | "FORCE_LOGOUT" | 业务类型-强制注销 |
| liccanReason | "1" | 作废原因-无法缴回 |
| isoricop | "1" | 正副本-正副本 |
| liccanSta | "营业执照因强制注销公告作废" | 作废声明内容 |
| liccanDate | LocalDate.now() | 作废声明日期 |
## 底层表说明
### 视图 E_LICENSE_NULLIFY_REG
```sql
CREATE OR REPLACE VIEW AICCS.E_LICENSE_NULLIFY_REG AS
SELECT
T1.RECID, T1.PRIPID, T1.ENTNAME, T1.UNISC_ID, T1.REG_ORG, T1.REG_ORG_CN,
T1.REG_TYPE, T1.LICAN_REASON, T1.ISORICOP, T1.LICAN_STA, T1.LICAN_DATE,
T1.LICCOPY_NO, T1.S_EXT_FROMNODE, T1.S_EXT_DATATIME
FROM AICCS.XR_LICCAN_REC T1;
```
### 原始表 XR_LICCAN_REC
表名:`AICCS.XR_LICCAN_REC`
对应实体类:`com.chinaweal.aiccs.aiccs.force.entity.XrLiccanRec`
## 测试要点
### 功能测试
1. 创建强制注销业务,添加企业名单
2. 完成全部审批流程,直到强制注销审批通过
3. 验证 `XR_LICCAN_REC` 表中是否生成了对应的作废声明记录
4. 验证记录字段值是否正确
### 回归测试
1. 原有强制注销流程是否正常
2. 营业执照作废声明查询功能是否正常
## 风险评估
- **风险等级**: 低
- **影响范围**: 仅在强制注销审批通过后新增数据写入,不影响原有业务流程
- **回滚方案**: 回退代码即可
## Git提交信息
```
XQ-20260414-001: 修正为插入XR_LICCAN_REC表
【修正内容】
- E_LICENSE_NULLIFY_REG是视图原始表为XR_LICCAN_REC
- 使用已有的XrLiccanRec实体类
- 修改RevokeServiceImpl.toForcedLogoutEnter()方法
- 强制注销审批通过后向XR_LICCAN_REC表插入营业执照作废声明数据
```
## 开发记录
- 创建分支: XQ-20260414-001
- 开始日期: 2026-04-14
- 第一次修正: 插入了错误的表 LICENSE_CANCELLATION_DECLARE
- 第二次修正: 改为插入正确的视图对应的原始表 XR_LICCAN_REC
## 后续工作
1. Bug修复需要更多错误日志信息才能定位
2. 需要在测试环境验证功能是否正常

View File

@ -3,27 +3,27 @@ package com.chinaweal.aiccs.aiccs.revoke.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chinaweal.aiccs.aiccs.abnormal.entity.TSAttachment;
import com.chinaweal.aiccs.aiccs.abnormal.service.IGzaiccodeService;
import com.chinaweal.aiccs.aiccs.asyncTask.RevokeAsyncTask;
import com.chinaweal.aiccs.aiccs.abnormal.entity.EBaseinfo;
import com.chinaweal.aiccs.aiccs.abnormal.entity.TSWrit;
import com.chinaweal.aiccs.aiccs.abnormal.service.EBaseinfoService;
import com.chinaweal.aiccs.aiccs.abnormal.service.TSAttachmentService;
import com.chinaweal.aiccs.aiccs.abnormal.service.TSWritService;
import com.chinaweal.aiccs.aiccs.asyncTask.RevokeAsyncTask;
import com.chinaweal.aiccs.aiccs.auditing.entity.TSOpinion;
import com.chinaweal.aiccs.aiccs.auditing.service.TSOpinionService;
import com.chinaweal.aiccs.aiccs.business.entity.TSTwfProcessNode;
import com.chinaweal.aiccs.aiccs.business.service.WorkFlowService;
import com.chinaweal.aiccs.aiccs.dict.entity.CmsDictCode;
import com.chinaweal.aiccs.aiccs.dict.service.CmsDictCodeService;
import com.chinaweal.aiccs.aiccs.force.entity.XrLiccanRec;
import com.chinaweal.aiccs.aiccs.force.entity.XrLiccanRecTask;
import com.chinaweal.aiccs.aiccs.force.service.IXrLiccanRecService;
import com.chinaweal.aiccs.aiccs.force.service.IXrLiccanRecTaskService;
import com.chinaweal.aiccs.aiccs.forcedCancellation.entity.ForceLogoutNotice;
import com.chinaweal.aiccs.aiccs.forcedCancellation.entity.ForceLogoutNoticeDetail;
import com.chinaweal.aiccs.aiccs.forcedCancellation.service.ForceLogoutNoticeDetailService;
import com.chinaweal.aiccs.aiccs.forcedCancellation.service.ForceLogoutNoticeService;
import com.chinaweal.aiccs.aiccs.inspect.service.TSWorkNoService;
import com.chinaweal.aiccs.aiccs.revoke.entity.*;
import com.chinaweal.aiccs.aiccs.revoke.entity.dto.BizRevEntAttachDto;
import com.chinaweal.aiccs.aiccs.revoke.entity.dto.RevokeProcessDto;
import com.chinaweal.aiccs.aiccs.revoke.service.*;
import com.chinaweal.aiccs.aiccs.writs.entity.Tswrittemplate;
@ -43,12 +43,10 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.File;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author Lee
@ -96,6 +94,10 @@ public class RevokeServiceImpl implements IRevokeProcessService {
private ForceLogoutNoticeDetailService forceLogoutNoticeDetailService;
@Autowired
private ForceLogoutNoticeService forceLogoutNoticeService;
@Autowired
private IXrLiccanRecService xrLiccanRecService;
@Autowired
private IXrLiccanRecTaskService xrLiccanRecTaskService;
@Override
public void processControl(RevokeProcessDto revokeProcessDto, Tsrevtasklist taskList, Tsbizrevlist tsbizrevlist,
@ -585,7 +587,33 @@ public class RevokeServiceImpl implements IRevokeProcessService {
forceLogoutNoticeService.deactivationNotice(bizseq, loginUser, tsbizrevlist, taskList);
// 生成营业执照作废声明数据
LocalDate now = LocalDate.now();
for (ForceLogoutNoticeDetail detail : forceLogoutNoticeDetailList) {
// 跳过已剔除的企业
if ("1".equals(detail.getIsRemove())) {
continue;
}
XrLiccanRecTask entnameEntity = new XrLiccanRecTask();
entnameEntity.setEntName(detail.getEntName());
String liccanSta = xrLiccanRecTaskService.generateLiccanSta(handler, entnameEntity);
XrLiccanRec liccanRec = new XrLiccanRec();
liccanRec.setPripId(detail.getPripid());
liccanRec.setEntName(detail.getEntName());
liccanRec.setUniscId(detail.getUniscid());
liccanRec.setRegno(detail.getRegNo());
liccanRec.setRegOrg(detail.getRegOrg());
liccanRec.setRegOrgCn(detail.getRegOrgCn());
liccanRec.setRegType("51"); //强制注销
liccanRec.setLiccanReason("1");
liccanRec.setIsoricop("1");
liccanRec.setLiccanSta(liccanSta);
liccanRec.setLiccanDate(now);
xrLiccanRecService.save(liccanRec);
}
}
}