jialh
1 天以前 dd6687b118561100e1677e88a9c2f5842a54c531
水电话费
38个文件已修改
1个文件已添加
3270 ■■■■■ 已修改文件
java110-bean/src/main/java/com/java110/dto/PropertyWhiteListFlowDto.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/importData/ImportOwnerRoomDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/meter/MeterWaterDto.java 305 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/system/ComponentValidateResult.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/po/contract/ContractPo.java 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/po/importFee/MaintenancePayment.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/center/MaintenancePaymentDAOImplMapper.xml 245 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/fee/MeterWaterServiceDaoImplMapper.xml 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/fee/MeterWaterV1ServiceDaoImplMapper.xml 366 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/fee/PropertyWhiteListFlowDaoImplMapper.xml 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/store/ContractCollectionDetailServiceDaoImpl.xml 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/store/ContractServiceDaoImplMapper.xml 389 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-interface/src/main/java/com/java110/intf/store/IContractInnerServiceSMO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-utils/src/main/java/com/java110/utils/util/BeanConvertUtil.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-utils/src/main/java/com/java110/utils/util/DateUtil.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-api/src/main/java/com/java110/api/importData/adapt/ImportContractCleaningAdapt.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-api/src/main/java/com/java110/api/importData/adapt/ImportReportMainDataV2CleaningAdapt.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-community/src/main/java/com/java110/community/smo/impl/ImportOwnerRoomInnerServiceSMOImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/api/MaintenancePaymentApi.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/api/MpPaymentRecordApi.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/api/contract/ContractAmountDetailApi.java 470 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/api/contract/ContractCollectionDetailApi.java 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeePropertyCmd.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeeWriteOrderCmd.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/dao/impl/FeeConfigServiceDaoImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/dao/impl/IReportFeeServiceDaoImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportContractQueueDataAdapt.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportOwnerCarQueueV2DataAdapt.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportReportMainV2QueueDataAdapt.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportRoomOwnerV2QueueDataAdapt.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-store/src/main/java/com/java110/store/api/ContractAmountDetailApi.java 235 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-store/src/main/java/com/java110/store/api/ContractApi.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-store/src/main/java/com/java110/store/bmo/contract/IUpdateContractBMO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-store/src/main/java/com/java110/store/bmo/contract/impl/UpdateContractBMOImpl.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-store/src/main/java/com/java110/store/dao/IContractServiceDao.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-store/src/main/java/com/java110/store/dao/impl/ContractServiceDaoImpl.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-store/src/main/java/com/java110/store/smo/impl/ContractInnerServiceSMOImpl.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot/src/main/resources/application-debug.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot/src/main/resources/application.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/PropertyWhiteListFlowDto.java
@@ -52,6 +52,41 @@
    private String floorNum;
    private String unitNum;
    private String roomNum;
    private String nong;
    /**
     * 门
     */
    private String men;
    /**
     * 室
     */
    private String shi;
    public String getNong() {
        return nong;
    }
    public void setNong(String nong) {
        this.nong = nong;
    }
    public String getMen() {
        return men;
    }
    public void setMen(String men) {
        this.men = men;
    }
    public String getShi() {
        return shi;
    }
    public void setShi(String shi) {
        this.shi = shi;
    }
    public String getFloorNum() {
        return floorNum;
java110-bean/src/main/java/com/java110/dto/importData/ImportOwnerRoomDto.java
@@ -15,6 +15,7 @@
    private String roomSubType; // 房屋类型
    private String section;
    private String builtUpArea;
    private String remark;
    private String roomArea;
    private String roomRent;
    private String ownerName;
@@ -54,6 +55,14 @@
    private String monthlyUnitPrice;
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public String getPropertyFeeMonth() {
        return propertyFeeMonth;
    }
java110-bean/src/main/java/com/java110/dto/meter/MeterWaterDto.java
@@ -1,6 +1,7 @@
package com.java110.dto.meter;
import com.java110.dto.PageDto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@@ -13,6 +14,7 @@
 * @Version 1.0
 * add by wuxw 2019/4/24
 **/
@Data
public class MeterWaterDto extends PageDto implements Serializable {
    public static final String METER_TYPE_ROOM = "1010";
@@ -58,288 +60,27 @@
    private String amountDifference; // 比较金额差额
    private String autoDeduction; // 自动扣款
    private String remark2; // 备注2
    private String roadName;    // 道路名
    private String floorNum;    // 楼层
    private String doorNum;     // 门号
    private String roomNum;     // 房间号
    private String roadName;
    public String getRoadName() {
        return roadName;
    }
    public void setRoadName(String roadName) {
        this.roadName = roadName;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public String getCurReadingTime() {
        return curReadingTime;
    }
    public void setCurReadingTime(String curReadingTime) {
        this.curReadingTime = curReadingTime;
    }
    public String getWaterId() {
        return waterId;
    }
    public void setWaterId(String waterId) {
        this.waterId = waterId;
    }
    public String getCurDegrees() {
        return curDegrees;
    }
    public void setCurDegrees(String curDegrees) {
        this.curDegrees = curDegrees;
    }
    public String getMeterType() {
        return meterType;
    }
    public void setMeterType(String meterType) {
        this.meterType = meterType;
    }
    public String getPreDegrees() {
        return preDegrees;
    }
    public void setPreDegrees(String preDegrees) {
        this.preDegrees = preDegrees;
    }
    public String getObjId() {
        return objId;
    }
    public void setObjId(String objId) {
        this.objId = objId;
    }
    public String getPreReadingTime() {
        return preReadingTime;
    }
    public void setPreReadingTime(String preReadingTime) {
        this.preReadingTime = preReadingTime;
    }
    public String getCommunityId() {
        return communityId;
    }
    public void setCommunityId(String communityId) {
        this.communityId = communityId;
    }
    public String getObjType() {
        return objType;
    }
    public void setObjType(String objType) {
        this.objType = objType;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getStatusCd() {
        return statusCd;
    }
    public void setStatusCd(String statusCd) {
        this.statusCd = statusCd;
    }
    public String getFeeId() {
        return feeId;
    }
    public void setFeeId(String feeId) {
        this.feeId = feeId;
    }
    public String getObjName() {
        return objName;
    }
    public void setObjName(String objName) {
        this.objName = objName;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public String getMeterTypeName() {
        return meterTypeName;
    }
    public void setMeterTypeName(String meterTypeName) {
        this.meterTypeName = meterTypeName;
    }
    public String getBatchId() {
        return batchId;
    }
    public void setBatchId(String batchId) {
        this.batchId = batchId;
    }
    // 新增字段的getter/setter方法
    public String getPowerSupplyBureau() {
        return powerSupplyBureau;
    }
    public void setPowerSupplyBureau(String powerSupplyBureau) {
        this.powerSupplyBureau = powerSupplyBureau;
    }
    public String getHouseholdName() {
        return householdName;
    }
    public void setHouseholdName(String householdName) {
        this.householdName = householdName;
    }
    public String getHouseholdNumber() {
        return householdNumber;
    }
    public void setHouseholdNumber(String householdNumber) {
        this.householdNumber = householdNumber;
    }
    public String getElectricMeterId() {
        return electricMeterId;
    }
    public void setElectricMeterId(String electricMeterId) {
        this.electricMeterId = electricMeterId;
    }
    public String getHandler() {
        return handler;
    }
    public void setHandler(String handler) {
        this.handler = handler;
    }
    public String getIsTransferred() {
        return isTransferred;
    }
    public void setIsTransferred(String isTransferred) {
        this.isTransferred = isTransferred;
    }
    public String getCompanyNameAfterTransfer() {
        return companyNameAfterTransfer;
    }
    public void setCompanyNameAfterTransfer(String companyNameAfterTransfer) {
        this.companyNameAfterTransfer = companyNameAfterTransfer;
    }
    public String getTransferDate() {
        return transferDate;
    }
    public void setTransferDate(String transferDate) {
        this.transferDate = transferDate;
    }
    public String getCorrespondingHouseholdCount() {
        return correspondingHouseholdCount;
    }
    public void setCorrespondingHouseholdCount(String correspondingHouseholdCount) {
        this.correspondingHouseholdCount = correspondingHouseholdCount;
    }
    public String getLastPaymentDate() {
        return lastPaymentDate;
    }
    public void setLastPaymentDate(String lastPaymentDate) {
        this.lastPaymentDate = lastPaymentDate;
    }
    public String getReadingType() {
        return readingType;
    }
    public void setReadingType(String readingType) {
        this.readingType = readingType;
    }
    public String getMultiplyingFactor() {
        return multiplyingFactor;
    }
    public void setMultiplyingFactor(String multiplyingFactor) {
        this.multiplyingFactor = multiplyingFactor;
    }
    public String getUnitPrice() {
        return unitPrice;
    }
    public void setUnitPrice(String unitPrice) {
        this.unitPrice = unitPrice;
    }
    public String getInvoiceAmount() {
        return invoiceAmount;
    }
    public void setInvoiceAmount(String invoiceAmount) {
        this.invoiceAmount = invoiceAmount;
    }
    public String getAmountDifference() {
        return amountDifference;
    }
    public void setAmountDifference(String amountDifference) {
        this.amountDifference = amountDifference;
    }
    public String getAutoDeduction() {
        return autoDeduction;
    }
    public void setAutoDeduction(String autoDeduction) {
        this.autoDeduction = autoDeduction;
    }
    public String getRemark2() {
        return remark2;
    }
    private String address; // 地址
    private String writeTime; // 写入时间
    private String writer; // 录入人
    private String checkApplyCompanyName; // 核查申请公司名称
    private String checkApplyDeptProject; // 核查申请部门/项目
    private String waterFeePayer; // 水费缴纳方
    private String accountNumber; // 账号
    private String meterReadBookNo; // 抄表本号
    private String waterConsumption; // 用水量
    private String sewageTreatmentWater; // 污水处理量
    private String collectionStandard; // 征收标准
    private String arrearsUnpaid; // 欠费未缴
    private String latePaymentFine; // 滞纳金
    private String latePaymentSurcharge; // 逾期违约金
    private String feePaymentStatus; // 缴费状态
    private String carryOverBalance; // 结转余额
    private String totalPayableAmount; // 应付总金额
    public void setRemark2(String remark2) {
        this.remark2 = remark2;
    }
}
java110-bean/src/main/java/com/java110/dto/system/ComponentValidateResult.java
@@ -38,6 +38,16 @@
    private String importFileName;
    private String sheetName;
    public String getSheetName() {
        return sheetName;
    }
    public void setSheetName(String sheetName) {
        this.sheetName = sheetName;
    }
    public String getImportFileName() {
        return importFileName;
    }
java110-bean/src/main/java/com/java110/po/contract/ContractPo.java
@@ -1,8 +1,12 @@
package com.java110.po.contract;
import java.io.Serializable;
import java.util.List;
import com.java110.dto.community.CommunityAttrDto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Data
public class ContractPo implements Serializable {
    private String aLink;
@@ -42,6 +46,179 @@
    private String communityId;
    private String communityArea;
    private String qrCode;
    private String storeName;
    private List<CommunityAttrDto> communityAttrDtos;
    private Date createTime;
    private String projectAddressProvince;
    private String projectAddressCity;
    private String projectAddressDistrict;
    private String projectAddressTown;
    private String projectAddressRoad;
    private String houseCompletionDate;
    private String projectNature;
    private String projectType;
    private String projectLandArea;
    private String totalConstructionArea;
    private String chargeableTotalArea;
    private String chargeableAreaMultilayer;
    private String chargeableAreaHighRise1;
    private String chargeableAreaHighRiseUp;
    private String chargeableAreaShop;
    private String chargeableAreaVilla;
    private String chargeableAreaOffice;
    private String chargeableAreaCommercialHouse;
    private String greenArea;
    private String areaDetails;
    private String propertyManagementAddress;
    private String propertyManagerName;
    private String propertyManagerPhone;
    private String dayRepairPhone;
    private String nightRepairPhone;
    private String projectManager;
    private String hasManagerCertificate;
    private String certificateName;
    private String managerCertificateNo;
    private String managerPhone;
    private String neighborhoodCommitteeName;
    private String neighborhoodCommitteeAddress;
    private String neighborhoodSecretary;
    private String neighborhoodOfficePhone;
    private String secretaryPhone;
    private String ownersCommitteeAddress;
    private String ownersCommitteeChairman;
    private String chairmanPhone;
    private String fireHydrantCount;
    private String fireChannelCount;
    private String waterTankCount;
    private String reservoirCount;
    private String totalMotorVehicleSpaces;
    private String groundMotorVehicleSpaces;
    private String undergroundMotorVehicleSpaces;
    private String newEnergyChargingPiles;
    private String nonMotorVehicleChargingPoints;
    private String groundNonMotorVehicleArea;
    private String undergroundNonMotorVehicleArea;
    private String clubhouseArea;
    private String hasDecorationRubbishPoint;
    private String securityEntranceCount;
    private String elevatorCount;
    private String elevatorType;
    private String elevatorInstallDate;
    private String elevatorServiceLife;
    private String elevatorBrand1;
    private String elevatorBrand2;
    private String monitorCount;
    private String monitorMaintenanceCompany;
    private String barrierGateCount;
    private String barrierGateBrand;
    private String barrierSupplierContact;
    private String barrierSupplierPhone;
    private String waterPumpCount;
    private String groundParkingSpaces;
    private String undergroundParkingSpaces;
    private String groundNonMechanicalFee;
    private String garageNonMechanicalFee;
    private String temporaryHourlyFee;
    private String temporaryDailyFee;
    private String temporaryPerTimeFee;
    private String totalBuildingCount;
    private String buildingUnitCount;
    private String highRiseBuildingCount;
    private String multilayerVillaBuildingCount;
    private String residentialHouseholdCount;
    private String shopHouseholdCount;
    private String publicArea;
    private String propertyRoomArea;
    private List<ContractFilePo> contractFilePo;
    public String getaLink() {
java110-bean/src/main/java/com/java110/po/importFee/MaintenancePayment.java
@@ -192,6 +192,8 @@
    @Column(name = "quality_guarantee_period2", length = 50)
    private String qualityGuaranteePeriod2;
    private String managementFeeRatio;
    /**
     * 质保金占比
     */
@@ -331,7 +333,54 @@
    private String remarks;             // 备注
    private String acceptanceDate;        // 验收日期
    private String auditDate;           // 审计情况:年/月
    private String dyhj;                //打印合计
    private String advancedPayment;
    private String payableAmountD;
    /**
     * 到账合计金额 dzhj
     */
    private String dzhj;
    /**
     * 维修基金到账率 wxjjdzl
     */
    private String wxjjdzl;
    /**
     * 维修基金申请金额 wxjjsqje
     */
    private String wxjjsqje;
    /**
     * 管理费占比 glfzb
     */
    private String glfzb;
    /**
     * 应付金额A yfjeA
     */
    private String yfjeA;
    /**
     * 第五次计划付款合计 nfhj
     */
    private String nfhj;
    /**
     * 实际付款合计 sfhj
     */
    private String sfhj;
    /**
     * 未付合计 wfhj
     */
    private String wfhj;
    /**
     * 垫付金额 dfje
     */
    private String dfje;
}
java110-db/src/main/resources/mapper/center/MaintenancePaymentDAOImplMapper.xml
@@ -21,7 +21,7 @@
        </if>
    </delete>
    <!-- 保存费用导入明细信息 add by wuxw 2018-07-03 -->
    <!-- 保存费用导入明细信息 -->
    <insert id="saveImportFeeDetailInfo" parameterType="Map">
        insert into maintenance_payment(
        auxiliary_column, flow_number, serial_number, project_code, project_name,
@@ -37,7 +37,9 @@
        withdrawal_encountered_problem, shortage_or_arrears, road_name, lane,
        `door`, room, door_room_number, owner_address, start_date, end_date,
        payee_name, id_card_number, bank_name, bank_account, remarks, acceptance_date, audit_date,
        id, payment_target,payable_amount_d,advanced_payment, specific_announcement_status
        id, payment_target, payable_amount_d, advanced_payment, specific_announcement_status,
        management_fee_ratio, first_planned_payment_amount, planned_payment_date, category,
        reimburser, actual_payment_amount, actual_payment_date
        ) values (
        #{auxiliaryColumn}, #{flowNumber}, #{serialNumber}, #{projectCode}, #{projectName},
        <if test="year == null">null,</if>
@@ -73,71 +75,127 @@
        <if test="shortageOrArrears != null">#{shortageOrArrears},</if>
        #{roadName}, #{lane}, #{door}, #{room}, #{doorRoomNumber}, #{ownerAddress}, #{startDate}, #{endDate},
        #{payeeName}, #{idCardNumber}, #{bankName}, #{bankAccount}, #{remarks}, #{acceptanceDate}, #{auditDate},
        #{id}, #{paymentTarget},#{payableAmountD}, #{advancedPayment}, #{specificAnnouncementStatus}
        #{id}, #{paymentTarget}, #{payableAmountD}, #{advancedPayment}, #{specificAnnouncementStatus},
        <if test="managementFeeRatio == null">0,</if>
        <if test="managementFeeRatio != null">#{managementFeeRatio},</if>
        <if test="firstPlannedPaymentAmount == null">0,</if>
        <if test="firstPlannedPaymentAmount != null">#{firstPlannedPaymentAmount},</if>
        #{plannedPaymentDate}, #{category}, #{reimburser},
        <if test="actualPaymentAmount == null">0,</if>
        <if test="actualPaymentAmount != null">#{actualPaymentAmount},</if>
        #{actualPaymentDate}
        )
    </insert>
    <!-- 查询费用导入明细信息 add by wuxw 2018-07-03 -->
    <!-- 查询费用导入明细信息 -->
    <select id="getImportFeeDetailInfo" parameterType="Map" resultType="Map">
        select
        t.auxiliary_column,t.auxiliary_column auxiliaryColumn,
        t.flow_number,t.flow_number flowNumber,
        t.serial_number,t.serial_number serialNumber,
        t.project_code,t.project_code projectCode,
        t.project_name,t.project_name projectName,
        t.auxiliary_column, t.auxiliary_column auxiliaryColumn,
        t.flow_number, t.flow_number flowNumber,
        t.serial_number, t.serial_number serialNumber,
        t.project_code, t.project_code projectCode,
        t.project_name, t.project_name projectName,
        t.`year`,
        t.`month`,
        t.`day`,
        t.`date`,
        t.project_content,t.project_content projectContent,
        t.management_office_amount,t.management_office_amount managementOfficeAmount,
        t.management_office_seal,t.management_office_seal managementOfficeSeal,
        t.owners_committee_amount,t.owners_committee_amount ownersCommitteeAmount,
        t.audit_amount,t.audit_amount auditAmount,
        t.owners_committee_seal,t.owners_committee_seal ownersCommitteeSeal,
        t.report_department,t.report_department reportDepartment,
        t.fund_type_level1,t.fund_type_level1 fundTypeLevel1,
        t.fund_type_level2,t.fund_type_level2 fundTypeLevel2,
        t.building_or_all,t.building_or_all buildingOrAll,
        t.maintenance_type,t.maintenance_type maintenanceType,
        t.quality_guarantee_period1,t.quality_guarantee_period1 qualityGuaranteePeriod1,
        t.public_income_announcement,t.public_income_announcement publicIncomeAnnouncement,
        t.owners_committee_convention,t.owners_committee_convention ownersCommitteeConvention,
        t.withdrawal_problem,t.withdrawal_problem withdrawalProblem,
        t.problem_difficulty,t.problem_difficulty problemDifficulty,
        t.available_withdrawal_date,t.available_withdrawal_date availableWithdrawalDate,
        t.quality_guarantee_period2,t.quality_guarantee_period2 qualityGuaranteePeriod2,
        t.quality_guarantee_ratio,t.quality_guarantee_ratio qualityGuaranteeRatio,
        t.quality_guarantee_amount,t.quality_guarantee_amount qualityGuaranteeAmount,
        t.received_quality_guarantee,t.received_quality_guarantee receivedQualityGuarantee,
        t.planned_announcement_start,t.planned_announcement_start plannedAnnouncementStart,
        t.planned_announcement_end,t.planned_announcement_end plannedAnnouncementEnd,
        t.published_announcement_start,t.published_announcement_start publishedAnnouncementStart,
        t.published_announcement_end,t.published_announcement_end publishedAnnouncementEnd,
        t.project_content, t.project_content projectContent,
        t.management_office_amount, t.management_office_amount managementOfficeAmount,
        t.management_office_seal, t.management_office_seal managementOfficeSeal,
        t.owners_committee_amount, t.owners_committee_amount ownersCommitteeAmount,
        t.audit_amount, t.audit_amount auditAmount,
        t.owners_committee_seal, t.owners_committee_seal ownersCommitteeSeal,
        t.report_department, t.report_department reportDepartment,
        t.fund_type_level1, t.fund_type_level1 fundTypeLevel1,
        t.fund_type_level2, t.fund_type_level2 fundTypeLevel2,
        t.building_or_all, t.building_or_all buildingOrAll,
        t.maintenance_type, t.maintenance_type maintenanceType,
        t.quality_guarantee_period1, t.quality_guarantee_period1 qualityGuaranteePeriod1,
        t.public_income_announcement, t.public_income_announcement publicIncomeAnnouncement,
        t.owners_committee_convention, t.owners_committee_convention ownersCommitteeConvention,
        t.withdrawal_problem, t.withdrawal_problem withdrawalProblem,
        t.problem_difficulty, t.problem_difficulty problemDifficulty,
        t.available_withdrawal_date, t.available_withdrawal_date availableWithdrawalDate,
        t.quality_guarantee_period2, t.quality_guarantee_period2 qualityGuaranteePeriod2,
        t.quality_guarantee_ratio, t.quality_guarantee_ratio qualityGuaranteeRatio,
        t.quality_guarantee_amount, t.quality_guarantee_amount qualityGuaranteeAmount,
        t.received_quality_guarantee, t.received_quality_guarantee receivedQualityGuarantee,
        t.planned_announcement_start, t.planned_announcement_start plannedAnnouncementStart,
        t.planned_announcement_end, t.planned_announcement_end plannedAnnouncementEnd,
        t.published_announcement_start, t.published_announcement_start publishedAnnouncementStart,
        t.published_announcement_end, t.published_announcement_end publishedAnnouncementEnd,
        t.quota,
        t.owners_committee_resolution,t.owners_committee_resolution ownersCommitteeResolution,
        t.owners_committee_consultation,t.owners_committee_consultation ownersCommitteeConsultation,
        t.withdrawal_encountered_problem,t.withdrawal_encountered_problem withdrawalEncounteredProblem,
        t.shortage_or_arrears,t.shortage_or_arrears shortageOrArrears,
        t.road_name,t.road_name roadName,
        t.owners_committee_resolution, t.owners_committee_resolution ownersCommitteeResolution,
        t.owners_committee_consultation, t.owners_committee_consultation ownersCommitteeConsultation,
        t.withdrawal_encountered_problem, t.withdrawal_encountered_problem withdrawalEncounteredProblem,
        t.shortage_or_arrears, t.shortage_or_arrears shortageOrArrears,
        t.road_name, t.road_name roadName,
        t.lane,
        t.`door`,
        t.room,
        t.door_room_number,t.door_room_number doorRoomNumber,
        t.owner_address,t.owner_address ownerAddress,
        t.start_date,t.start_date startDate,
        t.end_date,t.end_date endDate,
        t.payee_name,t.payee_name payeeName,
        t.id_card_number,t.id_card_number idCardNumber,
        t.bank_name,t.bank_name bankName,
        t.bank_account,t.bank_account bankAccount,
        t.door_room_number, t.door_room_number doorRoomNumber,
        t.owner_address, t.owner_address ownerAddress,
        t.start_date, t.start_date startDate,
        t.end_date, t.end_date endDate,
        t.payee_name, t.payee_name payeeName,
        t.id_card_number, t.id_card_number idCardNumber,
        t.bank_name, t.bank_name bankName,
        t.bank_account, t.bank_account bankAccount,
        t.remarks,
        t.acceptance_date,t.acceptance_date acceptanceDate,
        t.audit_date,t.audit_date auditDate,
        t.id
        t.acceptance_date, t.acceptance_date acceptanceDate,
        t.audit_date, t.audit_date auditDate,
        t.id,
        t.payment_target, t.payment_target paymentTarget,
        t.specific_announcement_status, t.specific_announcement_status specificAnnouncementStatus,
        t.management_fee_ratio, t.management_fee_ratio managementFeeRatio,
        t.first_planned_payment_amount, t.first_planned_payment_amount firstPlannedPaymentAmount,
        t.planned_payment_date, t.planned_payment_date plannedPaymentDate,
        t.category, t.category category,
        t.reimburser, t.reimburser reimburser,
        t.actual_payment_amount, t.actual_payment_amount actualPaymentAmount,
        t.actual_payment_date, t.actual_payment_date actualPaymentDate,
        t.payable_amount_d, t.payable_amount_d payableAmountD,
        t.advanced_payment, t.advanced_payment advancedPayment,
        IFNULL(SUM(sum_print_amount), 0) AS dyhj,
        IFNULL(SUM(sum_arrival_amount), 0) AS dzhj,
        CASE WHEN IFNULL(SUM(sum_arrival_amount), 0) &lt;> 0 THEN IFNULL(SUM(sum_arrival_amount), 0) / t.owners_committee_amount * 100 ELSE 0 END AS wxjjdzl,
        CASE WHEN t.fund_type_level1 &lt;> '维修基金' THEN 0 ELSE t.owners_committee_amount - IFNULL(SUM(sum_arrival_amount), 0) END AS wxjjsqje,
        CASE WHEN t.owners_committee_amount &lt;> 0 THEN t.management_fee_ratio / t.owners_committee_amount * 100 ELSE 0 END AS glfzb,
        t.owners_committee_amount - t.management_fee_ratio AS yfjeA,
        IFNULL(SUM(sum_fifth_planned), 0) AS nfhj,
        IFNULL(SUM(sum_actual_payment), 0) AS sfhj,
        (t.owners_committee_amount - t.management_fee_ratio) - IFNULL(SUM(sum_actual_payment), 0) AS wfhj,
        CASE
        WHEN t.fund_type_level1 IN ('公共收益金','维修基金') THEN
        CASE
        WHEN IFNULL(SUM(sum_arrival_amount),0) &lt;> 0 THEN
        CASE WHEN (t.owners_committee_amount - t.management_fee_ratio - IFNULL(SUM(sum_actual_payment),0)) > IFNULL(SUM(sum_arrival_amount),0)
        THEN (t.owners_committee_amount - t.management_fee_ratio - IFNULL(SUM(sum_actual_payment),0)) - IFNULL(SUM(sum_arrival_amount),0)
        ELSE 0 END
        ELSE
        CASE WHEN t.specific_announcement_status LIKE '%公布%' AND t.specific_announcement_status NOT LIKE '%拟%'
        THEN 0
        ELSE (t.owners_committee_amount - t.management_fee_ratio - IFNULL(SUM(sum_actual_payment),0)) END
        END
        ELSE 0 END AS dfje
        from maintenance_payment t
        where 1 =1
        -- 左连接 打印记录表,保证主表数据不丢失
        left join (
        select mp_id,
        SUM(print_amount) as sum_print_amount,
        SUM(arrival_amount) as sum_arrival_amount
        from mp_payment_record
        group by mp_id
        ) m on t.id = m.mp_id
        left join (
        select mp_id,
        SUM(fifth_planned_payment_amount) as sum_fifth_planned,
        SUM(actual_payment_amount) as sum_actual_payment
        from mp_fifth_payment_record
        group by mp_id
        ) f on t.id = f.mp_id
        where 1 = 1
        -- 按主表所有非聚合字段分组
        <if test="auxiliaryColumn !=null and auxiliaryColumn != ''">
            and t.auxiliary_column = #{auxiliaryColumn}
        </if>
@@ -189,15 +247,26 @@
        <if test="id !=null">
            and t.id = #{id}
        </if>
        <if test="paymentTarget !=null and paymentTarget != ''">
            and t.payment_target = #{paymentTarget}
        </if>
        <if test="specificAnnouncementStatus !=null and specificAnnouncementStatus != ''">
            and t.specific_announcement_status = #{specificAnnouncementStatus}
        </if>
        <if test="category !=null and category != ''">
            and t.category = #{category}
        </if>
        <if test="reimburser !=null and reimburser != ''">
            and t.reimburser like concat('%', #{reimburser}, '%')
        </if>
        group by t.id
        order by t.id desc
        <if test="page != -1 and page != null ">
            limit #{page}, #{row}
        </if>
    </select>
    <!-- 修改费用导入明细信息 add by wuxw 2018-07-03 -->
    <!-- 修改费用导入明细信息 -->
    <update id="updateImportFeeDetailInfo" parameterType="Map">
        update maintenance_payment t
        <!-- 注意:id作为主键,通常不建议更新,这里保留但标注,建议根据业务决定是否删除 -->
@@ -283,7 +352,6 @@
        <if test="auditDate !=null and auditDate != ''">
            , t.audit_date = #{auditDate}
        </if>
        <!-- 以下为补充的缺失字段 -->
        <if test="maintenanceType !=null and maintenanceType != ''">
            , t.maintenance_type = #{maintenanceType}
        </if>
@@ -341,7 +409,7 @@
        <if test="withdrawalEncounteredProblem !=null and withdrawalEncounteredProblem != ''">
            , t.withdrawal_encountered_problem = #{withdrawalEncounteredProblem}
        </if>
        <if test="shortageOrArrears !=null and shortageOrArrears != ''">
        <if test="shortageOrArrears !=null">
            , t.shortage_or_arrears = #{shortageOrArrears}
        </if>
        <if test="roadName !=null and roadName != ''">
@@ -368,6 +436,39 @@
        <if test="endDate !=null">
            , t.end_date = #{endDate}
        </if>
        <if test="paymentTarget !=null and paymentTarget != ''">
            , t.payment_target = #{paymentTarget}
        </if>
        <if test="specificAnnouncementStatus !=null and specificAnnouncementStatus != ''">
            , t.specific_announcement_status = #{specificAnnouncementStatus}
        </if>
        <if test="managementFeeRatio !=null">
            , t.management_fee_ratio = #{managementFeeRatio}
        </if>
        <if test="firstPlannedPaymentAmount !=null">
            , t.first_planned_payment_amount = #{firstPlannedPaymentAmount}
        </if>
        <if test="plannedPaymentDate !=null">
            , t.planned_payment_date = #{plannedPaymentDate}
        </if>
        <if test="category !=null and category != ''">
            , t.category = #{category}
        </if>
        <if test="reimburser !=null and reimburser != ''">
            , t.reimburser = #{reimburser}
        </if>
        <if test="actualPaymentAmount !=null">
            , t.actual_payment_amount = #{actualPaymentAmount}
        </if>
        <if test="actualPaymentDate !=null">
            , t.actual_payment_date = #{actualPaymentDate}
        </if>
        <if test="payableAmountD !=null">
            , t.payable_amount_d = #{payableAmountD}
        </if>
        <if test="advancedPayment !=null">
            , t.advanced_payment = #{advancedPayment}
        </if>
        where 1=1
        <if test="id !=null">
@@ -375,11 +476,11 @@
        </if>
    </update>
    <!-- 查询费用导入明细数量 add by wuxw 2018-07-03 -->
    <!-- 查询费用导入明细数量 -->
    <select id="queryImportFeeDetailsCount" parameterType="Map" resultType="Map">
        select count(1) count
        from maintenance_payment t
        where 1 =1
        where 1 = 1
        <if test="auxiliaryColumn !=null and auxiliaryColumn != ''">
            and t.auxiliary_column = #{auxiliaryColumn}
        </if>
@@ -431,7 +532,18 @@
        <if test="id !=null">
            and t.id = #{id}
        </if>
        <if test="paymentTarget !=null and paymentTarget != ''">
            and t.payment_target = #{paymentTarget}
        </if>
        <if test="specificAnnouncementStatus !=null and specificAnnouncementStatus != ''">
            and t.specific_announcement_status = #{specificAnnouncementStatus}
        </if>
        <if test="category !=null and category != ''">
            and t.category = #{category}
        </if>
        <if test="reimburser !=null and reimburser != ''">
            and t.reimburser like concat('%', #{reimburser}, '%')
        </if>
    </select>
    <!-- 批量插入费用 -->
@@ -449,7 +561,10 @@
        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,
        payee_name, id_card_number, bank_name, bank_account, remarks, acceptance_date, audit_date
        payee_name, id_card_number, bank_name, bank_account, remarks, acceptance_date, audit_date,
        id, payment_target, payable_amount_d, advanced_payment, specific_announcement_status,
        management_fee_ratio, first_planned_payment_amount, planned_payment_date, category,
        reimburser, actual_payment_amount, actual_payment_date
        ) values
        <foreach collection="importFeeDetailPos" item="item" separator=",">
            ( #{item.auxiliaryColumn}, #{item.flowNumber}, #{item.serialNumber}, #{item.projectCode}, #{item.projectName},
@@ -474,7 +589,13 @@
            #{item.withdrawalEncounteredProblem},
            <if test="item.shortageOrArrears == null">0</if><if test="item.shortageOrArrears != null">#{item.shortageOrArrears}</if>,
            #{item.roadName}, #{item.lane}, #{item.door}, #{item.room}, #{item.doorRoomNumber}, #{item.ownerAddress}, #{item.startDate}, #{item.endDate},
            #{item.payeeName}, #{item.idCardNumber}, #{item.bankName}, #{item.bankAccount}, #{item.remarks}, #{item.acceptanceDate}, #{item.auditDate})
            #{item.payeeName}, #{item.idCardNumber}, #{item.bankName}, #{item.bankAccount}, #{item.remarks}, #{item.acceptanceDate}, #{item.auditDate},
            #{item.id}, #{item.paymentTarget}, #{item.payableAmountD}, #{item.advancedPayment}, #{item.specificAnnouncementStatus},
            <if test="item.managementFeeRatio == null">0</if><if test="item.managementFeeRatio != null">#{item.managementFeeRatio}</if>,
            <if test="item.firstPlannedPaymentAmount == null">0</if><if test="item.firstPlannedPaymentAmount != null">#{item.firstPlannedPaymentAmount}</if>,
            #{item.plannedPaymentDate}, #{item.category}, #{item.reimburser},
            <if test="item.actualPaymentAmount == null">0</if><if test="item.actualPaymentAmount != null">#{item.actualPaymentAmount}</if>,
            #{item.actualPaymentDate})
        </foreach>
    </insert>
java110-db/src/main/resources/mapper/fee/MeterWaterServiceDaoImplMapper.xml
@@ -7,18 +7,18 @@
    <!-- 保存水电费信息 add by wuxw 2018-07-03 -->
    <insert id="saveBusinessMeterWaterInfo" parameterType="Map">
        insert into business_meter_water(
        remark,cur_reading_time,water_id,cur_degrees,operate,meter_type,pre_degrees,obj_id,pre_reading_time,
        b_id,community_id,obj_type,fee_id,obj_name,price,
        power_supply_bureau,household_name,household_number,electric_meter_id,`handler`,is_transferred,
        company_name_after_transfer,transfer_date,corresponding_household_count,last_payment_date,reading_type,
        multiplying_factor,unit_price,invoice_amount,amount_difference,auto_deduction,remark2
            remark,cur_reading_time,water_id,cur_degrees,operate,meter_type,pre_degrees,obj_id,pre_reading_time,
            b_id,community_id,obj_type,fee_id,obj_name,price,
            power_supply_bureau,household_name,household_number,electric_meter_id,`handler`,is_transferred,
            company_name_after_transfer,transfer_date,corresponding_household_count,last_payment_date,reading_type,
            multiplying_factor,unit_price,invoice_amount,amount_difference,auto_deduction,remark2
        ) values (
        #{remark},#{curReadingTime},#{waterId},#{curDegrees},#{operate},#{meterType},#{preDegrees},#{objId},
        #{preReadingTime},#{bId},#{communityId},#{objType},#{feeId},#{objName},#{price},
        #{powerSupplyBureau},#{householdName},#{householdNumber},#{electricMeterId},#{handler},#{isTransferred},
        #{companyNameAfterTransfer},#{transferDate},#{correspondingHouseholdCount},#{lastPaymentDate},#{readingType},
        #{multiplyingFactor},#{unitPrice},#{invoiceAmount},#{amountDifference},#{autoDeduction},#{remark2}
        )
                     #{remark},#{curReadingTime},#{waterId},#{curDegrees},#{operate},#{meterType},#{preDegrees},#{objId},
                     #{preReadingTime},#{bId},#{communityId},#{objType},#{feeId},#{objName},#{price},
                     #{powerSupplyBureau},#{householdName},#{householdNumber},#{electricMeterId},#{handler},#{isTransferred},
                     #{companyNameAfterTransfer},#{transferDate},#{correspondingHouseholdCount},#{lastPaymentDate},#{readingType},
                     #{multiplyingFactor},#{unitPrice},#{invoiceAmount},#{amountDifference},#{autoDeduction},#{remark2}
                 )
    </insert>
@@ -142,7 +142,8 @@
        multiplying_factor,unit_price,invoice_amount,amount_difference,auto_deduction,remark2,
        address,write_time,writer,check_apply_company_name,check_apply_dept_project,water_fee_payer,
        account_number,meter_read_book_no,water_consumption,sewage_treatment_water,collection_standard,
        arrears_unpaid,late_payment_fine,late_payment_surcharge,fee_payment_status,carry_over_balance,total_payable_amount
        arrears_unpaid,late_payment_fine,late_payment_surcharge,fee_payment_status,carry_over_balance,total_payable_amount,
        road_name,floor_num,door_num,room_num
        ) select
        t.water_id,t.b_id,t.meter_type,t.obj_type,t.obj_id,t.pre_degrees,t.cur_degrees,t.pre_reading_time,t.cur_reading_time,
        t.community_id,'0',t.remark,t.fee_id,t.obj_name,t.price,
@@ -151,7 +152,11 @@
        t.multiplying_factor,t.unit_price,t.invoice_amount,t.amount_difference,t.auto_deduction,t.remark2,
        #{address},#{writeTime},#{writer},#{checkApplyCompanyName},#{checkApplyDeptProject},#{waterFeePayer},
        #{accountNumber},#{meterReadBookNo},#{waterConsumption},#{sewageTreatmentWater},#{collectionStandard},
        #{arrearsUnpaid},#{latePaymentFine},#{latePaymentSurcharge},#{feePaymentStatus},#{carryOverBalance},#{totalPayableAmount}
        #{arrearsUnpaid},#{latePaymentFine},#{latePaymentSurcharge},#{feePaymentStatus},#{carryOverBalance},#{totalPayableAmount},
        SUBSTRING_INDEX(t.obj_name,'-',1),
        SUBSTRING_INDEX(SUBSTRING_INDEX(t.obj_name,'-',2),'-',-1),
        SUBSTRING_INDEX(SUBSTRING_INDEX(t.obj_name,'-',3),'-',-1),
        SUBSTRING_INDEX(t.obj_name,'-',-1)
        from business_meter_water t where 1=1
        <if test="remark !=null and remark != ''">
            and t.remark= #{remark}
@@ -258,8 +263,12 @@
        t.fee_payment_status feePaymentStatus,
        t.carry_over_balance carryOverBalance,
        t.total_payable_amount totalPayableAmount,
        t.road_name roadName,
        t.floor_num floorNum,
        t.door_num doorNum,
        t.room_num roomNum,
        mt.type_name meterTypeName,
        br.road_name roadName
        br.road_name roadNameOld
        from meter_water t
        left join meter_type mt on t.meter_type = mt.type_id and mt.status_cd = '0'
        left join pay_fee pf on t.fee_id = pf.fee_id and pf.status_cd = '0'
@@ -411,6 +420,18 @@
        <if test="totalPayableAmount !=null and totalPayableAmount != ''">
            and t.total_payable_amount= #{totalPayableAmount}
        </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="doorNum !=null and doorNum != ''">
            and t.door_num= #{doorNum}
        </if>
        <if test="roomNum !=null and roomNum != ''">
            and t.room_num= #{roomNum}
        </if>
        order by t.create_time desc,t.obj_name asc
        <if test="page != -1 and page != null ">
            limit #{page}, #{row}
@@ -423,151 +444,164 @@
        update meter_water t set
        t.status_cd = #{statusCd},
        <if test="newBId != null and newBId != ''">
            ,t.b_id = #{newBId}
            t.b_id = #{newBId},
        </if>
        <if test="waterId !=null and waterId != ''">
            ,t.water_id = #{waterId}
            t.water_id = #{waterId},
        </if>
        <if test="meterType !=null and meterType != ''">
            , t.meter_type= #{meterType}
            t.meter_type= #{meterType},
        </if>
        <if test="objType !=null and objType != ''">
            , t.obj_type= #{objType}
            t.obj_type= #{objType},
        </if>
        <if test="objId !=null and objId != ''">
            , t.obj_id= #{objId}
            t.obj_id= #{objId},
        </if>
        <if test="preDegrees !=null and preDegrees != ''">
            , t.pre_degrees= #{preDegrees}
            t.pre_degrees= #{preDegrees},
        </if>
        <if test="curDegrees !=null and curDegrees != ''">
            , t.cur_degrees= #{curDegrees}
            t.cur_degrees= #{curDegrees},
        </if>
        <if test="preReadingTime !=null ">
            , t.pre_reading_time= #{preReadingTime}
            t.pre_reading_time= #{preReadingTime},
        </if>
        <if test="curReadingTime !=null ">
            , t.cur_reading_time= #{curReadingTime}
            t.cur_reading_time= #{curReadingTime},
        </if>
        <if test="communityId !=null and communityId != ''">
            , t.community_id= #{communityId}
            t.community_id= #{communityId},
        </if>
        <if test="remark !=null and remark != ''">
            , t.remark= #{remark}
            t.remark= #{remark},
        </if>
        <if test="feeId !=null and feeId != ''">
            , t.fee_id= #{feeId}
            t.fee_id= #{feeId},
        </if>
        <if test="objName !=null and objName != ''">
            , t.obj_name= #{objName}
            t.obj_name= #{objName},
        </if>
        <if test="price !=null and price != ''">
            , t.price= #{price}
            t.price= #{price},
        </if>
        <!-- 新增字段更新逻辑 -->
        <if test="powerSupplyBureau !=null and powerSupplyBureau != ''">
            , t.power_supply_bureau= #{powerSupplyBureau}
            t.power_supply_bureau= #{powerSupplyBureau},
        </if>
        <if test="householdName !=null and householdName != ''">
            , t.household_name= #{householdName}
            t.household_name= #{householdName},
        </if>
        <if test="householdNumber !=null and householdNumber != ''">
            , t.household_number= #{householdNumber}
            t.household_number= #{householdNumber},
        </if>
        <if test="electricMeterId !=null and electricMeterId != ''">
            , t.electric_meter_id= #{electricMeterId}
            t.electric_meter_id= #{electricMeterId},
        </if>
        <if test="handler !=null and handler != ''">
            , t.`handler`= #{handler}
            t.`handler`= #{handler},
        </if>
        <if test="isTransferred !=null and isTransferred != ''">
            , t.is_transferred= #{isTransferred}
            t.is_transferred= #{isTransferred},
        </if>
        <if test="companyNameAfterTransfer !=null and companyNameAfterTransfer != ''">
            , t.company_name_after_transfer= #{companyNameAfterTransfer}
            t.company_name_after_transfer= #{companyNameAfterTransfer},
        </if>
        <if test="transferDate !=null and transferDate != ''">
            , t.transfer_date= #{transferDate}
            t.transfer_date= #{transferDate},
        </if>
        <if test="correspondingHouseholdCount !=null and correspondingHouseholdCount != ''">
            , t.corresponding_household_count= #{correspondingHouseholdCount}
            t.corresponding_household_count= #{correspondingHouseholdCount},
        </if>
        <if test="lastPaymentDate !=null and lastPaymentDate != ''">
            , t.last_payment_date= #{lastPaymentDate}
            t.last_payment_date= #{lastPaymentDate},
        </if>
        <if test="readingType !=null and readingType != ''">
            , t.reading_type= #{readingType}
            t.reading_type= #{readingType},
        </if>
        <if test="multiplyingFactor !=null and multiplyingFactor != ''">
            , t.multiplying_factor= #{multiplyingFactor}
            t.multiplying_factor= #{multiplyingFactor},
        </if>
        <if test="unitPrice !=null and unitPrice != ''">
            , t.unit_price= #{unitPrice}
            t.unit_price= #{unitPrice},
        </if>
        <if test="invoiceAmount !=null and invoiceAmount != ''">
            , t.invoice_amount= #{invoiceAmount}
            t.invoice_amount= #{invoiceAmount},
        </if>
        <if test="amountDifference !=null and amountDifference != ''">
            , t.amount_difference= #{amountDifference}
            t.amount_difference= #{amountDifference},
        </if>
        <if test="autoDeduction !=null and autoDeduction != ''">
            , t.auto_deduction= #{autoDeduction}
            t.auto_deduction= #{autoDeduction},
        </if>
        <if test="remark2 !=null and remark2 != ''">
            , t.remark2= #{remark2}
            t.remark2= #{remark2},
        </if>
        <if test="address !=null and address != ''">
            , t.address= #{address}
            t.address= #{address},
        </if>
        <if test="writeTime !=null and writeTime != ''">
            , t.write_time= #{writeTime}
            t.write_time= #{writeTime},
        </if>
        <if test="writer !=null and writer != ''">
            , t.writer= #{writer}
            t.writer= #{writer},
        </if>
        <!-- 新增水费相关字段更新逻辑 -->
        <if test="checkApplyCompanyName !=null and checkApplyCompanyName != ''">
            , t.check_apply_company_name= #{checkApplyCompanyName}
            t.check_apply_company_name= #{checkApplyCompanyName},
        </if>
        <if test="checkApplyDeptProject !=null and checkApplyDeptProject != ''">
            , t.check_apply_dept_project= #{checkApplyDeptProject}
            t.check_apply_dept_project= #{checkApplyDeptProject},
        </if>
        <if test="waterFeePayer !=null and waterFeePayer != ''">
            , t.water_fee_payer= #{waterFeePayer}
            t.water_fee_payer= #{waterFeePayer},
        </if>
        <if test="accountNumber !=null and accountNumber != ''">
            , t.account_number= #{accountNumber}
            t.account_number= #{accountNumber},
        </if>
        <if test="meterReadBookNo !=null and meterReadBookNo != ''">
            , t.meter_read_book_no= #{meterReadBookNo}
            t.meter_read_book_no= #{meterReadBookNo},
        </if>
        <if test="waterConsumption !=null and waterConsumption != ''">
            , t.water_consumption= #{waterConsumption}
            t.water_consumption= #{waterConsumption},
        </if>
        <if test="sewageTreatmentWater !=null and sewageTreatmentWater != ''">
            , t.sewage_treatment_water= #{sewageTreatmentWater}
            t.sewage_treatment_water= #{sewageTreatmentWater},
        </if>
        <if test="collectionStandard !=null and collectionStandard != ''">
            , t.collection_standard= #{collectionStandard}
            t.collection_standard= #{collectionStandard},
        </if>
        <if test="arrearsUnpaid !=null and arrearsUnpaid != ''">
            , t.arrears_unpaid= #{arrearsUnpaid}
            t.arrears_unpaid= #{arrearsUnpaid},
        </if>
        <if test="latePaymentFine !=null and latePaymentFine != ''">
            , t.late_payment_fine= #{latePaymentFine}
            t.late_payment_fine= #{latePaymentFine},
        </if>
        <if test="latePaymentSurcharge !=null and latePaymentSurcharge != ''">
            , t.late_payment_surcharge= #{latePaymentSurcharge}
            t.late_payment_surcharge= #{latePaymentSurcharge},
        </if>
        <if test="feePaymentStatus !=null and feePaymentStatus != ''">
            , t.fee_payment_status= #{feePaymentStatus}
            t.fee_payment_status= #{feePaymentStatus},
        </if>
        <if test="carryOverBalance !=null and carryOverBalance != ''">
            , t.carry_over_balance= #{carryOverBalance}
            t.carry_over_balance= #{carryOverBalance},
        </if>
        <if test="totalPayableAmount !=null and totalPayableAmount != ''">
            , t.total_payable_amount= #{totalPayableAmount}
            t.total_payable_amount= #{totalPayableAmount},
        </if>
        <if test="roadName !=null and roadName != ''">
            t.road_name= #{roadName},
        </if>
        <if test="floorNum !=null and floorNum != ''">
            t.floor_num= #{floorNum},
        </if>
        <if test="doorNum !=null and doorNum != ''">
            t.door_num= #{doorNum},
        </if>
        <if test="roomNum !=null and roomNum != ''">
            t.room_num= #{roomNum},
        </if>
        1=1
        where 1=1
        <if test="waterId !=null and waterId != ''">
            and t.water_id= #{waterId}
@@ -726,6 +760,18 @@
        <if test="totalPayableAmount !=null and totalPayableAmount != ''">
            and t.total_payable_amount= #{totalPayableAmount}
        </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="doorNum !=null and doorNum != ''">
            and t.door_num= #{doorNum}
        </if>
        <if test="roomNum !=null and roomNum != ''">
            and t.room_num= #{roomNum}
        </if>
    </select>
@@ -739,7 +785,8 @@
        multiplying_factor,unit_price,invoice_amount,amount_difference,auto_deduction,remark2,
        address,write_time,writer,check_apply_company_name,check_apply_dept_project,water_fee_payer,
        account_number,meter_read_book_no,water_consumption,sewage_treatment_water,collection_standard,
        arrears_unpaid,late_payment_fine,late_payment_surcharge,fee_payment_status,carry_over_balance,total_payable_amount)
        arrears_unpaid,late_payment_fine,late_payment_surcharge,fee_payment_status,carry_over_balance,total_payable_amount,
        road_name,floor_num,door_num,room_num)
        VALUES
        <foreach collection="meterWaterPos" item="item" separator=",">
            (#{item.waterId},#{item.bId},#{item.meterType},#{item.objType},#{item.objId},#{item.preDegrees},#{item.curDegrees},
@@ -749,7 +796,8 @@
            #{item.multiplyingFactor},#{item.unitPrice},#{item.invoiceAmount},#{item.amountDifference},#{item.autoDeduction},#{item.remark2},
            #{item.address},#{item.writeTime},#{item.writer},#{item.checkApplyCompanyName},#{item.checkApplyDeptProject},#{item.waterFeePayer},
            #{item.accountNumber},#{item.meterReadBookNo},#{item.waterConsumption},#{item.sewageTreatmentWater},#{item.collectionStandard},
            #{item.arrearsUnpaid},#{item.latePaymentFine},#{item.latePaymentSurcharge},#{item.feePaymentStatus},#{item.carryOverBalance},#{item.totalPayableAmount})
            #{item.arrearsUnpaid},#{item.latePaymentFine},#{item.latePaymentSurcharge},#{item.feePaymentStatus},#{item.carryOverBalance},#{item.totalPayableAmount},
            #{item.roadName},#{item.floorNum},#{item.doorNum},#{item.roomNum})
        </foreach>
    </insert>
java110-db/src/main/resources/mapper/fee/MeterWaterV1ServiceDaoImplMapper.xml
@@ -5,36 +5,52 @@
    <!-- 保存水电抄表信息 add by wuxw 2018-07-03 -->
    <insert id="saveMeterWaterInfo" parameterType="Map">
        insert into meter_water(remark, obj_name, fee_id, cur_reading_time, water_id, cur_degrees, price, meter_type,
        pre_degrees, obj_id, pre_reading_time, community_id, obj_type, b_id,
        power_supply_bureau, household_name, household_number, electric_meter_id, handler,
        is_transferred, company_name_after_transfer, transfer_date, corresponding_household_count,
        last_payment_date, reading_type, multiplying_factor, unit_price, invoice_amount,
        amount_difference, auto_deduction, remark2, address, write_time, writer,
        check_apply_company_name, check_apply_dept_project, water_fee_payer, account_number,
        meter_read_book_no, water_consumption, sewage_treatment_water, collection_standard,
        arrears_unpaid, late_payment_fine, late_payment_surcharge, fee_payment_status,
        carry_over_balance, total_payable_amount)
        values (#{remark}, #{objName}, #{feeId}, #{curReadingTime}, #{waterId}, #{curDegrees}, #{price}, #{meterType},
        #{preDegrees}, #{objId}, #{preReadingTime}, #{communityId}, #{objType}, #{bId},
        #{powerSupplyBureau}, #{householdName}, #{householdNumber}, #{electricMeterId}, #{handler},
        #{isTransferred}, #{companyNameAfterTransfer}, #{transferDate}, #{correspondingHouseholdCount},
        #{lastPaymentDate}, #{readingType}, #{multiplyingFactor}, #{unitPrice}, #{invoiceAmount},
        #{amountDifference}, #{autoDeduction}, #{remark2}, #{address}, #{writeTime}, #{writer},
        #{checkApplyCompanyName}, #{checkApplyDeptProject}, #{waterFeePayer}, #{accountNumber},
        #{meterReadBookNo}, #{waterConsumption}, #{sewageTreatmentWater}, #{collectionStandard},
        #{arrearsUnpaid}, #{latePaymentFine}, #{latePaymentSurcharge}, #{feePaymentStatus},
        #{carryOverBalance}, #{totalPayableAmount})
        insert into meter_water(
            water_id, b_id, meter_type, obj_type, obj_id, pre_degrees, cur_degrees,
            pre_reading_time, cur_reading_time, community_id, create_time, status_cd,
            remark, fee_id, obj_name, price, power_supply_bureau, household_name,
            household_number, electric_meter_id, handler, is_transferred,
            company_name_after_transfer, transfer_date, corresponding_household_count,
            last_payment_date, reading_type, multiplying_factor, unit_price, invoice_amount,
            amount_difference, auto_deduction, remark2, address, write_time, writer,
            check_apply_company_name, check_apply_dept_project, water_fee_payer, account_number,
            meter_read_book_no, water_consumption, sewage_treatment_water, collection_standard,
            arrears_unpaid, late_payment_fine, late_payment_surcharge, fee_payment_status,
            carry_over_balance, total_payable_amount
        ) values (
                     #{waterId}, #{bId}, #{meterType}, #{objType}, #{objId}, #{preDegrees}, #{curDegrees},
                     #{preReadingTime}, #{curReadingTime}, #{communityId}, #{createTime}, #{statusCd},
                     #{remark}, #{feeId}, #{objName}, #{price}, #{powerSupplyBureau}, #{householdName},
                     #{householdNumber}, #{electricMeterId}, #{handler}, #{isTransferred},
                     #{companyNameAfterTransfer}, #{transferDate}, #{correspondingHouseholdCount},
                     #{lastPaymentDate}, #{readingType}, #{multiplyingFactor}, #{unitPrice}, #{invoiceAmount},
                     #{amountDifference}, #{autoDeduction}, #{remark2}, #{address}, #{writeTime}, #{writer},
                     #{checkApplyCompanyName}, #{checkApplyDeptProject}, #{waterFeePayer}, #{accountNumber},
                     #{meterReadBookNo}, #{waterConsumption}, #{sewageTreatmentWater}, #{collectionStandard},
                     #{arrearsUnpaid}, #{latePaymentFine}, #{latePaymentSurcharge}, #{feePaymentStatus},
                     #{carryOverBalance}, #{totalPayableAmount}
                 )
    </insert>
    <!-- 查询水电抄表信息 add by wuxw 2018-07-03 -->
    <select id="getMeterWaterInfo" parameterType="Map" resultType="Map">
        select t.status_cd,t.status_cd statusCd,t.remark,t.obj_name,t.obj_name objName,t.fee_id,t.fee_id feeId,
        t.cur_reading_time,t.cur_reading_time curReadingTime,t.water_id,t.water_id waterId,
        t.cur_degrees,t.cur_degrees curDegrees,t.price,t.meter_type,t.meter_type meterType,
        t.pre_degrees,t.pre_degrees preDegrees,t.obj_id,t.obj_id objId,t.pre_reading_time,
        t.pre_reading_time preReadingTime,t.community_id,t.community_id communityId,t.obj_type,
        select
        t.water_id waterId,
        t.b_id bId,
        t.meter_type meterType,
        t.obj_type objType,
        t.obj_id objId,
        t.pre_degrees preDegrees,
        t.cur_degrees curDegrees,
        t.pre_reading_time preReadingTime,
        t.cur_reading_time curReadingTime,
        t.community_id communityId,
        t.create_time createTime,
        t.status_cd statusCd,
        t.remark remark,
        t.fee_id feeId,
        t.obj_name objName,
        t.price price,
        t.power_supply_bureau powerSupplyBureau,
        t.household_name householdName,
        t.household_number householdNumber,
@@ -71,49 +87,54 @@
        t.total_payable_amount totalPayableAmount
        from meter_water t
        where 1 =1
        <if test="waterId !=null and waterId != ''">
            and t.water_id= #{waterId}
        </if>
        <if test="bId !=null and bId != ''">
            and t.b_id= #{bId}
        </if>
        <if test="meterType !=null and meterType != ''">
            and t.meter_type= #{meterType}
        </if>
        <if test="objType !=null and objType != ''">
            and t.obj_type= #{objType}
        </if>
        <if test="objId !=null and objId != ''">
            and t.obj_id= #{objId}
        </if>
        <if test="preDegrees !=null and preDegrees != ''">
            and t.pre_degrees= #{preDegrees}
        </if>
        <if test="curDegrees !=null and curDegrees != ''">
            and t.cur_degrees= #{curDegrees}
        </if>
        <if test="preReadingTime !=null ">
            and t.pre_reading_time= #{preReadingTime}
        </if>
        <if test="curReadingTime !=null ">
            and t.cur_reading_time= #{curReadingTime}
        </if>
        <if test="communityId !=null and communityId != ''">
            and t.community_id= #{communityId}
        </if>
        <if test="createTime !=null ">
            and t.create_time= #{createTime}
        </if>
        <if test="statusCd !=null and statusCd != ''">
            and t.status_cd= #{statusCd}
        </if>
        <if test="remark !=null and remark != ''">
            and t.remark= #{remark}
        </if>
        <if test="objName !=null and objName != ''">
            and t.obj_name= #{objName}
        </if>
        <if test="feeId !=null and feeId != ''">
            and t.fee_id= #{feeId}
        </if>
        <if test="curReadingTime !=null and curReadingTime != ''">
            and t.cur_reading_time= #{curReadingTime}
        </if>
        <if test="waterId !=null and waterId != ''">
            and t.water_id= #{waterId}
        </if>
        <if test="curDegrees !=null and curDegrees != ''">
            and t.cur_degrees= #{curDegrees}
        <if test="objName !=null and objName != ''">
            and t.obj_name= #{objName}
        </if>
        <if test="price !=null and price != ''">
            and t.price= #{price}
        </if>
        <if test="meterType !=null and meterType != ''">
            and t.meter_type= #{meterType}
        </if>
        <if test="preDegrees !=null and preDegrees != ''">
            and t.pre_degrees= #{preDegrees}
        </if>
        <if test="objId !=null and objId != ''">
            and t.obj_id= #{objId}
        </if>
        <if test="preReadingTime !=null and preReadingTime != ''">
            and t.pre_reading_time= #{preReadingTime}
        </if>
        <if test="communityId !=null and communityId != ''">
            and t.community_id= #{communityId}
        </if>
        <if test="objType !=null and objType != ''">
            and t.obj_type= #{objType}
        </if>
        <!-- 新字段查询条件 -->
        <if test="powerSupplyBureau !=null and powerSupplyBureau != ''">
            and t.power_supply_bureau= #{powerSupplyBureau}
        </if>
@@ -135,13 +156,13 @@
        <if test="companyNameAfterTransfer !=null and companyNameAfterTransfer != ''">
            and t.company_name_after_transfer= #{companyNameAfterTransfer}
        </if>
        <if test="transferDate !=null and transferDate != ''">
        <if test="transferDate !=null ">
            and t.transfer_date= #{transferDate}
        </if>
        <if test="correspondingHouseholdCount !=null and correspondingHouseholdCount != ''">
            and t.corresponding_household_count= #{correspondingHouseholdCount}
        </if>
        <if test="lastPaymentDate !=null and lastPaymentDate != ''">
        <if test="lastPaymentDate !=null ">
            and t.last_payment_date= #{lastPaymentDate}
        </if>
        <if test="readingType !=null and readingType != ''">
@@ -168,7 +189,7 @@
        <if test="address !=null and address != ''">
            and t.address= #{address}
        </if>
        <if test="writeTime !=null and writeTime != ''">
        <if test="writeTime !=null ">
            and t.write_time= #{writeTime}
        </if>
        <if test="writer !=null and writer != ''">
@@ -224,148 +245,156 @@
    <!-- 修改水电抄表信息 add by wuxw 2018-07-03 -->
    <update id="updateMeterWaterInfo" parameterType="Map">
        update meter_water t set t.status_cd = #{statusCd}
        <if test="newBId != null and newBId != ''">
            ,t.b_id = #{newBId}
        update meter_water t set
        <if test="waterId !=null and waterId != ''">
            t.water_id = #{waterId},
        </if>
        <if test="remark !=null and remark != ''">
            , t.remark= #{remark}
        </if>
        <if test="objName !=null and objName != ''">
            , t.obj_name= #{objName}
        </if>
        <if test="feeId !=null and feeId != ''">
            , t.fee_id= #{feeId}
        </if>
        <if test="curReadingTime !=null and curReadingTime != ''">
            , t.cur_reading_time= #{curReadingTime}
        </if>
        <if test="curDegrees !=null and curDegrees != ''">
            , t.cur_degrees= #{curDegrees}
        </if>
        <if test="price !=null and price != ''">
            , t.price= #{price}
        <if test="bId !=null and bId != ''">
            t.b_id = #{bId},
        </if>
        <if test="meterType !=null and meterType != ''">
            , t.meter_type= #{meterType}
        </if>
        <if test="preDegrees !=null and preDegrees != ''">
            , t.pre_degrees= #{preDegrees}
        </if>
        <if test="objId !=null and objId != ''">
            , t.obj_id= #{objId}
        </if>
        <if test="preReadingTime !=null and preReadingTime != ''">
            , t.pre_reading_time= #{preReadingTime}
        </if>
        <if test="communityId !=null and communityId != ''">
            , t.community_id= #{communityId}
            t.meter_type = #{meterType},
        </if>
        <if test="objType !=null and objType != ''">
            , t.obj_type= #{objType}
            t.obj_type = #{objType},
        </if>
        <!-- 新字段修改逻辑 -->
        <if test="objId !=null and objId != ''">
            t.obj_id = #{objId},
        </if>
        <if test="preDegrees !=null and preDegrees != ''">
            t.pre_degrees = #{preDegrees},
        </if>
        <if test="curDegrees !=null and curDegrees != ''">
            t.cur_degrees = #{curDegrees},
        </if>
        <if test="preReadingTime !=null ">
            t.pre_reading_time = #{preReadingTime},
        </if>
        <if test="curReadingTime !=null ">
            t.cur_reading_time = #{curReadingTime},
        </if>
        <if test="communityId !=null and communityId != ''">
            t.community_id = #{communityId},
        </if>
        <if test="createTime !=null ">
            t.create_time = #{createTime},
        </if>
        <if test="statusCd !=null and statusCd != ''">
            t.status_cd = #{statusCd},
        </if>
        <if test="remark !=null and remark != ''">
            t.remark = #{remark},
        </if>
        <if test="feeId !=null and feeId != ''">
            t.fee_id = #{feeId},
        </if>
        <if test="objName !=null and objName != ''">
            t.obj_name = #{objName},
        </if>
        <if test="price !=null and price != ''">
            t.price = #{price},
        </if>
        <if test="powerSupplyBureau !=null and powerSupplyBureau != ''">
            , t.power_supply_bureau= #{powerSupplyBureau}
            t.power_supply_bureau = #{powerSupplyBureau},
        </if>
        <if test="householdName !=null and householdName != ''">
            , t.household_name= #{householdName}
            t.household_name = #{householdName},
        </if>
        <if test="householdNumber !=null and householdNumber != ''">
            , t.household_number= #{householdNumber}
            t.household_number = #{householdNumber},
        </if>
        <if test="electricMeterId !=null and electricMeterId != ''">
            , t.electric_meter_id= #{electricMeterId}
            t.electric_meter_id = #{electricMeterId},
        </if>
        <if test="handler !=null and handler != ''">
            , t.handler= #{handler}
            t.handler = #{handler},
        </if>
        <if test="isTransferred !=null and isTransferred != ''">
            , t.is_transferred= #{isTransferred}
            t.is_transferred = #{isTransferred},
        </if>
        <if test="companyNameAfterTransfer !=null and companyNameAfterTransfer != ''">
            , t.company_name_after_transfer= #{companyNameAfterTransfer}
            t.company_name_after_transfer = #{companyNameAfterTransfer},
        </if>
        <if test="transferDate !=null and transferDate != ''">
            , t.transfer_date= #{transferDate}
        <if test="transferDate !=null ">
            t.transfer_date = #{transferDate},
        </if>
        <if test="correspondingHouseholdCount !=null and correspondingHouseholdCount != ''">
            , t.corresponding_household_count= #{correspondingHouseholdCount}
            t.corresponding_household_count = #{correspondingHouseholdCount},
        </if>
        <if test="lastPaymentDate !=null and lastPaymentDate != ''">
            , t.last_payment_date= #{lastPaymentDate}
        <if test="lastPaymentDate !=null ">
            t.last_payment_date = #{lastPaymentDate},
        </if>
        <if test="readingType !=null and readingType != ''">
            , t.reading_type= #{readingType}
            t.reading_type = #{readingType},
        </if>
        <if test="multiplyingFactor !=null and multiplyingFactor != ''">
            , t.multiplying_factor= #{multiplyingFactor}
            t.multiplying_factor = #{multiplyingFactor},
        </if>
        <if test="unitPrice !=null and unitPrice != ''">
            , t.unit_price= #{unitPrice}
            t.unit_price = #{unitPrice},
        </if>
        <if test="invoiceAmount !=null and invoiceAmount != ''">
            , t.invoice_amount= #{invoiceAmount}
            t.invoice_amount = #{invoiceAmount},
        </if>
        <if test="amountDifference !=null and amountDifference != ''">
            , t.amount_difference= #{amountDifference}
            t.amount_difference = #{amountDifference},
        </if>
        <if test="autoDeduction !=null and autoDeduction != ''">
            , t.auto_deduction= #{autoDeduction}
            t.auto_deduction = #{autoDeduction},
        </if>
        <if test="remark2 !=null and remark2 != ''">
            , t.remark2= #{remark2}
            t.remark2 = #{remark2},
        </if>
        <if test="address !=null and address != ''">
            , t.address= #{address}
            t.address = #{address},
        </if>
        <if test="writeTime !=null and writeTime != ''">
            , t.write_time= #{writeTime}
        <if test="writeTime !=null ">
            t.write_time = #{writeTime},
        </if>
        <if test="writer !=null and writer != ''">
            , t.writer= #{writer}
            t.writer = #{writer},
        </if>
        <if test="checkApplyCompanyName !=null and checkApplyCompanyName != ''">
            , t.check_apply_company_name= #{checkApplyCompanyName}
            t.check_apply_company_name = #{checkApplyCompanyName},
        </if>
        <if test="checkApplyDeptProject !=null and checkApplyDeptProject != ''">
            , t.check_apply_dept_project= #{checkApplyDeptProject}
            t.check_apply_dept_project = #{checkApplyDeptProject},
        </if>
        <if test="waterFeePayer !=null and waterFeePayer != ''">
            , t.water_fee_payer= #{waterFeePayer}
            t.water_fee_payer = #{waterFeePayer},
        </if>
        <if test="accountNumber !=null and accountNumber != ''">
            , t.account_number= #{accountNumber}
            t.account_number = #{accountNumber},
        </if>
        <if test="meterReadBookNo !=null and meterReadBookNo != ''">
            , t.meter_read_book_no= #{meterReadBookNo}
            t.meter_read_book_no = #{meterReadBookNo},
        </if>
        <if test="waterConsumption !=null and waterConsumption != ''">
            , t.water_consumption= #{waterConsumption}
            t.water_consumption = #{waterConsumption},
        </if>
        <if test="sewageTreatmentWater !=null and sewageTreatmentWater != ''">
            , t.sewage_treatment_water= #{sewageTreatmentWater}
            t.sewage_treatment_water = #{sewageTreatmentWater},
        </if>
        <if test="collectionStandard !=null and collectionStandard != ''">
            , t.collection_standard= #{collectionStandard}
            t.collection_standard = #{collectionStandard},
        </if>
        <if test="arrearsUnpaid !=null and arrearsUnpaid != ''">
            , t.arrears_unpaid= #{arrearsUnpaid}
            t.arrears_unpaid = #{arrearsUnpaid},
        </if>
        <if test="latePaymentFine !=null and latePaymentFine != ''">
            , t.late_payment_fine= #{latePaymentFine}
            t.late_payment_fine = #{latePaymentFine},
        </if>
        <if test="latePaymentSurcharge !=null and latePaymentSurcharge != ''">
            , t.late_payment_surcharge= #{latePaymentSurcharge}
            t.late_payment_surcharge = #{latePaymentSurcharge},
        </if>
        <if test="feePaymentStatus !=null and feePaymentStatus != ''">
            , t.fee_payment_status= #{feePaymentStatus}
            t.fee_payment_status = #{feePaymentStatus},
        </if>
        <if test="carryOverBalance !=null and carryOverBalance != ''">
            , t.carry_over_balance= #{carryOverBalance}
            t.carry_over_balance = #{carryOverBalance},
        </if>
        <if test="totalPayableAmount !=null and totalPayableAmount != ''">
            , t.total_payable_amount= #{totalPayableAmount}
            t.total_payable_amount = #{totalPayableAmount}
        </if>
        where 1=1
        <if test="waterId !=null and waterId != ''">
@@ -378,49 +407,54 @@
        select count(1) count
        from meter_water t
        where 1 =1
        <if test="waterId !=null and waterId != ''">
            and t.water_id= #{waterId}
        </if>
        <if test="bId !=null and bId != ''">
            and t.b_id= #{bId}
        </if>
        <if test="meterType !=null and meterType != ''">
            and t.meter_type= #{meterType}
        </if>
        <if test="objType !=null and objType != ''">
            and t.obj_type= #{objType}
        </if>
        <if test="objId !=null and objId != ''">
            and t.obj_id= #{objId}
        </if>
        <if test="preDegrees !=null and preDegrees != ''">
            and t.pre_degrees= #{preDegrees}
        </if>
        <if test="curDegrees !=null and curDegrees != ''">
            and t.cur_degrees= #{curDegrees}
        </if>
        <if test="preReadingTime !=null ">
            and t.pre_reading_time= #{preReadingTime}
        </if>
        <if test="curReadingTime !=null ">
            and t.cur_reading_time= #{curReadingTime}
        </if>
        <if test="communityId !=null and communityId != ''">
            and t.community_id= #{communityId}
        </if>
        <if test="createTime !=null ">
            and t.create_time= #{createTime}
        </if>
        <if test="statusCd !=null and statusCd != ''">
            and t.status_cd= #{statusCd}
        </if>
        <if test="remark !=null and remark != ''">
            and t.remark= #{remark}
        </if>
        <if test="objName !=null and objName != ''">
            and t.obj_name= #{objName}
        </if>
        <if test="feeId !=null and feeId != ''">
            and t.fee_id= #{feeId}
        </if>
        <if test="curReadingTime !=null and curReadingTime != ''">
            and t.cur_reading_time= #{curReadingTime}
        </if>
        <if test="waterId !=null and waterId != ''">
            and t.water_id= #{waterId}
        </if>
        <if test="curDegrees !=null and curDegrees != ''">
            and t.cur_degrees= #{curDegrees}
        <if test="objName !=null and objName != ''">
            and t.obj_name= #{objName}
        </if>
        <if test="price !=null and price != ''">
            and t.price= #{price}
        </if>
        <if test="meterType !=null and meterType != ''">
            and t.meter_type= #{meterType}
        </if>
        <if test="preDegrees !=null and preDegrees != ''">
            and t.pre_degrees= #{preDegrees}
        </if>
        <if test="objId !=null and objId != ''">
            and t.obj_id= #{objId}
        </if>
        <if test="preReadingTime !=null and preReadingTime != ''">
            and t.pre_reading_time= #{preReadingTime}
        </if>
        <if test="communityId !=null and communityId != ''">
            and t.community_id= #{communityId}
        </if>
        <if test="objType !=null and objType != ''">
            and t.obj_type= #{objType}
        </if>
        <!-- 新字段数量查询条件 -->
        <if test="powerSupplyBureau !=null and powerSupplyBureau != ''">
            and t.power_supply_bureau= #{powerSupplyBureau}
        </if>
@@ -442,13 +476,13 @@
        <if test="companyNameAfterTransfer !=null and companyNameAfterTransfer != ''">
            and t.company_name_after_transfer= #{companyNameAfterTransfer}
        </if>
        <if test="transferDate !=null and transferDate != ''">
        <if test="transferDate !=null ">
            and t.transfer_date= #{transferDate}
        </if>
        <if test="correspondingHouseholdCount !=null and correspondingHouseholdCount != ''">
            and t.corresponding_household_count= #{correspondingHouseholdCount}
        </if>
        <if test="lastPaymentDate !=null and lastPaymentDate != ''">
        <if test="lastPaymentDate !=null ">
            and t.last_payment_date= #{lastPaymentDate}
        </if>
        <if test="readingType !=null and readingType != ''">
@@ -475,7 +509,7 @@
        <if test="address !=null and address != ''">
            and t.address= #{address}
        </if>
        <if test="writeTime !=null and writeTime != ''">
        <if test="writeTime !=null ">
            and t.write_time= #{writeTime}
        </if>
        <if test="writer !=null and writer != ''">
@@ -528,8 +562,8 @@
    <update id="deleteMeterWaterByBatch" parameterType="Map">
        update meter_water t,pay_fee pf set t.status_cd = '1'
        where
        t.fee_id = pf.fee_id
        and pf.batch_id = #{batchId}
        and pf.community_id = #{communityId}
            t.fee_id = pf.fee_id
          and pf.batch_id = #{batchId}
          and pf.community_id = #{communityId}
    </update>
</mapper>
java110-db/src/main/resources/mapper/fee/PropertyWhiteListFlowDaoImplMapper.xml
@@ -9,6 +9,9 @@
            <if test="roomId != null">room_id,</if>
            <if test="propertyAddress != null">property_address,</if>
            <if test="doorRoomNum != null">door_room_num,</if>
            <if test="doorRoomNum != null">nong,</if>
            <if test="doorRoomNum != null">men,</if>
            <if test="doorRoomNum != null">shi,</if>
            <if test="secondaryFeeTypeCd != null">secondary_fee_type_cd,</if>
            <if test="chargeAmount != null">charge_amount,</if>
            <if test="charger != null">charger,</if>
@@ -28,7 +31,7 @@
            <if test="chargeStart != null">charge_start,</if>
            <if test="chargeEnd != null">charge_end,</if>
            <if test="communityId != null">community_id,</if>
            <if test="frequency != null">frequency</if>
            <if test="frequency != null">frequency,</if>
            <if test="receiptYearMonth != null">receipt_year_month,</if>
            <if test="receiptYear != null">receipt_year,</if>
            <if test="pendingProblem != null">pending_problem,</if>
@@ -40,6 +43,9 @@
            <if test="roomId != null">#{roomId},</if>
            <if test="propertyAddress != null">#{propertyAddress},</if>
            <if test="doorRoomNum != null">#{doorRoomNum},</if>
            <if test="doorRoomNum != null">SUBSTRING_INDEX(#{doorRoomNum}, '-', 1),</if>
            <if test="doorRoomNum != null">SUBSTRING_INDEX(SUBSTRING_INDEX(#{doorRoomNum}, '-', 2), '-', -1),</if>
            <if test="doorRoomNum != null">SUBSTRING_INDEX(#{doorRoomNum}, '-', -1),</if>
            <if test="secondaryFeeTypeCd != null">#{secondaryFeeTypeCd},</if>
            <if test="chargeAmount != null">#{chargeAmount},</if>
            <if test="charger != null">#{charger},</if>
@@ -59,13 +65,14 @@
            <if test="chargeStart != null">#{chargeStart},</if>
            <if test="chargeEnd != null">#{chargeEnd},</if>
            <if test="communityId != null">#{communityId},</if>
            <if test="frequency != null">#{frequency}</if>
            <if test="frequency != null">#{frequency},</if>
            <if test="receiptYearMonth != null">#{receiptYearMonth},</if>
            <if test="receiptYear != null">#{receiptYear},</if>
            <if test="pendingProblem != null">#{pendingProblem},</if>
            <if test="roomNumber != null">#{roomNumber}</if>
        </trim>
    </insert>
    <select id="queryPropertyWhiteListFlow" parameterType="Map" resultType="Map">
        SELECT
        id,
@@ -74,9 +81,6 @@
        room_id AS roomId,
        property_address AS propertyAddress,
        door_room_num AS doorRoomNum,
        SUBSTRING_INDEX(door_room_num, '-', 1) AS floorNum,
        SUBSTRING_INDEX(SUBSTRING_INDEX(door_room_num, '-', 2), '-', -1) AS unitNum,
        SUBSTRING_INDEX(door_room_num, '-', -1) AS roomNum,
        secondary_fee_type_cd AS secondaryFeeTypeCd,
        charge_amount AS chargeAmount,
        charger,
@@ -97,11 +101,22 @@
        charge_end AS chargeEnd,
        community_id AS communityId,
        frequency,
        receipt_year_month AS receiptYearMonth,
        receipt_year AS receiptYear,
        pending_problem AS pendingProblem,
        room_number AS roomNumber,
        financial_check AS financialCheck,
        check_date AS checkDate,
        nong,
        men,
        shi,
        SUBSTRING_INDEX(door_room_num, '-', 1) AS floorNum,
        SUBSTRING_INDEX(SUBSTRING_INDEX(door_room_num, '-', 2), '-', -1) AS unitNum,
        SUBSTRING_INDEX(door_room_num, '-', -1) AS roomNum,
        SUBSTRING_INDEX(frequency, '-', -1) as order_fre
        FROM
        property_white_list_flow
        <where>
            <!-- 收费日期范围查询 -->
            <if test="startChargeTime != null">
                AND charge_time >= #{startChargeTime}
            </if>
@@ -111,32 +126,24 @@
            <if test="frequencyLike != null">
                AND frequency like concat(#{frequencyLike},"%")
            </if>
            <!-- 房号查询 -->
            <if test="roomId != null and roomId != ''">
                AND room_id = #{roomId}
            </if>
            <!-- 收费内容查询 -->
            <if test="secondaryFeeTypeCd != null and secondaryFeeTypeCd != ''">
                AND secondary_fee_type_cd = #{secondaryFeeTypeCd}
            </if>
            <if test="invoice_receipt_no != null">
            <if test="invoiceReceiptNo != null">
                AND invoice_receipt_no = #{invoiceReceiptNo}
            </if>
            <!-- 收费金额范围查询 -->
            <if test="minChargeAmount != null">
                AND charge_amount >= #{minChargeAmount}
            </if>
            <if test="maxChargeAmount != null">
                AND charge_amount &lt;= #{maxChargeAmount}
            </if>
            <!-- 单号查询 -->
            <if test="orderNo != null and orderNo != ''">
                AND order_no = #{orderNo}
            </if>
            <!-- 车牌号查询(适用于停车费等场景) -->
            <if test="licensePlate != null and licensePlate != ''">
                AND license_plate = #{licensePlate}
            </if>
@@ -148,6 +155,21 @@
            </if>
            <if test="communityId != null and communityId != ''">
                and community_id = #{communityId}
            </if>
            <if test="nong != null and nong != ''">
                AND nong = #{nong}
            </if>
            <if test="men != null and men != ''">
                AND men = #{men}
            </if>
            <if test="shi != null and shi != ''">
                AND shi = #{shi}
            </if>
            <if test="financialCheck != null">
                AND financial_check = #{financialCheck}
            </if>
            <if test="checkDate != null">
                AND check_date = #{checkDate}
            </if>
        </where>
        order by order_fre desc,door_room_num,secondary_fee_type_cd,charge_start
@@ -155,44 +177,35 @@
            limit #{page}, #{row}
        </if>
    </select>
    <select id="countPropertyWhiteListFlow" parameterType="Map" resultType="Map">
        SELECT
        count(1)
        FROM
        property_white_list_flow
        <where>
            <!-- 收费日期范围查询 -->
            <if test="startChargeTime != null">
                AND charge_time >= #{startChargeTime}
            </if>
            <if test="endChargeTime != null">
                AND charge_time &lt;= #{endChargeTime}
            </if>
            <!-- 房号查询 -->
            <if test="roomId != null and roomId != ''">
                AND room_id = #{roomId}
            </if>
            <!-- 收费内容查询 -->
            <if test="secondaryFeeTypeCd != null and secondaryFeeTypeCd != ''">
                AND secondary_fee_type_cd = #{secondaryFeeTypeCd}
            </if>
            <!-- 收费金额范围查询 -->
            <if test="minChargeAmount != null">
                AND charge_amount >= #{minChargeAmount}
            </if>
            <if test="maxChargeAmount != null">
                AND charge_amount &lt;= #{maxChargeAmount}
            </if>
            <!-- 单号查询 -->
            <if test="orderNo != null and orderNo != ''">
                AND order_no = #{orderNo}
            </if>
            <!-- 车牌号查询(适用于停车费等场景) -->
            <if test="licensePlate != null and licensePlate != ''">
                AND license_plate = #{licensePlate}
            </if>
@@ -205,8 +218,18 @@
            <if test="communityId != null and communityId != ''">
                and community_id = #{communityId}
            </if>
            <if test="nong != null and nong != ''">
                AND nong = #{nong}
            </if>
            <if test="men != null and men != ''">
                AND men = #{men}
            </if>
            <if test="shi != null and shi != ''">
                AND shi = #{shi}
            </if>
        </where>
    </select>
    <select id="countPropertyWhiteListFlowFilter" parameterType="Map" resultType="Map">
        SELECT
        count(1)
@@ -240,12 +263,19 @@
            <if test="chargeEnd != null">
                AND charge_end = #{chargeEnd}
            </if>
            <if test="communityId != null and communityId != ''">
                and community_id = #{communityId}
            <if test="nong != null">
                AND nong = #{nong}
            </if>
            <if test="men != null">
                AND men = #{men}
            </if>
            <if test="shi != null">
                AND shi = #{shi}
            </if>
        </where>
    </select>
    <update id="updatePropertyWhiteListFlow">
        update property_white_list_flow set frequency = #{frequency} where id = #{id}
    </update>
</mapper>
</mapper>
java110-db/src/main/resources/mapper/store/ContractCollectionDetailServiceDaoImpl.xml
@@ -3,19 +3,39 @@
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="contractCollectionDetailDaoImpl">
    <!-- 保存合同收款明细信息 add by wuxw 2018-07-03 -->
    <!-- 保存合同收款明细信息 -->
    <insert id="saveContractCollectionDetail" parameterType="Map">
        insert into contract_collection_detail(contract_id, collection_period_start, collection_period_end,
        receivable_money, collection_date, collection_amount,
        special_reduction, unpaid_money, charge_type, invoice_receipt_no, white_list_archive_no)
        values (#{contractId}, #{collectionPeriodStart}, #{collectionPeriodEnd},
        #{receivableMoney}, #{collectionDate}, #{collectionAmount},
        #{specialReduction}, #{unpaidMoney}, #{chargeType}, #{invoiceReceiptNo}, #{whiteListArchiveNo})
        insert into contract_collection_detail(
            contract_id,
            collection_period_start,
            collection_period_end,
            receivable_money,
            collection_date,
            collection_amount,
            special_reduction,
            unpaid_money,
            charge_type,
            invoice_receipt_no,
            white_list_archive_no
        ) values (
                     #{contractId},
                     #{collectionPeriodStart},
                     #{collectionPeriodEnd},
                     #{receivableMoney},
                     #{collectionDate},
                     #{collectionAmount},
                     #{specialReduction},
                     #{unpaidMoney},
                     #{chargeType},
                     #{invoiceReceiptNo},
                     #{whiteListArchiveNo}
                 )
    </insert>
    <!-- 查询合同收款明细信息 add by wuxw 2018-07-03 -->
    <!-- 查询合同收款明细信息 -->
    <select id="getContractCollectionDetail" parameterType="Map" resultType="Map">
        select t.id,
        select
        t.id,
        t.contract_id contractId,
        t.collection_period_start collectionPeriodStart,
        t.collection_period_end collectionPeriodEnd,
@@ -23,18 +43,21 @@
        t.collection_date collectionDate,
        t.collection_amount collectionAmount,
        t.special_reduction specialReduction,
        t.unpaid_money unpaidMoney
        t.unpaid_money unpaidMoney,
        t.charge_type chargeType,
        t.invoice_receipt_no invoiceReceiptNo,
        t.white_list_archive_no whiteListArchiveNo
        from contract_collection_detail t
        where 1 =1
        where 1=1
        <if test="id != null and id != ''">
            and t.id = #{id}
        </if>
        <if test="contractId != null and contractId != ''">
            and t.contract_id = #{contractId}
        </if>
        <if test="contractIds !=null">
        <if test="contractIds != null">
            and t.contract_id in
            <foreach collection="contractIds" item="item" index="index" open="(" close=")" separator=",">
            <foreach collection="contractIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
@@ -58,6 +81,15 @@
        </if>
        <if test="unpaidMoney != null and unpaidMoney != ''">
            and t.unpaid_money = #{unpaidMoney}
        </if>
        <if test="chargeType != null and chargeType != ''">
            and t.charge_type = #{chargeType}
        </if>
        <if test="invoiceReceiptNo != null and invoiceReceiptNo != ''">
            and t.invoice_receipt_no = #{invoiceReceiptNo}
        </if>
        <if test="whiteListArchiveNo != null and whiteListArchiveNo != ''">
            and t.white_list_archive_no = #{whiteListArchiveNo}
        </if>
        order by t.id desc
        <if test="page != -1 and page != null ">
@@ -65,53 +97,67 @@
        </if>
    </select>
    <!-- 修改合同收款明细信息 add by wuxw 2018-07-03 -->
    <!-- 修改合同收款明细信息 -->
    <!-- 修改合同收款明细信息 -->
    <update id="updateContractCollectionDetail" parameterType="Map">
        update contract_collection_detail t set
        <if test="collectionPeriodStart !=null and collectionPeriodStart != ''">
            t.collection_period_start= #{collectionPeriodStart},
        </if>
        <if test="collectionPeriodEnd !=null and collectionPeriodEnd != ''">
            t.collection_period_end= #{collectionPeriodEnd},
        </if>
        <if test="receivableMoney !=null and receivableMoney != ''">
            t.receivable_money= #{receivableMoney},
        </if>
        <if test="collectionDate !=null and collectionDate != ''">
            t.collection_date= #{collectionDate},
        </if>
        <if test="collectionAmount !=null and collectionAmount != ''">
            t.collection_amount= #{collectionAmount},
        </if>
        <if test="specialReduction !=null and specialReduction != ''">
            t.special_reduction= #{specialReduction},
        </if>
        <if test="unpaidMoney !=null and unpaidMoney != ''">
            t.unpaid_money= #{unpaidMoney}
        </if>
        update contract_collection_detail t
        set
        <!-- 用 trim 自动去掉最后一个逗号,这是 MyBatis 最标准写法 -->
        <trim suffixOverrides=",">
            <if test="collectionPeriodStart != null and collectionPeriodStart != ''">
                t.collection_period_start = #{collectionPeriodStart},
            </if>
            <if test="collectionPeriodEnd != null and collectionPeriodEnd != ''">
                t.collection_period_end = #{collectionPeriodEnd},
            </if>
            <if test="receivableMoney != null and receivableMoney != ''">
                t.receivable_money = #{receivableMoney},
            </if>
            <if test="collectionDate != null and collectionDate != ''">
                t.collection_date = #{collectionDate},
            </if>
            <if test="collectionAmount != null and collectionAmount != ''">
                t.collection_amount = #{collectionAmount},
            </if>
            <if test="specialReduction != null and specialReduction != ''">
                t.special_reduction = #{specialReduction},
            </if>
            <if test="unpaidMoney != null and unpaidMoney != ''">
                t.unpaid_money = #{unpaidMoney},
            </if>
            <if test="chargeType != null and chargeType != ''">
                t.charge_type = #{chargeType},
            </if>
            <if test="invoiceReceiptNo != null and invoiceReceiptNo != ''">
                t.invoice_receipt_no = #{invoiceReceiptNo},
            </if>
            <if test="whiteListArchiveNo != null and whiteListArchiveNo != ''">
                t.white_list_archive_no = #{whiteListArchiveNo},
            </if>
        </trim>
        where 1=1
        <if test="id !=null and id != ''">
            and t.id= #{id}
        </if>
        <if test="contractId !=null and contractId != ''">
            and t.contract_id= #{contractId}
        </if>
    </update>
    <!-- 查询合同收款明细数量 add by wuxw 2018-07-03 -->
    <select id="queryContractCollectionDetailCount" parameterType="Map" resultType="Map">
        select count(1) count
        from contract_collection_detail t
        where 1 =1
        <if test="id != null and id != ''">
            and t.id = #{id}
        </if>
        <if test="contractId != null and contractId != ''">
            and t.contract_id = #{contractId}
        </if>
        <if test="contractIds !=null">
    </update>
    <!-- 查询合同收款明细数量 -->
    <select id="queryContractCollectionDetailCount" parameterType="Map" resultType="Map">
        select count(1) count
        from contract_collection_detail t
        where 1=1
        <if test="id != null and id != ''">
            and t.id = #{id}
        </if>
        <if test="contractId != null and contractId != ''">
            and t.contract_id = #{contractId}
        </if>
        <if test="contractIds != null">
            and t.contract_id in
            <foreach collection="contractIds" item="item" index="index" open="(" close=")" separator=",">
            <foreach collection="contractIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
@@ -136,6 +182,17 @@
        <if test="unpaidMoney != null and unpaidMoney != ''">
            and t.unpaid_money = #{unpaidMoney}
        </if>
        <if test="chargeType != null and chargeType != ''">
            and t.charge_type = #{chargeType}
        </if>
        <if test="invoiceReceiptNo != null and invoiceReceiptNo != ''">
            and t.invoice_receipt_no = #{invoiceReceiptNo}
        </if>
        <if test="whiteListArchiveNo != null and whiteListArchiveNo != ''">
            and t.white_list_archive_no = #{whiteListArchiveNo}
        </if>
    </select>
    <delete id="deleteContractCollectionDetail" parameterType="map">
        DELETE FROM contract_collection_detail WHERE id = #{id}
    </delete>
</mapper>
java110-db/src/main/resources/mapper/store/ContractServiceDaoImplMapper.xml
@@ -6,25 +6,139 @@
    <!-- 保存合同管理信息 add by wuxw 2018-07-03 -->
    <insert id="saveContractInfo" parameterType="Map">
        insert into contract(a_link, a_contacts, amount, contract_type, store_id, operator, signing_time, b_contacts,
        party_a, b_link, party_b,
        contract_id, obj_id, contract_name, start_time, end_time, state, contract_code, obj_type,
        operator_link, contract_parent_id,
        obj_name, obj_person_name, obj_person_id, start_user_id,party_c,c_link,c_contacts
        ,a_partya_id,b_partya_id,c_partya_id,community_id,
        property_company,contract_term,is_archived,contract_reminder_date,
        signatory_address,contact_email,contact_wechat,remarks)
                             party_a, b_link, party_b,
                             contract_id, obj_id, contract_name, start_time, end_time, state, contract_code, obj_type,
                             operator_link, contract_parent_id,
                             obj_name, obj_person_name, obj_person_id, start_user_id,party_c,c_link,c_contacts
            ,a_partya_id,b_partya_id,c_partya_id,community_id,
                             property_company,contract_term,is_archived,contract_reminder_date,
                             signatory_address,contact_email,contact_wechat,remarks,has_supplement_agreement, community_name)
        values (#{aLink}, #{aContacts}, #{amount}, #{contractType}, #{storeId}, #{operator}, #{signingTime},
        #{bContacts}, #{partyA}, #{bLink}, #{partyB},
        #{contractId}, #{objId}, #{contractName}, #{startTime}, #{endTime}, #{state}, #{contractCode},
        #{objType}, #{operatorLink}, #{contractParentId},
        #{objName}, #{objPersonName}, #{objPersonId}, #{startUserId},#{partyC},#{cLink},#{cContacts}
        ,#{aPartyaId},#{bPartyaId},#{cPartyaId},#{communityId},
        #{propertyCompany},#{contractTerm},#{isArchived},#{contractReminderDate},
        #{signatoryAddress},#{contactEmail},#{contactWechat},#{remarks})
                #{bContacts}, #{partyA}, #{bLink}, #{partyB},
                #{contractId}, #{objId}, #{contractName}, #{startTime}, #{endTime}, #{state}, #{contractCode},
                #{objType}, #{operatorLink}, #{contractParentId},
                #{objName}, #{objPersonName}, #{objPersonId}, #{startUserId},#{partyC},#{cLink},#{cContacts}
                   ,#{aPartyaId},#{bPartyaId},#{cPartyaId},#{communityId},
                #{propertyCompany},#{contractTerm},#{isArchived},#{contractReminderDate},
                #{signatoryAddress},#{contactEmail},#{contactWechat},#{remarks},#{hasSupplementAgreement},#{communityName})
    </insert>
    <!-- 查询合同管理信息 add by wuxw 2018-07-03 -->
    <select id="getContractInfo" parameterType="Map" resultType="Map">
    <resultMap id="ContractDtoResultMap" type="com.java110.dto.contract.ContractDto">
        <!-- ===================== 1. ContractDto 主表字段 ===================== -->
        <id column="contract_id" property="contractId"/>
        <result column="a_link" property="aLink"/>
        <result column="a_contacts" property="aContacts"/>
        <result column="amount" property="amount"/>
        <result column="contract_type" property="contractType"/>
        <result column="status_cd" property="statusCd"/>
        <result column="store_id" property="storeId"/>
        <result column="operator" property="operator"/>
        <result column="signing_time" property="signingTime"/>
        <result column="b_contacts" property="bContacts"/>
        <result column="party_a" property="partyA"/>
        <result column="b_link" property="bLink"/>
        <result column="party_b" property="partyB"/>
        <result column="obj_id" property="objId"/>
        <result column="contract_name" property="contractName"/>
        <result column="start_time" property="startTime"/>
        <result column="end_time" property="endTime"/>
        <result column="state" property="state"/>
        <result column="contract_code" property="contractCode"/>
        <result column="obj_type" property="objType"/>
        <result column="operator_link" property="operatorLink"/>
        <result column="contractTypeName" property="contractTypeName"/>
        <result column="audit" property="audit"/>
        <result column="stateName" property="stateName"/>
        <result column="state_desc" property="stateDesc"/>
        <result column="contractParentId" property="contractParentId"/>
        <result column="parentContractCode" property="parentContractCode"/>
        <result column="parentContractName" property="parentContractName"/>
        <result column="objName" property="objName"/>
        <result column="objPersonName" property="objPersonName"/>
        <result column="objPersonId" property="objPersonId"/>
        <result column="startUserId" property="startUserId"/>
        <result column="createTime" property="createTime"/>
        <result column="partyC" property="partyC"/>
        <result column="cLink" property="cLink"/>
        <result column="cContacts" property="cContacts"/>
        <result column="aPartyaId" property="aPartyaId"/>
        <result column="bPartyaId" property="bPartyaId"/>
        <result column="cPartyaId" property="cPartyaId"/>
        <result column="communityName" property="communityName"/>
        <result column="propertyCompany" property="propertyCompany"/>
        <result column="contractTerm" property="contractTerm"/>
        <result column="isArchived" property="isArchived"/>
        <result column="contractReminderDate" property="contractReminderDate"/>
        <result column="signatoryAddress" property="signatoryAddress"/>
        <result column="contactEmail" property="contactEmail"/>
        <result column="contactWechat" property="contactWechat"/>
        <result column="remarks" property="remarks"/>
        <result column="has_supplement_agreement" property="hasSupplementAgreement"/>
        <!-- ===================== 2. 广告信息子对象(已生效) ===================== -->
        <association property="adContractInfo" javaType="com.java110.dto.contract.AdContractInfoDto">
            <id column="ad_id" property="id"/>
            <result column="ad_contract_id" property="contractId"/>
            <result column="ad_type" property="adType"/>
            <result column="sub_type" property="subType"/>
            <result column="cooperation_form" property="cooperationForm"/>
            <result column="building_elevator_count" property="buildingElevatorCount"/>
            <result column="online_quantity" property="onlineQuantity"/>
            <result column="facility_location" property="facilityLocation"/>
        </association>
        <!-- ===================== 3. 合同金额明细 ===================== -->
        <association property="contractAmountDetail" javaType="com.java110.dto.contract.ContractAmountDetailDto">
            <id column="detail_id" property="id"/>
            <result column="detail_contract_id" property="contractId"/>
            <result column="total_contract_amount" property="totalContractAmount"/>
            <result column="unit_price" property="unitPrice"/>
            <result column="annual_amount" property="annualAmount"/>
            <result column="total_amount" property="totalAmount"/>
            <result column="settlement_method" property="settlementMethod"/>
            <result column="settlement_amount" property="settlementAmount"/>
            <result column="fee_type" property="feeType"/>
            <result column="account_info" property="accountInfo"/>
            <result column="main_meter_no" property="mainMeterNo"/>
            <result column="sub_meter_no" property="subMeterNo"/>
            <result column="last_month_reading" property="lastMonthReading"/>
            <result column="current_month_reading" property="currentMonthReading"/>
            <result column="current_period_consumption" property="currentPeriodConsumption"/>
            <result column="electricity_unit_price" property="electricityUnitPrice"/>
            <result column="electricity_fee" property="electricityFee"/>
            <result column="deposit" property="deposit"/>
            <result column="settlement_cycle" property="settlementCycle"/>
            <result column="payment_remark" property="paymentRemark"/>
        </association>
        <!-- ===================== 4. 合同管理分成 ===================== -->
        <association property="contractManagementShare" javaType="com.java110.dto.contract.ContractManagementShareDto">
            <id column="share_id" property="id"/>
            <result column="share_contract_id" property="contractId"/>
            <result column="management_ratio" property="managementRatio"/>
            <result column="our_company_amount" property="ourCompanyAmount"/>
            <result column="our_committee_share" property="ourCommitteeShare"/>
            <result column="our_company_receivable" property="ourCompanyReceivable"/>
        </association>
        <!-- ===================== 5. 合同缴费状态 ===================== -->
        <association property="contractPaymentStatus" javaType="com.java110.dto.contract.ContractPaymentStatusDto">
            <id column="payment_id" property="id"/>
            <result column="payment_contract_id" property="contractId"/>
            <result column="payment_status" property="paymentStatus"/>
            <result column="receivable_amount" property="receivableAmount"/>
            <result column="received_amount" property="receivedAmount"/>
            <result column="unpaid_amount" property="unpaidAmount"/>
            <result column="special_discount" property="specialDiscount"/>
            <result column="collection_progress" property="collectionProgress"/>
            <result column="final_collection_deadline" property="finalCollectionDeadline"/>
            <result column="collection_reminder_status" property="collectionReminderStatus"/>
            <result column="remark" property="remark"/>
        </association>
    </resultMap>
    <select id="getContractInfo" resultMap="ContractDtoResultMap">
        select t.a_link,t.a_link aLink,t.a_contacts,t.a_contacts aContacts,t.amount,t.contract_type,t.contract_type
        contractType,t.status_cd,t.status_cd statusCd,t.store_id,t.store_id
        storeId,t.operator,t.signing_time,t.signing_time signingTime,t.b_contacts,t.b_contacts
@@ -39,15 +153,83 @@
        ,t.a_partya_id aPartyaId,t.b_partya_id bPartyaId,t.c_partya_id cPartyaId,s_community.`name` communityName,
        t.property_company propertyCompany,t.contract_term contractTerm,t.is_archived isArchived,
        t.contract_reminder_date contractReminderDate,t.signatory_address signatoryAddress,
        t.contact_email contactEmail,t.contact_wechat contactWechat,t.remarks remarks
        t.contact_email contactEmail,t.contact_wechat contactWechat,t.remarks remarks,
        t.has_supplement_agreement           has_supplement_agreement,
        -- 广告表字段
        ad.id                                ad_id,
        ad.contract_id                       ad_contract_id,
        ad.ad_type,
        ad.sub_type,
        ad.cooperation_form,
        ad.building_elevator_count,
        ad.online_quantity,
        ad.facility_location,
        -- 合同金额明细
        detail.id                            detail_id,
        detail.contract_id                   detail_contract_id,
        detail.total_contract_amount,
        detail.unit_price,
        detail.annual_amount,
        detail.total_amount,
        detail.settlement_method,
        detail.settlement_amount,
        detail.fee_type,
        detail.account_info,
        detail.main_meter_no,
        detail.sub_meter_no,
        detail.last_month_reading,
        detail.current_month_reading,
        detail.current_period_consumption,
        detail.electricity_unit_price,
        detail.electricity_fee,
        detail.deposit,
        detail.settlement_cycle,
        detail.payment_remark,
        -- 合同管理分成
        share.id                             share_id,
        share.contract_id                    share_contract_id,
        share.management_ratio,
        share.our_company_amount,
        share.our_committee_share,
        share.our_company_receivable,
        -- 合同缴费状态
        payment.id                           payment_id,
        payment.contract_id                  payment_contract_id,
        payment.payment_status,
        payment.receivable_amount,
        IFNULL(ccd.received_amount, 0)       received_amount,
        payment.unpaid_amount,
        payment.special_discount,
        payment.collection_progress,
        payment.final_collection_deadline,
        payment.collection_reminder_status,
        payment.remark
        from contract t
        LEFT JOIN contract_type ct on t.contract_type = ct.contract_type_id and ct.status_cd = '0' and ct.store_id =
        t.store_id
        LEFT JOIN contract_type ct on t.contract_type = ct.contract_type_id and ct.status_cd = '0' and ct.store_id = t.store_id
        LEFT JOIN t_dict td on td.status_cd = t.state and td.table_name = 'contract' and td.table_columns = 'state'
        left join contract tt on t.contract_parent_id = tt.contract_id and tt.status_cd = '0' and tt.store_id =
        t.store_id
        left join contract tt on t.contract_parent_id = tt.contract_id and tt.status_cd = '0' and tt.store_id = t.store_id
        left join s_community on t.community_id = s_community.community_id
        where 1 =1
        LEFT JOIN (
        SELECT
        contract_id,
        IFNULL(SUM(collection_amount), 0) AS received_amount
        FROM contract_collection_detail
        GROUP BY contract_id
        ) ccd ON t.contract_id = ccd.contract_id
        -- 已有的广告表
        LEFT JOIN ad_contract_info ad on t.contract_id = ad.contract_id
        -- 新增 3 张子表关联
        LEFT JOIN contract_amount_detail detail on t.contract_id = detail.contract_id
        LEFT JOIN contract_management_share share on t.contract_id = share.contract_id
        LEFT JOIN contract_payment_status payment on t.contract_id = payment.contract_id
        where 1=1
        <if test="communityName != null and communityName != ''">
            and s_community.`name` like concat('%',#{communityName},'%')
        </if>
@@ -184,6 +366,9 @@
        <if test="contractReminderDate !=null and contractReminderDate != ''">
            and t.contract_reminder_date= #{contractReminderDate}
        </if>
        <if test="hasSupplementAgreement !=null and hasSupplementAgreement != ''">
            and t.has_supplement_agreement= #{hasSupplementAgreement}
        </if>
        order by t.create_time desc
        <if test="page != -1 and page != null ">
            limit #{page}, #{row}
@@ -196,126 +381,205 @@
        <if test="newBId != null and newBId != ''">
            ,t.b_id = #{newBId}
        </if>
        <if test="aLink !=null">
        <if test="aLink != null and aLink != ''">
            , t.a_link= #{aLink}
        </if>
        <if test="aContacts !=null">
        <if test="aContacts != null and aContacts != ''">
            , t.a_contacts= #{aContacts}
        </if>
        <if test="amount !=null and amount != ''">
        <if test="amount != null and amount != ''">
            , t.amount= #{amount}
        </if>
        <if test="contractType !=null and contractType != ''">
        <if test="contractType != null and contractType != ''">
            , t.contract_type= #{contractType}
        </if>
        <if test="storeId !=null and storeId != ''">
        <if test="storeId != null and storeId != ''">
            , t.store_id= #{storeId}
        </if>
        <if test="operator !=null and operator != ''">
        <if test="operator != null and operator != ''">
            , t.operator= #{operator}
        </if>
        <if test="signingTime !=null and signingTime != ''">
        <if test="signingTime != null and signingTime != ''">
            , t.signing_time= #{signingTime}
        </if>
        <if test="bContacts !=null">
        <if test="bContacts != null and bContacts != ''">
            , t.b_contacts= #{bContacts}
        </if>
        <if test="partyA !=null and partyA != ''">
        <if test="partyA != null and partyA != ''">
            , t.party_a= #{partyA}
        </if>
        <if test="bLink !=null">
        <if test="bLink != null and bLink != ''">
            , t.b_link= #{bLink}
        </if>
        <if test="partyB !=null and partyB != ''">
        <if test="partyB != null and partyB != ''">
            , t.party_b= #{partyB}
        </if>
        <if test="objId !=null and objId != ''">
        <if test="objId != null and objId != ''">
            , t.obj_id= #{objId}
        </if>
        <if test="objName !=null and objName != ''">
        <if test="objName != null and objName != ''">
            , t.obj_name= #{objName}
        </if>
        <if test="objPersonId !=null and objPersonId != ''">
        <if test="objPersonId != null and objPersonId != ''">
            , t.obj_person_id= #{objPersonId}
        </if>
        <if test="objPersonName !=null and objPersonName != ''">
        <if test="objPersonName != null and objPersonName != ''">
            , t.obj_person_name= #{objPersonName}
        </if>
        <if test="contractName !=null and contractName != ''">
        <if test="contractName != null and contractName != ''">
            , t.contract_name= #{contractName}
        </if>
        <if test="startTime !=null ">
        <!-- ========== 关键修复:时间字段必须判断空字符串 ========== -->
        <if test="startTime != null and startTime != ''">
            , t.start_time= #{startTime}
        </if>
        <if test="endTime !=null">
        <if test="endTime != null and endTime != ''">
            , t.end_time= #{endTime}
        </if>
        <if test="state !=null and state != ''">
        <if test="state != null and state != ''">
            , t.state= #{state}
        </if>
        <if test="stateDesc !=null and stateDesc != ''">
        <if test="stateDesc != null and stateDesc != ''">
            , t.state_desc= #{stateDesc}
        </if>
        <if test="contractCode !=null and contractCode != ''">
        <if test="contractCode != null and contractCode != ''">
            , t.contract_code= #{contractCode}
        </if>
        <if test="objType !=null and objType != ''">
        <if test="objType != null and objType != ''">
            , t.obj_type= #{objType}
        </if>
        <if test="operatorLink !=null and operatorLink != ''">
        <if test="operatorLink != null and operatorLink != ''">
            , t.operator_link= #{operatorLink}
        </if>
        <if test="partyC !=null and partyC != ''">
        <if test="partyC != null and partyC != ''">
            , t.party_c= #{partyC}
        </if>
        <if test="cLink !=null">
        <if test="cLink != null and cLink != ''">
            , t.c_link= #{cLink}
        </if>
        <if test="cContacts !=null">
        <if test="cContacts != null and cContacts != ''">
            , t.c_contacts= #{cContacts}
        </if>
        <if test="aPartyaId !=null">
        <if test="aPartyaId != null and aPartyaId != ''">
            , t.a_partya_id= #{aPartyaId}
        </if>
        <if test="bPartyaId !=null">
        <if test="bPartyaId != null and bPartyaId != ''">
            , t.b_partya_id= #{bPartyaId}
        </if>
        <if test="cPartyaId !=null">
        <if test="cPartyaId != null and cPartyaId != ''">
            , t.c_partya_id= #{cPartyaId}
        </if>
        <if test="communityId != null and communityId != ''">
            , t.community_id = #{communityId}
        </if>
        <!-- 新增字段的更新逻辑 -->
        <if test="propertyCompany !=null and propertyCompany != ''">
        <if test="propertyCompany != null and propertyCompany != ''">
            , t.property_company= #{propertyCompany}
        </if>
        <if test="contractTerm !=null and contractTerm != ''">
        <if test="contractTerm != null and contractTerm != ''">
            , t.contract_term= #{contractTerm}
        </if>
        <if test="isArchived !=null and isArchived != ''">
        <if test="isArchived != null and isArchived != ''">
            , t.is_archived= #{isArchived}
        </if>
        <if test="contractReminderDate !=null and contractReminderDate != ''">
        <!-- ========== 关键修复 ========== -->
        <if test="contractReminderDate != null and contractReminderDate != ''">
            , t.contract_reminder_date= #{contractReminderDate}
        </if>
        <if test="signatoryAddress !=null and signatoryAddress != ''">
        <if test="signatoryAddress != null and signatoryAddress != ''">
            , t.signatory_address= #{signatoryAddress}
        </if>
        <if test="contactEmail !=null and contactEmail != ''">
        <if test="contactEmail != null and contactEmail != ''">
            , t.contact_email= #{contactEmail}
        </if>
        <if test="contactWechat !=null and contactWechat != ''">
        <if test="contactWechat != null and contactWechat != ''">
            , t.contact_wechat= #{contactWechat}
        </if>
        <if test="remarks !=null and remarks != ''">
        <if test="remarks != null and remarks != ''">
            , t.remarks= #{remarks}
        </if>
        <if test="hasSupplementAgreement != null and hasSupplementAgreement != ''">
            , t.has_supplement_agreement= #{hasSupplementAgreement}
        </if>
        where 1=1
        <if test="contractId !=null and contractId != ''">
        <if test="contractId != null and contractId != ''">
            and t.contract_id= #{contractId}
        </if>
    </update>
    <insert id="saveOrUpdateAdContractInfo">
        insert into ad_contract_info (id, contract_id, ad_type, sub_type, cooperation_form,
                                      building_elevator_count, online_quantity, facility_location)
        values (#{id}, #{contractId}, #{adType}, #{subType}, #{cooperationForm},
                #{buildingElevatorCount}, #{onlineQuantity}, #{facilityLocation})
            on duplicate key update
                                 ad_type = #{adType},
                                 sub_type = #{subType},
                                 cooperation_form = #{cooperationForm},
                                 building_elevator_count = #{buildingElevatorCount},
                                 online_quantity = #{onlineQuantity},
                                 facility_location = #{facilityLocation}
    </insert>
    <insert id="saveOrUpdateContractAmountDetail">
        insert into contract_amount_detail (id, contract_id, total_contract_amount, unit_price, annual_amount, total_amount,
                                            settlement_method, settlement_amount, fee_type, account_info, main_meter_no, sub_meter_no,
                                            last_month_reading, current_month_reading, current_period_consumption, electricity_unit_price,
                                            electricity_fee, deposit, settlement_cycle, payment_remark)
        values (#{id}, #{contractId}, #{totalContractAmount}, #{unitPrice}, #{annualAmount}, #{totalAmount},
                #{settlementMethod}, #{settlementAmount}, #{feeType}, #{accountInfo}, #{mainMeterNo}, #{subMeterNo},
                #{lastMonthReading}, #{currentMonthReading}, #{currentPeriodConsumption}, #{electricityUnitPrice},
                #{electricityFee}, #{deposit}, #{settlementCycle}, #{paymentRemark})
            on duplicate key update
                                 total_contract_amount = #{totalContractAmount},
                                 unit_price = #{unitPrice},
                                 annual_amount = #{annualAmount},
                                 total_amount = #{totalAmount},
                                 settlement_method = #{settlementMethod},
                                 settlement_amount = #{settlementAmount},
                                 fee_type = #{feeType},
                                 account_info = #{accountInfo},
                                 main_meter_no = #{mainMeterNo},
                                 sub_meter_no = #{subMeterNo},
                                 last_month_reading = #{lastMonthReading},
                                 current_month_reading = #{currentMonthReading},
                                 current_period_consumption = #{currentPeriodConsumption},
                                 electricity_unit_price = #{electricityUnitPrice},
                                 electricity_fee = #{electricityFee},
                                 deposit = #{deposit},
                                 settlement_cycle = #{settlementCycle},
                                 payment_remark = #{paymentRemark}
    </insert>
    <insert id="saveOrUpdateContractManagementShare">
        insert into contract_management_share (id, contract_id, management_ratio, our_company_amount, our_committee_share, our_company_receivable)
        values (#{id}, #{contractId}, #{managementRatio}, #{ourCompanyAmount}, #{ourCommitteeShare}, #{ourCompanyReceivable})
            on duplicate key update
                                 management_ratio = #{managementRatio},
                                 our_company_amount = #{ourCompanyAmount},
                                 our_committee_share = #{ourCommitteeShare},
                                 our_company_receivable = #{ourCompanyReceivable}
    </insert>
    <insert id="saveOrUpdateContractPaymentStatus">
        insert into contract_payment_status (id, contract_id, payment_status, receivable_amount, received_amount, unpaid_amount,
                                             special_discount, collection_progress, final_collection_deadline, collection_reminder_status, remark)
        values (#{id}, #{contractId}, #{paymentStatus}, #{receivableAmount}, #{receivedAmount}, #{unpaidAmount},
                #{specialDiscount}, #{collectionProgress}, #{finalCollectionDeadline}, #{collectionReminderStatus}, #{remark})
            on duplicate key update
                                 payment_status = #{paymentStatus},
                                 receivable_amount = #{receivableAmount},
                                 received_amount = #{receivedAmount},
                                 unpaid_amount = #{unpaidAmount},
                                 special_discount = #{specialDiscount},
                                 collection_progress = #{collectionProgress},
                                 final_collection_deadline = #{finalCollectionDeadline},
                                 collection_reminder_status = #{collectionReminderStatus},
                                 remark = #{remark}
    </insert>
    <!-- 查询合同管理数量 add by wuxw 2018-07-03 -->
    <select id="queryContractsCount" parameterType="Map" resultType="Map">
@@ -458,6 +722,9 @@
        <if test="contractReminderDate !=null and contractReminderDate != ''">
            and t.contract_reminder_date= #{contractReminderDate}
        </if>
        <if test="hasSupplementAgreement !=null and hasSupplementAgreement != ''">
            and t.has_supplement_agreement= #{hasSupplementAgreement}
        </if>
    </select>
    <select id="queryContractsByOwnerIds" parameterType="Map" resultType="Map">
java110-interface/src/main/java/com/java110/intf/store/IContractInnerServiceSMO.java
@@ -27,9 +27,14 @@
    @RequestMapping(value = "/saveContract", method = RequestMethod.POST)
    public int saveContract(@RequestBody ContractPo contractPo);
    public int saveContract(@RequestBody ContractDto contractPo);
    @RequestMapping(value = "/updateContract", method = RequestMethod.POST)
    public int updateContract(@RequestBody ContractPo contractPo);
    @RequestMapping(value = "/updateContractToDto", method = RequestMethod.POST)
    public int updateContract(@RequestBody ContractDto contractPo);
    @RequestMapping(value = "/deleteContract", method = RequestMethod.POST)
    public int deleteContract(@RequestBody ContractPo contractPo);
java110-utils/src/main/java/com/java110/utils/util/BeanConvertUtil.java
@@ -69,17 +69,13 @@
     * @return 目标对象
     */
    public static <T1, T2> T2 covertBean(T1 orgBean, T2 dstBean) {
        if(orgBean == null){
        if (orgBean == null) {
            return dstBean;
        }
        try {
            //BeanUtils.copyProperties(dstBean, orgBean);
            if (orgBean instanceof Map) {
                BeanMap beanMap = BeanMap.create(dstBean);
                //beanMap.putAll((Map)orgBean);
                objectFieldsPutMap(dstBean, beanMap, (Map) orgBean);
                objectFieldsPutMap(dstBean, beanMap, (Map<String, Object>) orgBean);
                return dstBean;
            }
            final BeanCopier beanCopier = BeanCopier.create(orgBean.getClass(), dstBean.getClass(), true);
@@ -92,23 +88,44 @@
    }
    private static void objectFieldsPutMap(Object dstBean, BeanMap beanMap, Map<String, Object> orgMap) {
        //Field[] fields = dstBean.getClass().getDeclaredFields();
        Field[] fields = FieldUtils.getAllFields(dstBean.getClass());
        for (Field field : fields) {
            if (!orgMap.containsKey(field.getName())) {
            String fieldName = field.getName();
            if (!orgMap.containsKey(fieldName)) {
                continue;
            }
            Class<?> dstClass = field.getType();
            //System.out.println("字段类型" + dstClass);
            Object value = orgMap.get(field.getName());
            if(value == null){
            Class<?> targetType = field.getType();
            Object value = orgMap.get(fieldName);
            if (value == null) {
                continue;
            }
            //String 转date
            Object tmpValue = Java110Converter.getValue(value, dstClass);
            //System.out.println("tmpValue"+value.toString());
            beanMap.put(field.getName(), tmpValue);
            try {
                // ✅ 核心修复:只要是 Map,且目标不是基础类型,就递归转 DTO
                if (value instanceof Map) {
                    // 排除基础类型、包装类、String、Date
                    boolean isBasicType = targetType.isPrimitive()
                            || Number.class.isAssignableFrom(targetType)
                            || String.class == targetType
                            || Boolean.class == targetType
                            || Date.class == targetType;
                    if (!isBasicType) {
                        // 递归创建并转换嵌套对象
                        Object nestedObj = targetType.newInstance();
                        objectFieldsPutMap(nestedObj, BeanMap.create(nestedObj), (Map<String, Object>) value);
                        value = nestedObj;
                    }
                }
                // 原有类型转换(String->Date等)
                Object convertedValue = Java110Converter.getValue(value, targetType);
                beanMap.put(fieldName, convertedValue);
            } catch (Exception ignored) {
                // 转换失败不抛错,保持原有逻辑兼容
            }
        }
    }
java110-utils/src/main/java/com/java110/utils/util/DateUtil.java
@@ -10,6 +10,7 @@
import java.time.LocalDateTime;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.*;
/**
@@ -26,7 +27,24 @@
        LocalDate date = LocalDate.of(year, month, 1); // 创建一个日期对象,年份和月份为指定值,日期为1号
        return date.lengthOfMonth(); // 返回该月的天数
    }
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    public static boolean isValidDate(String dateStr) {
        // ✅ 关键修复:先彻底去除前后空白(包括空格、制表符、换行)
        if (dateStr == null || dateStr.isEmpty()) {
            return true;
        }
        // 去掉所有空白后再校验
        String cleanDate = dateStr.trim();
        try {
            LocalDate.parse(cleanDate, DATE_FORMATTER);
            return true;
        } catch (DateTimeParseException e) {
            return false;
        }
    }
    private static Map<String, SimpleDateFormat> formats = new HashMap();
    public static final String DATE_FORMATE_STRING_DEFAULT = "yyyyMMddHHmmss";
    public static final String DATE_FORMATE_STRING_A = "yyyy-MM-dd HH:mm:ss";
service-api/src/main/java/com/java110/api/importData/adapt/ImportContractCleaningAdapt.java
@@ -106,12 +106,13 @@
    }
    private void setCcds(ContractDto contractDto, Object[] os) {
        List<ContractCollectionDetailDto> contractCollectionDetailDtos = new ArrayList<>();
        for (int j = 0; j < 10; j++) {
            try {
                int index = j * 10 + 53;
                if (os[index] == null || os[index].equals("")) {
                    return;
                }
//                if (os[index] == null || os[index].equals("")) {
//                    return;
//                }
                ContractCollectionDetailDto ccd = new ContractCollectionDetailDto();
                ccd.setContractId(contractDto.getContractId());
@@ -126,11 +127,12 @@
                ccd.setCollectionAmount(defaultValue(os[qbl + index + 7]));
                ccd.setSpecialReduction(defaultValue(os[qbl + index + 8]));
                ccd.setUnpaidMoney(defaultValue(os[qbl + index + 9]));
                contractDto.getContractCollectionDetailDtos().add(ccd);
                contractCollectionDetailDtos.add(ccd);
            } catch (Exception e){
                continue;
            }
        }
        contractDto.setContractCollectionDetailDtos(contractCollectionDetailDtos);
    }
    private void setCps(ContractDto contractDto, Object[] os) {
service-api/src/main/java/com/java110/api/importData/adapt/ImportReportMainDataV2CleaningAdapt.java
@@ -41,7 +41,8 @@
     */
    private void getOwnerRooms(Workbook workbook, List<Object[]> ownerRoomDtos, ComponentValidateResult result) throws ParseException {
        Sheet sheet = null;
        sheet = ImportExcelUtils.getSheet(workbook, "荣顺苑签报单");
        String sheetName = "荣顺苑签报单";
        sheet = ImportExcelUtils.getSheet(workbook, sheetName);
        List<Object[]> oList = ImportExcelUtils.listFromSheet(sheet);
        ImportOwnerRoomDto importOwnerRoomDto = null;
        for (int osIndex = 0; osIndex < oList.size(); osIndex++) {
@@ -50,7 +51,11 @@
            }
            Object[] os = oList.get(osIndex);
            if (Vtil.defaultValue(os[2]) == null) {
            try {
                if (Vtil.defaultValue(os[2]) == null) {
                    continue;
                }
            }catch (Exception e){
                continue;
            }
            ownerRoomDtos.add(os);
service-community/src/main/java/com/java110/community/smo/impl/ImportOwnerRoomInnerServiceSMOImpl.java
@@ -7,6 +7,7 @@
import com.java110.dto.community.CommunityDto;
import com.java110.dto.floor.FloorDto;
import com.java110.dto.importData.OwnerCollectionDto;
import com.java110.dto.importData.Vtil;
import com.java110.dto.owner.OwnerAppUserDto;
import com.java110.dto.room.RoomDto;
import com.java110.dto.unit.UnitDto;
@@ -427,6 +428,7 @@
            roomPo.setDoorRoomNum(importOwnerRoomDto.getDoorRoomNum());
            roomPo.setPropertyType(importOwnerRoomDto.getPropertyType());
            roomPo.setPropertyAddress(importOwnerRoomDto.getPropertyAddress());
            roomPo.setRemark(importOwnerRoomDto.getRemark());
            roomPo.setHouseCertificateNo(importOwnerRoomDto.getHouseCertificateNo());
            roomPo.setRoadName(importOwnerRoomDto.getRoadName());
            roomPo.setSellDate(importOwnerRoomDto.getSellDate());
@@ -482,6 +484,9 @@
        UnitDto unitDto = new UnitDto();
        unitDto.setCommunityId(importOwnerRoomDto.getCommunityId());
        if (Vtil.defaultValue(importOwnerRoomDto.getUnitNum()) == null) {
            importOwnerRoomDto.setUnitNum("空");
        }
        unitDto.setUnitNum(importOwnerRoomDto.getUnitNum());
        unitDto.setFloorId(floorId);
        List<UnitDto> unitDtos = unitV1InnerServiceSMOImpl.queryUnits(unitDto);
service-fee/src/main/java/com/java110/fee/api/MaintenancePaymentApi.java
@@ -1,6 +1,7 @@
package com.java110.fee.api;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.fee.bmo.importFeeDetail.IDeleteImportFeeDetailBMO;
import com.java110.fee.bmo.importFeeDetail.IGetImportFeeDetailBMO;
import com.java110.fee.bmo.importFeeDetail.ISaveImportFeeDetailBMO;
@@ -40,11 +41,12 @@
    @RequestMapping(value = "/saveMaintenancePayment", method = RequestMethod.POST)
    public ResponseEntity<String> saveMaintenancePayment(@RequestBody JSONObject reqJson) {
        // 核心参数校验(id为主键,新增时非必传,这里校验核心业务字段)
        Assert.hasKeyAndValue(reqJson, "flowNumber", "请求报文中未包含流转编号");
        Assert.hasKeyAndValue(reqJson, "projectCode", "请求报文中未包含项目编码");
//        Assert.hasKeyAndValue(reqJson, "flowNumber", "请求报文中未包含流转编号");
//        Assert.hasKeyAndValue(reqJson, "projectCode", "请求报文中未包含项目编码");
        // 将JSON参数转换为实体类
        MaintenancePayment maintenancePayment = BeanConvertUtil.covertBean(reqJson, MaintenancePayment.class);
        maintenancePayment.setId(GenerateCodeFactory.getGeneratorId("43"));
        return saveImportFeeDetailBMOImpl.save(maintenancePayment);
    }
service-fee/src/main/java/com/java110/fee/api/MpPaymentRecordApi.java
@@ -50,6 +50,10 @@
        MpPaymentRecord mpPaymentRecord = BeanConvertUtil.covertBean(reqJson, MpPaymentRecord.class);
        // 由于BMO接口使用MaintenancePayment,这里需要做适配转换
        // 注意:这里需要根据实际情况调整,可能需要转换器
        MpPaymentRecord mpPaymentRecord1 = new MpPaymentRecord();
        mpPaymentRecord1.setMpId(reqJson.getString("mpId"));
        ResponseEntity<String> stringResponseEntity = getImportFeeDetailBMOImpl.get(mpPaymentRecord1);
        mpPaymentRecord.setPrintCount((JSONObject.parseObject(stringResponseEntity.getBody()).getInteger("total") + 1) + "");
        return saveImportFeeDetailBMOImpl.save(mpPaymentRecord);
    }
service-fee/src/main/java/com/java110/fee/api/contract/ContractAmountDetailApi.java
@@ -1,235 +1,235 @@
package com.java110.fee.api.contract;
import com.alibaba.fastjson.JSONObject;
import com.java110.dto.contract.ContractAmountDetailDto;
import com.java110.utils.util.Assert;
import com.java110.utils.util.BeanConvertUtil;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 合同金额明细信息接口
 * 适配 contract_amount_detail 表
 * @author dev
 * @date 2025-12-24
 */
@RestController
@RequestMapping(value = "/contractAmountDetail")
public class ContractAmountDetailApi {
    @Autowired
    protected SqlSessionTemplate sqlSessionTemplate;
    /**
     * 保存合同金额明细信息
     *
     * @param reqJson 请求参数
     * @return 响应结果
     * @serviceCode /contractAmountDetail/saveContractAmountDetail
     * @path /app/contractAmountDetail/saveContractAmountDetail
     */
    @RequestMapping(value = "/saveContractAmountDetail", method = RequestMethod.POST)
    public ResponseEntity<String> saveContractAmountDetail(@RequestBody JSONObject reqJson) {
        // 核心参数校验
        Assert.hasKeyAndValue(reqJson, "contractId", "请求报文中未包含合同ID");
        // 转换为DTO
        ContractAmountDetailDto dto = BeanConvertUtil.covertBean(reqJson, ContractAmountDetailDto.class);
        // 调用Mapper保存方法
        int insert = sqlSessionTemplate.insert("contractAmountDetailDaoImpl.saveContractAmountDetail",
                BeanConvertUtil.beanCovertMap(dto));
        // 构造响应结果
        JSONObject resJson = new JSONObject();
        if (insert > 0) {
            resJson.put("code", "0000");
            resJson.put("msg", "保存合同金额明细信息成功");
        } else {
            resJson.put("code", "0001");
            resJson.put("msg", "保存合同金额明细信息失败");
        }
        resJson.put("count", insert);
        return ResponseEntity.ok(resJson.toJSONString());
    }
    /**
     * 重载保存方法(入参为DTO)
     */
    public ResponseEntity<String> saveContractAmountDetail(ContractAmountDetailDto dto) {
        int insert = sqlSessionTemplate.insert("contractAmountDetailDaoImpl.saveContractAmountDetail",
                BeanConvertUtil.beanCovertMap(dto));
        JSONObject resJson = new JSONObject();
        if (insert > 0) {
            resJson.put("code", "0000");
            resJson.put("msg", "保存合同金额明细信息成功");
        } else {
            resJson.put("code", "0001");
            resJson.put("msg", "保存合同金额明细信息失败");
        }
        resJson.put("count", insert);
        return ResponseEntity.ok(resJson.toJSONString());
    }
    /**
     * 修改合同金额明细信息
     *
     * @param reqJson 请求参数
     * @return 响应结果
     * @serviceCode /contractAmountDetail/updateContractAmountDetail
     * @path /app/contractAmountDetail/updateContractAmountDetail
     */
    @RequestMapping(value = "/updateContractAmountDetail", method = RequestMethod.POST)
    public ResponseEntity<String> updateContractAmountDetail(@RequestBody JSONObject reqJson) {
        // 主键/合同ID校验(二选一)
        Assert.hasKey(reqJson, "id", "请求报文中未包含主键ID");
        Assert.hasKey(reqJson, "contractId", "请求报文中未包含合同ID");
        ContractAmountDetailDto dto = BeanConvertUtil.covertBean(reqJson, ContractAmountDetailDto.class);
        // 调用Mapper修改方法
        int update = sqlSessionTemplate.update("contractAmountDetailDaoImpl.updateContractAmountDetail",
                BeanConvertUtil.beanCovertMap(dto));
        JSONObject resJson = new JSONObject();
        if (update > 0) {
            resJson.put("code", "0000");
            resJson.put("msg", "修改合同金额明细信息成功");
        } else {
            resJson.put("code", "0001");
            resJson.put("msg", "修改合同金额明细信息失败,未找到对应记录");
        }
        resJson.put("count", update);
        return ResponseEntity.ok(resJson.toJSONString());
    }
    /**
     * 分页查询合同金额明细信息列表
     *
     * @param id                      主键ID(可选)
     * @param contractId              合同ID(可选)
     * @param totalContractAmount     合同总金额(可选)
     * @param unitPrice               单价(可选)
     * @param accountInfo             账户信息(可选)
     * @param mainMeterNo             主表编号(可选)
     * @param paymentRemark           付款备注(可选)
     * @param page                    页码(默认1)
     * @param row                     每页条数(默认10)
     * @return 响应结果
     * @serviceCode /contractAmountDetail/queryContractAmountDetail
     * @path /app/contractAmountDetail/queryContractAmountDetail
     */
    @RequestMapping(value = "/queryContractAmountDetail", method = RequestMethod.GET)
    public ResponseEntity<String> queryContractAmountDetail(
            @RequestParam(value = "id", required = false) String id,
            @RequestParam(value = "contractId", required = false) String contractId,
            @RequestParam(value = "totalContractAmount", required = false) String totalContractAmount,
            @RequestParam(value = "unitPrice", required = false) String unitPrice,
            @RequestParam(value = "accountInfo", required = false) String accountInfo,
            @RequestParam(value = "mainMeterNo", required = false) String mainMeterNo,
            @RequestParam(value = "paymentRemark", required = false) String paymentRemark,
            @RequestParam(value = "page", defaultValue = "1") int page,
            @RequestParam(value = "row", defaultValue = "10") int row) {
        // 封装查询参数
        ContractAmountDetailDto queryDto = new ContractAmountDetailDto();
        queryDto.setId(Integer.parseInt(id));
        queryDto.setContractId(contractId);
        queryDto.setTotalContractAmount(totalContractAmount);
        queryDto.setUnitPrice(unitPrice);
        queryDto.setAccountInfo(accountInfo);
        queryDto.setMainMeterNo(mainMeterNo);
        queryDto.setPaymentRemark(paymentRemark);
        queryDto.setPage((page - 1) * row);
        queryDto.setRow(row);
        // 查询列表数据
        List<Map<String, Object>> list = sqlSessionTemplate.selectList(
                "contractAmountDetailDaoImpl.getContractAmountDetail",
                BeanConvertUtil.beanCovertMap(queryDto));
        // 查询总数
        Object total = ((HashMap) sqlSessionTemplate.selectOne(
                "contractAmountDetailDaoImpl.queryContractAmountDetailsCount",
                BeanConvertUtil.beanCovertMap(queryDto))).get("count");
        // 构造分页响应
        JSONObject resJson = new JSONObject();
        resJson.put("code", "0000");
        resJson.put("msg", "查询合同金额明细信息成功");
        resJson.put("page", page);
        resJson.put("row", row);
        resJson.put("total", total);
        resJson.put("data", list);
        return ResponseEntity.ok(resJson.toJSONString());
    }
    /**
     * 根据ID查询单条合同金额明细信息
     *
     * @param id 主键ID
     * @return 响应结果
     * @serviceCode /contractAmountDetail/getContractAmountDetailById
     * @path /app/contractAmountDetail/getContractAmountDetailById
     */
    @RequestMapping(value = "/getContractAmountDetailById", method = RequestMethod.GET)
    public ResponseEntity<String> getContractAmountDetailById(@RequestParam(value = "id") Integer id) {
        // 主键校验
        Assert.notNull(id, "主键ID不能为空");
        ContractAmountDetailDto queryDto = new ContractAmountDetailDto();
        queryDto.setId(id);
        // 查询单条数据
        Map<String, Object> result = sqlSessionTemplate.selectOne(
                "contractAmountDetailDaoImpl.getContractAmountDetail",
                BeanConvertUtil.beanCovertMap(queryDto));
        JSONObject resJson = new JSONObject();
        if (result != null) {
            resJson.put("code", "0000");
            resJson.put("msg", "查询合同金额明细信息成功");
            resJson.put("data", result);
        } else {
            resJson.put("code", "0001");
            resJson.put("msg", "未找到对应合同金额明细记录");
        }
        return ResponseEntity.ok(resJson.toJSONString());
    }
    /**
     * 根据合同ID查询合同金额明细信息
     *
     * @param contractId 合同ID
     * @return 响应结果
     * @serviceCode /contractAmountDetail/getContractAmountDetailByContractId
     * @path /app/contractAmountDetail/getContractAmountDetailByContractId
     */
    @RequestMapping(value = "/getContractAmountDetailByContractId", method = RequestMethod.GET)
    public ResponseEntity<String> getContractAmountDetailByContractId(@RequestParam(value = "contractId") String contractId) {
        Assert.hasLength(contractId, "合同ID不能为空");
        ContractAmountDetailDto queryDto = new ContractAmountDetailDto();
        queryDto.setContractId(contractId);
        List<Map<String, Object>> result = sqlSessionTemplate.selectList(
                "contractAmountDetailDaoImpl.getContractAmountDetail",
                BeanConvertUtil.beanCovertMap(queryDto));
        JSONObject resJson = new JSONObject();
        resJson.put("code", "0000");
        resJson.put("msg", "查询合同金额明细信息成功");
        resJson.put("data", result);
        return ResponseEntity.ok(resJson.toJSONString());
    }
}
//package com.java110.fee.api.contract;
//
//import com.alibaba.fastjson.JSONObject;
//import com.java110.dto.contract.ContractAmountDetailDto;
//import com.java110.utils.util.Assert;
//import com.java110.utils.util.BeanConvertUtil;
//import org.mybatis.spring.SqlSessionTemplate;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.http.ResponseEntity;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
///**
// * 合同金额明细信息接口
// * 适配 contract_amount_detail 表
// * @author dev
// * @date 2025-12-24
// */
////@RestController
//@RequestMapping(value = "/contractAmountDetaila")
//public class ContractAmountDetailApi {
//
//    @Autowired
//    protected SqlSessionTemplate sqlSessionTemplate;
//
//    /**
//     * 保存合同金额明细信息
//     *
//     * @param reqJson 请求参数
//     * @return 响应结果
//     * @serviceCode /contractAmountDetail/saveContractAmountDetail
//     * @path /app/contractAmountDetail/saveContractAmountDetail
//     */
//    @RequestMapping(value = "/saveContractAmountDetail", method = RequestMethod.POST)
//    public ResponseEntity<String> saveContractAmountDetail(@RequestBody JSONObject reqJson) {
//        // 核心参数校验
//        Assert.hasKeyAndValue(reqJson, "contractId", "请求报文中未包含合同ID");
//
//        // 转换为DTO
//        ContractAmountDetailDto dto = BeanConvertUtil.covertBean(reqJson, ContractAmountDetailDto.class);
//
//        // 调用Mapper保存方法
//        int insert = sqlSessionTemplate.insert("contractAmountDetailDaoImpl.saveContractAmountDetail",
//                BeanConvertUtil.beanCovertMap(dto));
//
//        // 构造响应结果
//        JSONObject resJson = new JSONObject();
//        if (insert > 0) {
//            resJson.put("code", "0000");
//            resJson.put("msg", "保存合同金额明细信息成功");
//        } else {
//            resJson.put("code", "0001");
//            resJson.put("msg", "保存合同金额明细信息失败");
//        }
//        resJson.put("count", insert);
//        return ResponseEntity.ok(resJson.toJSONString());
//    }
//
//    /**
//     * 重载保存方法(入参为DTO)
//     */
//    public ResponseEntity<String> saveContractAmountDetail(ContractAmountDetailDto dto) {
//        int insert = sqlSessionTemplate.insert("contractAmountDetailDaoImpl.saveContractAmountDetail",
//                BeanConvertUtil.beanCovertMap(dto));
//
//        JSONObject resJson = new JSONObject();
//        if (insert > 0) {
//            resJson.put("code", "0000");
//            resJson.put("msg", "保存合同金额明细信息成功");
//        } else {
//            resJson.put("code", "0001");
//            resJson.put("msg", "保存合同金额明细信息失败");
//        }
//        resJson.put("count", insert);
//        return ResponseEntity.ok(resJson.toJSONString());
//    }
//
//    /**
//     * 修改合同金额明细信息
//     *
//     * @param reqJson 请求参数
//     * @return 响应结果
//     * @serviceCode /contractAmountDetail/updateContractAmountDetail
//     * @path /app/contractAmountDetail/updateContractAmountDetail
//     */
//    @RequestMapping(value = "/updateContractAmountDetail", method = RequestMethod.POST)
//    public ResponseEntity<String> updateContractAmountDetail(@RequestBody JSONObject reqJson) {
//        // 主键/合同ID校验(二选一)
//        Assert.hasKey(reqJson, "id", "请求报文中未包含主键ID");
//        Assert.hasKey(reqJson, "contractId", "请求报文中未包含合同ID");
//
//        ContractAmountDetailDto dto = BeanConvertUtil.covertBean(reqJson, ContractAmountDetailDto.class);
//
//        // 调用Mapper修改方法
//        int update = sqlSessionTemplate.update("contractAmountDetailDaoImpl.updateContractAmountDetail",
//                BeanConvertUtil.beanCovertMap(dto));
//
//        JSONObject resJson = new JSONObject();
//        if (update > 0) {
//            resJson.put("code", "0000");
//            resJson.put("msg", "修改合同金额明细信息成功");
//        } else {
//            resJson.put("code", "0001");
//            resJson.put("msg", "修改合同金额明细信息失败,未找到对应记录");
//        }
//        resJson.put("count", update);
//        return ResponseEntity.ok(resJson.toJSONString());
//    }
//
//    /**
//     * 分页查询合同金额明细信息列表
//     *
//     * @param id                      主键ID(可选)
//     * @param contractId              合同ID(可选)
//     * @param totalContractAmount     合同总金额(可选)
//     * @param unitPrice               单价(可选)
//     * @param accountInfo             账户信息(可选)
//     * @param mainMeterNo             主表编号(可选)
//     * @param paymentRemark           付款备注(可选)
//     * @param page                    页码(默认1)
//     * @param row                     每页条数(默认10)
//     * @return 响应结果
//     * @serviceCode /contractAmountDetail/queryContractAmountDetail
//     * @path /app/contractAmountDetail/queryContractAmountDetail
//     */
//    @RequestMapping(value = "/queryContractAmountDetail", method = RequestMethod.GET)
//    public ResponseEntity<String> queryContractAmountDetail(
//            @RequestParam(value = "id", required = false) String id,
//            @RequestParam(value = "contractId", required = false) String contractId,
//            @RequestParam(value = "totalContractAmount", required = false) String totalContractAmount,
//            @RequestParam(value = "unitPrice", required = false) String unitPrice,
//            @RequestParam(value = "accountInfo", required = false) String accountInfo,
//            @RequestParam(value = "mainMeterNo", required = false) String mainMeterNo,
//            @RequestParam(value = "paymentRemark", required = false) String paymentRemark,
//            @RequestParam(value = "page", defaultValue = "1") int page,
//            @RequestParam(value = "row", defaultValue = "10") int row) {
//
//        // 封装查询参数
//        ContractAmountDetailDto queryDto = new ContractAmountDetailDto();
//        queryDto.setId(Integer.parseInt(id));
//        queryDto.setContractId(contractId);
//        queryDto.setTotalContractAmount(totalContractAmount);
//        queryDto.setUnitPrice(unitPrice);
//        queryDto.setAccountInfo(accountInfo);
//        queryDto.setMainMeterNo(mainMeterNo);
//        queryDto.setPaymentRemark(paymentRemark);
//        queryDto.setPage((page - 1) * row);
//        queryDto.setRow(row);
//
//        // 查询列表数据
//        List<Map<String, Object>> list = sqlSessionTemplate.selectList(
//                "contractAmountDetailDaoImpl.getContractAmountDetail",
//                BeanConvertUtil.beanCovertMap(queryDto));
//
//        // 查询总数
//        Object total = ((HashMap) sqlSessionTemplate.selectOne(
//                "contractAmountDetailDaoImpl.queryContractAmountDetailsCount",
//                BeanConvertUtil.beanCovertMap(queryDto))).get("count");
//
//        // 构造分页响应
//        JSONObject resJson = new JSONObject();
//        resJson.put("code", "0000");
//        resJson.put("msg", "查询合同金额明细信息成功");
//        resJson.put("page", page);
//        resJson.put("row", row);
//        resJson.put("total", total);
//        resJson.put("data", list);
//
//        return ResponseEntity.ok(resJson.toJSONString());
//    }
//
//    /**
//     * 根据ID查询单条合同金额明细信息
//     *
//     * @param id 主键ID
//     * @return 响应结果
//     * @serviceCode /contractAmountDetail/getContractAmountDetailById
//     * @path /app/contractAmountDetail/getContractAmountDetailById
//     */
//    @RequestMapping(value = "/getContractAmountDetailById", method = RequestMethod.GET)
//    public ResponseEntity<String> getContractAmountDetailById(@RequestParam(value = "id") Integer id) {
//        // 主键校验
//        Assert.notNull(id, "主键ID不能为空");
//
//        ContractAmountDetailDto queryDto = new ContractAmountDetailDto();
//        queryDto.setId(id);
//
//        // 查询单条数据
//        Map<String, Object> result = sqlSessionTemplate.selectOne(
//                "contractAmountDetailDaoImpl.getContractAmountDetail",
//                BeanConvertUtil.beanCovertMap(queryDto));
//
//        JSONObject resJson = new JSONObject();
//        if (result != null) {
//            resJson.put("code", "0000");
//            resJson.put("msg", "查询合同金额明细信息成功");
//            resJson.put("data", result);
//        } else {
//            resJson.put("code", "0001");
//            resJson.put("msg", "未找到对应合同金额明细记录");
//        }
//
//        return ResponseEntity.ok(resJson.toJSONString());
//    }
//
//    /**
//     * 根据合同ID查询合同金额明细信息
//     *
//     * @param contractId 合同ID
//     * @return 响应结果
//     * @serviceCode /contractAmountDetail/getContractAmountDetailByContractId
//     * @path /app/contractAmountDetail/getContractAmountDetailByContractId
//     */
//    @RequestMapping(value = "/getContractAmountDetailByContractId", method = RequestMethod.GET)
//    public ResponseEntity<String> getContractAmountDetailByContractId(@RequestParam(value = "contractId") String contractId) {
//        Assert.hasLength(contractId, "合同ID不能为空");
//
//        ContractAmountDetailDto queryDto = new ContractAmountDetailDto();
//        queryDto.setContractId(contractId);
//
//        List<Map<String, Object>> result = sqlSessionTemplate.selectList(
//                "contractAmountDetailDaoImpl.getContractAmountDetail",
//                BeanConvertUtil.beanCovertMap(queryDto));
//
//        JSONObject resJson = new JSONObject();
//        resJson.put("code", "0000");
//        resJson.put("msg", "查询合同金额明细信息成功");
//        resJson.put("data", result);
//
//        return ResponseEntity.ok(resJson.toJSONString());
//    }
//}
service-fee/src/main/java/com/java110/fee/api/contract/ContractCollectionDetailApi.java
@@ -4,8 +4,10 @@
import com.java110.dto.contract.ContractCollectionDetailDto;
import com.java110.utils.util.Assert;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.vo.ResultVo;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@@ -110,6 +112,29 @@
        return ResponseEntity.ok(resJson.toJSONString());
    }
    @RequestMapping(value = "/deleteContractCollectionDetail", method = RequestMethod.POST)
    public ResponseEntity<String> deleteContractCollectionDetail(@RequestBody JSONObject reqJson) {
        // 主键/合同ID校验(二选一)
        Assert.hasKey(reqJson, "id", "请求报文中未包含主键ID");
//        Assert.hasKey(reqJson, "contractId", "请求报文中未包含合同ID");
        ContractCollectionDetailDto dto = BeanConvertUtil.covertBean(reqJson, ContractCollectionDetailDto.class);
        // 调用Mapper修改方法
        int update = sqlSessionTemplate.delete("contractCollectionDetailDaoImpl.deleteContractCollectionDetail",
                BeanConvertUtil.beanCovertMap(dto));
        JSONObject resJson = new JSONObject();
        if (update > 0) {
            resJson.put("code", "0000");
            resJson.put("msg", "删除合同收款明细信息成功");
        } else {
            resJson.put("code", "0001");
            resJson.put("msg", "删除合同收款明细信息失败,未找到对应记录");
        }
        resJson.put("count", update);
        return ResponseEntity.ok(resJson.toJSONString());
    }
    /**
     * 分页查询合同收款明细信息列表
     *
@@ -169,25 +194,29 @@
        }
        // 查询列表数据(MyBatis自动识别String[]并遍历)
        List<Map<String, Object>> list = sqlSessionTemplate.selectList(
        List<ContractCollectionDetailDto> list = BeanConvertUtil.covertBeanList(sqlSessionTemplate.selectList(
                "contractCollectionDetailDaoImpl.getContractCollectionDetail",
                BeanConvertUtil.beanCovertMap(queryDto));
                BeanConvertUtil.beanCovertMap(queryDto)), ContractCollectionDetailDto.class);
        // 查询总数
        Object total = ((HashMap) sqlSessionTemplate.selectOne(
                "contractCollectionDetailDaoImpl.queryContractCollectionDetailCount",
                BeanConvertUtil.beanCovertMap(queryDto))).get("count");
        // 构造分页响应
        JSONObject resJson = new JSONObject();
        resJson.put("code", "0000");
        resJson.put("msg", "查询合同收款明细信息成功");
        resJson.put("page", page);
        resJson.put("row", row);
        resJson.put("total", total);
        resJson.put("data", list);
        return ResponseEntity.ok(resJson.toJSONString());
        // 构造分页响应
        ResultVo resultVo = new ResultVo();
        resultVo.setCode(0000);
        resultVo.setMsg("查询合同收款明细信息成功");
        resultVo.setPage(page);
        resultVo.setRows(row);
        resultVo.setTotal(Integer.parseInt(total.toString()));
        resultVo.setData(list);
//        ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) payFeeAuditDto.getRow()), count, payFeeAuditDtos);
        ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK);
        return responseEntity;
    }
    /**
service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeePropertyCmd.java
@@ -27,7 +27,6 @@
import com.java110.utils.util.DateUtil;
import com.java110.vo.FeeQueryParams;
import com.java110.vo.ResultVo;
import com.sun.org.apache.regexp.internal.RE;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeeWriteOrderCmd.java
@@ -59,15 +59,17 @@
            List<Map> result = reportFeeInnerServiceSMOImpl.repostPaidInFeeByWhiteOrder(feeQueryParams);
            String[][] reportList = new String[feeQueryParams.getRow()!=null?feeQueryParams.getRow():100][];
            for (int i = 0; i < result.size(); i++) {
                Map map = result.get(i);
                String[] strings = new String[29];
                for (int j = 1; j <= 27; j++) {
                    if(map.containsKey("row"+j)){
                        strings[j-1] = map.get("row"+j).toString();
            if (!result.get(0).get("count").toString().equals("0")) {
                for (int i = 0; i < result.size(); i++) {
                    Map map = result.get(i);
                    String[] strings = new String[29];
                    for (int j = 1; j <= 27; j++) {
                        if(map.containsKey("row"+j)){
                            strings[j-1] = map.get("row"+j).toString();
                        }
                    }
                    reportList[i] = strings;
                }
                reportList[i] = strings;
            }
        FeeDetailDto feeDetailDto = new FeeDetailDto();
            feeDetailDto.setCommunityId(reqJson.getString("communityId"));
service-fee/src/main/java/com/java110/fee/dao/impl/FeeConfigServiceDaoImpl.java
@@ -83,6 +83,11 @@
    public List<Map> getFeeConfigInfo(Map info) throws DAOException {
        logger.debug("查询费用配置信息 入参 info : {}", info);
        List<Map> infos = sqlSessionTemplate.selectList("feeConfigServiceDaoImpl.getFeeConfigInfo", info);
        for (Map map : infos) {
            if ((map.get("fee_type_cd").toString().equals("630000003") || map.get("fee_type_cd").toString().equals("630000004")) && map.get("computingFormula").toString().equals("1001")) {
                map.put("computingFormulaName" , "月停车费*月份");
            }
        }
        return infos;
    }
service-fee/src/main/java/com/java110/fee/dao/impl/IReportFeeServiceDaoImpl.java
@@ -74,10 +74,8 @@
    public List<Map> repostPaidInFeeByWhiteOrder(Map map) {
        List<Map> objects = sqlSessionTemplate.selectList("reportFeeServiceDaoImpl.repostPaidInFeeByWhiteOrder", map);
        if (objects.size() == 0){
            HashMap<String, Object> stringObjectHashMap = new HashMap<>();
            stringObjectHashMap.put("count",0);
            objects.add(stringObjectHashMap);
        if (objects.size() == 0){//没有数据时
            objects.get(0).put("count",0);
            return objects;
        }
        List<Map> businessOaWorkflowInfos = sqlSessionTemplate.selectList("reportFeeServiceDaoImpl.countRepostPaidInFeeByWhiteOrder",map);
service-job/src/main/java/com/java110/job/importData/adapt/ImportContractQueueDataAdapt.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.community.CommunityDto;
import com.java110.dto.contract.*;
@@ -88,41 +89,36 @@
        ContractAmountDetailDto contractAmountDetail = data.getObject("contractAmountDetail", ContractAmountDetailDto.class);
        ContractManagementShareDto contractManagementShare = data.getObject("contractManagementShare", ContractManagementShareDto.class);
        ContractPaymentStatusDto contractPaymentStatus = data.getObject("contractPaymentStatus", ContractPaymentStatusDto.class);
        List<ContractCollectionDetailDto> contractCollectionDetail = data.getObject("contractCollectionDetail", List.class);
        data.remove("adContractInfo");
        List<ContractCollectionDetailDto> contractCollectionDetail =     data.getObject("contractCollectionDetailDtos",         new TypeReference<List<ContractCollectionDetailDto>>() {});        data.remove("adContractInfo");
        data.remove("contractAmountDetail");
        data.remove("contractManagementShare");
        data.remove("contractPaymentStatus");
        ContractDto contractDto = BeanConvertUtil.covertBean(data, ContractDto.class);
        ContractPo contractPo = BeanConvertUtil.covertBean(data, ContractPo.class);
//        ContractPo contractPo = BeanConvertUtil.covertBean(data, ContractPo.class);
        contractDto.setContractAmountDetail(contractAmountDetail);
        contractDto.setContractManagementShare(contractManagementShare);
        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.setStartTime(Vtil.defaultValueToDate(contractDto.getStartTime(), "start", null));
        contractDto.setEndTime(Vtil.defaultValueToDate(contractDto.getEndTime(), "end", null));
//        int i = contractInnerServiceSMOImpl.queryContractsCount(contractDto);
//
//        if (i > 0) {
//            throw new IllegalArgumentException("重复的合同");
//        }
        if (Vtil.defaultValue(contractDto.getCommunityName()) != null) {
            CommunityDto community = new CommunityDto();
            community.setName(contractDto.getCommunityName());
            List<CommunityDto> communityDtos = communityInnerServiceSMOImpl.queryCommunitys(community);
            if (communityDtos == null || communityDtos.size() == 0) {
//            throw new IllegalArgumentException("未查询到" + community.getName() + "小区");
            }
            else {
                contractDto.setCommunityId(communityDtos.get(0).getCommunityId());
            }
        }
        contractDto.setContractId(contractPo.getContractId());
        contractPo.setOperator("-");
        contractPo.setOperatorLink("-");
        contractPo.setContractParentId("");
        CommunityDto community = new CommunityDto();
        community.setName(contractDto.getCommunityName());
        List<CommunityDto> communityDtos = communityInnerServiceSMOImpl.queryCommunitys(community);
        if (communityDtos == null || communityDtos.size() == 0) {
            throw new IllegalArgumentException("未查询到" + community.getName() + "小区");
        }
        contractPo.setCommunityId(communityDtos.get(0).getCommunityId());
        contractInnerServiceSMOImpl.saveContract(contractPo);
        contractInnerServiceSMOImpl.saveContract(contractDto);
        sqlSessionTemplate.insert("adContractInfoDaoImpl.saveAdContractInfo", BeanConvertUtil.beanCovertMap(contractDto.getAdContractInfo()));
        sqlSessionTemplate.insert("contractAmountDetailDaoImpl.saveContractAmountDetail", BeanConvertUtil.beanCovertMap(contractDto.getContractAmountDetail()));
        sqlSessionTemplate.insert("contractManagementShareDaoImpl.saveContractManagementShare", BeanConvertUtil.beanCovertMap(contractDto.getContractManagementShare()));
service-job/src/main/java/com/java110/job/importData/adapt/ImportOwnerCarQueueV2DataAdapt.java
@@ -121,11 +121,11 @@
                OwnerCarDto ownerCarDto = null;
                doImportData(assetImportLogDetailDto,ownerCarDto);
                updateImportLogDetailState(assetImportLogDetailDto.getDetailId());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
//                try {
//                    Thread.sleep(500);
//                } catch (InterruptedException e) {
//                    throw new RuntimeException(e);
//                }
            } catch (Exception e) {
                e.printStackTrace();
@@ -158,7 +158,7 @@
        String otherItem = data.getString("otherItem");
        data.put("otherItem", null);
        ownerCarDto = BeanConvertUtil.covertBean(data, OwnerCarDto.class);
        if (ownerCarDto.getOwnerName() == null || "".equals(ownerCarDto.getOwnerName())) {
        {
            RoomDto roomDto = new RoomDto();
            roomDto.setRoadName(ownerCarDto.getRoadName());
            roomDto.setFloorNum(ownerCarDto.getFloorNum());
@@ -194,18 +194,6 @@
                        ownerCarDto.setOwnerName(ownerDtos.get(0).getName());
                    }
                }
            }
        } else {
            OwnerDto ownerDto = new OwnerDto();
            ownerDto.setName(ownerCarDto.getOwnerName());
            ownerDto.setCommunityId(ownerCarDto.getCommunityId());
            List<OwnerDto> ownerDtos = ownerV1InnerServiceSMOImpl.queryOwners(ownerDto);
            if (ownerDtos.isEmpty()) {
                ownerCarDto.setRemark("未查询到业主:" + ownerCarDto.getOwnerName());
            } else if (ownerDtos.size() > 1) {
                ownerCarDto.setRemark("存在多个业主:" + ownerCarDto.getOwnerName());
            } else {
                ownerCarDto.setOwnerId(ownerDtos.get(0).getOwnerId());
            }
        }
        ownerCarDto.setOtherItem(o);
@@ -606,15 +594,30 @@
        ownerCarPo.setUnitNum(defaultValue(os[5]));
        ownerCarPo.setRoomNum(defaultValue(os[6]));
        ownerCarPo.setParkingLocation(defaultValue(os[12]));
        if (Vtil.isValidDbDate(ownerCarPo.getStartTime())) {
            ownerCarPo.setRemark(Vtil.defaultValue(ownerCarPo.getRemark(), "") + "\n启用日期:" + ownerCarPo.getStartTime() + "格式错误");
            ownerCarPo.setStartTime(null);
        try {
            ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
        } catch (Exception e) {
            if (e.getMessage().contains("for column 'end_time' at row 1")){
                ownerCarPo.setRemark(Vtil.defaultValue(ownerCarPo.getRemark(), "") + "\n注销日期:" + ownerCarPo.getEndTime() + "格式错误");
                ownerCarPo.setEndTime(null);
                try {
                    ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
                } catch (Exception e2) {
                    if (e2.getMessage().contains("for column 'start_time' at row 1")) {
                        ownerCarPo.setRemark(Vtil.defaultValue(ownerCarPo.getRemark(), "") + "\n启用日期:" + ownerCarPo.getStartTime() + "格式错误");
                        ownerCarPo.setStartTime(null);
                        ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
                    }
                }
            }
            else if (e.getMessage().contains("for column 'start_time' at row 1")){
                ownerCarPo.setRemark(Vtil.defaultValue(ownerCarPo.getRemark(), "") + "\n启用日期:" + ownerCarPo.getStartTime() + "格式错误");
                ownerCarPo.setStartTime(null);
                ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
            }
        }
        if (Vtil.isValidDbDate(ownerCarPo.getEndTime())) {
            ownerCarPo.setRemark(Vtil.defaultValue(ownerCarPo.getRemark(), "") + "\n注销日期:" + ownerCarPo.getEndTime() + "格式错误");
            ownerCarPo.setEndTime(null);
        }
        ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
        ParkingSpacePo parkingSpacePo = new ParkingSpacePo();
        parkingSpacePo.setPsId(psId); //车位id
        parkingSpacePo.setState(ownerCarDto.getSpaceSate());
@@ -634,6 +637,7 @@
            feeDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
            if (feeDtos.isEmpty()) {
                ownerCarPo.setRemark("单价`"+ownerCarPo.getUnitPricePerMonth()+"`未查询到收费项");
                return;
            } else if (feeDtos.size() > 1) {
                switch (Vtil.defaultValue(os[12])) {
                    case "地面停车": feeConfigDto.setFeeTypeCd("630000003");break;
@@ -645,6 +649,7 @@
            if (feeDtos.isEmpty()) {
                ownerCarPo.setRemark("单价`"+ownerCarPo.getUnitPricePerMonth()+"`未查询到收费项");
                return;
            }
            else if (feeDtos.size() > 1) {
                throw new IllegalArgumentException("系统错误,查询到的费用项超过一个");
service-job/src/main/java/com/java110/job/importData/adapt/ImportReportMainV2QueueDataAdapt.java
@@ -210,7 +210,7 @@
            po.setYear(getCellValue(cellArray, 5)); // 第6列:年份
            po.setMonth(getCellValue(cellArray, 6)); // 第7列:月份
            po.setDay(getCellValue(cellArray, 7)); // 第8列:日
            po.setDate(getCellValue(cellArray, 8)); // 第9列:日期
            po.setDate(Vtil.defaultValueToDate(getCellValue(cellArray, 8))); // 第9列:日期
            po.setProjectContent(getCellValue(cellArray, 9)); // 第10列:工程内容
            po.setManagementOfficeAmount(getCellValue(cellArray, 10)); // 第11列:管理处金额
            po.setManagementOfficeSeal(getCellValue(cellArray, 11)); // 第12列:管理处是否已盖章(√转"是",否则"否")
@@ -220,8 +220,8 @@
            po.setReportDepartment(getCellValue(cellArray, 15)); // 第16列:签报部门
            po.setFundTypeLevel1(getCellValue(cellArray, 16)); // 第17列:基金类型-一级分类
            po.setFundTypeLevel2(getCellValue(cellArray, 17)); // 第18列:基金类型-二级分类
            po.setBuildingOrAll(getCellValue(cellArray, 18)); // 第20列:维修类型
            po.setMaintenanceType(getCellValue(cellArray, 19)); // 第19列:幢/全体
            po.setMaintenanceType(getCellValue(cellArray, 18)); // 第19列:幢/全体
            po.setBuildingOrAll(getCellValue(cellArray, 19)); // 第20列:维修类型
            po.setSpecificAnnouncementStatus(getCellValue(cellArray, 20));//具体公布情况 TODO 添加sql字段
            po.setQuota(getCellValue(cellArray, 21)); // 22:额度
            po.setOwnersCommitteeResolution(getCellValue(cellArray, 22)); // 23:业委会大会决议(是/否)
@@ -241,6 +241,7 @@
            po.setAuditDate(getCellValue(cellArray, 36)); // 审计情况:年/月
            po.setAvailableWithdrawalDate(getCellValue(cellArray, 37)); // 第40列:可启动支取日期(年月日)
            po.setManagementFeeRatio(getCellValue(cellArray, 164)); // 管理费
            po.setPaymentTarget(getCellValue(cellArray, 168)); // 支付对象
            po.setPayeeName(getCellValue(cellArray, 239)); // 支付公司名称/个人名字
            po.setIdCardNumber(getCellValue(cellArray, 240)); // 个人身份证号码
service-job/src/main/java/com/java110/job/importData/adapt/ImportRoomOwnerV2QueueDataAdapt.java
@@ -133,16 +133,19 @@
     * @param assetImportLogDetailDto
     */
    private void doImportData(AssetImportLogDetailDto assetImportLogDetailDto) {
        String test = "";
        int a = 6;
        JSONArray objects = JSONObject.parseArray(assetImportLogDetailDto.getContent());
//        if (Vtil.defaultValue(objects.get(11)) == null) {
        if (Vtil.defaultValue(objects.get(11)) == null) {
            objects.set(11, "无名");
            test = test + "\n业主名称为空";
//            throw new IllegalArgumentException("业主名称不能为空");
//        }
        }
        if (Vtil.defaultValue(objects.get(16)) == null){
            throw new IllegalArgumentException("房屋面积不能为空");
            objects.set(16, "0");
            test = test + "\n房屋面积为空";
        }
//        if (Vtil.defaultValue(objects.get(54)) == null){
@@ -232,19 +235,24 @@
        List<Object> objects1 = sqlSessionTemplate.selectList("roomServiceDaoImpl.getRoomInfo", BeanConvertUtil.beanCovertMap(roomDto));
        if (!objects1.isEmpty()) {
            throw new IllegalArgumentException("重复的房屋:");
//            throw new IllegalArgumentException("重复的房屋:");
            test = test + "\n重复的房屋:来自导入记录:" + assetImportLogDetailDto.getLogId() + "\t" + assetImportLogDetailDto.getDetailId();
        }
        List<FeeConfigDto> feeDtos = null;
        if (!importOwnerRoomDto.getCommunityId().isEmpty()){
            FeeConfigDto feeConfigDto = new FeeConfigDto();
            feeConfigDto.setCommunityId(importOwnerRoomDto.getCommunityId());
            if (importOwnerRoomDto.getPropertyType() == null) {
                throw new IllegalArgumentException("物业类型为空");
//                throw new IllegalArgumentException("物业类型为空");
                test = test + "\n物业类型为空,无法添加费用";
            }
            feeConfigDto.setSecondaryFeeTypeCdName(importOwnerRoomDto.getPropertyType());
            feeDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
            if (feeDtos.isEmpty()) {
                throw new IllegalArgumentException("物业类型`"+importOwnerRoomDto.getPropertyType()+"`未查询到收费项");
            else {
                feeConfigDto.setSecondaryFeeTypeCdName(importOwnerRoomDto.getPropertyType());
                feeDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
                if (feeDtos.isEmpty()) {
//                    throw new IllegalArgumentException("物业类型`"+importOwnerRoomDto.getPropertyType()+"`未查询到收费项");
                    test = test + "\n物业类型`"+importOwnerRoomDto.getPropertyType()+"`未查询到收费项,无法添加费用";
                }
            }
        }
@@ -539,7 +547,7 @@
            sqlSessionTemplate.insert("litigationInfoServiceDaoImpl.saveLitigationInfo",
                    BeanConvertUtil.beanCovertMap(litigationInfoPo));
        importOwnerRoomDto.setRoomState(importOwnerRoomDto.getOwnerName() == null ? "2004" : "2001");
        importOwnerRoomDto.setRemark(test);
        importOwnerRoomInnerServiceSMOImpl.saveOwnerRoom(importOwnerRoomDto);
        OwnerDto ownerDto = new OwnerDto();
        ownerDto.setOwnerId(importOwnerRoomDto.getOwnerId());
service-store/src/main/java/com/java110/store/api/ContractAmountDetailApi.java
New file
@@ -0,0 +1,235 @@
package com.java110.store.api;
import com.alibaba.fastjson.JSONObject;
import com.java110.dto.contract.ContractAmountDetailDto;
import com.java110.utils.util.Assert;
import com.java110.utils.util.BeanConvertUtil;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 合同金额明细信息接口
 * 适配 contract_amount_detail 表
 * @author dev
 * @date 2025-12-24
 */
@RestController
@RequestMapping(value = "/contractAmountDetail")
public class ContractAmountDetailApi {
    @Autowired
    protected SqlSessionTemplate sqlSessionTemplate;
    /**
     * 保存合同金额明细信息
     *
     * @param reqJson 请求参数
     * @return 响应结果
     * @serviceCode /contractAmountDetail/saveContractAmountDetail
     * @path /app/contractAmountDetail/saveContractAmountDetail
     */
    @RequestMapping(value = "/saveContractAmountDetail", method = RequestMethod.POST)
    public ResponseEntity<String> saveContractAmountDetail(@RequestBody JSONObject reqJson) {
        // 核心参数校验
        Assert.hasKeyAndValue(reqJson, "contractId", "请求报文中未包含合同ID");
        // 转换为DTO
        ContractAmountDetailDto dto = BeanConvertUtil.covertBean(reqJson, ContractAmountDetailDto.class);
        // 调用Mapper保存方法
        int insert = sqlSessionTemplate.insert("contractAmountDetailDaoImpl.saveContractAmountDetail",
                BeanConvertUtil.beanCovertMap(dto));
        // 构造响应结果
        JSONObject resJson = new JSONObject();
        if (insert > 0) {
            resJson.put("code", "0000");
            resJson.put("msg", "保存合同金额明细信息成功");
        } else {
            resJson.put("code", "0001");
            resJson.put("msg", "保存合同金额明细信息失败");
        }
        resJson.put("count", insert);
        return ResponseEntity.ok(resJson.toJSONString());
    }
    /**
     * 重载保存方法(入参为DTO)
     */
    public ResponseEntity<String> saveContractAmountDetail(ContractAmountDetailDto dto) {
        int insert = sqlSessionTemplate.insert("contractAmountDetailDaoImpl.saveContractAmountDetail",
                BeanConvertUtil.beanCovertMap(dto));
        JSONObject resJson = new JSONObject();
        if (insert > 0) {
            resJson.put("code", "0000");
            resJson.put("msg", "保存合同金额明细信息成功");
        } else {
            resJson.put("code", "0001");
            resJson.put("msg", "保存合同金额明细信息失败");
        }
        resJson.put("count", insert);
        return ResponseEntity.ok(resJson.toJSONString());
    }
    /**
     * 修改合同金额明细信息
     *
     * @param reqJson 请求参数
     * @return 响应结果
     * @serviceCode /contractAmountDetail/updateContractAmountDetail
     * @path /app/contractAmountDetail/updateContractAmountDetail
     */
    @RequestMapping(value = "/updateContractAmountDetail", method = RequestMethod.POST)
    public ResponseEntity<String> updateContractAmountDetail(@RequestBody JSONObject reqJson) {
        // 主键/合同ID校验(二选一)
        Assert.hasKey(reqJson, "id", "请求报文中未包含主键ID");
        Assert.hasKey(reqJson, "contractId", "请求报文中未包含合同ID");
        ContractAmountDetailDto dto = BeanConvertUtil.covertBean(reqJson, ContractAmountDetailDto.class);
        // 调用Mapper修改方法
        int update = sqlSessionTemplate.update("contractAmountDetailDaoImpl.updateContractAmountDetail",
                BeanConvertUtil.beanCovertMap(dto));
        JSONObject resJson = new JSONObject();
        if (update > 0) {
            resJson.put("code", "0000");
            resJson.put("msg", "修改合同金额明细信息成功");
        } else {
            resJson.put("code", "0001");
            resJson.put("msg", "修改合同金额明细信息失败,未找到对应记录");
        }
        resJson.put("count", update);
        return ResponseEntity.ok(resJson.toJSONString());
    }
    /**
     * 分页查询合同金额明细信息列表
     *
     * @param id                      主键ID(可选)
     * @param contractId              合同ID(可选)
     * @param totalContractAmount     合同总金额(可选)
     * @param unitPrice               单价(可选)
     * @param accountInfo             账户信息(可选)
     * @param mainMeterNo             主表编号(可选)
     * @param paymentRemark           付款备注(可选)
     * @param page                    页码(默认1)
     * @param row                     每页条数(默认10)
     * @return 响应结果
     * @serviceCode /contractAmountDetail/queryContractAmountDetail
     * @path /app/contractAmountDetail/queryContractAmountDetail
     */
    @RequestMapping(value = "/queryContractAmountDetail", method = RequestMethod.GET)
    public ResponseEntity<String> queryContractAmountDetail(
            @RequestParam(value = "id", required = false) String id,
            @RequestParam(value = "contractId", required = false) String contractId,
            @RequestParam(value = "totalContractAmount", required = false) String totalContractAmount,
            @RequestParam(value = "unitPrice", required = false) String unitPrice,
            @RequestParam(value = "accountInfo", required = false) String accountInfo,
            @RequestParam(value = "mainMeterNo", required = false) String mainMeterNo,
            @RequestParam(value = "paymentRemark", required = false) String paymentRemark,
            @RequestParam(value = "page", defaultValue = "1") int page,
            @RequestParam(value = "row", defaultValue = "10") int row) {
        // 封装查询参数
        ContractAmountDetailDto queryDto = new ContractAmountDetailDto();
        queryDto.setId(Integer.parseInt(id));
        queryDto.setContractId(contractId);
        queryDto.setTotalContractAmount(totalContractAmount);
        queryDto.setUnitPrice(unitPrice);
        queryDto.setAccountInfo(accountInfo);
        queryDto.setMainMeterNo(mainMeterNo);
        queryDto.setPaymentRemark(paymentRemark);
        queryDto.setPage((page - 1) * row);
        queryDto.setRow(row);
        // 查询列表数据
        List<Map<String, Object>> list = sqlSessionTemplate.selectList(
                "contractAmountDetailDaoImpl.getContractAmountDetail",
                BeanConvertUtil.beanCovertMap(queryDto));
        // 查询总数
        Object total = ((HashMap) sqlSessionTemplate.selectOne(
                "contractAmountDetailDaoImpl.queryContractAmountDetailsCount",
                BeanConvertUtil.beanCovertMap(queryDto))).get("count");
        // 构造分页响应
        JSONObject resJson = new JSONObject();
        resJson.put("code", "0000");
        resJson.put("msg", "查询合同金额明细信息成功");
        resJson.put("page", page);
        resJson.put("row", row);
        resJson.put("total", total);
        resJson.put("data", list);
        return ResponseEntity.ok(resJson.toJSONString());
    }
    /**
     * 根据ID查询单条合同金额明细信息
     *
     * @param id 主键ID
     * @return 响应结果
     * @serviceCode /contractAmountDetail/getContractAmountDetailById
     * @path /app/contractAmountDetail/getContractAmountDetailById
     */
    @RequestMapping(value = "/getContractAmountDetailById", method = RequestMethod.GET)
    public ResponseEntity<String> getContractAmountDetailById(@RequestParam(value = "id") Integer id) {
        // 主键校验
        Assert.notNull(id, "主键ID不能为空");
        ContractAmountDetailDto queryDto = new ContractAmountDetailDto();
        queryDto.setId(id);
        // 查询单条数据
        Map<String, Object> result = sqlSessionTemplate.selectOne(
                "contractAmountDetailDaoImpl.getContractAmountDetail",
                BeanConvertUtil.beanCovertMap(queryDto));
        JSONObject resJson = new JSONObject();
        if (result != null) {
            resJson.put("code", "0000");
            resJson.put("msg", "查询合同金额明细信息成功");
            resJson.put("data", result);
        } else {
            resJson.put("code", "0001");
            resJson.put("msg", "未找到对应合同金额明细记录");
        }
        return ResponseEntity.ok(resJson.toJSONString());
    }
    /**
     * 根据合同ID查询合同金额明细信息
     *
     * @param contractId 合同ID
     * @return 响应结果
     * @serviceCode /contractAmountDetail/getContractAmountDetailByContractId
     * @path /app/contractAmountDetail/getContractAmountDetailByContractId
     */
    @RequestMapping(value = "/getContractAmountDetailByContractId", method = RequestMethod.GET)
    public ResponseEntity<String> getContractAmountDetailByContractId(@RequestParam(value = "contractId") String contractId) {
        Assert.hasLength(contractId, "合同ID不能为空");
        ContractAmountDetailDto queryDto = new ContractAmountDetailDto();
        queryDto.setContractId(contractId);
        List<Map<String, Object>> result = sqlSessionTemplate.selectList(
                "contractAmountDetailDaoImpl.getContractAmountDetail",
                BeanConvertUtil.beanCovertMap(queryDto));
        JSONObject resJson = new JSONObject();
        resJson.put("code", "0000");
        resJson.put("msg", "查询合同金额明细信息成功");
        resJson.put("data", result);
        return ResponseEntity.ok(resJson.toJSONString());
    }
}
service-store/src/main/java/com/java110/store/api/ContractApi.java
@@ -249,34 +249,36 @@
    @RequestMapping(value = "/updateContract", method = RequestMethod.POST)
    public ResponseEntity<String> updateContract(@RequestBody JSONObject reqJson) {
        Assert.hasKeyAndValue(reqJson, "contractCode", "请求报文中未包含contractCode");
        Assert.hasKeyAndValue(reqJson, "contractName", "请求报文中未包含contractName");
        Assert.hasKeyAndValue(reqJson, "contractType", "请求报文中未包含contractType");
        Assert.hasKeyAndValue(reqJson, "partyA", "请求报文中未包含partyA");
        Assert.hasKeyAndValue(reqJson, "partyB", "请求报文中未包含partyB");
//        Assert.hasKeyAndValue(reqJson, "contractCode", "请求报文中未包含contractCode");
//        Assert.hasKeyAndValue(reqJson, "contractName", "请求报文中未包含contractName");
//        Assert.hasKeyAndValue(reqJson, "contractType", "请求报文中未包含contractType");
//        Assert.hasKeyAndValue(reqJson, "partyA", "请求报文中未包含partyA");
//        Assert.hasKeyAndValue(reqJson, "partyB", "请求报文中未包含partyB");
//        Assert.hasKeyAndValue(reqJson, "aContacts", "请求报文中未包含aContacts");
//        Assert.hasKeyAndValue(reqJson, "aLink", "请求报文中未包含aLink");
//        Assert.hasKeyAndValue(reqJson, "bContacts", "请求报文中未包含bContacts");
//        Assert.hasKeyAndValue(reqJson, "bLink", "请求报文中未包含bLink");
        Assert.hasKeyAndValue(reqJson, "operator", "请求报文中未包含operator");
        Assert.hasKeyAndValue(reqJson, "operatorLink", "请求报文中未包含operatorLink");
        Assert.hasKeyAndValue(reqJson, "startTime", "请求报文中未包含startTime");
        Assert.hasKeyAndValue(reqJson, "endTime", "请求报文中未包含endTime");
        Assert.hasKeyAndValue(reqJson, "signingTime", "请求报文中未包含signingTime");
        Assert.hasKeyAndValue(reqJson, "contractId", "contractId不能为空");
//        Assert.hasKeyAndValue(reqJson, "operator", "请求报文中未包含operator");
//        Assert.hasKeyAndValue(reqJson, "operatorLink", "请求报文中未包含operatorLink");
//        Assert.hasKeyAndValue(reqJson, "startTime", "请求报文中未包含startTime");
//        Assert.hasKeyAndValue(reqJson, "endTime", "请求报文中未包含endTime");
//        Assert.hasKeyAndValue(reqJson, "signingTime", "请求报文中未包含signingTime");
//        Assert.hasKeyAndValue(reqJson, "contractId", "contractId不能为空");
        ContractPo contractPo = BeanConvertUtil.covertBean(reqJson, ContractPo.class);
        ContractDto contractPo = BeanConvertUtil.covertBean(reqJson, ContractDto.class);
        JSONArray contractFiles = reqJson.getJSONArray("contractFilePo");
        List<ContractFilePo> contractFilePos = new ArrayList<>();
        for (int conFileIndex = 0; conFileIndex < contractFiles.size(); conFileIndex++) {
            JSONObject resourceStore = contractFiles.getJSONObject(conFileIndex);
            ContractFilePo contractFilePo = BeanConvertUtil.covertBean(resourceStore, ContractFilePo.class);
            contractFilePo.setContractFileId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_contractFileId));
            contractFilePos.add(contractFilePo);
        if (contractFiles != null) {
            for (int conFileIndex = 0; conFileIndex < contractFiles.size(); conFileIndex++) {
                JSONObject resourceStore = contractFiles.getJSONObject(conFileIndex);
                ContractFilePo contractFilePo = BeanConvertUtil.covertBean(resourceStore, ContractFilePo.class);
                contractFilePo.setContractFileId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_contractFileId));
                contractFilePos.add(contractFilePo);
            }
        }
        contractPo.setContractFilePo(contractFilePos);
//        contractPo.setContractFilePo(contractFilePos);
        return updateContractBMOImpl.update(contractPo, reqJson);
    }
@@ -354,7 +356,7 @@
     */
    @RequestMapping(value = "/deleteContract", method = RequestMethod.POST)
    public ResponseEntity<String> deleteContract(@RequestBody JSONObject reqJson) {
        Assert.hasKeyAndValue(reqJson, "communityId", "小区ID不能为空");
//        Assert.hasKeyAndValue(reqJson, "communityId", "小区ID不能为空");
        Assert.hasKeyAndValue(reqJson, "contractId", "contractId不能为空");
service-store/src/main/java/com/java110/store/bmo/contract/IUpdateContractBMO.java
@@ -17,6 +17,7 @@
    ResponseEntity<String> update(ContractPo contractPo, JSONObject reqJson);
    ResponseEntity<String> update(ContractDto contractPo, JSONObject reqJson);
    /**
     * 需要审核合同
     * @param contractDto
service-store/src/main/java/com/java110/store/bmo/contract/impl/UpdateContractBMOImpl.java
@@ -145,6 +145,52 @@
    }
    @Java110Transactional
    public ResponseEntity<String> update(ContractDto contractPo, JSONObject reqJson) {
        int flag = contractInnerServiceSMOImpl.updateContract(contractPo);
        if (flag < 1) {
            return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "保存失败");
        }
        //附件保存--先删除原来所有的附件再进行保存
//        ContractFilePo contractFilePo = new ContractFilePo();
//        contractFilePo.setContractId(contractPo.getContractId());
//        deleteContractFileBMOImpl.delete(contractFilePo);
//        List<ContractFilePo> filePos = contractPo.getContractFilePo();
//        if (filePos != null) {
//            for (ContractFilePo file : filePos) {
//                if (file.getFileRealName().length() > 0 && file.getFileSaveName().length() > 0) {
//                    file.setContractId(contractPo.getContractId());
//                    contractFileInnerServiceSMOImpl.saveContractFile(file);
//                }
//            }
//        }
//        noticeRentUpdateState(contractPo);
        if (!reqJson.containsKey("contractTypeSpecs")) {
            return ResultVo.createResponseEntity(ResultVo.CODE_OK, "保存成功");
        }
        JSONArray contractTypeSpecs = reqJson.getJSONArray("contractTypeSpecs");
        if (contractTypeSpecs.size() < 1) {
            return ResultVo.createResponseEntity(ResultVo.CODE_OK, "保存成功");
        }
        for (int typeSpecIndex = 0; typeSpecIndex < contractTypeSpecs.size(); typeSpecIndex++) {
            updateContractAttr(contractTypeSpecs.getJSONObject(typeSpecIndex), contractPo);
        }
        return ResultVo.createResponseEntity(ResultVo.CODE_OK, "保存成功");
    }
    @Override
    public ResponseEntity<String> needAuditContract(ContractDto contractDto, JSONObject reqJson) {
@@ -472,6 +518,26 @@
        }
    }
    private void updateContractAttr(JSONObject jsonObject, ContractDto contractPo) {
        ContractAttrDto contractAttrDto = new ContractAttrDto();
        contractAttrDto.setContractId(contractPo.getContractId());
        contractAttrDto.setSpecCd(jsonObject.getString("specCd"));
        List<ContractAttrDto> contractAttrDtos = contractAttrInnerServiceSMOImpl.queryContractAttrs(contractAttrDto);
        Assert.listOnlyOne(contractAttrDtos, "未找到需要修改的合同属性");
        ContractAttrPo contractAttrPo = new ContractAttrPo();
        contractAttrPo.setAttrId(contractAttrDtos.get(0).getAttrId());
        contractAttrPo.setContractId(contractPo.getContractId());
        contractAttrPo.setSpecCd(jsonObject.getString("specCd"));
        contractAttrPo.setValue(jsonObject.getString("value"));
        contractAttrPo.setStoreId(contractPo.getStoreId());
        int count = contractAttrInnerServiceSMOImpl.updateContractAttr(contractAttrPo);
        if (count < 1) {
            throw new IllegalArgumentException("保存属性失败");
        }
    }
    /**
     * 修改 房屋租赁状态
     *
service-store/src/main/java/com/java110/store/dao/IContractServiceDao.java
@@ -45,6 +45,22 @@
     */
    void updateContractInfo(Map info) throws DAOException;
    void saveOrUpdateAdContractInfo(Map info) throws DAOException;
    /**
     * 保存或更新 合同金额明细表
     */
    void saveOrUpdateContractAmountDetail(Map info) throws DAOException;
    /**
     * 保存或更新 合同管理分成表
     */
    void saveOrUpdateContractManagementShare(Map info) throws DAOException;
    /**
     * 保存或更新 合同缴费状态表
     */
    void saveOrUpdateContractPaymentStatus(Map info) throws DAOException;
    /**
     * 查询合同管理总数
service-store/src/main/java/com/java110/store/dao/impl/ContractServiceDaoImpl.java
@@ -77,6 +77,53 @@
        }
    }
    // ===================== 新增:广告信息 保存或更新 =====================
    @Override
    public void saveOrUpdateAdContractInfo(Map info) throws DAOException {
        logger.debug("保存或更新广告信息 入参 info : {}", info);
        int saveFlag = sqlSessionTemplate.insert("contractServiceDaoImpl.saveOrUpdateAdContractInfo", info);
        if (saveFlag < 1) {
            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR, "保存或更新广告信息失败:" + JSONObject.toJSONString(info));
        }
    }
    // ===================== 新增:合同金额明细 保存或更新 =====================
    @Override
    public void saveOrUpdateContractAmountDetail(Map info) throws DAOException {
        logger.debug("保存或更新合同金额明细 入参 info : {}", info);
        int saveFlag = sqlSessionTemplate.insert("contractServiceDaoImpl.saveOrUpdateContractAmountDetail", info);
        if (saveFlag < 1) {
            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR, "保存或更新合同金额明细失败:" + JSONObject.toJSONString(info));
        }
    }
    // ===================== 新增:合同管理分成 保存或更新 =====================
    @Override
    public void saveOrUpdateContractManagementShare(Map info) throws DAOException {
        logger.debug("保存或更新合同管理分成 入参 info : {}", info);
        int saveFlag = sqlSessionTemplate.insert("contractServiceDaoImpl.saveOrUpdateContractManagementShare", info);
        if (saveFlag < 1) {
            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR, "保存或更新合同管理分成失败:" + JSONObject.toJSONString(info));
        }
    }
    // ===================== 新增:合同缴费状态 保存或更新 =====================
    @Override
    public void saveOrUpdateContractPaymentStatus(Map info) throws DAOException {
        logger.debug("保存或更新合同缴费状态 入参 info : {}", info);
        int saveFlag = sqlSessionTemplate.insert("contractServiceDaoImpl.saveOrUpdateContractPaymentStatus", info);
        if (saveFlag < 1) {
            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR, "保存或更新合同缴费状态失败:" + JSONObject.toJSONString(info));
        }
    }
     /**
     * 查询合同管理数量
     * @param info 合同管理信息
service-store/src/main/java/com/java110/store/smo/impl/ContractInnerServiceSMOImpl.java
@@ -3,7 +3,7 @@
import com.java110.core.base.smo.BaseServiceSMO;
import com.java110.dto.PageDto;
import com.java110.dto.contract.ContractDto;
import com.java110.dto.contract.*;
import com.java110.intf.store.IContractInnerServiceSMO;
import com.java110.po.contract.ContractPo;
import com.java110.store.dao.IContractServiceDao;
@@ -38,12 +38,63 @@
    }
    @Override
    public int saveContract(@RequestBody ContractDto contractPo) {
        int saveFlag = 1;
        contractServiceDaoImpl.saveContractInfo(BeanConvertUtil.beanCovertMap(contractPo));
        return saveFlag;
    }
    @Override
    public int updateContract(@RequestBody ContractPo contractPo) {
        int saveFlag = 1;
        contractServiceDaoImpl.updateContractInfo(BeanConvertUtil.beanCovertMap(contractPo));
        return saveFlag;
    }
    public int updateContract(@RequestBody ContractDto contractPo) {
        int saveFlag = 1;
        // ===================== 1. 先更新主合同(你原来的代码) =====================
        Map<String, Object> mainMap = BeanConvertUtil.beanCovertMap(contractPo);
        contractServiceDaoImpl.updateContractInfo(mainMap);
        // ===================== 2. 更新/插入 广告信息子表 =====================
        AdContractInfoDto adContractInfo = contractPo.getAdContractInfo();
        if (adContractInfo != null) {
            adContractInfo.setContractId(contractPo.getContractId());
            Map<String, Object> adMap = BeanConvertUtil.beanCovertMap(adContractInfo);
            // 这里调用你DAO的 新增或更新方法(不存在则insert,存在则update)
            contractServiceDaoImpl.saveOrUpdateAdContractInfo(adMap);
        }
        // ===================== 3. 更新/插入 合同金额明细子表 =====================
        ContractAmountDetailDto amountDetail = contractPo.getContractAmountDetail();
        if (amountDetail != null) {
            amountDetail.setContractId(contractPo.getContractId());
            Map<String, Object> detailMap = BeanConvertUtil.beanCovertMap(amountDetail);
            contractServiceDaoImpl.saveOrUpdateContractAmountDetail(detailMap);
        }
        // ===================== 4. 更新/插入 合同管理分成子表 =====================
        ContractManagementShareDto managementShare = contractPo.getContractManagementShare();
        if (managementShare != null) {
            managementShare.setContractId(contractPo.getContractId());
            Map<String, Object> shareMap = BeanConvertUtil.beanCovertMap(managementShare);
            contractServiceDaoImpl.saveOrUpdateContractManagementShare(shareMap);
        }
        // ===================== 5. 更新/插入 合同缴费状态子表 =====================
        ContractPaymentStatusDto paymentStatus = contractPo.getContractPaymentStatus();
        if (paymentStatus != null) {
            paymentStatus.setContractId(contractPo.getContractId());
            Map<String, Object> payMap = BeanConvertUtil.beanCovertMap(paymentStatus);
            contractServiceDaoImpl.saveOrUpdateContractPaymentStatus(payMap);
        }
        return saveFlag;
    }
    @Override
    public int deleteContract(@RequestBody ContractPo contractPo) {
        int saveFlag = 1;
springboot/src/main/resources/application-debug.yml
@@ -39,7 +39,7 @@
  datasource:
    url: jdbc:mysql://localhost:3306/TT_dev?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
    username: root
    password: 123456
    password: win2020
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    druid:
springboot/src/main/resources/application.yml
@@ -2,6 +2,7 @@
  profiles:
    active: devlocal
import:
  line:
    max: 50000