Forráskód Böngészése

发票数据同步

sangwenwei 6 hónapja
szülő
commit
afea9b346a
20 módosított fájl, 593 hozzáadás és 70 törlés
  1. 18 0
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/domain/UserManageOffice.java
  2. 73 23
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/controller/CcpmList.java
  3. 45 41
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/controller/receiveData.java
  4. 116 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/ProjectReportData.java
  5. 2 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/RuralProjectRecordsVo.java
  6. 29 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/RuralReportConsultant.java
  7. 78 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkInvoiceProjectRelationVo.java
  8. 8 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkInvoiceVo.java
  9. 46 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkattachmentVo.java
  10. 1 2
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/controller/CwFinanceInvoiceController.java
  11. 2 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/mapper/CwFinanceInvoiceMapper.java
  12. 21 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/mapper/xml/CwFinanceInvoiceMapper.xml
  13. 98 1
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/CwFinanceInvoiceService.java
  14. 2 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/dto/CwFinanceInvoiceDTO.java
  15. 1 1
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReportMapper.xml
  16. 1 1
      jeeplus-modules/jeeplus-finance/src/main/resources/application-finance-development.yml
  17. 0 1
      jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/controller/FlowableTaskController.java
  18. 12 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/UserMapper.java
  19. 16 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/xml/UserMapper.xml
  20. 24 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/service/UserService.java

+ 18 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/domain/UserManageOffice.java

@@ -0,0 +1,18 @@
+package com.jeeplus.sys.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 用户管理部门
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("sys_user_manage_office")
+public class UserManageOffice {
+    //用户id
+    private String userId;
+    //部门id
+    private String officeId;
+}

+ 73 - 23
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/controller/CcpmList.java

@@ -39,6 +39,7 @@ import com.jeeplus.sys.feign.*;
 
 import com.jeeplus.sys.service.dto.OfficeDTO;
 import com.jeeplus.sys.service.dto.UserDTO;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
@@ -98,6 +99,9 @@ public class CcpmList  {
     @Resource
     private CwProjectClientContactMapper cwProjectClientContactMapper;
 
+    @Resource
+    private CwProjectReviewNewTeamMapper newTeamMapper;
+
 
 
 
@@ -142,8 +146,7 @@ public class CcpmList  {
                 for (RuralProjectRecordsVo recordsVo : ruralProjectRecordsVos) {
                     //项目
                     CwProjectRecords cwProjectRecords = new CwProjectRecords();
-                    //复核
-                    CwProjectReviewNew cwProjectReviewNew = new CwProjectReviewNew();
+
                     //报告
                     CwProjectReport report = new CwProjectReport();
                     CwProjectInfoData cwProjectInfoData = new CwProjectInfoData();
@@ -267,33 +270,13 @@ public class CcpmList  {
                             }
                         }
                     }
-                    //质量复核
-                    if (StringUtils.isNotBlank(recordsVo.getPrdId())){
-                        //复核信息
-                        cwProjectReviewNew.setId(recordsVo.getPrdId());
-                        cwProjectReviewNew.setProjectId(recordsVo.getId());
-                        cwProjectReviewNew.setReviewStatus(recordsVo.getProjectReportStatus().toString());
-                        cwProjectReviewNew.setTenantId("ccpm");
-                        if (StringUtils.isNotBlank(recordsVo.getCreateNamePhone())){
-                            Optional<String> matchingUserId = allUserInfo.stream()
-                                    .filter(user -> user.getMobile().equals(recordsVo.getCreateNamePhone()))
-                                    .map(UserDTO::getId)
-                                    .findFirst();
-                            if (matchingUserId.isPresent()){
-                                cwProjectReviewNew.setCreateById(matchingUserId.get());
-                                cwProjectReviewNew.setUpdateById(matchingUserId.get());
-                            }
-
-                        }
-                        cwProjectReviewNew.setCreateTime(recordsVo.getCreateDate());
-                        cwProjectReviewNewMapper.insert(cwProjectReviewNew);
-                    }
                     //报告
                     if (StringUtils.isNotBlank(recordsVo.getPrdId())){
                         String id = UUID.randomUUID().toString().replace("-", "");
                         //报告信息
                         report.setId(id);
                         report.setProjectId(recordsVo.getId());
+//                        report.setStatus("5");
                         report.setTenantId("ccpm");
                         if (StringUtils.isNotBlank(recordsVo.getCreateNamePhone())){
                             Optional<String> matchingUserId = allUserInfo.stream()
@@ -329,6 +312,11 @@ public class CcpmList  {
                         cwProjectInfoData.setCreateTime(recordsVo.getCreateTime());
                         cwProjectInfoMapper.insert(cwProjectInfoData);
                     }
+                    //质量复核
+                    if (StringUtils.isNotBlank(recordsVo.getPrdId())){
+                        saveReviewNew(recordsVo,report,allUserInfo);
+                    }
+
                     //报告签发
                     if (StringUtils.isNotBlank(recordsVo.getPrdtId())){
                         cwProjectReportSignAndIssue.setId(recordsVo.getPrdtId());
@@ -411,6 +399,68 @@ public class CcpmList  {
 
     }
 
+    private void saveReviewNew(RuralProjectRecordsVo recordsVo,CwProjectReport report,List<UserDTO> allUserInfo) {
+        //复核
+        CwProjectReviewNew cwProjectReviewNew = new CwProjectReviewNew();
+        //复核信息
+        cwProjectReviewNew.setId(recordsVo.getPrdId());
+        cwProjectReviewNew.setProjectId(recordsVo.getId());
+        cwProjectReviewNew.setReportId(report.getId());
+        cwProjectReviewNew.setReviewStatus(recordsVo.getProjectReportStatus().toString());
+        cwProjectReviewNew.setTenantId("ccpm");
+        if (StringUtils.isNotBlank(recordsVo.getCreateNamePhone())){
+            Optional<String> matchingUserId = allUserInfo.stream()
+                    .filter(user -> user.getMobile().equals(recordsVo.getCreateNamePhone()))
+                    .map(UserDTO::getId)
+                    .findFirst();
+            if (matchingUserId.isPresent()){
+                cwProjectReviewNew.setCreateById(matchingUserId.get());
+                cwProjectReviewNew.setUpdateById(matchingUserId.get());
+            }
+
+        }
+        cwProjectReviewNew.setCreateTime(recordsVo.getCreateDate());
+        if (recordsVo.getReportData() != null){
+//                            saveReviewNew(recordsVo.getReportData());
+            ProjectReportData reportData = recordsVo.getReportData();
+            BeanUtils.copyProperties(reportData,cwProjectReviewNew);
+            if (CollectionUtils.isNotEmpty(reportData.getConsultants())){
+                for (RuralReportConsultant consultant : reportData.getConsultants()) {
+                    CwProjectReviewNewTeam reviewNewTeam = new CwProjectReviewNewTeam();
+                    reviewNewTeam.setCreateById(recordsVo.getCreateById());
+                    reviewNewTeam.setCreateTime(recordsVo.getCreateDate());
+                    reviewNewTeam.setUpdateById(recordsVo.getUpdateById());
+                    reviewNewTeam.setUpdateTime(recordsVo.getUpdateTime());
+                    reviewNewTeam.setReportId(recordsVo.getId());
+                    if (StringUtils.isNotBlank(consultant.getRole())){
+
+                    }
+                    reviewNewTeam.setUserRole(consultant.getRole());
+                    if (StringUtils.isNotBlank(consultant.getZixunyuanName())){
+                        if (consultant.getZixunyuanName().contains("陈红星")){
+                            String substring = consultant.getZixunyuanName().substring(consultant.getZixunyuanName().lastIndexOf("(") + 1, consultant.getZixunyuanName().lastIndexOf(")"));
+                            String id = SpringUtil.getBean(IUserApi.class).getUserIdByName(substring);
+                            if (StringUtils.isNotBlank(id)){
+                                reviewNewTeam.setUserId(id);
+                            }
+
+                        }else {
+                            String id = SpringUtil.getBean(IUserApi.class).getUserIdByName(consultant.getZixunyuanName());
+                            if (StringUtils.isNotBlank(id)){
+                                reviewNewTeam.setUserId(id);
+                            }
+                        }
+                    }
+                    reviewNewTeam.setContent(consultant.getWordnr());
+                    reviewNewTeam.setOpinion(consultant.getAuditOpinion());
+                    reviewNewTeam.setTenantId("ccpm");
+                    newTeamMapper.insert(reviewNewTeam);
+                }
+            }
+        }
+        cwProjectReviewNewMapper.insert(cwProjectReviewNew);
+    }
+
 
     /**
      * 获取合同信息

+ 45 - 41
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/controller/receiveData.java

@@ -328,6 +328,17 @@ public class receiveData {
         if (ObjectUtils.isNotEmpty(ruralProjectRecordsVo)){
             //先进行删除
             cwProjectRecordsMapper.deleteInfoById(ruralProjectRecordsVo.getId());
+            //根据报告id删除报告编号信息
+            List<CwProjectReportData> reportData = cwProjectReportMapper.getByProjectId(ruralProjectRecordsVo.getId());
+            for (CwProjectReportData reportDatum : reportData) {
+                cwProjectInfoMapper.deleteByReportId(reportDatum.getId());
+            }
+            //根据项目id删除报告信息
+            cwProjectReportMapper.deleteByProjectId(ruralProjectRecordsVo.getId());
+
+            //报告
+            CwProjectReport report = new CwProjectReport();
+            CwProjectInfoData cwProjectInfoData = new CwProjectInfoData();
 
             CwProjectRecords cwProjectRecords = new CwProjectRecords();
             cwProjectRecords.setId(ruralProjectRecordsVo.getId());//项目id
@@ -440,6 +451,37 @@ public class receiveData {
                     }
                 }
             }
+            String id = UUID.randomUUID().toString().replace("-", "");
+            //报告信息
+            report.setId(id);
+            report.setProjectId(ruralProjectRecordsVo.getId());
+            report.setTenantId("ccpm");
+//            report.setStatus("5");
+            if (StringUtils.isNotBlank(ruralProjectRecordsVo.getCreateName())){
+                UserDTO userDTO = SpringUtil.getBean(IUserApi.class).getByLoginNameNotTenantId(ruralProjectRecordsVo.getCreateName());
+                if (userDTO != null){
+                    report.setCreateById(userDTO.getId());
+                    report.setUpdateById(userDTO.getId());
+                }
+
+            }
+            cwProjectReportMapper.insert(report);
+
+            //报告编号
+            String id1 = UUID.randomUUID().toString().replace("-", "");
+            cwProjectInfoData.setId(id1);
+            cwProjectInfoData.setReportId(id);
+            cwProjectInfoData.setReportNo(ruralProjectRecordsVo.getProjectReportNumber());
+            cwProjectInfoData.setTenantId("ccpm");
+            if (StringUtils.isNotBlank(ruralProjectRecordsVo.getCreateName())){
+                UserDTO userDTO = SpringUtil.getBean(IUserApi.class).getByLoginNameNotTenantId(ruralProjectRecordsVo.getCreateName());
+                if (userDTO != null){
+                    cwProjectInfoData.setCreateById(userDTO.getId());
+                    cwProjectInfoData.setUpdateById(userDTO.getId());
+                }
+
+            }
+            cwProjectInfoMapper.insert(cwProjectInfoData);
         }
     }
 
@@ -448,23 +490,16 @@ public class receiveData {
     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();
+        //获取报告号id
+        List<CwProjectReportData> projectId = cwProjectReportMapper.getByProjectId(recordsVo.getId());
 
         if (StringUtils.isNotBlank(recordsVo.getPrdId())) {
             //保存质量复核及报告信息
             cwProjectReviewNew.setId(recordsVo.getPrdId());
             cwProjectReviewNew.setProjectId(recordsVo.getId());
+            cwProjectReviewNew.setReportId(projectId.get(0).getId());
             cwProjectReviewNew.setReviewStatus(recordsVo.getProjectReportStatus().toString());
             cwProjectReviewNew.setTenantId("ccpm");
             if (StringUtils.isNotBlank(recordsVo.getCreateName())){
@@ -476,37 +511,6 @@ public class receiveData {
 
             }
             cwProjectReviewNewMapper.insert(cwProjectReviewNew);
-
-            String id = UUID.randomUUID().toString().replace("-", "");
-            //报告信息
-            report.setId(id);
-            report.setProjectId(recordsVo.getId());
-            report.setTenantId("ccpm");
-            if (StringUtils.isNotBlank(recordsVo.getCreateName())){
-                UserDTO userDTO = SpringUtil.getBean(IUserApi.class).getByLoginNameNotTenantId(recordsVo.getCreateName());
-                if (userDTO != null){
-                    report.setCreateById(userDTO.getId());
-                    report.setUpdateById(userDTO.getId());
-                }
-
-            }
-            cwProjectReportMapper.insert(report);
-
-            //报告编号
-            String id1 = UUID.randomUUID().toString().replace("-", "");
-            cwProjectInfoData.setId(id1);
-            cwProjectInfoData.setReportId(id);
-            cwProjectInfoData.setReportNo(recordsVo.getProjectReportNumber());
-            cwProjectInfoData.setTenantId("ccpm");
-            if (StringUtils.isNotBlank(recordsVo.getCreateName())){
-                UserDTO userDTO = SpringUtil.getBean(IUserApi.class).getByLoginNameNotTenantId(recordsVo.getCreateName());
-                if (userDTO != null){
-                    cwProjectInfoData.setCreateById(userDTO.getId());
-                    cwProjectInfoData.setUpdateById(userDTO.getId());
-                }
-
-            }
-            cwProjectInfoMapper.insert(cwProjectInfoData);
         }
     }
 

+ 116 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/ProjectReportData.java

@@ -0,0 +1,116 @@
+/**
+ * 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 com.jeeplus.sys.service.dto.UserDTO;
+import com.jeeplus.sys.service.dto.WorkAttachmentInfoDTO;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 报告详情Entity
+ * @author yangfan
+ * @version 2018-06-05
+ */
+@Data
+public class ProjectReportData extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+	private String companyId;		// 公司id
+	private String officeId;		// 部门id
+	private String officeName;		// 部门id
+
+	private String name;		// 报告名称
+	private String number;		// 报告编号
+	private String type;		// 工作内容类型
+	private String achievementType;		// 成果类型
+	private String reviewStandard;		// 复核标准
+	private UserDTO signCostOne;		// 签字造价师一
+	private UserDTO signCostTwo;		// 签字造价师二
+	private UserDTO master;		// 负责人
+	private Date reportDate;		// 报告日期
+	private String fileStatus;		// 归档状态
+	private String downFileStatus;		// 归档状态
+	private String status;		// 报告状态 1待归档 2已归档
+	private String invalidStatus;		// 报告作废状态
+	private Date startDate;
+	private Date endDate;
+	private List<WorkAttachmentInfoDTO> workAttachments;
+	private String processInstanceId; // 流程实例编号
+	private String invalidProcessInstanceId; // 流程实例编号
+	private String home;
+	private String reportId;
+	private String numberPath;
+	private String tempType;    //模板类型
+	private String bzshbUserId; //总审用户id
+	private String ZiXunShouRu;	//造价咨询营业收入(万元)
+	private String ziXunShou;	//造价咨询营业收入
+
+	private Integer beforeCount;
+	private String clientName;
+	private String contractNum;
+	private String contractName;
+	private String projectMaster;
+	private String projectMasterId;
+	private Date createStartDate;
+	private Date createEndDate;
+	private Date createDate;
+	private String typeName;
+	private String projectName;
+	private String projectNum;
+	private String signCostOneName;
+	private String signCostTwoName;
+	private String masterName;
+	private String upId;
+
+
+	private String reviewFee;  //送审价
+	private String approvalFee;  //审定价
+	private String contractFee;   //合同价
+	private String verifyFee;    //核增核减额
+	private String verifyRate;    //核增核减率
+	private String buildingRate;    //土建比例
+	private String installRate;    //安装比例
+	private String consultFee;    //咨询标的额
+	private String buildingFee;   //土建额
+	private String installFee;    //安装额
+	private String recordNum;     //归档申请编号
+	private String templateTypeName;
+	private String conditionType;   //判断条件
+	private Date auditPassDate;   //审核通过日期
+	private UserDTO consultant;		// 专业咨询员
+	private String consultantRemarks;  //咨询员意见
+	private Date consultantDate;  //咨询员审核时间
+	private UserDTO principal;		// 项目负责人
+	private String principalRemarks;  //项目负责人意见
+	private Date principalDate;  //项目负责人审核时间
+	private UserDTO technicist;		// 项目技术员
+	private String technicistRemarks;  //项目技术员意见
+	private Date technicistDate;  //项目技术员审核时间
+
+	private String contractCategory;	//报告合同类别
+	private String contractRate;	//合同费率
+
+	private String examinScore;		//抽查总分
+	private Integer signatureFlag;		//是否审定单签章(1为已签章)
+	private String signatureDocumentId;		//签章documentid
+	private String signatureContractId;		//签章contractid
+	private String signatureUrl;		//审定单签章文件路径
+	private Integer signatureUrlFlag;		//审定单签章文件路径(判定条件)
+	private String signatureInvalidDocumentId;		//无效的签章documentid
+	private String signatureFileName;		//签章文件名称
+	private UserDTO signatureUploadFileUser;		//签章文件上传人信息
+	private Date signatureUploadDate;		//签章文件上传时间
+	private Date firstAuditDate;  //质量复核初次审核时间
+	private String overReportStatus;  //是否超期
+	private String createName;
+	private List<RuralReportConsultant> consultants;
+
+	}

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

@@ -71,6 +71,8 @@ public class RuralProjectRecordsVo extends BaseEntity {
 	private Double estimateTotalFees;  //预估总投资额
 	private String createName;
 	private Date createDate;
+	private ProjectReportData reportData;
+	private String bzshbUserName; //总审用户id
 
 //	private ProjectReportData reportData;//报告
 

+ 29 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/RuralReportConsultant.java

@@ -0,0 +1,29 @@
+package com.jeeplus.finance.ccpm.vo;
+
+
+import lombok.Data;
+
+/**
+ * 新增报告-咨询员表
+ */
+@Data
+public class RuralReportConsultant {
+
+    private String zixunyuanId;   //咨询员序号   自增长
+    private String zixunyuan;       //咨询员
+    private String zixunyuanName;       //咨询员(录入)
+    private String zhucezigezhID;  //注册/资格证号
+    private String zhucezigezhKey;  //注册/资格证号key键
+    private String zhucezigezh;  //资格证
+    private String major;           //专业
+    private String wordnr;          //本人复制内容
+    private String projectId;       //项目id
+    private String auditOpinion;          //审核意见
+    private String role;          //角色
+    private String roleFlag;          //角色判定
+    private String idCard;          //身份证号
+    private Double wcyysrbl;        //完成营业收入比例( %)
+    private Double wcyysr;          //完成营业收入(元)
+    private String signatureStampUrl;          //签字章
+
+   }

+ 78 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkInvoiceProjectRelationVo.java

@@ -0,0 +1,78 @@
+package com.jeeplus.finance.ccpm.vo;
+
+
+import com.google.common.collect.Lists;
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class WorkInvoiceProjectRelationVo extends BaseEntity {
+    private String invoiceId;       //开票编号
+    private String projectId;       //项目id
+    private String projectName;     //项目名称
+    private String workContractName;    //合同名称
+    private String projectNum;     //项目编号
+    private String clientName;  //委托方
+    private String reportDataNum;   //报告号
+    private Integer isProject;  //是否是项目开票
+    private String details;     //非项目-开票详情
+    private String contractId;     //非项目-合同id
+    private String invoiceState;     //开票状态
+
+
+
+    public static final String SERIAL_BIZCODE = "3";//编号模板类型
+
+    private static final long serialVersionUID = 1L;
+    private String number;		// 发票申请编号
+    private String processInstanceId; // 流程实例编号
+    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 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 List<WorkInvoiceProjectRelationVo> workInvoiceProjectRelationList;//开票和项目关系表
+    private Integer notifyFlag; //代办判定条件
+    private String notifyId; //代办判定条件
+    private String widNumber; //发票号
+    private String widTotalMoney; //发票金额
+    private Double widTotalMoneyD; //发票金额
+
+}

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

@@ -8,6 +8,7 @@ import com.google.common.collect.Lists;
 
 import com.jeeplus.core.domain.BaseEntity;
 
+import com.jeeplus.sys.service.dto.AreaDTO;
 import lombok.Data;
 
 
@@ -28,6 +29,7 @@ public class WorkInvoiceVo extends BaseEntity {
 	private static final long serialVersionUID = 1L;
 	private String number;		// 发票申请编号
 	private String processInstanceId; // 流程实例编号
+	private WorkClientInfoVo client;		// 实际开票单位
 	private String projectName;		// 项目名称
 	private String reportNumber;		// 报告号
 	private Double money;		// 价税合计
@@ -69,11 +71,13 @@ public class WorkInvoiceVo extends BaseEntity {
 	private String adminFlag;		// 管理员判断
 	private String cancellationRemark;		// 作废原因
 	private List<WorkInvoiceDetailVo> workAccountList = Lists.newArrayList();//发票明细
+	private List<WorkInvoiceProjectRelationVo> workInvoiceProjectRelationList;//开票和项目关系表
 	private Integer notifyFlag; //代办判定条件
 	private String notifyId; //代办判定条件
 	private String widNumber; //发票号
 	private String widTotalMoney; //发票金额
 	private Double widTotalMoneyD; //发票金额
+	private AreaDTO area; //对账地区
 
 
 
@@ -103,5 +107,9 @@ public class WorkInvoiceVo extends BaseEntity {
 	private Integer adventDate; 	//未收款天数
 	private Integer year; 	//年份信息
 	private String type; //发票所属系统
+	private List<WorkattachmentVo> workAttachments;//附件
+	private String createBy;
+	private Date createDate;
+
 
 }

+ 46 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/ccpm/vo/WorkattachmentVo.java

@@ -0,0 +1,46 @@
+/**
+ * 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.Date;
+
+/**
+ * 附件信息Entity
+ * @author yangfan
+ * @version 2017-10-11
+ */
+@Data
+public class WorkattachmentVo {
+
+	private static final long serialVersionUID = 1L;
+	private String url;		// 附件地址
+	private String type;		// 附件类型
+	private String attachmentId;		// 附件id
+	private String attachmentUser;		// 上传人
+	private String attachmentName;		// 文件名
+	private String companyId;           //企业id
+	private String attachmentFlag;     //附件类别(0:评价汇总表、1:标书方案编制表)
+	private String divIdType;//判定条件
+	private String temporaryUrl;		// 附件地址(临时地址)
+
+	private String reportDataName;//成果文件名称
+	private Integer quoteResult;//是否为引用文件判定
+	private String quoteId;//被引用文件id
+
+	private String collectFlag;		// 收藏判定
+	private String fileSize;	//文件大小
+	private String projectId;	//项目id
+	private String sort;	//排序
+	private String description;	//文件描述
+
+	private Date createDate;
+	private String id;
+	private String createBy;
+
+}

+ 1 - 2
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/controller/CwFinanceInvoiceController.java

@@ -16,8 +16,7 @@ import com.jeeplus.finance.invoice.util.EasyPoiUtil;
 import com.jeeplus.flowable.feign.IFlowableApi;
 import com.jeeplus.logging.annotation.ApiLog;
 import com.jeeplus.logging.constant.enums.LogTypeEnum;
-//import com.jeeplus.sys.utils.DictUtils;
-//import com.jeeplus.sys.utils.SpringContextHolder;
+
 import com.jeeplus.sys.service.dto.UserDTO;
 import com.jeeplus.sys.utils.UserUtils;
 import io.swagger.annotations.Api;

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

@@ -20,6 +20,8 @@ public interface CwFinanceInvoiceMapper extends BaseMapper<CwFinanceInvoice> {
     public IPage<CwFinanceInvoiceDTO> findList(Page<CwFinanceInvoiceDTO> page, @Param(Constants.WRAPPER) QueryWrapper<CwFinanceInvoice> queryWrapper);
     @InterceptorIgnore(tenantLine = "true")
     public CwFinanceInvoiceDTO queryById(@Param("id") String id);
+    @InterceptorIgnore(tenantLine = "true")
+    public CwFinanceInvoiceDTO queryByIdNew(@Param("id") String id);
 
     public List<String> getIdByProjectId(@Param("id") String id);
 

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

@@ -46,6 +46,7 @@
             <result property="taskId" column="task_id" jdbcType="VARCHAR"/>
             <result property="isMultiple" column="is_multiple" jdbcType="VARCHAR"/>
             <result property="billingId" column="billing_id" jdbcType="VARCHAR"/>
+            <result property="reportType" column="report_type" jdbcType="VARCHAR"/>
             <association property="financeInvoiceInvalidDTO" column="id" select="getFii" javaType="com.jeeplus.finance.invoice.service.dto.CwFinanceInvoiceInvalidDTO"></association>
             <collection property="financeInvoiceReceivablesDTOList" column="id" select="getFirList" ofType="com.jeeplus.finance.invoice.service.dto.CwFinanceInvoiceReceivablesDTO"></collection>
             <collection property="financeInvoiceBaseDTOList" column="id" select="getBaseList" ofType="com.jeeplus.finance.invoice.service.dto.CwFinanceInvoiceBaseDTO"></collection>
@@ -286,6 +287,26 @@
         where fi.del_flag = '0' and fi.id = #{id}
     </select>
 
+    <select id="queryByIdNew" 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,
+        sua.name as 'createByName'
+        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 sua on fi.create_by_id = sua.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.id = #{id}
+    </select>
+
     <select id="queryByProcId" resultMap="BaseResultMap">
         select
         DISTINCT

+ 98 - 1
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/CwFinanceInvoiceService.java

@@ -7,12 +7,16 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 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.ccpm.vo.*;
 import com.jeeplus.finance.invoice.domain.*;
 import com.jeeplus.finance.invoice.mapper.*;
 import com.jeeplus.finance.invoice.service.dto.CwFinanceInvoiceBaseDTO;
@@ -24,6 +28,7 @@ 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.mapper.CwProjectReportMapper;
+import com.jeeplus.finance.utils.Global;
 import com.jeeplus.finance.workClientInfo.domain.CwWorkClientBase;
 import com.jeeplus.finance.workClientInfo.domain.CwWorkClientBilling;
 import com.jeeplus.finance.workClientInfo.service.CwWorkClientBillingService;
@@ -32,17 +37,21 @@ 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.domain.WorkAttachmentInfo;
 import com.jeeplus.sys.feign.IDictApi;
 import com.jeeplus.sys.feign.IRoleApi;
 import com.jeeplus.sys.feign.IUserApi;
 import com.jeeplus.sys.feign.IWorkAttachmentApi;
 //import com.jeeplus.sys.service.UserService;
+import com.jeeplus.sys.service.dto.AreaDTO;
 import com.jeeplus.sys.service.dto.RoleDTO;
 import com.jeeplus.sys.service.dto.UserDTO;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.http.ResponseEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.*;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -69,6 +78,8 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
     private CwProjectRecordsMapper cwProjectRecordsMapper;
     @Resource
     private CwProjectReportMapper cwProjectReportMapper;
+    @Resource
+    private RestTemplate restTemplate;
 
 
 //    @Resource
@@ -532,8 +543,94 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
                 cwFinanceInvoiceInvalidMapper.insert(cwFinanceInvoiceInvalid);
             }
         }
+
+        //新增时将数据同步到ccpm系统中
+        cwFinanceInvoiceDTO.setId(cwFinanceInvoice.getId());
+        cwFinanceInvoiceDTO.setNo(cwFinanceInvoice.getNo());
+        tractToCcpm(cwFinanceInvoiceDTO);
+
         return cwFinanceInvoice;
     }
+    private ObjectMapper objectMapper = new ObjectMapper();
+    /**
+     * 同步数据到ccpm
+     * @param dto
+     */
+    private void tractToCcpm(CwFinanceInvoiceDTO dto) throws JsonProcessingException {
+        CwFinanceInvoiceDTO cwFinanceInvoiceDTO = cwFinanceInvoiceMapper.queryByIdNew(dto.getId());
+        if (cwFinanceInvoiceDTO != null){
+            dto.setCreateByName(cwFinanceInvoiceDTO.getCreateByName());
+            dto.setCreateTime(cwFinanceInvoiceDTO.getCreateTime());
+            dto.setReconciliationAreaName(cwFinanceInvoiceDTO.getReconciliationAreaName());
+            dto.setReconciliationPeopleName(cwFinanceInvoiceDTO.getReconciliationPeopleName());
+            dto.setBillingPeopleRealName(cwFinanceInvoiceDTO.getBillingPeopleRealName());
+            dto.setBillingPeople(cwFinanceInvoiceDTO.getBillingPeople());
+            dto.setBillingDate(cwFinanceInvoiceDTO.getBillingDate());
+            dto.setFinanceInvoiceDetailDTOList(cwFinanceInvoiceDTO.getFinanceInvoiceDetailDTOList());
+            dto.setFinanceInvoiceBaseDTOList(cwFinanceInvoiceDTO.getFinanceInvoiceBaseDTOList());
+            dto.setWorkAttachmentDtoList(cwFinanceInvoiceDTO.getWorkAttachmentDtoList());
+            dto.setCollectDate(cwFinanceInvoiceDTO.getCollectDate());
+            String label = SpringUtil.getBean(IDictApi.class).getDictLabel(cwFinanceInvoiceDTO.getReceivablesType(), "invoice_receivables_type", "");
+            dto.setReceivablesTypeLabel(label);
+            String contentLabel = SpringUtil.getBean(IDictApi.class).getDictLabel(cwFinanceInvoiceDTO.getBillingContent(), "invoice_billing_content", "");
+            dto.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
+                    dto.setTelPhone(cwWorkClientBilling.getPhone());
+                } else {
+                    // 如果通过billingId(开票信息id)查询不到数据或者查询到数据的phone值为空
+                    // 将billingId(开票信息id)置空,因为前端根据billingId是否有值来判断->是否允许电话号码可以手填
+                    dto.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替换
+                    dto.setBillingWorkplaceReal(cwWorkClientBase.getName());
+                }
+            }
+
+//            WorkInvoiceVo workInvoiceVo = transformInfo(dto);
+            String json = objectMapper.writeValueAsString(dto);
+            String path = Global.getConfig("CCPM_PATH");
+            String url = path+"/a/cpa_finance/saveInfo";
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_JSON);
+            HttpEntity<String> httpEntity = new HttpEntity<>(json, headers);
+            try {
+                restTemplate.exchange(url, HttpMethod.POST,httpEntity,String.class);
+            } catch (Exception e) {
+                // 记录错误日志或进行其他处理
+                System.err.println("Error sending project info to cloud: " + e.getMessage());
+            }
+        }
+
+    }
+
+
+    private static Double parseDouble(String value) {
+        if (value == null || value.isEmpty()) {
+            return null; // 如果值为 null 或为空,返回 null
+        }
+        try {
+            return Double.parseDouble(value);
+        } catch (NumberFormatException e) {
+            return null; // 如果解析失败,返回 null
+        }
+    }
+
+    private static String checkString(String value) {
+        return (value == null || value.isEmpty()) ? null : value; // 如果字符串为空,返回 null
+    }
 
     public ResponseEntity saveInvoice(CwFinanceInvoiceDTO cwFinanceInvoiceDTO) throws Exception{
         this.saveForm(cwFinanceInvoiceDTO);

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

@@ -351,6 +351,8 @@ public class CwFinanceInvoiceDTO extends BaseDTO {
      */
     private String checkType;
 
+    private String createByName;
+
 
 
     private static final long serialVersionUID = 1L;

+ 1 - 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
-        b.id = #{id}
+        a.id = #{id}
 				AND a.del_flag = '0'
         AND cert.type IN ('3', '4')
         AND cert.type = (

+ 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

+ 0 - 1
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/controller/FlowableTaskController.java

@@ -29,7 +29,6 @@ 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;

+ 12 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/UserMapper.java

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jeeplus.sys.domain.User;
+import com.jeeplus.sys.domain.UserManageOffice;
 import com.jeeplus.sys.service.dto.*;
 import org.apache.ibatis.annotations.Param;
 
@@ -281,4 +282,15 @@ public interface UserMapper extends BaseMapper <User> {
     String getDepartmentId(@Param("id")String id);
 
     List<UserDTO> getUserInfoByRoleName(@Param("roleName")String roleName);
+
+    /**
+     * 更新用户管理部门
+     * @param id
+     * @return
+     */
+    List<UserManageOffice> getManageOffices(@Param("id") String id);
+
+    void deleteByUserId(@Param("id") String userId);
+
+    void insertUserManageOffice(@Param("userId") String userId,@Param("officeId") String officeId);
 }

+ 16 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/xml/UserMapper.xml

@@ -665,4 +665,20 @@ select a.id, a.company_id as "companyDTO.id", a.office_id as "officeDTO.id", a.l
         sr.name = #{roleName} and sr.del_flag = '0'
     </select>
 
+    <select id="getManageOffices" resultType="com.jeeplus.sys.domain.UserManageOffice">
+        select
+            user_id,
+            office_id
+        from sys_user_manage_office where user_id = #{id}
+    </select>
+
+    <delete id="deleteByUserId">
+        delete from sys_user_manage_office where user_id = #{id}
+    </delete>
+
+    <insert id="insertUserManageOffice">
+        INSERT INTO sys_user_manage_office(user_id, office_id)
+        VALUES (#{userId}, #{officeId})
+    </insert>
+
 </mapper>

+ 24 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/service/UserService.java

@@ -417,6 +417,30 @@ public class UserService extends ServiceImpl <UserMapper, User> {
                 baseMapper.insertUserPost ( userDTO.getId ( ), postDTO.getId ( ) );
             } );
         }
+        /**
+         * 更新用户管理部门
+         */
+        if (StringUtils.isNotBlank(user.getManageOfficeIds())){
+            //查询该用户在sys_user_manage_office中是否有数据
+            List<UserManageOffice> userManageOffices=userMapper.getManageOffices(userDTO.getId());
+            if (CollectionUtil.isNotEmpty(userManageOffices)){
+                //将原本的数据进行删除
+                userMapper.deleteByUserId(user.getId());
+            }
+            //将用户管理部门新增进用户管理部门表中
+            if (user.getManageOfficeIds().contains(",")){
+                String[] split = user.getManageOfficeIds().split(",");
+                for (String s : split) {
+                    userMapper.insertUserManageOffice(userDTO.getId(),s);
+                }
+            }else {
+                userMapper.insertUserManageOffice(userDTO.getId(),userDTO.getManageOfficeIds());
+            }
+        }else {
+            userMapper.deleteByUserId(user.getId());
+        }
+
+
         UserUtils.deleteCache ( userDTO );
         //判断redis中是否有这个key
         if (redisUtils.hasKey("user:cache:user:all:info")){