|
@@ -6,6 +6,7 @@ import cn.hutool.core.util.ArrayUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
import com.alibaba.fastjson.JSON;
|
|
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.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
@@ -19,15 +20,17 @@ import com.jeeplus.common.redis.RedisUtils;
|
|
import com.jeeplus.core.query.QueryWrapperGenerator;
|
|
import com.jeeplus.core.query.QueryWrapperGenerator;
|
|
import com.jeeplus.finance.contractRegistration.domain.ContractInfo;
|
|
import com.jeeplus.finance.contractRegistration.domain.ContractInfo;
|
|
import com.jeeplus.finance.contractRegistration.mapper.ContractInfoMapper;
|
|
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.CwProjectClientContact;
|
|
import com.jeeplus.finance.projectRecords.domain.CwProjectMembers;
|
|
import com.jeeplus.finance.projectRecords.domain.CwProjectMembers;
|
|
import com.jeeplus.finance.projectRecords.domain.CwProjectRecords;
|
|
import com.jeeplus.finance.projectRecords.domain.CwProjectRecords;
|
|
import com.jeeplus.finance.projectRecords.mapper.CwProjectClientContactMapper;
|
|
import com.jeeplus.finance.projectRecords.mapper.CwProjectClientContactMapper;
|
|
import com.jeeplus.finance.projectRecords.mapper.CwProjectRecordsMapper;
|
|
import com.jeeplus.finance.projectRecords.mapper.CwProjectRecordsMapper;
|
|
-import com.jeeplus.finance.projectRecords.service.dto.CwProjectClientContactDTO;
|
|
|
|
-import com.jeeplus.finance.projectRecords.service.dto.CwProjectClientInfoDTO;
|
|
|
|
-import com.jeeplus.finance.projectRecords.service.dto.CwProjectMembersDTO;
|
|
|
|
-import com.jeeplus.finance.projectRecords.service.dto.CwProjectRecordsDTO;
|
|
|
|
|
|
+import com.jeeplus.finance.projectRecords.service.dto.*;
|
|
import com.jeeplus.finance.projectRecords.service.mapstruct.CwProjectClientContactWrapper;
|
|
import com.jeeplus.finance.projectRecords.service.mapstruct.CwProjectClientContactWrapper;
|
|
import com.jeeplus.finance.projectRecords.service.mapstruct.CwProjectMembersWrapper;
|
|
import com.jeeplus.finance.projectRecords.service.mapstruct.CwProjectMembersWrapper;
|
|
import com.jeeplus.finance.projectRecords.service.mapstruct.CwProjectRecordsWrapper;
|
|
import com.jeeplus.finance.projectRecords.service.mapstruct.CwProjectRecordsWrapper;
|
|
@@ -36,10 +39,12 @@ import com.jeeplus.finance.projectReport.mapper.CwProjectReportMapper;
|
|
import com.jeeplus.finance.workClientInfo.domain.CwWorkClientContact;
|
|
import com.jeeplus.finance.workClientInfo.domain.CwWorkClientContact;
|
|
import com.jeeplus.finance.workClientInfo.service.CwWorkClientContactService;
|
|
import com.jeeplus.finance.workClientInfo.service.CwWorkClientContactService;
|
|
import com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientBaseDTO;
|
|
import com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientBaseDTO;
|
|
|
|
+import com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientBillingDTO;
|
|
import com.jeeplus.sys.domain.User;
|
|
import com.jeeplus.sys.domain.User;
|
|
import com.jeeplus.sys.feign.IDictApi;
|
|
import com.jeeplus.sys.feign.IDictApi;
|
|
import com.jeeplus.sys.feign.IUserApi;
|
|
import com.jeeplus.sys.feign.IUserApi;
|
|
import com.jeeplus.sys.feign.IWorkAttachmentApi;
|
|
import com.jeeplus.sys.feign.IWorkAttachmentApi;
|
|
|
|
+import com.jeeplus.sys.service.dto.AreaDTO;
|
|
import com.jeeplus.sys.service.dto.UserDTO;
|
|
import com.jeeplus.sys.service.dto.UserDTO;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.http.ResponseEntity;
|
|
@@ -83,6 +88,8 @@ public class CwProjectRecordsService extends ServiceImpl<CwProjectRecordsMapper,
|
|
private CwProjectMembersService cwProjectMembersService;
|
|
private CwProjectMembersService cwProjectMembersService;
|
|
@Resource
|
|
@Resource
|
|
private CwProjectReportMapper cwProjectReportMapper;
|
|
private CwProjectReportMapper cwProjectReportMapper;
|
|
|
|
+ @Resource
|
|
|
|
+ private ContractInfoService contractInfoService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -1110,4 +1117,169 @@ public class CwProjectRecordsService extends ServiceImpl<CwProjectRecordsMapper,
|
|
}
|
|
}
|
|
return recordsToKeep;
|
|
return recordsToKeep;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 分组(根据项目名称)
|
|
|
|
+ * @param list
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ private Map<String, List<CwProjectRecordsImportDTO>> dataMessageDisposeByProjectName(List<CwProjectRecordsImportDTO> list) {
|
|
|
|
+ Map<String, List<CwProjectRecordsImportDTO>> infoMap = new HashMap<>();
|
|
|
|
+ if (CollectionUtils.isNotEmpty(list)) {
|
|
|
|
+ // 分组
|
|
|
|
+ for (CwProjectRecordsImportDTO vo : list) {
|
|
|
|
+ List<CwProjectRecordsImportDTO> tempList = infoMap.get(vo.getProjectName());
|
|
|
|
+ /*如果取不到数据,那么直接new一个空的ArrayList**/
|
|
|
|
+ if (tempList == null) {
|
|
|
|
+ tempList = new ArrayList<>();
|
|
|
|
+ tempList.add(vo);
|
|
|
|
+ infoMap.put(vo.getProjectName(), tempList);
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ /*某个vo之前已经存放过了,则直接追加数据到原来的List里**/
|
|
|
|
+ tempList.add(vo);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return infoMap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 导入发票数据
|
|
|
|
+ * @param list
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public String importProjectRecords(List<CwProjectRecordsImportDTO> list) {
|
|
|
|
+
|
|
|
|
+ //获取当前登录人信息
|
|
|
|
+ UserDTO userDTO = SpringUtil.getBean(IUserApi.class).getByToken(TokenProvider.getCurrentToken());
|
|
|
|
+ if(null == userDTO || StringUtils.isBlank(userDTO.getId())) {
|
|
|
|
+ return "登录信息已失效,请重新登录后再进行导入信息";
|
|
|
|
+ }
|
|
|
|
+ if(null == list || list.size() == 0) {
|
|
|
|
+ return "导入的数据为空,请确认后重新导入";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //根据合同名称进行去重,并根据去重后的合同名称进行查询,若查询出来的数据量小于去重后的合同量,则表示有合同没有进行录入,则不进行导入
|
|
|
|
+ LinkedHashSet contractNameSet = new LinkedHashSet();
|
|
|
|
+ for (CwProjectRecordsImportDTO cwProjectRecordsImportDTO : list) {
|
|
|
|
+ contractNameSet.add(cwProjectRecordsImportDTO.getContractName());
|
|
|
|
+ }
|
|
|
|
+ List contractNameList = Lists.newArrayList(contractNameSet);
|
|
|
|
+
|
|
|
|
+ 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());
|
|
|
|
+ contractInfoList.addAll(contractList);
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ return "导入数据中的合同名称不存在,请修正后重新导入";
|
|
|
|
+ }
|
|
|
|
+ //对比查询出来的合同信息,如果查询出来的合同信息比去重后的合同信息少,则表示合同信息存在没有录入系统的情况,则直接抛出
|
|
|
|
+ if(contractInfoList.size() != contractNameList.size()){
|
|
|
|
+ return "导入数据中的合同名称存在未录入系统或填写错误的情况,请修正后重新导入";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //根据项目名称进行去重,若去重后的数量小于原数据量,则表示项目名称有重复,则不进行导入
|
|
|
|
+
|
|
|
|
+ LinkedHashSet projectNameSet = new LinkedHashSet();
|
|
|
|
+ for (CwProjectRecordsImportDTO cwProjectRecordsImportDTO : list) {
|
|
|
|
+ projectNameSet.add(cwProjectRecordsImportDTO.getProjectName());
|
|
|
|
+ }
|
|
|
|
+ List projectNameList = Lists.newArrayList(projectNameSet);
|
|
|
|
+
|
|
|
|
+ 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);
|
|
|
|
+ projectInfoList.addAll(contractList);
|
|
|
|
+ //剔除
|
|
|
|
+ list.subList(0, pointsDataLimit).clear();
|
|
|
|
+ }
|
|
|
|
+ if(!list.isEmpty()){
|
|
|
|
+ List<CwProjectRecordsDTO> contractList = cwProjectRecordsMapper.getByProjectNameList(projectNameList);
|
|
|
|
+ projectInfoList.addAll(contractList);
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ List<CwProjectRecordsDTO> contractList = cwProjectRecordsMapper.getByProjectNameList(projectNameList);
|
|
|
|
+ projectInfoList.addAll(contractList);
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ return "导入数据中的项目名称不存在,请修正后重新导入";
|
|
|
|
+ }
|
|
|
|
+ //对比查询出来的合同信息,如果查询出来的合同信息比去重后的合同信息少,则表示合同信息存在没有录入系统的情况,则直接抛出
|
|
|
|
+ if(projectInfoList.size()>0){
|
|
|
|
+ List<String> repeatedProjectNameList = Lists.newArrayList();
|
|
|
|
+ for (CwProjectRecordsDTO cwProjectRecordsDTO : projectInfoList) {
|
|
|
|
+ repeatedProjectNameList.add(cwProjectRecordsDTO.getProjectName());
|
|
|
|
+ }
|
|
|
|
+ String repeatedProjectNameStr = String.join(",", repeatedProjectNameList);
|
|
|
|
+ return "导入数据中的项目名称为: " + repeatedProjectNameStr + " 已存在,请修正后重新导入";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //查询风险等级字典
|
|
|
|
+ String riskLevelDatas = SpringUtil.getBean ( IDictApi.class ).getDictValueListMapByDict ("cw_project_risk_level");
|
|
|
|
+
|
|
|
|
+ //查询有无报告字典
|
|
|
|
+ String isHaveReportDatas = SpringUtil.getBean ( IDictApi.class ).getDictValueListMapByDict ("is_have_report");
|
|
|
|
+
|
|
|
|
+ //查询报备类型字典
|
|
|
|
+ String reportTypeDatas = SpringUtil.getBean ( IDictApi.class ).getDictValueListMapByDict ("cw_work_client_report_type");
|
|
|
|
+
|
|
|
|
+ for (CwProjectRecordsImportDTO cwProjectRecordsImportDTO : list) {
|
|
|
|
+ //对比风险等级的key
|
|
|
|
+
|
|
|
|
+ //对比有无报告的key
|
|
|
|
+
|
|
|
|
+ //对比报备类型的key
|
|
|
|
+
|
|
|
|
+ //现场负责人若没填写,则默认为上传人
|
|
|
|
+
|
|
|
|
+ //项目经理1 和项目经理2 至少填写一个,且必须有效,否则不进行导入
|
|
|
|
+
|
|
|
|
+ //根据客户联系人-兴民和、部门、手机号。和合同信息进行查询并嵌入
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //批量导入功能实现
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ return "";
|
|
|
|
+ }
|
|
}
|
|
}
|