chengf
2025-12-11 f29e6f31e4f2d533124fc68346b7cc072f427c9b
Z三导入逻辑
8个文件已修改
104 ■■■■■ 已修改文件
java110-bean/src/main/java/com/java110/dto/importData/ImportFeeDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/fee/ImportFeeServiceDaoImplMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/job/MaintenancePaymentMapper.xml 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-common/src/main/java/com/java110/common/bmo/assetImportLogDetail/impl/GetAssetImportLogDetailBMOImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-community/src/main/java/com/java110/community/cmd/community/SaveCommunityCmd.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportReportMainV2QueueDataAdapt.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot/src/main/resources/application-debug.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/importData/ImportFeeDto.java
@@ -29,6 +29,15 @@
    private String remark;
    private String importFileName;
    public String getImportFileName() {
        return importFileName;
    }
    public void setImportFileName(String importFileName) {
        this.importFileName = importFileName;
    }
    public String getFeeTypeCd() {
        return feeTypeCd;
java110-db/src/main/resources/mapper/fee/ImportFeeServiceDaoImplMapper.xml
@@ -18,7 +18,7 @@
    <!-- 查询费用导入信息 add by wuxw 2018-07-03 -->
    <select id="getImportFeeInfo" parameterType="Map" resultType="Map">
        select t.fee_type_cd,t.fee_type_cd feeTypeCd,t.secondary_fee_type_cd,t.secondary_fee_type_cd secondaryFeeTypeCd,s.secondary_fee_type_cd_name,s.secondary_fee_type_cd_name secondaryFeeTypeCdName,t.status_cd,t.status_cd statusCd,t.import_fee_id,t.import_fee_id
        importFeeId,t.community_id,t.community_id communityId,t.create_time createTime,d.name feeTypeCdName,remark
        importFeeId,t.community_id,t.community_id communityId,t.create_time createTime,d.name feeTypeCdName,remark, t.import_file_name, t.import_file_name importFileName
        from import_fee t
        left join secondary_fee_type_cd_tb s on s.secondary_fee_type_cd = t.secondary_fee_type_cd
        left join t_dict d on t.fee_type_cd = d.status_cd and d.table_name = 'pay_fee_config' and d.table_columns = 'fee_type_cd'
java110-db/src/main/resources/mapper/job/MaintenancePaymentMapper.xml
@@ -17,14 +17,7 @@
        planned_announcement_start, planned_announcement_end, published_announcement_start,
        published_announcement_end, quota, owners_committee_resolution, owners_committee_consultation,
        withdrawal_encountered_problem, shortage_or_arrears, road_name, lane, door, room,
        door_room_number, owner_address, start_date, end_date, management_fee_ratio,
        first_planned_payment_amount, planned_payment_date, category, reimburser,
        actual_payment_amount, actual_payment_date, payee_name, id_card_number,
        bank_name, bank_account, remarks, acceptance_date, audit_date,
        print_total, arrival_total, fund_arrival_rate, fund_shortage_amount,
        management_fee, payable_amountA, payable_amountB, payable_amountC,
        planned_pay_total, actual_pay_total, unpaid_total, advance_amount,
        unpaid_by_arrival, pending_payA, pending_payB, pending_payC
        door_room_number, owner_address, start_date, end_date
        ) VALUES (
        #{id}, #{auxiliaryColumn}, #{flowNumber}, #{serialNumber}, #{projectCode}, #{projectName},
        #{year}, #{month}, #{day}, #{date}, #{projectContent}, #{managementOfficeAmount},
@@ -36,15 +29,8 @@
        #{plannedAnnouncementStart}, #{plannedAnnouncementEnd}, #{publishedAnnouncementStart},
        #{publishedAnnouncementEnd}, #{quota}, #{ownersCommitteeResolution}, #{ownersCommitteeConsultation},
        #{withdrawalEncounteredProblem}, #{shortageOrArrears}, #{roadName}, #{lane}, #{door}, #{room},
        #{doorRoomNumber}, #{ownerAddress}, #{startDate}, #{endDate}, #{managementFeeRatio},
        #{firstPlannedPaymentAmount}, #{plannedPaymentDate}, #{category}, #{reimburser},
        #{actualPaymentAmount}, #{actualPaymentDate}, #{payeeName}, #{idCardNumber},
        #{bankName}, #{bankAccount}, #{remarks}, #{acceptanceDate}, #{auditDate},
        #{printTotal}, #{arrivalTotal}, #{fundArrivalRate}, #{fundShortageAmount},
        #{managementFee}, #{payableAmountA}, #{payableAmountB}, #{payableAmountC},
        #{plannedPayTotal}, #{actualPayTotal}, #{unpaidTotal}, #{advanceAmount},
        #{unpaidByArrival}, #{pendingPayA}, #{pendingPayB}, #{pendingPayC}
        )
        #{doorRoomNumber}, #{ownerAddress}, #{startDate}, #{endDate}
        );
    </insert>
    <!-- 批量新增SQL ID:batchInsertMaintenancePayment -->
@@ -60,14 +46,10 @@
        planned_announcement_start, planned_announcement_end, published_announcement_start,
        published_announcement_end, quota, owners_committee_resolution, owners_committee_consultation,
        withdrawal_encountered_problem, shortage_or_arrears, road_name, lane, door, room,
        door_room_number, owner_address, start_date, end_date, management_fee_ratio,
        door_room_number, owner_address, start_date, end_date,
        first_planned_payment_amount, planned_payment_date, category, reimburser,
        actual_payment_amount, actual_payment_date, payee_name, id_card_number,
        bank_name, bank_account, remarks, acceptance_date, audit_date,
        print_total, arrival_total, fund_arrival_rate, fund_shortage_amount,
        management_fee, payable_amountA, payable_amountB, payable_amountC,
        planned_pay_total, actual_pay_total, unpaid_total, advance_amount,
        unpaid_by_arrival, pending_payA, pending_payB, pending_payC
        bank_name, bank_account, remarks, acceptance_date, audit_date
        ) VALUES
        <foreach collection="list" item="po" separator=",">
            (
@@ -81,14 +63,10 @@
            #{po.plannedAnnouncementStart}, #{po.plannedAnnouncementEnd}, #{po.publishedAnnouncementStart},
            #{po.publishedAnnouncementEnd}, #{po.quota}, #{po.ownersCommitteeResolution}, #{po.ownersCommitteeConsultation},
            #{po.withdrawalEncounteredProblem}, #{po.shortageOrArrears}, #{po.roadName}, #{po.lane}, #{po.door}, #{po.room},
            #{po.doorRoomNumber}, #{po.ownerAddress}, #{po.startDate}, #{po.endDate}, #{po.managementFeeRatio},
            #{po.doorRoomNumber}, #{po.ownerAddress}, #{po.startDate}, #{po.endDate},
            #{po.firstPlannedPaymentAmount}, #{po.plannedPaymentDate}, #{po.category}, #{po.reimburser},
            #{po.actualPaymentAmount}, #{po.actualPaymentDate}, #{po.payeeName}, #{po.idCardNumber},
            #{po.bankName}, #{po.bankAccount}, #{po.remarks}, #{po.acceptanceDate}, #{po.auditDate},
            #{po.printTotal}, #{po.arrivalTotal}, #{po.fundArrivalRate}, #{po.fundShortageAmount},
            #{po.managementFee}, #{po.payableAmountA}, #{po.payableAmountB}, #{po.payableAmountC},
            #{po.plannedPayTotal}, #{po.actualPayTotal}, #{po.unpaidTotal}, #{po.advanceAmount},
            #{po.unpaidByArrival}, #{po.pendingPayA}, #{po.pendingPayB}, #{po.pendingPayC}
            #{po.bankName}, #{po.bankAccount}, #{po.remarks}, #{po.acceptanceDate}, #{po.auditDate}
            )
        </foreach>
    </insert>
service-common/src/main/java/com/java110/common/bmo/assetImportLogDetail/impl/GetAssetImportLogDetailBMOImpl.java
@@ -53,17 +53,49 @@
    private JSONArray covertToData(List<AssetImportLogDetailDto> assetImportLogDetailDtos) {
        JSONArray datas = new JSONArray();
        // 空列表直接返回空JSONArray
        if (assetImportLogDetailDtos == null || assetImportLogDetailDtos.size() < 1) {
            return datas;
        }
        JSONObject data = null;
        Object contentObj = null;
        for (AssetImportLogDetailDto assetImportLogDetailDto : assetImportLogDetailDtos) {
            // 将DTO转换为JSONObject
            data = BeanConvertUtil.beanCovertJson(assetImportLogDetailDto);
            if (!StringUtil.isEmpty(assetImportLogDetailDto.getContent())) {
                data.putAll(JSONObject.parseObject(assetImportLogDetailDto.getContent()));
            contentObj = assetImportLogDetailDto.getContent();
            // 处理content字段(真实值为String[],包含null、字符串、数字、布尔值)
            if (contentObj != null && contentObj instanceof String[]) {
                String[] contentArray = (String[]) contentObj;
                // 转换String[]为JSONArray,保留原有数据类型(null、字符串等)
                JSONArray contentJsonArray = new JSONArray();
                for (Object item : contentArray) { // 用Object接收,兼容数组内的null和各种类型
                    contentJsonArray.add(item);
                }
                // 将数组存入JSONObject,key为"content"
                data.put("content", contentJsonArray);
            } else if (contentObj != null && contentObj instanceof String) {
                // 兼容可能的字符串格式(保留原有逻辑)
                String contentStr = (String) contentObj;
                if (!StringUtil.isEmpty(contentStr)) {
                    try {
                        // 若字符串是JSON对象/数组,分别解析
                        if (contentStr.startsWith("{")) {
                            data.putAll(JSONObject.parseObject(contentStr));
                        } else if (contentStr.startsWith("[")) {
                            data.put("content", JSONArray.parseArray(contentStr));
                        } else {
                            data.put("content", contentStr);
                        }
                    } catch (Exception e) {
                        // 非JSON格式字符串直接存入
                        data.put("content", contentStr);
                    }
                }
            }
            datas.add(data);
        }
service-community/src/main/java/com/java110/community/cmd/community/SaveCommunityCmd.java
@@ -113,6 +113,7 @@
        Assert.hasKeyAndValue(reqJson, "cityCode", "请求报文中未包含cityCode");
        Assert.hasKeyAndValue(reqJson, "payFeeMonth", "请求报文中未包含payFeeMonth");
        Assert.hasKeyAndValue(reqJson, "feePrice", "请求报文中未包含feePrice");
        Assert.hasKeyAndValue(reqJson, "takeTime", "请求报文中未包含接管日期");
        //属性校验
        Assert.judgeAttrValue(reqJson);
service-job/src/main/java/com/java110/job/importData/adapt/ImportReportMainV2QueueDataAdapt.java
@@ -22,10 +22,8 @@
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
 * 签报收支款数据导入适配器(适配"Z三、模版签报收支款情况-V5-20251127.xlsx"的"荣顺苑签报单"sheet)
 * 前端请求需传入:param.append('importAdapt', "importReportMainV2QueueData")
@@ -97,7 +95,8 @@
    private MaintenancePaymentPo buildMaintenancePaymentPo(JSONArray cellArray) throws ParseException {
        MaintenancePaymentPo po = new MaintenancePaymentPo();
        // 基础字段(直接映射Excel单元格)
        po.setId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_maintenanceId)); // 主键ID
        long longId = UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE; // 避免负数
        po.setId(longId+""); // 主键ID
        po.setAuxiliaryColumn(getCellValue(cellArray, 0)); // 第1列:辅助列
        po.setFlowNumber(getCellValue(cellArray, 1)); // 第2列:流转编号
        po.setSerialNumber(parseInteger(getCellValue(cellArray, 2))); // 第3列:序号
@@ -275,7 +274,9 @@
                                                       int arrivalDateCol, int arrivalAmountCol,
                                                       int withdrawerCol, int shortageCol) throws ParseException {
        MpPaymentRecordPo po = new MpPaymentRecordPo();
        po.setId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_paymentRecordId));
        long longId = UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE; // 避免负数
        po.setId(longId+"");
        po.setMpId(flowNumber + "_PRINT" + printTimes); // mp_id = 流转编号_打印次数(确保唯一)
        po.setFirstPrintDate(parseDate(getCellValue(cellArray, dateCol)));
        po.setResolutionNumber(getCellValue(cellArray, resolutionCol));
@@ -298,7 +299,8 @@
     */
    private MpFifthPaymentRecordPo buildMpFifthPaymentRecordPo(JSONArray cellArray, String flowNumber) throws ParseException {
        MpFifthPaymentRecordPo po = new MpFifthPaymentRecordPo();
        po.setId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_fifthPaymentId));
        long longId = UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE; // 避免负数
        po.setId(longId+"");
        po.setMpId(flowNumber + "_FIFTH"); // mp_id = 流转编号_FIFTH
        // 第五次拟付实付数据(第106-111列)
        po.setFifthPlannedPaymentAmount(parseBigDecimal(getCellValue(cellArray, 137))); // 第五次拟付金额
springboot/src/main/resources/application-debug.yml
@@ -27,7 +27,7 @@
    database: 0
    host: localhost
    port: 6379
    password: redis2020
    password:
    pool:
      max-active: 300
      max-wait: 3000
springboot/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: dev
    active: debug
import:
  line: