liujie
2026-01-21 8d1d546ad729da0e809e17e8161376adcc662c96
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
package com.estate.expert.admin.io.processor.impl.business;
 
import com.estate.expert.admin.domain.business.device.Device;
import com.estate.expert.admin.domain.business.device.DeviceType;
import com.estate.expert.admin.io.processor.RowDataProcessorBase;
import com.estate.expert.admin.utils.ExcelParseUtils;
 
import java.util.HashMap;
import java.util.List;
 
/**
 * 设备处理器
 *
 * 用于处理设备信息的读取和写入
 */
public class DeviceProcessor extends RowDataProcessorBase<Device> {
 
    /**
     * 获取表头
     *
     * @return 表头
     */
    protected final String[] getHeaders() {
        return new String[]{
                "设备类型", "设备编号", "设备型号", "设备出厂日期", "出厂编号", "报废年限", "使用单位",
                "工程起重机械生产单位", "工程起重机械租赁单位", "工程起重机械维保单位", "工程起重机械安拆单位",
                "工程起重机械设备备案登记证号", "设备备案登记日期", "备案机构", "设备备案登记有效期",
                "设备使用登记证号", "使用登记日期", "使用登记机构", "使用登记有效期截止日期",
                "初装高度", "最大安装高度", "最终安装高度", "验收日期", "安拆人员证件号"
        };
    }
 
    @Override
    protected List<String> buildRowData(Device data) {
        return List.of(
                data.getType().getDesc(),
                data.getManufacturerNumber(),
                getProp(data, "设备型号"),
                getProp(data, "设备出厂日期"),
                data.getName(),
                getProp(data, "报废年限"),
                getProp(data, "使用单位"),
                getProp(data, "工程起重机械生产单位"),
                getProp(data, "工程起重机械租赁单位"),
                getProp(data, "工程起重机械维保单位"),
                getProp(data, "工程起重机械安拆单位"),
                getProp(data, "工程起重机械设备备案登记证号"),
                getProp(data, "设备备案登记日期"),
                getProp(data, "备案机构"),
                getProp(data, "设备备案登记有效期"),
                getProp(data, "设备使用登记证号"),
                getProp(data, "使用登记日期"),
                getProp(data, "使用登记机构"),
                getProp(data, "使用登记有效期截止日期"),
                getProp(data, "初装高度"),
                getProp(data, "最大安装高度"),
                getProp(data, "最终安装高度"),
                getProp(data, "验收日期"),
                getProp(data, "安拆人员证件号")
        );
    }
 
    @Override
    protected Device parseRowData(int rowIndex, List<String> rowData) {
        var index = 0;
        var device = new Device();
 
        // 初始化 properties Map
        device.setProperties(new HashMap<>());
 
        device.setType(DeviceType.getByDescription(rowData.get(index++)));
        device.setName(ExcelParseUtils.parseString(rowData.get(index++)));
        // 移除重名检查,由 DeviceService.importEntities 统一处理(自动加数字)
 
        String model = ExcelParseUtils.parseString(rowData.get(index++));
        if(model != null) {
            device.getProperties().put("设备型号", model);
        }
 
        String manufactureDate = ExcelParseUtils.parseString(rowData.get(index++));
        if(manufactureDate != null) {
            device.getProperties().put("设备出厂日期", manufactureDate);
        }
 
        device.setManufacturerNumber(ExcelParseUtils.parseString(rowData.get(index++)));
 
        var headers = getHeaders();
        for(int i = 6, n=headers.length; i <n ; i++) {
            String value = ExcelParseUtils.parseString(rowData.get(index++));
            if(value != null) {
                device.getProperties().put(headers[i], value);
            }
        }
 
        return device;
    }
 
    private String getProp(Device data, String key) {
        var props = data.getProperties();
        return props.get(key) == null ? "" : props.get(key);
    }
 
    @Override
    public String getName() {
        return "设备信息";
    }
}