fuliqi
2024-12-12 23e187554324e1bdff896d7d18634711a7372755
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package com.ycl.listener.excel;
 
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.ycl.common.exception.ServiceException;
import com.ycl.common.exception.base.BaseException;
import com.ycl.common.utils.excel.core.ExcelListener;
import com.ycl.common.utils.excel.core.ExcelResult;
import com.ycl.common.utils.spring.SpringUtils;
import com.ycl.domain.entity.*;
import com.ycl.domain.excel.ProjectExcelTemplate;
import com.ycl.service.ProjectInvestmentFundingService;
import com.ycl.service.ProjectInvestmentInfoService;
import com.ycl.service.ProjectInvestmentPolicyComplianceService;
import com.ycl.service.ProjectUnitRegistrationInfoService;
import com.ycl.service.impl.ProjectInfoServiceImpl;
import lombok.Data;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@Data
//@NoArgsConstructor
public class ProjectImportListener extends AnalysisEventListener<ProjectExcelTemplate> implements ExcelListener<ProjectExcelTemplate> {
 
 
    private final ProjectInfoServiceImpl projectInfoService;
    private final ProjectInvestmentInfoService projectInvestmentInfoService;
    private final ProjectInvestmentFundingService projectInvestmentFundingService;
    private final ProjectUnitRegistrationInfoService projectUnitRegistrationInfoService;
    private final ProjectInvestmentPolicyComplianceService projectPolicyComplianceService;
 
    private int successNum = 0;
    private int failureNum = 0;
    private final StringBuilder successMsg = new StringBuilder();
    private final StringBuilder failureMsg = new StringBuilder();
    private boolean hasData = false;
 
    private Map<String, Long> projectInfoMap = new HashMap<>();
    private Map<String, Long> investmentProjectPolicyComplianceMap = new HashMap<>();
    private Map<String, Long> documentsMap = new HashMap<>();
 
 
    public ProjectImportListener() {
        this.projectInfoService = SpringUtils.getBean(ProjectInfoServiceImpl.class);
        this.projectInvestmentInfoService = SpringUtils.getBean(ProjectInvestmentInfoService.class);
        this.projectInvestmentFundingService = SpringUtils.getBean(ProjectInvestmentFundingService.class);
        this.projectUnitRegistrationInfoService = SpringUtils.getBean(ProjectUnitRegistrationInfoService.class);
        this.projectPolicyComplianceService = SpringUtils.getBean(ProjectInvestmentPolicyComplianceService.class);
 
    }
 
    @Override
    public ExcelResult<ProjectExcelTemplate> getExcelResult() {
        return new ExcelResult<>() {
 
            @Override
            public String getAnalysis() {
                if (failureNum > 0) {
                    failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
                    throw new ServiceException(failureMsg.toString());
                } else {
                    successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
                }
                return successMsg.toString();
            }
 
            @Override
            public List<ProjectExcelTemplate> getList() {
                return null;
            }
 
            @Override
            public List<String> getErrorList() {
                return null;
            }
        };
    }
 
    @Override
    public void invoke(ProjectExcelTemplate projectExcelTemplate, AnalysisContext analysisContext) {
        hasData = true;
        //处理项目基础信息
        ProjectInfo projectInfo = BeanUtil.toBean(projectExcelTemplate, ProjectInfo.class);
        projectInfoService.checkProjectNameUnique(projectInfo);
        projectInfoService.save(projectInfo);
        //审批计划书
        if (StrUtil.isNotBlank(projectExcelTemplate.getApprovalPlan())) {
            String[] names = projectExcelTemplate.getApprovalPlan().split(",");
            for (String name : names) {
                projectInfoMap.put(name, projectInfo.getId());
            }
        }
 
        //处理投资管理信息
        ProjectInvestmentInfo projectInvestmentInfo = BeanUtil.toBean(projectExcelTemplate, ProjectInvestmentInfo.class);
        projectInvestmentInfo.setProjectId(projectInfo.getId());
        projectInvestmentInfoService.save(projectInvestmentInfo);
 
        //处理项目投资及资金来源
        ProjectInvestmentFunding projectInvestmentFunding = BeanUtil.toBean(projectExcelTemplate, ProjectInvestmentFunding.class);
        projectInvestmentFunding.setProjectId(projectInfo.getId());
        projectInvestmentFundingService.save(projectInvestmentFunding);
 
        // 处理项目法人单位信息
        ProjectUnitRegistrationInfo projectUnitRegistrationInfo = BeanUtil.toBean(projectExcelTemplate, ProjectUnitRegistrationInfo.class);
        projectUnitRegistrationInfo.setProjectId(projectInfo.getId());
        projectUnitRegistrationInfoService.save(projectUnitRegistrationInfo);
 
        //处理投资产业政策符合情况
        ProjectInvestmentPolicyCompliance investmentProjectPolicyCompliance = BeanUtil.toBean(projectExcelTemplate, ProjectInvestmentPolicyCompliance.class);
        investmentProjectPolicyCompliance.setProjectId(projectInfo.getId());
        projectPolicyComplianceService.save(investmentProjectPolicyCompliance);
        //符合政策附件
        if (StrUtil.isNotBlank(projectExcelTemplate.getPolicyComplianceAttachment())) {
            String[] names2 = projectExcelTemplate.getPolicyComplianceAttachment().split(",");
            for (String name : names2) {
                investmentProjectPolicyComplianceMap.put(name, investmentProjectPolicyCompliance.getId());
            }
        }
 
        // 相关文书
        if (StrUtil.isNotBlank(projectExcelTemplate.getDocuments())) {
            String[] documentNames = projectExcelTemplate.getDocuments().split(",");
            for (String name : documentNames) {
                documentsMap.put(name, projectInfo.getId());
            }
        }
    }
 
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        if (!hasData) {
            throw new BaseException("excel为空,请填入数据后导入");
        }
    }
 
 
}