Merge remote-tracking branch 'origin/dev_1.0.0' into dev_1.0.0

release_1.0.0
xueqingkun 11 months ago
commit 9f50e47d34

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

@ -2,6 +2,7 @@ package com.supervision.knowsub.controller.knowledge;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.knowsub.entity.vo.knowledge.KnowledgeDetailResVO;
import com.supervision.knowsub.entity.vo.knowledge.ModifyKnowledgeReqVO; import com.supervision.knowsub.entity.vo.knowledge.ModifyKnowledgeReqVO;
import com.supervision.knowsub.entity.vo.knowledge.SaveKnowledgeReqVO; import com.supervision.knowsub.entity.vo.knowledge.SaveKnowledgeReqVO;
import com.supervision.knowsub.service.KnowledgeManageService; import com.supervision.knowsub.service.KnowledgeManageService;
@ -26,7 +27,7 @@ public class KnowledgeManageController {
@Operation(summary = "查询知识库分页") @Operation(summary = "查询知识库分页")
@Parameters({ @Parameters({
@Parameter(name = "status", description = "流转状态 为空查全部,1草稿 2待审批 3驳回 4通过 5删除 6已失效", in = ParameterIn.QUERY), @Parameter(name = "status", description = "流转状态 为空查全部,1草稿 2通过 3驳回 4已撤回 5已失效 6已删除 10待审批(新增) 11待审批(删除) 12待审批(撤回)", in = ParameterIn.QUERY),
@Parameter(name = "title", description = "标题,支持模糊", in = ParameterIn.QUERY), @Parameter(name = "title", description = "标题,支持模糊", in = ParameterIn.QUERY),
@Parameter(name = "publishDeptName", description = "发文部门,支持模糊", in = ParameterIn.QUERY), @Parameter(name = "publishDeptName", description = "发文部门,支持模糊", in = ParameterIn.QUERY),
@Parameter(name = "pageNum", description = "分页", in = ParameterIn.QUERY), @Parameter(name = "pageNum", description = "分页", in = ParameterIn.QUERY),
@ -55,19 +56,19 @@ public class KnowledgeManageController {
@Operation(summary = "撤回知识库") @Operation(summary = "撤回知识库")
@GetMapping("recallKnowledge") @GetMapping("recallKnowledge")
public void recallKnowledge() { public void recallKnowledge(String knowledgeId) {
knowledgeManageService.recallKnowledge(knowledgeId);
} }
@Operation(summary = "查看知识的详细信息") @Operation(summary = "查看知识的详细信息")
@GetMapping("queryKnowledgeDetail") @GetMapping("queryKnowledgeDetail")
public void queryKnowledgeDetail(String knowledgeId) { public KnowledgeDetailResVO queryKnowledgeDetail(String knowledgeId) {
return knowledgeManageService.queryKnowledgeDetail(knowledgeId);
} }
@Operation(summary = "删除知识库") @Operation(summary = "删除知识库-逻辑删除")
@GetMapping("deleteKnowledge") @GetMapping("deleteKnowledge")
public void deleteKnowledge() { public void deleteKnowledge(String knowledgeId) {
} }

@ -0,0 +1,24 @@
package com.supervision.knowsub.entity.vo.knowledge;
import com.supervision.knowsub.model.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class KnowledgeDetailResVO {
private Knowledge knowledge;
private KnowledgeBaseInfo knowledgeBaseInfo;
private KnowledgeContext knowledgeContext;
private List<KnowledgeLink> knowledgeLinkList;
private List<FileInfo> fileInfoList;
}

@ -1,14 +1,9 @@
package com.supervision.knowsub.enums; package com.supervision.knowsub.enums;
/** /**
* * 1 稿 * 1稿 2 3 4 5 6 10() 11() 12()
* * 2 *
* * 3 *
* * 4
* * 5
* * 10 ()
* * 11 ()
* * 12 ()
*/ */
public enum StatusEnum { public enum StatusEnum {

@ -1,10 +1,15 @@
package com.supervision.knowsub.service; package com.supervision.knowsub.service;
import com.supervision.knowsub.model.FileInfo;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.List;
public interface FileService { public interface FileService {
String uploadFile(String fileName, byte[] fileBytes); String uploadFile(String fileName, byte[] fileBytes);
void deleteFileById(String fileId); void deleteFileById(String fileId);
List<FileInfo> listByFileId(List<String> fileIdList);
} }

@ -1,6 +1,7 @@
package com.supervision.knowsub.service; package com.supervision.knowsub.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.knowsub.entity.vo.knowledge.KnowledgeDetailResVO;
import com.supervision.knowsub.entity.vo.knowledge.ModifyKnowledgeReqVO; import com.supervision.knowsub.entity.vo.knowledge.ModifyKnowledgeReqVO;
import com.supervision.knowsub.entity.vo.knowledge.SaveKnowledgeReqVO; import com.supervision.knowsub.entity.vo.knowledge.SaveKnowledgeReqVO;
import com.supervision.knowsub.model.Knowledge; import com.supervision.knowsub.model.Knowledge;
@ -13,4 +14,10 @@ public interface KnowledgeManageService {
void saveKnowledge(SaveKnowledgeReqVO reqVO); void saveKnowledge(SaveKnowledgeReqVO reqVO);
void updateKnowledge(ModifyKnowledgeReqVO reqVO); void updateKnowledge(ModifyKnowledgeReqVO reqVO);
void recallKnowledge(String knowledgeId);
KnowledgeDetailResVO queryKnowledgeDetail(String knowledgeId);
void deleteKnowledge(String knowledgeId);
} }

@ -1,5 +1,6 @@
package com.supervision.knowsub.service.impl; package com.supervision.knowsub.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.unit.DataSizeUtil; import cn.hutool.core.io.unit.DataSizeUtil;
@ -16,6 +17,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Service @Service
@Slf4j @Slf4j
@ -57,4 +60,12 @@ public class FileServiceImpl implements FileService {
fileInfoService.removeById(fileId); fileInfoService.removeById(fileId);
} }
} }
@Override
public List<FileInfo> listByFileId(List<String> fileIdList) {
if (CollUtil.isEmpty(fileIdList)){
return new ArrayList<>();
}
return fileInfoService.lambdaQuery().in(FileInfo::getId, fileIdList).list();
}
} }

@ -3,6 +3,7 @@ package com.supervision.knowsub.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.knowsub.entity.vo.knowledge.KnowledgeDetailResVO;
import com.supervision.knowsub.entity.vo.knowledge.KnowledgeLinkVO; import com.supervision.knowsub.entity.vo.knowledge.KnowledgeLinkVO;
import com.supervision.knowsub.entity.vo.knowledge.ModifyKnowledgeReqVO; import com.supervision.knowsub.entity.vo.knowledge.ModifyKnowledgeReqVO;
import com.supervision.knowsub.entity.vo.knowledge.SaveKnowledgeReqVO; import com.supervision.knowsub.entity.vo.knowledge.SaveKnowledgeReqVO;
@ -17,6 +18,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -35,6 +37,8 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
private final KnowledgeLinkService knowledgeLinkService; private final KnowledgeLinkService knowledgeLinkService;
private final KnowledgeFlowRecordService flowRecordService;
private final FileService fileService; private final FileService fileService;
@ -60,7 +64,7 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
knowledge.setPublishDept(reqVO.getPublishDept()); knowledge.setPublishDept(reqVO.getPublishDept());
// 目前只有人工添加 // 目前只有人工添加
knowledge.setKnowledgeFrom(1); knowledge.setKnowledgeFrom(1);
knowledge.setStatus(reqVO.getOperate() == 1 ? StatusEnum.DRAFT.getStatus() : StatusEnum.WAIT_APPROVAL.getStatus()); knowledge.setStatus(reqVO.getOperate() == 1 ? StatusEnum.DRAFT.getStatus() : StatusEnum.WAIT_APPROVAL.getStatus());
knowledge.setSubmittedDeptId(reqVO.getSubmittedDeptId()); knowledge.setSubmittedDeptId(reqVO.getSubmittedDeptId());
if (1 == reqVO.getOperate()) { if (1 == reqVO.getOperate()) {
knowledge.setDraftBelongUserId(reqVO.getUserId()); knowledge.setDraftBelongUserId(reqVO.getUserId());
@ -92,14 +96,13 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
} }
/** /**
*
* @param reqVO * @param reqVO
*/ */
@Override @Override
public void updateKnowledge(ModifyKnowledgeReqVO reqVO) { public void updateKnowledge(ModifyKnowledgeReqVO reqVO) {
Knowledge knowledge = knowledgeService.getOptById(reqVO.getKnowledgeId()).orElseThrow(() -> new BusinessException("未找到知识")); Knowledge knowledge = knowledgeService.getOptById(reqVO.getKnowledgeId()).orElseThrow(() -> new BusinessException("未找到知识"));
// 首先校验状态,草稿/已撤回/已失效/驳回,才能修改 // 首先校验状态,草稿/已撤回/已失效/驳回,才能修改(通过的,要先撤回才能修改)
Set<Integer> canModifyStatusSet = Set.of(StatusEnum.DRAFT.getStatus(), StatusEnum.RECALL.getStatus(), StatusEnum.INVALID.getStatus(),StatusEnum.REJECT.getStatus()); Set<Integer> canModifyStatusSet = Set.of(StatusEnum.DRAFT.getStatus(), StatusEnum.RECALL.getStatus(), StatusEnum.INVALID.getStatus(), StatusEnum.REJECT.getStatus());
if (!canModifyStatusSet.contains(knowledge.getStatus())) { if (!canModifyStatusSet.contains(knowledge.getStatus())) {
throw new BusinessException("当前状态不支持修改"); throw new BusinessException("当前状态不支持修改");
} }
@ -112,7 +115,7 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
// TODO 这里目前子库设置为空 // TODO 这里目前子库设置为空
knowledge.setPublishDept(reqVO.getPublishDept()); knowledge.setPublishDept(reqVO.getPublishDept());
knowledge.setSubmittedDeptId(reqVO.getSubmittedDeptId()); knowledge.setSubmittedDeptId(reqVO.getSubmittedDeptId());
knowledge.setStatus(reqVO.getOperate() == 1 ? StatusEnum.DRAFT.getStatus() : StatusEnum.WAIT_APPROVAL.getStatus()); knowledge.setStatus(reqVO.getOperate() == 1 ? StatusEnum.DRAFT.getStatus() : StatusEnum.WAIT_APPROVAL.getStatus());
// 如果保存为草稿 // 如果保存为草稿
if (1 == reqVO.getOperate()) { if (1 == reqVO.getOperate()) {
@ -121,19 +124,19 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
knowledgeService.updateById(knowledge); knowledgeService.updateById(knowledge);
// 更新基础信息 // 更新基础信息
KnowledgeBaseInfo knowledgeBaseInfo = reqVO.getKnowledgeBaseInfo(); KnowledgeBaseInfo knowledgeBaseInfo = reqVO.getKnowledgeBaseInfo();
Assert.notBlank(knowledgeBaseInfo.getKnowledgeId(),"知识ID不能为空"); Assert.notBlank(knowledgeBaseInfo.getKnowledgeId(), "知识ID不能为空");
// 这里需要用SQL进行更新,不能用封装的updateById,因为前端某些字段可能变为空,用updateById不能让那个想为空的变成空 // 这里需要用SQL进行更新,不能用封装的updateById,因为前端某些字段可能变为空,用updateById不能让那个想为空的变成空
knowledgeBaseInfoService.lambdaUpdate() knowledgeBaseInfoService.lambdaUpdate()
.set(KnowledgeBaseInfo::getPolicyType,knowledgeBaseInfo.getPolicyType()) .set(KnowledgeBaseInfo::getPolicyType, knowledgeBaseInfo.getPolicyType())
.set(KnowledgeBaseInfo::getTerritory,knowledgeBaseInfo.getTerritory()) .set(KnowledgeBaseInfo::getTerritory, knowledgeBaseInfo.getTerritory())
.set(KnowledgeBaseInfo::getPublishScope,knowledgeBaseInfo.getPublishScope()) .set(KnowledgeBaseInfo::getPublishScope, knowledgeBaseInfo.getPublishScope())
.set(KnowledgeBaseInfo::getKnowledgeTag,knowledgeBaseInfo.getKnowledgeTag()) .set(KnowledgeBaseInfo::getKnowledgeTag, knowledgeBaseInfo.getKnowledgeTag())
.set(KnowledgeBaseInfo::getAutoLoseEffect,knowledgeBaseInfo.getAutoLoseEffect()) .set(KnowledgeBaseInfo::getAutoLoseEffect, knowledgeBaseInfo.getAutoLoseEffect())
.set(KnowledgeBaseInfo::getExecTimeBegin,knowledgeBaseInfo.getExecTimeBegin()) .set(KnowledgeBaseInfo::getExecTimeBegin, knowledgeBaseInfo.getExecTimeBegin())
.set(KnowledgeBaseInfo::getExecTimeEnd,knowledgeBaseInfo.getExecTimeEnd()) .set(KnowledgeBaseInfo::getExecTimeEnd, knowledgeBaseInfo.getExecTimeEnd())
.set(KnowledgeBaseInfo::getTimeliness,knowledgeBaseInfo.getTimeliness()) .set(KnowledgeBaseInfo::getTimeliness, knowledgeBaseInfo.getTimeliness())
.set(KnowledgeBaseInfo::getPublishDate,knowledgeBaseInfo.getPublishDate()) .set(KnowledgeBaseInfo::getPublishDate, knowledgeBaseInfo.getPublishDate())
.eq(KnowledgeBaseInfo::getKnowledgeId,knowledgeBaseInfo.getKnowledgeId()).update(); .eq(KnowledgeBaseInfo::getKnowledgeId, knowledgeBaseInfo.getKnowledgeId()).update();
// 有可能更新附件 // 有可能更新附件
updateKnowledgeFile(reqVO, knowledge); updateKnowledgeFile(reqVO, knowledge);
// 有可能更新URL // 有可能更新URL
@ -147,7 +150,7 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
private void updateKnowledgeLink(ModifyKnowledgeReqVO reqVO, Knowledge knowledge) { private void updateKnowledgeLink(ModifyKnowledgeReqVO reqVO, Knowledge knowledge) {
// 直接删除原来的 // 直接删除原来的
knowledgeLinkService.lambdaUpdate().eq(KnowledgeLink::getKnowledgeId,knowledge.getId()).remove(); knowledgeLinkService.lambdaUpdate().eq(KnowledgeLink::getKnowledgeId, knowledge.getId()).remove();
for (KnowledgeLinkVO knowLedgeLinkVO : reqVO.getLinkList()) { for (KnowledgeLinkVO knowLedgeLinkVO : reqVO.getLinkList()) {
KnowledgeLink knowledgeLink = new KnowledgeLink(); KnowledgeLink knowledgeLink = new KnowledgeLink();
knowledgeLink.setLinkName(knowLedgeLinkVO.getLinkName()); knowledgeLink.setLinkName(knowLedgeLinkVO.getLinkName());
@ -160,28 +163,28 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
private void updateKnowledgeFile(ModifyKnowledgeReqVO reqVO, Knowledge knowledge) { private void updateKnowledgeFile(ModifyKnowledgeReqVO reqVO, Knowledge knowledge) {
// 获取数据库中的附件ID // 获取数据库中的附件ID
List<KnowledgeAttachment> oldFileList = knowledgeAttachmentService.lambdaQuery().eq(KnowledgeAttachment::getKnowledgeId, knowledge.getId()).list(); List<KnowledgeAttachment> oldFileList = knowledgeAttachmentService.lambdaQuery().eq(KnowledgeAttachment::getKnowledgeId, knowledge.getId()).list();
if (CollUtil.isEmpty(reqVO.getFileIdList())){ if (CollUtil.isEmpty(reqVO.getFileIdList())) {
if (CollUtil.isNotEmpty(oldFileList)){ if (CollUtil.isNotEmpty(oldFileList)) {
knowledgeAttachmentService.lambdaUpdate().eq(KnowledgeAttachment::getKnowledgeId,knowledge.getId()).remove(); knowledgeAttachmentService.lambdaUpdate().eq(KnowledgeAttachment::getKnowledgeId, knowledge.getId()).remove();
// 删除文件 // 删除文件
for (KnowledgeAttachment knowledgeAttachment : oldFileList) { for (KnowledgeAttachment knowledgeAttachment : oldFileList) {
fileService.deleteFileById(knowledgeAttachment.getFileId()); fileService.deleteFileById(knowledgeAttachment.getFileId());
} }
} }
}else { } else {
List<String> newFileIdList = reqVO.getFileIdList(); List<String> newFileIdList = reqVO.getFileIdList();
// 遍历旧的附件,如果新的附件列表中不包含,则删除 // 遍历旧的附件,如果新的附件列表中不包含,则删除
for (KnowledgeAttachment oldFile : oldFileList) { for (KnowledgeAttachment oldFile : oldFileList) {
if (!newFileIdList.contains(oldFile.getId())){ if (!newFileIdList.contains(oldFile.getId())) {
knowledgeAttachmentService.lambdaUpdate().eq(KnowledgeAttachment::getFileId,oldFile.getId()).remove(); knowledgeAttachmentService.lambdaUpdate().eq(KnowledgeAttachment::getFileId, oldFile.getId()).remove();
fileService.deleteFileById(oldFile.getFileId()); fileService.deleteFileById(oldFile.getFileId());
} }
} }
List<String> oldFileIdList = oldFileList.stream().map(KnowledgeAttachment::getFileId).toList(); List<String> oldFileIdList = oldFileList.stream().map(KnowledgeAttachment::getFileId).toList();
// 再添加新的附件 // 再添加新的附件
for (String fileId : reqVO.getFileIdList()) { for (String fileId : reqVO.getFileIdList()) {
if (!oldFileIdList.contains(fileId)){ if (!oldFileIdList.contains(fileId)) {
KnowledgeAttachment attachment = new KnowledgeAttachment(); KnowledgeAttachment attachment = new KnowledgeAttachment();
attachment.setKnowledgeId(knowledge.getId()); attachment.setKnowledgeId(knowledge.getId());
attachment.setFileId(fileId); attachment.setFileId(fileId);
@ -193,5 +196,62 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
} }
@Override
public void recallKnowledge(String knowledgeId) {
Knowledge knowledge = knowledgeService.getOptById(knowledgeId).orElseThrow(() -> new BusinessException("未找到知识"));
// 只有通过状态或已失效状态才支持撤回
Set<Integer> canRecallStatusSet = Set.of(StatusEnum.PASS.getStatus(), StatusEnum.INVALID.getStatus());
if (!canRecallStatusSet.contains(knowledge.getStatus())) {
throw new BusinessException("该知识状态不能撤回");
}
// TODO 走撤回流程
}
@Override
public KnowledgeDetailResVO queryKnowledgeDetail(String knowledgeId) {
Knowledge knowledge = knowledgeService.getOptById(knowledgeId).orElseThrow(() -> new BusinessException("未找到知识"));
KnowledgeBaseInfo knowledgeBaseInfo = knowledgeBaseInfoService.lambdaQuery().eq(KnowledgeBaseInfo::getKnowledgeId, knowledgeId).oneOpt().orElse(new KnowledgeBaseInfo());
KnowledgeContext knowledgeContext = knowledgeContextService.getOptById(knowledge.getContentId()).orElse(new KnowledgeContext());
List<KnowledgeLink> knowledgeLinkList = knowledgeLinkService.lambdaQuery().eq(KnowledgeLink::getKnowledgeId, knowledgeId).list();
List<KnowledgeAttachment> knowledgeAttachmentList = knowledgeAttachmentService.lambdaQuery().eq(KnowledgeAttachment::getKnowledgeId, knowledgeId).list();
List<String> fileIdList = knowledgeAttachmentList.stream().map(KnowledgeAttachment::getFileId).toList();
List<FileInfo> fileInfos = fileService.listByFileId(fileIdList);
return new KnowledgeDetailResVO(knowledge, knowledgeBaseInfo, knowledgeContext, knowledgeLinkList, fileInfos);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteKnowledge(String knowledgeId) {
// 删除是逻辑删除,如果当前状态是草稿,且没有走过审批流程,则可以直接删除
Knowledge knowledge = knowledgeService.getOptById(knowledgeId).orElseThrow(() -> new BusinessException("未找到知识"));
if (Objects.equals(StatusEnum.DRAFT.getStatus(), knowledge.getStatus())) {
// 需要判断之前是否走过审批流程
if (flowRecordService.lambdaQuery().eq(KnowledgeFlowRecord::getKnowledgeId, knowledgeId).count() == 0) {
// 如果没有走过审批的记录,则可以直接删除
knowledgeService.removeById(knowledgeId);
knowledgeBaseInfoService.lambdaUpdate().eq(KnowledgeBaseInfo::getKnowledgeId, knowledgeId).remove();
knowledgeContextService.lambdaUpdate().eq(KnowledgeContext::getId, knowledge.getContentId()).remove();
// 删除文件
List<KnowledgeAttachment> list = knowledgeAttachmentService.lambdaQuery().eq(KnowledgeAttachment::getKnowledgeId, knowledgeId).list();
List<String> fileIdList = list.stream().map(KnowledgeAttachment::getFileId).toList();
fileService.listByFileId(fileIdList);
knowledgeAttachmentService.lambdaUpdate().eq(KnowledgeAttachment::getKnowledgeId, knowledgeId).remove();
} else {
// 如果有过审批记录,则直接修改状态为删除
knowledge.setStatus(StatusEnum.DELETE.getStatus());
knowledgeService.updateById(knowledge);
}
}
// 如果非草稿,则校验是否是通过/驳回/已失效状态,如果是,则需要走审批流程进行删除
Set<Integer> canDeleteStatusSet = Set.of(StatusEnum.PASS.getStatus(), StatusEnum.REJECT.getStatus(), StatusEnum.INVALID.getStatus());
if (canDeleteStatusSet.contains(knowledge.getStatus())) {
// TODO 这时需要走审批流程进行删除
} else {
throw new BusinessException("审批中的知识不支持删除");
}
}
} }

@ -55,9 +55,9 @@ public class Knowledge implements Serializable {
private Integer knowledgeFrom; private Integer knowledgeFrom;
/** /**
* 1稿 2 3 4 5 6 *
*/ */
@Schema(description = "流转状态 1草稿 2待审批 3驳回 4通过 5已失效 6已撤回") @Schema(description = "流转状态 1草稿 2通过 3驳回 4已撤回 5已失效 6已删除 10待审批(新增) 11待审批(删除) 12待审批(撤回)")
private Integer status; private Integer status;
/** /**

Loading…
Cancel
Save