a
554325746@qq.com
2019-12-24 570a73851c26d810c2597596a8acc8a8d4cde211
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
package com.basic.security.utils;
 
import android.content.ContextWrapper;
import android.os.SystemClock;
import android.text.TextUtils;
 
import com.basic.security.base.BaseApplication;
import com.basic.security.manager.IdentityManager;
import com.basic.security.manager.OrgManager;
import com.basic.security.manager.PersonIdentityManager;
import com.basic.security.manager.PersonManager;
import com.basic.security.manager.TimeManager;
import com.basic.security.model.Identity;
import com.basic.security.model.ModelAdapter;
import com.basic.security.model.Org;
import com.basic.security.model.Person;
import com.basic.security.model.Time;
 
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellValue;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
 
public class ExcelUtil {
    static String cellData;
    static FormulaEvaluator formulaEvaluator;
    static Row row;
    static DecimalFormat decimalFormat = new DecimalFormat("###.#");
 
    private static String getCellAsString(int columnIndex) {
        String value = "";
        try {
            Cell cell = row.getCell(columnIndex);
            CellValue cellValue = formulaEvaluator.evaluate(cell);
            switch (cellValue.getCellType()) {
                case Cell.CELL_TYPE_BOOLEAN:
                    value = "" + cellValue.getBooleanValue();
                    break;
                case Cell.CELL_TYPE_NUMERIC:
                    double numericValue = cellValue.getNumberValue();
                    if (HSSFDateUtil.isCellDateFormatted(cell)) {
                        double date = cellValue.getNumberValue();
                        SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yy");
                        value = formatter.format(HSSFDateUtil.getJavaDate(date));
                    } else {
                        value = "" + decimalFormat.format(numericValue);
                    }
                    break;
                case Cell.CELL_TYPE_STRING:
                    value = "" + cellValue.getStringValue();
                    break;
                default:
            }
        } catch (NullPointerException e) {
//            ToastUtil.show("Null Pointer Exception in getCellAsString");
            e.printStackTrace();
        }
        return value;
    }
 
    public static void parseExcel(File excelFile, Map<String, File> photoFileMap) {
        FaceId.instance.initSdk(new ContextWrapper(BaseApplication.getApplication().activity).getFilesDir().getAbsolutePath());
        String rootOrgId = OrgManager.findRootOrg().getString(Org.id);
        if (excelFile != null) {
            try {
                FileInputStream inputStream = new FileInputStream(excelFile.getAbsolutePath());
                XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
                XSSFSheet sheet = workbook.getSheetAt(0);
                int rowCount = sheet.getPhysicalNumberOfRows();
                formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();
                Map<String, ModelAdapter> namesOrgMap = new HashMap<>();
                for (int r = 1; r < rowCount; r++) {
                    try {
                        row = sheet.getRow(r);
                        int colCount = row.getPhysicalNumberOfCells();
                        String photoId = getCellAsString(0);
                        File photoFile = photoFileMap.get(photoId);
                        if (photoFile == null) {
                            continue;
                        }
                        photoFileMap.remove(photoId);
                        ModelAdapter savedPerson = PersonManager.savePicToDatabase(photoFile, rootOrgId);
                        if (savedPerson != null) {
                            ModelAdapter personOrg;
                            String personName = getCellAsString(1);
                            savedPerson.setString(Person.name, personName);
                            String schoolName = getCellAsString(2);
                            ModelAdapter schoolOrg = OrgManager.buildParentOrg(schoolName);
                            personOrg = schoolOrg;
                            String gradeName = getCellAsString(3);
                            if (!TextUtils.isEmpty(gradeName)) {
                                ModelAdapter gradeOrg = OrgManager.addChildOrg(schoolOrg, gradeName);
                                personOrg = gradeOrg;
                                String className = getCellAsString(4);
                                if (!TextUtils.isEmpty(className)) {
                                    personOrg = OrgManager.addChildOrg(gradeOrg, className);
                                }
                            }
                            savedPerson.setString(Person.org_id, personOrg.getString(Org.id));
                            savedPerson.setString(Person.org_ids, personOrg.getString(Org.ids));
                            String studentId = getCellAsString(5);
                            savedPerson.setString(Person.student_id, studentId);
                            String id_card = getCellAsString(6);
                            savedPerson.setString(Person.id_card_number, id_card);
                            String phone = getCellAsString(7);
                            savedPerson.setString(Person.phone, phone);
                            String identity = getCellAsString(8);
                            if (identity.contains(",")) {
                                String[] identityArray = identity.split(",");
                                for (String identityStr : identityArray) {
                                    if (!TextUtils.isEmpty(identityStr)) {
                                        ModelAdapter identityModel = IdentityManager.findIdentityByName(identityStr);
                                        PersonIdentityManager.save(savedPerson.getString(Person.id), identityModel.getString(Identity.id));
                                    }
                                }
                            } else {
                                if (!TextUtils.isEmpty(identity)) {
                                    ModelAdapter identityModel = IdentityManager.findIdentityByName(identity);
                                    PersonIdentityManager.save(savedPerson.getString(Person.id), identityModel.getString(Identity.id));
                                }
                            }
                            String signUpRule = getCellAsString(9);
                            savedPerson.setString(Person.sign_up_rule, signUpRule);
                            if ("有效时间内通行".equals(signUpRule)) {
                                boolean hasCheckedTimeRuleId = false;
                                String timeRuleName = getCellAsString(10);
                                if (!TextUtils.isEmpty(timeRuleName)) {
                                    ModelAdapter time = TimeManager.findByTimeRuleName(timeRuleName);
                                    if (time != null) {
                                        String checked_time_rule_id = time.getString(Time.id);
                                        if (!TextUtils.isEmpty(checked_time_rule_id)) {
                                            hasCheckedTimeRuleId = true;
                                            savedPerson.setString(Person.checked_time_rule_id, checked_time_rule_id);
                                        }
                                    }
                                }
                                if (!hasCheckedTimeRuleId) {
                                    ToastUtil.show("请添加名称为 " + timeRuleName + " 的时间规则");
                                }
                            }
                            savedPerson.setString(Person.sign_up_method, "批量导入");
                            savedPerson.setString(Person.all_device, "1");
                            PersonManager.save(savedPerson);
                            SocketUtil.rpcCallSavePerson(savedPerson);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                workbook.close();
                OrgManager.initTreeNodeList = false;
                OrgManager.initTreeNodeList();
                SocketUtil.rpcCallInitTreeNodeList();
            } catch (FileNotFoundException e) {
                ToastUtil.show("File Not Found");
            } catch (IOException e) {
                ToastUtil.show("IO Error reading input stream");
            }
        }
        for (File photoFile : photoFileMap.values()) {
            try {
                ModelAdapter person = PersonManager.savePicToDatabase(photoFile, rootOrgId);
                SocketUtil.rpcCallSavePerson(person);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        long begin = System.currentTimeMillis();
        while (!OrgManager.initTreeNodeList) {
            SystemClock.sleep(1000);
            if (System.currentTimeMillis() - begin > 5 * 1000) {
                break;
            }
        }
        ToastUtil.show("导入成功");
        BaseApplication.getApplication().activity.runOnUiThread(() -> BaseApplication.getApplication().activity.fragment_face_list.signed_up());
    }
 
    public static void main(String[] args) {
        String names = "aaaa,,,";
        String[] nameArray = names.split(",,,");
        System.out.println("ExcelUtil.main " + names.split("|||").length);
//        ExcelUtil.parseExcel("E:\\workspace\\Security_excel\\app\\src\\main\\assets\\person.xlsx");
    }
}