jialh
1 天以前 dd6687b118561100e1677e88a9c2f5842a54c531
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
package com.java110.api.importData.adapt;
 
import com.alibaba.fastjson.JSONObject;
import com.java110.api.importData.DefaultImportDataAdapt;
import com.java110.api.importData.IImportDataCleaningAdapt;
import com.java110.dto.importData.ImportRoomFee;
import com.java110.dto.importData.ParkingFeeRecord;
import com.java110.dto.system.ComponentValidateResult;
import com.java110.intf.fee.IPayFeeBatchV1InnerServiceSMO;
import com.java110.intf.user.IUserInnerServiceSMO;
import com.java110.utils.util.Assert;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.ImportExcelUtils;
import com.java110.utils.util.StringUtil;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * 历史缴费数据导入
 * <p>
 * 导入请求参数中必须包含
 * param.append('importAdapt', "importCarHistoryFeeDetail");
 * <p>
 * vc.http.upload(
 * 'assetImport',
 * 'importData',
 * param, {
 * emulateJSON: true,
 * //添加请求头
 * headers: {
 * "Content-Type": "multipart/form-data"
 * }
 * },
 * function(json, res) {
 * //vm.menus = vm.refreshMenuActive(JSON.parse(json),0);
 * let _json = JSON.parse(json);
 * if (_json.code == 0) {
 * //关闭model
 * // vc.toast(_json.data);
 * $('#importOwnerRoomModel').modal('hide');
 * $that.clearAddFeeConfigInfo();
 * <p>
 * vc.jumpToPage('/#/pages/property/assetImportLogDetail?logId=' + _json.data.logId + '&logType=importCarHistoryFeeDetail');
 * return;
 * }
 * vc.toast(_json.msg, 10000);
 * },
 * function(errInfo, error) {
 * console.log('请求失败处理');
 * vc.toast(errInfo, 10000);
 * });
 */
@Service("importCarHistoryFeeDetailV2DataCleaning")
public class ImportCarHistoryFeeDetailV2DataCleaningAdapt extends DefaultImportDataAdapt implements IImportDataCleaningAdapt {
 
 
    @Autowired
    private IPayFeeBatchV1InnerServiceSMO payFeeBatchV1InnerServiceSMOImpl;
 
    @Autowired
    private IUserInnerServiceSMO userInnerServiceSMOImpl;
 
 
    @Override
    public List analysisExcel(Workbook workbook, JSONObject paramIn, ComponentValidateResult result) throws Exception {
 
        generatorBatch(paramIn);
        List<ImportRoomFee> rooms = new ArrayList<ImportRoomFee>();
 
        //获取车辆信息
        getCars(workbook, rooms);
 
 
        for (ImportRoomFee importRoomFee : rooms) {
            importRoomFee.setBatchId(paramIn.getString("batchId"));
            importRoomFee.setUserId(paramIn.getString("userId"));
            importRoomFee.setStoreId(paramIn.getString("storeId"));
            importRoomFee.setObjType(paramIn.getString("objType"));
            importRoomFee.setCommunityId(paramIn.getString("communityId"));
        }
        return rooms;
    }
 
    private void getCars(Workbook workbook, List<ImportRoomFee> rooms) {
        // 1. 指定读取的sheet名称:临时停车费 导入模板
        Sheet sheet = ImportExcelUtils.getSheet(workbook, "临时停车费 导入模板");
        if (sheet == null) {
            throw new IllegalArgumentException("未找到名称为【临时停车费 导入模板】的工作表");
        }
 
        // 2. 读取sheet中所有行数据
        List<Object[]> oList = ImportExcelUtils.listFromSheet(sheet);
        ParkingFeeRecord importRoomFee = null;
 
        // 3. 遍历数据行,从第4行开始(索引从0开始,第4行对应索引3)
        for (int osIndex = 0; osIndex < oList.size(); osIndex++) {
            Object[] os = oList.get(osIndex);
 
            // 跳过前3行(索引0、1、2对应Excel第1、2、3行)
            if (osIndex < 3) {
                continue;
            }
 
            // 4. 空行校验:第一列(车牌号)为空则跳过当前行
            if (StringUtil.isNullOrNone(os[0])) {
                continue;
            }
 
            // 5. 核心字段非空校验(根据临时停车费业务调整校验规则)
            // 可根据实际Excel列顺序调整数组索引和校验逻辑
            Assert.hasValue(os[0], (osIndex + 1) + "行车牌号码不能为空");
            Assert.hasValue(os[1], (osIndex + 1) + "行项目编码不能为空");
            Assert.hasValue(os[2], (osIndex + 1) + "行项目名称不能为空");
            Assert.hasValue(os[3], (osIndex + 1) + "行停车类型不能为空");
            Assert.hasValue(os[4], (osIndex + 1) + "行车辆类型不能为空");
            Assert.hasValue(os[5], (osIndex + 1) + "行进场时间不能为空");
            Assert.hasValue(os[6], (osIndex + 1) + "行进场地址不能为空");
 
            // 6. 日期格式转换与校验(根据实际Excel列调整索引)
            // 到访日期
            String visitDateStr = excelDoubleToDate(os[7] != null ? os[7].toString() : "");
            // 进场时间(需转为datetime格式,若Excel是日期数字需处理)
            String entryTimeStr = excelDoubleToDate(os[5].toString());
            // 离场时间(可选字段)
            String exitTimeStr = os[8] != null ? excelDoubleToDate(os[8].toString()) : "";
            // 收费日期(可选字段)
            String chargeDateStr = os[9] != null ? excelDoubleToDate(os[9].toString()) : "";
 
            // 日期格式校验(根据实际格式调整,示例用YYYY-MM-DD HH:mm:ss)
            if (!StringUtil.isNullOrNone(entryTimeStr)) {
                Assert.isDate(entryTimeStr, DateUtil.DATE_FORMATE_STRING_A,
                        (osIndex + 1) + "行进场时间格式错误 请填写YYYY-MM-DD HH:mm:ss 文本格式");
            }
            if (!StringUtil.isNullOrNone(visitDateStr)) {
                Assert.isDate(visitDateStr, DateUtil.DATE_FORMATE_STRING_B,
                        (osIndex + 1) + "行到访日期格式错误 请填写YYYY-MM-DD 文本格式");
            }
 
            // 7. 金额/数值转换(可选字段)
            String chargeAmountStr = os[10] != null ? os[10].toString() : "";
            String parkingDurationStr = os[11] != null ? os[11].toString() : "";
 
            // 8. 封装数据到实体类(若ImportRoomFee字段不匹配,建议新建ParkingFeeRecord集合)
            importRoomFee = new ParkingFeeRecord();
            // 核心字段赋值(根据实际Excel列顺序调整索引)
            importRoomFee.setLicensePlate(os[0].toString()); // 车牌号码
            importRoomFee.setProjectCode(os[1].toString()); // 项目编码(需扩展ImportRoomFee字段)
            importRoomFee.setProjectName(os[2].toString()); // 项目名称(需扩展ImportRoomFee字段)
            importRoomFee.setParkingType(os[3].toString()); // 停车类型(需扩展ImportRoomFee字段)
            importRoomFee.setVehicleType(os[4].toString()); // 车辆类型(需扩展ImportRoomFee字段)
            importRoomFee.setEntryTime(entryTimeStr); // 进场时间
            importRoomFee.setEntryAddress(os[6].toString()); // 进场地址
            importRoomFee.setVisitDate(visitDateStr); // 到访日期(需扩展ImportRoomFee字段)
            importRoomFee.setExitTime(exitTimeStr); // 离场时间(需扩展ImportRoomFee字段)
            importRoomFee.setChargeDate(chargeDateStr); // 收费日期(需扩展ImportRoomFee字段)
//            importRoomFee.setChargeAmount(chargeAmountStr); // 收费金额
//            importRoomFee.setParkingDuration(parkingDurationStr); // 停车时长(需扩展ImportRoomFee字段)
            // 可选字段赋值
            importRoomFee.setVisitorName(os[12] != null ? os[12].toString() : ""); // 访客姓名
            importRoomFee.setVisitorPhone(os[13] != null ? os[13].toString() : ""); // 访客电话
            importRoomFee.setChargePerson(os[14] != null ? os[14].toString() : ""); // 收费人
//            importRoomFee.setRemark(os[15] != null ? os[15].toString() : ""); // 备注
 
            // 9. 添加到集合
//            rooms.add(importRoomFee);
        }
    }
//
//    // 保留原有的excel数字转日期方法(若需兼容Excel日期数字格式)
//    private String excelDoubleToDate(String doubleStr) {
//        if (StringUtil.isNullOrNone(doubleStr)) {
//            return "";
//        }
//        try {
//            // Excel日期数字(如45230)转成yyyy-MM-dd格式字符串,需根据实际工具类调整
//            double excelDate = Double.parseDouble(doubleStr);
//            // 此处替换为你实际的Excel日期转换逻辑
//            return DateUtil.excelDateToStr(excelDate, DateUtil.DATE_FORMATE_STRING_B);
//        } catch (Exception e) {
//            // 若不是数字格式,直接返回原字符串(文本格式日期)
//            return doubleStr;
//        }
//    }
 
}