package com.java110.job.importData.adapt; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.java110.core.factory.GenerateCodeFactory; import com.java110.dto.importData.Vtil; import com.java110.dto.log.AssetImportLogDetailDto; import com.java110.dto.msg.MaintenancePaymentPo; import com.java110.dto.msg.MpFifthPaymentRecordPo; import com.java110.dto.msg.MpPaymentRecordPo; import com.java110.fee.api.*; import com.java110.job.dao.IMaintenancePaymentService; import com.java110.job.dao.IMpFifthPaymentRecordService; import com.java110.job.dao.IMpPaymentRecordService; import com.java110.job.importData.DefaultImportData; import com.java110.job.importData.IImportDataAdapt; import com.java110.po.importFee.MaintenancePayment; import com.java110.po.importFee.MpFifthPaymentRecord; import com.java110.utils.util.BeanConvertUtil; import com.java110.utils.util.DateUtil; import com.java110.utils.util.NumberUtil; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * 签报收支款数据导入适配器(适配"Z三、模版签报收支款情况-V5-20251127.xlsx"的"荣顺苑签报单"sheet) * 前端请求需传入:param.append('importAdapt', "importReportMainV2QueueData") */ @Service("importReportMainV2QueueData") public class ImportReportMainV2QueueDataAdapt extends DefaultImportData implements IImportDataAdapt { @Autowired MaintenancePaymentApi maintenancePaymentApi; @Autowired AnnouncementTimeRangeApi announcementTimeRangeApi; @Autowired OwnersCommitteeConventionApi ownersCommitteeConventionApi; @Autowired OwnerWithdrawalInfoApi ownerWithdrawalInfoApi; @Autowired OwnerQualityGuaranteeApi ownerQualityGuaranteeApi; @Autowired MpPaymentRecordApi mpPaymentRecordApi; @Autowired MpFifthPaymentRecordApi mpFifthPaymentRecordApi; @Autowired OwnerRemarkInfoApi ownerRemarkInfoApi; // 注入数据库服务(SqlSessionTemplate版Service) @Override public void importData(List assetImportLogDetailDtos) { for (AssetImportLogDetailDto logDetailDto : assetImportLogDetailDtos) { try { JSONArray cellArray = JSONObject.parseArray(logDetailDto.getContent()); String flowNumber = getCellValue(cellArray, 1); // 第2列:流转编号 String projectName = getCellValue(cellArray, 4); // 第5列:项目名称 String ownersCommitteeAmountStr = getCellValue(cellArray, 12); // 第13列:业委会金额 AnnouncementTimeRangePo announcementTimeRangePo = null; OwnersCommitteeConventionPo ocoPo = null; OwnerWithdrawalInfoPo owiPo = null; OwnerQualityGuaranteePo oqgPo = null; OwnerRemarkInfoPo ownerRemarkInfoPo = null; // 3. 构建3张表的PO对象(字段映射+业务计算) MaintenancePayment mainPo = buildMaintenancePaymentPoV2(cellArray);//主表 // if (!getCellValue(cellArray, 22).isEmpty() && !getCellValue(cellArray, 23).isEmpty()) { announcementTimeRangePo = buildAnnouncementTimeRangePo(cellArray, mainPo.getId());//公共收益金 // } // if (!getCellValue(cellArray, 26).isEmpty() && !getCellValue(cellArray, 27).isEmpty()) { ocoPo = buildOwnersCommitteeConventionPo(cellArray, mainPo.getId()); // } // if (!getCellValue(cellArray, 29).isEmpty()) { owiPo = buildOwnerWithdrawalInfoPo(cellArray, mainPo.getId()); // } // if (!getCellValue(cellArray, 39).isEmpty()) { oqgPo = buildOwnerQualityGuaranteePo(cellArray, mainPo.getId()); // } List paymentRecordPos = buildMpPaymentRecordPos(cellArray, mainPo.getFlowNumber(), mainPo.getId()); List fifthPos = buildMpFifthPaymentRecordPos(cellArray, mainPo.getFlowNumber(), mainPo.getId()); // if (!getCellValue(cellArray, 137).isEmpty()) { ownerRemarkInfoPo = buildOwnerRemarkInfoPo(cellArray, mainPo.getFlowNumber(), mainPo.getId()); // } importData(mainPo, announcementTimeRangePo, ocoPo, owiPo, oqgPo, paymentRecordPos, fifthPos, ownerRemarkInfoPo); // 5. 更新导入日志状态(成功)- 调用父类方法 updateImportLogDetailState(logDetailDto.getDetailId()); } catch (Exception e) { e.printStackTrace(); updateImportLogDetailState(logDetailDto.getDetailId(), e); } } } private void importData(MaintenancePayment mainPo, AnnouncementTimeRangePo announcementTimeRangePo, OwnersCommitteeConventionPo ocoPo, OwnerWithdrawalInfoPo owiPo, OwnerQualityGuaranteePo oqgPo, List paymentRecordPos, List fifthPos, OwnerRemarkInfoPo ownerRemarkInfoPo) { maintenancePaymentApi.saveMaintenancePayment(mainPo); if (announcementTimeRangePo != null) { announcementTimeRangeApi.saveAnnouncementTimeRangeInfo(announcementTimeRangePo); } if (ocoPo != null) { ownersCommitteeConventionApi.saveOwnersCommitteeConvention(ocoPo); } if (owiPo != null) { ownerWithdrawalInfoApi.saveOwnerWithdrawalInfo(owiPo); } if (oqgPo != null) { ownerQualityGuaranteeApi.saveOwnerQualityGuarantee(oqgPo); } for (MpPaymentRecordPo paymentRecordPo : paymentRecordPos) { mpPaymentRecordApi.saveMpPaymentRecord(paymentRecordPo); } for (MpFifthPaymentRecord fifthPo : fifthPos) { mpFifthPaymentRecordApi.saveMpFifthPaymentRecord(fifthPo); } if (ownerRemarkInfoPo != null) { ownerRemarkInfoApi.saveOwnerRemarkInfo(ownerRemarkInfoPo); } } private OwnerRemarkInfoPo buildOwnerRemarkInfoPo(JSONArray cellArray, String flowNumber, String id) { OwnerRemarkInfoPo po = new OwnerRemarkInfoPo(); long longId = UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE; // 避免负数 po.setId(longId); po.setMpId(id); po.setRemarkPerson("导入内容"); // po.setRemarkContent(getCellValue(cellArray, 137)); return po; } private OwnerQualityGuaranteePo buildOwnerQualityGuaranteePo(JSONArray cellArray, String aLong) { OwnerQualityGuaranteePo po = new OwnerQualityGuaranteePo(); long longId = UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE; // 避免负数 po.setId(longId); // 主键ID po.setMpId(aLong); // po.setQualityGuaranteePeriod2Start(Vtil.defaultValueToDate(getCellValue(cellArray, 37))); // po.setQualityGuaranteePeriod2End(Vtil.defaultValueToDate(getCellValue(cellArray, 38))); // po.setAcceptanceDate(Vtil.defaultValueToDate(getCellValue(cellArray, 41))); // po.setAvailableWithdrawalDate(Vtil.defaultValueToDate(getCellValue(cellArray, 43))); // po.setQualityGuaranteeRatio(getCellNum(cellArray, 39)); // po.setQualityGuaranteeAmount(getCellNum(cellArray, 12) * po.getQualityGuaranteeRatio()); // po.setAuditStatus(getCellValue(cellArray, 42)); return po; } private OwnerWithdrawalInfoPo buildOwnerWithdrawalInfoPo(JSONArray cellArray, String aLong) { OwnerWithdrawalInfoPo po = new OwnerWithdrawalInfoPo(); long longId = UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE; // 避免负数 po.setId(longId); // 主键ID po.setMpId(aLong); // po.setWithdrawalEncounteredProblem(getCellValue(cellArray, 28)); // po.setShortageOrArrears(getCellNum(cellArray, 29)); // po.setRoadName(getCellValue(cellArray, 30)); // po.setLane(getCellValue(cellArray, 31)); // po.setDoor(getCellValue(cellArray, 32)); // po.setRoom(getCellValue(cellArray, 33)); // po.setDoorRoomNumber(getCellValue(cellArray, 34)); // po.setOwnerAddress(getCellValue(cellArray, 35)); return po; } private OwnersCommitteeConventionPo buildOwnersCommitteeConventionPo(JSONArray cellArray, String mpId) { OwnersCommitteeConventionPo po = new OwnersCommitteeConventionPo(); long longId = UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE; // 避免负数 po.setId(longId); // 主键ID po.setMpId(mpId); // po.setQuota(getCellNum(cellArray, 25)); // po.setOwnersCommitteeResolution(getCellValue(cellArray, 26)); // po.setOwnersCommitteeConsultation(getCellValue(cellArray, 27)); return po; } private AnnouncementTimeRangePo buildAnnouncementTimeRangePo(JSONArray cellArray, String mpId) { AnnouncementTimeRangePo po = new AnnouncementTimeRangePo(); long longId = UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE; // 避免负数 po.setId(longId); // 主键ID po.setMpId(mpId); // po.setPlannedAnnouncementStart(getCellValue(cellArray, 21)); // po.setPlannedAnnouncementEnd(getCellValue(cellArray, 22)); // po.setPublishedAnnouncementStart(getCellValue(cellArray, 23)); // po.setPublishedAnnouncementEnd(getCellValue(cellArray, 24)); return po; } private MaintenancePayment buildMaintenancePaymentPoV2(JSONArray cellArray) throws ParseException { MaintenancePayment po = new MaintenancePayment(); try { po.setId(GenerateCodeFactory.getGeneratorId("10")); // 主键ID po.setAuxiliaryColumn(getCellValue(cellArray, 0)); // 第1列:辅助列 po.setFlowNumber(getCellValue(cellArray, 1)); // 第2列:流转编号 po.setSerialNumber(getCellValue(cellArray, 2)); // 第3列:序号 po.setProjectCode(getCellValue(cellArray, 3)); // 第4列:项目编码 po.setProjectName(getCellValue(cellArray, 4)); // 第5列:项目名称 po.setYear(getCellValue(cellArray, 5)); // 第6列:年份 po.setMonth(getCellValue(cellArray, 6)); // 第7列:月份 po.setDay(getCellValue(cellArray, 7)); // 第8列:日 po.setDate(Vtil.defaultValueToDate(getCellValue(cellArray, 8))); // 第9列:日期 po.setProjectContent(getCellValue(cellArray, 9)); // 第10列:工程内容 po.setManagementOfficeAmount(getCellValue(cellArray, 10)); // 第11列:管理处金额 po.setManagementOfficeSeal(getCellValue(cellArray, 11)); // 第12列:管理处是否已盖章(√转"是",否则"否") po.setOwnersCommitteeAmount(getCellValue(cellArray, 12)); // 第13列:业委会金额 po.setAuditAmount(getCellValue(cellArray, 13)); // 第14列:审价金额 po.setOwnersCommitteeSeal(getCellValue(cellArray, 14)); // 第15列:业委会是否已盖章 po.setReportDepartment(getCellValue(cellArray, 15)); // 第16列:签报部门 po.setFundTypeLevel1(getCellValue(cellArray, 16)); // 第17列:基金类型-一级分类 po.setFundTypeLevel2(getCellValue(cellArray, 17)); // 第18列:基金类型-二级分类 po.setMaintenanceType(getCellValue(cellArray, 18)); // 第19列:幢/全体 po.setBuildingOrAll(getCellValue(cellArray, 19)); // 第20列:维修类型 po.setSpecificAnnouncementStatus(getCellValue(cellArray, 20));//具体公布情况 TODO 添加sql字段 po.setQuota(getCellValue(cellArray, 21)); // 22:额度 po.setOwnersCommitteeResolution(getCellValue(cellArray, 22)); // 23:业委会大会决议(是/否) po.setOwnersCommitteeConsultation(getCellValue(cellArray, 23)); // 24:业委会征询表(是否) po.setWithdrawalEncounteredProblem(getCellValue(cellArray, 24)); // 25:支取遇到的问题 po.setShortageOrArrears(getCellValue(cellArray, 25)); // 26:缺支/欠款(元) po.setRoadName(getCellValue(cellArray, 26)); // 路名 po.setLane(getCellValue(cellArray, 27)); // 弄 po.setDoor(getCellValue(cellArray, 28)); // 门 po.setRoom(getCellValue(cellArray, 29)); // 室 po.setDoorRoomNumber(getCellValue(cellArray, 30)); // 门室号 po.setOwnerAddress(getCellValue(cellArray, 31)); // 业主地址 po.setQualityGuaranteePeriod2(getCellValue(cellArray, 32)); // 33:质保期(第二个) po.setQualityGuaranteeRatio(getCellValue(cellArray, 33)); // 34:质保金占比 po.setQualityGuaranteeAmount(getCellValue(cellArray, 34)); // 35:质保金金额(元) po.setAcceptanceDate(getCellValue(cellArray, 35)); // 验收日期 po.setAuditDate(getCellValue(cellArray, 36)); // 审计情况:年/月 po.setAvailableWithdrawalDate(getCellValue(cellArray, 37)); // 第40列:可启动支取日期(年月日) po.setManagementFeeRatio(getCellValue(cellArray, 164)); // 管理费 po.setPaymentTarget(getCellValue(cellArray, 168)); // 支付对象 po.setPayeeName(getCellValue(cellArray, 239)); // 支付公司名称/个人名字 po.setIdCardNumber(getCellValue(cellArray, 240)); // 个人身份证号码 po.setBankName(getCellValue(cellArray, 241)); // 开户银行 po.setBankAccount(getCellValue(cellArray, 242)); // 开户账号 po.setAuditDate(getCellValue(cellArray, 252)); // 审计情况:年/月 po.setAdvancedPayment(getCellValue(cellArray, 246));//垫付金额 po.setPayableAmountD(getCellValue(cellArray, 251));//应付金额D(特殊付款)_John return po; } catch (ArrayIndexOutOfBoundsException e) { return po; } } /** * 构建 MaintenancePaymentPo(维修资金支取信息表) * 字段映射对应"荣顺苑签报单"表头顺序,包含17个自动计算字段 */ // private MaintenancePaymentPo buildMaintenancePaymentPo(JSONArray cellArray) throws ParseException { // MaintenancePaymentPo po = new MaintenancePaymentPo(); // // 基础字段(直接映射Excel单元格) // long longId = UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE; // 避免负数 // po.setId(longId+""); // 主键ID // po.setAuxiliaryColumn(getCellValue(cellArray, 0)); // 第1列:辅助列 // po.setFlowNumber(getCellValue(cellArray, 1)); // 第2列:流转编号 // po.setSerialNumber(parseInteger(getCellValue(cellArray, 2))); // 第3列:序号 // po.setProjectCode(getCellValue(cellArray, 3)); // 第4列:项目编码 // po.setProjectName(getCellValue(cellArray, 4)); // 第5列:项目名称 // po.setYear(parseInteger(getCellValue(cellArray, 5))); // 第6列:年份 // po.setMonth(parseInteger(getCellValue(cellArray, 6))); // 第7列:月份 // po.setDay(parseInteger(getCellValue(cellArray, 7))); // 第8列:日 // po.setDate(parseDate(getCellValue(cellArray, 8))); // 第9列:日期 // po.setProjectContent(getCellValue(cellArray, 9)); // 第10列:工程内容 // po.setManagementOfficeAmount(parseBigDecimal(getCellValue(cellArray, 10))); // 第11列:管理处金额 // po.setManagementOfficeSeal(convertSealStatus(getCellValue(cellArray, 11))); // 第12列:管理处是否已盖章(√转"是",否则"否") // po.setOwnersCommitteeAmount(parseBigDecimal(getCellValue(cellArray, 12))); // 第13列:业委会金额 // po.setAuditAmount(parseBigDecimal(getCellValue(cellArray, 13))); // 第14列:审价金额 // po.setOwnersCommitteeSeal(convertSealStatus(getCellValue(cellArray, 14))); // 第15列:业委会是否已盖章 // po.setReportDepartment(getCellValue(cellArray, 15)); // 第16列:签报部门 // po.setFundTypeLevel1(getCellValue(cellArray, 16)); // 第17列:基金类型-一级分类 // po.setFundTypeLevel2(getCellValue(cellArray, 17)); // 第18列:基金类型-二级分类 // po.setBuildingOrAll(getCellValue(cellArray, 18)); // 第19列:幢/全体 // po.setMaintenanceType(getCellValue(cellArray, 19)); // 第20列:维修类型 // po.setQualityGuaranteePeriod1(getCellValue(cellArray, 20)); // 第21列:质保期(第一个) //// po.setPublicIncomeAnnouncement(getCellValue(cellArray, 21)); // 第22列:公共收益金公布情况 // // 公共收益金公布子字段(第23-26列) // po.setPlannedAnnouncementStart(getCellValue(cellArray, 21)); // 拟公布-起始(年月) // po.setPlannedAnnouncementEnd(getCellValue(cellArray, 22)); // 拟公布-止(年月) // po.setPublishedAnnouncementStart(getCellValue(cellArray, 23)); // 已公布-起始(年月) // po.setPublishedAnnouncementEnd(getCellValue(cellArray, 24)); // 已公布-止(年月) // po.setQuota(parseBigDecimal(getCellValue(cellArray, 25))); // 第27列:额度 // po.setOwnersCommitteeResolution(convertYesNo(getCellValue(cellArray, 26))); // 第28列:业委会大会决议(是/否) // po.setOwnersCommitteeConsultation(convertYesNo(getCellValue(cellArray, 27))); // 第29列:业委会征询表(是否) // po.setWithdrawalEncounteredProblem(getCellValue(cellArray, 28)); // 第30列:支取遇到的问题 // po.setShortageOrArrears(parseBigDecimal(getCellValue(cellArray, 29))); // 第31列:缺支/欠款(元) // // 业主地址子字段(第32-37列) // po.setRoadName(getCellValue(cellArray, 30)); // 路名 // po.setLane(getCellValue(cellArray, 31)); // 弄 // po.setDoor(getCellValue(cellArray, 32)); // 门 // po.setRoom(getCellValue(cellArray, 33)); // 室 // po.setDoorRoomNumber(getCellValue(cellArray, 34)); // 门室号 // po.setOwnerAddress(getCellValue(cellArray, 35)); // 业主地址 //// po.setWithdrawalProblem(getCellValue(cellArray, 36)); // 第38列:支取存在问题 // po.setProblemDifficulty(getCellValue(cellArray, 36)); // 第36列:问题难度 // po.setAvailableWithdrawalDate(parseDate(getCellValue(cellArray, 43))); // 第40列:可启动支取日期(年月日) // po.setQualityGuaranteePeriod2(getCellValue(cellArray, 37) + "~" + getCellValue(cellArray, 38)); // 第41列:质保期(第二个) // po.setQualityGuaranteeRatio(parseBigDecimal(getCellValue(cellArray, 39))); // 第42列:质保金占比 // po.setQualityGuaranteeAmount(parseBigDecimal(getCellValue(cellArray, 40))); // 第43列:质保金金额(元) // po.setReceivedQualityGuarantee(parseBigDecimal(getCellValue(cellArray, 44))); // 第44列:已到账质保金 //// po.setStartDate(parseDate(getCellValue(cellArray, 44))); // 第45列:起始(年月日) //// po.setEndDate(parseDate(getCellValue(cellArray, 45))); // 第46列:终止(年月日) // // // // 支付信息(第111-116列) // po.setPayeeName(getCellValue(cellArray, 143)); // 支付公司名称/个人名字 // po.setIdCardNumber(getCellValue(cellArray, 144)); // 个人身份证号码 // po.setBankName(getCellValue(cellArray, 145)); // 开户银行 // po.setBankAccount(getCellValue(cellArray, 146)); // 开户账号 // po.setRemarks(getCellValue(cellArray, 155)); // 备注 // po.setAcceptanceDate(parseDate(getCellValue(cellArray, 156))); // 验收日期 // po.setAuditDate(getCellValue(cellArray, 157)); // 审计情况:年/月 // // return po; // } /** * 构建 MpPaymentRecordPo 列表(5次打印数据) */ private List buildMpPaymentRecordPos(JSONArray cellArray, String flowNumber,String mainPo) throws ParseException { List pos = new ArrayList<>(); // 第一次打印数据(第47-53列) buildSinglePaymentRecord(mainPo, cellArray, flowNumber, 1, 38, pos); // 第二次打印数据(第54-60列) buildSinglePaymentRecord(mainPo, cellArray, flowNumber, 2, 50, pos); // 第三次打印数据(第61-67列) buildSinglePaymentRecord(mainPo, cellArray, flowNumber, 3, 62, pos); // 第四次打印数据(第68-74列) buildSinglePaymentRecord(mainPo, cellArray, flowNumber, 4, 74, pos); // 第五次打印数据(第75-81列) buildSinglePaymentRecord(mainPo, cellArray, flowNumber, 5, 86, pos); buildSinglePaymentRecord(mainPo, cellArray, flowNumber, 6, 98, pos); buildSinglePaymentRecord(mainPo, cellArray, flowNumber, 7, 110, pos); buildSinglePaymentRecord(mainPo, cellArray, flowNumber, 8, 122, pos); buildSinglePaymentRecord(mainPo, cellArray, flowNumber, 9, 134, pos); buildSinglePaymentRecord(mainPo, cellArray, flowNumber, 10, 146, pos); return pos; } /** * 构建单次打印的 MpPaymentRecordPo */ private void buildSinglePaymentRecord(String mpId, JSONArray cellArray, String flowNumber, int printTimes, int index, List pos) throws ParseException { // if (getCellValue(cellArray, index).isEmpty()) { // return; // } MpPaymentRecordPo po = new MpPaymentRecordPo(); try { po.setId(GenerateCodeFactory.getGeneratorId("33")); po.setMpId(mpId); // mp_id = 流转编号_打印次数(确保唯一) po.setPrintCount(printTimes); po.setFirstPrintDate(getCellValue(cellArray, index)); po.setResolutionNumber(getCellValue(cellArray, index + 1)); po.setPrintAmount(getCellValue(cellArray, index + 2)); po.setArrivalDate(getCellValue(cellArray, index + 3)); po.setArrivalAmount(getCellValue(cellArray, index + 4)); po.setWithdrawer(getCellValue(cellArray, index + 5)); po.setShortageOrArrears(getCellValue(cellArray, index + 6)); // 业主地址信息(复用main表的地址) po.setRoadName(getCellValue(cellArray, index + 7)); po.setLane(getCellValue(cellArray, index + 8)); po.setDoor(getCellValue(cellArray, index + 9)); po.setRoom(getCellValue(cellArray, index + 10)); po.setOwnerAddress(getCellValue(cellArray, index + 11)); po.setSnakeCase(getCellValue(cellArray, 158)); } catch (ArrayIndexOutOfBoundsException e) { } pos.add(po); } /** * 构建 MpFifthPaymentRecordPo(第五次拟付实付) */ private List buildMpFifthPaymentRecordPos(JSONArray cellArray, String flowNumber,String mainPo) throws ParseException { List pos = new ArrayList<>(); buildMpFifthPaymentRecordPo(pos, cellArray, flowNumber, mainPo, 169,1); buildMpFifthPaymentRecordPo(pos, cellArray, flowNumber, mainPo, 176,2); buildMpFifthPaymentRecordPo(pos, cellArray, flowNumber, mainPo, 183,3); buildMpFifthPaymentRecordPo(pos, cellArray, flowNumber, mainPo, 190,4); buildMpFifthPaymentRecordPo(pos, cellArray, flowNumber, mainPo, 197,5); buildMpFifthPaymentRecordPo(pos, cellArray, flowNumber, mainPo, 204,6); buildMpFifthPaymentRecordPo(pos, cellArray, flowNumber, mainPo, 211,7); buildMpFifthPaymentRecordPo(pos, cellArray, flowNumber, mainPo, 218,8); buildMpFifthPaymentRecordPo(pos, cellArray, flowNumber, mainPo, 225,9); buildMpFifthPaymentRecordPo(pos, cellArray, flowNumber, mainPo, 232,10); return pos; } private void buildMpFifthPaymentRecordPo(List pos, JSONArray cellArray, String flowNumber, String mainPo, int index, int printTimes) throws ParseException { // if (getCellValue(cellArray, index).isEmpty()) { // return; // } MpFifthPaymentRecord po = new MpFifthPaymentRecord(); try { long longId = UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE; // 避免负数 po.setId(longId+""); po.setMpId(mainPo); po.setPaymentCount(printTimes); po.setFifthPlannedPaymentAmount(getCellValue(cellArray, index)); po.setPlannedPaymentDate(getCellValue(cellArray, index + 1)); po.setCategory(getCellValue(cellArray, index + 2)); po.setReimburser(getCellValue(cellArray, index + 3)); po.setPaymentTarget(getCellValue(cellArray, index + 4)); po.setActualPaymentAmount(getCellValue(cellArray, index + 5)); po.setActualPaymentDate(getCellValue(cellArray, index + 6)); } catch (ArrayIndexOutOfBoundsException e) { } pos.add(po); } private String getCellValue(JSONArray cellArray, int index) { try { if (index < 0 || index >= cellArray.size()) { return ""; } Object value = cellArray.get(index); return value == null ? "" : value.toString().trim(); } catch (ArrayIndexOutOfBoundsException e) { return null; } } }