Explorar el Código

fix:归档调整

zzw hace 2 semanas
padre
commit
d48fb7453e

+ 6 - 6
assembly/src/main/resources/application-dev.yml

@@ -201,14 +201,14 @@ third:
 archive:
   template:
     # 案卷封面模板路径
-#    coverPath: D:/fx/1、卷宗封面.docx
-    coverPath: /www/fx/1、卷宗封面.docx
+    coverPath: D:/fx/1、卷宗封面.docx
+#    coverPath: /www/fx/1、卷宗封面.docx
 #     卷内目录模板路径
-#    catalogPath: D:/fx/2、卷内目录.docx
-    catalogPath: /www/fx/2、卷内目录.docx
+    catalogPath: D:/fx/2、卷内目录.docx
+#    catalogPath: /www/fx/2、卷内目录.docx
 #     案卷封底模板路径
-#    backCoverPath: D:/fx/3、案卷封底.docx
-    backCoverPath: /www/fx/3、案卷封底.docx
+    backCoverPath: D:/fx/3、案卷封底.docx
+#    backCoverPath: /www/fx/3、案卷封底.docx
 assistmg:
   profile: /home/eip/uploadPath
   imgUrl: http://1.71.9.215:9506

+ 1 - 28
assistMg/src/main/java/com/hotent/enterpriseDeclare/controller/material/CostProjectTaskMaterialSummaryController.java

@@ -420,7 +420,7 @@ public class CostProjectTaskMaterialSummaryController extends BaseController<Cos
             return CommonResult.<String>error().message("任务ID不能为空");
         }
         // id为空是新增,必须传documentType;id不为空是编辑
-        if (StringUtil.isEmpty(req.getId())) {
+        if (StringUtil.isEmpty(req.getRelatedId())) {
             if (req.getDocumentType() == null || req.getDocumentType() < 1 || req.getDocumentType() > 3) {
                 return CommonResult.<String>error().message("新增时文书类型不能为空,请选择1-案卷封面、2-卷内目录、3-案卷封底");
             }
@@ -458,33 +458,6 @@ public class CostProjectTaskMaterialSummaryController extends BaseController<Cos
             return CommonResult.<String>error().message("该任务没有资料归纳数据,无法校对");
         }
 
-        // 校验所有资料,收集未完成的资料名称
-//        List<String> missingList = new ArrayList<>();
-//        for (CostProjectTaskMaterialSummary summary : summaryList) {
-//            Integer orderNum = summary.getMaterialOrderNum();
-//            if (orderNum != null && orderNum < 0) {
-//                if (StringUtil.isEmpty(summary.getTotalPageCount())) {
-//                    missingList.add(summary.getMaterialName());
-//                }
-//            } else {
-//                // 普通资料:检查明细附件
-//                if (summary.getDetailList() != null) {
-//                    for (com.hotent.project.model.CostProjectTaskMaterialSummaryDetail detail : summary.getDetailList()) {
-//                        if (StringUtil.isEmpty(detail.getAttachmentUrl())) {
-//                            String detailName = StringUtil.isNotEmpty(detail.getDocumentName())
-//                                    ? detail.getDocumentName()
-//                                    : summary.getMaterialName();
-//                            missingList.add(detailName);
-//                        }
-//                    }
-//                }
-//            }
-//        }
-//
-//        if (!missingList.isEmpty()) {
-//            String missingNames = String.join("、", missingList);
-//            return CommonResult.<String>error().message("以下资料未完成:" + missingNames);
-//        }
         // 更新状态为"生成中"
         CostProjectTask task = costProjectTaskManager.getById(taskId);
         if (task != null) {

+ 12 - 17
assistMg/src/main/java/com/hotent/enterpriseDeclare/controller/material/CostProjectTaskSurveyGenericController.java

@@ -2075,7 +2075,6 @@ public class CostProjectTaskSurveyGenericController {
         }
 
         try {
-            // 查询字典数据
             SysType TYPE = sysTypeManager.getOne(
                     new QueryWrapper<SysType>()
                             .eq("TYPE_KEY_", dictCode)
@@ -2089,27 +2088,23 @@ public class CostProjectTaskSurveyGenericController {
                         rowDisplay, fieldName));
             }
 
-            // 检查值是否在字典允许的范围内(支持多选,用逗号分隔)
-            String[] values = value.split(",");
-            Set<String> validValues = dictDataList.stream()
+            // value已转换为code,需要转回name进行校验
+            String checkValue = dictDataList.stream()
+                    .filter(d -> value.equals(d.getKey()))
                     .map(DataDict::getName)
-                    .filter(StringUtil::isNotEmpty)
-                    .collect(Collectors.toSet());
+                    .findFirst()
+                    .orElse(value);
 
-            List<String> invalidValues = new ArrayList<>();
-            for (String val : values) {
-                String trimmedVal = val.trim();
-                if (StringUtil.isNotEmpty(trimmedVal) && !validValues.contains(trimmedVal)) {
-                    invalidValues.add(trimmedVal);
-                }
-            }
+            boolean exists = dictDataList.stream()
+                    .anyMatch(d -> checkValue.equals(d.getName()));
 
-            if (!invalidValues.isEmpty()) {
-                // 构建详细的错误信息,包含允许的选项范围
-                String validOptionsStr = String.join("、", validValues);
+            if (!exists) {
+                String validOptionsStr = dictDataList.stream()
+                        .map(DataDict::getName)
+                        .collect(Collectors.joining("、"));
                 throw new IllegalArgumentException(String.format(
                         "%s [%s]的值[%s]不在允许的选项范围内。允许的选项有:%s",
-                        rowDisplay, fieldName, String.join("、", invalidValues), validOptionsStr));
+                        rowDisplay, fieldName, value, validOptionsStr));
             }
         } catch (IllegalArgumentException e) {
             throw e;

+ 4 - 1
assistMg/src/main/java/com/hotent/enterpriseDeclare/req/CostTaskReviewPageReq.java

@@ -17,7 +17,7 @@ public class CostTaskReviewPageReq extends PageReq {
 
     @ApiModelProperty(value = "监审对象ID")
     private String auditedUnitId;
-    
+
     @ApiModelProperty(value = "状态")
     private String status;
 
@@ -35,6 +35,9 @@ public class CostTaskReviewPageReq extends PageReq {
 
     private String areaCode;
 
+    //卷宗号
+    private String archiveNo;
+
     private String endYear;
 
     private String startYear;

+ 13 - 4
assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectTaskManagerImpl.java

@@ -264,7 +264,7 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
                 .distinct()
                 .collect(java.util.stream.Collectors.toList());
 
-        if (req.getAreaCode() != null) {
+        if (StringUtil.isNotEmpty(req.getAreaCode())) {
             List<CostProjectTaskApproval> list = costProjectTaskApprovalManager.list(
                     new LambdaQueryWrapper<CostProjectTaskApproval>().eq(CostProjectTaskApproval::getAreaCode, req.getAreaCode())
             );
@@ -304,9 +304,18 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
         if (StringUtil.isNotEmpty(req.getIsGd())) {
             queryWrapper.eq(CostProjectTask::getIsGd, req.getIsGd());
         }
-        queryWrapper.eq(req.getCurrentNode() != null, CostProjectTask::getCurrentNode, req.getCurrentNode());
-        queryWrapper.ne(req.getNCurrentNode() != null, CostProjectTask::getCurrentNode, req.getNCurrentNode());
-        queryWrapper.ne(req.getNStatus() != null, CostProjectTask::getStatus, req.getNStatus());
+        if (StringUtil.isNotEmpty(req.getArchiveNo())) {
+            queryWrapper.eq(CostProjectTask::getArchiveNo, req.getArchiveNo());
+        }
+        if (StringUtil.isNotEmpty(req.getCurrentNode())) {
+            queryWrapper.eq(CostProjectTask::getCurrentNode, req.getCurrentNode());
+        }
+        if (StringUtil.isNotEmpty(req.getNCurrentNode())) {
+            queryWrapper.ne(CostProjectTask::getCurrentNode, req.getNCurrentNode());
+        }
+        if (StringUtil.isNotEmpty(req.getNStatus())) {
+            queryWrapper.ne(CostProjectTask::getStatus, req.getNStatus());
+        }
         // 按创建时间倒序排列
         queryWrapper.orderByDesc(CostProjectTask::getCreateTime);
 

+ 10 - 0
assistMg/src/main/java/com/hotent/project/model/CostProjectTask.java

@@ -165,4 +165,14 @@ public class CostProjectTask extends BaseModel<CostProjectTask> {
     @JsonProperty("archiveTime")
     private LocalDateTime archiveTime;
 
+    @ApiModelProperty(value = "卷宗号")
+    @TableField("archive_no")
+    @JsonProperty("archiveNo")
+    private String archiveNo;
+
+    @ApiModelProperty(value = "归档人")
+    @TableField("archive_user")
+    @JsonProperty("archiveUser")
+    private String archiveUser;
+
 }

+ 3 - 2
assistMg/src/main/java/com/hotent/project/req/ArchiveProofreadReq.java

@@ -33,8 +33,9 @@ public class ArchiveProofreadReq implements Serializable {
     private String taskId;
 
     @ApiModelProperty(value = "文书ID(为空新增,不为空编辑)")
-    @JsonProperty("id")
-    private String id;
+    @JsonProperty("relatedId")
+    private String relatedId;
+
 
     @ApiModelProperty(value = "文书类型:1-案卷封面 2-卷内目录 3-案卷封底(成本监审卷宗备考表),新增时必填")
     @JsonProperty("documentType")

+ 63 - 38
assistMg/src/main/java/com/hotent/project/service/AsyncMaterialSummaryService.java

@@ -11,6 +11,7 @@ import com.hotent.uc.manager.OrgManager;
 import com.hotent.uc.manager.UserManager;
 import com.hotent.uc.model.Org;
 import com.hotent.uc.model.User;
+import com.hotent.uc.util.ContextUtil;
 import com.hotent.util.FileUploadUtil;
 import com.hotent.util.wordexcelutils.CompleteTemplateProcessor;
 import com.hotent.util.wordexcelutils.SmartTemplateWriter;
@@ -113,6 +114,7 @@ public class AsyncMaterialSummaryService {
                     "成本监审集体审议记录",
                     "成本监审工作底稿",
                     "成本监审提取资料登记表",
+                    "提取的成本资料和会计凭证等复印件",
                     "中止定价成本监审料通知书(含送达回证)"
             };
 
@@ -209,6 +211,7 @@ public class AsyncMaterialSummaryService {
                 case 14:
                     // 中止定价成本监审料通知书(含送达回证)
                     generateType14Details(summary, mainTask, childTasks, documents);
+                    break;
                 default:
                     throw new RuntimeException("未知的资料类型");
             }
@@ -225,7 +228,9 @@ public class AsyncMaterialSummaryService {
         int orderNum = 1;
         // 获取"成本监审报告"、"成本监审报告签发稿"、"送达回证"
         List<CostProjectDocument> matchedDocuments = documents.stream()
-                .filter(doc -> "政府定价成本监审结论报告".equals(doc.getDocumentName()))
+                .filter(doc -> "政府定价成本监审结论报告".equals(doc.getDocumentName())
+                        || "政府定价成本监审结论报告-送达回证".equals(doc.getDocumentName())
+                )
                 .sorted(Comparator.comparing(doc -> doc.getOrderNum() != null ? doc.getOrderNum() : 0))
                 .collect(Collectors.toList());
 
@@ -238,7 +243,7 @@ public class AsyncMaterialSummaryService {
             detail.setAuditedUnitName("");
             detail.setFileSource("系统生成电子文书");
             detail.setPageCount(0);
-            detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
+            detail.setAttachmentUrl(document.getActUrl() != null ? document.getActUrl() : "");
             detail.setOrderNum(orderNum++);
             detail.setIsDeleted("0");
             costProjectTaskMaterialSummaryDetailManager.save(detail);
@@ -308,7 +313,7 @@ public class AsyncMaterialSummaryService {
             detail.setAuditedUnitName("");
             detail.setFileSource("系统生成电子文书");
             detail.setPageCount(0);
-            detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
+            detail.setAttachmentUrl(document.getActUrl() != null ? document.getActUrl() : "");
             detail.setOrderNum(orderNum++);
             detail.setIsDeleted("0");
             costProjectTaskMaterialSummaryDetailManager.save(detail);
@@ -322,7 +327,7 @@ public class AsyncMaterialSummaryService {
         int orderNum = 1;
         // 获取"成本资料清单"
         List<CostProjectDocument> matchedDocuments = documents.stream()
-                .filter(doc -> "成本资料清单".equals(doc.getDocumentName()))
+                .filter(doc -> "成本监审资料提取资料登记表".equals(doc.getDocumentName()))
                 .sorted(Comparator.comparing(doc -> doc.getOrderNum() != null ? doc.getOrderNum() : 0))
                 .collect(Collectors.toList());
 
@@ -335,7 +340,7 @@ public class AsyncMaterialSummaryService {
             detail.setAuditedUnitName("");
             detail.setFileSource("系统生成电子文书");
             detail.setPageCount(0);
-            detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
+            detail.setAttachmentUrl(document.getActUrl() != null ? document.getActUrl() : "");
             detail.setOrderNum(orderNum++);
             detail.setIsDeleted("0");
             costProjectTaskMaterialSummaryDetailManager.save(detail);
@@ -412,33 +417,11 @@ public class AsyncMaterialSummaryService {
             detail.setAuditedUnitName("");
             detail.setFileSource("系统生成电子文书");
             detail.setPageCount(0);
-            detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
+            detail.setAttachmentUrl(document.getActUrl() != null ? document.getActUrl() : "");
             detail.setOrderNum(orderNum++);
             detail.setIsDeleted("0");
             costProjectTaskMaterialSummaryDetailManager.save(detail);
         }
-        // 获取任务的报送资料要求(被监审单位提交的补充资料)
-        List<CostProjectTaskMaterial> list = costProjectTaskMaterialManager.list(
-                new LambdaQueryWrapper<>(CostProjectTaskMaterial.class)
-                        .eq(CostProjectTaskMaterial::getTaskId, mainTask.getId())
-        );
-        for (CostProjectTaskMaterial material : list) {
-            // 只处理已上传的资料
-            if ("1".equals(material.getIsUpload()) && StringUtil.isNotEmpty(material.getFileUrl())) {
-                CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
-                detail.setMasterId(summary.getId());
-                detail.setTaskId(mainTask.getId());
-                detail.setDocumentName(material.getInformationName() != null ? material.getInformationName() : "补充资料");
-                detail.setDocumentNumber("");
-                detail.setAuditedUnitName("");
-                detail.setFileSource("监审单位反馈文件");
-                detail.setPageCount(0);
-                detail.setAttachmentUrl(material.getFileUrl());
-                detail.setOrderNum(orderNum++);
-                detail.setIsDeleted("0");
-                costProjectTaskMaterialSummaryDetailManager.save(detail);
-            }
-        }
     }
 
     // ==================== 类型7:成本审核初步意见告知书(含送达回证) ====================
@@ -462,7 +445,7 @@ public class AsyncMaterialSummaryService {
             detail.setAuditedUnitName("");
             detail.setFileSource("系统生成电子文书");
             detail.setPageCount(0);
-            detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
+            detail.setAttachmentUrl(document.getActUrl() != null ? document.getActUrl() : "");
             detail.setOrderNum(orderNum++);
             detail.setIsDeleted("0");
             costProjectTaskMaterialSummaryDetailManager.save(detail);
@@ -489,7 +472,7 @@ public class AsyncMaterialSummaryService {
             detail.setAuditedUnitName("");
             detail.setFileSource("监审单位反馈文件");
             detail.setPageCount(0);
-            detail.setAttachmentUrl(document.getFeedbackDocumentUrl() != null ? document.getFeedbackDocumentUrl() : "");
+            detail.setAttachmentUrl(document.getActUrl() != null ? document.getActUrl() : "");
             detail.setOrderNum(orderNum++);
             detail.setIsDeleted("0");
             costProjectTaskMaterialSummaryDetailManager.save(detail);
@@ -539,7 +522,7 @@ public class AsyncMaterialSummaryService {
             detail.setAuditedUnitName("");
             detail.setFileSource("系统生成电子文书");
             detail.setPageCount(0);
-            detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
+            detail.setAttachmentUrl(document.getActUrl() != null ? document.getActUrl() : "");
             detail.setOrderNum(orderNum++);
             detail.setIsDeleted("0");
             costProjectTaskMaterialSummaryDetailManager.save(detail);
@@ -565,7 +548,7 @@ public class AsyncMaterialSummaryService {
             detail.setAuditedUnitName("");
             detail.setFileSource("系统生成电子文书");
             detail.setPageCount(0);
-            detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
+            detail.setAttachmentUrl(document.getActUrl() != null ? document.getActUrl() : "");
             detail.setOrderNum(orderNum++);
             detail.setIsDeleted("0");
             costProjectTaskMaterialSummaryDetailManager.save(detail);
@@ -612,7 +595,7 @@ public class AsyncMaterialSummaryService {
             detail.setAuditedUnitName("");
             detail.setFileSource("系统生成电子文书");
             detail.setPageCount(0);
-            detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
+            detail.setAttachmentUrl(document.getActUrl() != null ? document.getActUrl() : "");
             detail.setOrderNum(orderNum++);
             detail.setIsDeleted("0");
             costProjectTaskMaterialSummaryDetailManager.save(detail);
@@ -659,7 +642,7 @@ public class AsyncMaterialSummaryService {
             detail.setAuditedUnitName("");
             detail.setFileSource("系统生成电子文书");
             detail.setPageCount(0);
-            detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
+            detail.setAttachmentUrl(document.getActUrl() != null ? document.getActUrl() : "");
             detail.setOrderNum(orderNum++);
             detail.setIsDeleted("0");
             costProjectTaskMaterialSummaryDetailManager.save(detail);
@@ -708,11 +691,36 @@ public class AsyncMaterialSummaryService {
             detail.setAuditedUnitName("");
             detail.setFileSource("监审单位反馈文件");
             detail.setPageCount(0);
-            detail.setAttachmentUrl(document.getFeedbackDocumentUrl() != null ? document.getFeedbackDocumentUrl() : "");
+            detail.setAttachmentUrl(document.getActUrl() != null ? document.getActUrl() : "");
             detail.setOrderNum(orderNum++);
             detail.setIsDeleted("0");
             costProjectTaskMaterialSummaryDetailManager.save(detail);
         }
+        // 获取子任务的资料登记表
+        for (CostProjectTask childTask : childTasks) {
+            // 获取任务的报送资料要求(被监审单位提交的补充资料)
+            List<CostProjectTaskMaterial> list = costProjectTaskMaterialManager.list(
+                    new LambdaQueryWrapper<>(CostProjectTaskMaterial.class)
+                            .eq(CostProjectTaskMaterial::getTaskId, childTask.getId())
+            );
+            for (CostProjectTaskMaterial material : list) {
+                // 只处理已上传的资料
+                if ("1".equals(material.getIsUpload()) && StringUtil.isNotEmpty(material.getFileUrl())) {
+                    CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
+                    detail.setMasterId(summary.getId());
+                    detail.setTaskId(mainTask.getId());
+                    detail.setDocumentName(material.getInformationName() != null ? material.getInformationName() : "补充资料");
+                    detail.setDocumentNumber("");
+                    detail.setAuditedUnitName("");
+                    detail.setFileSource("监审单位反馈文件");
+                    detail.setPageCount(0);
+                    detail.setAttachmentUrl(material.getFileUrl());
+                    detail.setOrderNum(orderNum++);
+                    detail.setIsDeleted("0");
+                    costProjectTaskMaterialSummaryDetailManager.save(detail);
+                }
+            }
+        }
     }
 
     // ==================== 类型14:中止定价成本监审料通知书(含送达回证) ====================
@@ -735,7 +743,7 @@ public class AsyncMaterialSummaryService {
             detail.setAuditedUnitName("");
             detail.setFileSource("监审单位反馈文件");
             detail.setPageCount(0);
-            detail.setAttachmentUrl(document.getFeedbackDocumentUrl() != null ? document.getFeedbackDocumentUrl() : "");
+            detail.setAttachmentUrl(document.getActUrl() != null ? document.getActUrl() : "");
             detail.setOrderNum(orderNum++);
             detail.setIsDeleted("0");
             costProjectTaskMaterialSummaryDetailManager.save(detail);
@@ -1058,7 +1066,7 @@ public class AsyncMaterialSummaryService {
      */
     public String generateArchiveDocument(com.hotent.project.req.ArchiveProofreadReq req) throws Exception {
         Integer documentType = req.getDocumentType();
-        String existingId = req.getId();
+        String existingId = req.getRelatedId();
 
         // 如果id不为空,从数据库获取已有记录的documentType(id是主表ID)
         if (StringUtil.isNotEmpty(existingId)) {
@@ -1123,6 +1131,16 @@ public class AsyncMaterialSummaryService {
         if (StringUtil.isNotEmpty(existingId)) {
             // 编辑:existingId是主表ID,查找对应的明细记录
             masterId = existingId;
+            CostProjectTaskMaterialSummary existingSummary = costProjectTaskMaterialSummaryManager.getById(masterId);
+            if (existingSummary != null) {
+                // 更新task的卷宗号和归档人
+                CostProjectTask task = costProjectTaskManager.getById(existingSummary.getTaskId());
+                if (task != null) {
+                    task.setArchiveNo(req.getArchiveNo());
+                    task.setArchiveUser(ContextUtil.getCurrentUser().getAccount());
+                    costProjectTaskManager.updateById(task);
+                }
+            }
             CostProjectTaskMaterialSummaryDetail existingDetail = costProjectTaskMaterialSummaryDetailManager.getOne(
                 new LambdaQueryWrapper<CostProjectTaskMaterialSummaryDetail>()
                     .eq(CostProjectTaskMaterialSummaryDetail::getMasterId, masterId)
@@ -1155,6 +1173,13 @@ public class AsyncMaterialSummaryService {
             summary.setIsDeleted("0");
             costProjectTaskMaterialSummaryManager.save(summary);
             masterId = summary.getId();
+            // 更新task的卷宗号和归档人
+            CostProjectTask task = costProjectTaskManager.getById(req.getTaskId());
+            if (task != null) {
+                task.setArchiveNo(req.getArchiveNo());
+                task.setArchiveUser(ContextUtil.getCurrentUser().getAccount());
+                costProjectTaskManager.updateById(task);
+            }
 
             // 创建明细记录
             CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
@@ -1419,7 +1444,7 @@ public class AsyncMaterialSummaryService {
         XWPFTable table = tables.get(0);
 
         // 找到模板行(第二行,第一行是表头)
-        int templateRowIndex = 1;
+        int templateRowIndex = 0;
         if (table.getRows().size() <= templateRowIndex) {
             logger.warn("表格行数不足");
             return;