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; /** * 历史缴费数据导入 *

* 导入请求参数中必须包含 * param.append('importAdapt', "importCarHistoryFeeDetail"); *

* 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(); *

* 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 rooms = new ArrayList(); //获取车辆信息 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 rooms) { // 1. 指定读取的sheet名称:临时停车费 导入模板 Sheet sheet = ImportExcelUtils.getSheet(workbook, "临时停车费 导入模板"); if (sheet == null) { throw new IllegalArgumentException("未找到名称为【临时停车费 导入模板】的工作表"); } // 2. 读取sheet中所有行数据 List 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; // } // } }