Browse Source

工程咨询及项目管理列表代码提交

wangqiang 1 năm trước cách đây
mục cha
commit
4491fbbc93
29 tập tin đã thay đổi với 1240 bổ sung87 xóa
  1. 15 0
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/factory/FinanceApiFallbackFactory.java
  2. 21 0
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/feign/IFinanceApi.java
  3. 4 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/mapper/ReimbursementInfoMapper.java
  4. 4 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/mapper/xml/ReimbursementInfoMapper.xml
  5. 3 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/service/ReimbursementInfoService.java
  6. 11 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/controller/CwProjectRecordsController.java
  7. 8 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/mapper/CwProjectRecordsMapper.java
  8. 6 1
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/mapper/xml/CwProjectRecordsMapper.xml
  9. 12 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/service/CwProjectRecordsService.java
  10. 281 26
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/controller/CwProjectReportController.java
  11. 105 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/ArchivedReportInfo.java
  12. 34 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReportData.java
  13. 2 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReportOnlineArchiving.java
  14. 2 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReportPaperArchiving.java
  15. 7 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReportSignAndIssue.java
  16. 7 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReviewNew.java
  17. 29 1
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectReportMapper.java
  18. 186 2
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReportMapper.xml
  19. 7 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/CwProjectReportOnlineArchivingService.java
  20. 8 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/CwProjectReportPaperArchivingService.java
  21. 10 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/CwProjectReportReviewService.java
  22. 400 56
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/CwProjectReportService.java
  23. 3 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/CwProjectReportSignAndIssueService.java
  24. 29 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/dto/ProjectReportInfo.java
  25. 5 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/domain/CwWorkClientBase.java
  26. 2 1
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/mapper/xml/CwWorkClientBaseMapper.xml
  27. 3 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/service/CwWorkClientService.java
  28. 5 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/service/dto/CwWorkClientBaseDTO.java
  29. 31 0
      jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java

+ 15 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/factory/FinanceApiFallbackFactory.java

@@ -47,6 +47,21 @@ public class FinanceApiFallbackFactory implements FallbackFactory<IFinanceApi> {
                 return null;
             }
 
+            @Override
+            public String updateQualityOverdueStatus() {
+                return null;
+            }
+
+            @Override
+            public String updateOnlineArchiveStatus() {
+                return null;
+            }
+
+            @Override
+            public String updatePaperArchiveStatus() {
+                return null;
+            }
+
         };
     }
 }

+ 21 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/feign/IFinanceApi.java

@@ -36,4 +36,25 @@ public interface IFinanceApi {
      */
     @GetMapping(value = "/cwProjectRecords/getPlanDetails")
     String getPlanDetails();
+
+    /**
+     * 修改质量复核超期状态
+     * @return
+     */
+    @GetMapping(value = "/cwProjectReport/updateQualityOverdueStatus")
+    String updateQualityOverdueStatus();
+
+    /**
+     * 修改在线归档超期状态
+     * @return
+     */
+    @GetMapping(value = "/cwProjectReport/updateOnlineArchiveStatus")
+    String updateOnlineArchiveStatus();
+
+    /**
+     * 修改纸质归档超期状态
+     * @return
+     */
+    @GetMapping(value = "/cwProjectReport/updatePaperArchiveStatus")
+    String updatePaperArchiveStatus();
 }

+ 4 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/mapper/ReimbursementInfoMapper.java

@@ -31,10 +31,14 @@ public interface ReimbursementInfoMapper extends BaseMapper<ReimbursementInfo> {
      * @param companyId
      * @return
      */
+    @InterceptorIgnore(tenantLine = "true")
     List<TreeUserDto> findOfficeListByCompanyId(@Param("companyId")String companyId);
+    @InterceptorIgnore(tenantLine = "true")
+    List<TreeUserDto> findOfficeListByCompanyId2();
 
     List<TreeUserDto> findUserList(@Param("name") String name);
 
+    @InterceptorIgnore(tenantLine = "true")
     List<TreeUserDto> findUserListNew(@Param("name") String name);
 
     List<RetureListDto> findExportList (@Param(Constants.WRAPPER) QueryWrapper queryWrapper);

+ 4 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/mapper/xml/ReimbursementInfoMapper.xml

@@ -401,4 +401,8 @@
 			</foreach>
 		</where>
 	</select>
+	<select id="findOfficeListByCompanyId2"
+			resultType="com.jeeplus.assess.reimbursement.reimbursementInfo.service.dto.TreeUserDto">
+		SELECT id,`name`,parent_id FROM sys_office WHERE del_flag = 0
+	</select>
 </mapper>

+ 3 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/service/ReimbursementInfoService.java

@@ -774,6 +774,9 @@ public class ReimbursementInfoService {
         List<TreeUserDto> list = new ArrayList<>();
         // 查询部门
         List<TreeUserDto> officeList = infoMapper.findOfficeListByCompanyId(userDTO.getCompanyDTO().getId());
+        if (userDTO.isAdmin()) {
+            officeList = infoMapper.findOfficeListByCompanyId2();
+        }
         List<TreeUserDto> filterList = new ArrayList<>();
         filterList = officeList;
 

+ 11 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/controller/CwProjectRecordsController.java

@@ -177,6 +177,17 @@ public class CwProjectRecordsController {
         String s = cwProjectRecordsService.updateStatusById(dto);
         return ResponseEntity.ok(s);
     }
+    /**
+     * 根据id修改项目等级
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "根据id修改项目等级")
+    @PostMapping(value = "/projectUpgrade")
+    public ResponseEntity<String> projectUpgrade(@RequestParam("id") String id) {
+        String s = cwProjectRecordsService.projectUpgrade(id);
+        return ResponseEntity.ok(s);
+    }
 
     /**
      * 导出项目数据

+ 8 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/mapper/CwProjectRecordsMapper.java

@@ -116,4 +116,12 @@ public interface CwProjectRecordsMapper extends BaseMapper<CwProjectRecords> {
     List<String> getTaskPhase();
     @InterceptorIgnore(tenantLine = "true")
     List<CwProjectPlanDetails> getPlanDetails();
+
+    /**
+     * 根据id修改项目等级
+     * @param id
+     * @return
+     */
+    void projectUpgrade( @Param("id") String id,@Param("level") String level);
+
 }

+ 6 - 1
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/mapper/xml/CwProjectRecordsMapper.xml

@@ -356,7 +356,8 @@
         cw_wci.payer_subject,
         cw_wci.payment_method,
         cw_wcb.name as client_contacts_name,
-        cw_pbt.name as business_type_name
+        cw_pbt.name as business_type_name,
+        cw_re.id as reportId
         from cw_project_records a
         left join sys_user su on su.id = a.create_by_id and su.del_flag = '0'
         left join sys_user su2 on su2.id = a.project_master_id and su2.del_flag = '0'
@@ -364,6 +365,7 @@
         left join cw_work_contract_info cw_wci on cw_wci.id = a.contract_id and cw_wci.del_flag = '0'
         left join cw_work_client_base cw_wcb on cw_wci.client_contacts = cw_wcb.id and cw_wcb.del_flag = '0'
         left join cw_project_business_type cw_pbt on cw_pbt.id = a.business_type and cw_pbt.del_flag = '0'
+        left join cw_project_report cw_re on cw_re.project_id = a.id and cw_re.del_flag = '0'
         where a.del_flag = '0' and a.id = #{id}
     </select>
 
@@ -464,6 +466,9 @@
             id = #{id}
             AND del_flag = 0
     </update>
+    <update id="projectUpgrade">
+        UPDATE cw_project_records set project_level = #{level} where id = #{id}
+    </update>
 
     <select id="getListByIds" resultType="com.jeeplus.finance.projectRecords.domain.CwProjectRecords">
         SELECT  id,remarks,project_number,project_name,office_id,project_money,audit_year,plan_start_date,plan_end_date,project_master_id,project_leader_id,proc_ins_id,process_definition_id,status,contract_id,business_type,risk_level,real_header,report_type,report_review,create_time,create_by_id,update_time,update_by_id,del_flag,tenant_id  FROM cw_project_records

+ 12 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/service/CwProjectRecordsService.java

@@ -900,4 +900,16 @@ public class CwProjectRecordsService extends ServiceImpl<CwProjectRecordsMapper,
         List<CwProjectPlanDetails> list=cwProjectRecordsMapper.getPlanDetails();
         return list;
     }
+
+    /**
+     * 根据id修改项目等级
+     * @param id
+     * @return
+     */
+    public String projectUpgrade(String id) {
+        cwProjectRecordsMapper.projectUpgrade(id,"2");
+        return "ok";
+    }
+
+
 }

+ 281 - 26
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/controller/CwProjectReportController.java

@@ -3,6 +3,7 @@ package com.jeeplus.finance.projectReport.controller;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Lists;
@@ -19,16 +20,14 @@ import com.jeeplus.finance.projectDict.service.ProjectDictService;
 import com.jeeplus.finance.projectDict.service.dto.ProjectDictDto;
 import com.jeeplus.finance.projectRecords.domain.CwProjectRecords;
 import com.jeeplus.finance.projectRecords.service.CwProjectRecordsService;
-import com.jeeplus.finance.projectReport.domain.CwProjectReport;
-import com.jeeplus.finance.projectReport.domain.CwProjectReportData;
-import com.jeeplus.finance.projectReport.domain.CwProjectReportSignature;
-import com.jeeplus.finance.projectReport.domain.CwSignatureAnnotator;
+import com.jeeplus.finance.projectReport.domain.*;
 import com.jeeplus.finance.projectReport.mapper.CwSignatureAnnotatorMapper;
 import com.jeeplus.finance.projectReport.mapper.ProjectReportWorkAttachmentMapper;
 import com.jeeplus.finance.projectReport.service.CwProjectReportService;
 import com.jeeplus.finance.projectReport.service.dto.CwProjectReportDTO;
 import com.jeeplus.finance.projectReport.service.dto.CwProjectReportSignatureDTO;
 import com.jeeplus.finance.projectReport.service.dto.ProjectContactInfo;
+import com.jeeplus.finance.projectReport.service.dto.ProjectReportInfo;
 import com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientBaseDTO;
 import com.jeeplus.flowable.feign.IFlowableApi;
 import com.jeeplus.logging.annotation.ApiLog;
@@ -58,10 +57,11 @@ import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.File;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.Period;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -88,6 +88,17 @@ public class CwProjectReportController {
     @Resource
     private CwProjectRecordsService projectRecordsService;
 
+    @ApiLog(value = "归档信息导出")
+    @GetMapping("archivedInfoExport")
+    @ApiOperation(value = "归档信息导出")
+    public void archivedInfoExport(CwProjectReportData reportData,ExcelOptions options, HttpServletResponse response) throws Exception {
+        String fileName = options.getFilename();
+        String sheetName = options.getSheetName();
+        List<ArchivedReportInfo> exportFileDtos = projectReportService.archivedInfoExport(reportData);
+        EasyPoiUtil.exportExcel ( exportFileDtos, fileName,  sheetName, ArchivedReportInfo.class, fileName, response );
+
+    }
+
     /**
      * 保存财务报告信息-流程
      * @param reportData
@@ -136,6 +147,36 @@ public class CwProjectReportController {
     }
 
     /**
+     * 将复核超期的数据状态改为超期未复核
+     * @return
+     */
+    @ApiLog("将复核超期的数据状态改为超期未复核")
+    @GetMapping("updateQualityOverdueStatus")
+    public void updateQualityOverdueStatus() throws Exception {
+        projectReportService.updateQualityOverdueStatus();
+    }
+
+    /**
+     * 将在线归档超期的数据状态改为超期未归档
+     * @return
+     */
+    @ApiLog("将在线归档超期的数据状态改为超期未归档")
+    @GetMapping("updateOnlineArchiveStatus")
+    public void updateOnlineArchiveStatus() throws Exception {
+        projectReportService.updateOnlineArchiveStatus();
+    }
+
+    /**
+     * 将纸质归档超期的数据状态改为超期未归档
+     * @return
+     */
+    @ApiLog("将纸质归档超期的数据状态改为超期未归档")
+    @GetMapping("updatePaperArchiveStatus")
+    public void updatePaperArchiveStatus() throws Exception {
+        projectReportService.updatePaperArchiveStatus();
+    }
+
+    /**
      * 查询财务项目信息列表
      * @param projectReportData
      * @param page
@@ -174,29 +215,240 @@ public class CwProjectReportController {
                     i.setAuditUserIdsRev(flowTaskService.getTaskAuditUsers(i.getRevTaskId()));  // 获取数据审核人
                 }
             }
-            // 签章
-            if (StringUtils.isNotBlank(i.getSignatureType())) {
-                // 电子章
-                if ("1".equals(i.getSignatureType())) {
-                    if (StringUtils.isNotBlank(i.getSignTaskId1()) && StringUtils.isNotBlank(i.getStatus1())) {
-                        if ("2".equals(i.getStatus1())) { // “审核中”的数据要获取数据审核人
-                            i.setAuditUserIdsSign1(flowTaskService.getTaskAuditUsers(i.getSignTaskId1()));  // 获取数据审核人
+
+            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+            //在线归档超期天数显示调整  纸质归档超期天数显示
+
+            if (StringUtils.isNotBlank(i.getProjectLevel())) {
+                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+                // 对日期进行空值检查并解析  Optional 对null情况操作
+                Optional<LocalDate> startDateOptional = Optional.ofNullable(i.getIssueCompleteTime()).map(date -> LocalDate.parse(format.format(date), formatter));
+                Optional<LocalDate> startDate2Optional = Optional.ofNullable(i.getCheckCompleteTime()).map(date -> LocalDate.parse(format.format(date), formatter));
+
+                if (startDateOptional.isPresent() && startDate2Optional.isPresent()) {
+                    LocalDate startDate = startDateOptional.get();
+                    LocalDate startDate2 = startDate2Optional.get();
+                    LocalDate currentDate = LocalDate.now();
+
+                    // 计算日期差
+                    Period period = Period.between(startDate, currentDate);
+                    Period period2 = Period.between(startDate2, currentDate);
+
+                    // 获取天数差
+                    int days = period.getDays();
+                    int days2 = period2.getDays();
+
+                    //A级
+                    if (i.getProjectLevel().equals("1")) {
+                        //计算规则:在线-报告签发审核完成40天后设置为超期。 纸质-报告签发审核完成40天后设置为超期
+
+                        //判断是否超期(流程未开始即流程状态为null)
+                        if (days > 40 && null == i.getOnlineArchivingStatus()) {
+                            i.setOnlineOverdueDates(days - 40);
+                        }
+                        if (days2 > 40 && null == i.getPaperArchivingStatus()) {
+                            i.setPaperOverdueDates(days2 - 40);
+                        }
+
+                    } else if (i.getProjectLevel().equals("2")) {
+                        //计算规则:在线-质量复核审核完成40天后设置为超期。 纸质-质量复核审核完成90天后设置为超期
+                        if (days > 40 && null == i.getOnlineArchivingStatus()) {
+                            i.setOnlineOverdueDates(days - 40);
+                        }
+                        if (days2 > 90 && null == i.getPaperArchivingStatus()) {
+                            i.setPaperOverdueDates(days2 - 90);
                         }
                     }
                 }
-                // 公章+执业章
-                if ("2".equals(i.getSignatureType())) {
-                    if (StringUtils.isNotBlank(i.getSignTaskId2()) && StringUtils.isNotBlank(i.getStatus2())) {
-                        if ("2".equals(i.getStatus2())) { // “审核中”的数据要获取数据审核人
-                            i.setAuditUserIdsSign2(flowTaskService.getTaskAuditUsers(i.getSignTaskId2()));  // 获取数据审核人
+            }
+        });
+        return ResponseEntity.ok (result);
+    }
+
+    /**
+     * 查询财务项目信息列表
+     * @param projectReportData
+     * @param page
+     * @return
+     */
+    @ApiLog("查询财务报告信息列表")
+    @PreAuthorize("hasAuthority('cwProjectReport:list')")
+    @GetMapping("list2")
+    public ResponseEntity<IPage<CwProjectReportData>> data2(CwProjectReportData projectReportData, Page<CwProjectReportData> page) throws Exception {
+        IPage<CwProjectReportData> result = new Page<CwProjectReportData>();
+        result = projectReportService.findList2 (page,projectReportData);
+        result.getRecords().stream().forEach(i -> {
+
+            //当项目经理是跨租户的人员时,则特殊处理
+            if (StringUtils.isBlank(i.getProjectMasterName())){
+                //根据项目经理id去人员表重查数据
+                if (StringUtils.isNotBlank(i.getProjectMasterId())){
+                    UserDTO byId = SpringUtil.getBean(IUserApi.class).getById(i.getProjectMasterId());
+                    if(null != byId)
+                        i.setProjectMasterName(byId.getName());
+                }
+            }
+            if (StringUtils.isBlank(i.getRealHeaderName())){
+                //根据项目经理id去人员表重查数据
+                if (StringUtils.isNotBlank(i.getProjectMasterId2())){
+                    UserDTO byId = SpringUtil.getBean(IUserApi.class).getById(i.getProjectMasterId2());
+                    if(null != byId)
+                        i.setRealHeaderName(byId.getName());
+                }
+
+            }
+
+            // 复核
+            if (StringUtils.isNotBlank(i.getRevTaskId()) && StringUtils.isNotBlank(i.getReviewStatus())) {
+                if ("2".equals(i.getReviewStatus())) { // “审核中”的数据要获取数据审核人
+                    i.setAuditUserIdsRev(flowTaskService.getTaskAuditUsers(i.getRevTaskId()));  // 获取数据审核人
+                }
+            }
+
+            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+            //在线归档超期天数显示调整  纸质归档超期天数显示
+
+            if (StringUtils.isNotBlank(i.getProjectLevel())) {
+                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+                // 对日期进行空值检查并解析  Optional 对null情况操作
+                Optional<LocalDate> startDateOptional = Optional.ofNullable(i.getIssueCompleteTime()).map(date -> LocalDate.parse(format.format(date), formatter));
+                Optional<LocalDate> startDate2Optional = Optional.ofNullable(i.getCheckCompleteTime()).map(date -> LocalDate.parse(format.format(date), formatter));
+
+                if (startDateOptional.isPresent() && startDate2Optional.isPresent()) {
+                    LocalDate startDate = startDateOptional.get();
+                    LocalDate startDate2 = startDate2Optional.get();
+                    LocalDate currentDate = LocalDate.now();
+
+                    // 计算日期差
+                    Period period = Period.between(startDate, currentDate);
+                    Period period2 = Period.between(startDate2, currentDate);
+
+                    // 获取天数差
+                    int days = period.getDays();
+                    int days2 = period2.getDays();
+
+                    //A级
+                    if (i.getProjectLevel().equals("1")) {
+                        //计算规则:在线-报告签发审核完成40天后设置为超期。 纸质-报告签发审核完成40天后设置为超期
+
+                        //判断是否超期(流程未开始即流程状态为null)
+                        if (days > 40 && null == i.getOnlineArchivingStatus()) {
+                            i.setOnlineOverdueDates(days - 40);
+                        }
+                        if (days2 > 40 && null == i.getPaperArchivingStatus()) {
+                            i.setPaperOverdueDates(days2 - 40);
+                        }
+
+                    } else if (i.getProjectLevel().equals("2")) {
+                        //计算规则:在线-质量复核审核完成40天后设置为超期。 纸质-质量复核审核完成90天后设置为超期
+                        if (days > 40 && null == i.getOnlineArchivingStatus()) {
+                            i.setOnlineOverdueDates(days - 40);
+                        }
+                        if (days2 > 90 && null == i.getPaperArchivingStatus()) {
+                            i.setPaperOverdueDates(days2 - 90);
                         }
                     }
                 }
-                // 实体章
-                if ("3".equals(i.getSignatureType())) {
-                    if (StringUtils.isNotBlank(i.getSignTaskId3()) && StringUtils.isNotBlank(i.getStatus3())) {
-                        if ("2".equals(i.getStatus3())) { // “审核中”的数据要获取数据审核人
-                            i.setAuditUserIdsSign3(flowTaskService.getTaskAuditUsers(i.getSignTaskId3()));  // 获取数据审核人
+            }
+        });
+        return ResponseEntity.ok (result);
+    }
+
+    /**
+     * 获取咨询营业收入(万元)的总和
+     * @return
+     */
+    @ApiLog("获取咨询营业收入(万元)的总和")
+    @GetMapping("getTotal")
+    public ResponseEntity getTotal() {
+        String total = projectReportService.getTotal (  );
+        return ResponseEntity.ok (total);
+    }
+
+    /**
+     * 查询财务项目信息列表
+     * @param projectReportData
+     * @param page
+     * @return
+     */
+    @ApiLog("查询财务报告信息列表")
+    @PreAuthorize("hasAuthority('cwProjectReport:list')")
+    @GetMapping("list3")
+    public ResponseEntity<IPage<CwProjectReportData>> data3(CwProjectReportData projectReportData, Page<CwProjectReportData> page) throws Exception {
+        IPage<CwProjectReportData> result = new Page<CwProjectReportData>();
+        result = projectReportService.findList3 (page,projectReportData);
+        result.getRecords().stream().forEach(i -> {
+
+            //当项目经理是跨租户的人员时,则特殊处理
+            if (StringUtils.isBlank(i.getProjectMasterName())){
+                //根据项目经理id去人员表重查数据
+                if (StringUtils.isNotBlank(i.getProjectMasterId())){
+                    UserDTO byId = SpringUtil.getBean(IUserApi.class).getById(i.getProjectMasterId());
+                    if(null != byId)
+                        i.setProjectMasterName(byId.getName());
+                }
+            }
+            if (StringUtils.isBlank(i.getRealHeaderName())){
+                //根据项目经理id去人员表重查数据
+                if (StringUtils.isNotBlank(i.getProjectMasterId2())){
+                    UserDTO byId = SpringUtil.getBean(IUserApi.class).getById(i.getProjectMasterId2());
+                    if(null != byId)
+                        i.setRealHeaderName(byId.getName());
+                }
+
+            }
+
+            // 复核
+            if (StringUtils.isNotBlank(i.getRevTaskId()) && StringUtils.isNotBlank(i.getReviewStatus())) {
+                if ("2".equals(i.getReviewStatus())) { // “审核中”的数据要获取数据审核人
+                    i.setAuditUserIdsRev(flowTaskService.getTaskAuditUsers(i.getRevTaskId()));  // 获取数据审核人
+                }
+            }
+
+            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+            //在线归档超期天数显示调整  纸质归档超期天数显示
+
+            if (StringUtils.isNotBlank(i.getProjectLevel())) {
+                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+                // 对日期进行空值检查并解析  Optional 对null情况操作
+                Optional<LocalDate> startDateOptional = Optional.ofNullable(i.getIssueCompleteTime()).map(date -> LocalDate.parse(format.format(date), formatter));
+                Optional<LocalDate> startDate2Optional = Optional.ofNullable(i.getCheckCompleteTime()).map(date -> LocalDate.parse(format.format(date), formatter));
+
+                if (startDateOptional.isPresent() && startDate2Optional.isPresent()) {
+                    LocalDate startDate = startDateOptional.get();
+                    LocalDate startDate2 = startDate2Optional.get();
+                    LocalDate currentDate = LocalDate.now();
+
+                    // 计算日期差
+                    Period period = Period.between(startDate, currentDate);
+                    Period period2 = Period.between(startDate2, currentDate);
+
+                    // 获取天数差
+                    int days = period.getDays();
+                    int days2 = period2.getDays();
+
+                    //A级
+                    if (i.getProjectLevel().equals("1")) {
+                        //计算规则:在线-报告签发审核完成40天后设置为超期。 纸质-报告签发审核完成40天后设置为超期
+
+                        //判断是否超期(流程未开始即流程状态为null)
+                        if (days > 40 && null == i.getOnlineArchivingStatus()) {
+                            i.setOnlineOverdueDates(days - 40);
+                        }
+                        if (days2 > 40 && null == i.getPaperArchivingStatus()) {
+                            i.setPaperOverdueDates(days2 - 40);
+                        }
+
+                    } else if (i.getProjectLevel().equals("2")) {
+                        //计算规则:在线-质量复核审核完成40天后设置为超期。 纸质-质量复核审核完成90天后设置为超期
+                        if (days > 40 && null == i.getOnlineArchivingStatus()) {
+                            i.setOnlineOverdueDates(days - 40);
+                        }
+                        if (days2 > 90 && null == i.getPaperArchivingStatus()) {
+                            i.setPaperOverdueDates(days2 - 90);
                         }
                     }
                 }
@@ -204,7 +456,6 @@ public class CwProjectReportController {
         });
         return ResponseEntity.ok (result);
     }
-
     /**
      * 根据id修改状态值status
      * @param data
@@ -244,6 +495,10 @@ public class CwProjectReportController {
         if (null != projectReportData) {
             List<ProjectContactInfo> contactInfos = projectReportService.getContactInfos(projectReportData.getProjectId());
             projectReportData.setContactInfos(contactInfos);
+            projectReportData.setConstructionParty(contactInfos);
+            //查询项目报告信息
+            List<ProjectReportInfo> projectReportInfos = projectReportService.getProjectReportInfo(id);
+            projectReportData.setProjectReportInfos(projectReportInfos);
         }
 
         return ResponseEntity.ok (projectReportData);

+ 105 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/ArchivedReportInfo.java

@@ -0,0 +1,105 @@
+package com.jeeplus.finance.projectReport.domain;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.jeeplus.core.domain.BaseEntity;
+import com.jeeplus.core.query.Query;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 归档信息导出类
+ * @author 王强
+ * @version 1.0
+ * @date 2024-02-27 14:33
+ */
+@Data
+public class ArchivedReportInfo extends BaseEntity {
+
+    /**
+     * 报告文号
+     */
+    @Excel(name = "报告文号",width = 12,orderNum = "0")
+    private String reportNo;
+
+    /**
+     * 项目名称
+     */
+    @Excel(name = "项目名称",width = 40,orderNum = "1")
+    private String projectName;
+
+    //项目等级
+    @Excel(name = "项目等级",width = 12,orderNum = "2")
+    private String projectLevel;
+
+    /**
+     * 项目类别
+     */
+    @Excel(name = "项目类别",width = 12,orderNum = "3")
+    private String projectCategory;
+
+    /**
+     * 造价咨询营业收入
+     */
+    @Excel(name = "咨询营业收入(万元)",width = 12,orderNum = "4")
+    private String ziXunShouRu;
+
+    /**
+     * 登记人
+     */
+    @Excel(name = "登记人",width = 12,orderNum = "5")
+    private String projectCreateByName;
+
+    @Excel(name = "登记人部门",width = 20,orderNum = "6")
+    private String departmentName;
+
+    /**
+     * 责任人
+     */
+    @Excel(name = "责任人",width = 20,orderNum = "7")
+    private String personResponsible;
+
+    /**
+     * 登记日期(项目创建日期)
+     */
+    @Excel(name = "登记日期",exportFormat = "yyyy-MM-dd",width = 25,orderNum = "8")
+    private String projectCreateTime;
+
+    /**
+     * 质量复核日期
+     */
+    @Excel(name = "质量复核日期",exportFormat = "yyyy-MM-dd",width = 25,orderNum = "9")
+    private String checkCompleteTime; //报告复核流程结束修改时间
+
+    /**
+     * 报告签发日期
+     */
+    @Excel(name = "报告签发日期",exportFormat = "yyyy-MM-dd",width = 25,orderNum = "10")
+    private String issueCompleteTime;
+
+    /**
+     * 归档发起日期(电子归档)
+     */
+    @Excel(name = "归档发起日期",exportFormat = "yyyy-MM-dd",width = 25,orderNum = "11")
+    private String onlineStartTime;
+
+    /**
+     * 电子归档状态
+     */
+    @Excel(name = "电子归档状态",width = 20,orderNum = "12")
+    private String onlineArchivingStatus;
+
+    /**
+     * 超期未归档天数
+     */
+    @Excel(name = "超期未归档天数",width = 20,orderNum = "13")
+    private String onlineOverdueDates;
+
+    /**
+     * 超期归档天数
+     */
+    @Excel(name = "超期归档天数",width = 20,orderNum = "14")
+    private String onlineDates;
+
+}

+ 34 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReportData.java

@@ -7,6 +7,7 @@ import com.jeeplus.core.query.Query;
 import com.jeeplus.core.service.dto.BaseDTO;
 import com.jeeplus.finance.common.flowable.dto.CommitParamDTO;
 import com.jeeplus.finance.projectReport.service.dto.ProjectContactInfo;
+import com.jeeplus.finance.projectReport.service.dto.ProjectReportInfo;
 import com.jeeplus.finance.projectReport.service.dto.ProjectReportWorkAttachmentDTO;
 import com.jeeplus.sys.domain.WorkAttachmentInfo;
 import lombok.Data;
@@ -22,6 +23,30 @@ import java.util.List;
 @Data
 public class CwProjectReportData extends BaseDTO {
 
+    private String[] archivingStatus;
+
+    /**
+     * 总的咨询营业收入
+     */
+    private String ziXunShouRuAll;
+    /**
+     * 项目类型(用来区分造价审核项目与工程咨询项目,1:造价审核。2:工程咨询)
+     */
+    private String projectType;
+    /**
+     * 项目类别
+     */
+    private String projectCategory;
+
+    private int onlineOverdueDates; //在线归档超期天数
+
+    private int paperOverdueDates; //纸质归档超期天数
+
+    private Date issueCompleteTime; //报告签发流程结束修改时间
+    private Date checkCompleteTime; //报告复核流程结束修改时间
+
+    private String mark;  //标记
+
     //案卷号
     private String filedNo;
     //确认案卷号
@@ -43,6 +68,10 @@ public class CwProjectReportData extends BaseDTO {
 
     private List<ProjectContactInfo> contactInfos;
 
+    private List<ProjectContactInfo> constructionParty;
+
+    private List<ProjectReportInfo> projectReportInfos;
+
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planStartDate;
 
@@ -668,6 +697,11 @@ public class CwProjectReportData extends BaseDTO {
     private String contractName;
 
     /**
+     * 合同id
+     */
+    private String contractId;
+
+    /**
      * 签字注师审核状态
      */
 

+ 2 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReportOnlineArchiving.java

@@ -14,6 +14,8 @@ import lombok.Data;
 @TableName(value = "cw_project_report_online_archiving")
 public class CwProjectReportOnlineArchiving extends BaseEntity {
 
+    private String mark;  //标记
+
     private String reportId;  //报告id
     /**
      * 流程id

+ 2 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReportPaperArchiving.java

@@ -14,6 +14,8 @@ import lombok.Data;
 @TableName(value = "cw_project_report_paper_archiving")
 public class CwProjectReportPaperArchiving extends BaseEntity {
 
+    private String mark; //标记
+
     private String reportId;  //报告id
     /**
      * 流程id

+ 7 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReportSignAndIssue.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.jeeplus.core.domain.BaseEntity;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * 报告签发
  * @author 王强
@@ -15,6 +17,11 @@ import lombok.Data;
 @TableName(value = "cw_project_report_sign_and_issue")
 public class CwProjectReportSignAndIssue extends BaseEntity {
 
+    /**
+     * 复核通过时间
+     */
+    private Date issueCompleteTime;
+
     private String reportId;  //报告id
     /**
      * 流程id

+ 7 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReviewNew.java

@@ -17,6 +17,13 @@ import java.util.Date;
 @TableName(value = "cw_project_report_review_new")
 public class CwProjectReviewNew extends BaseEntity {
 
+    private String mark;  //标记
+
+    /**
+     * 复核通过时间
+     */
+    private Date checkCompleteTime;
+
     /**
      * 流程id
      */

+ 29 - 1
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectReportMapper.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jeeplus.finance.projectReport.domain.*;
 import com.jeeplus.finance.projectReport.service.dto.ProjectContactInfo;
+import com.jeeplus.finance.projectReport.service.dto.ProjectReportInfo;
 import com.jeeplus.finance.workClientInfo.domain.CwWorkClientBase;
 import com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientBaseDTO;
 import com.jeeplus.sys.domain.WorkAttachmentInfo;
@@ -26,6 +27,8 @@ import java.util.List;
 //@InterceptorIgnore(tenantLine = "true")
 public interface CwProjectReportMapper extends BaseMapper<CwProjectReport> {
 
+    String getTotal();
+
     /**
      * 查询报告数据集合
      * @param page
@@ -238,5 +241,30 @@ public interface CwProjectReportMapper extends BaseMapper<CwProjectReport> {
      * @param projectId
      * @return
      */
-    List<ProjectContactInfo> getContactInfos(String projectId);
+    List<ProjectContactInfo> getContactInfos(@Param("projectId") String projectId);
+
+    /**
+     * 将复核超期的数据状态改为超期未复核
+     */
+    void updateQualityOverdueStatus();
+
+    /**
+     * 将在线归档超期的数据状态改为超期未归档
+     */
+    void updateOnlineArchiveStatus();
+
+    /**
+     * 将纸质归档超期的数据状态改为超期未归档
+     */
+    void updatePaperArchiveStatus();
+
+    List<String> getAllInfo();
+
+    List<ProjectReportInfo> getProjectReportInfo(@Param("id") String id);
+
+    /**
+     * 归档信息导出数据查询
+     * @return
+     */
+    List<ArchivedReportInfo> archivedInfoExport(@Param(Constants.WRAPPER) QueryWrapper<ArchivedReportInfo> queryWrapper);
 }

+ 186 - 2
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReportMapper.xml

@@ -231,9 +231,12 @@
         ifnull(cw_rev.review_status,'0') as reviewStatus,
         cw_rev.proc_ins_id as procInsId3,
         cw_rev.id as reviewNewId,
+        cw_rev.check_complete_time as checkCompleteTime,
+        cw_rev.zi_xun_shou_ru,
         ifnull(sai.status,'0') as signAndIssueStatus,
         sai.proc_ins_id as procInsId4,
         sai.id as signAndIssueId,
+        sai.issue_complete_time as issueCompleteTime,
         ifnull(roa.status,'0') as onlineArchivingStatus,
         roa.proc_ins_id as onlineArchivingProcInsId,
         roa.id as onlineArchivingId,
@@ -265,7 +268,11 @@
         cw_nra.process_definition_id as applyReviewProcDefId,
         ifnull(cw_nra.review_status,'0') as applyReviewStatus,
         cw_ci.contract_name,
-        b.project_level
+        cw_ci.id as contractId,
+        cwcp.customer_name as clientName,
+        b.project_level,
+        b.project_type,
+        b.report_type
         FROM cw_project_report a
         left join cw_project_records b on a.project_id = b.id
         LEFT JOIN sys_office c on a.office_id = c.id
@@ -296,6 +303,7 @@
         left join sys_user_manage_office sumo on sumo.office_id = sub.office_id
         left join cw_work_client_base cwcb on new_line.served_unit_id = cwcb.id
         LEFT JOIN cw_work_contract_info cw_ci on  b.contract_id=cw_ci.id
+        LEFT JOIN cw_work_contract_participant cwcp on cw_ci.id = cwcp.contract_info_id and cwcp.del_flag = '0'
         LEFT JOIN cw_project_report_number_apply cw_na on  a.id = cw_na.report_id
         LEFT JOIN cw_project_report_number_review_apply cw_nra on  a.id = cw_nra.report_id
          left join act_ru_task arta ON cw_na.proc_ins_id = arta.PROC_INST_ID_
@@ -1125,13 +1133,189 @@
             LEFT JOIN cw_work_client_contact cw_wco ON cw_wcb.id = cw_wco.client_id
             AND cw_wco.del_flag = '0'
         WHERE
-            cw_pci.project_id = #{id}
+            cw_pci.project_id = #{projectId}
+    </select>
+    <select id="getAllInfo" resultType="java.lang.String">
+        select id from cw_project_report where del_flag = '0'
+    </select>
+    <select id="getProjectReportInfo"
+            resultType="com.jeeplus.finance.projectReport.service.dto.ProjectReportInfo">
+        select c.project_name,a.create_time,b.report_no,'已完成' as status from cw_project_report a
+        left join cw_project_report_new_line b on a.id = b.report_id and b.del_flag = '0'
+        left join cw_project_records c on c.id = a.project_id and c.del_flag = '0'
+        where a.id = #{id}
     </select>
 
     <update id="updatesigStatusById">
         update cw_project_report set signature_annotator1=#{signatureAnnotator1},signature_annotator2=#{signatureAnnotator2},signature_annotator_status=#{signatureAnnotatorStatus} where id=#{id}
     </update>
+    <update id="updateQualityOverdueStatus">
+        UPDATE cw_project_report_review_new AS r
+        JOIN (
+            SELECT b.id
+            FROM cw_project_report AS a
+            LEFT JOIN cw_project_report_review_new AS b ON a.id = b.report_id
+            LEFT JOIN cw_project_report_new_line AS c ON a.id = c.report_id
+            WHERE (b.review_status IS NULL OR b.review_status = '')
+            AND a.del_flag = '0'
+            AND c.report_no IS NOT NULL
+            AND DATEDIFF(NOW(), a.create_time) > 60
+            and b.id is not null
+        ) AS sub
+        ON r.id = sub.id
+        SET r.review_status = '6', r.mark = '1';
+    </update>
+    <update id="updateOnlineArchiveStatus">
+        UPDATE cw_project_report_online_archiving AS r
+JOIN (
+	SELECT
+		d.id
+	FROM
+		cw_project_report AS a
+		LEFT JOIN cw_project_report_review_new AS b ON a.id = b.report_id
+		AND b.del_flag = '0'
+		LEFT JOIN cw_project_report_new_line AS c ON a.id = c.report_id
+		AND c.del_flag = '0'
+		AND c.report_no
+		IS NOT NULL LEFT JOIN cw_project_report_online_archiving AS d ON a.id = d.report_id
+		AND d.del_flag = '0'
+		LEFT JOIN cw_project_records AS e ON e.id = a.project_id
+		AND e.del_flag = '0'
+		LEFT JOIN cw_project_report_sign_and_issue AS f ON a.id = f.report_id
+		AND f.del_flag = '0'
+	WHERE
+		e.project_level = 1
+		AND f.STATUS = '5'
+		AND a.del_flag = '0'
+		AND DATEDIFF( NOW(), f.update_time ) > 40
+		AND ( d.STATUS IS NULL OR d.STATUS = '' )
+		AND d.id IS NOT NULL UNION ALL
+	SELECT
+		d.id
+	FROM
+		cw_project_report AS a
+		LEFT JOIN cw_project_report_review_new AS b ON a.id = b.report_id
+		AND b.del_flag = '0'
+		LEFT JOIN cw_project_report_new_line AS c ON a.id = c.report_id
+		AND c.del_flag = '0'
+		AND c.report_no
+		IS NOT NULL LEFT JOIN cw_project_report_online_archiving AS d ON a.id = d.report_id
+		AND d.del_flag = '0'
+		LEFT JOIN cw_project_records AS e ON e.id = a.project_id
+		AND e.del_flag = '0'
+		LEFT JOIN cw_project_report_sign_and_issue AS f ON a.id = f.report_id
+		AND f.del_flag = '0'
+	WHERE
+		e.project_level = 2
+		AND b.review_status IN ( '5', '7' )
+		AND a.del_flag = '0'
+		AND DATEDIFF( NOW(), b.check_complete_time ) > 40
+		AND ( d.STATUS IS NULL OR d.STATUS = '' )
+		AND d.id IS NOT NULL
+	) AS sub ON r.id = sub.id
+	SET r.`status` = '6', r.mark = '1';
+    </update>
+    <update id="updatePaperArchiveStatus">
+        		UPDATE cw_project_report_paper_archiving AS r
+JOIN (
+	SELECT
+		d.id
+	FROM
+		cw_project_report AS a
+		LEFT JOIN cw_project_report_review_new AS b ON a.id = b.report_id
+		AND b.del_flag = '0'
+		LEFT JOIN cw_project_report_new_line AS c ON a.id = c.report_id
+		AND c.del_flag = '0'
+		AND c.report_no
+		IS NOT NULL LEFT JOIN cw_project_report_paper_archiving AS d ON a.id = d.report_id
+		AND d.del_flag = '0'
+		LEFT JOIN cw_project_records AS e ON e.id = a.project_id
+		AND e.del_flag = '0'
+		LEFT JOIN cw_project_report_sign_and_issue AS f ON a.id = f.report_id
+		AND f.del_flag = '0'
+	WHERE
+		e.project_level = 1
+		AND f.STATUS = '5'
+		AND a.del_flag = '0'
+		AND DATEDIFF( NOW(), f.update_time ) > 40
+		AND ( d.STATUS IS NULL OR d.STATUS = '' )
+		AND d.id IS NOT NULL UNION ALL
+	SELECT
+		d.id
+	FROM
+		cw_project_report AS a
+		LEFT JOIN cw_project_report_review_new AS b ON a.id = b.report_id
+		AND b.del_flag = '0'
+		LEFT JOIN cw_project_report_new_line AS c ON a.id = c.report_id
+		AND c.del_flag = '0'
+		AND c.report_no
+		IS NOT NULL LEFT JOIN cw_project_report_paper_archiving AS d ON a.id = d.report_id
+		AND d.del_flag = '0'
+		LEFT JOIN cw_project_records AS e ON e.id = a.project_id
+		AND e.del_flag = '0'
+		LEFT JOIN cw_project_report_sign_and_issue AS f ON a.id = f.report_id
+		AND f.del_flag = '0'
+	WHERE
+		e.project_level = 2
+		AND b.review_status IN ( '5', '7' )
+		AND a.del_flag = '0'
+		AND DATEDIFF( NOW(), b.check_complete_time ) > 90
+		AND ( d.STATUS IS NULL OR d.STATUS = '' )
+		AND d.id IS NOT NULL
+	) AS sub ON r.id = sub.id
+	SET r.`status` = '6';
+    </update>
 
+    <select id="getTotal" resultType="java.lang.String">
+        SELECT SUM(zi_xun_shou_ru) AS total_zi_xun_shou_ru FROM cw_project_report_review_new where del_flag = '0'
+    </select>
+    <select id="archivedInfoExport" resultType="com.jeeplus.finance.projectReport.domain.ArchivedReportInfo">
+        SELECT DISTINCT
+            c.report_no,
+            b.project_name,
+            CASE
+                WHEN b.project_level = 1 THEN 'A级'
+                WHEN b.project_level = 2 THEN 'B级'
+                ELSE '其他级别'
+            END AS project_level,
+            cw_rev.zi_xun_shou_ru,
+            su.NAME AS projectCreateByName,
+            so.NAME AS departmentName,
+            su2.NAME AS personResponsible,
+            b.create_time as projectCreateTime,
+            cw_rev.check_complete_time as checkCompleteTime,
+            sai.issue_complete_time as issueCompleteTime,
+            roa.create_time as onlineStartTime,
+            CASE
+                WHEN roa.status = 1 THEN '暂存'
+                WHEN roa.status = 2 THEN '归档中'
+                WHEN roa.status = 3 THEN '撤回'
+                WHEN roa.status = 4 THEN '驳回'
+                WHEN roa.status = 5 THEN '已归档'
+                WHEN roa.status = 6 THEN '超期未归档'
+                WHEN roa.status = 7 THEN '超期归档'
+                ELSE '未归档'
+            END as onlineArchivingStatus,
+            dictVal.`value`,
+            dictVal.`label` as projectCategory
 
+        FROM cw_project_report a
+        LEFT JOIN cw_project_records b ON a.project_id = b.id
+        LEFT JOIN cw_project_report_new_line c ON a.id = c.report_id
+        LEFT JOIN sys_user su ON b.create_by_id = su.id
+        LEFT JOIN sys_office so ON su.office_id = so.id
+        LEFT JOIN cw_project_report_review_new cw_rev ON a.id = cw_rev.report_id
+        LEFT JOIN sys_user su2 ON b.project_leader_id = su2.id AND su2.del_flag = '0'
+        LEFT JOIN cw_project_report_sign_and_issue sai ON a.id = sai.report_id
+        LEFT JOIN cw_project_report_online_archiving roa ON a.id = roa.report_id
+        LEFT JOIN sys_dict_value dictVal ON b.report_type = dictVal.`value`
+        LEFT JOIN sys_dict_type dict ON (
+            (b.project_type = 1 AND dictVal.dict_type_id = dict.id AND dict.type = 'program_cost_audit_type') OR
+            (b.project_type = 2 AND  dictVal.dict_type_id = dict.id AND dict.type = 'program_engineering_consultation_type')
+        )
+		${ew.customSqlSegment}
+		and dict.id is not null
+        ORDER BY a.create_time DESC
+    </select>
 
 </mapper>

+ 7 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/CwProjectReportOnlineArchivingService.java

@@ -66,6 +66,7 @@ public class CwProjectReportOnlineArchivingService extends ServiceImpl<CwProject
             CwProjectReportOnlineArchiving onlineArchiving = onlineArchivingMapper.selectById(reportData.getOnlineArchivingId());
             if (onlineArchiving != null){
                 reportData.setCreateBy(reportData.getCreateBy());
+                reportData.setMark(onlineArchiving.getMark());
                 return update(reportData,onlineArchiving);
             }
         }
@@ -110,6 +111,12 @@ public class CwProjectReportOnlineArchivingService extends ServiceImpl<CwProject
         review.setUpdateTime(new Date());
         review.setId(reportData.getOnlineArchivingId());
 
+        if (StringUtils.isNotBlank(reportData.getMark())) {
+            if (reportData.getMark().equals("1") && reportData.getStatus().equals("5")) {
+                //超期归档
+                review.setStatus("7");
+            }
+        }
         onlineArchivingMapper.updateById(review);
 
         return review.getId();

+ 8 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/CwProjectReportPaperArchivingService.java

@@ -65,6 +65,7 @@ public class CwProjectReportPaperArchivingService extends ServiceImpl<CwProjectR
             CwProjectReportPaperArchiving onlineArchiving = paperArchivingMapper.selectById(reportData.getPaperArchivingId());
             if (onlineArchiving != null){
                 reportData.setCreateBy(reportData.getCreateBy());
+                reportData.setMark(onlineArchiving.getMark());
                 return update(reportData,onlineArchiving);
             }
         }
@@ -109,6 +110,13 @@ public class CwProjectReportPaperArchivingService extends ServiceImpl<CwProjectR
         review.setUpdateTime(new Date());
         review.setId(reportData.getPaperArchivingId());
 
+        if (StringUtils.isNotBlank(reportData.getMark())) {
+            if (reportData.getMark().equals("1") && reportData.getStatus().equals("5")) {
+                //超期归档
+                review.setStatus("7");
+            }
+        }
+
         paperArchivingMapper.updateById(review);
 
         return review.getId();

+ 10 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/CwProjectReportReviewService.java

@@ -209,6 +209,7 @@ public class CwProjectReportReviewService extends ServiceImpl<CwProjectReportRev
             CwProjectReviewNew detail = reviewNewMapper.selectById(reportData.getReviewNewId());
             if (detail != null){
                 reportData.setCreateBy(reportData.getCreateBy());
+                reportData.setMark(detail.getMark());
                 return updateNew(reportData,detail);
             }
         }
@@ -229,6 +230,15 @@ public class CwProjectReportReviewService extends ServiceImpl<CwProjectReportRev
         review.setUpdateTime(new Date());
         review.setId(reportData.getReviewNewId());
 
+        if (StringUtils.isNotBlank(reportData.getMark())) {
+            if (reportData.getMark().equals("1") && reportData.getReviewStatus().equals("5")) {
+                //超期复核
+                review.setReviewStatus("7");
+            }
+        }
+        if (null == review.getCheckCompleteTime()) {
+            review.setCheckCompleteTime(new Date());
+        }
         reviewNewMapper.updateById(review);
 
         //项目组成员数据处理

+ 400 - 56
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/CwProjectReportService.java

@@ -20,10 +20,7 @@ import com.jeeplus.finance.projectRecords.domain.CwProjectRecords;
 import com.jeeplus.finance.projectRecords.service.CwProjectRecordsService;
 import com.jeeplus.finance.projectReport.domain.*;
 import com.jeeplus.finance.projectReport.mapper.*;
-import com.jeeplus.finance.projectReport.service.dto.CwProjectReportDTO;
-import com.jeeplus.finance.projectReport.service.dto.CwProjectReportSignatureDTO;
-import com.jeeplus.finance.projectReport.service.dto.ProjectContactInfo;
-import com.jeeplus.finance.projectReport.service.dto.ProjectReportWorkAttachmentDTO;
+import com.jeeplus.finance.projectReport.service.dto.*;
 import com.jeeplus.finance.projectReport.service.mapstruct.CwProjectReportFileWrapper;
 import com.jeeplus.finance.projectReportArchive.domain.CwProjectReportArchive;
 import com.jeeplus.finance.projectReportArchive.mapper.CwProjectReportArchiveMapper;
@@ -131,6 +128,13 @@ public class CwProjectReportService extends ServiceImpl<CwProjectReportMapper, C
     @Resource
     private CwProjectReportPaperArchivingMapper paperArchivingMapper;
 
+    /**
+     * 获取咨询营业收入(万元)的总和
+     * @return
+     */
+    public String getTotal() {
+        return reportMapper.getTotal();
+    }
 
     /**
      * 保存项目以及其他相关信息
@@ -562,6 +566,7 @@ public class CwProjectReportService extends ServiceImpl<CwProjectReportMapper, C
     public IPage<CwProjectReportData> findList(Page<CwProjectReportData> page, CwProjectReportData projectReportData) throws Exception{
         QueryWrapper<CwProjectReportData> queryWrapper = QueryWrapperGenerator.buildQueryCondition (projectReportData,CwProjectReportData.class);
         queryWrapper.eq("a.del_flag","0");
+        queryWrapper.eq("b.project_type","1");
 //        queryWrapper.orderByDesc("a.create_date");
         //条件
         if (StringUtils.isNotEmpty(projectReportData.getProjectNumber())) {
@@ -573,81 +578,158 @@ public class CwProjectReportService extends ServiceImpl<CwProjectReportMapper, C
         if (StringUtils.isNotEmpty(projectReportData.getReportName())) {
             queryWrapper.like("a.report_name", projectReportData.getReportName());
         }
-        if (StringUtils.isNotEmpty(projectReportData.getProjectMasterId())) {
-            queryWrapper.eq("b.project_master_id", projectReportData.getProjectMasterId());
+        if (StringUtils.isNotEmpty(projectReportData.getCreateBy().getId())) {
+            queryWrapper.like("a.create_by_id", projectReportData.getCreateBy().getId()).or().like("d.name", projectReportData.getCreateBy().getId());
         }
-        if (StringUtils.isNotEmpty(projectReportData.getProjectMaster2Id())) {
-            queryWrapper.eq("b.real_header", projectReportData.getProjectMaster2Id());
+        //5、报告文号
+        if (StringUtils.isNotEmpty(projectReportData.getReportNo())) {
+            queryWrapper.like("new_line.report_no", projectReportData.getReportNo());
         }
-        if (StringUtils.isNotEmpty(projectReportData.getProjectMasterName())) { // 项目经理1筛选
-            queryWrapper.like("e.id", projectReportData.getProjectMasterName());
+        if (StringUtils.isNotEmpty(projectReportData.getReviewStatus())) {
+            queryWrapper.eq("cw_rev.review_status", projectReportData.getReviewStatus());
         }
-        if (StringUtils.isNotEmpty(projectReportData.getRealHeaderName())) { // 项目经理2筛选
-            queryWrapper.like("f.id", projectReportData.getRealHeaderName());
+        //项目类型
+        if (StringUtils.isNotEmpty(projectReportData.getProjectType())) {
+            queryWrapper.eq("b.project_type", projectReportData.getProjectType());
         }
-        if (StringUtils.isNotEmpty(projectReportData.getCreateBy().getId())) {
-            queryWrapper.like("a.create_by_id", projectReportData.getCreateBy().getId()).or().like("d.name", projectReportData.getCreateBy().getId());
+        //项目类别
+        if (StringUtils.isNotEmpty(projectReportData.getProjectCategory())) {
+            queryWrapper.eq("b.report_type", projectReportData.getProjectCategory());
         }
-        //4、签约时间(区间)
+        //4、创建时间(区间)
         String[] contractDates = projectReportData.getContractDates();
         if (contractDates != null) {
 
             queryWrapper.between("a.create_time", contractDates[0], contractDates[1]);
         }
-        //5、报告文号
-        if (StringUtils.isNotEmpty(projectReportData.getReportNo())) {
-            queryWrapper.like("new_line.report_no", projectReportData.getReportNo());
-        }
         //6、审计收费
-        String[] contractAmounts = projectReportData.getContractAmounts();
-        if (contractAmounts != null) {
-            if (StringUtils.isNotEmpty(contractAmounts[0])) {
-                queryWrapper.ge("a.audit_fees",contractAmounts[0]);
-            }
-            if (contractAmounts.length>1 && StringUtils.isNotEmpty(contractAmounts[1])) {
-                queryWrapper.le("a.audit_fees", contractAmounts[1]);
-            }
-        }
+//        String[] contractAmounts = projectReportData.getContractAmounts();
+//        if (contractAmounts != null) {
+//            if (StringUtils.isNotEmpty(contractAmounts[0])) {
+//                queryWrapper.ge("a.audit_fees",contractAmounts[0]);
+//            }
+//            if (contractAmounts.length>1 && StringUtils.isNotEmpty(contractAmounts[1])) {
+//                queryWrapper.le("a.audit_fees", contractAmounts[1]);
+//            }
+//        }
         if (StringUtils.isNotEmpty(projectReportData.getReviewStatus())) {
             queryWrapper.eq("cw_rev.review_status", projectReportData.getReviewStatus());
         }
-        //报告号签章状态
-        if (StringUtils.isNotEmpty(projectReportData.getApplyStatus())) {
-            if("0".equals(projectReportData.getApplyStatus())){
-                queryWrapper.isNull("cw_na.review_status");
-                if(StringUtils.isBlank(projectReportData.getReviewStatus())){
-                    queryWrapper.eq("cw_rev.review_status","0");
+        String isBmzr = "0";
+        StringBuilder officeIds = new StringBuilder();
+        //UserDTO userDTO = SpringUtil.getBean ( IUserApi.class ).getByToken(TokenProvider.getCurrentToken ( ));
+//        UserDTO userDTO = UserUtils.getCurrentUserDTO();
+//        List<String> manageOfficeIdList= Lists.newArrayList();
+
+//        long l1 = System.currentTimeMillis();
+        IPage<CwProjectReportData> list = reportMapper.findList(page,isBmzr, officeIds.toString(), queryWrapper);
+        /*long l2 = System.currentTimeMillis();
+        System.out.println("报告列表查询service方法消耗时间:" + (l2-l1));
+        List<UserDTO> allUserInfo = (List<UserDTO>) RedisUtils.getInstance().get(CacheNames.USER_CACHE_USER_ALL_INFO);
+        if (null == allUserInfo || allUserInfo.size() == 0) {
+            allUserInfo = SpringUtil.getBean(IUserApi.class).getAllUserInfo();
+        }
+        ArrayList<User> users = new ArrayList<>();
+        List<UserDTO> finalAllUserInfo = allUserInfo;
+        list.getRecords().forEach(li->{
+            if (StringUtils.isBlank(li.getProjectMasterName())){
+                //根据项目经理1的id去查项目经理去名称
+                if (StringUtils.isNotBlank(li.getProjectMasterId())){
+                    UserDTO matchingUser = null;
+                    for (UserDTO user : finalAllUserInfo) {
+                        if (li.getProjectMasterId().equals(user.getId())) {
+                            matchingUser = user;
+                            break;
+                        }
+                    }
+                    if (matchingUser != null) {
+                        String projectMasterName = matchingUser.getName(); // Assuming the property name is "userName"
+                        li.setProjectMasterName(projectMasterName);
+                    }
+                }
+            }
+
+            if (StringUtils.isBlank(li.getRealHeaderName())) {
+                if (StringUtils.isNotBlank(li.getProjectMaster2Id())){
+                    UserDTO matchingUser = null;
+                    for (UserDTO user : finalAllUserInfo) {
+                        if (li.getProjectMaster2Id().equals(user.getId())) {
+                            matchingUser = user;
+                            break;
+                        }
+                    }
+                    if (matchingUser != null) {
+                        String projectMasterName = matchingUser.getName(); // Assuming the property name is "userName"
+                        li.setProjectMaster2Name(projectMasterName);
+                    }
                 }
-            }else{
-                queryWrapper.eq("cw_na.review_status", projectReportData.getApplyStatus());
             }
+            if(StringUtils.isEmpty(li.getSignatureAnnotatorStatus())){
+                li.setSignatureAnnotatorStatus("0");
+            }
+            CwSignatureAnnotator sigById = cwSignatureAnnotatorMapper.getSigById(li.getId());
+            if (ObjectUtil.isNotEmpty(sigById)){
+                li.setProcInsSigId(sigById.getProcInsId());
+                li.setSigReason(sigById.getReason());
+                li.setTaskSigId(sigById.getTaskId());
+            }
+        });*/
+        return list;
+
+    }
+
+    /**
+     * 工程咨询-项目管理列表
+     * @param page
+     * @param projectReportData
+     * @return
+     * @throws Exception
+     */
+    public IPage<CwProjectReportData> findList2(Page<CwProjectReportData> page, CwProjectReportData projectReportData) throws Exception{
+        QueryWrapper<CwProjectReportData> queryWrapper = QueryWrapperGenerator.buildQueryCondition (projectReportData,CwProjectReportData.class);
+        queryWrapper.eq("a.del_flag","0");
+        queryWrapper.eq("b.project_type","2");
+//        queryWrapper.orderByDesc("a.create_date");
+        //条件
+        if (StringUtils.isNotEmpty(projectReportData.getProjectNumber())) {
+            queryWrapper.like("b.project_number", projectReportData.getProjectNumber());
         }
-        if (StringUtils.isNotEmpty(projectReportData.getStatus1())) {
-            queryWrapper.eq("cw_prs1.status", projectReportData.getStatus1());
+        if (StringUtils.isNotEmpty(projectReportData.getProjectName())) {
+            queryWrapper.like("b.project_name", projectReportData.getProjectName());
         }
-        if (StringUtils.isNotBlank(projectReportData.getFilingType())) {
-            List<CwProjectRecords> projectList = cwProjectRecordsService.list(new LambdaQueryWrapper<CwProjectRecords>().eq(CwProjectRecords::getReportType, projectReportData.getFilingType()));
-            List<String> projectIdList = projectList.stream().map(CwProjectRecords::getId).collect(Collectors.toList());
-            if (CollectionUtil.isNotEmpty(projectIdList)) {
-                queryWrapper.in("b.id", projectIdList);
-            } else {
-                return new Page<>();
-            }
+        if (StringUtils.isNotEmpty(projectReportData.getReportName())) {
+            queryWrapper.like("a.report_name", projectReportData.getReportName());
+        }
+        if (StringUtils.isNotEmpty(projectReportData.getCreateBy().getId())) {
+            queryWrapper.like("a.create_by_id", projectReportData.getCreateBy().getId()).or().like("d.name", projectReportData.getCreateBy().getId());
+        }
+        //5、报告文号
+        if (StringUtils.isNotEmpty(projectReportData.getReportNo())) {
+            queryWrapper.like("new_line.report_no", projectReportData.getReportNo());
+        }
+        if (StringUtils.isNotEmpty(projectReportData.getReviewStatus())) {
+            queryWrapper.eq("cw_rev.review_status", projectReportData.getReviewStatus());
+        }
+        //项目类型
+        if (StringUtils.isNotEmpty(projectReportData.getProjectType())) {
+            queryWrapper.eq("b.project_type", projectReportData.getProjectType());
+        }
+        //项目类别
+        if (StringUtils.isNotEmpty(projectReportData.getProjectCategory())) {
+            queryWrapper.eq("b.report_type", projectReportData.getProjectCategory());
         }
-        if (ArrayUtil.isNotEmpty(projectReportData.getCreateDates())) {
-            queryWrapper.between("a.create_time", projectReportData.getCreateDates()[0], projectReportData.getCreateDates()[1]);
+        //4、创建时间(区间)
+        String[] contractDates = projectReportData.getContractDates();
+        if (contractDates != null) {
+
+            queryWrapper.between("a.create_time", contractDates[0], contractDates[1]);
         }
         String isBmzr = "0";
         StringBuilder officeIds = new StringBuilder();
-        //UserDTO userDTO = SpringUtil.getBean ( IUserApi.class ).getByToken(TokenProvider.getCurrentToken ( ));
-//        UserDTO userDTO = UserUtils.getCurrentUserDTO();
-        List<String> manageOfficeIdList= Lists.newArrayList();
-
 
-
-        long l1 = System.currentTimeMillis();
+//        long l1 = System.currentTimeMillis();
         IPage<CwProjectReportData> list = reportMapper.findList(page,isBmzr, officeIds.toString(), queryWrapper);
-        long l2 = System.currentTimeMillis();
+        /*long l2 = System.currentTimeMillis();
         System.out.println("报告列表查询service方法消耗时间:" + (l2-l1));
         List<UserDTO> allUserInfo = (List<UserDTO>) RedisUtils.getInstance().get(CacheNames.USER_CACHE_USER_ALL_INFO);
         if (null == allUserInfo || allUserInfo.size() == 0) {
@@ -697,12 +779,68 @@ public class CwProjectReportService extends ServiceImpl<CwProjectReportMapper, C
                 li.setSigReason(sigById.getReason());
                 li.setTaskSigId(sigById.getTaskId());
             }
-        });
+        });*/
         return list;
 
     }
 
     /**
+     * 总项目管理列表
+     * @param page
+     * @param projectReportData
+     * @return
+     * @throws Exception
+     */
+    public IPage<CwProjectReportData> findList3(Page<CwProjectReportData> page, CwProjectReportData projectReportData) throws Exception{
+        QueryWrapper<CwProjectReportData> queryWrapper = QueryWrapperGenerator.buildQueryCondition (projectReportData,CwProjectReportData.class);
+        queryWrapper.eq("a.del_flag","0");
+//        queryWrapper.orderByDesc("a.create_date");
+        //条件
+        if (StringUtils.isNotEmpty(projectReportData.getProjectNumber())) {
+            queryWrapper.like("b.project_number", projectReportData.getProjectNumber());
+        }
+        if (StringUtils.isNotEmpty(projectReportData.getProjectName())) {
+            queryWrapper.like("b.project_name", projectReportData.getProjectName());
+        }
+        if (StringUtils.isNotEmpty(projectReportData.getReportName())) {
+            queryWrapper.like("a.report_name", projectReportData.getReportName());
+        }
+        if (StringUtils.isNotEmpty(projectReportData.getCreateBy().getId())) {
+            queryWrapper.like("a.create_by_id", projectReportData.getCreateBy().getId()).or().like("d.name", projectReportData.getCreateBy().getId());
+        }
+        //5、报告文号
+        if (StringUtils.isNotEmpty(projectReportData.getReportNo())) {
+            queryWrapper.like("new_line.report_no", projectReportData.getReportNo());
+        }
+        if (StringUtils.isNotEmpty(projectReportData.getReviewStatus())) {
+            queryWrapper.eq("cw_rev.review_status", projectReportData.getReviewStatus());
+        }
+        //项目类型
+        if (StringUtils.isNotEmpty(projectReportData.getProjectType())) {
+            queryWrapper.eq("b.project_type", projectReportData.getProjectType());
+        }
+        //项目类别
+        if (StringUtils.isNotEmpty(projectReportData.getProjectCategory())) {
+            queryWrapper.eq("b.report_type", projectReportData.getProjectCategory());
+        }
+        //4、创建时间(区间)
+        String[] contractDates = projectReportData.getContractDates();
+        if (contractDates != null) {
+
+            queryWrapper.between("a.create_time", contractDates[0], contractDates[1]);
+        }
+
+
+//        if (ArrayUtil.isNotEmpty(projectReportData.getCreateDates())) {
+//            queryWrapper.between("a.create_time", projectReportData.getCreateDates()[0], projectReportData.getCreateDates()[1]);
+//        }
+        String isBmzr = "0";
+        StringBuilder officeIds = new StringBuilder();
+        IPage<CwProjectReportData> list = reportMapper.findList(page,isBmzr, officeIds.toString(), queryWrapper);
+        return list;
+
+    }
+    /**
      * 修改状态
      * @param data
      * @return
@@ -773,6 +911,10 @@ public class CwProjectReportService extends ServiceImpl<CwProjectReportMapper, C
         if (null != reportData) {
             List<ProjectContactInfo> contactInfos = reportMapper.getContactInfos(reportData.getProjectId());
             reportData.setContactInfos(contactInfos);
+            reportData.setConstructionParty(contactInfos);
+            //查询项目报告信息
+            List<ProjectReportInfo> projectReportInfos = reportMapper.getProjectReportInfo(reportData.getId());
+            reportData.setProjectReportInfos(projectReportInfos);
         }
 
         return reportData;
@@ -3938,4 +4080,206 @@ public class CwProjectReportService extends ServiceImpl<CwProjectReportMapper, C
     public List<ProjectContactInfo> getContactInfos(String projectId) {
         return reportMapper.getContactInfos(projectId);
     }
+
+    /**
+     * 将复核超期的数据状态改为超期未复核
+     * @return
+     */
+    public void updateQualityOverdueStatus() {
+        //查询所有的报告信息,生成复核数据,将复核数据的状态改为 超期未复核
+        List<String> reports = reportMapper.getAllInfo();
+        List<CwProjectReviewNew> reviewNews = reviewNewMapper.selectList(new QueryWrapper<CwProjectReviewNew>().eq("del_flag", "0"));
+        //去除掉 已经发起过复核的 报告id数据
+        /*for (CwProjectReviewNew reviewNew : reviewNews) {
+            for (int i = 0; i < reports.size(); i++) {
+                if (reviewNew.getReportId().equals(reports.get(i))) {
+                    reports.remove(i);
+                }
+            }
+        }*/
+        Iterator<String> iterator = reports.iterator();
+        while (iterator.hasNext()) {
+            String reportId = iterator.next();
+            for (CwProjectReviewNew reviewNew : reviewNews) {
+                if (reviewNew.getReportId().equals(reportId)) {
+                    iterator.remove(); // 使用迭代器删除元素
+                    break; // 找到匹配的报告ID后跳出内层循环
+                }
+            }
+        }
+        //添加复核数据,将状态改为6 超期未复核
+        for (int i = 0; i < reports.size(); i++) {
+            //生成主键id值
+            String id = UUID.randomUUID().toString().replace("-", "");
+            //获取当前登录人信息
+            UserDTO userDTO = SpringUtil.getBean ( IUserApi.class ).getByToken(TokenProvider.getCurrentToken ( ));
+            //保存基本信息
+            CwProjectReviewNew info = new CwProjectReviewNew();
+
+            info.setId(id);
+            info.setCreateById(userDTO.getId());
+            info.setCreateTime(new Date());
+            info.setUpdateById(userDTO.getId());
+            info.setUpdateTime(new Date());
+            info.setReportId(reports.get(i));
+//            info.setMark("1");
+//            info.setReviewStatus("6");
+
+            reviewNewMapper.insert(info);
+        }
+        reportMapper.updateQualityOverdueStatus();
+    }
+
+    public void updateOnlineArchiveStatus() {
+        List<String> reports = reportMapper.getAllInfo();
+        List<CwProjectReportOnlineArchiving> onlineArchivings = onlineArchivingMapper.selectList(new QueryWrapper<CwProjectReportOnlineArchiving>().eq("del_flag", "0"));
+
+        //去除掉 已经在线归档过的的 报告id数据
+        /*for (CwProjectReportOnlineArchiving archiving : onlineArchivings) {
+            for (int i = 0; i < reports.size(); i++) {
+                if (archiving.getReportId().equals(reports.get(i))) {
+                    reports.remove(i);
+                }
+            }
+        }*/
+
+        Iterator<String> iterator = reports.iterator();
+        while (iterator.hasNext()) {
+            String reportId = iterator.next();
+            for (CwProjectReportOnlineArchiving archiving : onlineArchivings) {
+                if (archiving.getReportId().equals(reportId)) {
+                    iterator.remove(); // 使用迭代器删除元素
+                    break; // 找到匹配的报告ID后跳出内层循环
+                }
+            }
+        }
+
+        //添加复核数据,将状态改为6 超期未复核
+        for (int i = 0; i < reports.size(); i++) {
+            //生成主键id值
+            String id = UUID.randomUUID().toString().replace("-", "");
+            //获取当前登录人信息
+            UserDTO userDTO = SpringUtil.getBean ( IUserApi.class ).getByToken(TokenProvider.getCurrentToken ( ));
+            //保存基本信息
+            CwProjectReportOnlineArchiving info = new CwProjectReportOnlineArchiving();
+
+            info.setId(id);
+            info.setCreateById(userDTO.getId());
+            info.setCreateTime(new Date());
+            info.setUpdateById(userDTO.getId());
+            info.setUpdateTime(new Date());
+            info.setReportId(reports.get(i));
+//            info.setMark("1");
+//            info.setStatus("6");
+
+            onlineArchivingMapper.insert(info);
+        }
+        reportMapper.updateOnlineArchiveStatus();
+    }
+
+    public void updatePaperArchiveStatus() {
+
+        List<String> reports = reportMapper.getAllInfo();
+        List<CwProjectReportPaperArchiving> paperArchivings = paperArchivingMapper.selectList(new QueryWrapper<CwProjectReportPaperArchiving>().eq("del_flag", "0"));
+
+        //去除掉 已经在线归档过的的 报告id数据
+        /*for (CwProjectReportPaperArchiving archiving : paperArchivings) {
+            for (int i = 0; i < reports.size(); i++) {
+                if (archiving.getReportId().equals(reports.get(i))) {
+                    reports.remove(i);
+                }
+            }
+        }*/
+
+        Iterator<String> iterator = reports.iterator();
+        while (iterator.hasNext()) {
+            String reportId = iterator.next();
+            for (CwProjectReportPaperArchiving archiving : paperArchivings) {
+                if (archiving.getReportId().equals(reportId)) {
+                    iterator.remove(); // 使用迭代器删除元素
+                    break; // 找到匹配的报告ID后跳出内层循环
+                }
+            }
+        }
+
+        //添加复核数据,将状态改为6 超期未复核
+        for (int i = 0; i < reports.size(); i++) {
+            //生成主键id值
+            String id = UUID.randomUUID().toString().replace("-", "");
+            //获取当前登录人信息
+            UserDTO userDTO = SpringUtil.getBean ( IUserApi.class ).getByToken(TokenProvider.getCurrentToken ( ));
+            //保存基本信息
+            CwProjectReportPaperArchiving info = new CwProjectReportPaperArchiving();
+
+            info.setId(id);
+            info.setCreateById(userDTO.getId());
+            info.setCreateTime(new Date());
+            info.setUpdateById(userDTO.getId());
+            info.setUpdateTime(new Date());
+            info.setReportId(reports.get(i));
+
+            paperArchivingMapper.insert(info);
+        }
+        reportMapper.updateOnlineArchiveStatus();
+    }
+
+    /**
+     * 根据id查询项目报告信息
+     * @param id
+     * @return
+     */
+    public List<ProjectReportInfo> getProjectReportInfo(String id) {
+        return reportMapper.getProjectReportInfo(id);
+    }
+
+    /**
+     * 归档信息导出
+     * @return
+     */
+    public List<ArchivedReportInfo> archivedInfoExport(CwProjectReportData reportData) {
+        QueryWrapper<ArchivedReportInfo> queryWrapper = new QueryWrapper<>();
+        QueryWrapper<ArchivedReportInfo> queryWrapperNew = new QueryWrapper<>();
+        queryWrapper.eq("a.del_flag",0);
+        queryWrapper.eq("dictVal.del_flag",0);
+        queryWrapperNew.eq("a.del_flag",0);
+        queryWrapperNew.eq("dictVal.del_flag",0);
+
+        String[] contractDates = reportData.getContractDates();
+        if (contractDates != null) {
+
+            queryWrapper.between("a.create_time", contractDates[0], contractDates[1]);
+            queryWrapperNew.between("a.create_time", contractDates[0], contractDates[1]);
+        }
+        List<ArchivedReportInfo> archivedReportInfo = new ArrayList<>();
+        if (null != reportData.getArchivingStatus()) {
+            if (reportData.getArchivingStatus().length == 1 && reportData.getArchivingStatus()[0].equals("0")) {
+                queryWrapper.isNull("roa.status");
+            } else if (reportData.getArchivingStatus().length == 0){
+                queryWrapper.eq("roa.status",reportData.getArchivingStatus()[0]);
+            } else {
+                boolean containsZero = false;
+                List<String> nonZeroStatusList = new ArrayList<>();
+                for (String status : reportData.getArchivingStatus()) {
+                    if ("0".equals(status)) {
+                        containsZero = true;
+                    } else {
+                        nonZeroStatusList.add(status);
+                    }
+                }
+                queryWrapper.in("roa.status",nonZeroStatusList);
+
+                //单独处理
+                if (containsZero) {
+
+                    queryWrapperNew.isNull("roa.status");
+                    archivedReportInfo = reportMapper.archivedInfoExport(queryWrapperNew);
+
+                }
+            }
+
+        }
+        List<ArchivedReportInfo> archivedReportInfos = reportMapper.archivedInfoExport(queryWrapper);
+        archivedReportInfos.addAll(archivedReportInfo);
+        return archivedReportInfos;
+    }
 }

+ 3 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/CwProjectReportSignAndIssueService.java

@@ -88,6 +88,9 @@ public class CwProjectReportSignAndIssueService extends ServiceImpl<CwProjectRep
         review.setUpdateById(userDTO.getId());
         review.setUpdateTime(new Date());
         review.setId(reportData.getSignAndIssueId());
+        if (null == review.getIssueCompleteTime()) {
+            review.setIssueCompleteTime(new Date());
+        }
 
         signAndIssueMapper.updateById(review);
 

+ 29 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/dto/ProjectReportInfo.java

@@ -0,0 +1,29 @@
+package com.jeeplus.finance.projectReport.service.dto;
+
+import com.jeeplus.core.service.dto.BaseDTO;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author 王强
+ * @version 1.0
+ * @date 2024-02-20 9:21
+ */
+@Data
+public class ProjectReportInfo extends BaseDTO {
+
+    /**
+     * 报告编号
+     */
+    private String reportNo;
+
+    /**
+     * 报告名称
+     */
+    private String projectName;
+
+    private Date createTime;
+
+    private String status;
+}

+ 5 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/domain/CwWorkClientBase.java

@@ -18,6 +18,11 @@ import lombok.Data;
 public class CwWorkClientBase extends BaseEntity {
 
     /**
+     * 代表方
+     */
+    private String representativeParty;
+
+    /**
      * 备注信息
      */
     private String remarks;

+ 2 - 1
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/mapper/xml/CwWorkClientBaseMapper.xml

@@ -110,7 +110,8 @@
         cw_wcb.is_usc_code,
         cw_wcb.update_request_id,
         cw_wcb.update_user,
-        cw_wcb.request_user_id
+        cw_wcb.request_user_id,
+        cw_wcb.representative_party
     </sql>
     <sql id="File_Column_List">
         wa.id,

+ 3 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/service/CwWorkClientService.java

@@ -242,6 +242,9 @@ public class CwWorkClientService extends ServiceImpl<CwWorkClientBaseMapper, CwW
             }
         }
         CwWorkClientBase cwWorkClientBase = CwWorkClientBaseWrapper.INSTANCE.toEntity(cwWorkClientBaseDTO);
+        if (null == cwWorkClientBase.getRepresentativeParty()) {
+            cwWorkClientBase.setRepresentativeParty(cwWorkClientBaseDTO.getRepresentativeParty());
+        }
         if(ObjectUtil.isNotEmpty(cwWorkClientBase)){
             if(StringUtils.isBlank(cwWorkClientBase.getId())){
                 UserDTO userDTO = SpringUtil.getBean ( IUserApi.class ).getByToken(TokenProvider.getCurrentToken());

+ 5 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/service/dto/CwWorkClientBaseDTO.java

@@ -25,6 +25,11 @@ public class CwWorkClientBaseDTO extends BaseDTO {
     public static final String BIZ_CODE = "11";
 
     /**
+     * 代表方
+     */
+    private String representativeParty;
+
+    /**
      * 客户分类表id
      */
     private String clientId;

+ 31 - 0
jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java

@@ -48,6 +48,37 @@ import java.util.stream.Collectors;
 public class SampleXxlJob {
     private static Logger logger = LoggerFactory.getLogger ( SampleXxlJob.class );
 
+
+    /**
+     * 修改质量复核超期状态
+     */
+    @XxlJob("qualityOverdue")
+    public void qualityOverdue() throws Exception {
+        //查询所有的有报告号的 报告信息 60天后定义为超期(修改状态改为超期未复核)
+        SpringUtil.getBean ( FinanceFeignApi.class ).updateQualityOverdueStatus();
+
+    }
+
+    /**
+     * 修改在线归档超期状态
+     */
+    @XxlJob("onlineArchive")
+    public void onlineArchive() throws Exception {
+        //查询所有的有报告号的 报告信息 60天后定义为超期(修改状态改为超期未复核)
+        SpringUtil.getBean ( FinanceFeignApi.class ).updateOnlineArchiveStatus();
+
+    }
+
+    /**
+     * 修改纸质归档超期状态
+     */
+    @XxlJob("paperArchive")
+    public void paperArchive() throws Exception {
+        //查询所有的有报告号的 报告信息 60天后定义为超期(修改状态改为超期未归档)
+        SpringUtil.getBean ( FinanceFeignApi.class ).updatePaperArchiveStatus();
+
+    }
+
     /**
      * 1、简单任务示例(Bean模式)
      */