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;
|
// }
|
// }
|
|
}
|