chengf
2026-02-25 64b14b0549344f13b191e2c26ed199f62655c43f
导入测试
41个文件已修改
1个文件已添加
1317 ■■■■ 已修改文件
java110-bean/src/main/java/com/java110/dto/importData/Vtil.java 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/owner/OwnerCarDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/po/car/OwnerCarPo.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/po/fee/FeeAttrPo.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/po/meter/MeterWaterPo.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/po/meter/PhoneBillFlow.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/po/oweFeeCallable/OweFeeCallablePo.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/community/RoomServiceDaoImplMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/community/UnitServiceDaoImplMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/fee/FeeConfigServiceDaoImplMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/fee/FeeServiceDaoImplMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/fee/MeterWaterServiceDaoImplMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/fee/OweFeeCallableV1ServiceDaoImplMapper.xml 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/report/ReportCommunityServiceDaoImplMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/store/ContractServiceDaoImplMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/user/OwnerCarServiceDaoImplMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/user/OwnerCarV1ServiceDaoImplMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/user/OwnerServiceDaoImplMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/user/OwnerV1ServiceDaoImplMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-interface/src/main/java/com/java110/intf/fee/IMeterWaterInnerServiceSMO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-interface/src/main/java/com/java110/intf/fee/IPayFeeV1InnerServiceSMO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-utils/src/main/java/com/java110/utils/util/ImportExcelUtils.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-api/src/main/java/com/java110/api/importData/adapt/ImportContractCleaningAdapt.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-api/src/main/java/com/java110/api/importData/adapt/ImportElectricityFeeV2DataCleaningAdapt.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-api/src/main/java/com/java110/api/importData/adapt/ImportMeterWaterFeeV2DataCleaningAdapt.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-api/src/main/java/com/java110/api/importData/adapt/ImportOwnerCarV2DataCleaningAdapt.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-api/src/main/java/com/java110/api/importData/adapt/ImportPropertyWhiteListfFlowAdapt.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-api/src/main/java/com/java110/api/importData/adapt/ImportRoomOwnerDataV2CleaningAdapt.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/cmd/fee/ListFeeCmd.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/smo/impl/MeterWaterInnerServiceSMOImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/smo/impl/PayFeeV1InnerServiceSMOImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/DefaultImportData.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/ImportDataExecutor.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportContractQueueDataAdapt.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportElectricityFeeV2QueueDataAdapt.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportHistoryFeeDetailQueueDataAdapt.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportMeterWaterFeeV2QueueDataAdapt.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportOwnerCarQueueV2DataAdapt.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportPhoneBillFeeV2QueueDataAdapt.java 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportRoomOwnerV2QueueDataAdapt.java 396 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-user/src/test/java/com/java110/user/CgfTesdt.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot/src/main/java/com/java110/boot/BootApplicationStart.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/importData/Vtil.java
@@ -1,5 +1,6 @@
package com.java110.dto.importData;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.YearMonth;
@@ -8,6 +9,7 @@
import java.time.format.ResolverStyle;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class Vtil {
@@ -84,8 +86,17 @@
        }
    }
    public static String defaultValueToDate(Object o, String state) {
    public static BigDecimal defaultNum(Object o) {
        if (o == null || o.toString().isEmpty()) {
            return new BigDecimal(0);
        }
        try {
            return o == null ? new BigDecimal(0) : new BigDecimal(o.toString());
        }catch (Exception e) {
            throw new IllegalArgumentException("数值转换错误!:" + o.toString());
        }
    }
    public static String defaultValueToDate(Object o, String state, Object value) {
        // 空值直接返回null(原有逻辑)
        if (o == null || o.toString().isEmpty() || o.toString().equals("0")) {
            return null;
@@ -112,10 +123,192 @@
                return lastDay.toString();
            }
        } catch (DateTimeParseException e) {
            // 不是20xx/01格式,忽略解析异常,执行原有逻辑
            try {
                ymFormatter = DateTimeFormatter.ofPattern("yyyy-M")
                        .withLocale(Locale.CHINA)
                        .withResolverStyle(ResolverStyle.LENIENT); // 宽松解析,兼容各种合法格式
                // 先解析为YearMonth(专门处理年月的类,不会缺少日期维度)
                YearMonth yearMonth = YearMonth.parse(input, ymFormatter);
                // 根据state参数处理日期
                if ("start".equals(state)) {
                    // state为start时返回当月第一天
                    LocalDate firstDay = yearMonth.atDay(1);
                    return firstDay.toString();
                } else if ("end".equals(state)) {
                    // state为end时返回当月最后一天
                    LocalDate lastDay = yearMonth.atEndOfMonth();
                    return lastDay.toString();
                }
            } catch (DateTimeParseException e1) {
                try {
                    ymFormatter = DateTimeFormatter.ofPattern("yyyy.M")
                            .withLocale(Locale.CHINA)
                            .withResolverStyle(ResolverStyle.LENIENT); // 宽松解析,兼容各种合法格式
                    // 先解析为YearMonth(专门处理年月的类,不会缺少日期维度)
                    YearMonth yearMonth = YearMonth.parse(input, ymFormatter);
                    // 根据state参数处理日期
                    if ("start".equals(state)) {
                        // state为start时返回当月第一天
                        LocalDate firstDay = yearMonth.atDay(1);
                        return firstDay.toString();
                    } else if ("end".equals(state)) {
                        // state为end时返回当月最后一天
                        LocalDate lastDay = yearMonth.atEndOfMonth();
                        return lastDay.toString();
                    }
                } catch (Exception e3) {
                    try {
                        try {
                            // 尝试将对象转换为数字(兼容Excel日期序列号,如44747)
                            double excelDateNum = Double.parseDouble(o.toString());
                            // Excel 1900日期系统基准(修正闰日bug,实际基准是1899-12-30)
                            Calendar calendar = Calendar.getInstance();
                            calendar.set(1899, 11, 30, 0, 0, 0); // 月份从0开始,11代表12月
                            calendar.set(Calendar.MILLISECOND, 0);
                            // 计算对应的实际日期
                            calendar.add(Calendar.DAY_OF_MONTH, (int) excelDateNum);
                            // 格式化为yyyy-MM-dd的日期字符串
                            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                            return sdf.format(calendar.getTime());
                        } catch (NumberFormatException e6) {
                            // 非数字类型,执行原有逻辑返回toString()
                            return defaultValue(value, null);
                        }
                    } catch (Exception e2) {
                    }
                }
            }
        }
        // 非目标格式或state不匹配时,返回原始字符串(原有逻辑)
        return input;
        return defaultValue(value, null);
    }
    public static String defaultValueToDate(Object o, String state) {
        return defaultValueToDate(o, state, o);
    }
    /**
     * 处理数字字符串,按指定小数位数截取,特殊值返回默认值
     * @param count 待处理的数字字符串
     * @param i 保留的小数位数
     * @param value 默认返回值(当count为空/为null/为0时)
     * @return 处理后的字符串
     */
    public static String processCount(String count, Integer i, String value) {
        // 1. 处理count为空、null或"0"的情况,直接返回默认值value
        if (count == null || count.trim().isEmpty() || "0".equals(count.trim())) {
            return value;
        }
        // 2. 处理保留小数位数为null或负数的边界情况(默认保留0位小数)
        int keepDecimalPlaces = (i == null || i < 0) ? 0 : i;
        // 3. 分割整数部分和小数部分
        String[] parts = count.split("\\.");
        String integerPart = parts[0];
        String decimalPart = parts.length > 1 ? parts[1] : "";
        // 4. 截取小数部分到指定长度(不足则补0,超过则截断)
        StringBuilder resultBuilder = new StringBuilder(integerPart);
        if (keepDecimalPlaces > 0) {
            resultBuilder.append(".");
            // 截取小数部分,长度不超过keepDecimalPlaces
            String truncatedDecimal = decimalPart.length() >= keepDecimalPlaces
                    ? decimalPart.substring(0, keepDecimalPlaces)
                    : String.format("%-" + keepDecimalPlaces + "s", decimalPart).replace(' ', '0');
            resultBuilder.append(truncatedDecimal);
        }
        return resultBuilder.toString();
    }
    /**
     * 增强版日期处理工具方法
     * @param date 原始日期对象(可为null或无效对象)
     * @param test 标识:start-当月第一天;end-当月最后一天;空/null-原日期
     * @param format 目标日期格式(如yyyy-MM-dd HH:mm:ss)
     * @param timeText 时分秒控制:start-00:00:00;end-23:59:59(逻辑同test)
     * @param configDate date异常时返回的兜底值
     * @return 处理后的日期字符串(异常时返回configDate)
     */
    public static String processDateEnhanced(Date date, String test, String format, String timeText, String configDate) {
        // 1. 优先处理date为空/异常的情况,直接返回兜底值configDate
        if (date == null) {
            return configDate;
        }
        // 2. 校验格式参数,若格式为空/无效,也返回兜底值
        if (format == null || format.trim().isEmpty()) {
            return configDate;
        }
        Calendar calendar = null;
        try {
            // 3. 尝试初始化Calendar并设置日期,捕获解析/转换异常
            calendar = Calendar.getInstance();
            calendar.setTime(date);
        } catch (Exception e) {
            // date无法解析(如非标准日期对象),返回兜底值
            return configDate;
        }
        // 4. 统一处理test和timeText的大小写,避免匹配问题
        String testNormalized = (test == null) ? "" : test.trim().toLowerCase();
        String timeTextNormalized = (timeText == null) ? "" : timeText.trim().toLowerCase();
        // 5. 调整日期(start/end)
        if ("start".equals(testNormalized)) {
            // start:当月第一天
            calendar.set(Calendar.DAY_OF_MONTH, 1);
        } else if ("end".equals(testNormalized)) {
            // end:当月最后一天(自动适配大小月/2月)
            calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        }
        // test为空/其他值:不调整日期
        // 6. 调整时分秒(基于timeText)
        if ("start".equals(timeTextNormalized)) {
            // start:00:00:00.000
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MILLISECOND, 0);
        } else if ("end".equals(timeTextNormalized)) {
            // end:23:59:59.999
            calendar.set(Calendar.HOUR_OF_DAY, 23);
            calendar.set(Calendar.MINUTE, 59);
            calendar.set(Calendar.SECOND, 59);
            calendar.set(Calendar.MILLISECOND, 999);
        }
        // timeText为空/其他值:不调整时分秒
        // 7. 按指定格式格式化日期并返回
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            return sdf.format(calendar.getTime());
        } catch (Exception e) {
            // 格式化失败(如格式字符串非法),返回兜底值
            return configDate;
        }
    }
    public static String getMonth(String month) {
        try {
            if (month.length() == 1) {
                month = "0" + month;
            }
        } catch (Exception e) {
            return month;
        }
        return month;
    }
}
java110-bean/src/main/java/com/java110/dto/owner/OwnerCarDto.java
@@ -48,6 +48,26 @@
    private String carTypeName;
    private String carNum;
    private String carNumLike;
    private String carNumLikeRight_;
    private String unitPricePerMonth;
    public String getUnitPricePerMonth() {
        return unitPricePerMonth;
    }
    public void setUnitPricePerMonth(String unitPricePerMonth) {
        this.unitPricePerMonth = unitPricePerMonth;
    }
    public String getCarNumLikeRight_() {
        return carNumLikeRight_;
    }
    public void setCarNumLikeRight_(String carNumLikeRight_) {
        this.carNumLikeRight_ = carNumLikeRight_;
    }
    private String memberCarNum;
    private String memberCarNumLike;
    private String[] carNums;
java110-bean/src/main/java/com/java110/po/car/OwnerCarPo.java
@@ -42,6 +42,53 @@
    private String unitPricePerMonth; // 单价(元/月)
    private String annualReceivableAmount; // 年应收款
    private String parkingType;
    private String roadName;
    private String floorNum;
    private String unitNum;
    private String roomNum;
    public String getRoadName() {
        return roadName;
    }
    public void setRoadName(String roadName) {
        this.roadName = roadName;
    }
    public String getFloorNum() {
        return floorNum;
    }
    public void setFloorNum(String floorNum) {
        this.floorNum = floorNum;
    }
    public String getUnitNum() {
        return unitNum;
    }
    public void setUnitNum(String unitNum) {
        this.unitNum = unitNum;
    }
    public String getRoomNum() {
        return roomNum;
    }
    public void setRoomNum(String roomNum) {
        this.roomNum = roomNum;
    }
    public String getParkingType() {
        return parkingType;
    }
    public void setParkingType(String parkingType) {
        this.parkingType = parkingType;
    }
    public String getCarId() {
        return carId;
    }
java110-bean/src/main/java/com/java110/po/fee/FeeAttrPo.java
@@ -19,6 +19,18 @@
    private String specCd;
    private String value;
    public FeeAttrPo(String feeId, String communityId, String attrId, String specCd, String value) {
        this.feeId = feeId;
        this.communityId = communityId;
        this.attrId = attrId;
        this.specCd = specCd;
        this.value = value;
    }
    public FeeAttrPo() {
    }
    public String getFeeId() {
        return feeId;
    }
java110-bean/src/main/java/com/java110/po/meter/MeterWaterPo.java
@@ -43,6 +43,7 @@
    private String amountDifference; // 比较金额差额
    private String autoDeduction; // 自动扣款
    private String remark2; // 备注2
    private String remark3; // 备注3
    private String address;
    private String writeTime;
    private String writer;
@@ -102,6 +103,14 @@
        return payDate;
    }
    public String getRemark3() {
        return remark3;
    }
    public void setRemark3(String remark3) {
        this.remark3 = remark3;
    }
    public void setPayDate(String payDate) {
        this.payDate = payDate;
    }
java110-bean/src/main/java/com/java110/po/meter/PhoneBillFlow.java
@@ -237,6 +237,16 @@
    private String feeId;
    private String remark3;
    public String getRemark3() {
        return remark3;
    }
    public void setRemark3(String remark3) {
        this.remark3 = remark3;
    }
    public Integer getPage() {
        return page;
    }
java110-bean/src/main/java/com/java110/po/oweFeeCallable/OweFeeCallablePo.java
@@ -51,7 +51,68 @@
    private String endTime;
    private String createTime;
    private String receivableAmount;
    /**
     * 到账金额
     */
    private String receivedAmount;
    /**
     * 差额原因
     */
    private String differenceReason;
    /**
     * 到账时间
     */
    private String receiptTime;
    /**
     * 收款人
     */
    private String payee;
    public String getReceivableAmount() {
        return receivableAmount;
    }
    public void setReceivableAmount(String receivableAmount) {
        this.receivableAmount = receivableAmount;
    }
    public String getReceivedAmount() {
        return receivedAmount;
    }
    public void setReceivedAmount(String receivedAmount) {
        this.receivedAmount = receivedAmount;
    }
    public String getDifferenceReason() {
        return differenceReason;
    }
    public void setDifferenceReason(String differenceReason) {
        this.differenceReason = differenceReason;
    }
    public String getReceiptTime() {
        return receiptTime;
    }
    public void setReceiptTime(String receiptTime) {
        this.receiptTime = receiptTime;
    }
    public String getPayee() {
        return payee;
    }
    public void setPayee(String payee) {
        this.payee = payee;
    }
    public String getRemark() {
        return remark;
java110-db/src/main/resources/mapper/community/RoomServiceDaoImplMapper.xml
@@ -369,7 +369,7 @@
        left join building_owner bo on bo.owner_id = borr.owner_id
        WHERE 1 =1
        <if test="communityId !=null and communityId != ''">
            AND t.`community_id` = #{communityId}
            AND t.`community_id` in (#{communityId},'9999')
        </if>
        and t.status_cd ='0'
        <if test="floorId !=null and floorId != ''">
@@ -440,9 +440,6 @@
            <foreach collection="states" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="communityId !=null and communityId != ''">
            and t.community_id= #{communityId}
        </if>
        <if test="communityIds != null">
            and t.community_id in
@@ -866,6 +863,9 @@
        <if test="roomSubType !=null and roomSubType != ''">
            and t.room_sub_type= #{roomSubType}
        </if>
        <if test="propertyType !=null and propertyType != ''">
            and t.property_type= #{propertyType}
        </if>
        <if test="states != null">
            and t.state in
            <foreach collection="states" item="item" open="(" close=")" separator=",">
java110-db/src/main/resources/mapper/community/UnitServiceDaoImplMapper.xml
@@ -97,7 +97,7 @@
        left join f_floor ff on t.`floor_id` = ff.`floor_id` and ff.status_cd = '0'
        where 1 =1
        <if test="communityId!=null and communityId != ''">
            AND ff.community_id = #{communityId}
            AND ff.community_id in (#{communityId},'9999')
        </if>
        <if test="floorId !=null and floorId != ''">
            and t.floor_id= #{floorId}
java110-db/src/main/resources/mapper/fee/FeeConfigServiceDaoImplMapper.xml
@@ -177,6 +177,9 @@
        <if test="secondaryFeeTypeCd !=null and secondaryFeeTypeCd != ''">
            and t.secondary_fee_type_cd= #{secondaryFeeTypeCd}
        </if>
        <if test="secondaryFeeTypeCdName !=null and secondaryFeeTypeCdName != ''">
            and s.secondary_fee_type_cd_name = #{secondaryFeeTypeCdName}
        </if>
        <if test="computingFormula !=null and computingFormula != ''">
            and t.computing_formula= #{computingFormula}
        </if>
java110-db/src/main/resources/mapper/fee/FeeServiceDaoImplMapper.xml
@@ -196,7 +196,7 @@
            and t.end_time &gt; #{nowDate}
        </if>
        <if test="communityId !=null and communityId != ''">
            and t.community_id= #{communityId}
            and t.community_id= in (#{communityId},'9999')
            and pfc.community_id in (#{communityId},'9999')
        </if>
        <if test="bId !=null and bId != ''">
java110-db/src/main/resources/mapper/fee/MeterWaterServiceDaoImplMapper.xml
@@ -663,7 +663,7 @@
        <if test="accountNumber !=null and accountNumber != ''">
            and t.account_number= #{accountNumber}
        </if>
        <if test="meterReadBookNo !=null and meterReadBookNo != ''">
        <if test="meterReadBookNo !=null">
            and t.meter_read_book_no= #{meterReadBookNo}
        </if>
        <if test="waterConsumption !=null and waterConsumption != ''">
java110-db/src/main/resources/mapper/fee/OweFeeCallableV1ServiceDaoImplMapper.xml
@@ -4,12 +4,12 @@
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="oweFeeCallableV1ServiceDaoImpl">
    <!-- 保存催缴记录信息 add by wuxw 2018-07-03 -->
    <insert id="saveOweFeeCallableInfo" parameterType="Map">
        insert into owe_fee_callable(
        remark,ofc_id,owner_id,callable_way,fee_id,payer_obj_name,owner_name,config_id,fee_name,staff_name,
        amountd_owed,state,community_id,payer_obj_type,staff_id,payer_obj_id,start_time,end_time,create_time
        amountd_owed,state,community_id,payer_obj_type,staff_id,payer_obj_id,start_time,end_time,create_time,
        receivable_amount,received_amount,difference_reason,receipt_time,payee
        ) values (
        #{remark},#{ofcId},#{ownerId},#{callableWay},#{feeId},#{payerObjName},#{ownerName},#{configId},#{feeName},#{staffName},
        #{amountdOwed},#{state},#{communityId},#{payerObjType},#{staffId},#{payerObjId},#{startTime},#{endTime},
@@ -18,25 +18,23 @@
        </if>
        <if test="createTime != null">
            #{createTime}
        </if>
        </if>,
        #{receivableAmount},#{receivedAmount},#{differenceReason},#{receiptTime},#{payee}
        )
    </insert>
    <insert id="saveOweFeeCallables" parameterType="Map">
        insert into owe_fee_callable(
        remark,ofc_id,owner_id,callable_way,fee_id,payer_obj_name,owner_name,config_id,fee_name,staff_name,
        amountd_owed,state,community_id,payer_obj_type,staff_id,payer_obj_id,start_time,end_time
        amountd_owed,state,community_id,payer_obj_type,staff_id,payer_obj_id,start_time,end_time,
        receivable_amount,received_amount,difference_reason,receipt_time,payee
        ) values
        <foreach collection="oweFeeCallablePos" item="item"  separator=",">
            (#{item.remark},#{item.ofcId},#{item.ownerId},#{item.callableWay},#{item.feeId},#{item.payerObjName},#{item.ownerName},#{item.configId},#{item.feeName},
            #{item.staffName},#{item.amountdOwed},#{item.state},#{item.communityId},#{item.payerObjType},#{item.staffId},#{item.payerObjId},#{item.startTime},
            #{item.endTime})
            #{item.endTime},#{item.receivableAmount},#{item.receivedAmount},#{item.differenceReason},#{item.receiptTime},#{item.payee})
        </foreach>
    </insert>
    <!-- 查询催缴记录信息 add by wuxw 2018-07-03 -->
    <select id="getOweFeeCallableInfo" parameterType="Map" resultType="Map">
@@ -46,6 +44,8 @@
        staffName,t.amountd_owed,t.amountd_owed amountdOwed,t.state,t.community_id,t.community_id
        communityId,t.payer_obj_type,t.payer_obj_type payerObjType,t.staff_id,t.staff_id
        staffId,t.payer_obj_id,t.payer_obj_id payerObjId,t.start_time startTime,t.end_time endTime,t.create_time createTime,
        t.receivable_amount receivableAmount,t.received_amount receivedAmount,t.difference_reason differenceReason,
        t.receipt_time receiptTime,t.payee payee,
        td.`name` callableWayName,td1.name stateName
        from owe_fee_callable t
        left join t_dict td on t.callable_way = td.status_cd and td.table_name = 'owe_fee_callable' and td.table_columns = 'callable_way'
@@ -101,13 +101,26 @@
        <if test="payerObjId !=null and payerObjId != ''">
            and t.payer_obj_id= #{payerObjId}
        </if>
        <if test="receivableAmount !=null and receivableAmount != ''">
            and t.receivable_amount= #{receivableAmount}
        </if>
        <if test="receivedAmount !=null and receivedAmount != ''">
            and t.received_amount= #{receivedAmount}
        </if>
        <if test="differenceReason !=null and differenceReason != ''">
            and t.difference_reason= #{differenceReason}
        </if>
        <if test="receiptTime !=null and receiptTime != ''">
            and t.receipt_time= #{receiptTime}
        </if>
        <if test="payee !=null and payee != ''">
            and t.payee= #{payee}
        </if>
        order by t.create_time desc
        <if test="page != -1 and page != null ">
            limit #{page}, #{row}
        </if>
    </select>
    <!-- 修改催缴记录信息 add by wuxw 2018-07-03 -->
    <update id="updateOweFeeCallableInfo" parameterType="Map">
@@ -160,11 +173,25 @@
        <if test="payerObjId !=null and payerObjId != ''">
            , t.payer_obj_id= #{payerObjId}
        </if>
        <if test="receivableAmount !=null and receivableAmount != ''">
            , t.receivable_amount= #{receivableAmount}
        </if>
        <if test="receivedAmount !=null and receivedAmount != ''">
            , t.received_amount= #{receivedAmount}
        </if>
        <if test="differenceReason !=null and differenceReason != ''">
            , t.difference_reason= #{differenceReason}
        </if>
        <if test="receiptTime !=null and receiptTime != ''">
            , t.receipt_time= #{receiptTime}
        </if>
        <if test="payee !=null and payee != ''">
            , t.payee= #{payee}
        </if>
        where 1=1
        <if test="ofcId !=null and ofcId != ''">
            and t.ofc_id= #{ofcId}
        </if>
    </update>
    <!-- 查询催缴记录数量 add by wuxw 2018-07-03 -->
@@ -221,8 +248,21 @@
        <if test="payerObjId !=null and payerObjId != ''">
            and t.payer_obj_id= #{payerObjId}
        </if>
        <if test="receivableAmount !=null and receivableAmount != ''">
            and t.receivable_amount= #{receivableAmount}
        </if>
        <if test="receivedAmount !=null and receivedAmount != ''">
            and t.received_amount= #{receivedAmount}
        </if>
        <if test="differenceReason !=null and differenceReason != ''">
            and t.difference_reason= #{differenceReason}
        </if>
        <if test="receiptTime !=null and receiptTime != ''">
            and t.receipt_time= #{receiptTime}
        </if>
        <if test="payee !=null and payee != ''">
            and t.payee= #{payee}
        </if>
    </select>
</mapper>
</mapper>
java110-db/src/main/resources/mapper/report/ReportCommunityServiceDaoImplMapper.xml
@@ -272,7 +272,7 @@
          and t.status_cd = '0'
          and u.unit_id = #{unitId}
        <if test="communityId !=null and communityId != ''">
            and t.community_id= #{communityId}
            and t.community_id in (#{communityId},'9999')
        </if>
        order by CONVERT(t.layer, SIGNED), CONVERT(t.room_num, SIGNED)
    </select>
java110-db/src/main/resources/mapper/store/ContractServiceDaoImplMapper.xml
@@ -406,10 +406,10 @@
        <if test="contractNameLike !=null and contractNameLike != ''">
            and t.contract_name like concat('%',#{contractNameLike},'%')
        </if>
        <if test="startTime !=null">
        <if test="startTime !=null and startTime != ''">
            and t.start_time= #{startTime}
        </if>
        <if test="endTime !=null ">
        <if test="endTime !=null and endTime != ''">
            and t.end_time &lt;= #{endTime}
        </if>
        <if test="queryStartTime !=null and queryStartTime != ''">
java110-db/src/main/resources/mapper/user/OwnerCarServiceDaoImplMapper.xml
@@ -361,6 +361,24 @@
        <if test="carBrand !=null and carBrand != ''">
            and t.car_brand= #{carBrand}
        </if>
        <if test="parkingType !=null and parkingType != ''">
            and t.parking_type= #{parkingType}
        </if>
        <if test="roadName !=null and roadName != ''">
            and t.road_name= #{roadName}
        </if>
        <if test="floorNum !=null and floorNum != ''">
            and t.floor_num= #{floorNum}
        </if>
        <if test="unitNum !=null and unitNum != ''">
            and t.unit_num= #{unitNum}
        </if>
        <if test="unitPricePerMonth !=null and unitPricePerMonth != ''">
            and t.unit_price_per_month= #{unitPricePerMonth}
        </if>
        <if test="roomNum !=null and roomNum != ''">
            and t.room_num= #{roomNum}
        </if>
        <if test="carType !=null and carType != ''">
            and t.car_type= #{carType}
        </if>
@@ -379,6 +397,9 @@
        <if test="carNumLike !=null and carNumLike != ''">
            and t.car_num like concat('%',#{carNumLike},'%')
        </if>
        <if test="carNumLikeRight_ !=null and carNumLikeRight_ != ''">
            and t.car_num like concat(#{carNumLikeRight_},'%')
        </if>
        <if test="memberCarNum !=null and memberCarNum != ''">
            and moc.car_num= #{memberCarNum}
        </if>
java110-db/src/main/resources/mapper/user/OwnerCarV1ServiceDaoImplMapper.xml
@@ -9,10 +9,10 @@
    <!-- 新增字段:first_payment_date、payment_deadline_date、unit_price_per_month、annual_receivable_amount -->
    <insert id="saveOwnerCarInfo" parameterType="Map">
        insert into owner_car(car_brand, car_num, ps_id, remark, owner_id, car_type_cd, user_id, car_id, car_color,
        car_type, start_time, end_time, state, community_id, member_id, b_id,lease_type,
        first_payment_date, payment_deadline_date, unit_price_per_month, annual_receivable_amount)
        car_type, road_name, floor_num, unit_num, room_num, start_time, end_time, state, community_id, member_id, b_id,lease_type,
        first_payment_date, payment_deadline_date, unit_price_per_month, annual_receivable_amount, parking_type)
        values (#{carBrand}, #{carNum}, #{psId}, #{remark}, #{ownerId}, #{carTypeCd}, #{userId}, #{carId}, #{carColor},
        #{carType},
        #{carType},#{roadName},#{floorNum},#{unitNum},#{roomNum},
        <!-- 正确处理start_time:为空则赋值NULL,否则取参数值 -->
        <choose>
            <when test="startTime == null or startTime == ''">NULL</when>
@@ -24,7 +24,7 @@
            <otherwise>#{endTime}</otherwise>
        </choose>,
        #{state}, #{communityId}, #{memberId}, '-1',#{leaseType},
        #{firstPaymentDate}, #{paymentDeadlineDate}, #{unitPricePerMonth}, #{annualReceivableAmount})
        #{firstPaymentDate}, #{paymentDeadlineDate}, #{unitPricePerMonth}, #{annualReceivableAmount}, #{parkingType})
    </insert>
@@ -219,6 +219,9 @@
        <if test="remark !=null and remark != ''">
            and t.remark= #{remark}
        </if>
        <if test="parkingType !=null and parkingType != ''">
            and t.parking_type= #{parkingType}
        </if>
        <if test="statusCd !=null and statusCd != ''">
            and t.status_cd= #{statusCd}
        </if>
java110-db/src/main/resources/mapper/user/OwnerServiceDaoImplMapper.xml
@@ -687,7 +687,7 @@
        <if test="roomId !=null and roomId != ''">
            AND r.`room_id` = #{roomId}
        </if>
        <if test="roomIds != null ">
        <if test="roomIds != null and roomIds.length > 0">
            and r.room_id in
            <foreach collection="roomIds" item="item" open="(" close=")" separator=",">
                #{item}
java110-db/src/main/resources/mapper/user/OwnerV1ServiceDaoImplMapper.xml
@@ -86,7 +86,7 @@
            and t.state= #{state}
        </if>
        <if test="communityId !=null and communityId != ''">
            and t.community_id= #{communityId}
            and t.community_id in (#{communityId}, '9999')
        </if>
        <if test="age !=null and age != ''">
            and t.age= #{age}
java110-interface/src/main/java/com/java110/intf/fee/IMeterWaterInnerServiceSMO.java
@@ -41,6 +41,9 @@
    @RequestMapping(value = "/queryMeterWatersCount", method = RequestMethod.POST)
    int queryMeterWatersCount(@RequestBody MeterWaterDto meterWaterDto);
    @RequestMapping(value = "/queryMeterWatersCountByPo", method = RequestMethod.POST)
    int queryMeterWatersCountByPo(@RequestBody MeterWaterPo meterWaterDto);
    /**
     * <p>添加抄表对象</p>
java110-interface/src/main/java/com/java110/intf/fee/IPayFeeV1InnerServiceSMO.java
@@ -65,4 +65,5 @@
     */
    @RequestMapping(value = "/queryPayFeesCount", method = RequestMethod.POST)
    int queryPayFeesCount(@RequestBody PayFeeDto payFeeDto);
    int queryPayFeesCountByPo(@RequestBody PayFeePo payFeePo);
}
java110-utils/src/main/java/com/java110/utils/util/ImportExcelUtils.java
@@ -60,9 +60,43 @@
     * @return
     */
    public static final Sheet getSheet(Workbook wb, String sheetName) {
        return wb.getSheet(sheetName);
        // 空值校验,避免空指针
        if (wb == null || sheetName == null) {
            return null;
        }
        // 标准化目标名称:去除两端空格,中间多个空格合并为一个
        String normalizedTarget = normalizeSheetName(sheetName);
        // 遍历所有sheet,逐个匹配标准化后的名称
        for (int i = 0; i < wb.getNumberOfSheets(); i++) {
            Sheet sheet = wb.getSheetAt(i);
            if (sheet == null) {
                continue;
            }
            String originalSheetName = sheet.getSheetName();
            // 标准化当前sheet名称
            String normalizedSheet = normalizeSheetName(originalSheetName);
            // 匹配成功则返回该sheet
            if (normalizedTarget.equals(normalizedSheet)) {
                return sheet;
            }
        }
        // 无匹配的sheet返回null(保持和原方法一致的返回逻辑)
        return null;
    }
    private static String normalizeSheetName(String name) {
        if (name == null) {
            return "";
        }
        // 步骤1:去除两端空格
        // 步骤2:将中间的多个连续空格(包括制表符、换行符等空白)替换为单个空格
        return name.trim().replaceAll("\\s+", " ");
    }
    /**
     * 获取Sheet页面(按页标)
     *
service-api/src/main/java/com/java110/api/importData/adapt/ImportContractCleaningAdapt.java
@@ -53,7 +53,7 @@
        List<Object[]> oList = ImportExcelUtils.listFromSheet(sheet);
        ImportOwnerRoomDto importOwnerRoomDto = null;
        for (int osIndex = 0; osIndex < oList.size(); osIndex++) {
            if (osIndex < 6) {
            if (osIndex < 5) {
                continue;
            }
service-api/src/main/java/com/java110/api/importData/adapt/ImportElectricityFeeV2DataCleaningAdapt.java
@@ -49,7 +49,7 @@
        sheet = ImportExcelUtils.getSheet(workbook, "电费流水");
        List<Object[]> oList = ImportExcelUtils.listFromSheet(sheet);
        for (int osIndex = 0; osIndex < oList.size(); osIndex++) {
            if (osIndex < 8) {
            if (osIndex < 9) {
                continue;
            }
            Object[] os = oList.get(osIndex);
@@ -74,8 +74,8 @@
            Date date = new Date();
            date.setYear(defaultInteger(os[18]) - 1900);
            date.setMonth(defaultInteger(os[19]));
            po.setCurReadingTime(defaultInteger(os[18]) + "-" + defaultInteger(os[19]) + "-01 00:00:00");
            po.setPreReadingTime(DateUtil.getAddMonthStringA(DateUtil.getDateFromStringA(po.getCurReadingTime()), -1));
            po.setPreReadingTime(defaultInteger(os[18]) + "-" + defaultInteger(os[19]) + "-01 00:00:00");
            po.setCurReadingTime(Vtil.processDateEnhanced(DateUtil.getDateFromStringA(po.getPreReadingTime()), "end", DateUtil.DATE_FORMATE_STRING_A, null ,null));
            po.setStatusCd("0");
            po.setUserId(paramIn.getString("userId"));
            po.setRemark(ValueUtil.defaultValue(os[28]));
service-api/src/main/java/com/java110/api/importData/adapt/ImportMeterWaterFeeV2DataCleaningAdapt.java
@@ -72,8 +72,8 @@
            Date date = new Date();
            date.setYear(defaultInteger(os[18]) - 1900);
            date.setMonth(defaultInteger(os[19]));
            po.setCurReadingTime(defaultInteger(os[18]) + "-" + defaultInteger(os[19]) + "-01 00:00:00");
            po.setPreReadingTime(DateUtil.getAddMonthStringA(DateUtil.getDateFromStringA(po.getCurReadingTime()), -1));
            po.setPreReadingTime(defaultInteger(os[18]) + "-" + defaultInteger(os[19]) + "-01 00:00:00");
            po.setCurReadingTime(Vtil.processDateEnhanced(DateUtil.getDateFromStringA(po.getPreReadingTime()), "end", DateUtil.DATE_FORMATE_STRING_A, null ,null));
            po.setStatusCd("0");
            po.setUserId(ValueUtil.defaultValue(paramIn.getString("userId")));
            po.setConfigId(ValueUtil.defaultValue(paramIn.getString("configId"),"9220260120546511533"));
service-api/src/main/java/com/java110/api/importData/adapt/ImportOwnerCarV2DataCleaningAdapt.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSONObject;
import com.java110.api.importData.DefaultImportDataAdapt;
import com.java110.api.importData.IImportDataCleaningAdapt;
import com.java110.dto.importData.Vtil;
import com.java110.dto.owner.OwnerCarDto;
import com.java110.dto.system.ComponentValidateResult;
import com.java110.intf.user.IOwnerV1InnerServiceSMO;
@@ -53,13 +54,16 @@
        OwnerCarDto importOwnerCar = null;
        for (int osIndex = 0; osIndex < oList.size(); osIndex++) {
            Object[] os = oList.get(osIndex);
            if (osIndex <= 6) { // 第一行是 头部信息 直接跳过
            if (osIndex < 3) { // 第一行是 头部信息 直接跳过
                continue;
            }
            if (StringUtil.isNullOrNone(os[0])) {
                continue;
            }
            Assert.hasValue(os[8], (osIndex + 1) + "行车牌号不能为空");
//            Assert.hasValue(os[8], (osIndex + 1) + "行车牌号不能为空");
            if (os[8] == null || os[8].equals("")) {
                os[8] = "空";
            }
            if (defaultValue(os[1]).isEmpty() && defaultValue(os[2]).isEmpty()) {
                throw new IllegalArgumentException((osIndex + 1) + "行小区编码和小区名称必填其一");
            }
@@ -71,12 +75,12 @@
//            Assert.hasValue(os[6], (osIndex + 1) + "颜色不能为空");
//            Assert.hasValue(os[7], (osIndex + 1) + "停车场不能为空");
//            Assert.hasValue(os[8], (osIndex + 1) + "车位不能为空");
            Assert.hasValue(os[14], (osIndex + 1) + "行起租时间不能为空");
//            Assert.hasValue(os[14], (osIndex + 1) + "行起租时间不能为空");
//            Assert.hasValue(os[15], (osIndex + 1) + "截止时间不能为空");
            Assert.hasValue(os[12], (osIndex + 1) + "行停车类型不能为空");
//            Assert.hasValue(os[11], (osIndex + 1) + "停车场类型不能为空");
            String startTime = os.length >= 14 && os[14] != null ? excelDoubleToDate(os[14].toString()):"";
            String endTime = os.length >= 15 && os[15] != null ? excelDoubleToDate(os[15].toString()):"";
            String startTime = os.length >= 14 && os[14] != null ? Vtil.defaultValueToDate(os[14], "start") : null;
            String endTime = os.length >= 15 && os[15] != null ? Vtil.defaultValueToDate(os[15], "end") : null;
//            Assert.isDate(startTime, DateUtil.DATE_FORMATE_STRING_B, (osIndex + 1) + "行开始时间格式错误 请填写YYYY-MM-DD文本格式");
//            Assert.isDate(endTime, DateUtil.DATE_FORMATE_STRING_B, (osIndex + 1) + "行结束时间格式错误 请填写YYYY-MM-DD文本格式");
            importOwnerCar = new OwnerCarDto();
@@ -112,13 +116,16 @@
        importOwnerCar = null;
        for (int osIndex = 0; osIndex < oList.size(); osIndex++) {
            Object[] os = oList.get(osIndex);
            if (osIndex <= 6) { // 第一行是 头部信息 直接跳过
            if (osIndex < 3) { // 第一行是 头部信息 直接跳过
                continue;
            }
            if (StringUtil.isNullOrNone(os[0])) {
                continue;
            }
            Assert.hasValue(os[8], (osIndex + 1) + "行车牌号不能为空");
//            Assert.hasValue(os[8], (osIndex + 1) + "行车牌号不能为空");
            if (os[8] == null || os[8].equals("")) {
                os[8] = "空";
            }
            if (defaultValue(os[1]).isEmpty() && defaultValue(os[2]).isEmpty()) {
                throw new IllegalArgumentException((osIndex + 1) + "行小区编码和小区名称必填其一");
            }
@@ -130,12 +137,12 @@
//            Assert.hasValue(os[6], (osIndex + 1) + "颜色不能为空");
//            Assert.hasValue(os[7], (osIndex + 1) + "停车场不能为空");
//            Assert.hasValue(os[8], (osIndex + 1) + "车位不能为空");
            Assert.hasValue(os[14], (osIndex + 1) + "行起租时间不能为空");
//            Assert.hasValue(os[14], (osIndex + 1) + "行起租时间不能为空");
//            Assert.hasValue(os[15], (osIndex + 1) + "截止时间不能为空");
            Assert.hasValue(os[12], (osIndex + 1) + "行停车类型不能为空");
//            Assert.hasValue(os[11], (osIndex + 1) + "停车场类型不能为空");
            String startTime = os.length >= 14 && os[14] != null ? excelDoubleToDate(os[14].toString()):"";
            String endTime = os.length >= 15 && os[15] != null ? excelDoubleToDate(os[15].toString()):"";
            String startTime = os.length >= 14 && os[14] != null ? Vtil.defaultValueToDate(os[14], "start") : null;
            String endTime = os.length >= 15 && os[15] != null ? Vtil.defaultValueToDate(os[15], "end") : null;
//            Assert.isDate(startTime, DateUtil.DATE_FORMATE_STRING_B, (osIndex + 1) + "行开始时间格式错误 请填写YYYY-MM-DD文本格式");
//            Assert.isDate(endTime, DateUtil.DATE_FORMATE_STRING_B, (osIndex + 1) + "行结束时间格式错误 请填写YYYY-MM-DD文本格式");
            importOwnerCar = new OwnerCarDto();
@@ -157,6 +164,11 @@
            importOwnerCar.setCommunityId(result.getCommunityId());
            importOwnerCar.setUserId(result.getUserId());
            importOwnerCar.setOtherItem(os);
            importOwnerCar.setRoadName(defaultValue(os[3]));
            importOwnerCar.setFloorNum(defaultValue(os[4]));
            importOwnerCar.setUnitNum(defaultValue(os[5]));
            importOwnerCar.setRoomNum(defaultValue(os[6]));
            importOwnerCar.setParkingType(defaultValue(os[12]));
            ownerCars.add(importOwnerCar);
        }
    }
service-api/src/main/java/com/java110/api/importData/adapt/ImportPropertyWhiteListfFlowAdapt.java
@@ -92,6 +92,7 @@
        sheet = ImportExcelUtils.getSheet(workbook, "白单流水  导入新模板");
        List<Object[]> oList = ImportExcelUtils.listFromSheet(sheet);
        PropertyWhiteListFlowDto white = null;
        List<Map<String, Object>> maps = BeanConvertUtil.beanCovertMapListC(communityInnerServiceSMOImpl.queryCommunitys(new CommunityDto()));
        for (int osIndex = 0; osIndex < oList.size(); osIndex++) {
            Object[] os = oList.get(osIndex);
            if (osIndex == 0) { // 第一行是 头部信息 直接跳过
@@ -113,14 +114,13 @@
                inputTime = Vtil.defaultValueToDate(os[24]);
            }
            white.setChargeTime(chargeTime);//收费时间
            white.setInvoiceReceiptNo(Vtil.defaultValueToDate(os[4]));//发票
            white.setInvoiceReceiptNo(Vtil.defaultValue(os[4]));//发票
            white.setRoomId(os[5] == null ? null : os[5].toString());//房号
            white.setPropertyAddress(os[5] == null ? null : os[5].toString());//业主地址
            white.setDoorRoomNum((os[6] == null ? "" : os[6].toString() + "-") + (os[7] == null ? "" : os[7].toString() + "-") + (os[8] == null ? "" : os[8].toString()) );//门市号
            if (white.getDoorRoomNum().isEmpty()){
                white.setDoorRoomNum(null);
            }
            List<Map<String, Object>> maps = BeanConvertUtil.beanCovertMapListC(communityInnerServiceSMOImpl.queryCommunitys(new CommunityDto()));
            setCommunityId(white, os, maps);
            white.setSecondaryFeeTypeCd(os[13] == null ? null : os[13].toString());//收费内容
            white.setChargeAmount(os[14] == null ? null : os[14].toString());//收费金额
service-api/src/main/java/com/java110/api/importData/adapt/ImportRoomOwnerDataV2CleaningAdapt.java
@@ -48,7 +48,7 @@
        List<Object[]> oList = ImportExcelUtils.listFromSheet(sheet);
        ImportOwnerRoomDto importOwnerRoomDto = null;
        for (int osIndex = 0; osIndex < oList.size(); osIndex++) {
            if (osIndex < 8) {
            if (osIndex < 5) {
                continue;
            }
@@ -76,7 +76,7 @@
        sheet = ImportExcelUtils.getSheet(workbook, " 商铺物业费 导入新模板");
        oList = ImportExcelUtils.listFromSheet(sheet);
        for (int osIndex = 0; osIndex < oList.size(); osIndex++) {
            if (osIndex < 8) {
            if (osIndex < 5) {
                continue;
            }
service-fee/src/main/java/com/java110/fee/cmd/fee/ListFeeCmd.java
@@ -297,6 +297,9 @@
                Integer.parseInt(feeDto.getDecimalPlace())));
        BigDecimal curFeePrice = new BigDecimal(feeDto.getFeePrice());
        curFeePrice = curFeePrice.multiply(new BigDecimal(oweMonth));
        if (curFeePrice.doubleValue() == -1) {
            curFeePrice = BigDecimal.valueOf(0);
        }
        feeDto.setAmountOwed(MoneyUtil.computePriceScale(curFeePrice.doubleValue(), feeDto.getScale(), Integer.parseInt(feeDto.getDecimalPlace())) + "");
        //动态费用
        if ("4004".equals(computingFormula)
service-fee/src/main/java/com/java110/fee/smo/impl/MeterWaterInnerServiceSMOImpl.java
@@ -132,6 +132,11 @@
    }
    @Override
    public int queryMeterWatersCountByPo(MeterWaterPo meterWaterDto) {
        return meterWaterServiceDaoImpl.queryMeterWatersCount(BeanConvertUtil.beanCovertMap(meterWaterDto));
    }
    @Override
    public int saveMeterWaters(@RequestBody List<MeterWaterPo> meterWaterPos) {
        List<Map> fees = new ArrayList<>();
        for (MeterWaterPo payFeePo : meterWaterPos) {
service-fee/src/main/java/com/java110/fee/smo/impl/PayFeeV1InnerServiceSMOImpl.java
@@ -102,4 +102,9 @@
        return payFeeV1ServiceDaoImpl.queryPayFeesCount(BeanConvertUtil.beanCovertMap(payFeeDto));
    }
    @Override
    public int queryPayFeesCountByPo(PayFeePo payFeePo) {
        return payFeeV1ServiceDaoImpl.queryPayFeesCount(BeanConvertUtil.beanCovertMap(payFeePo));
    }
}
service-job/src/main/java/com/java110/job/importData/DefaultImportData.java
@@ -4,6 +4,7 @@
import com.java110.intf.common.IAssetImportLogDetailInnerServiceSMO;
import com.java110.po.log.AssetImportLogDetailPo;
import com.java110.utils.util.ExceptionUtil;
import org.apache.kafka.common.protocol.types.Field;
import org.springframework.beans.factory.annotation.Autowired;
public class DefaultImportData {
@@ -30,4 +31,14 @@
        tmpAssetImportOwnerRoomPo.setMessage(message);
        assetImportLogDetailInnerServiceSMOImpl.updateAssetImportLogDetail(tmpAssetImportOwnerRoomPo);
    }
    protected void updateImportLogDetailState(String detailId, String message) {
        String state = AssetImportLogDetailDto.STATE_FAIL_IMPORT;
        AssetImportLogDetailPo tmpAssetImportOwnerRoomPo = new AssetImportLogDetailPo();
        tmpAssetImportOwnerRoomPo.setDetailId(detailId);
        tmpAssetImportOwnerRoomPo.setState(state);
        tmpAssetImportOwnerRoomPo.setMessage(message);
        assetImportLogDetailInnerServiceSMOImpl.updateAssetImportLogDetail(tmpAssetImportOwnerRoomPo);
    }
}
service-job/src/main/java/com/java110/job/importData/ImportDataExecutor.java
@@ -86,7 +86,11 @@
                    = ApplicationContextFactory.getBean("assetImportLogInnerServiceSMOImpl", IAssetImportLogInnerServiceSMO.class);
        }
        Assert.hasLength(importDataDto.getLogId(), "未包含导入数据");
        Assert.hasLength(importDataDto.getCommunityId(), "未包含小区信息");
        if (!importDataDto.getBusinessAdapt().equals("importContractV2")){
            Assert.hasLength(importDataDto.getCommunityId(), "未包含小区信息");
        }
        AssetImportLogDto assetImportLogDto = new AssetImportLogDto();
        assetImportLogDto.setLogId(importDataDto.getLogId());
service-job/src/main/java/com/java110/job/importData/adapt/ImportContractQueueDataAdapt.java
@@ -100,6 +100,18 @@
        contractDto.setAdContractInfo(adContractInfo);
        contractDto.setContractPaymentStatus(contractPaymentStatus);
        contractDto.setContractCollectionDetailDtos(contractCollectionDetail);
        contractDto.setContractCode(contractPo.getContractCode());
        contractDto.setStartTime(Vtil.defaultValueToDate(contractPo.getStartTime(), "start", null));
        contractDto.setEndTime(Vtil.defaultValueToDate(contractPo.getEndTime(), "end", null));
        contractPo.setStartTime(contractDto.getStartTime());
        contractPo.setEndTime(contractDto.getEndTime());
        contractDto.setContractId(null);
        int i = contractInnerServiceSMOImpl.queryContractsCount(contractDto);
        if (i > 0) {
            throw new IllegalArgumentException("重复的合同");
        }
        contractDto.setContractId(contractPo.getContractId());
        contractPo.setOperator("-");
        contractPo.setOperatorLink("-");
        contractPo.setContractParentId("");
service-job/src/main/java/com/java110/job/importData/adapt/ImportElectricityFeeV2QueueDataAdapt.java
@@ -87,8 +87,11 @@
        payFeePo.setEndTime(po.getPreReadingTime());
        payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
        payFeePo.setFeeFlag(FeeDto.FEE_FLAG_ONCE);
        payFeePo.setState(FeeDto.STATE_FINISH);
        int i = meterWaterInnerServiceSMOImpl.queryMeterWatersCount(BeanConvertUtil.covertBean(BeanConvertUtil.beanCovertMap(po), MeterWaterDto.class));
        payFeePo.setState(FeeDto.STATE_DOING);
        if (po.getRemark3() != null){
            po.setRemark(Vtil.defaultValue(po.getRemark()) + po.getRemark3());
        }
        int i = meterWaterInnerServiceSMOImpl.queryMeterWatersCountByPo(po);
        if (i > 0) {
            throw new IllegalArgumentException("重复的电费导入");
        }
@@ -137,11 +140,16 @@
        ownerDto.setRoomId(reqJson.getString("objId"));
        List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwnersByRoom(ownerDto);
        if (ownerDtos != null && ownerDtos.size() > 0) {
            feeAttrPo = new FeeAttrPo();
            feeAttrPo.setCommunityId(reqJson.getString("communityId"));
            feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_ID);
            feeAttrPo.setValue(ownerDtos.get(0).getOwnerId());
            if (ownerDtos.size() > 1) {
                feeAttrPo.setValue("导入信息中不存在业主");
            }else {
                feeAttrPo.setValue(ownerDtos.get(0).getOwnerId());
            }
            feeAttrPo.setFeeId(payFeePo.getFeeId());
            feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
            flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
@@ -152,7 +160,11 @@
            feeAttrPo = new FeeAttrPo();
            feeAttrPo.setCommunityId(reqJson.getString("communityId"));
            feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_LINK);
            feeAttrPo.setValue(ownerDtos.get(0).getLink());
            if (ownerDtos.size() > 1) {
                feeAttrPo.setValue("导入信息中不存在业主");
            }else {
                feeAttrPo.setValue(ownerDtos.get(0).getLink());
            }
            feeAttrPo.setFeeId(payFeePo.getFeeId());
            feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
            flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
@@ -163,7 +175,11 @@
            feeAttrPo = new FeeAttrPo();
            feeAttrPo.setCommunityId(reqJson.getString("communityId"));
            feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_NAME);
            feeAttrPo.setValue(ownerDtos.get(0).getName());
            if (ownerDtos.size() > 1) {
                feeAttrPo.setValue("导入信息中不存在业主");
            }else {
                feeAttrPo.setValue(ownerDtos.get(0).getName());
            }
            feeAttrPo.setFeeId(payFeePo.getFeeId());
            feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
            flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
@@ -175,9 +191,9 @@
    private void validateRoom(MeterWaterPo po, AssetImportLogDetailDto assetImportLogDetailDto) {
        RoomDto roomDto = new RoomDto();
        roomDto.setCommunityId(po.getCommunityId());
        roomDto.setRoadName(po.getRoadName());
        roomDto.setFloorNum(Vtil.defaultValueToNumber(po.getFloorNum()));
        roomDto.setCommunityId(po.getCommunityId());
        roomDto.setUnitNum(Vtil.defaultValueToNumber(po.getUnitNum()));
        roomDto.setRoomNum(Vtil.defaultValueToNumber(po.getRoomNum()));
        if (roomDto.getRoomNum().isEmpty()) {
@@ -185,7 +201,10 @@
        }
        List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
        if (roomDtos.isEmpty()) {
            throw new IllegalArgumentException("未查询到房屋:" + po.getObjName());
            po.setObjId("1");
            po.setRemark3("\n\n房屋:" +
                            roomDto.getCommunityId() + "-" + roomDto.getRoadName() + "-" + roomDto.getFloorNum() + "-" + roomDto.getUnitNum() + "-" +
                            roomDto.getRoomNum() + "不存在,该费用存入公司账户");
//            ImportOwnerRoomDto importOwnerRoomDto = new ImportOwnerRoomDto();//房屋
//            importOwnerRoomDto.setRoomId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_roomId));
//            importOwnerRoomDto.setOwnerId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ownerId));
service-job/src/main/java/com/java110/job/importData/adapt/ImportHistoryFeeDetailQueueDataAdapt.java
@@ -350,6 +350,9 @@
        }
        try{
            if(assetImportLogDetailDto.getOutTime() == null) {
                assetImportLogDetailDto.setOutTime("2050-01-01 23:59:59");
            }
            if(!(ListUtil.isNull(importRoomFees))){
                if (DateUtil.getDateFromStringB(data.getString("chargeStart").split(" ")[0]).getTime() < DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]).getTime() && !assetImportLogDetailDto.getState().equals("1100") && !assetImportLogDetailDto.getState().equals("1300")){
                    ImportRoomFee original = importRoomFees.get(0);
service-job/src/main/java/com/java110/job/importData/adapt/ImportMeterWaterFeeV2QueueDataAdapt.java
@@ -93,10 +93,14 @@
        payFeePo.setEndTime(po.getPreReadingTime());
        payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
        payFeePo.setFeeFlag(FeeDto.FEE_FLAG_ONCE);
        payFeePo.setState(FeeDto.STATE_FINISH);
        payFeePo.setState(FeeDto.STATE_DOING);
        payFeePo.setIncomeObjId("102025062610470035");
        int i = meterWaterInnerServiceSMOImpl.queryMeterWatersCount(BeanConvertUtil.covertBean(BeanConvertUtil.beanCovertMap(po), MeterWaterDto.class));
        if (po.getRemark3() != null){
            po.setRemark(Vtil.defaultValue(po.getRemark()) + po.getRemark3());
        }
        int i = meterWaterInnerServiceSMOImpl.queryMeterWatersCountByPo(po);
        if (i > 0) {
            throw new IllegalArgumentException("重复的水费导入");
        }
@@ -147,7 +151,11 @@
            feeAttrPo = new FeeAttrPo();
            feeAttrPo.setCommunityId(reqJson.getString("communityId"));
            feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_ID);
            feeAttrPo.setValue(ownerDtos.get(0).getOwnerId());
            if (ownerDtos.size() > 1) {
                feeAttrPo.setValue("导入信息中不存在业主");
            }else {
                feeAttrPo.setValue(ownerDtos.get(0).getOwnerId());
            }
            feeAttrPo.setFeeId(payFeePo.getFeeId());
            feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
            flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
@@ -158,7 +166,11 @@
            feeAttrPo = new FeeAttrPo();
            feeAttrPo.setCommunityId(reqJson.getString("communityId"));
            feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_LINK);
            feeAttrPo.setValue(ownerDtos.get(0).getLink());
            if (ownerDtos.size() > 1) {
                feeAttrPo.setValue("导入信息中不存在业主");
            }else {
                feeAttrPo.setValue(ownerDtos.get(0).getLink());
            }
            feeAttrPo.setFeeId(payFeePo.getFeeId());
            feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
            flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
@@ -169,7 +181,11 @@
            feeAttrPo = new FeeAttrPo();
            feeAttrPo.setCommunityId(reqJson.getString("communityId"));
            feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_NAME);
            feeAttrPo.setValue(ownerDtos.get(0).getName());
            if (ownerDtos.size() > 1) {
                feeAttrPo.setValue("导入信息中不存在业主");
            }else {
                feeAttrPo.setValue(ownerDtos.get(0).getName());
            }
            feeAttrPo.setFeeId(payFeePo.getFeeId());
            feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
            flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
@@ -181,9 +197,9 @@
    private void validateRoom(MeterWaterPo po, AssetImportLogDetailDto assetImportLogDetailDto) {
        RoomDto roomDto = new RoomDto();
        roomDto.setCommunityId(po.getCommunityId());
        roomDto.setRoadName(po.getRoadName());
        roomDto.setFloorNum(Vtil.defaultValueToNumber(po.getFloorNum()));
        roomDto.setCommunityId(po.getCommunityId());
        roomDto.setUnitNum(Vtil.defaultValueToNumber(po.getUnitNum()));
        roomDto.setRoomNum(Vtil.defaultValueToNumber(po.getRoomNum()));
        if (roomDto.getRoomNum().isEmpty()) {
@@ -191,7 +207,11 @@
        }
        List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
        if (roomDtos.isEmpty()) {
            throw new IllegalArgumentException("未查询到房屋:" + po.getObjName());
            po.setObjId("1");
            po.setRemark3("\n\n房屋:" +
                    roomDto.getCommunityId() + "-" + roomDto.getRoadName() + "-" + roomDto.getFloorNum() + "-" + roomDto.getUnitNum() + "-" +
                    roomDto.getRoomNum() + "不存在,该费用存入公司账户");
//            throw new IllegalArgumentException("未查询到房屋:" + po.getObjName());
//            ImportOwnerRoomDto importOwnerRoomDto = new ImportOwnerRoomDto();//房屋
//            importOwnerRoomDto.setRoomId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_roomId));
//            importOwnerRoomDto.setOwnerId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ownerId));
service-job/src/main/java/com/java110/job/importData/adapt/ImportOwnerCarQueueV2DataAdapt.java
@@ -6,6 +6,7 @@
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.community.CommunityDto;
import com.java110.dto.dict.DictDto;
import com.java110.dto.fee.FeeConfigDto;
import com.java110.dto.importData.*;
import com.java110.dto.log.AssetImportLogDetailDto;
import com.java110.dto.oweFeeCallable.OweFeeCallableDto;
@@ -21,7 +22,11 @@
import com.java110.intf.community.IParkingSpaceV1InnerServiceSMO;
import com.java110.intf.community.IRoomInnerServiceSMO;
import com.java110.intf.dev.IDictV1InnerServiceSMO;
import com.java110.intf.fee.IFeeAttrInnerServiceSMO;
import com.java110.intf.fee.IFeeConfigInnerServiceSMO;
import com.java110.intf.fee.IOweFeeCallableV1InnerServiceSMO;
import com.java110.intf.fee.IPayFeeV1InnerServiceSMO;
import com.java110.intf.user.IOwnerCarInnerServiceSMO;
import com.java110.intf.user.IOwnerCarV1InnerServiceSMO;
import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO;
import com.java110.intf.user.IOwnerV1InnerServiceSMO;
@@ -29,6 +34,8 @@
import com.java110.job.importData.IImportDataAdapt;
import com.java110.po.car.OwnerCarPo;
import com.java110.po.dict.DictPo;
import com.java110.po.fee.FeeAttrPo;
import com.java110.po.fee.PayFeePo;
import com.java110.po.oweFeeCallable.OweFeeCallablePo;
import com.java110.po.owner.OwnerPo;
import com.java110.po.parking.ParkingAreaPo;
@@ -36,6 +43,7 @@
import com.java110.po.room.ApplyRoomDiscountPo;
import com.java110.po.room.LitigationInfoPo;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.ListUtil;
import com.java110.utils.util.StringUtil;
import org.mybatis.spring.SqlSessionTemplate;
@@ -62,6 +70,13 @@
    @Autowired
    private IOwnerCarV1InnerServiceSMO ownerCarV1InnerServiceSMOImpl;
    @Autowired
    private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
    @Autowired
    private IPayFeeV1InnerServiceSMO payFeeV1InnerServiceSMO;
    @Autowired
    private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMO;
    @Autowired
    private IApplyRoomDiscountServiceDao applyRoomDiscountServiceDaoImpl;
@@ -94,6 +109,10 @@
    @Autowired
    IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMOImpl;
    @Autowired
    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
    @Override
    public void importData(List<AssetImportLogDetailDto> assetImportLogDetailDtos) {
        importDatas(assetImportLogDetailDtos);
@@ -105,11 +124,24 @@
        for (AssetImportLogDetailDto assetImportLogDetailDto : infos) {
            try {
                doImportData(assetImportLogDetailDto);
                OwnerCarDto ownerCarDto = null;
                doImportData(assetImportLogDetailDto,ownerCarDto);
                updateImportLogDetailState(assetImportLogDetailDto.getDetailId());
            } catch (Exception e) {
                e.printStackTrace();
                updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), e);
                if (e.getMessage().contains("for column 'end_time' at row 1")){
                    updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), "注销日期格式错误!");
                }
                else if (e.getMessage().contains("for column 'start_time' at row 1")){
                    updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), "启用日期格式错误!");
                }
//                else if (e.getMessage().contains("### Error updating database")){
//                    updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), "未知错误,请联系管理员");
//                }
                else {
                    updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), e);
                }
            }
        }
@@ -120,13 +152,13 @@
     *
     * @param assetImportLogDetailDto
     */
    private void doImportData(AssetImportLogDetailDto assetImportLogDetailDto) {
    private void doImportData(AssetImportLogDetailDto assetImportLogDetailDto,OwnerCarDto ownerCarDto) throws Exception {
        JSONObject data = JSONObject.parseObject(assetImportLogDetailDto.getContent());
        String[] o = JSON.parseObject(data.getString("otherItem"), String[].class);
        String otherItem = data.getString("otherItem");
        data.put("otherItem", null);
        OwnerCarDto ownerCarDto = BeanConvertUtil.covertBean(data, OwnerCarDto.class);
        ownerCarDto = BeanConvertUtil.covertBean(data, OwnerCarDto.class);
        if (ownerCarDto.getOwnerName() == null || "".equals(ownerCarDto.getOwnerName())) {
            RoomDto roomDto = new RoomDto();
            roomDto.setRoadName(ownerCarDto.getRoadName());
@@ -134,18 +166,23 @@
            roomDto.setCommunityId(ownerCarDto.getCommunityId());
            roomDto.setUnitNum(ownerCarDto.getUnitNum());
            roomDto.setRoomNum(ownerCarDto.getRoomNum());
            if (Vtil.defaultValue(roomDto.getRoomNum()).equals("")){
                roomDto.setPropertyType("商铺");
            }
            List<RoomDto> roomDtos = iroomInnerServiceSMOImpl.queryRooms(roomDto);
            if (roomDtos.isEmpty()) {
                throw new IllegalArgumentException("未填写业主且房屋不存在");
                ownerCarDto.setRemark("房屋:" + roomDto.getRoadName() + "-" + roomDto.getFloorNum() + "-" + roomDto.getUnitNum() + "-" + Vtil.defaultValue(ownerCarDto.getRoomName()) + "未查询到");
//                throw new IllegalArgumentException("未填写业主且房屋不存在");
            } else if (roomDtos.size() > 1) {
                throw new IllegalArgumentException("该房屋存在多个业主");
                ownerCarDto.setRemark("房屋:" + roomDto.getRoadName() + "-" + roomDto.getFloorNum() + "-" + roomDto.getUnitNum() + "-" + Vtil.defaultValue(ownerCarDto.getRoomName()) + "查询到多个房屋");
            }
            else {
                OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
                ownerRoomRelDto.setRoomId(roomDtos.get(0).getRoomId());
                List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
                if (ownerRoomRelDtos.isEmpty()) {
                    throw new IllegalArgumentException("未填写业主且该房屋未绑定业主");
                    ownerCarDto.setRemark("房屋:" + roomDto.getRoadName() + "-" + roomDto.getFloorNum() + "-" + roomDto.getUnitNum() + "-" + Vtil.defaultValue(ownerCarDto.getRoomName()) + "未查询到业主");
//                    throw new IllegalArgumentException("未填写业主且该房屋未绑定业主");
                } else {
                    OwnerDto ownerDto = new OwnerDto();
                    ownerDto.setOwnerId(ownerRoomRelDtos.get(0).getOwnerId());
@@ -153,6 +190,7 @@
                    if (ownerDtos.isEmpty()) {
                        throw new IllegalArgumentException("未知错误:00022");
                    } else {
                        ownerCarDto.setOwnerId(ownerDtos.get(0).getOwnerId());
                        ownerCarDto.setOwnerName(ownerDtos.get(0).getName());
                    }
                }
@@ -164,6 +202,9 @@
        Object[] os = ownerCarDto.getOtherItem();
        String communityId = ownerCarDto.getCommunityId();
        JSONArray objects = JSONObject.parseArray(otherItem);
        OwnerCarDto carDto = new OwnerCarDto();
        carDto.setCommunityId(ownerCarDto.getCommunityId());
        carDto.setCarNum(ownerCarDto.getCarNum());
        communityDto.setCommunityCode(defaultValue(os[1]));
        communityDto.setName(defaultValue(os[2]));
        List<CommunityDto> communityDtos = communityV1InnerServiceSMOImpl.queryCommunitys(communityDto);
@@ -174,14 +215,21 @@
        ownerCarDto.setCommunityId(communityDtos.get(0).getCommunityId());
        communityDto.setCommunityId(communityDtos.get(0).getCommunityId());
        //todo 导入业主信息
        importOwnerData(ownerCarDto, os);
//        //todo 导入业主信息
//        importOwnerData(ownerCarDto, os);
        OwnerCarPo ownerCarPo = BeanConvertUtil.covertBean(ownerCarDto, OwnerCarPo.class);
        ownerCarPo.setStartTime(ownerCarDto.getLogStartTime());
        ownerCarPo.setEndTime(ownerCarDto.getLogEndTime());
        //获取房屋名称
        String carTypeCd = defaultValue(os[13]);
        String carTypeCd = defaultValue(os[12]);
        if (!carTypeCd.equals("")){
            DictDto dictDto = new DictDto();
            dictDto.setTableName("owner_car");
@@ -195,7 +243,6 @@
                dictPo.setTableName("owner_car");
                dictPo.setTableColumns("car_type_cd");
                dictPo.setName(carTypeCd);
                dictPo.setDescription(carTypeCd);
                dictPo.setStatusCd(dictDtos1.get(dictDtos1.size() - 1).getStatusCd() + 100);
                int i = dictV1InnerServiceSMOImpl.saveDict(dictPo);
                if (i == 0) {
@@ -208,6 +255,28 @@
        else {
            ownerCarPo.setCarTypeCd("1001"); //默认主车辆
        }
        int i1 = ownerCarInnerServiceSMOImpl.queryOwnerCarsCount(carDto);
        if (i1 > 0) {
            carDto.setOwnerId(ownerCarDto.getOwnerId());
            carDto.setParkingType(Vtil.defaultValue(os[13]));
            carDto.setCarNum(null);
            carDto.setCarNumLikeRight_(ownerCarDto.getCarNum());
            carDto.setRoadName(defaultValue(os[3]));
            carDto.setFloorNum(defaultValue(os[4]));
            carDto.setUnitNum(defaultValue(os[5]));
            carDto.setRoomNum(defaultValue(os[6]));
            carDto.setCarTypeCd(ownerCarPo.getCarTypeCd());
            carDto.setUnitPricePerMonth(defaultValue(os[18]));
            int i2 = ownerCarInnerServiceSMOImpl.queryOwnerCarsCount(carDto);
            if (i2 > 0) {
                throw new IllegalArgumentException("重复的车辆:" + ownerCarDto.getCarNum());
            } else {
                ownerCarDto.setCarNum(ownerCarDto.getCarNum() + "_" + i1);
            }
        }
        ParkingAreaDto parkingAreaDto = new ParkingAreaDto();
        parkingAreaDto.setNum(ownerCarDto.getAreaNum());
@@ -284,6 +353,9 @@
            roomDto.setFloorNum(defaultValue(os[4]));
            roomDto.setUnitNum(defaultValue(os[5]));
            roomDto.setRoomNum(defaultValue(os[6]));
            if (roomDto.getRoomNum() == null || roomDto.getRoomNum().equals("")) {
                roomDto.setPropertyType("商铺");
            }
            List<RoomDto> roomDtos = iroomInnerServiceSMOImpl.queryRooms(roomDto);
            if (ListUtil.isNull(roomDtos)) {
                throw new IllegalArgumentException("未查询到房间");
@@ -494,6 +566,13 @@
        //导入车辆
        saveFee(ownerCarPo, os, ownerCarDto, assetImportLogDetailDto);
        ownerCarPo.setParkingType(Vtil.defaultValue(os[12]));
        ownerCarPo.setRoadName(defaultValue(os[3]));
        ownerCarPo.setFloorNum(defaultValue(os[4]));
        ownerCarPo.setUnitNum(defaultValue(os[5]));
        ownerCarPo.setRoomNum(defaultValue(os[6]));
        ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
        ParkingSpacePo parkingSpacePo = new ParkingSpacePo();
        parkingSpacePo.setPsId(psId); //车位id
@@ -501,6 +580,52 @@
        parkingSpaceV1InnerServiceSMOImpl.updateParkingSpace(parkingSpacePo);
    }
    public void saveFee(OwnerCarPo ownerCarPo, Object[] os, OwnerCarDto ownerCarDto, AssetImportLogDetailDto assetImportLogDetailDto) {
        List<FeeConfigDto> feeDtos = null;
        if (!ownerCarPo.getCommunityId().isEmpty()){
            FeeConfigDto feeConfigDto = new FeeConfigDto();
            feeConfigDto.setCommunityId(ownerCarPo.getCommunityId());
            feeConfigDto.setSquarePrice(Vtil.processCount(ownerCarPo.getUnitPricePerMonth(), 2, null));
            switch (Vtil.defaultValue(os[12])) {
                case "地面停车": feeConfigDto.setFeeTypeCd("630000003");break;
                case "地下停车": feeConfigDto.setFeeTypeCd("630000004");break;
                default: feeConfigDto.setFeeTypeCds(new String[]{"630000003","630000004"});
            }
            if (feeConfigDto.getSquarePrice() == null) {
                throw new IllegalArgumentException("未查询到收费项");
            }
            feeDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
            if (feeDtos.isEmpty()) {
                throw new IllegalArgumentException("单价`"+ownerCarPo.getUnitPricePerMonth()+"`未查询到收费项");
            }
        }
        FeeConfigDto feeDto = feeDtos.get(0);
        PayFeePo payFeePo = new PayFeePo();
        payFeePo.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
        payFeePo.setbId("-1");
        payFeePo.setFeeTypeCd(feeDto.getFeeTypeCd());
        payFeePo.setSecondaryFeeTypeCd(feeDto.getSecondaryFeeTypeCd());
        payFeePo.setCommunityId(ownerCarDto.getCommunityId());
        payFeePo.setPayerObjId(ownerCarPo.getCarId());
        payFeePo.setIncomeObjId("102025062610470035");
        payFeePo.setStartTime(Vtil.processDateEnhanced(ownerCarDto.getStartTime(), null, "yyyy-MM-dd HH:mm:ss", "start", feeDto.getStartTime()));
        payFeePo.setEndTime(payFeePo.getStartTime());
        payFeePo.setUserId(ownerCarPo.getUserId());
        payFeePo.setStatusCd("0");
        payFeePo.setFeeFlag(feeDto.getFeeFlag());
        payFeePo.setConfigId(feeDto.getConfigId());
        payFeePo.setState("2008001");
        payFeePo.setPayerObjType("6666");
        payFeePo.setBatchId(assetImportLogDetailDto.getLogId());
        payFeeV1InnerServiceSMO.savePayFee(payFeePo);
        List<FeeAttrPo> feeAttrPos = new ArrayList<>();
        feeAttrPos.add(
                new FeeAttrPo(payFeePo.getFeeId(), payFeePo.getCommunityId(), GenerateCodeFactory.getGeneratorId("11"), "390010" ,
                        Vtil.processDateEnhanced(ownerCarDto.getEndTime(), null, "yyyy-MM-dd HH:mm:ss", "end", feeDto.getEndTime())));
        feeAttrPos.add(new FeeAttrPo(payFeePo.getFeeId(), payFeePo.getCommunityId(), GenerateCodeFactory.getGeneratorId("11"), "390012" , "(" + ownerCarPo.getCarNum() + ")"));
        feeAttrInnerServiceSMO.saveFeeAttrs(feeAttrPos);
    }
    private String defaultValueToDate(Object o) {
        return o == null ? null : o.toString();
    }
service-job/src/main/java/com/java110/job/importData/adapt/ImportPhoneBillFeeV2QueueDataAdapt.java
@@ -32,6 +32,7 @@
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@Service("importPhoneBillFeeV2QueueData")
@@ -91,8 +92,10 @@
        po.setId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_waterId));
        po.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
        sqlSessionTemplate.insert("phoneBillFlowServiceDaoImpl.savePhoneBillFlowInfo", BeanConvertUtil.beanCovertMap(po));
//        addFee(po, data, assetImportLogDetailDto.getLogId(), assetImportLogDetailDto);
        if (po.getRemark3() != null){
            po.setRemark1(Vtil.defaultValue(po.getRemark1()) + po.getRemark3());
        }
        addFee(po, data, assetImportLogDetailDto.getLogId(), assetImportLogDetailDto);
        int i = 1;
    }
@@ -110,19 +113,31 @@
        payFeePo.setConfigId(Vtil.defaultValue(po.getConfigId(), "922026012136272690"));
        payFeePo.setPayerObjId(po.getRoomId());
        payFeePo.setBatchId(batchId);
        payFeePo.setStartTime(po.getYear() + "-" + po.getMonth() + "-" + "01");
        payFeePo.setEndTime(po.getYear() + "-" + po.getMonth() + "-" + DateUtil.getTotalDaysInMonth(Integer.parseInt(po.getYear()), Integer.parseInt(po.getMonth())));
        payFeePo.setStartTime(po.getYear() + "-" + Vtil.getMonth(po.getMonth()) + "-" + "01");
        payFeePo.setEndTime(Vtil.processDateEnhanced(DateUtil.getDateFromStringB(payFeePo.getStartTime()), "end",
                DateUtil.DATE_FORMATE_STRING_B, null ,"").split(" ")[0]);
        payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
        payFeePo.setbId("-1");
        payFeePo.setFeeFlag(FeeDto.FEE_FLAG_ONCE);
        payFeePo.setState(FeeDto.STATE_FINISH);
        payFeePo.setState(FeeDto.STATE_DOING);
        payFeePo.setIncomeObjId("102025062610470035");
        payFeePo.setUserId("-1");
        reqJson.put("feeId", payFeePo.getFeeId());
        payFeePo.setUserId("-1");;
        String id = po.getId();
        po.setId(null);
        Object o = ((HashMap) sqlSessionTemplate.selectList("phoneBillFlowServiceDaoImpl.queryPhoneBillFlowsCount", BeanConvertUtil.beanCovertMap(po)).get(0)).get("count");
        if (Integer.parseInt(Vtil.defaultValue(o, "1")) != 0) {
            throw new IllegalArgumentException("重复的话费");
        }
        po.setId(id);
//        reqJson.put("feeId", payFeePo.getFeeId());
//        String id = payFeePo.getFeeId();
//        payFeePo.setFeeId(null);
        int i = payFeeV1InnerServiceSMOImpl.queryPayFeesCountByPo(payFeePo);
//        if (i > 0) {
//            throw new IllegalArgumentException("重复的话费");
//        }
//        payFeePo.setFeeId(id);
        sqlSessionTemplate.insert("phoneBillFlowServiceDaoImpl.savePhoneBillFlowInfo", BeanConvertUtil.beanCovertMap(po));
        int flag = payFeeV1InnerServiceSMOImpl.savePayFee(payFeePo);
        if (flag < 1) {
            throw new CmdException("保存数据失败");
@@ -155,11 +170,16 @@
        ownerDto.setRoomId(reqJson.getString("objId"));
        List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwnersByRoom(ownerDto);
        if (ownerDtos != null && ownerDtos.size() > 0) {
            feeAttrPo = new FeeAttrPo();
            feeAttrPo.setCommunityId(po.getCommunityId());
            feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_ID);
            feeAttrPo.setValue(ownerDtos.get(0).getOwnerId());
            if (ownerDtos.size() > 1) {
                feeAttrPo.setValue("导入信息中不存在业主");
            }else {
                feeAttrPo.setValue(ownerDtos.get(0).getOwnerId());
            }
            feeAttrPo.setFeeId(payFeePo.getFeeId());
            feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
            flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
@@ -170,7 +190,11 @@
            feeAttrPo = new FeeAttrPo();
            feeAttrPo.setCommunityId(po.getCommunityId());
            feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_LINK);
            feeAttrPo.setValue(ownerDtos.get(0).getLink());
            if (ownerDtos.size() > 1) {
                feeAttrPo.setValue("导入信息中不存在业主");
            }else {
                feeAttrPo.setValue(ownerDtos.get(0).getLink());
            }
            feeAttrPo.setFeeId(payFeePo.getFeeId());
            feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
            flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
@@ -181,7 +205,11 @@
            feeAttrPo = new FeeAttrPo();
            feeAttrPo.setCommunityId(po.getCommunityId());
            feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_NAME);
            feeAttrPo.setValue(ownerDtos.get(0).getName());
            if (ownerDtos.size() > 1) {
                feeAttrPo.setValue("导入信息中不存在业主");
            }else {
                feeAttrPo.setValue(ownerDtos.get(0).getName());
            }
            feeAttrPo.setFeeId(payFeePo.getFeeId());
            feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
            flag = feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo);
@@ -206,7 +234,10 @@
        }
        List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
        if (roomDtos.isEmpty()) {
            throw new IllegalArgumentException("未查询到房屋:" + po.getAddress());
            po.setRoomId("1");
            po.setRemark3("\n\n房屋:" +
                    roomDto.getCommunityId() + "-" + roomDto.getRoadName() + "-" + roomDto.getFloorNum() + "-" + roomDto.getUnitNum() + "-" +
                    roomDto.getRoomNum() + "不存在,该费用存入公司账户");
//            ImportOwnerRoomDto importOwnerRoomDto = new ImportOwnerRoomDto();//房屋
//            importOwnerRoomDto.setUserId(po.getUserId());
//            importOwnerRoomDto.setRoomId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_roomId));
service-job/src/main/java/com/java110/job/importData/adapt/ImportRoomOwnerV2QueueDataAdapt.java
@@ -5,6 +5,8 @@
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.community.CommunityDto;
import com.java110.dto.dict.DictDto;
import com.java110.dto.fee.FeeConfigDto;
import com.java110.dto.fee.FeeDto;
import com.java110.dto.importData.*;
import com.java110.dto.log.AssetImportLogDetailDto;
import com.java110.dto.menu.MenuDto;
@@ -12,17 +14,21 @@
import com.java110.dto.owner.OwnerDto;
import com.java110.dto.room.RoomDto;
import com.java110.fee.api.ApplyRoomDiscountApi;
import com.java110.fee.bmo.fee.IFeeBMO;
import com.java110.fee.dao.IApplyRoomDiscountServiceDao;
import com.java110.fee.dao.IPayFeeConfigV1ServiceDao;
import com.java110.intf.community.ICommunityInnerServiceSMO;
import com.java110.intf.community.IImportOwnerRoomInnerServiceSMO;
import com.java110.intf.community.IMenuInnerServiceSMO;
import com.java110.intf.dev.IDictV1InnerServiceSMO;
import com.java110.intf.fee.IOweFeeCallableV1InnerServiceSMO;
import com.java110.intf.fee.*;
import com.java110.intf.user.IOwnerInnerServiceSMO;
import com.java110.intf.user.IOwnerV1InnerServiceSMO;
import com.java110.job.importData.DefaultImportData;
import com.java110.job.importData.IImportDataAdapt;
import com.java110.po.dict.DictPo;
import com.java110.po.fee.FeeAttrPo;
import com.java110.po.fee.PayFeePo;
import com.java110.po.oweFeeCallable.OweFeeCallablePo;
import com.java110.po.owner.OwnerPo;
import com.java110.po.room.ApplyRoomDiscountPo;
@@ -31,6 +37,7 @@
import com.java110.utils.cache.MappingCache;
import com.java110.utils.util.Assert;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.DateUtil;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -73,7 +80,15 @@
    @Autowired
    private ICommunityInnerServiceSMO communityInnerServiceSMOImpl;
    @Autowired
    private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
    @Autowired
    private IPayFeeV1InnerServiceSMO payFeeV1InnerServiceSMO;
    @Autowired
    private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMO;
    @Override
    public void importData(List<AssetImportLogDetailDto> assetImportLogDetailDtos) {
        importDatas(assetImportLogDetailDtos);
@@ -90,7 +105,12 @@
                updateImportLogDetailState(assetImportLogDetailDto.getDetailId());
            } catch (Exception e) {
                e.printStackTrace();
                updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), e);
                if (e.getMessage().contains("### Error updating database")){
                    updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), "未知错误,请联系管理员");
                }
                else {
                    updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), e);
                }
            }
        }
@@ -123,32 +143,32 @@
        DictDto dictDto = new DictDto();
        dictDto.setTableName("building_room");
        dictDto.setTableColumns("room_sub_type");
        dictDto.setName(defaultValue(objects.get(1)));
        dictDto.setName(Vtil.defaultValue(objects.get(1)));
        List<DictDto> dictDtos = dictV1InnerServiceSMOImpl.queryDictAndSpecs(dictDto);
        if (dictDtos.isEmpty()) {
            DictPo dictPo = new DictPo();
            dictPo.setStatusCd(GenerateCodeFactory.getGeneratorId("2"));
            dictPo.setTableName("building_room");
            dictPo.setTableColumns("room_sub_type");
            dictPo.setName(defaultValue(objects.get(1)));
            dictPo.setName(Vtil.defaultValue(objects.get(1)));
            dictV1InnerServiceSMOImpl.saveDict(dictPo);
            dictDtos = dictV1InnerServiceSMOImpl.queryDictAndSpecs(dictDto);
            if (dictDtos.isEmpty()) {
                throw new IllegalArgumentException("导入失败:字典中不存在物业类型:" + defaultValue(objects.get(1)));
                throw new IllegalArgumentException("导入失败:字典中不存在物业类型:" + Vtil.defaultValue(objects.get(1)));
            }
        }
        importOwnerRoomDto.setRoomSubType(dictDtos.get(0).getStatusCd());
        //----------
        importOwnerRoomDto.setPropertyType(defaultValue(objects.get(2)));//住宅类型
        importOwnerRoomDto.setPropertyType(Vtil.defaultValue(objects.get(2)));//住宅类型
        //--------匹配小区
        CommunityDto communityDto = new CommunityDto();
        communityDto.setCommunityCode(defaultValue(objects.get(3)));
        communityDto.setName(defaultValue(objects.get(4)));
        communityDto.setCommunityCode(Vtil.defaultValue(objects.get(3)));
        communityDto.setName(Vtil.defaultValue(objects.get(4)));
        List<CommunityDto> communityDtos = communityInnerServiceSMOImpl.queryCommunitys(communityDto);
        if (communityDtos.isEmpty()) {
            throw new IllegalArgumentException("导入失败:小区中不存在小区编码为‘" + defaultValue(objects.get(1)) + "’的小区");
            throw new IllegalArgumentException("导入失败:小区中不存在小区编码为‘" + Vtil.defaultValue(objects.get(1)) + "’的小区");
        } else if (communityDtos.size() > 1) {
            String communityNames = communityDtos.stream()
                    .map(CommunityDto::getName) // 提取每个小区的名称
@@ -160,13 +180,14 @@
        importOwnerRoomDto.setCommunityId(communityId);//小区编号
        //---------
        importOwnerRoomDto.setRoadName(defaultValue(objects.get(5)));//路名
        importOwnerRoomDto.setFloorNum(defaultValue(objects.get(6)));//弄
        importOwnerRoomDto.setUnitNum(defaultValue(objects.get(7)));//门
        importOwnerRoomDto.setRoomNum(defaultValue(objects.get(8)));//室
        importOwnerRoomDto.setDoorRoomNum(defaultValue(objects.get(9)));//门市号
        importOwnerRoomDto.setPropertyAddress(defaultValue(objects.get(10)));//业主地址
        importOwnerRoomDto.setRoomBuyer(defaultValue(objects.get(11)));//购房人
        importOwnerRoomDto.setRoadName(Vtil.defaultValue(objects.get(5)));//路名
        importOwnerRoomDto.setFloorNum(Vtil.defaultValue(objects.get(6)));//弄
        importOwnerRoomDto.setUnitNum(Vtil.defaultValue(objects.get(7)));//门
        importOwnerRoomDto.setRoomNum(Vtil.defaultValue(objects.get(8)));//室
        importOwnerRoomDto.setDoorRoomNum(Vtil.defaultValue(objects.get(9)));//门市号
        importOwnerRoomDto.setPropertyAddress(Vtil.defaultValue(objects.get(10)));//业主地址
        importOwnerRoomDto.setRoomBuyer(Vtil.defaultValue(objects.get(11)));//购房人
        RoomDto roomDto = new RoomDto();
        roomDto.setCommunityId(importOwnerRoomDto.getCommunityId());
@@ -174,16 +195,30 @@
        roomDto.setFloorNum(importOwnerRoomDto.getFloorNum());
        roomDto.setUnitNum(importOwnerRoomDto.getUnitNum());
        roomDto.setRoomNum(importOwnerRoomDto.getRoomNum());
        if (roomDto.getRoomNum() ==null || roomDto.getRoomNum().equals("")){
            roomDto.setPropertyType("商铺");
        }
        List<Object> objects1 = sqlSessionTemplate.selectList("roomServiceDaoImpl.getRoomInfo", BeanConvertUtil.beanCovertMap(roomDto));
        if (!objects1.isEmpty()) {
            throw new IllegalArgumentException("重复的房屋");
        }
        List<FeeConfigDto> feeDtos = null;
        if (!importOwnerRoomDto.getCommunityId().isEmpty()){
            FeeConfigDto feeConfigDto = new FeeConfigDto();
            feeConfigDto.setCommunityId(importOwnerRoomDto.getCommunityId());
            feeConfigDto.setSecondaryFeeTypeCdName(importOwnerRoomDto.getPropertyType());
            feeDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
            if (feeDtos.isEmpty()) {
                throw new IllegalArgumentException("物业类型`"+importOwnerRoomDto.getPropertyType()+"`未查询到收费项");
            }
        }
        //---------家庭成员、租客
        OwnerPo ownerPoTo3 = new OwnerPo();//
        if (!defaultValue(objects.get(13)).isEmpty()) {
            String link = defaultValue(objects.get(13));
        if (!Vtil.defaultValue(objects.get(13)).isEmpty()) {
            String link = Vtil.defaultValue(objects.get(13));
            OwnerDto ownerDto = new OwnerDto();
            ownerDto.setLink(link);
            ownerDto.setCommunityId(communityId);
@@ -196,15 +231,15 @@
            ownerPoTo3.setState(OwnerDto.STATE_FINISH);
            ownerPoTo3.setPersonType(OwnerDto.PERSON_TYPE_PERSON);
            ownerPoTo3.setOwnerTypeCd(OwnerDto.OWNER_TYPE_CD_MEMBER);
            ownerPoTo3.setName(defaultValue(objects.get(12)));
            ownerPoTo3.setName(Vtil.defaultValue(objects.get(12)));
            ownerPoTo3.setLink(link);
            ownerPoTo3.setSex("2");
            ownerPoTo3.setPersonRole(OwnerDto.PERSON_ROLE_MEMBER);
        }
        OwnerPo ownerPoTo2 = new OwnerPo();//TODO 租客未导入
        if (!defaultValue(objects.get(15)).isEmpty()) {
            String link = defaultValue(objects.get(15));
        if (!Vtil.defaultValue(objects.get(15)).isEmpty()) {
            String link = Vtil.defaultValue(objects.get(15));
            OwnerDto ownerDto = new OwnerDto();
            ownerDto.setLink(link);
            ownerDto.setCommunityId(communityId);
@@ -218,41 +253,41 @@
            ownerPoTo2.setState(OwnerDto.STATE_FINISH);
            ownerPoTo2.setPersonType(OwnerDto.PERSON_ROLE_RENT);
            ownerPoTo2.setOwnerTypeCd(OwnerDto.OWNER_TYPE_CD_MEMBER);
            ownerPoTo2.setName(defaultValue(objects.get(21+a)));
            ownerPoTo2.setName(Vtil.defaultValue(objects.get(21+a)));
            ownerPoTo2.setLink(link);
            ownerPoTo2.setSex("2");
            ownerPoTo2.setPersonRole(OwnerDto.PERSON_ROLE_MEMBER);
        }
        //---------
        importOwnerRoomDto.setBuiltUpArea(defaultValue(objects.get(16+a)));//面积
        importOwnerRoomDto.setRoomArea(defaultValue(objects.get(16+a)));//面积
        importOwnerRoomDto.setRoomRent(defaultValue(objects.get(16+a)));//面积
        importOwnerRoomDto.setBuyDate(defaultValueToDate(objects.get(20+a)));//购入日期
        importOwnerRoomDto.setSellDate(defaultValueToDate(objects.get(22+a)));//卖出日期
        importOwnerRoomDto.setSellState(defaultValue(objects.get(23+a)));//房屋状态
        importOwnerRoomDto.setBuiltUpArea(Vtil.defaultValue(objects.get(16)));//面积
        importOwnerRoomDto.setRoomArea(Vtil.defaultValue(objects.get(16)));//面积
        importOwnerRoomDto.setRoomRent(Vtil.defaultValue(objects.get(16)));//面积
        importOwnerRoomDto.setBuyDate(Vtil.defaultValueToDate(objects.get(28)));//购入日期
        importOwnerRoomDto.setSellDate(Vtil.defaultValueToDate(objects.get(26)));//卖出日期
        importOwnerRoomDto.setSellState(Vtil.defaultValue(objects.get(23+a)));//房屋状态
        importOwnerRoomDto.setEoc(defaultNum(objects.get(24+a)).toString());//设备运行费
        importOwnerRoomDto.setEoc(Vtil.defaultNum(objects.get(24+a)).toString());//设备运行费
        //-----TODO 待导入  催缴信息
        if (!defaultValue(objects.get(27)).isEmpty()) {
        if (!Vtil.defaultValue(objects.get(31)).isEmpty()) {
            OwnerCollectionDto ownerCollection = new OwnerCollectionDto();
            ownerCollection.setOwnerId(importOwnerRoomDto.getOwnerId());
            ownerCollection.setRoomId(importOwnerRoomDto.getRoomId());
            ownerCollection.setCollectionStartDate(defaultValueToDate(objects.get(25+a)));
            ownerCollection.setCollectionEndDate(defaultValueToDate(objects.get(26+a)));
            ownerCollection.setAmount(defaultValue(objects.get(27+a)));
            ownerCollection.setFirstCollector(defaultValue(objects.get(28+a)));
            ownerCollection.setSecondCollectorName(defaultValue(objects.get(29+a)));
            ownerCollection.setSecondCollectorPhone(defaultValue(objects.get(30+a)));
            ownerCollection.setSecondCollectorAddress(defaultValue(objects.get(31+a)));
            ownerCollection.setReceiptNumber(defaultValue(objects.get(32+a)));
            ownerCollection.setReceiptPhotoUrl(defaultValue(objects.get(33+a)));
            ownerCollection.setRemark(defaultValue(objects.get(34+a)));
            ownerCollection.setCollectionStartDate(Vtil.defaultValueToDate(objects.get(25+a)));
            ownerCollection.setCollectionEndDate(Vtil.defaultValueToDate(objects.get(26+a)));
            ownerCollection.setAmount(Vtil.defaultValue(objects.get(27+a)));
            ownerCollection.setFirstCollector(Vtil.defaultValue(objects.get(28+a)));
            ownerCollection.setSecondCollectorName(Vtil.defaultValue(objects.get(29+a)));
            ownerCollection.setSecondCollectorPhone(Vtil.defaultValue(objects.get(30+a)));
            ownerCollection.setSecondCollectorAddress(Vtil.defaultValue(objects.get(31+a)));
            ownerCollection.setReceiptNumber(Vtil.defaultValue(objects.get(32+a)));
            ownerCollection.setReceiptPhotoUrl(Vtil.defaultValue(objects.get(33+a)));
            ownerCollection.setRemark(Vtil.defaultValue(objects.get(34+a)));
        }
        //-----
        //-----打折信息 TODO 未添加重复校验
        if (!defaultValue(objects.get(38+a)).isEmpty()) {
        if (!Vtil.defaultValue(objects.get(42)).isEmpty()) {
            ApplyRoomDiscountPo applyRoomDiscountPo = new ApplyRoomDiscountPo();//打折
            applyRoomDiscountPo.setArdId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ardId));
            applyRoomDiscountPo.setCommunityId(importOwnerRoomDto.getCommunityId());
@@ -260,50 +295,40 @@
            applyRoomDiscountPo.setRoomName(importOwnerRoomDto.getPropertyAddress());
            applyRoomDiscountPo.setDiscountId("132025112781200067");
            applyRoomDiscountPo.setApplyType("152025112756040048");
            applyRoomDiscountPo.setFixedDiscountValue(defaultNum(objects.get(36+a)));
            applyRoomDiscountPo.setDiscountedAmount(defaultNum(objects.get(37+a)));
            // 2. 定义格式化器(注意:SimpleDateFormat 线程不安全,每次使用新建实例)
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/M");
            try {
                SimpleDateFormat outputSdf = new SimpleDateFormat("yyyy-MM-dd");
                applyRoomDiscountPo.setStartTime(defaultValueToDate(objects.get(38+a)));
                applyRoomDiscountPo.setEndTime(defaultValueToDate(objects.get(39+a)));
            }catch (Exception e){
                throw new IllegalArgumentException("导入失败:处理折扣日期区间时出错");
            }
            applyRoomDiscountPo.setDiscountArchiveDate(defaultValueToDate(objects.get(40+a)));
            applyRoomDiscountPo.setCreateRemark(defaultValue(objects.get(41+a)));
            applyRoomDiscountPo.setCheckRemark("审批人:" + defaultValue(objects.get(42+a)));
            applyRoomDiscountPo.setReviewRemark("审批人:" + defaultValue(objects.get(43+a)));
            applyRoomDiscountPo.setFixedDiscountValue(Vtil.defaultNum(objects.get(36+a)));
            applyRoomDiscountPo.setDiscountedAmount(Vtil.defaultNum(objects.get(37+a)));
            applyRoomDiscountPo.setStartTime(Vtil.defaultValueToDate(objects.get(38+a),"start", null));
            applyRoomDiscountPo.setEndTime(Vtil.defaultValueToDate(objects.get(39+a), "end", null));
            applyRoomDiscountPo.setDiscountArchiveDate(Vtil.defaultValueToDate(objects.get(40+a)));
            applyRoomDiscountPo.setCreateRemark(Vtil.defaultValue(objects.get(41+a)));
            applyRoomDiscountPo.setCheckRemark("审批人:" + Vtil.defaultValue(objects.get(42+a)));
            applyRoomDiscountPo.setReviewRemark("审批人:" + Vtil.defaultValue(objects.get(43+a)));
            applyRoomDiscountPo.setCreateUserTel("无");
            applyRoomDiscountPo.setCreateUserName("由系统导入");
            applyRoomDiscountPo.setState("4");
            applyRoomDiscountPo.setStatusCd("0");
            applyRoomDiscountPo.setInUse("0");
            applyRoomDiscountPo.setReturnWay("1001");
            applyRoomDiscountPo.setRelatedAttachments(defaultValue(objects.get(44+a)));
            applyRoomDiscountPo.setRelatedAttachments(Vtil.defaultValue(objects.get(44+a)));
            try {
                applyRoomDiscountServiceDaoImpl.saveApplyRoomDiscountInfo(BeanConvertUtil.beanCovertMap(applyRoomDiscountPo));
            }catch (Exception e){
                throw new IllegalArgumentException("导入失败:打折信息导入存在错误");
            }
        }
        //-----
        //-----业主信息
        importOwnerRoomDto.setTel(defaultValue(objects.get(45+a)));//手机号
        importOwnerRoomDto.setIdCard(defaultValue(objects.get(46+a)));//身份证
        importOwnerRoomDto.setAddress(defaultValue(objects.get(47+a)));//TODO 导入逻辑未添加该字段  联络地址
        importOwnerRoomDto.setSex(defaultValue(objects.get(48+a)).equals("") ?"2" :  defaultValue(objects.get(48+a)));
        importOwnerRoomDto.setOwnerName(defaultValue(objects.get(11)));
        importOwnerRoomDto.setHouseholdPoliceStation(defaultValue(objects.get(50+a)));
        importOwnerRoomDto.setPropertyCertificateNo(defaultValue(objects.get(51+a)));
        importOwnerRoomDto.setIsEvChargerInstalled(defaultValue(objects.get(52+a)));
        importOwnerRoomDto.setTel(Vtil.defaultValue(objects.get(45+a)));//手机号
        importOwnerRoomDto.setIdCard(Vtil.defaultValue(objects.get(46+a)));//身份证
        importOwnerRoomDto.setAddress(Vtil.defaultValue(objects.get(47+a)));//TODO 导入逻辑未添加该字段  联络地址
        importOwnerRoomDto.setSex(Vtil.defaultValue(objects.get(48+a)).equals("") ?"2" :  Vtil.defaultValue(objects.get(48+a)));
        importOwnerRoomDto.setOwnerName(Vtil.defaultValue(objects.get(11)));
        importOwnerRoomDto.setHouseholdPoliceStation(Vtil.defaultValue(objects.get(50+a)));
        importOwnerRoomDto.setPropertyCertificateNo(Vtil.defaultValue(objects.get(51+a)));
        importOwnerRoomDto.setIsEvChargerInstalled(Vtil.defaultValue(objects.get(52+a)));
        if (Vtil.defaultValue(objects.get(57+a),null) != null) {
        if (Vtil.defaultValue(objects.get(61),null) != null) {
            OweFeeCallablePo oweFeeCallablePo = new OweFeeCallablePo();
            oweFeeCallablePo.setOfcId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
            oweFeeCallablePo.setAmountdOwed("0");
@@ -315,23 +340,23 @@
            oweFeeCallablePo.setConfigId("");
            oweFeeCallablePo.setOwnerId(importOwnerRoomDto.getOwnerId());
            oweFeeCallablePo.setOwnerName(importOwnerRoomDto.getOwnerName());
            oweFeeCallablePo.setPayerObjId("");
            oweFeeCallablePo.setPayerObjId(importOwnerRoomDto.getRoomId());
            oweFeeCallablePo.setPayerObjName(importOwnerRoomDto.getPropertyAddress());
            oweFeeCallablePo.setPayerObjType("3333");
            oweFeeCallablePo.setRemark(defaultValue(objects.get(57+a)));
            oweFeeCallablePo.setRemark(Vtil.defaultValue(objects.get(57+a)) + "\n\n催收时段:" + Vtil.defaultValueToDate(objects.get(61)));
            oweFeeCallablePo.setStaffId("302025062612580518");
            oweFeeCallablePo.setStaffName("刘志勇");
            oweFeeCallablePo.setState(OweFeeCallableDto.STATE_COMPLETE);
            oweFeeCallablePo.setStartTime(defaultValueToDate(objects.get(56+a)));//TODO 时间段需要拆分
            oweFeeCallablePo.setEndTime(defaultValueToDate(objects.get(56+a)));
            oweFeeCallablePo.setCreateTime(defaultValueToDate(objects.get(53+a)));
//            oweFeeCallablePo.setStartTime(Vtil.defaultValueToDate(objects.get(61)));//TODO 时间段需要拆分
//            oweFeeCallablePo.setEndTime(Vtil.defaultValueToDate(objects.get(61)));
            oweFeeCallablePo.setCreateTime(Vtil.defaultValueToDate(objects.get(53+a)));
            int flag = oweFeeCallableV1InnerServiceSMOImpl.saveOweFeeCallable(oweFeeCallablePo);
            if (flag < 1) {
                throw new IllegalArgumentException("催收信息导入失败");
            }
            for (int i = 0; i < 5 ; i++) {
                int index = i*4 + 59+a;
                int index = i*4 + 65;
                if(objects.get(index) == null){
                    break;
                }
@@ -340,11 +365,11 @@
                houseMailRecord.setOwnerId(importOwnerRoomDto.getOwnerId());
                houseMailRecord.setHouseId(importOwnerRoomDto.getRoomId());
                houseMailRecord.setCallableId(oweFeeCallablePo.getOfcId());
                houseMailRecord.setCreateTime(defaultValueToDate(objects.get(index)));
                houseMailRecord.setMailNo(defaultValue(objects.get(index+1)));
                houseMailRecord.setServiceFee(defaultValue(objects.get(index+2)));
                houseMailRecord.setMailResult(defaultValue(objects.get(index+3)));
                houseMailRecord.setRemark(defaultValue(objects.get(79+a)));
                houseMailRecord.setCreateTime(Vtil.defaultValueToDate(objects.get(index)));
                houseMailRecord.setMailNo(Vtil.defaultValue(objects.get(index+1)));
                houseMailRecord.setServiceFee(Vtil.defaultValue(objects.get(index+2)));
                houseMailRecord.setMailResult(Vtil.defaultValue(objects.get(index+3)));
                houseMailRecord.setRemark(Vtil.defaultValue(objects.get(79+a)));
                int save = applyRoomDiscountServiceDaoImpl.saveHouseMailRecord(BeanConvertUtil.beanCovertMap(houseMailRecord));
            }
@@ -352,18 +377,18 @@
            //----对方收款单位表
            PayeeReceiveInfoPo payeeReceiveInfoPo = new PayeeReceiveInfoPo();
            payeeReceiveInfoPo.setCallableId(oweFeeCallablePo.getOfcId());
            payeeReceiveInfoPo.setCallerName(defaultValue(objects.get(80+a)));
            payeeReceiveInfoPo.setContactInfo(defaultValue(objects.get(81+a)));
            payeeReceiveInfoPo.setPayeeInfo(defaultValue(objects.get(82+a)));
            payeeReceiveInfoPo.setInvoiceNo(defaultValue(objects.get(83+a)));
            payeeReceiveInfoPo.setInvoiceDate(objects.getDate(84+a));
            payeeReceiveInfoPo.setReceiptNo(defaultValue(objects.get(85+a)));
            payeeReceiveInfoPo.setReceiptDate(objects.getDate(86+a));
            payeeReceiveInfoPo.setReceiptNote(defaultValue(objects.get(87+a)));
            payeeReceiveInfoPo.setReceiptNoteDate(objects.getDate(88+a));
            payeeReceiveInfoPo.setImageFile(defaultValue(objects.get(89+a)));
            payeeReceiveInfoPo.setOurCompanyReceiveDate(objects.getDate(90+a));
            payeeReceiveInfoPo.setAttachmentFile(defaultValue(objects.get(91+a)));
            payeeReceiveInfoPo.setCallerName(Vtil.defaultValue(objects.get(88)));
            payeeReceiveInfoPo.setContactInfo(Vtil.defaultValue(objects.get(89)));
            payeeReceiveInfoPo.setPayeeInfo(Vtil.defaultValue(objects.get(90)));
            payeeReceiveInfoPo.setInvoiceNo(Vtil.defaultValue(objects.get(91)));
            payeeReceiveInfoPo.setInvoiceDate(objects.getDate(92));
            payeeReceiveInfoPo.setReceiptNo(Vtil.defaultValue(objects.get(93)));
            payeeReceiveInfoPo.setReceiptDate(objects.getDate(94));
            payeeReceiveInfoPo.setReceiptNote(Vtil.defaultValue(objects.get(95)));
            payeeReceiveInfoPo.setReceiptNoteDate(objects.getDate(96));
            payeeReceiveInfoPo.setImageFile(Vtil.defaultValue(objects.get(97)));
            payeeReceiveInfoPo.setOurCompanyReceiveDate(objects.getDate(98));
            payeeReceiveInfoPo.setAttachmentFile(Vtil.defaultValue(objects.get(99)));
            payeeReceiveInfoPo.setOwnerId(importOwnerRoomDto.getOwnerId());
            payeeReceiveInfoPo.setRoomId(importOwnerRoomDto.getRoomId());
            int insert = sqlSessionTemplate.insert("payeeReceiveInfoServiceDaoImpl.savePayeeReceiveInfo",
@@ -372,102 +397,103 @@
            //----
            //----法院审理程序
            if (!defaultValue(objects.get(132+a)).isEmpty()) {
            if (!Vtil.defaultValue(objects.get(141)).isEmpty()) {
                CourtTrialProcedure courtTrialProcedure = new CourtTrialProcedure();
                courtTrialProcedure.setCallableId(oweFeeCallablePo.getOfcId());
                courtTrialProcedure.setOwnerId(importOwnerRoomDto.getOwnerId());
                courtTrialProcedure.setAcceptCourtName(defaultValue(objects.get(132+a)));
                courtTrialProcedure.setJudgeName(defaultValue(objects.get(133+a)));
                courtTrialProcedure.setJudgeContact(defaultValue(objects.get(134+a)));
                courtTrialProcedure.setJudgeNoticeAcceptDate(defaultValueToDate(objects.get(135+a)));
                courtTrialProcedure.setCourtMediationDate(defaultValueToDate(objects.get(136+a)));
                courtTrialProcedure.setMediationResult(defaultValue(objects.get(137+a)));
                courtTrialProcedure.setSubpoenaSignDate(defaultValueToDate(objects.get(138+a)));
                courtTrialProcedure.setUndeliveredDate(defaultValueToDate(objects.get(139+a)));
                courtTrialProcedure.setCourtSessionDate1(defaultValueToDate(objects.get(140+a)));
                courtTrialProcedure.setCourtSessionDate2(defaultValueToDate(objects.get(141+a)));
                courtTrialProcedure.setCaseNumber(defaultValue(objects.get(142+a)));
                courtTrialProcedure.setCourtSessionResult(defaultValue(objects.get(143+a)));
                courtTrialProcedure.setJudgmentDate(defaultValueToDate(objects.get(144+a)));
                courtTrialProcedure.setJudgmentResult(defaultValue(objects.get(145+a)));
                courtTrialProcedure.setRemark(defaultValue(objects.get(146+a)));
                courtTrialProcedure.setAcceptCourtName(Vtil.defaultValue(objects.get(132+a)));
                courtTrialProcedure.setJudgeName(Vtil.defaultValue(objects.get(133+a)));
                courtTrialProcedure.setJudgeContact(Vtil.defaultValue(objects.get(134+a)));
                courtTrialProcedure.setJudgeNoticeAcceptDate(Vtil.defaultValueToDate(objects.get(135+a)));
                courtTrialProcedure.setCourtMediationDate(Vtil.defaultValueToDate(objects.get(136+a)));
                courtTrialProcedure.setMediationResult(Vtil.defaultValue(objects.get(137+a)));
                courtTrialProcedure.setSubpoenaSignDate(Vtil.defaultValueToDate(objects.get(138+a)));
                courtTrialProcedure.setUndeliveredDate(Vtil.defaultValueToDate(objects.get(139+a)));
                courtTrialProcedure.setCourtSessionDate1(Vtil.defaultValueToDate(objects.get(140+a)));
                courtTrialProcedure.setCourtSessionDate2(Vtil.defaultValueToDate(objects.get(141+a)));
                courtTrialProcedure.setCaseNumber(Vtil.defaultValue(objects.get(142+a)));
                courtTrialProcedure.setCourtSessionResult(Vtil.defaultValue(objects.get(143+a)));
                courtTrialProcedure.setJudgmentDate(Vtil.defaultValueToDate(objects.get(144+a)));
                courtTrialProcedure.setJudgmentResult(Vtil.defaultValue(objects.get(145+a)));
                courtTrialProcedure.setRemark(Vtil.defaultValue(objects.get(146+a)));
                applyRoomDiscountServiceDaoImpl.saveCourtTrialProcedure(BeanConvertUtil.beanCovertMap(courtTrialProcedure));
            }
            //-----
            //法院执行程序
            if (!defaultValue(objects.get(147+a)).isEmpty()) {
            if (!Vtil.defaultValue(objects.get(147+a)).isEmpty()) {
                CourtExecutionProcedure courtExecutionProcedure = new CourtExecutionProcedure();
                courtExecutionProcedure.setCallableId(oweFeeCallablePo.getOfcId());
                courtExecutionProcedure.setOwnerId(importOwnerRoomDto.getOwnerId());
                courtExecutionProcedure.setApplyTime(defaultValueToDate(objects.get(147+a)));
                courtExecutionProcedure.setJudgmentDocNumber(defaultValue(objects.get(148+a)));
                courtExecutionProcedure.setArrearsPeriod(defaultValue(objects.get(149+a)));
                courtExecutionProcedure.setArrearsAmount(defaultValue(objects.get(150+a)));
                courtExecutionProcedure.setLateFee(defaultValue(objects.get(151+a)));
                courtExecutionProcedure.setAcceptanceFee(defaultValue(objects.get(152+a)));
                courtExecutionProcedure.setOtherFee(defaultValue(objects.get(153+a)));
                courtExecutionProcedure.setTotalAmount(defaultValue(objects.get(154+a)));
                courtExecutionProcedure.setRemark(defaultValue(objects.get(160+a)));
                courtExecutionProcedure.setApplyTime(Vtil.defaultValueToDate(objects.get(147+a)));
                courtExecutionProcedure.setJudgmentDocNumber(Vtil.defaultValue(objects.get(148+a)));
                courtExecutionProcedure.setArrearsPeriod(Vtil.defaultValue(objects.get(149+a)));
                courtExecutionProcedure.setArrearsAmount(Vtil.defaultValue(objects.get(150+a)));
                courtExecutionProcedure.setLateFee(Vtil.defaultValue(objects.get(151+a)));
                courtExecutionProcedure.setAcceptanceFee(Vtil.defaultValue(objects.get(152+a)));
                courtExecutionProcedure.setOtherFee(Vtil.defaultValue(objects.get(153+a)));
                courtExecutionProcedure.setTotalAmount(Vtil.defaultValue(objects.get(154+a)));
                courtExecutionProcedure.setRemark(Vtil.defaultValue(objects.get(160+a)));
                applyRoomDiscountServiceDaoImpl.saveCourtExecutionProcedure(BeanConvertUtil.beanCovertMap(courtExecutionProcedure));
            }
        }
        //----添加电联
        List<MailCallRecord> mailCallRecords = new ArrayList<MailCallRecord>();
        for (int i = 0 ; i < 9 ; i++) {
            int index = i * 3 + 92;
            if(defaultValue(objects.get(index)).isEmpty()){
            //----添加电联
            List<Object> mailCallRecords = new ArrayList<Object>();
            for (int i = 0 ; i < 9 ; i++) {
                int index = i * 3 + 86;
                if(Vtil.defaultValue(objects.get(index)).isEmpty()){
//                if (i == 0){
//                    MailCallRecord mailCallRecord = new MailCallRecord();
//                    mailCallRecord.setRemark(objects.get(115).toString());
//
//                    int save = applyRoomDiscountServiceDaoImpl.saveMailCallRecord(BeanConvertUtil.beanCovertMap(mailCallRecord));
//                }
                break;
                    break;
                }
                MailCallRecord mailCallRecord = new MailCallRecord();
                mailCallRecord.setMailId(oweFeeCallablePo.getOfcId());
                mailCallRecord.setCallDate(Vtil.defaultValueToDate(objects.get(index + (i == 0 ? 0 : 12))));
                mailCallRecord.setCallResult(Vtil.defaultValue(objects.get(index+1 + (i == 0 ? 0 : 12))));
                mailCallRecord.setCallContact(Vtil.defaultValue(objects.get(index+2 + 12)));
                mailCallRecord.setRemark(Vtil.defaultValue(objects.get(125)));
                mailCallRecords.add(mailCallRecord);
            }
            MailCallRecord mailCallRecord = new MailCallRecord();
            mailCallRecord.setMailId(importOwnerRoomDto.getOwnerId());
            mailCallRecord.setCallDate(defaultValueToDate(objects.get(index)));
            mailCallRecord.setCallResult(defaultValue(objects.get(index+1)));
            mailCallRecord.setCallContact(defaultValue(objects.get(index+2)));
            mailCallRecord.setRemark(defaultValue(objects.get(119)));
            mailCallRecords.add(mailCallRecord);
            if (mailCallRecords.size() > 0) {
                Map<String, Object> param = new HashMap<>();
                param.put("mailCallRecordList", BeanConvertUtil.beanCovertMapList(mailCallRecords));
                sqlSessionTemplate.insert("mailCallRecordServiceDaoImpl.batchSaveMailCallRecord", param);
            }
            //----
        }
        if (mailCallRecords.size() > 0) {
            Map<String, Object> param = new HashMap<>();
            param.put("mailCallRecordList", BeanConvertUtil.beanCovertMap(mailCallRecords));
            sqlSessionTemplate.insert("mailCallRecordServiceDaoImpl.batchSaveMailCallRecord", param);
        }
        //----
        //产调日期
        if (!defaultValue(objects.get(120)).isEmpty()) {
        if (!Vtil.defaultValue(objects.get(126)).isEmpty()) {
            OwnerPropertySurvey ownerPropertySurvey = new OwnerPropertySurvey();
            ownerPropertySurvey.setOwnerId(importOwnerRoomDto.getOwnerId());
            ownerPropertySurvey.setRoomId(importOwnerRoomDto.getRoomId());
            ownerPropertySurvey.setSurveyWarrantApplyDate(defaultValueToDate(objects.get(123)));
            ownerPropertySurvey.setPropertySurveyDate(defaultValueToDate(objects.get(120)));
            ownerPropertySurvey.setName(defaultValue(objects.get(121)));
            ownerPropertySurvey.setExtraDate(defaultValueToDate(objects.get(122)));
            ownerPropertySurvey.setSurveyWarrantApplyDate(Vtil.defaultValueToDate(objects.get(129)));
            ownerPropertySurvey.setPropertySurveyDate(Vtil.defaultValueToDate(objects.get(126)));
            ownerPropertySurvey.setName(Vtil.defaultValue(objects.get(127)));
            ownerPropertySurvey.setExtraDate(Vtil.defaultValueToDate(objects.get(128)));
            int save = applyRoomDiscountServiceDaoImpl.saveOwnerPropertySurvey(BeanConvertUtil.beanCovertMap(ownerPropertySurvey));
        }
        //----
        //诉讼
        if (!defaultValue(objects.get(124)).isEmpty()) {
        if (!Vtil.defaultValue(objects.get(130)).isEmpty()) {
            LitigationInfoPo litigationInfoPo = new LitigationInfoPo();
            litigationInfoPo.setLitigationDate(defaultValue(objects.get(124)));
            litigationInfoPo.setArrearsPeriod(defaultValue(objects.get(125)));
            litigationInfoPo.setArrearsAmount(defaultValue(objects.get(126)));
            litigationInfoPo.setLateFee(defaultValue(objects.get(127)));
            litigationInfoPo.setAcceptanceFee(defaultValue(objects.get(128)));
            litigationInfoPo.setOtherFee(defaultValue(objects.get(129)));
            litigationInfoPo.setTotalAmount(defaultValue(objects.get(130)));
            litigationInfoPo.setSubmitter(defaultValue(objects.get(131)));
            litigationInfoPo.setLitigationDate(Vtil.defaultValue(objects.get(130)));
            litigationInfoPo.setArrearsPeriod(Vtil.defaultValue(objects.get(131)));
            litigationInfoPo.setArrearsAmount(Vtil.defaultValue(objects.get(132)));
            litigationInfoPo.setLateFee(Vtil.defaultValue(objects.get(133)));
            litigationInfoPo.setAcceptanceFee(Vtil.defaultValue(objects.get(134)));
            litigationInfoPo.setOtherFee(Vtil.defaultValue(objects.get(135)));
            litigationInfoPo.setTotalAmount(Vtil.defaultValue(objects.get(136)));
            litigationInfoPo.setSubmitter(Vtil.defaultValue(objects.get(137)));
            litigationInfoPo.setOwnerId(importOwnerRoomDto.getOwnerId());
            sqlSessionTemplate.insert("litigationInfoServiceDaoImpl.saveLitigationInfo",
                    BeanConvertUtil.beanCovertMap(litigationInfoPo));
@@ -488,41 +514,33 @@
                ownerV1InnerServiceSMOImpl.saveOwner(ownerPoTo3);
            }
        }
    }
    private String defaultValueToDate(Object o) {
        // 空值直接返回null(原有逻辑)
        if (o == null || o.toString().isEmpty() || o.toString().equals("0")) {
            return null;
        for (int i = 0 ; i < feeDtos.size(); i++) {
            FeeConfigDto feeDto = feeDtos.get(i);
            PayFeePo payFeePo = new PayFeePo();
            payFeePo.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
            payFeePo.setbId("-1");
            payFeePo.setFeeTypeCd(feeDto.getFeeTypeCd());
            payFeePo.setSecondaryFeeTypeCd(feeDto.getSecondaryFeeTypeCd());
            payFeePo.setCommunityId(importOwnerRoomDto.getCommunityId());
            payFeePo.setPayerObjId(importOwnerRoomDto.getRoomId());
            payFeePo.setIncomeObjId("102025062610470035");
            payFeePo.setStartTime(feeDto.getStartTime());
            payFeePo.setEndTime(feeDto.getStartTime());
            payFeePo.setUserId(importOwnerRoomDto.getUserId());
            payFeePo.setStatusCd("0");
            payFeePo.setFeeFlag(feeDto.getFeeFlag());
            payFeePo.setConfigId(feeDto.getConfigId());
            payFeePo.setState("2008001");
            payFeePo.setPayerObjType("3333");
            payFeePo.setBatchId(assetImportLogDetailDto.getLogId());
            payFeeV1InnerServiceSMO.savePayFee(payFeePo);
            List<FeeAttrPo> feeAttrPos = new ArrayList<>();
            feeAttrPos.add(new FeeAttrPo(payFeePo.getFeeId(), payFeePo.getCommunityId(), GenerateCodeFactory.getGeneratorId("11"), "390007" , importOwnerRoomDto.getOwnerId()));
            feeAttrPos.add(new FeeAttrPo(payFeePo.getFeeId(), payFeePo.getCommunityId(), GenerateCodeFactory.getGeneratorId("11"), "390010" , feeDto.getEndTime().split(" ")[0] + " 23:59:59"));
            feeAttrPos.add(new FeeAttrPo(payFeePo.getFeeId(), payFeePo.getCommunityId(), GenerateCodeFactory.getGeneratorId("11"), "390009" , importOwnerRoomDto.getTel()));
            feeAttrPos.add(new FeeAttrPo(payFeePo.getFeeId(), payFeePo.getCommunityId(), GenerateCodeFactory.getGeneratorId("11"), "390008" , importOwnerRoomDto.getOwnerName()));
            feeAttrPos.add(new FeeAttrPo(payFeePo.getFeeId(), payFeePo.getCommunityId(), GenerateCodeFactory.getGeneratorId("11"), "390012" , importOwnerRoomDto.getDoorRoomNum()));
            int i1 = feeAttrInnerServiceSMO.saveFeeAttrs(feeAttrPos);
        }
        try {
            // 尝试将对象转换为数字(兼容Excel日期序列号,如44747)
            double excelDateNum = Double.parseDouble(o.toString());
            // Excel 1900日期系统基准(修正闰日bug,实际基准是1899-12-30)
            Calendar calendar = Calendar.getInstance();
            calendar.set(1899, 11, 30, 0, 0, 0); // 月份从0开始,11代表12月
            calendar.set(Calendar.MILLISECOND, 0);
            // 计算对应的实际日期
            calendar.add(Calendar.DAY_OF_MONTH, (int) excelDateNum);
            // 格式化为yyyy-MM-dd的日期字符串
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            return sdf.format(calendar.getTime());
        } catch (NumberFormatException e) {
            // 非数字类型,执行原有逻辑返回toString()
            return o.toString();
        }
    }
    public String defaultValue(Object o) {
        return o == null ? "" : o.toString();
    }
    public BigDecimal defaultNum(Object o) {
        return o == null ? new BigDecimal(0) : new BigDecimal(o.toString());
    }
}
service-user/src/test/java/com/java110/user/CgfTesdt.java
New file
@@ -0,0 +1,10 @@
package com.java110.user;
import com.java110.dto.importData.Vtil;
public class CgfTesdt {
    public static void main(String[] args) {
        System.out.println(Vtil.defaultValueToDate("续约","end",null));;
    }
}
springboot/src/main/java/com/java110/boot/BootApplicationStart.java
@@ -178,9 +178,9 @@
        restTemplate.getInterceptors().add(java110RestTemplateInterceptor);
        //设置超时时间
        HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
        httpRequestFactory.setConnectionRequestTimeout(10000);
        httpRequestFactory.setConnectTimeout(10000);
        httpRequestFactory.setReadTimeout(10000);
        httpRequestFactory.setConnectionRequestTimeout(20000);
        httpRequestFactory.setConnectTimeout(20000);
        httpRequestFactory.setReadTimeout(20000);
        restTemplate.setRequestFactory(httpRequestFactory);
        return restTemplate;
    }
@@ -191,9 +191,9 @@
                                             Java110FeignClientInterceptor okHttpLoggingInterceptor) {
        okhttp3.OkHttpClient.Builder ClientBuilder = new okhttp3.OkHttpClient.Builder()
                .readTimeout(30, TimeUnit.SECONDS) //读取超时
                .connectTimeout(10, TimeUnit.SECONDS) //连接超时
                .connectTimeout(20, TimeUnit.SECONDS) //连接超时
                .writeTimeout(60, TimeUnit.SECONDS) //写入超时
                .connectionPool(new ConnectionPool(10 /*maxIdleConnections*/, 3, TimeUnit.MINUTES))
                .connectionPool(new ConnectionPool(20 /*maxIdleConnections*/, 3, TimeUnit.MINUTES))
                .addInterceptor(okHttpLoggingInterceptor);
        return ClientBuilder.build();
    }