车间能级提升-智能设备管理系统
baoshiwei
2025-04-12 beaed6d077e7c3e9abfad68acb8c587835b5a406
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
143
144
145
146
147
package org.dromara.eims.listener;
 
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.exception.ExcelDataConvertException;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.service.DictService;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.excel.core.ExcelListener;
import org.dromara.common.excel.core.ExcelResult;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.eims.domain.vo.EimsEquVo;
import org.dromara.eims.domain.vo.InspectCheckItemVo;
import org.dromara.eims.service.IEimsEquService;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * 点检项目导入监听器
 *
 * @author zhuguifei
 */
@Data
@Slf4j
public class InspectCheckItemImportListener extends AnalysisEventListener<InspectCheckItemVo> implements ExcelListener<InspectCheckItemVo> {
 
    private final IEimsEquService equService;
    private final DictService dictService;
    private final Long operUserId;
    private final Boolean isUpdateSupport;
 
    /**
     * 成功条数
     */
    private Integer successCount = 0;
 
    /**
     * 失败条数
     */
    private Integer failureCount = 0;
 
    /**
     * 导入成功数据列表
     */
    private List<InspectCheckItemVo> successList = new ArrayList<>();
 
    /**
     * 导入失败数据列表
     */
    private List<InspectCheckItemVo> failureList = new ArrayList<>();
 
    private final StringBuilder successMsg = new StringBuilder();
    private final StringBuilder failureMsg = new StringBuilder();
 
    public InspectCheckItemImportListener(Boolean isUpdateSupport) {
        this.equService = SpringUtils.getBean(IEimsEquService.class);
        this.dictService = SpringUtils.getBean(DictService.class);
        this.isUpdateSupport = isUpdateSupport;
        this.operUserId = LoginHelper.getUserId();
    }
 
    @Override
    public void invoke(InspectCheckItemVo data, AnalysisContext context) {
        try {
            // 数据校验
            if (!validateData(data)) {
                failureList.add(data);
                failureCount++;
                failureMsg.append("<br/>").append(failureCount).append("、点检项 ")
                    .append(data.getItemName()).append(" 数据校验失败");
                return;
            }
 
 
            successList.add(data);
            successCount++;
            successMsg.append("<br/>").append(successCount).append("、点检项 ")
                .append(data.getItemName()).append(" 导入成功");
 
        } catch (Exception e) {
            failureList.add(data);
            failureCount++;
            String msg = "<br/>" + failureCount + "、点检项 " + data.getItemName() + " 导入失败:";
            failureMsg.append(msg).append(e.getMessage());
            log.error("导入点检项目失败:", e);
        }
    }
 
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        log.info("点检项目导入完成,成功:{}条,失败:{}条", successCount, failureCount);
    }
 
    @Override
    public void onException(Exception exception, AnalysisContext context) throws Exception {
        log.error("导入异常", exception);
        if (exception instanceof ExcelDataConvertException) {
            ExcelDataConvertException e = (ExcelDataConvertException) exception;
            failureMsg.append("<br/>").append("第").append(e.getRowIndex()).append("行,第").append(e.getColumnIndex())
                .append("列解析异常:").append(e.getCause().getMessage());
        } else {
            failureMsg.append(exception.getMessage());
        }
    }
 
    @Override
    public ExcelResult<InspectCheckItemVo> getExcelResult() {
        return new ExcelResult<InspectCheckItemVo>() {
            @Override
            public List<InspectCheckItemVo> getList() {
                return successList;
            }
 
            @Override
            public List<String> getErrorList() {
                return List.of();
            }
 
            @Override
            public String getAnalysis() {
                if (successCount > 0) {
                    successMsg.insert(0, "恭喜您,共 " + successCount + " 条数据导入成功!");
                }
                if (failureCount > 0) {
                    failureMsg.insert(0, "很抱歉,共 " + failureCount + " 条数据导入失败!");
                }
                return successMsg + failureMsg.toString();
            }
        };
    }
 
    /**
     * 校验数据
     *
     * @param data 待校验数据
     * @return 校验结果
     */
    private boolean validateData(InspectCheckItemVo data) {
        if (data.getItemName() == null || data.getItemName().trim().isEmpty()) {
            return false;
        }
        return true;
    }
}