Explorar o código

与ccpm系统实现客户,合同,项目数据同步及发票审核

sangwenwei hai 8 meses
pai
achega
e7056b3c75
Modificáronse 71 ficheiros con 3212 adicións e 38 borrados
  1. 39 0
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/domain/Area.java
  2. 27 0
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/factory/AreaApiFallbackFactory.java
  3. 23 0
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/feign/IAreaApi.java
  4. 5 0
      jeeplus-modules/jeeplus-finance/pom.xml
  5. 320 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/controller/CcpmList.java
  6. 46 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/controller/Transport.java
  7. 312 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/controller/receiveData.java
  8. 112 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/service/TranspondService.java
  9. 349 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/RuralProjectRecordsVo.java
  10. 34 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/TranspondDTO.java
  11. 25 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkClientBankVo.java
  12. 80 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkClientInfoVo.java
  13. 35 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkClientLinkman.java
  14. 151 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkContractInfoVo.java
  15. 80 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkInvoiceDetailVo.java
  16. 107 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkInvoiceVo.java
  17. 47 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/config/RestTemplateConfig.java
  18. 4 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/contractRegistration/mapper/ContractFilePaperMapper.java
  19. 4 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/contractRegistration/mapper/ContractInfoMapper.java
  20. 7 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/contractRegistration/mapper/xml/ContractFilePaperMapper.xml
  21. 6 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/contractRegistration/mapper/xml/ContractInfoMapper.xml
  22. 2 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/mapper/CwFinanceInvoiceMapper.java
  23. 18 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/mapper/xml/CwFinanceInvoiceMapper.xml
  24. 46 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/CwFinanceInvoiceService.java
  25. 4 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/dto/CwFinanceInvoiceDTO.java
  26. 0 1
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/controller/CwFillingbatchController.java
  27. 15 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/controller/CwProjectRecordsController.java
  28. 4 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/domain/CwProjectRecords.java
  29. 7 1
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/mapper/CwProjectRecordsMapper.java
  30. 49 1
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/mapper/xml/CwProjectRecordsMapper.xml
  31. 46 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/service/CwProjectRecordsService.java
  32. 4 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/service/dto/CwProjectRecordsDTO.java
  33. 2 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReportData.java
  34. 1 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReportSignAndIssue.java
  35. 1 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReviewNew.java
  36. 2 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectInfoMapper.java
  37. 5 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectReportMapper.java
  38. 6 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectReportOnlineArchivingMapper.java
  39. 4 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectReportPaperArchivingMapper.java
  40. 6 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectReportSignAndIssueMapper.java
  41. 6 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectReviewNewMapper.java
  42. 4 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectInfoMapper.xml
  43. 136 1
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReportMapper.xml
  44. 9 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReportOnlineArchivingMapper.xml
  45. 6 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReportPaperArchivingMapper.xml
  46. 11 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReportSignAndIssueMapper.xml
  47. 10 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReviewNewMapper.xml
  48. 6 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/utils/Global.java
  49. 377 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/utils/RestTemplateService.java
  50. 150 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/utils/RestUtil.java
  51. 47 26
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/controller/CwWorkClientController.java
  52. 6 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/mapper/CwWorkClientBaseMapper.java
  53. 4 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/mapper/CwWorkClientBillingMapper.java
  54. 4 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/mapper/CwWorkClientTypeMapper.java
  55. 32 2
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/mapper/xml/CwWorkClientBaseMapper.xml
  56. 8 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/mapper/xml/CwWorkClientBillingMapper.xml
  57. 8 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/mapper/xml/CwWorkClientTypeMapper.xml
  58. 84 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/service/CwWorkClientService.java
  59. 1 1
      jeeplus-modules/jeeplus-finance/src/main/resources/application-finance-development.yml
  60. 12 0
      jeeplus-modules/jeeplus-finance/src/main/resources/bootstrap.yml
  61. 40 4
      jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/controller/FlowableTaskController.java
  62. 2 0
      jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/model/Flow.java
  63. 128 0
      jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/service/FlowTaskService.java
  64. 2 0
      jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/vo/HisTaskVo.java
  65. 2 0
      jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/vo/ProcessVo.java
  66. 9 1
      jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/modules/flowable/listener/MyExecutionListener.java
  67. 39 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/controller/UserController.java
  68. 20 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/feign/AreaApiImpl.java
  69. 3 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/AreaMapper.java
  70. 6 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/xml/AreaMapper.xml
  71. 5 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/service/AreaService.java

+ 39 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/domain/Area.java

@@ -0,0 +1,39 @@
+/**
+ * Copyright &copy; 2021-2026 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.sys.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.TreeEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 区域Entity
+ *
+ * @author jeeplus
+ * @version 2021-05-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("sys_area")
+public class Area extends TreeEntity <Area> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 区域编码
+     */
+    private String code;
+
+    /**
+     * 区域类型(1:国家;2:省份、直辖市;3:地市;4:区县)
+     */
+    private String type;
+
+    /**
+     * 备注
+     */
+    private String remarks;
+
+}

+ 27 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/factory/AreaApiFallbackFactory.java

@@ -0,0 +1,27 @@
+package com.jeeplus.sys.factory;
+
+import com.jeeplus.sys.domain.Area;
+import com.jeeplus.sys.feign.IAreaApi;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Slf4j
+@Component
+public class AreaApiFallbackFactory implements FallbackFactory<IAreaApi> {
+    @Override
+    public IAreaApi create(Throwable throwable) {
+        log.error ( "用户服务调用失败:{}", throwable.getMessage ( ) );
+        throwable.printStackTrace ( );
+        return new IAreaApi ( ) {
+
+            @Override
+            public List<Area> getAreaDTOByName(String name) {
+                return null;
+            }
+        };
+    }
+}

+ 23 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/feign/IAreaApi.java

@@ -0,0 +1,23 @@
+package com.jeeplus.sys.feign;
+
+import com.jeeplus.common.constant.AppNameConstants;
+import com.jeeplus.sys.domain.Area;
+import com.jeeplus.sys.factory.AreaApiFallbackFactory;
+import com.jeeplus.sys.service.dto.AreaDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+@FeignClient(contextId = "areaApi", name = AppNameConstants.APP_SYSTEM_SERVICE, fallbackFactory = AreaApiFallbackFactory.class)
+public interface IAreaApi {
+
+    /**
+     * 获取区域
+     *
+     * @return
+     */
+    @GetMapping(value = "/feign/sys/area/getAreaDTOByName")
+    List<Area> getAreaDTOByName(@RequestParam(value = "name") String name);
+}

+ 5 - 0
jeeplus-modules/jeeplus-finance/pom.xml

@@ -121,6 +121,11 @@
             <groupId>org.springframework</groupId>
             <artifactId>spring-test</artifactId>
         </dependency>
+        <dependency>
+            <groupId>commons-httpclient</groupId>
+            <artifactId>commons-httpclient</artifactId>
+            <version>3.1</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 320 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/controller/CcpmList.java

@@ -0,0 +1,320 @@
+package com.jeeplus.finance.ccpm.controller;
+
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.TypeReference;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.jeeplus.finance.ccpm.service.ccpm.FlowRequest;
+import com.jeeplus.finance.ccpm.vo.RuralProjectRecordsVo;
+import com.jeeplus.finance.ccpm.vo.WorkClientBankVo;
+import com.jeeplus.finance.ccpm.vo.WorkClientInfoVo;
+import com.jeeplus.finance.ccpm.vo.WorkContractInfoVo;
+import com.jeeplus.finance.contractRegistration.domain.ContractFile;
+import com.jeeplus.finance.contractRegistration.domain.ContractFilePaper;
+import com.jeeplus.finance.contractRegistration.domain.ContractInfo;
+import com.jeeplus.finance.contractRegistration.mapper.ContractFileMapper;
+import com.jeeplus.finance.contractRegistration.mapper.ContractFilePaperMapper;
+import com.jeeplus.finance.contractRegistration.mapper.ContractInfoMapper;
+import com.jeeplus.finance.projectRecords.domain.CwProjectRecords;
+import com.jeeplus.finance.projectRecords.mapper.CwProjectRecordsMapper;
+import com.jeeplus.finance.projectRecords.service.dto.CwProjectRecordsDTO;
+import com.jeeplus.finance.projectReport.domain.*;
+import com.jeeplus.finance.projectReport.mapper.*;
+import com.jeeplus.finance.utils.RestTemplateService;
+import com.jeeplus.finance.utils.RestUtil;
+import com.jeeplus.finance.workClientInfo.domain.*;
+import com.jeeplus.finance.workClientInfo.mapper.CwWorkClientBaseMapper;
+import com.jeeplus.finance.workClientInfo.mapper.CwWorkClientBillingMapper;
+import com.jeeplus.finance.workClientInfo.mapper.CwWorkClientTypeMapper;
+
+import com.jeeplus.sys.domain.Area;
+import com.jeeplus.sys.feign.IAreaApi;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.lang.reflect.Type;
+import java.util.*;
+
+@Component
+public class CcpmList  {
+    @Autowired
+    private FlowRequest flowRequest;
+
+    @Autowired
+    private RestTemplateService restTemplateService;
+
+    @Autowired
+    private CwProjectRecordsMapper cwProjectRecordsMapper;
+
+    @Autowired
+    private CwProjectReviewNewMapper cwProjectReviewNewMapper;
+
+    @Autowired
+    private CwProjectReportMapper cwProjectReportMapper;
+
+    @Autowired
+    private CwProjectInfoMapper cwProjectInfoMapper;
+
+    @Autowired
+    private CwProjectReportSignAndIssueMapper cwProjectReportSignAndIssueMapper;
+
+    @Autowired
+    private CwProjectReportOnlineArchivingMapper cwProjectReportOnlineArchivingMapper;
+
+    @Autowired
+    private CwProjectReportPaperArchivingMapper cwProjectReportPaperArchivingMapper;
+
+    @Autowired
+    private ContractInfoMapper contractInfoMapper;
+
+    @Autowired
+    private CwWorkClientBaseMapper cwWorkClientBaseMapper;
+
+    @Autowired
+    private CwWorkClientBillingMapper cwWorkClientBillingMapper;
+
+    @Autowired
+    private CwWorkClientTypeMapper cwWorkClientTypeMapper;
+
+    @Autowired
+    private ContractFilePaperMapper contractFilePaperMapper;
+
+
+
+
+    @PostConstruct
+    public void initMethod() throws Exception {
+        getProjectList();
+        getWorkContract();
+        getAllClient();
+    }
+
+    /*8
+    获取项目信息
+     */
+    public void getProjectList() throws Exception {
+        //ccpm系统中的项目信息
+        Object projectList = flowRequest.getProjectList();
+        System.out.println(projectList);
+        List<RuralProjectRecordsVo> ruralProjectRecordsVos = JSONArray.parseArray(projectList.toString(), RuralProjectRecordsVo.class);
+        //删除之前添加的数据
+        cwProjectRecordsMapper.deleteByTenantId();
+        cwProjectReviewNewMapper.deleteByTenantId();
+        cwProjectReportMapper.deleteByTenantId();
+        cwProjectInfoMapper.deleteByTenantId();
+        cwProjectReportSignAndIssueMapper.deleteByTenantId();
+        cwProjectReportOnlineArchivingMapper.deleteByTenantId();
+        cwProjectReportPaperArchivingMapper.deleteByTenantId();
+        //将获取到的项目信息通过遍历的方式插入到数据表中
+        if (CollectionUtils.isNotEmpty(ruralProjectRecordsVos)){
+            for (RuralProjectRecordsVo recordsVo : ruralProjectRecordsVos) {
+                //项目
+                CwProjectRecords cwProjectRecords = new CwProjectRecords();
+                //复核
+                CwProjectReviewNew cwProjectReviewNew = new CwProjectReviewNew();
+                //报告
+                CwProjectReport report = new CwProjectReport();
+                CwProjectInfoData cwProjectInfoData = new CwProjectInfoData();
+                //报告签发
+                CwProjectReportSignAndIssue cwProjectReportSignAndIssue = new CwProjectReportSignAndIssue();
+                //电子归档
+                CwProjectReportOnlineArchiving cwProjectReportOnlineArchiving = new CwProjectReportOnlineArchiving();
+                //纸质归档
+                CwProjectReportPaperArchiving cwProjectReportPaperArchiving = new CwProjectReportPaperArchiving();
+
+                //项目
+                if (StringUtils.isNotBlank(recordsVo.getId())){
+                    cwProjectRecords.setId(recordsVo.getId());//项目id
+                    cwProjectRecords.setProjectNumber(recordsVo.getProjectId());//项目编号
+                    cwProjectRecords.setContractId(recordsVo.getWorkContractInfo().getId());
+                    cwProjectRecords.setProjectName(recordsVo.getProjectName());
+                    cwProjectRecords.setProjectType(recordsVo.getProjectType());
+                    cwProjectRecords.setStatus(recordsVo.getProjectStatus()+"");
+                    cwProjectRecords.setTenantId("ccpm");
+                    //获取项目所在地
+                    List<Area> areaDTO = SpringUtil.getBean(IAreaApi.class).getAreaDTOByName(recordsVo.getArea().getName());
+                    if (areaDTO.size()>1){
+                        //当出现两个相同的最后一级区域的时候去查询他们的上一级区域,然后根据上一级id进行添加
+                        List<Area> parentArea = SpringUtil.getBean(IAreaApi.class).getAreaDTOByName(recordsVo.getCity());
+                        for (Area area : areaDTO) {
+                            for (Area parArea : parentArea) {
+                                if (area.getParentId().equals(parArea.getId())){
+                                    cwProjectRecords.setAreaId(area.getId());
+                                }
+
+                            }
+                        }
+                    }else {
+                        if (ObjectUtils.isNotEmpty(areaDTO)){
+                            for (Area area : areaDTO) {
+                                cwProjectRecords.setAreaId(area.getId());
+
+                            }
+                        }
+                    }
+                    cwProjectRecordsMapper.insert(cwProjectRecords);
+                }
+                //质量复核
+                if (StringUtils.isNotBlank(recordsVo.getPrdId())){
+                    //复核信息
+                    cwProjectReviewNew.setId(recordsVo.getPrdId());
+                    cwProjectReviewNew.setProjectId(recordsVo.getId());
+                    cwProjectReviewNew.setReviewStatus(recordsVo.getProjectReportStatus().toString());
+                    cwProjectReviewNew.setTenantId("ccpm");
+                    cwProjectReviewNewMapper.insert(cwProjectReviewNew);
+                }
+                //报告
+                if (StringUtils.isNotBlank(recordsVo.getPrdId())){
+                    String id = UUID.randomUUID().toString().replace("-", "");
+                    //报告信息
+                    report.setId(id);
+                    report.setProjectId(recordsVo.getId());
+                    report.setTenantId("ccpm");
+                    cwProjectReportMapper.insert(report);
+
+                    //报告编号
+                    String id1 = UUID.randomUUID().toString().replace("-", "");
+                    cwProjectInfoData.setId(id1);
+                    cwProjectInfoData.setReportId(id);
+                    cwProjectInfoData.setReportNo(recordsVo.getProjectReportNumber());
+                    cwProjectInfoData.setTenantId("ccpm");
+                    cwProjectInfoMapper.insert(cwProjectInfoData);
+                }
+                //报告签发
+                if (StringUtils.isNotBlank(recordsVo.getPrdtId())){
+                    cwProjectReportSignAndIssue.setId(recordsVo.getPrdtId());
+                    cwProjectReportSignAndIssue.setProjectId(recordsVo.getId());
+                    if (ObjectUtils.isNotEmpty(recordsVo.getProjectReportStatusTwo())){
+                        cwProjectReportSignAndIssue.setStatus(recordsVo.getProjectReportStatusTwo().toString());
+                    }else {
+                        cwProjectReportSignAndIssue.setStatus("");
+
+                    }
+                    cwProjectReportSignAndIssue.setTenantId("ccpm");
+                    cwProjectReportSignAndIssueMapper.insert(cwProjectReportSignAndIssue);
+                }
+
+                //电子归档
+                if (StringUtils.isNotBlank(recordsVo.getPrrId())){
+                    cwProjectReportOnlineArchiving.setId(recordsVo.getPrrId());
+                    cwProjectReportOnlineArchiving.setReportId(report.getId());
+                    if (ObjectUtils.isNotEmpty(recordsVo.getProjectReportRecordStatus())){
+                        cwProjectReportOnlineArchiving.setStatus(recordsVo.getProjectReportRecordStatus().toString());
+                    }else {
+                        cwProjectReportOnlineArchiving.setStatus("");
+                    }
+                    cwProjectReportOnlineArchiving.setTenantId("ccpm");
+                    cwProjectReportOnlineArchivingMapper.insert(cwProjectReportOnlineArchiving);
+                }
+                //纸质归档
+                if (StringUtils.isNotBlank(recordsVo.getPrrdId())){
+                    //纸质归档
+                    cwProjectReportPaperArchiving.setId(recordsVo.getPrrdId());
+                    cwProjectReportPaperArchiving.setReportId(report.getId());
+                    if (ObjectUtils.isNotEmpty(recordsVo.getDownProjectReportRecordStatus())){
+                        cwProjectReportPaperArchiving.setStatus(recordsVo.getDownProjectReportRecordStatus().toString());
+                    }else{
+                        cwProjectReportPaperArchiving.setStatus("");
+                    }
+                    cwProjectReportPaperArchiving.setTenantId("ccpm");
+                    cwProjectReportPaperArchivingMapper.insert(cwProjectReportPaperArchiving);
+                }
+            }
+        }
+
+    }
+
+
+    /**
+     * 获取合同信息
+     */
+    public void getWorkContract(){
+        //ccpm系统中的合同信息
+        Object contractList = flowRequest.getWorkContractList();
+        System.out.println(contractList);
+        List<WorkContractInfoVo> workContractInfoVos = JSONArray.parseArray(contractList.toString(), WorkContractInfoVo.class);
+        //删除之前添加的合同数据
+        contractInfoMapper.deleteByTenantId();
+        contractFilePaperMapper.deleteByTenantId();
+        //新增数据
+        if (CollectionUtils.isNotEmpty(workContractInfoVos)){
+            for (WorkContractInfoVo contractInfoVo : workContractInfoVos) {
+                ContractInfo workContractInfo = new ContractInfo();
+                workContractInfo.setId(contractInfoVo.getId());//id
+                workContractInfo.setCreateTime(new Date());
+                workContractInfo.setContractName(contractInfoVo.getName());//合同名称
+                workContractInfo.setContractNo(contractInfoVo.getContractNum());//合同编号
+                workContractInfo.setClientContacts(contractInfoVo.getClient().getId());//客户id
+                workContractInfo.setStatus(contractInfoVo.getContractState());//合同状态
+                workContractInfo.setTenantId("ccpm");
+                contractInfoMapper.insert(workContractInfo);
+                //保存合同归档信息
+                ContractFilePaper workContractFile = new ContractFilePaper();
+                workContractFile.setContractInfoId(contractInfoVo.getId());
+                workContractInfo.setFiledNo(contractInfoVo.getRecordNum());//案卷号
+                workContractFile.setFiledPaperType(contractInfoVo.getContrractRecordStatus());
+                workContractFile.setTenantId("ccpm");
+                contractFilePaperMapper.insert(workContractFile);
+            }
+        }
+    }
+
+
+    //获取ccpm中所有的客户信息
+    public void getAllClient(){
+        Object clientList = flowRequest.getClientList();
+        System.out.println(clientList);
+        List<WorkClientInfoVo> workClientInfoVos = JSONArray.parseArray(clientList.toString(), WorkClientInfoVo.class);
+        //删除本系统中所有之前新增的ccpm系统中的数据
+        cwWorkClientBaseMapper.deleteByTenantId();
+        cwWorkClientBillingMapper.deleteByTenantId();
+        cwWorkClientTypeMapper.deleteByTenantId();
+        for (WorkClientInfoVo workClientInfoVo : workClientInfoVos) {
+            //客户基本信息
+            CwWorkClientBase cwWorkClientBase = new CwWorkClientBase();
+            cwWorkClientBase.setId(workClientInfoVo.getId());
+            cwWorkClientBase.setName(workClientInfoVo.getName());//客户名称
+            cwWorkClientBase.setIsUscCode(workClientInfoVo.getHasUscc()+"");//是否有统一社会信用代码
+            cwWorkClientBase.setUscCode(workClientInfoVo.getUscCode());//统一社会信用代码
+            cwWorkClientBase.setAddress(workClientInfoVo.getRegisterAddress());//地址
+            cwWorkClientBase.setMobile(workClientInfoVo.getTelephone()); //电话
+            cwWorkClientBase.setIndustry(workClientInfoVo.getCompanyIndustry()); //所属行业
+            cwWorkClientBase.setStatus("5");
+            cwWorkClientBase.setTenantId("ccpm");
+            cwWorkClientBaseMapper.insert(cwWorkClientBase);
+            //修改客户开户行信息
+            if (CollectionUtils.isNotEmpty(workClientInfoVo.getWorkClientBankList())){
+                for (WorkClientBankVo workClientBank : workClientInfoVo.getWorkClientBankList()) {
+                    CwWorkClientBilling clientBilling = new CwWorkClientBilling();
+                    clientBilling.setId(workClientBank.getId());
+                    clientBilling.setClientId(workClientBank.getClientId().getId());
+                    clientBilling.setAccountHolder(workClientBank.getOurBank());//开户行
+                    clientBilling.setAccount(workClientBank.getBankNumber());//银行账号
+                    clientBilling.setTenantId("ccpm");
+                    cwWorkClientBillingMapper.insert(clientBilling);
+
+                }
+            }
+            //修改客户类型信息
+            CwWorkClientType cwWorkClientType = new CwWorkClientType();
+            cwWorkClientType.setIsListed("0");
+            cwWorkClientType.setTenantId("ccpm");
+            cwWorkClientType.setClientId(workClientInfoVo.getId());
+            cwWorkClientTypeMapper.insert(cwWorkClientType);
+
+
+        }
+
+
+    }
+
+}

+ 46 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/controller/Transport.java

@@ -0,0 +1,46 @@
+package com.jeeplus.finance.ccpm.controller;
+
+import com.jeeplus.finance.ccpm.service.TranspondService;
+import com.jeeplus.finance.ccpm.vo.TranspondDTO;
+import com.jeeplus.finance.invoice.service.CwFinanceInvoiceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+@RestController
+@RequestMapping(value = "/transpond")
+public class Transport {
+
+    @Autowired
+    private CwFinanceInvoiceService cwFinanceInvoiceService;
+
+    @Autowired
+    private TranspondService transpondService;
+
+
+    @RequestMapping(value = "detailFinance", method = RequestMethod.GET)
+    public Object detailDistribute(@RequestParam String id, @RequestParam String processDefKey) {
+        return cwFinanceInvoiceService.detailDistribute(id, processDefKey);
+    }
+
+
+    /**
+     * 审核分发操作
+     * @return
+     */
+    @RequestMapping(value = "auditDistribute", method = RequestMethod.POST)
+    @ResponseBody
+    public Map<String,Object> auditDistribute(@RequestBody TranspondDTO transpondDTO) {
+        Map<String, Object> res = transpondService.auditDistribute(transpondDTO);
+        return res;
+    }
+
+
+
+
+
+
+
+
+}

+ 312 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/controller/receiveData.java

@@ -0,0 +1,312 @@
+package com.jeeplus.finance.ccpm.controller;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.jeeplus.finance.ccpm.service.ccpm.FlowRequest;
+import com.jeeplus.finance.ccpm.vo.RuralProjectRecordsVo;
+import com.jeeplus.finance.ccpm.vo.WorkClientBankVo;
+import com.jeeplus.finance.ccpm.vo.WorkClientInfoVo;
+import com.jeeplus.finance.ccpm.vo.WorkContractInfoVo;
+import com.jeeplus.finance.contractRegistration.domain.ContractFilePaper;
+import com.jeeplus.finance.contractRegistration.domain.ContractInfo;
+import com.jeeplus.finance.contractRegistration.mapper.ContractFilePaperMapper;
+import com.jeeplus.finance.contractRegistration.mapper.ContractInfoMapper;
+import com.jeeplus.finance.projectRecords.domain.CwProjectRecords;
+import com.jeeplus.finance.projectRecords.mapper.CwProjectRecordsMapper;
+import com.jeeplus.finance.projectReport.domain.*;
+import com.jeeplus.finance.projectReport.mapper.*;
+import com.jeeplus.finance.workClientInfo.domain.CwWorkClientBase;
+import com.jeeplus.finance.workClientInfo.domain.CwWorkClientBilling;
+import com.jeeplus.finance.workClientInfo.domain.CwWorkClientType;
+import com.jeeplus.finance.workClientInfo.mapper.CwWorkClientBaseMapper;
+import com.jeeplus.finance.workClientInfo.mapper.CwWorkClientBillingMapper;
+import com.jeeplus.finance.workClientInfo.mapper.CwWorkClientTypeMapper;
+import com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientBillingDTO;
+import com.jeeplus.sys.domain.Area;
+import com.jeeplus.sys.feign.IAreaApi;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+@RestController
+@RequestMapping(value = "/ccpmData/data")
+public class receiveData {
+
+    @Autowired
+    private FlowRequest flowRequest;
+
+    @Autowired
+    private CwProjectRecordsMapper cwProjectRecordsMapper;
+
+    @Autowired
+    private CwProjectReviewNewMapper cwProjectReviewNewMapper;
+
+    @Autowired
+    private CwProjectReportMapper cwProjectReportMapper;
+
+    @Autowired
+    private CwProjectInfoMapper cwProjectInfoMapper;
+
+    @Autowired
+    private CwProjectReportSignAndIssueMapper cwProjectReportSignAndIssueMapper;
+
+    @Autowired
+    private CwProjectReportOnlineArchivingMapper cwProjectReportOnlineArchivingMapper;
+
+    @Autowired
+    private CwProjectReportPaperArchivingMapper cwProjectReportPaperArchivingMapper;
+
+    @Autowired
+    private ContractInfoMapper contractInfoMapper;
+
+    @Autowired
+    private CwWorkClientBaseMapper cwWorkClientBaseMapper;
+
+    @Autowired
+    private CwWorkClientBillingMapper cwWorkClientBillingMapper;
+
+    @Autowired
+    private CwWorkClientTypeMapper cwWorkClientTypeMapper;
+
+    @Autowired
+    private ContractFilePaperMapper contractFilePaperMapper;
+
+    //保存客户信息
+    @PostMapping("/saveClient")
+    public void saveClient(@RequestBody WorkClientInfoVo workClientInfoVo) {
+        if (ObjectUtils.isNotEmpty(workClientInfoVo)) {
+            //先进行删除
+            cwWorkClientBaseMapper.deleteClientById(workClientInfoVo.getId());
+            //客户基本信息
+            CwWorkClientBase clientBase = new CwWorkClientBase();
+            clientBase.setId(workClientInfoVo.getId());
+            clientBase.setName(workClientInfoVo.getName());//客户名称
+            clientBase.setIsUscCode(workClientInfoVo.getHasUscc() + "");//是否有统一社会信用代码
+            clientBase.setUscCode(workClientInfoVo.getUscCode());//统一社会信用代码
+            clientBase.setAddress(workClientInfoVo.getRegisterAddress());//地址
+            clientBase.setMobile(workClientInfoVo.getTelephone()); //电话
+            clientBase.setIndustry(workClientInfoVo.getCompanyIndustry()); //所属行业
+            clientBase.setStatus("5");
+            clientBase.setTenantId("ccpm");
+            cwWorkClientBaseMapper.insert(clientBase);
+            //修改客户开户行信息
+            if (CollectionUtils.isNotEmpty(workClientInfoVo.getWorkClientBankList())) {
+                List<CwWorkClientBillingDTO> client_id = cwWorkClientBillingMapper.getBillingListByClientId(new QueryWrapper<CwWorkClientBilling>().eq("client_id", workClientInfoVo.getId()));
+                for (CwWorkClientBillingDTO cwWorkClientBillingDTO : client_id) {
+                    cwWorkClientBillingMapper.deleteClientById(cwWorkClientBillingDTO.getId());
+                }
+                for (WorkClientBankVo workClientBank : workClientInfoVo.getWorkClientBankList()) {
+                    CwWorkClientBilling clientBilling = new CwWorkClientBilling();
+                    clientBilling.setId(workClientBank.getId());
+                    clientBilling.setClientId(workClientBank.getClientId().getId());
+                    clientBilling.setAccountHolder(workClientBank.getOurBank());//开户行
+                    clientBilling.setAccount(workClientBank.getBankNumber());//银行账号
+                    clientBilling.setTenantId("ccpm");
+                    cwWorkClientBillingMapper.insert(clientBilling);
+
+                }
+            }
+            List<CwWorkClientType> clientTypes = cwWorkClientTypeMapper.selectList(new QueryWrapper<CwWorkClientType>().eq("client_id", workClientInfoVo.getId()));
+            for (CwWorkClientType clientType : clientTypes) {
+                cwWorkClientTypeMapper.deleteClientById(clientType.getId());
+            }
+            //修改客户类型信息
+            CwWorkClientType cwWorkClientType = new CwWorkClientType();
+            cwWorkClientType.setIsListed("0");
+            cwWorkClientType.setTenantId("ccpm");
+            cwWorkClientType.setClientId(workClientInfoVo.getId());
+            cwWorkClientTypeMapper.insert(cwWorkClientType);
+        }
+    }
+
+    //保存合同及归档信息
+    @PostMapping(value = "saveContractInfo")
+    public void saveContractInfo(@RequestBody WorkContractInfoVo workContractInfoVo){
+        if (ObjectUtils.isNotEmpty(workContractInfoVo)){
+            //先进行删除
+            contractInfoMapper.deleteInfoById(workContractInfoVo.getId());
+            //保存合同基本信息
+            ContractInfo workContractInfo = new ContractInfo();
+            workContractInfo.setId(workContractInfoVo.getId());//id
+            workContractInfo.setCreateTime(new Date());
+            workContractInfo.setContractName(workContractInfoVo.getName());//合同名称
+            workContractInfo.setContractNo(workContractInfoVo.getContractNum());//合同编号
+            workContractInfo.setClientContacts(workContractInfoVo.getClient().getId());//客户id
+            workContractInfo.setStatus(workContractInfoVo.getContractState());//合同状态
+            workContractInfo.setTenantId("ccpm");
+            contractInfoMapper.insert(workContractInfo);
+            //先删除
+            contractFilePaperMapper.deleteInfoByContractId(workContractInfoVo.getId());
+            //保存合同归档信息
+            ContractFilePaper workContractFile = new ContractFilePaper();
+            workContractFile.setContractInfoId(workContractInfoVo.getId());
+            workContractInfo.setFiledNo(workContractInfoVo.getRecordNum());//案卷号
+            workContractFile.setFiledPaperType(workContractInfoVo.getContrractRecordStatus());
+            workContractFile.setTenantId("ccpm");
+            contractFilePaperMapper.insert(workContractFile);
+        }
+
+    }
+
+    //保存项目基本信息
+    @PostMapping(value = "saveProjectInfo")
+    public void saveProjectInfo(@RequestBody RuralProjectRecordsVo ruralProjectRecordsVo){
+        if (ObjectUtils.isNotEmpty(ruralProjectRecordsVo)){
+            //先进行删除
+            cwProjectRecordsMapper.deleteInfoById(ruralProjectRecordsVo.getId());
+
+            CwProjectRecords cwProjectRecords = new CwProjectRecords();
+            cwProjectRecords.setId(ruralProjectRecordsVo.getId());//项目id
+            cwProjectRecords.setProjectNumber(ruralProjectRecordsVo.getProjectId());//项目编号
+            cwProjectRecords.setContractId(ruralProjectRecordsVo.getWorkContractInfo().getId());
+            cwProjectRecords.setProjectName(ruralProjectRecordsVo.getProjectName());
+            cwProjectRecords.setProjectType(ruralProjectRecordsVo.getProjectType());
+            cwProjectRecords.setStatus(ruralProjectRecordsVo.getProjectStatus()+"");
+            cwProjectRecords.setTenantId("ccpm");
+            //获取项目所在地
+            List<Area> areaDTO = SpringUtil.getBean(IAreaApi.class).getAreaDTOByName(ruralProjectRecordsVo.getArea().getName());
+            if (areaDTO.size()>1){
+                //当出现两个相同的最后一级区域的时候去查询他们的上一级区域,然后根据上一级id进行添加
+                List<Area> parentArea = SpringUtil.getBean(IAreaApi.class).getAreaDTOByName(ruralProjectRecordsVo.getCity());
+                for (Area area : areaDTO) {
+                    for (Area parArea : parentArea) {
+                        if (area.getParentId().equals(parArea.getId())){
+                            cwProjectRecords.setAreaId(area.getId());
+                        }
+
+                    }
+                }
+            }else {
+                if (ObjectUtils.isNotEmpty(areaDTO)){
+                    for (Area area : areaDTO) {
+                        cwProjectRecords.setAreaId(area.getId());
+
+                    }
+                }
+            }            cwProjectRecordsMapper.insert(cwProjectRecords);
+        }
+    }
+
+    //保存质量复核信息
+    @PostMapping(value = "saveProjectReview")
+    public void saveProjectReview(@RequestBody RuralProjectRecordsVo recordsVo){
+        //先进行删除复核信息
+        cwProjectReviewNewMapper.deleteInfoById(recordsVo.getPrdId());
+        //根据报告id删除报告编号信息
+        List<CwProjectReportData> reportData = cwProjectReportMapper.getByProjectId(recordsVo.getId());
+        for (CwProjectReportData reportDatum : reportData) {
+            cwProjectInfoMapper.deleteByReportId(reportDatum.getId());
+        }
+        //根据项目id删除报告信息
+        cwProjectReportMapper.deleteByProjectId(recordsVo.getId());
+        //复核
+        CwProjectReviewNew cwProjectReviewNew = new CwProjectReviewNew();
+        //报告
+        CwProjectReport report = new CwProjectReport();
+        CwProjectInfoData cwProjectInfoData = new CwProjectInfoData();
+
+        if (StringUtils.isNotBlank(recordsVo.getPrdId())) {
+            //保存质量复核及报告信息
+            cwProjectReviewNew.setId(recordsVo.getPrdId());
+            cwProjectReviewNew.setProjectId(recordsVo.getId());
+            cwProjectReviewNew.setReviewStatus(recordsVo.getProjectReportStatus().toString());
+            cwProjectReviewNew.setTenantId("ccpm");
+            cwProjectReviewNewMapper.insert(cwProjectReviewNew);
+
+            String id = UUID.randomUUID().toString().replace("-", "");
+            //报告信息
+            report.setId(id);
+            report.setProjectId(recordsVo.getId());
+            report.setTenantId("ccpm");
+            cwProjectReportMapper.insert(report);
+
+            //报告编号
+            String id1 = UUID.randomUUID().toString().replace("-", "");
+            cwProjectInfoData.setId(id1);
+            cwProjectInfoData.setReportId(id);
+            cwProjectInfoData.setReportNo(recordsVo.getProjectReportNumber());
+            cwProjectInfoData.setTenantId("ccpm");
+            cwProjectInfoMapper.insert(cwProjectInfoData);
+        }
+    }
+
+
+    //保存报告签发信息
+    @PostMapping(value = "saveProjectReportTwo")
+    public void saveProjectReportTwo(@RequestBody RuralProjectRecordsVo recordsVo){
+        //先进行删除
+        cwProjectReportSignAndIssueMapper.deleteInfoById(recordsVo.getPrdtId());
+        //保存报告签发信息
+        CwProjectReportSignAndIssue cwProjectReportSignAndIssue = new CwProjectReportSignAndIssue();
+        cwProjectReportSignAndIssue.setId(recordsVo.getPrdtId());
+        cwProjectReportSignAndIssue.setProjectId(recordsVo.getId());
+        if (ObjectUtils.isNotEmpty(recordsVo.getProjectReportStatusTwo())){
+            cwProjectReportSignAndIssue.setStatus(recordsVo.getProjectReportStatusTwo().toString());
+        }else {
+            cwProjectReportSignAndIssue.setStatus("");
+
+        }
+        cwProjectReportSignAndIssue.setTenantId("ccpm");
+        cwProjectReportSignAndIssueMapper.insert(cwProjectReportSignAndIssue);
+    }
+
+    //保存电子归档信息
+    @PostMapping(value = "saveProjectReportOnline")
+    public  void saveProjectReportOnline(@RequestBody RuralProjectRecordsVo recordsVo){
+        //先进行删除
+        cwProjectReportOnlineArchivingMapper.deleteInfoById(recordsVo.getPrrId());
+
+        //根据项目id查询报告信息
+        List<CwProjectReportData> reportData = cwProjectReportMapper.getByProjectId(recordsVo.getId());
+        if (CollectionUtils.isNotEmpty(reportData)){
+            for (CwProjectReportData reportDatum : reportData) {
+                CwProjectReportOnlineArchiving cwProjectReportOnlineArchiving = new CwProjectReportOnlineArchiving();
+                cwProjectReportOnlineArchiving.setId(recordsVo.getPrrId());
+                cwProjectReportOnlineArchiving.setReportId(reportDatum.getId());
+                if (ObjectUtils.isNotEmpty(recordsVo.getProjectReportRecordStatus())){
+                    cwProjectReportOnlineArchiving.setStatus(recordsVo.getProjectReportRecordStatus().toString());
+                }else {
+                    cwProjectReportOnlineArchiving.setStatus("");
+                }
+                cwProjectReportOnlineArchiving.setTenantId("ccpm");
+                cwProjectReportOnlineArchivingMapper.insert(cwProjectReportOnlineArchiving);
+             }
+        }
+    }
+
+    //保存纸质归档信息
+    @PostMapping(value = "saveProjectReportPaper")
+    public  void saveProjectReportPaper(@RequestBody RuralProjectRecordsVo recordsVo){
+        //先进行删除
+        cwProjectReportPaperArchivingMapper.deleteInfoById(recordsVo.getPrrdId());
+
+        //根据项目id查询报告信息
+        List<CwProjectReportData> reportData = cwProjectReportMapper.getByProjectId(recordsVo.getId());
+        if (CollectionUtils.isNotEmpty(reportData)){
+            for (CwProjectReportData reportDatum : reportData) {
+                CwProjectReportPaperArchiving cwProjectReportPaperArchiving = new CwProjectReportPaperArchiving();
+                cwProjectReportPaperArchiving.setId(recordsVo.getPrrdId());
+                cwProjectReportPaperArchiving.setReportId(reportDatum.getId());
+                if (ObjectUtils.isNotEmpty(recordsVo.getDownProjectReportRecordStatus())){
+                    cwProjectReportPaperArchiving.setStatus(recordsVo.getDownProjectReportRecordStatus().toString());
+                }else{
+                    cwProjectReportPaperArchiving.setStatus("");
+                }
+                cwProjectReportPaperArchiving.setTenantId("ccpm");
+                cwProjectReportPaperArchivingMapper.insert(cwProjectReportPaperArchiving);
+            }
+        }
+    }
+
+
+
+}

+ 112 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/service/TranspondService.java

@@ -0,0 +1,112 @@
+package com.jeeplus.finance.ccpm.service;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.jeeplus.finance.ccpm.enums.TaskAliasEnum;
+import com.jeeplus.finance.ccpm.vo.TranspondDTO;
+import com.jeeplus.finance.ccpm.vo.WorkInvoiceDetailVo;
+import com.jeeplus.finance.ccpm.vo.WorkInvoiceVo;
+import com.jeeplus.finance.invoice.domain.CwFinanceInvoice;
+import com.jeeplus.finance.invoice.service.CwFinanceInvoiceService;
+import com.jeeplus.finance.invoice.service.dto.CwFinanceInvoiceDTO;
+import com.jeeplus.finance.invoice.service.dto.CwFinanceInvoiceDetailDTO;
+import com.jeeplus.flowable.feign.IFlowableApi;
+import com.jeeplus.utils.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class TranspondService {
+
+    @Autowired
+    private CwFinanceInvoiceService cwFinanceInvoiceService;
+
+    public Map<String,Object> auditDistribute(TranspondDTO transpondDTO) {
+        Map<String,Object> result = new HashMap<>();
+        result.put("success", null);
+        if (Objects.nonNull(transpondDTO) && StringUtils.isNotBlank(transpondDTO.getId()) && StringUtils.isNotBlank(transpondDTO.getFlag()) && StringUtils.isNotBlank(transpondDTO.getProcessDefKey())) {
+            String id = transpondDTO.getId(); // 报销数据id
+            String flag = transpondDTO.getFlag(); // 审核标记  yes通过  no驳回
+            WorkInvoiceVo workInvoiceVo = transpondDTO.getWorkInvoice();
+            //将审核中新增的信息转为本系统中的数据
+            CwFinanceInvoiceDTO cwFinanceInvoiceDTO=transportToCenter(workInvoiceVo);
+            TaskAliasEnum taskAliasEnum = TaskAliasEnum.getByCcpmContains(transpondDTO.getProcessDefKey()); // 获取流程key枚举
+            if (ObjectUtil.isNotEmpty(taskAliasEnum)) {
+                if (TaskAliasEnum.REIMBURSEMENT.getCpaTaskAlias().equals(taskAliasEnum.getCpaTaskAlias())) { // 评估-报销流程
+                    CwFinanceInvoiceDTO financeInvoice = cwFinanceInvoiceService.queryById(id);
+                    if (Objects.nonNull(financeInvoice) && StringUtils.isNotBlank(financeInvoice.getStatus()) && "2".equals(financeInvoice.getStatus())) { // 确保当时数据处于“待审核”状态
+                        if ( StringUtils.isNotBlank(financeInvoice.getProcInsId())) {
+                            try {
+                                CwFinanceInvoiceDTO upStatusParam = new CwFinanceInvoiceDTO();
+                                BeanUtils.copyProperties(financeInvoice,upStatusParam);
+                                upStatusParam.setBillingDate(cwFinanceInvoiceDTO.getBillingDate());
+                                upStatusParam.setCollectDate(cwFinanceInvoiceDTO.getCollectDate());
+                                upStatusParam.setFinanceInvoiceDetailDTOList(cwFinanceInvoiceDTO.getFinanceInvoiceDetailDTOList());
+                                if ("yes".equals(flag)) {
+                                    String currentTaskName = SpringUtil.getBean(IFlowableApi.class).getCurrentTaskName(financeInvoice.getProcInsId());
+                                    if (StringUtils.isNotBlank(currentTaskName) && "发票管理员审核".equals(currentTaskName)) {
+                                        // “公司领导审批” 节点审核通过时,才会将审核状态改为 “审核通过”
+                                        upStatusParam.setStatus("5"); // 审核状态设置为审核完成
+                                    }
+                                } else {
+                                    upStatusParam.setStatus("4"); // 审核状态设置为审核驳回
+                                }
+                                cwFinanceInvoiceService.saveForm(upStatusParam); // 修改数据的审核状态
+                                SpringUtil.getBean(IFlowableApi.class).auditByProcInsIdAndFlag(financeInvoice.getProcInsId(), flag, "", transpondDTO.getComment());
+                                result.put("success", "false");
+                                result.put("message", "操作成功");
+                            }catch (Exception e) {
+                                e.printStackTrace();
+                                result.put("success", "false");
+                                result.put("message", "操作失败");
+                            }
+                        }
+                    } else {
+                        result.put("success", "false");
+                        result.put("message", "操作失败,数据已发生改变或不存在,请刷新数据");
+                    }
+                }
+            }
+        }
+        if (ObjectUtil.isEmpty(result.get("success"))) {
+            result.put("success", "false");
+            result.put("message", "操作失败");
+        }
+        return result;
+    }
+
+    //将审核中添加的数据转为本系统中的数据
+    private CwFinanceInvoiceDTO transportToCenter(WorkInvoiceVo workInvoiceVo) {
+        CwFinanceInvoiceDTO cwFinanceInvoiceDTO = new CwFinanceInvoiceDTO();
+        //开票时间
+        cwFinanceInvoiceDTO.setBillingDate(workInvoiceVo.getInvoiceDate());
+        //领票时间
+        cwFinanceInvoiceDTO.setCollectDate(workInvoiceVo.getTakeDate());
+        //发票明细
+        ArrayList<CwFinanceInvoiceDetailDTO> cwFinanceInvoiceDetailDTOS = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(workInvoiceVo.getWorkAccountList())){
+            for (WorkInvoiceDetailVo workInvoiceDetailVo : workInvoiceVo.getWorkAccountList()) {
+                CwFinanceInvoiceDetailDTO cwFinanceInvoiceDetailDTO = new CwFinanceInvoiceDetailDTO();
+                cwFinanceInvoiceDetailDTO.setCode(workInvoiceDetailVo.getCode());
+                cwFinanceInvoiceDetailDTO.setNumber(workInvoiceDetailVo.getNumber());
+                cwFinanceInvoiceDetailDTO.setAccount(workInvoiceDetailVo.getTotalMoney());
+                cwFinanceInvoiceDetailDTO.setRate(workInvoiceDetailVo.getTax());
+                cwFinanceInvoiceDetailDTO.setAmount(workInvoiceDetailVo.getTaxMoney());
+                cwFinanceInvoiceDetailDTO.setTax(workInvoiceDetailVo.getTaxRate());
+                cwFinanceInvoiceDetailDTOS.add(cwFinanceInvoiceDetailDTO);
+            }
+            cwFinanceInvoiceDTO.setFinanceInvoiceDetailDTOList(cwFinanceInvoiceDetailDTOS);
+        }
+        return cwFinanceInvoiceDTO;
+    }
+
+}

+ 349 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/RuralProjectRecordsVo.java

@@ -0,0 +1,349 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.finance.ccpm.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.google.common.collect.Lists;
+import com.jeeplus.core.domain.BaseEntity;
+
+import com.jeeplus.finance.workClientInfo.domain.WorkClientLinkman;
+
+import com.jeeplus.sys.domain.Area;
+import lombok.Data;
+import org.hibernate.validator.constraints.NotBlank;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 项目登记Entity
+ * @author ppt
+ * @version 2018-05-02
+ */
+@Data
+public class RuralProjectRecordsVo extends BaseEntity {
+
+	private Integer reminderCount; //提醒次数
+	private Date approvalTime;	//审核通过时间
+	private Date remindTime;	//提醒时间
+	private Date paperFilingAuditPassDate;	//A类纸质归档审核时间
+	private Date filingBatchAuditPassDate;	//B类纸质归档审核时间
+	private Date accomplishDate;	//上报审核时间
+	private Date firstAuditDate;	//质量复核首次审核通过时间
+	private String hiatus;	//短期/永久(0:短期,1:永久)
+	private String pmdrCompanyId;
+	private String pmdrCreateBy;
+	private String pmdrReportId; //资料缺失说明所需
+	private String noArchivedDays; //电子未归档天数
+	private String paperNoArchivedDays; //纸质未归档天数
+	private String twoAuditPassDate; //签发审批通过日期
+
+	private static final long serialVersionUID = 1L;
+	@NotNull(message = "合同信息不能为空")
+	private WorkContractInfoVo workContractInfo;		// 合同id
+	private String projectId;		// 项目编号
+	@NotBlank(message = "项目名称不能为空")
+	private String projectName;		// 项目名称
+	private String scaleType;		// 规模类型
+	private String scaleUnit;		// 规模单位
+	private Double scaleQuantity;		// 规模数量
+	private Area area;		// 项目所在地
+	private String projectSite;		// 建设地点
+	private String province;  //项目所在省
+	private String city;  //项目所在市
+	private String county;//项目所在区
+	private String projectStructure;   //工程结构
+	private String onGroundNum;    //地上层数
+	private String underGroundNum;    //地下层数
+	private String buildingScale;    //建筑规模
+	private String measuringUnit;     //规模单位
+	private String projectUse;        //工程用途
+	private Double installFees;      //安装造价
+	private Double buildingFees;      //土建造价
+	private Double buildingPercent;    //土建百分比
+	private Double installPercent;     //安装百分比
+	private Double unitFees;     //单位造价
+	private Double buildingUnitFees;  //土建单位造价
+	private Double installUnitFees;    //安装单位造价
+	private Double totalFees;        //总合同额
+	private Double estimateTotalFees;  //预估总投资额
+
+//	private ProjectReportData reportData;//报告
+
+	private String projectReportNumber; //报告号
+	private String recodeNum; //归档申请编号
+
+	private Integer projectReportStatus; //报告状态
+	private Integer projectReportStatusTwo; //报告流程2状态
+	private Integer projectReportRecordStatus; //归档状态
+	private Integer defectRecordStatus; //归档资料缺失说明状态
+	private String pmdrProcessInstanceId; //归档资料缺失说明流程id
+	private String pmdrId; //归档资料缺失说明id
+	private Integer projectRecordStatus; //归档状态(向目标)
+	private Integer overRecordStatus; //超期状态(电子归档)(0:未超期,1:已超期)(纸质归档)
+	private Integer downProjectReportRecordStatus; //线下归档状态
+	private String downArchiveStatus; //线下归档状态
+
+	private String prrProcessInstanceId; //线上归档流程号
+	private String prrdProcessInstanceId; //线下归档流程号
+	private String reportedProcessInstanceId;//上报流程号
+
+	private String ppfProcessInstanceId; //纸质归档流程号
+	private String paperFilingStatus; //纸质归档状态
+	private String ppfId; //纸质归档Id
+
+	private String projectType; //类型 1.工程咨询 2.造价审核
+	private String constructionUnit; //施工单位
+	private String constructionLinkman; //施工方联系人
+
+	private String prrId;
+	private String prdId;
+	private String prdtId;
+	private String prdtProcessinstanceId;
+	private String prrdId;
+	private String projectReportName;
+	private String officeName;
+	private String flagAdmin;
+	private String reportedState;   //上报状态
+	private String reportedStateNoDays; //超期未上报天数
+	private String syncStatus;   //同步状态
+	private String reportStatus;   //上报状态
+	private String view;
+	private Integer overDueStatus; //超期状态(0:未超期,1:已超期)
+	private List<String> typeList;
+	private String flagArchive;  //归档员判定
+	private String projectProperties;//投资性质
+	private List<String> permissionOfficeIdList;	//查询部门权限列表
+	private String projectMaterialStorageStatus; //项目材料状态  0 为无文件 1为有文件 2为已处理
+
+
+
+	@NotNull(message = "委托方联系人不能为空")
+	private List<WorkClientLinkman> workClientLinkmanList;		// 委托方联系人
+	private List<WorkClientLinkman> workConstructionLinkmanList;		// 施工方及联系人
+	//@NotBlank(message = "工程概况不能为空")
+	private String projectDesc;		// 工程概况
+
+	private Date startDate;   //工作开始时间
+	private Date endingDate;  //工作结束时间
+
+	private String leaderNameStr;
+	private String leaderId;
+	private String leaderIds;
+	private String memberNameStr;
+	private String memberIds;
+
+	private String processInstanceId;
+
+	private Integer projectStatus;//项目状态
+
+	private String auditType;
+
+	private String alterProcessId;
+	private String userIds;
+	private String delUserIds;
+	private String userId;
+
+	private String home;
+	private Date beginDate;
+	private Date endDate;
+	private int membercount;
+	private Integer startCount;    //开始数据
+	private Integer endingCount;   //结束数据
+	private String adventDate;   //超期时间
+	private Date adventDateDate;   //超期时间
+	private String reportedType;   //超期状态(0:未超期;1:已超期)
+	private Date auditPassDate;   //报告审批日期
+
+	private String TouZiXZ;    //投资性质
+	private String HeTongLeiXing;   //合同类型
+	private Date BaoGaoShuQianFaDate;  //出具报告日期
+	private String ZiXunShouRu;   //咨询收入
+	private String zaoJiaShiZhengHao;   //造价师注册证号
+	private String attachmentProjectSort;   //项目类别
+	private String attachmentProjectSortKey;   //项目类别
+	private String checkProcessInstanceId;   //检查流程id
+	private Integer checkStatus;   //检查状态
+	private String bzshbUserId; //总审用户id
+	private String checkUserId; //检查发起人用户id
+	private String checkRemarks; //选查要求
+	private String fileNum; //选查案卷号
+	private String fileNumTow; //选查确认案卷号
+
+	//归档批次信息
+	private String filingBatchId; //归档批次Id
+	private String filingBatch ;//档次批号
+	private String filingName;
+	private String filingProcessinstanceId;// 审批流程id
+	private Integer filingStatus;//归档审批状态
+	private Integer filingProjectStatus;//归档批次项目状态
+	private String boxNum; //案卷号
+	private String reBoxNum;//确认案卷号
+	private String information; //归档批次信息
+	private String url; //链接
+	private String parentId; //父借点
+	private Integer notifyFlag; //代办判定条件
+	private String notifyId; //代办判定条件
+	private Integer reportNotifyFlag; //新增报告代办判定条件
+	private Integer reportAuditNotifyFlag; //新增报告代办(审批)判定条件
+	private String reportNotifyId; //新增报告代办判定条件
+	private Integer recordNotifyFlag; //归档报告代办判定条件
+	private Integer recordAuditNotifyFlag; //归档报告代办(审批)判定条件
+	private String recordNotifyId; //归档代办判定条件
+	private Integer reportedNotifyFlag; //上报代办判定条件
+	private Integer reportedAuditNotifyFlag; //上报代办判(审批)定条件
+	private String reportedNotifyId; //上报代办判定条件
+	private Integer checkNotifyFlag; //选查代办判定条件
+	private String checkNotifyId; //选查代办判定条件
+	private String actType; //流程节点
+	private Integer newReportNotifyFlag; //新新增报告判定条件
+	private Integer newReportAuditNotifyFlag; //新新增报告(审批)判定条件
+	private String newReportNotifyId; //新新增报告判定条件
+
+	private String projectMasterName;	//项目负责人名称
+	private String projectMasterId;		//项目负责人id
+
+	private String engineeringType;	//工程类型id
+	private String engineeringName;	//工程类型名称
+	private String submitMoney;		//送审金额
+	private String submitMoneyStr;		//项目等级
+	private String modifyFlag;		//修改判定参数
+	private Integer newRecordNotifyFlag; //新归档代办判定条件
+	private String newRecordNotifyId; //新归档代办判定条件
+	private Integer newRecordAuditNotifyFlag; //新归档(审批)判定条件
+	private String newReportedNotifyId; //新上报代办判定条件
+	private Integer newReportedNotifyFlag; //新上报(审批)判定条件
+	private Integer newReportTwoNotifyFlag; //报告签发代办判定条件
+	private Integer newReportTwoAuditNotifyFlag; //报告签发(审批)判定条件
+	private Integer newReportMaterialNotifyFlag; //缺失说明代办判定条件
+	private Integer newReportMaterialAuditNotifyFlag; //缺失说明(审批)判定条件
+	private Integer newRecordTwoNotifyFlag; //新归档代办判定条件
+	private Integer newRecordTwoAuditNotifyFlag; //新归档(审批)判定条件
+	private String paperProjectNotifyId; //纸质档代办判定条件
+	private Integer paperProjectNotifyFlag; //纸质归档判定条件
+	private Integer paperProjectAuditNotifyFlag; //纸质归档(审批)判定条件
+
+	private Integer reportDataFlag; //报告号是否存在判定条件
+
+
+	private Integer planCount;	//项目计划数量
+	private BigDecimal submitScale;	//送审规模
+	private Boolean createReportFlag;	//生成报告号判断条件
+	private String emergencyProject;	//是否是紧急项目
+	private String recordTypeStr;	//归档类型多选
+	private List<String> recordTypeList;	//归档类型
+	private String reportedTypeStr;	//上报类型多选
+	private List<String> reportedTypeList;	//上报类型
+
+	private String approvalFee;  //审定价
+	private String reviewFee;  //送审价
+	private String verifyFee;    //核增核减额
+	private String verifyRate;    //核增核减率
+
+	private String projectTypeStr;		//项目类型
+	private String createByName;	// 登记人
+	private String createByOffice;	// 登记人部门
+	private String projectMasterOffice;	// 责任人部门
+	private String projectinvoiceMoney;	// 项目汇总开票金额
+
+	private Date reportAuditDate;	//质量复核审批日期
+	private Date reportTwoAuditDate;	//报告签发审批日期
+	private String projectScale;		//项目规模
+
+
+	private Integer projectRecordElseStatus; //归档状态(未超期、归档导出使用)
+	private Integer projectRecordExceedStatus; //归档状态(超期、归档导出使用)
+	private Integer projectRecordDispenseStatus; //无需上报状态(超期、归档导出使用)
+	private Integer recordState; //是否超期归档状态
+	private String completionStatus; //完成状态
+
+	private String money; //收费金额
+	private String prdAuditDate; //报告审批通过时间时间
+	private String whetherReportNumber; //是否需要报告号
+	private String signatureFlag; //审定单签章状态
+	private String signatureContractId; //审定单签章contractId
+	private String signatureUrl; //审定单签章url
+	private String signatureFileName;		//签章文件名称
+	private String operateFlag; //操作状态
+
+
+	private Integer approvalSignatureStatus; //审定单申请状态
+	private String approvalSignatureProcessInstanceId; //审定单申请流程id
+	private Integer reportSignatureStatus; //报告签章申请状态
+	private String reportSignatureProcessInstanceId; //报告签章申请流程id
+	private String prsiId; //报告签章数据信息id
+	private String signatureDownloadUrl; //报告签章文档下载链接
+
+
+	private Integer reportSignatureFlag;		//是否报告签章(1为已签章)
+	private String reportSignatureUrl;		//报告签章id
+	private String reportSignatureDocumentId;		//签章documentid
+	private String reportSignatureContractId;		//签章contractid
+	private String reportSignatureInvalidDocumentId;		//无效的签章documentid
+	private String reportSignatureFileName;		//签章文件名称
+	private Date reportSignatureUploadDate;		//签章文件上传时间
+
+	private Integer qualitySignatureFlag;		//是否质量复核签章(1为已签章)
+	private String qualitySignatureDocumentId;		//质量复核签章documentid
+	private String qualitySignatureContractId;		//质量复核签章contractid
+	private String qualitySignatureInvalidDocumentId;		//质量复核无效的签章documentid
+	private String qualitySignatureFileName;		//质量复核签章文件名称
+	private Date qualitySignatureUploadDate;		//质量复核签章文件上传时间
+
+	private String belongingDepartment;    //归属部门
+	private String belongingDepartmentName;    //归属部门
+	private String projectFilingBatchesId;
+
+
+	private Integer reportSignatureUrlFlag;		//报告签章url状态
+	private Integer approvalSignatureUrlFlag;		//审定单签章url状态
+
+	private String caseType;      		    //是否为案例项目(0:不是  1:是)
+	private String caseCreateBy;               //案例项目 创建人id
+	private String caseStatus;				//案例项目的状态
+	private String caseProcessId;			//案例项目的流程id
+	private String ziXunBDE;			//上报中的咨询标的额
+	private Date projectReportRecordAuditDate;  //电子归档审核时间
+	private Date projectPaperAuditPassDate;  //A类项目纸质归档时间
+	private Date projectFlingbatchRelationAuditPassDate;  //B类项目批量归档时间
+	private Date projectRecordsReportedAuditPassDate;  //项目上报审核通过时间
+
+	private String overPaperFilingStatus;  //纸质归档状态(0:未超期;1:已超期)
+	private String batchArchiveStatus;  //批量归档状态(6:超期未归档;7:超期已归档)
+	private String overBatchArchiveStatus;  //批量归档超期状态(0:未超期;1:已超期)
+
+	private Date reportBeginDate;		//质量复核审核开始时间
+	private Date reportEndDate;			//质量复核审核结束时间
+	private Date reportTwoBeginDate;	//报告签发审核开始时间
+	private Date reportTwoEndDate;		//报告签发审核结束时间
+	private Date reportRecordBeginDate;	//电子归档审核开始时间
+	private Date reportRecordEndDate;	//电子归档审核结束时间
+	private Date paperRecordBeginDate;	//纸质归档审核开始时间
+	private Date paperRecordEndDate;	//纸质归档审核结束时间
+	private Date reportedBeginDate;		//上报审核开始时间
+	private Date reportedEndDate;		//上报审核结束时间
+
+
+	private String reportInternalAuditStatus;		//内审报告审核状态
+	private String priaiId;		//内审报告id
+	private String reportInternalAuditSignatureProcessInstanceId; //内审报告签章申请流程id
+
+	private Integer reportInternalAuditSignatureFlag;		//是否内审报告签章(1为已签章)
+	private String reportInternalAuditSignatureUrl;		//内审报告签章id
+	private Integer reportInternalAuditSignatureUrlFlag;		//内审报告签章url状态
+	private String reportInternalAuditSignatureDocumentId;		//内审报告签章documentid
+	private String reportInternalAuditSignatureContractId;		//内审报告签章contractid
+	private String reportInternalAuditSignatureInvalidDocumentId;		//内审报告无效的签章documentid
+	private String reportInternalAuditSignatureFileName;		//内审报告签章文件名称
+	private Date reportInternalAuditSignatureUploadDate;		//内审报告签章文件上传时间
+	private String internalAuditFlag;		//内审报告判定条件
+	private String beginSubmitScale;	//送审规模(开始)
+	private String endSubmitScale;	//送审规模(结束)
+
+
+	private List<String> civilProjectList = Lists.newArrayList();
+
+}

+ 34 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/TranspondDTO.java

@@ -0,0 +1,34 @@
+package com.jeeplus.finance.ccpm.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class TranspondDTO {
+
+    /**
+     * 数据id
+     */
+    private String id;
+
+    /**
+     * 审核通过或驳回 yes同意 no驳回
+     */
+    private String flag;
+
+    /**
+     * 审核意见
+     */
+    private String comment;
+
+    /**
+     * 流程key
+     * 例如:ccpm系统的21,212,213  cpa系统的Process_1669275081328
+     */
+    private String processDefKey;
+
+    private WorkInvoiceVo workInvoice;
+}

+ 25 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkClientBankVo.java

@@ -0,0 +1,25 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.finance.ccpm.vo;
+
+
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.Data;
+
+import javax.validation.constraints.Size;
+
+/**
+ * 客户开行信息Entity
+ * @author mapengbo
+ * @version 2017-10-11
+ */
+@Data
+public class WorkClientBankVo extends BaseEntity {
+
+	private String ourBank;		// 开户银行
+	private String bankNumber;		// 开户账号
+    private WorkClientInfoVo clientId;		// 外键关联客户表 父类
+
+	
+}

+ 80 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkClientInfoVo.java

@@ -0,0 +1,80 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.finance.ccpm.vo;
+
+
+import com.google.common.collect.Lists;
+import com.jeeplus.core.domain.BaseEntity;
+import com.jeeplus.finance.workClientInfo.domain.WorkClientLinkman;
+import com.jeeplus.sys.domain.Area;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 客户管理Entity
+ * @author 丁旭
+ * @version 2017-03-20
+ */
+@Data
+public class WorkClientInfoVo extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+	private String name;		// 客户名称
+	private String number;      //客户编号
+	private String nameForShort;		// 客户名称缩写
+	private String orUnicode;		// 组织机构代码
+	private String companyType;		// 客户性质
+	private String companyIndustry;		// 客户行业
+	private String clientType;		// 客户类型
+	private String creditRank;		// 信用等级
+	private Area area;		// 地区Id
+	private String zipCode;		// 邮政编码
+	private String fax;		// 传真
+	private String telephone; //公司电话
+    private String lawerPresint;  //法人代表
+	private String ourBank;		// 开户银行
+	private String bankNumber;		// 开户账号
+	private String taxId;		// 税务号
+	private String email;		// 电子邮箱
+	private String address;		// 详细地址
+	private String registerAddress;		// 注册地址
+	private String companyUrl;		// 公司网址
+    private WorkClientLinkman workClientLinkman;        //联系人信息
+	private String companyId;
+	private String officeId;
+	private String officeName;
+	private String workLinkName; 	//联系人查询条件
+	private String param; 	//联系人查询条件
+	private List<WorkClientLinkman> workClientLinkmanList = Lists.newArrayList();		// 子表列表
+    private List<WorkClientBankVo> workClientBankList = Lists.newArrayList();     //银行列表
+//    private List<WorkClientAttachment> workClientAttachmentList = Lists.newArrayList();     //附件列表
+	private String linkManNames;
+	private String linkname;		// 联系人姓名
+	private String position;		// 职务
+	private String qq;		// QQ
+	private String linkPhone;		// 联系人电话
+	private String linkMobile;		// 联系人手机
+	private String linkemail;		// E-mail
+	private String nowDate;
+	private String userName;
+	private String errInfo;
+	private String unitIntroduction;
+	private String createName;   //创建人
+	private String createNameStr;   //创建人
+	private String createOffice;   //创建人部门
+	private String createId;     //创建人id
+
+	private String jobTypeStr;
+	private Integer jobTypeShow;
+
+
+	private int hasUscc; //是否拥有统一社会信用代码
+	private String uscCode; //统一社会信用代码
+	private String clientTypeLables;
+
+	private Date beginDate;
+	private Date endDate;
+}

+ 35 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkClientLinkman.java

@@ -0,0 +1,35 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.finance.ccpm.vo;
+
+
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 客户管理Entity
+ * @author 丁旭
+ * @version 2017-03-20
+ */
+@Data
+public class WorkClientLinkman extends BaseEntity {
+	
+	private static final long serialVersionUID = 1L;
+	private String office ;   //部门
+	private String name;		// 联系人姓名
+	private String position;		// 职务
+	private String qq;		// QQ
+	private String linkPhone;		// 联系人电话
+	private String linkMobile;		// 联系人手机
+	private String email;		// E-mail
+	private String isDefault;		// 是否默认联系人
+	private WorkClientInfoVo clientId;		// 外键关联客户表 父类
+	private String projectId;		// 外键关联工程表(资格预审)
+	private List<String> clientIds;
+	private String uscCode;
+	private String createName;   //创建人
+
+}

+ 151 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkContractInfoVo.java

@@ -0,0 +1,151 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.finance.ccpm.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.google.common.collect.Lists;
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.Data;
+
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 合同管理Entity
+ * @author 丁旭
+ * @version 2017-03-21
+ */
+@Data
+public class WorkContractInfoVo extends BaseEntity {
+
+
+
+	private String projectName;			// 项目名称
+/*-----------------------------------------------------------------*/
+	private WorkClientInfoVo client;
+	private String clientName;		// 主委托方名称
+	private Date contractDate;			// 签订日期
+	private Date effectiveDate;			// 合同生效日期
+	private Date closingDate;			// 合同终止日期
+	private String name;				// 合同名称
+	private String contractCategory;	//变更原因
+	private String contractNum;			// 合同编号
+	private String contractPrice;		// 合同金额(元)
+	private String beginContractPrice;	//区间-开始  合同金额
+	private String endContractPrice;	//区间-结束  合同金额
+	private String contractOpposite;	// 对方合同编号
+	private String contractType;		// 合同类型
+	private String contractTypeDoc;		//合同类型说明
+	private String contractFee;			// 收费标准
+	private String contractFeeDoc; 		//收费标准说明
+	private String contractSpecial;		// 合同特别条款
+	private String contractState;		// 合同状态
+	private Date beginContractDate;		// 开始 签订日期
+	private Date endContractDate;		// 结束 签订日期
+	private String chargeCompany;		//(合同所属部门)
+	private String chargeCompanyName;	//部门名称
+	private String contractFileId;		//合同文件id
+	private String contractRole;		//审批角色
+	private String applyView;		 	//审核意见
+	private String processInstanceId;
+	private String companyId;
+	private String officeId;    //暂弃
+	private String createName;
+	private String createCompany;
+	private String anotherContractNum;
+	private String isTotal;
+	private String totalContractId;
+	private String totalContractName;//总合同
+	private String parentIds;	//总公司
+	private String isTotalName;	//直接父节点
+	private String totalContractIds;	//父节点集合
+	private String commonFlag; //标志各个级别同属一个总合同
+	private String cnt; //标志当前合同是否有子合同
+	private Integer sort = 30;
+	private String status;//0履行中 1已完成
+	private String investmentScale;//投资规模
+	private String summaryPayment;//付款摘要
+	private String investmentAmount;//投资额
+	private Integer constructionProjectType;//建设项目类别
+	private String queryCon;
+	private String createBys;
+	private String nowDate;
+	private String userName;
+	private String errInfo;
+	private String invalidateProcessInstanceId; //合同作废流程id
+	private String invalidateStatus ; //合同作废状态(invalidate_status:0未开启,1进行中,2已作废3驳回4撤回)
+	private String invalidateUserId ; //合同作废发起人id
+	private String auditType ;  //审批的类型:合同申请、合同作废、合同变更
+	private String completionStatus ; //完成状态 2 完成中 3 驳回 4 撤销 5 已完成
+	private String signatureStatus ; //完成状态 1未签章2已签章
+	private String constructionProjectTypeStr;//建设项目类别
+    private String workClinetInfoIds;
+	private String home;
+	private String contractNumPath;
+	private String beginInvestmentAmount ;
+	private String endInvestmentAmount;
+	private String contrractRecordStatus;   //归档状态
+	private String contrractRecordId;   //归档合同id
+	private String recordNum;   //案卷号
+
+	private String borrowStatus;   //借用状态
+	private String giveStatus;   //归还状态
+	private String borrowCreateById;   //借用人id
+	private String borrowId;   //借用信息id
+	private String opinion;   //判断
+	private String flagAdmin;   //判断admin
+	private String createUser;   //创建者信息
+	private String createUserOfficeName;   //创建者部门
+	private List<String> chargeCriterionList;   //收费标准
+	private String chargeCriterion;   //收费标准Str
+	private String otherDetails;   //其他详情
+	private String fileNum;   //档案号
+	private String fileNumTow;   //确认档案号
+	private Integer notifyFlag; //代办判定条件
+	private String notifyId; //代办判定条件
+	private Integer newContractNotifyFlagAudit; //新合同(审核)代办判定条件
+	private Integer newContractNotifyFlag; //新合同代办判定条件
+	private Integer recordNotifyFlag; //归档代办判定条件
+	private String recordNotifyId; //归档代办判定条件
+	private Integer borrowNotifyFlag; //借用代办判定条件
+	private String borrowNotifyId; //借用代办判定条件
+	private String describeContent; //描述内容
+
+	private String contractInformation; //合同金额类别
+	private String contractInformationStr; //合同金额类别
+	private Date accomplishDate; //合同审核通过日期
+	private Integer startCount;    //开始数据
+	private Integer endingCount;   //结束数据
+	private Date adventDateDate;   //超期时间
+	private String adventDate;   //超期时间
+	private String contractRecordState;   //归档状态
+	private String overDueStatus;   //归档状态
+
+	private boolean cancelDelFalg; //合同作废和删除判定
+
+
+	private String createNameStr;   //创建人
+	private String createOffice;   //创建人部门
+	private String createId;     //创建人id
+	private String letterOfAcceptanceFlag;     //是否上传审定单
+	private String letterOfAcceptanceRemarks;     //中标通知书描述说明
+
+
+	private String projectId;     //项目id
+	private String projectNumber;     //项目编号
+	private String reportNumber;     //报告号
+	private String invoiceId;     //发票id
+	private String invoiceNumber;     //发票编号
+	private String projectMasterName;     //项目负责人
+	private Date invoiceDate;     //开票时间
+	private String invoiceState;     //开票审核状态
+	private String invoiceStateStr;     //开票审核状态Str
+	private String invoiceMoney;     //开票金额
+	private String chargeType;     //开票收款类型
+	private String chargeTypeStr;     //开票收款类型Str
+	private String isProject;     //是否关联项目(0:否;1:是)
+
+}

+ 80 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkInvoiceDetailVo.java

@@ -0,0 +1,80 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.finance.ccpm.vo;
+
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.Data;
+
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 发票明细Entity
+ * @author lw
+ * @version 2018-05-09
+ */
+@Data
+public class WorkInvoiceDetailVo extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+	private String number;		// 发票号
+	private String code;         //发票代码
+	private String totalMoney;		// 价税合计
+    @JsonIgnore
+	private String totalMoneyStr;		// 价税合计
+	private String tax;		// 税率
+	private String taxMoney;		// 金额 开票金额
+    @JsonIgnore
+	private String taxMoneyStr;		// 金额 开票金额
+	private String taxRate;		// 税额
+    @JsonIgnore
+	private String taxRateStr;		// 税额
+	private String incomeMoney;		// 登记金额 收款金额
+    @JsonIgnore
+	private String incomeMoneyStr;		// 登记金额 收款金额
+	private String state;		// 发票状态
+	private String backSign;		// 被退标记
+	private String backNumber;		// 被退票号
+	private String backCode;        //被退代码
+	private Date date;		// 开票日期
+	private String invoiceId;		// 发票主键
+	private String ainvoiceId;       //变更发票主键
+	private String sign;       //操作标记
+    private String[] exclusiveIds;
+    private String comId;
+    private String officeId;
+	private String home;
+	private String settleFlag;
+	private Date beginContractDate;		// 开始
+	private Date endContractDate;		// 结束
+	private String returnNumbers;       //作废-申请编号
+	private String returnId;             //作废-原明细Id
+	//导出功能-属性
+	private String invoiceExt;//0分公司开票 1总公司开票
+	private String invoiceInvoiceType;  //发票类型1专票2普票
+	private String invoiceClientName;   //实际开票单位
+	private String invoiceOrUnicode;    //纳税人识别号
+	private String invoiceContent;      //开票内容要求
+	private String invoiceRemarks;      //备注
+	private String invocieNumber;      //申请编号
+	private String invoiceDrawerName;  //开票人
+	private String invoiceOfficeName;  //所属部门
+	private String contractNum ;       //合同编号
+	private String contractName;       //合同名称
+	private String contractClientName; //主委托方
+    /*暂弃*/
+	private String returnNumber;     //退票申请编号
+	private String returnReason;     //退票原因
+	private String returnCancle;     //作废退票(1退票2作废)
+	private String returnSign;      //原票是否退回(1是2否)
+	private Date returnDate;         //退票时间
+	private String returnUser;       //退票人
+	private String processInstanceId; // 流程实例编号
+	private String status;             //状态
+}

+ 107 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkInvoiceVo.java

@@ -0,0 +1,107 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.finance.ccpm.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.google.common.collect.Lists;
+
+import com.jeeplus.core.domain.BaseEntity;
+
+import lombok.Data;
+
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 开票管理Entity
+ * @author
+ * @version
+ */
+@Data
+public class WorkInvoiceVo extends BaseEntity {
+
+    public static final String SERIAL_BIZCODE = "3";//编号模板类型
+
+	private static final long serialVersionUID = 1L;
+	private String number;		// 发票申请编号
+	private String processInstanceId; // 流程实例编号
+	private String projectName;		// 项目名称
+	private String reportNumber;		// 报告号
+	private Double money;		// 价税合计
+	private String moneyStr;		// 价税合计(String)
+	private String invoiceType;		// 发票类型
+	private String invoiceTypeStr;		// 发票类型Str
+	private String chargeType;		// 收款类型
+	private String billingContent;		// 开票内容
+	private String content;		// 开票内容要求
+	private Integer invoiceNumber;		// 发票编号(暂时弃用)
+	private Date invoiceDate;		// 开票日期
+	private Date takeDate;          //领票日期
+	private String drawerName;      //开票人(发票管理员名称)
+	private String invoiceRemarks;		// 开票备注
+	private String isInvoice;		// 是否开票
+	private String isCharge;		// 是否收款
+	private String isInvalid;		// 是否作废
+	private String invoiceState;    //发票状态
+	private String orUnicode;       //纳税人识别号
+	private String address;         //地址
+	private String telephone;        //电话
+	private String bank;              //开户银行
+	private String bankNumber;        //银行账号
+	private String cancleReason; //作废原因
+	private String companyId; //提交人的公司编号
+	private String officeId;
+	private String officeName;
+	private String submitterId;		// 发票登记人id
+	private String submitterName;		// 发票登记人名称
+	private String ext;//1总公司-上级公司0分公司-本公司
+	private String contractDate;
+	private String province; //省份
+	private String home;
+	private Date beginContractDate;		// 开始
+	private Date endContractDate;		// 结束
+	private Date receiptMoneyDate;		// 收款日期
+	private String receiptMoney;		// 是否收款
+	private String cancellation;		// 作废判断
+	private String adminFlag;		// 管理员判断
+	private String cancellationRemark;		// 作废原因
+	private List<WorkInvoiceDetailVo> workAccountList = Lists.newArrayList();//发票明细
+	private Integer notifyFlag; //代办判定条件
+	private String notifyId; //代办判定条件
+	private String widNumber; //发票号
+	private String widTotalMoney; //发票金额
+	private Double widTotalMoneyD; //发票金额
+
+
+
+	private String accountCheckingUserId; //对账人id
+	private String accountCheckingUserName; //对账人名称
+	private String accountCheckingArea; //对账地区
+
+	private Integer projectFlag ;	//1:项目,0:非项目
+	private Date receiptBeginDate ;	//收款开始时间
+	private Date receiptEndDate ;	//收款结束时间
+
+	private String newDrawer;    		//开票人状态
+	private String newDrawerId;    		//开票人id
+	private String newDrawerName;    	//开票人名称
+	private String actualDrawerId;    		//实际开票人id
+	private String actualDrawerEmailAddress;    		//实际开票人邮箱
+	private String actualDrawerName;    	//实际开票人名称
+	private String proceedsMoney;    	//收款总收入
+	private String noProceedsMoney;    	//剩余应收款费用
+	private Integer workReceiptCount;    	//收款数据量
+	private Double receiptMoneyD; //已收款金额
+	private Double notReceiptMoneyD; //未收款金额
+	private String cancellationProcessInstanceId; //作废流程实例id
+	private String cancellationState; //作废状态
+	private Date auditPassDate;
+	private Date cancellationAuditPassDate;
+	private Integer adventDate; 	//未收款天数
+	private Integer year; 	//年份信息
+	private String type; //发票所属系统
+
+}

+ 47 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/config/RestTemplateConfig.java

@@ -0,0 +1,47 @@
+package com.jeeplus.finance.config;
+
+import org.springframework.cloud.client.loadbalancer.LoadBalanced;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.MediaType;
+import org.springframework.http.client.ClientHttpRequestFactory;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Configuration
+@ComponentScan
+public class RestTemplateConfig {
+
+    @Bean
+    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
+        RestTemplate restTemplate = new RestTemplate(factory);
+        restTemplate.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());
+        return restTemplate;
+    }
+
+    @Bean
+    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
+        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+        factory.setConnectTimeout(150000); // 连接超时时间 (两端连接时间) 15秒
+        factory.setReadTimeout(50000); // 访问超时时间 (建立连接后从另一端读取资源所用时间) 5秒
+        // 设置代理
+        //factory.setProxy(null);
+        return factory;
+    }
+
+    public class WxMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
+        public WxMappingJackson2HttpMessageConverter(){
+            List<MediaType> mediaTypes = new ArrayList<>();
+            mediaTypes.add(MediaType.TEXT_PLAIN);
+            mediaTypes.add(MediaType.TEXT_HTML);
+//            mediaTypes.add(new MediaType("text", "plain", StandardCharsets.UTF_8));
+            setSupportedMediaTypes(mediaTypes);
+        }
+    }
+}

+ 4 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/contractRegistration/mapper/ContractFilePaperMapper.java

@@ -36,4 +36,8 @@ public interface ContractFilePaperMapper extends BaseMapper<ContractFilePaper> {
      * 根据attachmentId删除上传文件信息
      */
     void deleteFileInfo(String attachmentId);
+    //仅用于删除ccpm系统中的数据
+    void deleteByTenantId();
+
+    void deleteInfoByContractId(@Param("id") String id);
 }

+ 4 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/contractRegistration/mapper/ContractInfoMapper.java

@@ -80,4 +80,8 @@ public interface ContractInfoMapper extends BaseMapper<ContractInfo> {
     String isUseByReim(@Param("id") String id);
 
     String isUseByInvoice(@Param("id") String id);
+    //仅用于删除ccpm系统数据
+    void deleteByTenantId();
+
+    void deleteInfoById(@Param("id") String id);
 }

+ 7 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/contractRegistration/mapper/xml/ContractFilePaperMapper.xml

@@ -29,4 +29,11 @@
 			AND attachment_name = #{name}
     </select>
 
+    <delete id="deleteByTenantId">
+        delete from cw_work_contract_file_paper where tenant_id = 'ccpm'
+    </delete>
+
+    <delete id="deleteInfoByContractId">
+        delete from cw_work_contract_file_paper where contract_info_id = #{id}
+    </delete>
 </mapper>

+ 6 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/contractRegistration/mapper/xml/ContractInfoMapper.xml

@@ -268,4 +268,10 @@
         left join cw_work_contract_info cw_wci on cw_wci.id = cw_fib.contract_id and cw_wci.del_flag = '0'
         where cw_fib.del_flag = '0' and cw_fib.contract_id = #{id}
     </select>
+    <delete id="deleteByTenantId">
+        delete from cw_work_contract_info where tenant_id = 'ccpm'
+    </delete>
+    <delete id="deleteInfoById">
+        delete from cw_work_contract_info where id = #{id}
+    </delete>
 </mapper>

+ 2 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/mapper/CwFinanceInvoiceMapper.java

@@ -41,6 +41,8 @@ public interface CwFinanceInvoiceMapper extends BaseMapper<CwFinanceInvoice> {
      */
     @InterceptorIgnore(tenantLine = "true")
     void updateInfoById(CwFinanceInvoice cwFinanceInvoice);
+    @InterceptorIgnore(tenantLine = "true")
+    CwFinanceInvoiceDTO queryByProcId(@Param("id")String id);
 }
 
 

+ 18 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/mapper/xml/CwFinanceInvoiceMapper.xml

@@ -286,6 +286,24 @@
         where fi.del_flag = '0' and fi.id = #{id}
     </select>
 
+    <select id="queryByProcId" resultMap="BaseResultMap">
+        select
+        DISTINCT
+        <include refid="Base_Column_List"></include>,
+        su.name as reconciliationPeopleName,
+        su1.name as billingPeopleRealName,
+        rpl.report_no,
+        sa.name as reconciliationAreaName
+        from cw_finance_invoice fi
+        left join cw_finance_invoice_base fib on fib.invoice_id = fi.id
+        left join cw_project_report_new_line rpl on fib.program_id=rpl.report_id
+        left join sys_user su on fi.reconciliation_people = su.id
+        left join sys_user su1 on fi.billing_people_real = su1.id
+        left join cw_project_records pr on fib.program_id=pr.id
+        left join sys_area sa on fi.reconciliation_area = sa.id
+        where fi.del_flag = '0' and fi.proc_ins_id = #{id}
+    </select>
+
     <select id="getIdByProjectId" resultType="string">
         select
             invoice_id

+ 46 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/CwFinanceInvoiceService.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.jeeplus.common.TokenProvider;
 import com.jeeplus.core.query.QueryWrapperGenerator;
+import com.jeeplus.finance.ccpm.enums.TaskAliasEnum;
 import com.jeeplus.finance.invoice.domain.*;
 import com.jeeplus.finance.invoice.mapper.*;
 import com.jeeplus.finance.invoice.service.dto.CwFinanceInvoiceBaseDTO;
@@ -31,6 +32,7 @@ import com.jeeplus.finance.workClientInfo.service.CwWorkClientService;
 //import com.jeeplus.pubmodules.oss.service.OssService;
 //import com.jeeplus.pubmodules.serialNumTpl.service.SerialnumTplService;
 import com.jeeplus.sys.domain.User;
+import com.jeeplus.sys.feign.IDictApi;
 import com.jeeplus.sys.feign.IRoleApi;
 import com.jeeplus.sys.feign.IUserApi;
 import com.jeeplus.sys.feign.IWorkAttachmentApi;
@@ -683,4 +685,48 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
         }
         return new ArrayList<>();
     }
+
+    /**
+     * 根据流程id获取开票信息
+     * @param id
+     * @param processDefKey
+     * @return
+     */
+    public Object detailDistribute(String id, String processDefKey) {
+        TaskAliasEnum taskAliasEnum = TaskAliasEnum.getByCcpmContains(processDefKey);
+        // 发票
+        if (TaskAliasEnum.REIMBURSEMENT.getCpaTaskAlias().equals(taskAliasEnum.getCpaTaskAlias())) {
+            CwFinanceInvoiceDTO cwFinanceInvoiceDTO = cwFinanceInvoiceMapper.queryByProcId(id);
+            String label = SpringUtil.getBean(IDictApi.class).getDictLabel(cwFinanceInvoiceDTO.getReceivablesType(), "invoice_receivables_type", "");
+            cwFinanceInvoiceDTO.setReceivablesTypeLabel(label);
+            String contentLabel = SpringUtil.getBean(IDictApi.class).getDictLabel(cwFinanceInvoiceDTO.getBillingContent(), "invoice_billing_content", "");
+            cwFinanceInvoiceDTO.setBillingContentLabel(contentLabel);
+            // 电话号获取
+            if (ObjectUtil.isNotEmpty(cwFinanceInvoiceDTO) && StringUtils.isNotBlank(cwFinanceInvoiceDTO.getBillingId())) {
+                CwWorkClientBilling cwWorkClientBilling = cwWorkClientBillingService.getById(cwFinanceInvoiceDTO.getBillingId());
+                if (ObjectUtil.isNotEmpty(cwWorkClientBilling) && StringUtils.isNotBlank(cwWorkClientBilling.getPhone())) {
+                    // 如果通过billingId(开票信息id)可以查询到数据,并且数据的phone(电话)有值的话,那么就将方法返回结果的telPhone替换为查询到的phone
+                    cwFinanceInvoiceDTO.setTelPhone(cwWorkClientBilling.getPhone());
+                } else {
+                    // 如果通过billingId(开票信息id)查询不到数据或者查询到数据的phone值为空
+                    // 将billingId(开票信息id)置空,因为前端根据billingId是否有值来判断->是否允许电话号码可以手填
+                    cwFinanceInvoiceDTO.setBillingId("");
+                    // 将telPhone(电话号)置空
+//                cwFinanceInvoiceDTO.setTelPhone("");
+                }
+            }
+
+            // 实际开票单位名称获取
+            if (ObjectUtil.isNotEmpty(cwFinanceInvoiceDTO) && StringUtils.isNotBlank(cwFinanceInvoiceDTO.getBillingWorkplaceRealId())) {
+                CwWorkClientBase cwWorkClientBase = cwWorkClientService.getById(cwFinanceInvoiceDTO.getBillingWorkplaceRealId());
+                if (ObjectUtil.isNotEmpty(cwWorkClientBase) && StringUtils.isNotBlank(cwWorkClientBase.getName())) {
+                    // 如果通过billingWorkplaceRealId(实际开票单位id)可以查询到数据,并且数据的name(实际开票单位名称)有值的话,
+                    // 那么就将方法返回结果的billingWorkplaceReal替换
+                    cwFinanceInvoiceDTO.setBillingWorkplaceReal(cwWorkClientBase.getName());
+                }
+            }
+            return cwFinanceInvoiceDTO;
+        }
+        return null;
+    }
 }

+ 4 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/dto/CwFinanceInvoiceDTO.java

@@ -76,6 +76,7 @@ public class CwFinanceInvoiceDTO extends BaseDTO {
      */
     @Excel(name = "开票内容",width = 30,dict = "invoice_billing_content")
     private String billingContent;
+    private String billingContentLabel;
 
     /**
      * 发票类型
@@ -156,6 +157,7 @@ public class CwFinanceInvoiceDTO extends BaseDTO {
      * 收款类型
      */
     private String receivablesType;
+    private String receivablesTypeLabel;
 
     /**
      * 开票内容要求
@@ -179,6 +181,7 @@ public class CwFinanceInvoiceDTO extends BaseDTO {
      * 实际开票人
      */
     private String billingPeopleReal;
+    private String billingPeopleRealName;
 
     /**
      * 对账人id
@@ -194,6 +197,7 @@ public class CwFinanceInvoiceDTO extends BaseDTO {
      * 对账地区
      */
     private String reconciliationArea;
+    private String reconciliationAreaName;
 
     /**
      * 实际开票单位id

+ 0 - 1
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/controller/CwFillingbatchController.java

@@ -12,7 +12,6 @@ import com.jeeplus.finance.projectRecords.service.dto.CwFillingbatchProjectDTO;
 import com.jeeplus.finance.projectRecords.service.dto.CwProjectRecordsDTO;
 import com.jeeplus.logging.annotation.ApiLog;
 import com.jeeplus.logging.constant.enums.LogTypeEnum;
-import com.jeeplus.pubmodules.materialType.domain.MaterialTypeInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;

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

@@ -110,6 +110,21 @@ public class CwProjectRecordsController {
     }
 
     /**
+     * 查询财务项目信息列表
+     * @param cwProjectRecordsDTO
+     * @param page
+     * @return
+     */
+    @ApiLog("查询全部财务项目信息列表")
+    // @PreAuthorize("hasAuthority('cwProjectRecords:list')")
+    @GetMapping("getAllList")
+    public ResponseEntity<IPage<CwProjectRecordsDTO>> getAllList(CwProjectRecordsDTO cwProjectRecordsDTO, Page<CwProjectRecordsDTO> page) throws Exception {
+        IPage<CwProjectRecordsDTO> result = new Page<CwProjectRecordsDTO>();
+        result = cwProjectRecordsService.getAllList (page,cwProjectRecordsDTO);
+        return ResponseEntity.ok (result);
+    }
+
+    /**
      * 查询财务项目信息列表(咨询)
      * @param cwProjectRecordsDTO
      * @param page

+ 4 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/domain/CwProjectRecords.java

@@ -138,6 +138,10 @@ public class CwProjectRecords extends BaseEntity {
      */
     private String reportReview;
 
+    /**
+     * 项目所在地
+     */
+    private String areaId;
 
 
 

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

@@ -34,6 +34,9 @@ public interface CwProjectRecordsMapper extends BaseMapper<CwProjectRecords> {
      */
     // @InterceptorIgnore(tenantLine = "true")
     IPage<CwProjectRecordsDTO> findList(Page<CwProjectRecordsDTO> page, @Param(Constants.WRAPPER) QueryWrapper<CwProjectRecords> queryWrapper);
+    //获取所有的项目
+    @InterceptorIgnore(tenantLine = "true")
+    IPage<CwProjectRecordsDTO> getAllList(Page<CwProjectRecordsDTO> page, @Param(Constants.WRAPPER) QueryWrapper<CwProjectRecords> queryWrapper);
 
     IPage<PartialCustomerInfo> partialCustomerInfoList(Page<PartialCustomerInfo> page, @Param(Constants.WRAPPER) QueryWrapper<PartialCustomerInfo> queryWrapper);
     /**
@@ -129,5 +132,8 @@ public interface CwProjectRecordsMapper extends BaseMapper<CwProjectRecords> {
 
     CwProjectRecordsDTO getInfoById(@Param("id") String id);
 
-
+    //根据租户删除记录,仅用于删除ccpm系统中的数据
+    void deleteByTenantId();
+    //根据项目id删除项目信息
+    void deleteInfoById(@Param("id")String id);
 }

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

@@ -96,7 +96,8 @@
         a.project_level,
         a.project_start_time,
         a.project_end_time,
-        a.engineering_type
+        a.engineering_type,
+        a.area_id
     </sql>
     <sql id="File_Column_List">
         wa.id,
@@ -320,6 +321,46 @@
         ${ew.customSqlSegment}
         ORDER BY a.create_time DESC
     </select>
+
+    <select id="getAllList" resultMap="BaseResultMap">
+        select
+        DISTINCT
+        <include refid="Base_Column_List"></include>,
+        su.name as user_name,
+        su2.name as project_master_name,
+        su2.name as projectMasterName2,
+        su3.name as real_header_name,
+        cw_wci.contract_name,
+        cw_wci.contract_amount,
+        cw_wci.contract_num,
+        cw_wci.payer_subject,
+        cw_wci.payment_method,
+        cw_wcb.name as client_contacts_name,
+        cw_pbt.name as business_type_name,
+        cw_pp.id as planId,
+        b.member_count,
+        prnl.report_no
+        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'
+        left join sys_user su3 on su3.id = a.real_header and su3.del_flag = '0'
+        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 (select rec.id,count(cw_pm.id) as member_count
+        from cw_project_records rec
+        left join cw_project_members cw_pm on cw_pm.project_id = rec.id and cw_pm.del_flag = '0'
+        group by rec.id
+        ) b on b.id = a.id
+        left join cw_project_members cpm on a.id = cpm.project_id
+        left join sys_user sub on cpm.user_id = sub.id
+        left join sys_user_manage_office sumo on sumo.office_id = sub.office_id
+        LEFT JOIN cw_project_report pr on pr.project_id=a.id and pr.del_flag = '0'
+        LEFT JOIN cw_project_report_new_line prnl on pr.id=prnl.report_id and prnl.del_flag = '0'
+        left join cw_project_plan cw_pp on cw_pp.project_id = a.id and cw_pp.del_flag = '0'
+        ${ew.customSqlSegment}
+        ORDER BY a.create_time DESC
+    </select>
     <select id="findList2" resultMap="BaseResultMap">
         select
         DISTINCT
@@ -679,4 +720,11 @@
          where pr.id = #{id}
     </select>
 
+    <delete id="deleteByTenantId">
+        delete from cw_project_records where tenant_id = 'ccpm'
+    </delete>
+    <delete id="deleteInfoById">
+        delete from cw_project_records where id = #{id}
+    </delete>
+
 </mapper>

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

@@ -1083,4 +1083,50 @@ public class CwProjectRecordsService extends ServiceImpl<CwProjectRecordsMapper,
     }
 
 
+    public IPage<CwProjectRecordsDTO> getAllList(Page<CwProjectRecordsDTO> page, CwProjectRecordsDTO cwProjectRecordsDTO) throws Exception {
+        QueryWrapper<CwProjectRecords> queryWrapper = QueryWrapperGenerator.buildQueryCondition ( CwProjectRecordsWrapper.INSTANCE.toEntity(cwProjectRecordsDTO), CwProjectRecords.class );
+        queryWrapper.eq("a.del_flag","0");
+        if (ObjectUtil.isNotEmpty(cwProjectRecordsDTO)) {
+            if (ArrayUtil.isNotEmpty(cwProjectRecordsDTO.getCreateDates())) {
+                queryWrapper.between("a.create_time", cwProjectRecordsDTO.getCreateDates()[0], cwProjectRecordsDTO.getCreateDates()[1]);
+            }
+            if (ArrayUtil.isNotEmpty(cwProjectRecordsDTO.getProjectType())) {
+                queryWrapper.eq("a.project_type", cwProjectRecordsDTO.getProjectType());
+            }
+            if (StringUtils.isNotBlank(cwProjectRecordsDTO.getProjectMasterName())) {
+                queryWrapper.in("a.project_master_id", cwProjectRecordsDTO.getProjectMasterName());
+            }
+            if (StringUtils.isNotBlank(cwProjectRecordsDTO.getBusinessType())){
+                queryWrapper.eq("a.business_type",cwProjectRecordsDTO.getBusinessType());
+            }
+            if (StringUtils.isNotBlank(cwProjectRecordsDTO.getProjectMasterName2())) {
+                List<User> userList = SpringUtil.getBean ( IUserApi.class ).selectListByName(cwProjectRecordsDTO.getProjectMasterName2());
+                if (CollectionUtils.isNotEmpty(userList)){
+                    List<String> ids = userList.stream().distinct().map(User::getId).collect(Collectors.toList());
+                    if (CollectionUtil.isNotEmpty(ids)) {
+                        queryWrapper.in("a.project_master_id", ids);
+                    } else {
+                        return new Page<>();
+                    }
+                } else {
+                    queryWrapper.in("a.project_master_id", cwProjectRecordsDTO.getProjectMasterName());
+                }
+            }
+            if (StringUtils.isNotBlank(cwProjectRecordsDTO.getRealHeaderName())) {
+                queryWrapper.in("a.real_header", cwProjectRecordsDTO.getRealHeaderName());
+            }
+            if (StringUtils.isNotBlank(cwProjectRecordsDTO.getCreateId())){
+                queryWrapper.eq("a.create_by_id", cwProjectRecordsDTO.getCreateId());
+            }
+            // 创建人
+            if (ObjectUtil.isNotEmpty(cwProjectRecordsDTO.getCreateBy())){
+                if (StringUtils.isNotBlank(cwProjectRecordsDTO.getCreateBy().getName())){
+                    queryWrapper.in("a.create_by_id",cwProjectRecordsDTO.getCreateBy().getName());
+                }
+            }
+        }
+
+        IPage<CwProjectRecordsDTO> list = cwProjectRecordsMapper.getAllList(page, queryWrapper);
+        return list;
+    }
 }

+ 4 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/service/dto/CwProjectRecordsDTO.java

@@ -61,6 +61,10 @@ public class CwProjectRecordsDTO extends BaseDTO {
      * 备注信息
      */
     private String remarks;
+    /**
+     * 项目所在地
+     */
+    private String areaId;
 
     /**
      * 项目编号

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

@@ -251,6 +251,8 @@ public class CwProjectReportData extends BaseDTO {
     @Query(tableColumn = "b.project_number")
     @Excel(name = "项目编号",width = 20,orderNum = "2")
     private String projectNumber;
+
+    private String newLineId; //项目编号id
     /**
      * 项目id
      */

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

@@ -22,6 +22,7 @@ public class CwProjectReportSignAndIssue extends BaseEntity {
      */
     private Date issueCompleteTime;
 
+    private String projectId;  //项目id
     private String reportId;  //报告id
     /**
      * 流程id

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

@@ -35,6 +35,7 @@ public class CwProjectReviewNew extends BaseEntity {
      * 流程状态
      */
     private String reviewStatus;
+    private String projectId;  //项目id
     private String reportId;  //报告id
     private String reviewBy;  //下一节点审核人id
     private String reviewFee;  //送审价

+ 2 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectInfoMapper.java

@@ -103,4 +103,6 @@ public interface CwProjectInfoMapper extends BaseMapper<CwProjectInfoData> {
 
     @InterceptorIgnore(tenantLine = "true")
     void updateCwProjectInfoDataById(CwProjectInfoData cwProjectInfoData);
+
+    void deleteByTenantId();
 }

+ 5 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectReportMapper.java

@@ -37,6 +37,8 @@ public interface CwProjectReportMapper extends BaseMapper<CwProjectReport> {
      */
     //@InterceptorIgnore(tenantLine = "true")
     IPage<CwProjectReportData> findList(Page<CwProjectReportData> page, @Param("isBmzr") String isBmzr, @Param("officeIds") String officeIds, @Param(Constants.WRAPPER) QueryWrapper<CwProjectReportData> queryWrapper);
+    //获取所有的项目信息
+    List<CwProjectReportData> findAllList();
 
     @InterceptorIgnore(tenantLine = "true")
     List<WorkAttachmentInfo> findFileList(@Param("id") String id);
@@ -269,5 +271,8 @@ public interface CwProjectReportMapper extends BaseMapper<CwProjectReport> {
     List<ArchivedReportInfo> archivedInfoExport(@Param(Constants.WRAPPER) QueryWrapper<ArchivedReportInfo> queryWrapper);
 
     String getIdByNo(@Param("reportNo")String reportNo);
+    //根据租户删除记录,仅用于删除ccpm系统中的数据
+    void deleteByTenantId();
 
+    void deleteByProjectId(@Param("id") String id);
 }

+ 6 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectReportOnlineArchivingMapper.java

@@ -19,4 +19,10 @@ public interface CwProjectReportOnlineArchivingMapper extends BaseMapper<CwProje
      * @param status
      */
     void updateStatusById(@Param("id") String id, @Param("status") String status);
+    //仅用于删除ccpm系统的数据
+    void deleteByTenantId();
+
+    CwProjectReportOnlineArchiving findByReportId(@Param("id") String id);
+
+    void deleteInfoById(@Param("prrId") String prrId);
 }

+ 4 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectReportPaperArchivingMapper.java

@@ -19,4 +19,8 @@ public interface CwProjectReportPaperArchivingMapper extends BaseMapper<CwProjec
      * @param status
      */
     void updateStatusById(@Param("id") String id, @Param("status") String status);
+
+    void deleteByTenantId();
+
+    void deleteInfoById(@Param("prrdId") String prrdId);
 }

+ 6 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectReportSignAndIssueMapper.java

@@ -20,4 +20,10 @@ public interface CwProjectReportSignAndIssueMapper extends BaseMapper<CwProjectR
      * @param status
      */
     void updateStatusById(@Param("id") String id, @Param("status") String status);
+    //根据id获取报告签发信息
+    CwProjectReportSignAndIssue getById(@Param("prdtId") String prdtId);
+    //仅用于根据租户删除ccpm系统中的数据
+    void deleteByTenantId();
+
+    void deleteInfoById(@Param("prdtId")String prdtId);
 }

+ 6 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectReviewNewMapper.java

@@ -21,4 +21,10 @@ public interface CwProjectReviewNewMapper extends BaseMapper<CwProjectReviewNew>
      * @param reviewStatus
      */
     void updateStatusById(@Param("id") String id, @Param("reviewStatus") String reviewStatus);
+
+    CwProjectReviewNew getById(@Param("prdId")String prdId);
+    //根据租户删除记录,仅用于删除ccpm系统中的数据
+    void deleteByTenantId();
+    //物理删除复核信息
+    void deleteInfoById(@Param("prdId")String prdId);
 }

+ 4 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectInfoMapper.xml

@@ -114,4 +114,8 @@
         update_time = #{updateTime}
         where id = #{id}
     </update>
+
+    <delete id="deleteByTenantId">
+        delete from cw_project_report_new_line where tenant_id = 'ccpm'
+    </delete>
 </mapper>

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

@@ -169,7 +169,7 @@
         LEFT JOIN sys_user suser3 ON roa.create_by_id = suser3.id
         AND suser3.del_flag = '0'
     WHERE
-        a.id = #{id}
+        b.id = #{id}
 				AND a.del_flag = '0'
         AND cert.type IN ('3', '4')
         AND cert.type = (
@@ -313,6 +313,134 @@
         ${ew.customSqlSegment}
         ORDER BY a.create_time DESC
     </select>
+
+    <select id="findAllList" resultType="com.jeeplus.finance.projectReport.domain.CwProjectReportData">
+        SELECT
+        DISTINCT a.id,
+        a.create_by_id as createById,
+        a.create_time,
+        a.update_by_id,
+        a.update_time,
+        a.del_flag,
+        a.remarks,
+        a.status,
+        a.document_no,
+        a.project_report_number,
+        a.project_id,
+        a.office_id,
+        a.signature_type,
+        a.signature_annotator1,
+        a.signature_annotator2,
+        a.signature_contract_id,
+        a.real_create,
+        a.proc_ins_id,
+        a.process_definition_id,
+        a.signature_annotator_status,
+        b.project_number as projectNumber,
+        b.project_name as projectName,
+        b.project_master_id as projectMasterId,
+        b.real_header as projectMasterId2,
+        c.name as departmentName,
+        d.name as userName,
+        ifnull(cw_pa.audit_money,"0") as "auditFees",
+        e.name as projectMasterName,
+        b.real_header as projectMaster2Id,
+        f.name as projectMaster2Name,
+        cw_prs1.proc_ins_id as proc_ins_id1,
+        cw_prs1.process_definition_id as process_definition_id1,
+        cw_prs1.status as status1,
+        cw_prs1.id as sid1,
+        cw_prs2.proc_ins_id as proc_ins_id2,
+        cw_prs2.process_definition_id as process_definition_id2,
+        cw_prs2.status as status2,
+        cw_prs2.id as sid2,
+        cw_prs3.proc_ins_id as proc_ins_ids3,
+        cw_prs3.process_definition_id as process_definition_id3,
+        cw_prs3.status as status3,
+        cw_prs3.id as sid3,
+        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,
+        roaart.ID_ as onlineArchivingTaskId,
+        ifnull(rpa.status,'0') as paperArchivingStatus,
+        rpa.proc_ins_id as paperArchivingProcInsId,
+        rpa.id as paperArchivingId,
+        rpaart.ID_ as paperArchivingTaskId,
+
+        new_line.report_no as reportNo,
+        cwcb.name as servedUnitName,
+        art.ID_ as rev_task_id,
+        artart.ID_ as signAndIssueTaskId,
+        arta.ID_ as rev_task_id2,
+        art1.ID_ as sign_task_id1,
+        art2.ID_ as sign_task_id2,
+        art3.ID_ as sign_task_id3,
+        a.industry,
+        a.business_objects,
+        a.report_name,
+        cw_na.proc_ins_id as applyProcId,
+        cw_na.process_definition_id as applyProcDefId,
+        ifnull(cw_na.review_status,'0') as applyStatus,
+        ifnull(cw_na.take_number_type,'0') as takeNumberType,
+        cw_na.improper_take_cause as improperTakeCause,
+
+        artar.ID_ as review_task_number_id,
+        cw_nra.proc_ins_id as applyReviewProcId,
+        cw_nra.process_definition_id as applyReviewProcDefId,
+        ifnull(cw_nra.review_status,'0') as applyReviewStatus,
+        cw_ci.contract_name,
+        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
+        LEFT JOIN sys_user d on a.create_by_id = d.id
+        LEFT JOIN sys_user e on b.project_master_id = e.id
+        LEFT JOIN sys_user f on b.real_header = f.id
+
+        LEFT JOIN cw_project_report_signature cw_prs1 on cw_prs1.report_id = a.id and cw_prs1.type = '1' and cw_prs1.del_flag = '0'
+        LEFT JOIN cw_project_report_signature cw_prs2 on cw_prs2.report_id = a.id and cw_prs2.type = '2' and cw_prs2.del_flag = '0'
+        LEFT JOIN cw_project_report_signature cw_prs3 on cw_prs3.report_id = a.id and cw_prs3.type = '3' and cw_prs3.del_flag = '0'
+        left join act_ru_task art1 ON cw_prs1.proc_ins_id = art1.PROC_INST_ID_
+        left join act_ru_task art2 ON cw_prs2.proc_ins_id = art2.PROC_INST_ID_
+        left join act_ru_task art3 ON cw_prs3.proc_ins_id = art3.PROC_INST_ID_
+
+        left join cw_project_report_new_line new_line on a.id = new_line.report_id and new_line.del_flag = '0'
+        left join cw_project_report_review_new cw_rev on a.id = cw_rev.report_id and cw_rev.del_flag = '0'
+        left join cw_project_report_sign_and_issue sai on a.id = sai.report_id and sai.del_flag = '0'
+        left join act_ru_task artart ON sai.proc_ins_id = artart.PROC_INST_ID_
+        left join cw_project_report_online_archiving roa on a.id = roa.report_id and roa.del_flag = '0'
+        left join act_ru_task roaart ON roa.proc_ins_id = roaart.PROC_INST_ID_
+        left join cw_project_report_paper_archiving rpa on a.id = rpa.report_id and rpa.del_flag = '0'
+        left join act_ru_task rpaart ON rpa.proc_ins_id = rpaart.PROC_INST_ID_
+
+        LEFT JOIN cw_project_report_archive cw_pa on  a.id = cw_pa.report_id and cw_pa.del_flag = '0'
+        left join act_ru_task art ON cw_rev.proc_ins_id = art.PROC_INST_ID_
+        left join cw_project_members cpm on b.id = cpm.project_id
+        left join sys_user sub on cpm.user_id = sub.id
+        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_
+         left join act_ru_task artar ON cw_nra.proc_ins_id = artar.PROC_INST_ID_
+        ORDER BY a.create_time DESC
+    </select>
+
     <select id="queryById" resultType="com.jeeplus.finance.projectReport.domain.CwProjectReportData">
         SELECT
         a.id,
@@ -366,6 +494,7 @@
         new_line.report_no as reportNo,
         new_line.opinion_type as opinionType,
         new_line.seal_type as sealType,
+        new_line.id as newLineId,
         cw_re.proc_ins_id as procInsId3,
         suser.name as real_header_name,
         b.project_master_id as project_master_id1,
@@ -1323,5 +1452,11 @@ JOIN (
     <select id="getIdByNo" resultType="string">
         select report_id from cw_project_report_new_line where report_no = #{reportNo}
     </select>
+    <delete id="deleteByTenantId">
+        delete from cw_project_report where tenant_id = 'ccpm'
+    </delete>
+    <delete id="deleteByProjectId">
+        delete from cw_project_report where project_id = #{id}
+    </delete>
 
 </mapper>

+ 9 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReportOnlineArchivingMapper.xml

@@ -5,4 +5,13 @@
          update cw_project_report_online_archiving set status = #{status}
         where id = #{id}
     </update>
+    <delete id="deleteByTenantId">
+        delete from cw_project_report_online_archiving where tenant_id = 'ccpm'
+    </delete>
+    <delete id="deleteInfoById">
+        delete from cw_project_report_online_archiving where id = #{prrId}
+    </delete>
+    <select id="findByReportId" resultType="com.jeeplus.finance.projectReport.domain.CwProjectReportOnlineArchiving">
+        select * from cw_project_report_online_archiving where report_id = #{id}
+    </select>
 </mapper>

+ 6 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReportPaperArchivingMapper.xml

@@ -5,4 +5,10 @@
         update cw_project_report_paper_archiving set status = #{status}
         where id = #{id}
     </update>
+    <delete id="deleteByTenantId">
+        delete from cw_project_report_paper_archiving where tenant_id = 'ccpm'
+    </delete>
+    <delete id="deleteInfoById">
+        delete from cw_project_report_paper_archiving where id = #{prrdId}
+    </delete>
 </mapper>

+ 11 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReportSignAndIssueMapper.xml

@@ -5,4 +5,15 @@
         update cw_project_report_sign_and_issue set status = #{status}
         where id = #{id}
     </update>
+
+    <select id="getById" resultType="com.jeeplus.finance.projectReport.domain.CwProjectReportSignAndIssue">
+        select id from cw_project_report_sign_and_issue where id =#{prdtId}
+    </select>
+
+    <delete id="deleteByTenantId">
+        delete from cw_project_report_sign_and_issue where tenant_id = 'ccpm'
+    </delete>
+    <delete id="deleteInfoById">
+        delete from cw_project_report_sign_and_issue where id = #{prdtId}
+    </delete>
 </mapper>

+ 10 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReviewNewMapper.xml

@@ -5,4 +5,14 @@
         update cw_project_report_review_new set review_status = #{reviewStatus}
         where id = #{id}
     </update>
+
+    <select id="getById" resultType="com.jeeplus.finance.projectReport.domain.CwProjectReviewNew">
+        select * from cw_project_report_review_new where id = #{prdId}
+    </select>
+    <delete id="deleteByTenantId">
+        delete from cw_project_report_review_new where tenant_id = 'ccpm'
+    </delete>
+    <delete id="deleteInfoById">
+        delete from cw_project_report_review_new where id = #{prdId}
+    </delete>
 </mapper>

+ 6 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/utils/Global.java

@@ -320,6 +320,12 @@ public class Global {
 	public static String getISignature() {
 		return getConfig("iSignature");
 	}
+	/**
+	 * 获取公共密码
+	 */
+	public static String getPublicPassword() {
+		return getConfig("publicPassword");
+	}
 
 	/**
 	 */

+ 377 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/utils/RestTemplateService.java

@@ -0,0 +1,377 @@
+package com.jeeplus.finance.utils;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.jeeplus.common.TokenProvider;
+import com.jeeplus.sys.feign.IUserApi;
+import com.jeeplus.sys.service.dto.UserDTO;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.httpclient.HttpClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.*;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+import java.util.*;
+
+@Component
+public class RestTemplateService {
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    /**
+     * 访问get接口 - CAS 系统
+     * @param path 接口路径
+     * @param token token
+     * @param paramMap 请求参数-路径后
+     * @return
+     */
+    public Object getCas(String path, String token, Map<String, Object> paramMap) {
+        return httpRequest(HttpMethod.GET, token, paramMap, null, Global.getConfig("CAS_PATH"), path,"cas");
+    }
+
+    /**
+     * 访问post接口 - CCPM 系统
+     * @param path 接口路径
+     * @param token token
+     * @param paramMap 请求参数-路径后
+     * @param bodyMap 请求参数-请求体
+     * @return
+     */
+    public Object postCCPM(String path, String token, Map<String, Object> paramMap, Map<String, Object> bodyMap) {
+        return httpRequest(HttpMethod.POST, token, paramMap, bodyMap, Global.getConfig("CCPM_PATH"), path, "ccpm");
+    }
+
+    /**
+     * 访问get接口 - CCPM 系统
+     * @param path 接口路径
+     * @param token token
+     * @param paramMap 请求参数-路径后
+     * @return
+     */
+    public Object getCCPM(String path, String token, Map<String, Object> paramMap) {
+        return httpRequest(HttpMethod.GET, token, paramMap, null, Global.getConfig("CCPM_PATH"), path,"ccpm");
+    }
+
+    /**
+     * 访问get接口 - CCPM 系统
+     * @param path 接口路径
+     * @param token token
+     * @param paramMap 请求参数-路径后
+     * @return
+     */
+    public Object getSzCCPM(String path) {
+        return httpSzRequest(HttpMethod.GET, null, Global.getConfig("CCPM_PATH"), path,"ccpm");
+    }
+
+    /**
+     * 访问get接口 - CCPM 系统
+     * @param path 接口路径
+     * @param token token
+     * @param paramMap 请求参数-路径后
+     * @return
+     */
+    public Object getHisCCPM(String path, String token, Map<String, Object> paramMap, UserDTO userDTO) {
+        return httpRequestHis(HttpMethod.GET, token, paramMap, null, Global.getConfig("CCPM_PATH"), path,"ccpm",userDTO);
+    }
+
+    /**
+     * 访问get接口 - CCPM 系统
+     * @param path 接口路径
+     * @param token token
+     * @param paramMap 请求参数-路径后
+     * @return
+     */
+    public Object getCCPMMultithreading(String path, String token, Map<String, Object> paramMap, UserDTO userDTO) {
+        return httpRequestMultithreading(HttpMethod.GET, token, paramMap, null, Global.getConfig("CCPM_PATH"), path,"ccpm",userDTO);
+    }
+
+    /**
+     * 访问远程接口方法
+     * @param method 请求类型
+     * @param token token
+     * @param paramMap 请求参数-路径后
+     * @param bodyMap 请求参数-请求体
+     * @param hostAddress 服务host地址
+     * @param path 接口路径
+     * @param flag 接口路径
+     * @return
+     */
+    public Object httpRequest(HttpMethod method, String token, Map<String, Object> paramMap, Map<String, Object> bodyMap, String hostAddress, String path, String flag) {
+        Object res = null;
+        //获取当前登陆人的信息
+        UserDTO currentUserDTO = SpringUtil.getBean(IUserApi.class).getByToken(TokenProvider.getCurrentToken());
+        try {
+            JSONObject jsonObject = new JSONObject();
+            if (CollectionUtil.isNotEmpty(bodyMap)) {
+                jsonObject = new JSONObject(bodyMap); // 另一端接口需要使用@RequestBody来接收此参数
+            }
+            String url = getUrl(hostAddress, path, paramMap);
+            HttpHeaders httpHeaders = new HttpHeaders();
+            if("ccpm".equals(flag)){
+                String cookie = ccpmValidatePassword(currentUserDTO);
+                httpHeaders.add("cookie", cookie);
+            }else{
+    //        httpHeaders.add("token",token);
+            }
+            httpHeaders.add("Accept", MediaType.ALL_VALUE);
+            httpHeaders.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
+            HttpEntity<Object> entity = new HttpEntity<>(jsonObject, httpHeaders);
+            ResponseEntity<Object> responseEntity = restTemplate.exchange(url, method, entity, Object.class);
+            res = responseEntity.getBody();
+        } catch (Exception e) {
+            System.out.println("远程调用失败");
+            e.printStackTrace();
+        }
+        return res;
+    }
+
+    /**
+     * 访问远程接口方法
+     * @param method 请求类型
+     * @param token token
+     * @param paramMap 请求参数-路径后
+     * @param bodyMap 请求参数-请求体
+     * @param hostAddress 服务host地址
+     * @param path 接口路径
+     * @param flag 接口路径
+     * @return
+     */
+    public Object httpSzRequest(HttpMethod method, Map<String, Object> bodyMap, String hostAddress, String path, String flag) {
+        Object res = null;
+        try {
+
+            String url = hostAddress + path;
+
+            ResponseEntity<String> forObject = restTemplate.exchange(url,method,null,String.class);
+            res = forObject.getBody();
+        } catch (Exception e) {
+            System.out.println("远程调用失败");
+            e.printStackTrace();
+        }
+        return res;
+    }
+
+
+    /**
+     * 访问远程接口方法
+     * @param method 请求类型
+     * @param token token
+     * @param paramMap 请求参数-路径后
+     * @param bodyMap 请求参数-请求体
+     * @param hostAddress 服务host地址
+     * @param path 接口路径
+     * @param flag 接口路径
+     * @return
+     */
+    public Object httpRequestHis(HttpMethod method, String token, Map<String, Object> paramMap, Map<String, Object> bodyMap, String hostAddress, String path, String flag, UserDTO userDTO) {
+        Object res = null;
+        //获取当前登陆人的信息
+//        UserDTO currentUserDTO = SpringUtil.getBean(IUserApi.class).getByToken(TokenProvider.getCurrentToken());
+        try {
+            JSONObject jsonObject = new JSONObject();
+            if (CollectionUtil.isNotEmpty(bodyMap)) {
+                jsonObject = new JSONObject(bodyMap); // 另一端接口需要使用@RequestBody来接收此参数
+            }
+            String url = getUrl(hostAddress, path, paramMap);
+            HttpHeaders httpHeaders = new HttpHeaders();
+            if("ccpm".equals(flag)){
+                String cookie = ccpmValidatePassword(userDTO);
+                httpHeaders.add("cookie", cookie);
+            }else{
+                //        httpHeaders.add("token",token);
+            }
+            httpHeaders.add("Accept", MediaType.ALL_VALUE);
+            httpHeaders.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
+            HttpEntity<Object> entity = new HttpEntity<>(jsonObject, httpHeaders);
+            ResponseEntity<Object> responseEntity = restTemplate.exchange(url, method, entity, Object.class);
+            res = responseEntity.getBody();
+        } catch (Exception e) {
+            System.out.println("远程调用失败");
+            e.printStackTrace();
+        }
+        return res;
+    }
+
+
+    /**
+     * 访问远程接口方法
+     * @param method 请求类型
+     * @param token token
+     * @param paramMap 请求参数-路径后
+     * @param bodyMap 请求参数-请求体
+     * @param hostAddress 服务host地址
+     * @param path 接口路径
+     * @param flag 接口路径
+     * @return
+     */
+    public Object httpRequestMultithreading(HttpMethod method, String token, Map<String, Object> paramMap, Map<String, Object> bodyMap, String hostAddress, String path, String flag, UserDTO userDTO) {
+        Object res = null;
+        try {
+            JSONObject jsonObject = new JSONObject();
+            if (CollectionUtil.isNotEmpty(bodyMap)) {
+                jsonObject = new JSONObject(bodyMap); // 另一端接口需要使用@RequestBody来接收此参数
+            }
+            String url = getUrl(hostAddress, path, paramMap);
+            HttpHeaders httpHeaders = new HttpHeaders();
+            if("ccpm".equals(flag)){
+                String cookie = ccpmValidatePassword(userDTO);
+                httpHeaders.add("cookie", cookie);
+            }else{
+    //        httpHeaders.add("token",token);
+            }
+            httpHeaders.add("Accept", MediaType.ALL_VALUE);
+            httpHeaders.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
+            HttpEntity<Object> entity = new HttpEntity<>(jsonObject, httpHeaders);
+            ResponseEntity<Object> responseEntity = restTemplate.exchange(url, method, entity, Object.class);
+            res = responseEntity.getBody();
+        } catch (Exception e) {
+            System.out.println("远程调用失败");
+            e.printStackTrace();
+        }
+        return res;
+    }
+
+    /**
+     * 判定人员信息是否有效
+     * @param user
+     * @return
+     * @throws IOException
+     */
+    public String ccpmValidatePassword(UserDTO user) {
+        StringBuffer response = new StringBuffer();
+        //请求地址
+        String url = Global.getConfig("CCPM_PATH") + "/a/sys/register/validatePasswordPublic";
+        HttpClient client = new HttpClient();
+        //post请求方式
+        PostMethod postMethod = new PostMethod(url);
+        //推荐的数据存储方式,类似key-value形式
+        Map telPair = new HashMap();
+        telPair.put("loginName",user.getLoginName());
+        telPair.put("password", Global.getPublicPassword());
+        //封装请求参数
+        postMethod.setRequestBody(telPair.toString());
+        //这里是设置请求内容为json格式,根据站点的格式决定
+        //因为这个网站会将账号密码转为json格式,所以需要这一步
+        postMethod.setRequestHeader("Content-Type","application/json; charset=UTF-8;");
+        //执行请求
+        try {
+            client.executeMethod(postMethod);
+            // 读取为 InputStream
+            BufferedReader reader = new BufferedReader(new InputStreamReader(postMethod.getResponseBodyAsStream()));
+            String line;
+            while ((line = reader.readLine()) != null) {
+                response.append(line);
+            }
+            reader.close();
+        } catch (IOException e) {
+            System.out.println("远程调用失败");
+        } finally {
+            postMethod.releaseConnection();
+        }
+        if("true".equals(response.toString())){
+            String cookie = getCcpmCookie(user);
+            return cookie;
+        }
+        return null;
+    }
+
+    /**
+     * 获取ccpm登录用户cookie信息
+     * @param user
+     * @return
+     * @throws IOException
+     */
+    public String getCcpmCookie(UserDTO user) {
+        //请求地址
+        String url = Global.getConfig("CCPM_PATH") + "/a/login";
+        HttpClient client = new HttpClient();
+        //post请求方式
+        PostMethod postMethod = new PostMethod(url);
+        //封装请求参数
+        postMethod.setParameter("username",user.getName());
+        postMethod.setParameter("password", Global.getPublicPassword());
+        //这里是设置请求内容为json格式,根据站点的格式决定
+        //因为这个网站会将账号密码转为json格式,所以需要这一步
+        postMethod.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8;");
+        //执行请求
+        try {
+            client.executeMethod(postMethod);
+            //通过Post/GetMethod对象获取响应头信息
+            String cookies = postMethod.getResponseHeader("Set-Cookie").getValue();
+            if(StringUtils.isNotBlank(cookies)){
+                StringTokenizer result = new StringTokenizer(cookies,";");   // 实例化对象,并指向以 - 对 a 进行分割
+                while(result.hasMoreTokens()){ // 对 result 遍历并打印子字符串;
+                    String cookie = result.nextToken();
+                    if(StringUtils.isNotBlank(cookie) && cookie.contains("jeeplus.session.id")){
+                        return cookie;
+                    }
+                }
+            }
+        } catch (IOException e) {
+            System.out.println("远程调用失败");
+        } finally {
+            postMethod.releaseConnection();
+        }
+        return null;
+    }
+
+    /**
+     * 将参数拼接到请求路径中
+     * @param hostAddress 服务host地址
+     * @param path 接口路径
+     * @param map 请求参数
+     * @return
+     */
+    public String getUrl(String hostAddress, String path, Map<String, Object> map) {
+        String url = hostAddress + path;
+        StringBuilder paramStr = new StringBuilder();
+        if (CollectionUtil.isNotEmpty(map)) {
+            for (String key : map.keySet()) {
+                Object o = map.get(key);
+                if (Objects.nonNull(o)) {
+//                    String value = URLEncoder.encode(o.toString(), "utf-8");
+                    paramStr.append("&").append(key).append("=").append(o);
+                }
+            }
+        }
+        if (StringUtils.isNotBlank(paramStr.toString())){
+            String param = paramStr.substring(1).toString(); // 去掉第一个&
+            url = url + "?" + param;
+        }
+        return url;
+    }
+
+    /**
+     * 将参数拼接到请求路径中
+     * @param hostAddress 服务host地址
+     * @param path 接口路径
+     * @return
+     */
+    public String getSzUrl(String hostAddress, String path) {
+        String url = hostAddress + path;
+        StringBuilder paramStr = new StringBuilder();
+//        if (CollectionUtil.isNotEmpty(map)) {
+//            for (String key : map.keySet()) {
+//                Object o = map.get(key);
+//                if (Objects.nonNull(o)) {
+////                    String value = URLEncoder.encode(o.toString(), "utf-8");
+//                    paramStr.append("&").append(key).append("=").append(o);
+//                }
+//            }
+//        }
+        if (StringUtils.isNotBlank(paramStr.toString())){
+            String param = paramStr.substring(1).toString(); // 去掉第一个&
+            url = url + "?" + param;
+        }
+        return url;
+    }
+}

+ 150 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/utils/RestUtil.java

@@ -0,0 +1,150 @@
+package com.jeeplus.finance.utils;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+import sun.misc.BASE64Encoder;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.HashMap;
+import java.util.Map;
+
+
+@Component
+public class RestUtil {
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    //一些自定义的请求头参数
+    public static final String supplierID = "";
+    public static final String interfacekey = "";
+
+    /**
+     * DLT专用执行方法
+     *
+     * @param param  请求参数:可以添加一些常量请求值
+     * @param url    访问的url
+     * @param method 请求的方法
+     * @return
+     */
+    public String execute(Map<String, Object> param, String url, HttpMethod method) {
+        HttpHeaders headers = this.getDefaultHeader();
+        Map<String, Object> requestor = this.getDefaultParam();
+        param.put("requestor", requestor);
+        param.put("supplierID", supplierID);
+        HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(param, headers);
+        ResponseEntity<String> response = restTemplate.exchange(url, method, requestEntity, String.class);
+        return response.getBody();
+    }
+
+    /**
+     * 获取默认的头请求信息
+     *
+     * @return
+     */
+    public HttpHeaders getDefaultHeader() {
+        String timestamp = "" + System.currentTimeMillis();
+        String signature = EncoderByMd5(supplierID + timestamp + interfacekey);
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("signature", signature);
+        headers.add("timestamp", timestamp);
+        return headers;
+    }
+
+
+    /**
+     * 获取默认的参数
+     *
+     * @return
+     */
+    public Map<String, Object> getDefaultParam() {
+        Map<String, Object> defParam = new HashMap<>();
+        defParam.put("invoker", "xx");
+        defParam.put("operatorName", "xx");
+        return defParam;
+    }
+
+
+    /**
+     * 通过MD5加密
+     *
+     * @param str
+     * @return
+     */
+    public static String EncoderByMd5(String str) {
+        if (str == null) {
+            return null;
+        }
+        try {
+            // 确定计算方法
+            MessageDigest md5 = MessageDigest.getInstance("MD5");
+            BASE64Encoder base64en = new BASE64Encoder();
+            // 加密后的字符串
+            return base64en.encode(md5.digest(str.getBytes("utf-8"))).toUpperCase();
+        } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
+            return null;
+        }
+    }
+
+
+    /**
+     * get请求
+     *
+     * @param url      请求的url
+     * @param jsonData 请求的json
+     * @return
+     */
+    public String restGet(String url, String jsonData) {
+        return request(url, jsonData, HttpMethod.GET);
+    }
+
+    /**
+     * @param url        请求的url
+     * @param jsonData   json数据
+     * @param httpMethod
+     * @return
+     */
+    private String request(String url, String jsonData, HttpMethod httpMethod) {
+        ResponseEntity<String> response = null;
+        try {
+            HttpEntity<String> requestEntity = new HttpEntity<String>(jsonData);
+            response = restTemplate.exchange(url, httpMethod, requestEntity, String.class);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            return "";
+        }
+        return response.getBody().toString();
+    }
+
+    /**
+     * Get请求获取实体类
+     *
+     * @param url          请求的url
+     * @param responseType 返回的类型
+     * @param parms        不限定个数的参数
+     * @param <T>          泛型
+     * @return
+     */
+    public <T> T getForEntity(String url, Class<T> responseType, Object... parms) {
+        return (T) restTemplate.getForEntity(url, responseType, parms);
+    }
+
+    /**
+     * Get请求
+     *
+     * @param url
+     * @param parm
+     * @return
+     */
+    public String get(String url, Map<String, Object> parm) {
+        return restTemplate.getForEntity(url, String.class, parm).getBody();
+    }
+
+}

+ 47 - 26
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/controller/CwWorkClientController.java

@@ -87,39 +87,42 @@ public class CwWorkClientController {
         });
         List<UserDTO> finalAllUserInfo = allUserInfo;
         result.getRecords().forEach(li -> {
-            if (StringUtils.isBlank(li.getCreateBy().getName())){
-                //根据项目经理1的id去查项目经理去名称
-                UserDTO createBy = li.getCreateBy();
-                if (StringUtils.isNotBlank(li.getCreateBy().getId())){
-                    UserDTO matchingUser = null;
-                    for (UserDTO user : finalAllUserInfo) {
-                        if (createBy.getId().equals(user.getId())) {
-                            matchingUser = user;
-                            break;
+            if (!li.getTenantDTO().getId().equals("ccpm")){
+                if (StringUtils.isBlank(li.getCreateBy().getName())){
+                    //根据项目经理1的id去查项目经理去名称
+                    UserDTO createBy = li.getCreateBy();
+                    if (StringUtils.isNotBlank(li.getCreateBy().getId())){
+                        UserDTO matchingUser = null;
+                        for (UserDTO user : finalAllUserInfo) {
+                            if (createBy.getId().equals(user.getId())) {
+                                matchingUser = user;
+                                break;
+                            }
+                        }
+                        if (matchingUser != null) {
+                            String name = matchingUser.getName(); // Assuming the property name is "userName"
+                            createBy.setName(name);
+                            li.setCreateBy(createBy);
                         }
-                    }
-                    if (matchingUser != null) {
-                        String name = matchingUser.getName(); // Assuming the property name is "userName"
-                        createBy.setName(name);
-                        li.setCreateBy(createBy);
                     }
                 }
-            }
-            if (StringUtils.isBlank(li.getUpdateUserName())) {
-                if (StringUtils.isNotBlank(li.getUpdateUser())){
-                    UserDTO matchingUser = null;
-                    for (UserDTO user : finalAllUserInfo) {
-                        if (li.getUpdateUser().equals(user.getId())) {
-                            matchingUser = user;
-                            break;
+                if (StringUtils.isBlank(li.getUpdateUserName())) {
+                    if (StringUtils.isNotBlank(li.getUpdateUser())){
+                        UserDTO matchingUser = null;
+                        for (UserDTO user : finalAllUserInfo) {
+                            if (li.getUpdateUser().equals(user.getId())) {
+                                matchingUser = user;
+                                break;
+                            }
+                        }
+                        if (matchingUser != null) {
+                            String projectMasterName = matchingUser.getName(); // Assuming the property name is "userName"
+                            li.setUpdateUserName(projectMasterName);
                         }
-                    }
-                    if (matchingUser != null) {
-                        String projectMasterName = matchingUser.getName(); // Assuming the property name is "userName"
-                        li.setUpdateUserName(projectMasterName);
                     }
                 }
             }
+
         });
         return ResponseEntity.ok (result);
     }
@@ -158,6 +161,24 @@ public class CwWorkClientController {
     }
 
     /**
+     * 查询客户信息列表tree
+     * @param cwWorkClientBaseDTO
+     * @param page
+     * @return
+     * @throws Exception
+     */
+    @ApiLog("查询客户信息列表tree")
+    @GetMapping("findAllList")
+    public ResponseEntity<IPage<CwWorkClientBaseDTO>> findAllList(CwWorkClientBaseDTO cwWorkClientBaseDTO, Page<CwWorkClientBaseDTO> page) throws Exception {
+        IPage<CwWorkClientBaseDTO> result = new Page<CwWorkClientBaseDTO>();
+        long l1 = System.currentTimeMillis();
+        result = cwWorkClientService.findAllList (page,cwWorkClientBaseDTO);
+        long l2 = System.currentTimeMillis();
+        System.out.println("查询客户信息列表treeController:" + (l2-l1));
+        return ResponseEntity.ok (result);
+    }
+
+    /**
      * 查询客户信息数据
      * @param id
      * @return

+ 6 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/mapper/CwWorkClientBaseMapper.java

@@ -56,8 +56,14 @@ public interface CwWorkClientBaseMapper extends BaseMapper<CwWorkClientBase> {
     List<String> getNoByIdArray(@Param("idArray") String[] idArray);
 
     public IPage<CwWorkClientBaseDTO> getInfoList(Page<CwWorkClientBaseDTO> page, @Param(Constants.WRAPPER) QueryWrapper<CwWorkClientBase> queryWrapper);
+    @InterceptorIgnore(tenantLine = "true")
+    public IPage<CwWorkClientBaseDTO> findAllList(Page<CwWorkClientBaseDTO> page, @Param(Constants.WRAPPER) QueryWrapper<CwWorkClientBase> queryWrapper);
 
     List<CwWorkClientBillingDTO> getBilling(@Param("id") String id);
+
+    void deleteByTenantId();
+
+    void deleteClientById(@Param("id") String id);
 }
 
 

+ 4 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/mapper/CwWorkClientBillingMapper.java

@@ -17,6 +17,10 @@ import java.util.List;
 public interface CwWorkClientBillingMapper extends BaseMapper<CwWorkClientBilling> {
 
     List<CwWorkClientBillingDTO> getBillingListByClientId(@Param(Constants.WRAPPER) QueryWrapper<CwWorkClientBilling> queryWrapper);
+
+    void deleteByTenantId();
+
+    void deleteClientById(@Param("id") String id);
 }
 
 

+ 4 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/mapper/CwWorkClientTypeMapper.java

@@ -3,6 +3,7 @@ package com.jeeplus.finance.workClientInfo.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jeeplus.finance.workClientInfo.domain.CwWorkClientType;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * @Entity com.jeeplus.test.cw.workClientInfo.domain.CwWorkClientType
@@ -10,6 +11,9 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface CwWorkClientTypeMapper extends BaseMapper<CwWorkClientType> {
 
+    void deleteByTenantId();
+
+    void deleteClientById(@Param("id") String id);
 }
 
 

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

@@ -111,7 +111,8 @@
         cw_wcb.update_request_id,
         cw_wcb.update_user,
         cw_wcb.request_user_id,
-        cw_wcb.representative_party
+        cw_wcb.representative_party,
+        cw_wcb.tenant_id as 'tenantDTO.id'
     </sql>
     <sql id="File_Column_List">
         wa.id,
@@ -266,7 +267,7 @@
         left join cw_work_client_type cw_wct on cw_wct.client_id = cw_wcb.id and cw_wct.del_flag = '0'
         left join cw_manage_level_type cw_mlt on cw_mlt.id = cw_wcb.manage_level_type and cw_mlt.del_flag = '0'
         left join cw_organization_type cw_ot on cw_ot.id = cw_wcb.organization_type and cw_ot.del_flag = '0'
-        where cw_wcb.del_flag = '0' and cw_wcb.id = ${id}
+        where cw_wcb.del_flag = '0' and cw_wcb.id = #{id}
     </select>
 
     <select id="queryUpdateLogList" resultType="com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientTempDTO">
@@ -407,4 +408,33 @@
         left join act_ru_task art on cw_wcb.proc_ins_id = art.PROC_INST_ID_
         ${ew.customSqlSegment}
     </select>
+
+    <select id="findAllList" resultType="com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientBaseDTO">
+        select
+        <include refid="Base_Column_List"></include>,
+        su.name as user_name,
+        cw_wct.is_listed as is_listed,
+        cw_wct.ownership_type as ownership_type,
+        cw_wct.final_status_type as final_status_type,
+        cw_mlt.name as manage_level_type_name,
+        cw_ot.name as organization_type_name,
+        su1.name as update_user_name,
+        cw_wct.client_id AS client_id,
+        art.ID_ as task_id
+        from cw_work_client_base cw_wcb
+        left join sys_user su on su.id = cw_wcb.create_by_id and su.del_flag = '0'
+        left join cw_work_client_type cw_wct on cw_wct.client_id = cw_wcb.id and cw_wct.del_flag = '0'
+        left join cw_manage_level_type cw_mlt on cw_mlt.id = cw_wcb.manage_level_type and cw_mlt.del_flag = '0'
+        left join cw_organization_type cw_ot on cw_ot.id = cw_wcb.organization_type and cw_ot.del_flag = '0'
+        left join sys_user su1 on su1.id = cw_wcb.update_user and su1.del_flag = '0'
+        left join act_ru_task art on cw_wcb.proc_ins_id = art.PROC_INST_ID_
+        ${ew.customSqlSegment}
+    </select>
+
+    <delete id="deleteByTenantId">
+        delete from cw_work_client_base where tenant_id = 'ccpm'
+    </delete>
+    <delete id="deleteClientById">
+        delete from cw_work_client_base where id = #{id}
+    </delete>
 </mapper>

+ 8 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/mapper/xml/CwWorkClientBillingMapper.xml

@@ -46,4 +46,12 @@
         from cw_work_client_billing cw_wcbi
         ${ew.customSqlSegment}
     </select>
+
+    <delete id="deleteByTenantId">
+        delete from cw_work_client_billing where tenant_id = 'ccpm'
+    </delete>
+
+    <delete id="deleteClientById">
+        delete from cw_work_client_billing where id = #{id}
+    </delete>
 </mapper>

+ 8 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/mapper/xml/CwWorkClientTypeMapper.xml

@@ -65,4 +65,12 @@
         cw_wct.final_status_type,
         cw_wct.tax_authorities
     </sql>
+
+    <delete id="deleteByTenantId">
+        delete from cw_work_client_type where tenant_id = 'ccpm'
+    </delete>
+
+    <delete id="deleteClientById">
+        delete from cw_work_client_type where id = #{id}
+    </delete>
 </mapper>

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

@@ -225,6 +225,90 @@ public class CwWorkClientService extends ServiceImpl<CwWorkClientBaseMapper, CwW
         return list;
     }
 
+
+    public IPage<CwWorkClientBaseDTO> findAllList(Page<CwWorkClientBaseDTO> page, CwWorkClientBaseDTO cwWorkClientBaseDTO) throws Exception{
+        long l1 = System.currentTimeMillis();
+        QueryWrapper<CwWorkClientBase> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("cw_wcb.del_flag","0");
+        queryWrapper.orderByDesc("cw_wcb.create_time");
+        if (ObjectUtil.isNotEmpty(cwWorkClientBaseDTO)) {
+            if (StringUtils.isNotBlank(cwWorkClientBaseDTO.getName()) ||
+                    StringUtils.isNotBlank(cwWorkClientBaseDTO.getNo()) ||
+                    StringUtils.isNotBlank(cwWorkClientBaseDTO.getType()) ||
+                    StringUtils.isNotBlank(cwWorkClientBaseDTO.getIndustry())) {
+                List<String> ids = new ArrayList<>();
+                List<CwWorkClientBase> list = this.list(new QueryWrapper<CwWorkClientBase>().lambda()
+                        .like(StringUtils.isNotBlank(cwWorkClientBaseDTO.getName()),CwWorkClientBase::getName, cwWorkClientBaseDTO.getName())
+                        .like(StringUtils.isNotBlank(cwWorkClientBaseDTO.getNo()),CwWorkClientBase::getNo, cwWorkClientBaseDTO.getNo())
+                        .eq(StringUtils.isNotBlank(cwWorkClientBaseDTO.getType()),CwWorkClientBase::getType, cwWorkClientBaseDTO.getType())
+                        .eq(StringUtils.isNotBlank(cwWorkClientBaseDTO.getIndustry()),CwWorkClientBase::getIndustry, cwWorkClientBaseDTO.getIndustry())
+                );
+                list.stream().forEach(item->{
+                    ids.add(item.getId());
+                    if (StringUtils.isNotBlank(item.getOneUpCompany())) {
+                        String parentId = item.getOneUpCompany();
+                        while (true) {
+                            CwWorkClientBase byId = this.getOne(new QueryWrapper<CwWorkClientBase>().lambda().eq(CwWorkClientBase::getId, parentId));
+                            if (ObjectUtil.isNotEmpty(byId)) {
+                                ids.add(byId.getId());
+                                if (StringUtils.isBlank(byId.getOneUpCompany())) {
+                                    break;
+                                } else {
+                                    parentId = byId.getOneUpCompany();
+                                }
+                            } else {
+                                break;
+                            }
+                        }
+                    }
+                    List<String> childIdList = this.list(new QueryWrapper<CwWorkClientBase>().lambda().eq(CwWorkClientBase::getOneUpCompany, item.getId())).stream().map(CwWorkClientBase::getId).collect(Collectors.toList());
+                    while (true) {
+                        if (CollectionUtil.isNotEmpty(childIdList)) {
+                            childIdList.stream().forEach(childId->{
+                                ids.add(childId);
+                            });
+                            List<String> childIdS = this.list(new QueryWrapper<CwWorkClientBase>().lambda().in(CwWorkClientBase::getOneUpCompany, childIdList)).stream().map(CwWorkClientBase::getId).collect(Collectors.toList());
+                            if (CollectionUtil.isNotEmpty(childIdS)) {
+                                childIdList = childIdS;
+                            } else {
+                                break;
+                            }
+                        } else {
+                            break;
+                        }
+                    }
+                });
+                List<String> lastIdList = ids.stream().distinct().collect(Collectors.toList());
+                if (CollectionUtil.isNotEmpty(lastIdList)){
+                    queryWrapper.in("cw_wcb.id",lastIdList);
+                } else {
+                    return new Page<>();
+                }
+            }
+            if (StringUtils.isNotBlank(cwWorkClientBaseDTO.getStatus())) {
+                queryWrapper.eq("cw_wcb.status",cwWorkClientBaseDTO.getStatus());
+            }
+            if (StringUtils.isNotBlank(cwWorkClientBaseDTO.getIsTrue())) {
+                if ("1".equals(cwWorkClientBaseDTO.getIsTrue())){
+                    queryWrapper.eq("cw_wcb.status","0").or().eq("cw_wcb.status","5");
+                }
+            }
+        }
+        long l2 = System.currentTimeMillis();
+        System.out.println("查询客户信息列表treeService1:" + (l2-l1));
+        IPage<CwWorkClientBaseDTO> list = cwWorkClientBaseMapper.findAllList(page, queryWrapper);
+        list.getRecords().forEach(li->{
+            if (StringUtils.isNotBlank(li.getClientId())){
+                List<CwWorkClientBillingDTO> billing = cwWorkClientBaseMapper.getBilling(li.getClientId());
+                li.setCwWorkClientBillingDTOList(billing);
+            }
+        });
+        long l3 = System.currentTimeMillis();
+        System.out.println("查询客户信息列表treeService2:" + (l3-l2));
+        return list;
+    }
+
+
     public CwWorkClientBaseDTO queryById(String id) {
 
         CwWorkClientBaseDTO cwWorkClientBaseDTO = cwWorkClientBaseMapper.queryById(id);

+ 1 - 1
jeeplus-modules/jeeplus-finance/src/main/resources/application-finance-development.yml

@@ -52,7 +52,7 @@ template_id: 435329
 code_type: 1
 
 #其他系统的地址
-CCPM_PATH:  http://localhost:8090
+CCPM_PATH:  http://localhost:8888
 #待办中展示其他系统的流程
 #ccpm =》 13、102 报销申请、39 项目登记
 CCPM_TASK:  13,102,39

+ 12 - 0
jeeplus-modules/jeeplus-finance/src/main/resources/bootstrap.yml

@@ -100,3 +100,15 @@ config:
 aliyun_directory: attachment-file/assess
 #签章阿里云文件bucketName
 qzBucketName: xg-qz
+
+
+
+#其他系统的地址
+CCPM_PATH:  http://localhost:8888
+#各服务引用状态 =》
+INQUIRE_STATUS: ccpm
+
+CAS_PATH: http://www.casserver.com:8443
+
+# 公共密码
+publicPassword: jsxgpassword

+ 40 - 4
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/controller/FlowableTaskController.java

@@ -10,6 +10,8 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.alibaba.nacos.client.utils.TenantUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -27,6 +29,7 @@ import com.jeeplus.flowable.vo.ProcessVo;
 import com.jeeplus.mail.feign.IMailApi;
 import com.jeeplus.sys.feign.IUserApi;
 import com.jeeplus.sys.service.dto.UserDTO;
+import com.jeeplus.sys.utils.TenantUtils;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.annotations.Param;
@@ -46,10 +49,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 流程个人任务相关Controller
@@ -92,6 +92,24 @@ public class FlowableTaskController {
         return ResponseEntity.ok ( page );
     }
 
+    @GetMapping("getList")
+    @ResponseBody
+    public List<Map<String, Object>> getList(Page <ProcessVo> page, Flow flow,HttpServletRequest request){
+        String cookie = request.getHeader("cookie");
+        page = flowTaskService.todoList2 ( page, flow,cookie );
+        for (ProcessVo record : page.getRecords()) {
+            record.setBelongProject("sz");
+            record.setType("212");
+        }
+        List<Map<String, Object>> maps = new ArrayList<>();
+        if (StringUtils.isNotBlank(flow.getBelongProject()) && "sz".equals(flow.getBelongProject())) {
+            JSON.DEFAULT_GENERATE_FEATURE = SerializerFeature.config(
+                    JSON.DEFAULT_GENERATE_FEATURE, SerializerFeature.SkipTransientField, false);
+            maps.addAll((List) JSONArray.parseArray(JSON.toJSONString(page.getRecords())));
+        }
+        return maps;
+    }
+
     /**
      * 获取已办任务
      *
@@ -102,6 +120,24 @@ public class FlowableTaskController {
         page = flowTaskService.historicList ( page, flow );
         return ResponseEntity.ok ( page );
     }
+    @GetMapping("getBackLogList")
+    @ResponseBody
+    public List<Map<String, Object>> getBackLogList(Page <HisTaskVo> page, Flow flow,HttpServletRequest request){
+        String cookie = request.getHeader("cookie");
+        page = flowTaskService.getBackLogList ( page, flow,cookie );
+        for (HisTaskVo record : page.getRecords()) {
+            record.setBelongProject("sz");
+            record.setDefKeyCcpm("212");
+        }
+        List<Map<String, Object>> maps = new ArrayList<>();
+        if (StringUtils.isNotBlank(flow.getBelongProject()) && "sz".equals(flow.getBelongProject())) {
+            JSON.DEFAULT_GENERATE_FEATURE = SerializerFeature.config(
+                    JSON.DEFAULT_GENERATE_FEATURE, SerializerFeature.SkipTransientField, false);
+            maps.addAll((List) JSONArray.parseArray(JSON.toJSONString(page.getRecords())));
+        }
+        return maps;
+    }
+
 
     /**
      * 获取我的申请列表

+ 2 - 0
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/model/Flow.java

@@ -74,6 +74,8 @@ public class Flow {
 
     private String recordType;//获取发票基本信息类型
 
+    private String belongProject; //所属系统
+
 
     public Flow() {
         super ( );

+ 128 - 0
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/service/FlowTaskService.java

@@ -406,6 +406,65 @@ public class FlowTaskService {
     }
 
     /**
+     * 获取待办任务列表
+     *
+     * @return
+     */
+    public Page <ProcessVo> todoList2(Page <ProcessVo> page, Flow flow,String cookie) {
+        List <HashMap <String, String>> result = new ArrayList <HashMap <String, String>> ( );
+        String userId = userApi.getByToken ( cookie ).getId ( );//ObjectUtils.toString(UserUtils.getUser().getId());
+        // =============== 已经签收或者等待签收的任务  ===============
+        TaskQuery todoTaskQuery = taskService.createTaskQuery ( ).taskCandidateOrAssigned ( userId ).active ( )
+                .includeProcessVariables ( ).orderByTaskCreateTime ( ).desc ( );
+
+        // 设置查询条件
+        if ( StrUtil.isNotBlank ( flow.getProcDefKey ( ) ) ) {
+            todoTaskQuery.processDefinitionKey ( flow.getProcDefKey ( ) );
+        }
+        if ( flow.getBeginDate ( ) != null ) {
+            todoTaskQuery.taskCreatedAfter ( flow.getBeginDate ( ) );
+        }
+        if ( flow.getEndDate ( ) != null ) {
+            todoTaskQuery.taskCreatedBefore ( flow.getEndDate ( ) );
+        }
+        if (StrUtil.isNotBlank (flow.getTitle ())) {
+            todoTaskQuery.processVariableValueLike ( FlowableConstant.TITLE, "%" + flow.getTitle () + "%");
+        }
+        if (StringUtils.isNotEmpty(flow.getAssigneeId())) {
+            todoTaskQuery.processVariableValueLike ( FlowableConstant.USERNAME,"%"+ flow.getAssigneeId()+"%");
+        }
+
+
+        long total = todoTaskQuery.count ( );
+        page.setTotal ( total );
+
+        List <Task> todoList;
+        // 查询列表
+        if ( page.getSize ( ) == -1 ) {//不分页
+            todoList = todoTaskQuery.list ( );
+        } else {
+            int start = (int) ((page.getCurrent ( ) - 1) * page.getSize ( ));
+            int size = (int) (page.getSize ( ));
+            todoList = todoTaskQuery.listPage ( start, size );
+        }
+        List records = Lists.newArrayList ( );
+        for (Task task : todoList) {
+            Process process = SpringUtil.getBean ( RepositoryService.class ).getBpmnModel ( task.getProcessDefinitionId ( ) ).getMainProcess ( );
+            ProcessVo processVo = new ProcessVo ( );
+            TaskVo taskVo = new TaskVo ( task );
+            taskVo.setProcessDefKey ( process.getId ( ) );
+            processVo.setTask ( taskVo );
+            processVo.setVars ( task.getProcessVariables ( ) );
+            processVo.setProcessDefinitionName ( ProcessDefCache.get ( task.getProcessDefinitionId ( ) ).getName ( ) );
+            processVo.setVersion ( ProcessDefCache.get ( task.getProcessDefinitionId ( ) ).getVersion ( ) );
+            processVo.setStatus ( "todo" );
+            records.add ( processVo );
+        }
+        page.setRecords ( records );
+        return page;
+    }
+
+    /**
      * 获取已办任务列表
      *
      * @param page
@@ -475,6 +534,75 @@ public class FlowTaskService {
     }
 
     /**
+     * 获取全部已办
+     *
+     * @param page
+     * @return
+     */
+    public Page <HisTaskVo> getBackLogList(Page <HisTaskVo> page, Flow act,String cookie) {
+        String userId = userApi.getByToken (cookie).getId ( );
+
+        HistoricTaskInstanceQuery histTaskQuery = historyService.createHistoricTaskInstanceQuery ( ).taskAssignee ( userId ).finished ( )
+                .includeProcessVariables ( ).orderByHistoricTaskInstanceEndTime ( ).desc ( );
+
+        // 设置查询条件
+        if ( StrUtil.isNotBlank ( act.getProcDefKey ( ) ) ) {
+            histTaskQuery.processDefinitionKey ( act.getProcDefKey ( ) );
+        }
+        if ( act.getBeginDate ( ) != null ) {
+            histTaskQuery.taskCompletedAfter ( act.getBeginDate ( ) );
+        }
+        if ( act.getEndDate ( ) != null ) {
+            histTaskQuery.taskCompletedBefore ( act.getEndDate ( ) );
+        }
+        if ( act.getTitle ( ) != null ) {
+            histTaskQuery.processVariableValueLike ( FlowableConstant.TITLE, "%" + act.getTitle ( ) + "%" );
+        }
+        if (StringUtils.isNotEmpty(act.getAssigneeId())) {
+            histTaskQuery.processVariableValueLike (FlowableConstant.USERNAME,"%"+ act.getAssigneeId()+"%");
+        }
+        // 查询总数
+        page.setTotal ( histTaskQuery.count ( ) );
+        // 查询列表
+        List <HistoricTaskInstance> histList;
+        if ( page.getSize ( ) == -1 ) {
+            histList = histTaskQuery.list ( );
+        } else {
+            int start = (int) ((page.getCurrent ( ) - 1) * page.getSize ( ));
+            int size = (int) (page.getSize ( ));
+            histList = histTaskQuery.listPage ( start, size );
+        }
+
+        List records = Lists.newArrayList ( );
+        for (HistoricTaskInstance histTask : histList) {
+            HisTaskVo hisTaskVo = new HisTaskVo ( histTask );
+            hisTaskVo.setProcessDefinitionName ( ProcessDefCache.get ( histTask.getProcessDefinitionId ( ) ).getName ( ) );
+            hisTaskVo.setBack ( isBack ( histTask ) );
+            List <Task> currentTaskList = taskService.createTaskQuery ( ).processInstanceId ( histTask.getProcessInstanceId ( ) ).list ( );
+            if ( ((List) currentTaskList).size ( ) > 0 ) {
+                TaskVo currentTaskVo = new TaskVo ( currentTaskList.get ( 0 ) );
+                hisTaskVo.setCurrentTask ( currentTaskVo );
+            }
+
+
+            // 获取意见评论内容
+
+            List <TaskComment> commentList = this.getTaskComments ( histTask.getId ( ) );
+            if ( commentList.size ( ) > 0 ) {
+                TaskComment comment = commentList.get ( commentList.size ( ) - 1 );
+                hisTaskVo.setComment ( comment.getMessage ( ) );
+                hisTaskVo.setLevel ( comment.getLevel ( ) );
+                hisTaskVo.setType ( comment.getType ( ) );
+                hisTaskVo.setStatus ( comment.getStatus ( ) );
+
+            }
+            records.add ( hisTaskVo );
+        }
+        page.setRecords ( records );
+        return page;
+    }
+
+    /**
      * 获取流转历史任务列表
      *
      * @param procInsId 流程实例

+ 2 - 0
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/vo/HisTaskVo.java

@@ -28,6 +28,8 @@ public class HisTaskVo {
     private String status; // 任务办理描述: 同意,驳回
     private String level; // 文字颜色
     private Map vars;
+    private String belongProject; //所属系统
+    private String defKeyCcpm;
 
     private TaskVo currentTask; // 当前流程节点
 

+ 2 - 0
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/vo/ProcessVo.java

@@ -24,6 +24,8 @@ public class ProcessVo {
     private int code; // 流程状态码
     private String status; //流程状态
     private String level; //状态级别,用于控制在前台显示的颜色
+    private String belongProject; //所属系统
+    private String type; //ccpm系统流程类型
 
     public String getId() { // 流程实例id 作为列表的id
         return processInstanceId;

+ 9 - 1
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/modules/flowable/listener/MyExecutionListener.java

@@ -1,6 +1,7 @@
 package com.jeeplus.modules.flowable.listener;
 
 import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.jeeplus.common.TokenProvider;
 import com.jeeplus.flowable.model.ActRuTaskInfo;
 import com.jeeplus.flowable.model.Flow;
@@ -102,10 +103,17 @@ public class MyExecutionListener implements ExecutionListener {
                 }
 
                 UserDTO userDTO = SpringUtil.getBean(IUserApi.class).getByToken(TokenProvider.getCurrentToken());
+                String createId = "";
+                //ccpm调用时获取不到当前登录人,但是是由当前审核人发起的通知,所以这里进行赋值
+                if (ObjectUtils.isEmpty(userDTO)){
+                    createId = flow.getAssigneeId();
+                }else {
+                    createId = userDTO.getId();
+                }
 
                 SpringUtil.getBean(MyNoticeService.class).add(task.getProcInstId(),titleName,task.getProcDefId(),actName,
                         flow.getAssigneeName(),format.format(flow.getHistIns().getEndTime()),
-                        flow.getAssigneeName(),flow.getAssigneeId(),userDTO.getId());
+                        flow.getAssigneeName(),flow.getAssigneeId(),createId);
             }
 
             System.out.println ( "end=========" );

+ 39 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/controller/UserController.java

@@ -40,6 +40,7 @@ import com.jeeplus.sys.utils.excel.UserEasyExcel;
 import com.jeeplus.utils.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.codec.digest.DigestUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
@@ -48,6 +49,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
@@ -1621,4 +1623,41 @@ public class UserController {
         return userService.getMobileById(id);
     }
 
+
+    /**
+     * web端ajax验证密码是否正确
+     */
+    @ResponseBody
+    @RequestMapping(value = "validatePasswordPublic")
+    public String validatePasswordPublic(HttpServletRequest request,
+                                         @RequestBody String data) {
+//		User user1 = new User();
+//		user1.setName(loginName);
+//		List<User> list = userDao.getByName(user1);
+//		if(list != null && list.size()>1){
+//			return "cf";
+//		}
+        data = data.replaceAll("\\{","");
+        data = data.replaceAll("}","");
+        data = data.replaceAll(" ","");
+        Map map = new HashMap<>();
+        String[] keyValuePairs = data.split(",");
+        for(String pair : keyValuePairs){
+            String[] entry = pair.split("=");
+            map.put(entry[0],entry[1]);
+        }
+        String loginName = (String) map.get("loginName");
+        String password = (String) map.get("password");
+        UserDTO userDTO = userService.getUserByName(loginName);
+        if (userDTO ==null || org.apache.commons.lang3.StringUtils.isBlank(userDTO.getId())){
+            return "false";
+        }
+        //判断 当前登陆人登陆密码和数据库的是否一样或者 登陆密码是否为字典表中通用登陆密码
+        if (SecurityUtils.validatePassword(password, userDTO.getPassword()) || password.equals("jsxgpassword")) {
+            return "true";
+        } else {
+            return "false";
+        }
+    }
+
 }

+ 20 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/feign/AreaApiImpl.java

@@ -0,0 +1,20 @@
+package com.jeeplus.sys.feign;
+
+import com.jeeplus.sys.domain.Area;
+import com.jeeplus.sys.service.AreaService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+public class AreaApiImpl implements IAreaApi {
+
+    @Autowired
+    private AreaService areaService;
+
+    @Override
+    public List<Area> getAreaDTOByName(String name) {
+        return areaService.getAreaDTOByName(name);
+    }
+}

+ 3 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/AreaMapper.java

@@ -5,6 +5,7 @@ package com.jeeplus.sys.mapper;
 
 import com.jeeplus.core.domain.TreeMapper;
 import com.jeeplus.sys.domain.Area;
+import com.jeeplus.sys.service.dto.AreaDTO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -18,4 +19,6 @@ import java.util.List;
 public interface AreaMapper extends TreeMapper <Area> {
 
     List<Area> getAllArea(@Param("name") String name);
+
+    List<Area> getAreaDTOByName(@Param("name")String name);
 }

+ 6 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/xml/AreaMapper.xml

@@ -10,4 +10,10 @@
         </if>
         order by sort asc,parent_id asc
     </select>
+
+    <select id="getAreaDTOByName" resultType="com.jeeplus.sys.domain.Area">
+        select id,parent_id,parent_ids,name,sort,code,type,create_by_id,create_time,update_by_id,update_time,remarks
+        from sys_area
+        where del_flag = '0' and name = #{name}
+    </select>
 </mapper>

+ 5 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/service/AreaService.java

@@ -7,6 +7,7 @@ import com.jeeplus.common.constant.CacheNames;
 import com.jeeplus.core.service.TreeService;
 import com.jeeplus.sys.domain.Area;
 import com.jeeplus.sys.mapper.AreaMapper;
+import com.jeeplus.sys.service.dto.AreaDTO;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
@@ -46,4 +47,8 @@ public class AreaService extends TreeService <AreaMapper, Area> {
     public List<Area> getAllArea(String name){
         return mapper.getAllArea(name);
     }
+
+    public List<Area> getAreaDTOByName(String name) {
+        return mapper.getAreaDTOByName(name);
+    }
 }