ソースを参照

会计项目excel导入处理

huangguoce 1 ヶ月 前
コミット
16817da0af

+ 4 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/factory/AssessApiFallbackFactory.java

@@ -71,6 +71,10 @@ public class AssessApiFallbackFactory implements FallbackFactory<IAssessApi> {
 
             }
 
+            @Override
+            public String  getUserBySignatureScribe(String name,String userId) {
+                return null;
+            }
 
         };
     }

+ 2 - 1
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/feign/IAssessApi.java

@@ -74,6 +74,7 @@ public interface IAssessApi {
 
     @RequestMapping(value = "/program/projectList/insertMembers", method = RequestMethod.POST)
     void insertMembers(@RequestParam(value = "projectId")String projectId,@RequestParam(value = "membersId")String membersId,@RequestParam(value = "userId")String userId);
-
+    @GetMapping(value = "/reimbursement/info/getUserBySignatureScribe")
+    String getUserBySignatureScribe(@RequestParam(value = "name") String name,@RequestParam(value = "userId") String userId);
 
 }

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

@@ -1,6 +1,5 @@
 package com.jeeplus.finance.projectRecords.controller;
 
-import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.TypeReference;
@@ -10,16 +9,12 @@ import com.jeeplus.aop.demo.annotation.DemoMode;
 import com.jeeplus.common.excel.ExcelOptions;
 import com.jeeplus.common.excel.annotation.ExportMode;
 import com.jeeplus.common.utils.ResponseUtil;
-import com.jeeplus.finance.invoice.controller.CwFinanceInvoiceController;
-import com.jeeplus.finance.invoice.service.dto.CwFinanceImportDTO;
 import com.jeeplus.finance.invoice.util.EasyPoiUtil;
 import com.jeeplus.finance.projectRecords.service.CwProjectRecordsService;
 import com.jeeplus.finance.projectRecords.service.dto.CwProjectRecordsDTO;
 import com.jeeplus.finance.projectRecords.service.dto.CwProjectRecordsImportDTO;
 import com.jeeplus.logging.annotation.ApiLog;
 import com.jeeplus.logging.constant.enums.LogTypeEnum;
-//import com.jeeplus.sys.utils.DictUtils;
-import com.jeeplus.sys.domain.WorkAttachmentInfo;
 import com.jeeplus.sys.feign.IDictApi;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -30,7 +25,6 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
-
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -41,7 +35,6 @@ import java.io.OutputStream;
 import java.lang.reflect.Field;
 import java.lang.reflect.Type;
 import java.net.URLEncoder;
-import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 

+ 153 - 75
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/service/CwProjectRecordsService.java

@@ -8,14 +8,12 @@ import cn.hutool.extra.spring.SpringUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.TypeReference;
 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.databind.ObjectMapper;
 import com.google.common.collect.Lists;
 import com.jeeplus.common.TokenProvider;
 import com.jeeplus.common.constant.CacheNames;
@@ -24,10 +22,6 @@ import com.jeeplus.core.query.QueryWrapperGenerator;
 import com.jeeplus.finance.contractRegistration.domain.ContractInfo;
 import com.jeeplus.finance.contractRegistration.mapper.ContractInfoMapper;
 import com.jeeplus.finance.contractRegistration.service.ContractInfoService;
-import com.jeeplus.finance.invoice.domain.CwFinanceInvoice;
-import com.jeeplus.finance.invoice.domain.CwFinanceInvoiceBase;
-import com.jeeplus.finance.invoice.service.dto.CwFinanceImportDTO;
-import com.jeeplus.finance.invoice.service.dto.CwFinanceInvoiceDTO;
 import com.jeeplus.finance.projectRecords.domain.CwProjectClientContact;
 import com.jeeplus.finance.projectRecords.domain.CwProjectMembers;
 import com.jeeplus.finance.projectRecords.domain.CwProjectRecords;
@@ -41,29 +35,25 @@ import com.jeeplus.finance.projectReport.domain.CwProjectReportData;
 import com.jeeplus.finance.projectReport.mapper.CwProjectReportMapper;
 import com.jeeplus.finance.workClientInfo.domain.CwWorkClientContact;
 import com.jeeplus.finance.workClientInfo.mapper.CwWorkClientBaseMapper;
+import com.jeeplus.finance.workClientInfo.mapper.CwWorkClientContactMapper;
 import com.jeeplus.finance.workClientInfo.service.CwWorkClientContactService;
-import com.jeeplus.finance.workClientInfo.service.CwWorkClientService;
 import com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientBaseDTO;
-import com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientBillingDTO;
-import com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientContactDTO;
+import com.jeeplus.flowable.feign.IAssessApi;
 import com.jeeplus.sys.domain.User;
 import com.jeeplus.sys.feign.IDictApi;
 import com.jeeplus.sys.feign.IUserApi;
 import com.jeeplus.sys.feign.IWorkAttachmentApi;
-import com.jeeplus.sys.service.dto.AreaDTO;
 import com.jeeplus.sys.service.dto.UserDTO;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
-//import com.jeeplus.pubmodules.oss.service.OssService;
-//import com.jeeplus.pubmodules.serialNumTpl.service.SerialnumTplService;
-//import com.jeeplus.sys.mapper.UserMapper;
 
 /**
  * 财务项目登记service
@@ -99,6 +89,9 @@ public class CwProjectRecordsService extends ServiceImpl<CwProjectRecordsMapper,
     private ContractInfoService contractInfoService;
     @Resource
     private CwWorkClientBaseMapper cwWorkClientBaseMapper; ;
+    @Resource
+    private CwWorkClientContactMapper cwWorkClientContactMapper; ;
+
 
     /**
      * 差选项目列表信息
@@ -1187,14 +1180,17 @@ public class CwProjectRecordsService extends ServiceImpl<CwProjectRecordsMapper,
                 return "导入的数据为空,请确认后重新导入";
             }
 
-            //判断项目名是否有重复
+            //数据校验
             Set<String> projectNames = new HashSet<>();
             for (CwProjectRecordsImportDTO item : list) {
+                String message = projectValidation(item);
+                if(StringUtils.isNotBlank(message)){
+                    return "项目名为:"+ item.getProjectName()+"的数据存在以下问题:"+message+",请修正后重新导入";
+                }
                 if (!projectNames.add(item.getProjectName())) {
                     return "导入数据中项目名称重复,请修正后重新导入";
                 }
             }
-
             //根据合同名称进行去重,并根据去重后的合同名称进行查询,若查询出来的数据量小于去重后的合同量,则表示有合同没有进行录入,则不进行导入
             LinkedHashSet contractNameSet = new LinkedHashSet();
             for (CwProjectRecordsImportDTO cwProjectRecordsImportDTO : list) {
@@ -1205,28 +1201,18 @@ public class CwProjectRecordsService extends ServiceImpl<CwProjectRecordsMapper,
             List<ContractInfo> contractInfoList = Lists.newArrayList();
             //根据contractList进行查询合同信息
             //分批处理
-            if (null != contractNameList && contractNameList.size() > 0) {
-                int pointsDataLimit = 10;//限制条数
-                Integer size = list.size();
-                //判断是否有必要分批
-                if (pointsDataLimit < size) {
-                    int part = size / pointsDataLimit;//分批数
-                    //
-                    for (int i = 0; i < part; i++) {
-                        //10条
-                        List<String> subContractNameList = contractNameList.subList(0, pointsDataLimit);
-                        //查询的合同信息仅自己创建的合同信息
-                        List<ContractInfo> contractList = contractInfoService.getByContractNameList(subContractNameList, userDTO.getId());
-                        contractInfoList.addAll(contractList);
-                        //剔除
-                        list.subList(0, pointsDataLimit).clear();
-                    }
-                    if (!list.isEmpty()) {
-                        List<ContractInfo> contractList = contractInfoService.getByContractNameList(contractNameList, userDTO.getId());
-                        contractInfoList.addAll(contractList);
-                    }
-                } else {
-                    List<ContractInfo> contractList = contractInfoService.getByContractNameList(contractNameList, userDTO.getId());
+            if (contractNameList != null && !contractNameList.isEmpty()) {
+                int pointsDataLimit = 10; // 限制每批查询条数
+                int size = contractNameList.size();
+                int part = (size + pointsDataLimit - 1) / pointsDataLimit; // 计算需要分多少批
+
+                for (int i = 0; i < part; i++) {
+                    int fromIndex = i * pointsDataLimit;
+                    int toIndex = Math.min(fromIndex + pointsDataLimit, size);
+                    List<String> subContractNameList = contractNameList.subList(fromIndex, toIndex);
+
+                    // 查询
+                    List<ContractInfo> contractList = contractInfoService.getByContractNameList(subContractNameList, userDTO.getId());
                     contractInfoList.addAll(contractList);
                 }
             } else {
@@ -1236,7 +1222,15 @@ public class CwProjectRecordsService extends ServiceImpl<CwProjectRecordsMapper,
             if (contractInfoList.size() != contractNameList.size()) {
                 return "导入数据中的合同名称存在未录入系统或填写错误的情况,请修正后重新导入";
             }
-
+            List<CwProjectRecordsDTO> cwProjectRecordsDTOS =  new ArrayList<>();
+            //根据合同信息查询对应的客户联系人数据
+            for(ContractInfo contractInfo :contractInfoList){
+                CwProjectRecordsDTO cwProjectRecordsDTO = new CwProjectRecordsDTO();
+                List<CwProjectClientContactDTO> contractClientListByName = cwWorkClientBaseMapper.getContractClientListByName(contractInfo.getContractName());
+                cwProjectRecordsDTO.setContractName(contractInfo.getContractName());
+                cwProjectRecordsDTO.setCwProjectClientContactDTOList(contractClientListByName);
+                cwProjectRecordsDTOS.add(cwProjectRecordsDTO);
+            }
 
             //根据项目名称进行去重,若去重后的数量小于原数据量,则表示项目名称有重复,则不进行导入
             LinkedHashSet projectNameSet = new LinkedHashSet();
@@ -1248,33 +1242,24 @@ public class CwProjectRecordsService extends ServiceImpl<CwProjectRecordsMapper,
             List<CwProjectRecordsDTO> projectInfoList = Lists.newArrayList();
             //根据contractList进行查询合同信息
             //分批处理
-            if (null != projectNameList && projectNameList.size() > 0) {
-                int pointsDataLimit = 10;//限制条数
-                Integer size = list.size();
-                //判断是否有必要分批
-                if (pointsDataLimit < size) {
-                    int part = size / pointsDataLimit;//分批数
-                    //
-                    for (int i = 0; i < part; i++) {
-                        //10条
-                        List<String> subProjectNameList = projectNameList.subList(0, pointsDataLimit);
-                        //查询的合同信息仅自己创建的合同信息
-                        List<CwProjectRecordsDTO> contractList = cwProjectRecordsMapper.getByProjectNameList(subProjectNameList, userDTO.getId());
-                        projectInfoList.addAll(contractList);
-                        //剔除
-                        list.subList(0, pointsDataLimit).clear();
-                    }
-                    if (!list.isEmpty()) {
-                        List<CwProjectRecordsDTO> contractList = cwProjectRecordsMapper.getByProjectNameList(projectNameList, userDTO.getId());
-                        projectInfoList.addAll(contractList);
-                    }
-                } else {
-                    List<CwProjectRecordsDTO> contractList = cwProjectRecordsMapper.getByProjectNameList(projectNameList, userDTO.getId());
+            if (projectNameList != null && !projectNameList.isEmpty()) {
+                int pointsDataLimit = 10; // 每批查询的数量
+                int size = projectNameList.size();
+                int part = (size + pointsDataLimit - 1) / pointsDataLimit; // 计算需要分多少批
+
+                for (int i = 0; i < part; i++) {
+                    int fromIndex = i * pointsDataLimit;
+                    int toIndex = Math.min(fromIndex + pointsDataLimit, size);
+                    List<String> subProjectNameList = projectNameList.subList(fromIndex, toIndex);
+
+                    // 查询数据
+                    List<CwProjectRecordsDTO> contractList = cwProjectRecordsMapper.getByProjectNameList(subProjectNameList, userDTO.getId());
                     projectInfoList.addAll(contractList);
                 }
-            } else {
+            }else {
                 return "导入数据中的项目名称不存在,请修正后重新导入";
             }
+            
             //对比查询出来的合同信息,如果查询出来的合同信息比去重后的合同信息少,则表示合同信息存在没有录入系统的情况,则直接抛出
             if (projectInfoList.size() > 0) {
                 List<String> repeatedProjectNameList = Lists.newArrayList();
@@ -1295,6 +1280,7 @@ public class CwProjectRecordsService extends ServiceImpl<CwProjectRecordsMapper,
             JSONObject reportTypeDatas = JSONUtil.parseObj(SpringUtil.getBean(IDictApi.class).getDictValueListMapByDict("cw_work_client_report_type"));
 
             for (CwProjectRecordsImportDTO cwProjectRecordsImportDTO : list) {
+
                 CwProjectRecordsDTO cwProjectRecordsDTO = new CwProjectRecordsDTO();
                 //对比风险等级的key
                 String riskLevel = riskLevelDatas.getStr(cwProjectRecordsImportDTO.getRiskLevel());
@@ -1307,7 +1293,6 @@ public class CwProjectRecordsService extends ServiceImpl<CwProjectRecordsMapper,
                     cwProjectRecordsDTO.setProjectLeaderId(userDTO.getId());
                 } else {
                     String userId = SpringUtil.getBean(IUserApi.class).getUserIdByName(cwProjectRecordsImportDTO.getProjectLeaderId());
-                    //如果未查询到就抛出
                     if (StringUtils.isNotBlank(userId)) {
                         cwProjectRecordsDTO.setProjectLeaderId(userId);
                     } else {
@@ -1317,16 +1302,26 @@ public class CwProjectRecordsService extends ServiceImpl<CwProjectRecordsMapper,
                 //项目经理1 和项目经理2 至少填写一个,且必须有效,否则不进行导入
                 String projectManagerOne = cwProjectRecordsImportDTO.getProjectMasterId();
                 String projectManagerTwo = cwProjectRecordsImportDTO.getRealHeader();
-                if (StringUtils.isAllBlank(projectManagerOne, projectManagerTwo)) {
-                    return "导入数据中的项目经理1和项目经理2,至少填写一个,请修正后重新导入";
-                }
-                IUserApi userApi = SpringUtil.getBean(IUserApi.class);
+
+                IAssessApi iAssessApi = SpringUtil.getBean(IAssessApi.class);
                 // 查询用户 ID
                 if (StringUtils.isNotBlank(projectManagerOne)) {
-                    projectManagerOne = userApi.getUserIdByName(projectManagerOne);
+                    String userId = iAssessApi.getUserBySignatureScribe(projectManagerOne, userDTO.getId());
+                    if(StringUtils.isBlank(userId)){
+                        return "确保导入数据中的项目经理1和项目经理2填写正确,请修正后重新导入";
+                    }
+                    projectManagerOne = userId;
                 }
                 if (StringUtils.isNotBlank(projectManagerTwo)) {
-                    projectManagerTwo = userApi.getUserIdByName(projectManagerTwo);
+                    String userId = iAssessApi.getUserBySignatureScribe(projectManagerTwo, userDTO.getId());
+                    if(StringUtils.isBlank(userId)){
+                        return "确保导入数据中的项目经理1和项目经理2填写正确,请修正后重新导入";
+                    }
+                    projectManagerTwo = userId;
+
+                }
+                if (StringUtils.isAllBlank(projectManagerOne, projectManagerTwo)) {
+                    return "导入数据中的项目经理1和项目经理2,至少填写一个,请修正后重新导入";
                 }
                 //根据客户联系人-姓名和部门、手机号和合同信息进行查询并嵌入
                 //设置基本信息
@@ -1345,31 +1340,114 @@ public class CwProjectRecordsService extends ServiceImpl<CwProjectRecordsMapper,
                 if(foundContract == null){
                     return "导入数据中的对应的合同未找到,请修正后重新导入";
                 }
+                //设置合同id和合同份数
                 cwProjectRecordsDTO.setContractId(foundContract.getId());
                 cwProjectRecordsDTO.setContractNum(foundContract.getContractNum());
                 //查询被服务单位信息
                 List<CwWorkClientBaseDTO> contractClient = cwWorkClientBaseMapper.getContractClient(cwProjectRecordsImportDTO.getContractName());
                 cwProjectRecordsDTO.setCwProjectClientInfoDTOList(contractClient);
-                //添加联系人数据
+                //根据合同名称找到之前查询的客户联系人
+                Optional<CwProjectRecordsDTO> contractResult = cwProjectRecordsDTOS.stream()
+                        .filter(dto -> cwProjectRecordsImportDTO.getContractName().equals(dto.getContractName()))
+                        .findFirst();
                 List<CwProjectClientContactDTO> cwProjectClientContactList = new ArrayList<>();
                 CwProjectClientContactDTO cwProjectClientContactDTO = new CwProjectClientContactDTO();
-                cwProjectClientContactDTO.setName(cwProjectRecordsImportDTO.getCwProjectClientName());
-                cwProjectClientContactDTO.setContactFirst(cwProjectRecordsImportDTO.getCwProjectClientPhone());
-                cwProjectClientContactDTO.setOfficeId(cwProjectRecordsImportDTO.getCwProjectClientOffice());
+                if (!contractResult.isPresent()) {
+                    return "导入数据中的合同对应被服务单位未找到,请修正后重新导入";
+                }else{
+                    CwProjectRecordsDTO cwCurrentContract = contractResult.get();
+                    //通过excel中的姓名,职位,手机号找到对应的联系人
+                    List<CwProjectClientContactDTO> cwProjectClientContactDTOList = cwCurrentContract.getCwProjectClientContactDTOList();
+                    Optional<CwProjectClientContactDTO> result = cwProjectClientContactDTOList.stream()
+                            .filter(dto -> cwProjectRecordsImportDTO.getCwProjectClientName().equals(dto.getName()) &&
+                                    cwProjectRecordsImportDTO.getCwProjectClientPhone().equals(dto.getContactFirst()) &&
+                                    cwProjectRecordsImportDTO.getCwProjectClientOffice().equals(dto.getOfficeId()))
+                            .findFirst();
+                    if (result.isPresent()) {
+                        CwProjectClientContactDTO foundContactDTO = result.get();
+                        //添加已存在的联系人数据
+                        //通过id获取到对应联系人的详细数据,并添加到新对象中,在saveForm方法里会对联系人进行校验
+                        CwWorkClientContact contractInfo = cwWorkClientContactMapper.getInfoById(foundContactDTO.getId());
+                        cwProjectClientContactDTO.setName(contractInfo.getName());
+                        cwProjectClientContactDTO.setContactFirst(contractInfo.getContactFirst());
+                        cwProjectClientContactDTO.setOfficeId(contractInfo.getOfficeId());
+                        cwProjectClientContactDTO.setClientId(contractInfo.getClientId());
+                        cwProjectClientContactDTO.setFax(contractInfo.getFax());
+                        cwProjectClientContactDTO.setSex(contractInfo.getSex());
+                        cwProjectClientContactDTO.setPosition(contractInfo.getPosition());
+                        cwProjectClientContactDTO.setEmail(contractInfo.getEmail());
+                        cwProjectClientContactDTO.setRemarks(contractInfo.getRemarks());
+                        cwProjectClientContactDTO.setContactSecond(contractInfo.getContactSecond());
+                    } else {
+                        //如果联系人不存在,直接新增联系人数据
+                        cwProjectClientContactDTO.setName(cwProjectRecordsImportDTO.getCwProjectClientName());
+                        cwProjectClientContactDTO.setContactFirst(cwProjectRecordsImportDTO.getCwProjectClientPhone());
+                        cwProjectClientContactDTO.setOfficeId(cwProjectRecordsImportDTO.getCwProjectClientOffice());
+                    }
+                }
                 cwProjectClientContactList.add(cwProjectClientContactDTO);
                 cwProjectRecordsDTO.setCwProjectClientContactDTOList(cwProjectClientContactList);
                 //基本数据
                 cwProjectRecordsDTO.setPlanStartDate(cwProjectRecordsImportDTO.getPlanStartDate());
                 cwProjectRecordsDTO.setPlanEndDate(cwProjectRecordsImportDTO.getPlanEndDate());
                 cwProjectRecordsDTO.setPayerSubject(foundContract.getPayerSubject());
-                cwProjectRecordsDTO.setProjectMoney(cwProjectRecordsImportDTO.getProjectMoney());
+                //处理项目规模,保留两位小数
+                String projectMoneyStr = cwProjectRecordsImportDTO.getProjectMoney();
+                if (StringUtils.isNotBlank(projectMoneyStr)) {
+                    BigDecimal projectMoney = new BigDecimal(projectMoneyStr).setScale(2, RoundingMode.HALF_UP);
+                    String formattedMoney = projectMoney.toPlainString();
+                    cwProjectRecordsDTO.setProjectMoney(formattedMoney);
+                }
                 cwProjectRecordsDTO.setProjectName(cwProjectRecordsImportDTO.getProjectName());
                 //保存
                 saveForm(cwProjectRecordsDTO);
             }
         }catch (Exception e){
-            return "数据异常,请联系管理员排查";
+            return "数据异常,请联系管理员";
         }
         return "";
     }
+
+    public String projectValidation(CwProjectRecordsImportDTO cwProjectRecordsImportDTO) {
+        StringBuilder errorMsg = new StringBuilder();
+
+        if (StringUtils.isBlank(cwProjectRecordsImportDTO.getContractName())) {
+            errorMsg.append("合同名称不能为空");
+        }
+        if (StringUtils.isBlank(cwProjectRecordsImportDTO.getProjectName())) {
+            errorMsg.append("项目名称不能为空");
+        }
+        if (StringUtils.isBlank(cwProjectRecordsImportDTO.getRiskLevel())) {
+            errorMsg.append("风险等级不能为空");
+        }
+        if (StringUtils.isBlank(cwProjectRecordsImportDTO.getProjectMoney())) {
+            errorMsg.append("项目规模不能为空");
+        }
+        if (StringUtils.isBlank(cwProjectRecordsImportDTO.getIsHaveReport())) {
+            errorMsg.append("有无报告不能为空");
+        }
+        if (StringUtils.isBlank(cwProjectRecordsImportDTO.getReportType())) {
+            errorMsg.append("报备类型不能为空");
+        }
+        if (StringUtils.isBlank(cwProjectRecordsImportDTO.getAuditYear())) {
+            errorMsg.append("审计期间不能为空");
+        }
+        if (cwProjectRecordsImportDTO.getPlanStartDate() == null) {
+            errorMsg.append("项目预计开始时间不能为空");
+        }
+        if (cwProjectRecordsImportDTO.getPlanEndDate() == null) {
+            errorMsg.append("项目预计结束时间不能为空");
+        }
+        if (StringUtils.isBlank(cwProjectRecordsImportDTO.getCwProjectClientName())) {
+            errorMsg.append("客户联系人姓名不能为空");
+        }
+        if (StringUtils.isBlank(cwProjectRecordsImportDTO.getCwProjectClientOffice())) {
+            errorMsg.append("客户联系人部门不能为空");
+        }
+        if (StringUtils.isBlank(cwProjectRecordsImportDTO.getCwProjectClientPhone())) {
+            errorMsg.append("客户联系人电话不能为空");
+        }
+        return errorMsg.length() > 0 ? errorMsg.toString() : "";
+    }
+
 }

+ 1 - 3
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/service/dto/CwProjectRecordsImportDTO.java

@@ -1,10 +1,8 @@
 package com.jeeplus.finance.projectRecords.service.dto;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
-import cn.afterturn.easypoi.excel.annotation.ExcelIgnore;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jeeplus.core.service.dto.BaseDTO;
-import com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientBaseDTO;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
@@ -86,7 +84,7 @@ public class CwProjectRecordsImportDTO extends BaseDTO {
     /**
      * 现场负责人
      */
-    @Excel(name = "*现场负责人",width = 50)
+    @Excel(name = "现场负责人",width = 50)
     private String projectLeaderId;
 
     /**

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

@@ -5,6 +5,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.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jeeplus.finance.projectRecords.service.dto.CwProjectClientContactDTO;
 import com.jeeplus.finance.workClientInfo.domain.CwWorkClientBase;
 import com.jeeplus.finance.workClientInfo.domain.CwWorkClientTemp;
 import com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientBaseDTO;
@@ -62,6 +63,12 @@ public interface CwWorkClientBaseMapper extends BaseMapper<CwWorkClientBase> {
     List<CwWorkClientBaseDTO> getList(@Param("clientList") ArrayList<String> clientList);
 
     List<CwWorkClientBaseDTO> getContractClient(@Param("contractName") String contractName);
+    /**
+     * 根据合同名称查询对应客户信息的联系人信息
+     * @return
+     */
+     List<CwProjectClientContactDTO> getContractClientListByName(@Param("contactName")String contactName);
+
 }
 
 

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

@@ -434,4 +434,22 @@
         and
         a.del_flag = 0
     </select>
+
+    <select id="getContractClientListByName" resultType="com.jeeplus.finance.projectRecords.service.dto.CwProjectClientContactDTO">
+        SELECT
+        *
+        FROM
+        cw_work_client_contact
+        <where>
+            client_id = (
+            SELECT
+            id
+            FROM
+            cw_work_client_base
+            WHERE
+            id = ( SELECT client_contacts FROM cw_work_contract_info WHERE contract_name = #{contactName} )
+            ) and del_flag = 0
+        </where>
+        order by update_time desc
+    </select>
 </mapper>

+ 32 - 3
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/workClientInfo/mapper/xml/CwWorkClientContactMapper.xml

@@ -46,9 +46,38 @@
 
     <select id="getInfoByData" resultType="com.jeeplus.finance.workClientInfo.domain.CwWorkClientContact">
         select * from cw_work_client_contact
-        where `name` = #{name} and sex = #{sex} and office_id = #{officeId} and `position` = #{position}
-        and contact_first = #{contactFirst} and contact_second = #{contactSecond} and fax = #{fax} and email = #{email} and remarks = #{remarks}
-        and client_id = #{clientId} and del_flag = 0
+        where 1=1
+        <if test="name != null and name != ''">
+            and `name` = #{name}
+        </if>
+        <if test="sex != null and sex != ''">
+            and sex = #{sex}
+        </if>
+        <if test="officeId != null and officeId != ''">
+            and office_id = #{officeId}
+        </if>
+        <if test="position != null and position != ''">
+            and `position` = #{position}
+        </if>
+        <if test="contactFirst != null and contactFirst != ''">
+            and contact_first = #{contactFirst}
+        </if>
+        <if test="contactSecond != null and contactSecond != ''">
+            and contact_second = #{contactSecond}
+        </if>
+        <if test="fax != null and fax != ''">
+            and fax = #{fax}
+        </if>
+        <if test="email != null and email != ''">
+            and email = #{email}
+        </if>
+        <if test="remarks != null and remarks != ''">
+            and remarks = #{remarks}
+        </if>
+        <if test="clientId != null and clientId != ''">
+            and client_id = #{clientId}
+        </if>
+        and del_flag = 0
         order by id asc limit 1
     </select>