From dd6687b118561100e1677e88a9c2f5842a54c531 Mon Sep 17 00:00:00 2001
From: jialh <1972868360@qq.com>
Date: 星期四, 16 四月 2026 18:14:14 +0800
Subject: [PATCH] 水电话费

---
 service-fee/src/main/java/com/java110/fee/dao/impl/IReportFeeServiceDaoImpl.java                       |    6 
 java110-db/src/main/resources/mapper/center/MaintenancePaymentDAOImplMapper.xml                        |  245 +++-
 java110-bean/src/main/java/com/java110/dto/system/ComponentValidateResult.java                         |   10 
 java110-bean/src/main/java/com/java110/dto/importData/ImportOwnerRoomDto.java                          |    9 
 java110-db/src/main/resources/mapper/store/ContractCollectionDetailServiceDaoImpl.xml                  |  161 +
 java110-db/src/main/resources/mapper/fee/PropertyWhiteListFlowDaoImplMapper.xml                        |   88 +
 java110-db/src/main/resources/mapper/fee/MeterWaterV1ServiceDaoImplMapper.xml                          |  366 +++---
 service-fee/src/main/java/com/java110/fee/api/MpPaymentRecordApi.java                                  |    4 
 service-api/src/main/java/com/java110/api/importData/adapt/ImportReportMainDataV2CleaningAdapt.java    |    9 
 service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeeWriteOrderCmd.java                          |   16 
 service-fee/src/main/java/com/java110/fee/api/contract/ContractAmountDetailApi.java                    |  470 ++++----
 java110-utils/src/main/java/com/java110/utils/util/DateUtil.java                                       |   18 
 service-store/src/main/java/com/java110/store/bmo/contract/impl/UpdateContractBMOImpl.java             |   66 +
 service-store/src/main/java/com/java110/store/smo/impl/ContractInnerServiceSMOImpl.java                |   53 
 springboot/src/main/resources/application-debug.yml                                                    |    2 
 java110-bean/src/main/java/com/java110/po/contract/ContractPo.java                                     |  181 +++
 java110-bean/src/main/java/com/java110/po/importFee/MaintenancePayment.java                            |   49 
 service-store/src/main/java/com/java110/store/api/ContractApi.java                                     |   40 
 springboot/src/main/resources/application.yml                                                          |    1 
 service-fee/src/main/java/com/java110/fee/api/MaintenancePaymentApi.java                               |    6 
 service-job/src/main/java/com/java110/job/importData/adapt/ImportContractQueueDataAdapt.java           |   46 
 java110-utils/src/main/java/com/java110/utils/util/BeanConvertUtil.java                                |   49 
 service-fee/src/main/java/com/java110/fee/dao/impl/FeeConfigServiceDaoImpl.java                        |    5 
 java110-bean/src/main/java/com/java110/dto/meter/MeterWaterDto.java                                    |  305 -----
 service-job/src/main/java/com/java110/job/importData/adapt/ImportOwnerCarQueueV2DataAdapt.java         |   57 
 java110-bean/src/main/java/com/java110/dto/PropertyWhiteListFlowDto.java                               |   35 
 service-fee/src/main/java/com/java110/fee/api/contract/ContractCollectionDetailApi.java                |   51 
 service-job/src/main/java/com/java110/job/importData/adapt/ImportReportMainV2QueueDataAdapt.java       |    7 
 java110-interface/src/main/java/com/java110/intf/store/IContractInnerServiceSMO.java                   |    5 
 service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeePropertyCmd.java                            |    1 
 service-store/src/main/java/com/java110/store/dao/impl/ContractServiceDaoImpl.java                     |   47 
 service-community/src/main/java/com/java110/community/smo/impl/ImportOwnerRoomInnerServiceSMOImpl.java |    5 
 service-job/src/main/java/com/java110/job/importData/adapt/ImportRoomOwnerV2QueueDataAdapt.java        |   30 
 service-api/src/main/java/com/java110/api/importData/adapt/ImportContractCleaningAdapt.java            |   10 
 java110-db/src/main/resources/mapper/store/ContractServiceDaoImplMapper.xml                            |  389 +++++-
 service-store/src/main/java/com/java110/store/bmo/contract/IUpdateContractBMO.java                     |    1 
 java110-db/src/main/resources/mapper/fee/MeterWaterServiceDaoImplMapper.xml                            |  176 ++-
 service-store/src/main/java/com/java110/store/api/ContractAmountDetailApi.java                         |  235 ++++
 service-store/src/main/java/com/java110/store/dao/IContractServiceDao.java                             |   16 
 39 files changed, 2,184 insertions(+), 1,086 deletions(-)

diff --git a/java110-bean/src/main/java/com/java110/dto/PropertyWhiteListFlowDto.java b/java110-bean/src/main/java/com/java110/dto/PropertyWhiteListFlowDto.java
index 9c04ac6..cc95881 100644
--- a/java110-bean/src/main/java/com/java110/dto/PropertyWhiteListFlowDto.java
+++ b/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;
diff --git a/java110-bean/src/main/java/com/java110/dto/importData/ImportOwnerRoomDto.java b/java110-bean/src/main/java/com/java110/dto/importData/ImportOwnerRoomDto.java
index 772e8c8..f345f8b 100644
--- a/java110-bean/src/main/java/com/java110/dto/importData/ImportOwnerRoomDto.java
+++ b/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;
     }
diff --git a/java110-bean/src/main/java/com/java110/dto/meter/MeterWaterDto.java b/java110-bean/src/main/java/com/java110/dto/meter/MeterWaterDto.java
index 159d905..ce544ba 100644
--- a/java110-bean/src/main/java/com/java110/dto/meter/MeterWaterDto.java
+++ b/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; // 鑷姩鎵f
     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;
-    }
-
-    // 鏂板瀛楁鐨刧etter/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;
-    }
 }
\ No newline at end of file
diff --git a/java110-bean/src/main/java/com/java110/dto/system/ComponentValidateResult.java b/java110-bean/src/main/java/com/java110/dto/system/ComponentValidateResult.java
index 6f3203b..f4e0609 100644
--- a/java110-bean/src/main/java/com/java110/dto/system/ComponentValidateResult.java
+++ b/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;
     }
diff --git a/java110-bean/src/main/java/com/java110/po/contract/ContractPo.java b/java110-bean/src/main/java/com/java110/po/contract/ContractPo.java
index bf35a22..db37a03 100755
--- a/java110-bean/src/main/java/com/java110/po/contract/ContractPo.java
+++ b/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() {
diff --git a/java110-bean/src/main/java/com/java110/po/importFee/MaintenancePayment.java b/java110-bean/src/main/java/com/java110/po/importFee/MaintenancePayment.java
index b6f4f5e..da11727 100644
--- a/java110-bean/src/main/java/com/java110/po/importFee/MaintenancePayment.java
+++ b/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;
 }
\ No newline at end of file
diff --git a/java110-db/src/main/resources/mapper/center/MaintenancePaymentDAOImplMapper.xml b/java110-db/src/main/resources/mapper/center/MaintenancePaymentDAOImplMapper.xml
index a0d839b..65e794c 100644
--- a/java110-db/src/main/resources/mapper/center/MaintenancePaymentDAOImplMapper.xml
+++ b/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
         <!-- 娉ㄦ剰锛歩d浣滀负涓婚敭锛岄�氬父涓嶅缓璁洿鏂帮紝杩欓噷淇濈暀浣嗘爣娉紝寤鸿鏍规嵁涓氬姟鍐冲畾鏄惁鍒犻櫎 -->
@@ -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>
 
diff --git a/java110-db/src/main/resources/mapper/fee/MeterWaterServiceDaoImplMapper.xml b/java110-db/src/main/resources/mapper/fee/MeterWaterServiceDaoImplMapper.xml
index 19725a1..fa531bd 100755
--- a/java110-db/src/main/resources/mapper/fee/MeterWaterServiceDaoImplMapper.xml
+++ b/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>
 
diff --git a/java110-db/src/main/resources/mapper/fee/MeterWaterV1ServiceDaoImplMapper.xml b/java110-db/src/main/resources/mapper/fee/MeterWaterV1ServiceDaoImplMapper.xml
index 6ee9778..52aeb71 100644
--- a/java110-db/src/main/resources/mapper/fee/MeterWaterV1ServiceDaoImplMapper.xml
+++ b/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>
\ No newline at end of file
diff --git a/java110-db/src/main/resources/mapper/fee/PropertyWhiteListFlowDaoImplMapper.xml b/java110-db/src/main/resources/mapper/fee/PropertyWhiteListFlowDaoImplMapper.xml
index c9fee55..50f491e 100644
--- a/java110-db/src/main/resources/mapper/fee/PropertyWhiteListFlowDaoImplMapper.xml
+++ b/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>
\ No newline at end of file
diff --git a/java110-db/src/main/resources/mapper/store/ContractCollectionDetailServiceDaoImpl.xml b/java110-db/src/main/resources/mapper/store/ContractCollectionDetailServiceDaoImpl.xml
index f58e3dc..8c82f35 100644
--- a/java110-db/src/main/resources/mapper/store/ContractCollectionDetailServiceDaoImpl.xml
+++ b/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>
\ No newline at end of file
diff --git a/java110-db/src/main/resources/mapper/store/ContractServiceDaoImplMapper.xml b/java110-db/src/main/resources/mapper/store/ContractServiceDaoImplMapper.xml
index 7cd9a7f..1904464 100755
--- a/java110-db/src/main/resources/mapper/store/ContractServiceDaoImplMapper.xml
+++ b/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">
diff --git a/java110-interface/src/main/java/com/java110/intf/store/IContractInnerServiceSMO.java b/java110-interface/src/main/java/com/java110/intf/store/IContractInnerServiceSMO.java
index 3fdab4b..6105b69 100755
--- a/java110-interface/src/main/java/com/java110/intf/store/IContractInnerServiceSMO.java
+++ b/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);
 
diff --git a/java110-utils/src/main/java/com/java110/utils/util/BeanConvertUtil.java b/java110-utils/src/main/java/com/java110/utils/util/BeanConvertUtil.java
index 21975c8..04e27ac 100755
--- a/java110-utils/src/main/java/com/java110/utils/util/BeanConvertUtil.java
+++ b/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 杞琩ate
-            Object tmpValue = Java110Converter.getValue(value, dstClass);
-            //System.out.println("tmpValue"+value.toString());
-            beanMap.put(field.getName(), tmpValue);
+
+            try {
+                // 鉁� 鏍稿績淇锛氬彧瑕佹槸 Map锛屼笖鐩爣涓嶆槸鍩虹绫诲瀷锛屽氨閫掑綊杞� DTO
+                if (value instanceof Map) {
+                    // 鎺掗櫎鍩虹绫诲瀷銆佸寘瑁呯被銆丼tring銆丏ate
+                    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;
+                    }
+                }
+
+                // 鍘熸湁绫诲瀷杞崲锛圫tring->Date绛夛級
+                Object convertedValue = Java110Converter.getValue(value, targetType);
+                beanMap.put(fieldName, convertedValue);
+
+            } catch (Exception ignored) {
+                // 杞崲澶辫触涓嶆姏閿欙紝淇濇寔鍘熸湁閫昏緫鍏煎
+            }
         }
     }
 
diff --git a/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java b/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java
index 1a916dd..b615608 100755
--- a/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java
+++ b/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";
diff --git a/service-api/src/main/java/com/java110/api/importData/adapt/ImportContractCleaningAdapt.java b/service-api/src/main/java/com/java110/api/importData/adapt/ImportContractCleaningAdapt.java
index fc5eb60..10e9ace 100644
--- a/service-api/src/main/java/com/java110/api/importData/adapt/ImportContractCleaningAdapt.java
+++ b/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) {
diff --git a/service-api/src/main/java/com/java110/api/importData/adapt/ImportReportMainDataV2CleaningAdapt.java b/service-api/src/main/java/com/java110/api/importData/adapt/ImportReportMainDataV2CleaningAdapt.java
index c91d803..13efe8b 100644
--- a/service-api/src/main/java/com/java110/api/importData/adapt/ImportReportMainDataV2CleaningAdapt.java
+++ b/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, "鑽i『鑻戠鎶ュ崟");
+        String sheetName = "鑽i『鑻戠鎶ュ崟";
+        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);
diff --git a/service-community/src/main/java/com/java110/community/smo/impl/ImportOwnerRoomInnerServiceSMOImpl.java b/service-community/src/main/java/com/java110/community/smo/impl/ImportOwnerRoomInnerServiceSMOImpl.java
index 5e1e0f9..ffd401d 100644
--- a/service-community/src/main/java/com/java110/community/smo/impl/ImportOwnerRoomInnerServiceSMOImpl.java
+++ b/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);
diff --git a/service-fee/src/main/java/com/java110/fee/api/MaintenancePaymentApi.java b/service-fee/src/main/java/com/java110/fee/api/MaintenancePaymentApi.java
index a014efd..e24fc11 100644
--- a/service-fee/src/main/java/com/java110/fee/api/MaintenancePaymentApi.java
+++ b/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) {
         // 鏍稿績鍙傛暟鏍¢獙锛坕d涓轰富閿紝鏂板鏃堕潪蹇呬紶锛岃繖閲屾牎楠屾牳蹇冧笟鍔″瓧娈碉級
-        Assert.hasKeyAndValue(reqJson, "flowNumber", "璇锋眰鎶ユ枃涓湭鍖呭惈娴佽浆缂栧彿");
-        Assert.hasKeyAndValue(reqJson, "projectCode", "璇锋眰鎶ユ枃涓湭鍖呭惈椤圭洰缂栫爜");
+//        Assert.hasKeyAndValue(reqJson, "flowNumber", "璇锋眰鎶ユ枃涓湭鍖呭惈娴佽浆缂栧彿");
+//        Assert.hasKeyAndValue(reqJson, "projectCode", "璇锋眰鎶ユ枃涓湭鍖呭惈椤圭洰缂栫爜");
 
         // 灏咼SON鍙傛暟杞崲涓哄疄浣撶被
         MaintenancePayment maintenancePayment = BeanConvertUtil.covertBean(reqJson, MaintenancePayment.class);
+        maintenancePayment.setId(GenerateCodeFactory.getGeneratorId("43"));
         return saveImportFeeDetailBMOImpl.save(maintenancePayment);
     }
 
diff --git a/service-fee/src/main/java/com/java110/fee/api/MpPaymentRecordApi.java b/service-fee/src/main/java/com/java110/fee/api/MpPaymentRecordApi.java
index 2680377..042d671 100644
--- a/service-fee/src/main/java/com/java110/fee/api/MpPaymentRecordApi.java
+++ b/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);
     }
 
diff --git a/service-fee/src/main/java/com/java110/fee/api/contract/ContractAmountDetailApi.java b/service-fee/src/main/java/com/java110/fee/api/contract/ContractAmountDetailApi.java
index cd58e7f..29e6b74 100644
--- a/service-fee/src/main/java/com/java110/fee/api/contract/ContractAmountDetailApi.java
+++ b/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");
-
-        // 杞崲涓篋TO
-        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());
-    }
-}
\ No newline at end of file
+//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");
+//
+//        // 杞崲涓篋TO
+//        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());
+//    }
+//}
\ No newline at end of file
diff --git a/service-fee/src/main/java/com/java110/fee/api/contract/ContractCollectionDetailApi.java b/service-fee/src/main/java/com/java110/fee/api/contract/ContractCollectionDetailApi.java
index 0ed4bde..02203ae 100644
--- a/service-fee/src/main/java/com/java110/fee/api/contract/ContractCollectionDetailApi.java
+++ b/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 @@
         }
 
         // 鏌ヨ鍒楄〃鏁版嵁锛圡yBatis鑷姩璇嗗埆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;
     }
 
     /**
diff --git a/service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeePropertyCmd.java b/service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeePropertyCmd.java
index 68613ce..6297a05 100644
--- a/service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeePropertyCmd.java
+++ b/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;
diff --git a/service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeeWriteOrderCmd.java b/service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeeWriteOrderCmd.java
index 11c72e9..e977d81 100644
--- a/service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeeWriteOrderCmd.java
+++ b/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"));
diff --git a/service-fee/src/main/java/com/java110/fee/dao/impl/FeeConfigServiceDaoImpl.java b/service-fee/src/main/java/com/java110/fee/dao/impl/FeeConfigServiceDaoImpl.java
index d0c80ab..2a65b9a 100755
--- a/service-fee/src/main/java/com/java110/fee/dao/impl/FeeConfigServiceDaoImpl.java
+++ b/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;
     }
 
diff --git a/service-fee/src/main/java/com/java110/fee/dao/impl/IReportFeeServiceDaoImpl.java b/service-fee/src/main/java/com/java110/fee/dao/impl/IReportFeeServiceDaoImpl.java
index 342fc41..4b78818 100644
--- a/service-fee/src/main/java/com/java110/fee/dao/impl/IReportFeeServiceDaoImpl.java
+++ b/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);
diff --git a/service-job/src/main/java/com/java110/job/importData/adapt/ImportContractQueueDataAdapt.java b/service-job/src/main/java/com/java110/job/importData/adapt/ImportContractQueueDataAdapt.java
index aef4657..9f8b991 100644
--- a/service-job/src/main/java/com/java110/job/importData/adapt/ImportContractQueueDataAdapt.java
+++ b/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()));
diff --git a/service-job/src/main/java/com/java110/job/importData/adapt/ImportOwnerCarQueueV2DataAdapt.java b/service-job/src/main/java/com/java110/job/importData/adapt/ImportOwnerCarQueueV2DataAdapt.java
index d754a2b..5855cf5 100644
--- a/service-job/src/main/java/com/java110/job/importData/adapt/ImportOwnerCarQueueV2DataAdapt.java
+++ b/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("绯荤粺閿欒锛屾煡璇㈠埌鐨勮垂鐢ㄩ」瓒呰繃涓�涓�");
diff --git a/service-job/src/main/java/com/java110/job/importData/adapt/ImportReportMainV2QueueDataAdapt.java b/service-job/src/main/java/com/java110/job/importData/adapt/ImportReportMainV2QueueDataAdapt.java
index 1e13c88..a927ca6 100644
--- a/service-job/src/main/java/com/java110/job/importData/adapt/ImportReportMainV2QueueDataAdapt.java
+++ b/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)); // 涓汉韬唤璇佸彿鐮�
diff --git a/service-job/src/main/java/com/java110/job/importData/adapt/ImportRoomOwnerV2QueueDataAdapt.java b/service-job/src/main/java/com/java110/job/importData/adapt/ImportRoomOwnerV2QueueDataAdapt.java
index 65a2795..d19e21b 100644
--- a/service-job/src/main/java/com/java110/job/importData/adapt/ImportRoomOwnerV2QueueDataAdapt.java
+++ b/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());
diff --git a/service-store/src/main/java/com/java110/store/api/ContractAmountDetailApi.java b/service-store/src/main/java/com/java110/store/api/ContractAmountDetailApi.java
new file mode 100644
index 0000000..80d3adc
--- /dev/null
+++ b/service-store/src/main/java/com/java110/store/api/ContractAmountDetailApi.java
@@ -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");
+
+        // 杞崲涓篋TO
+        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());
+    }
+}
\ No newline at end of file
diff --git a/service-store/src/main/java/com/java110/store/api/ContractApi.java b/service-store/src/main/java/com/java110/store/api/ContractApi.java
index c54d3f2..e62bbdd 100755
--- a/service-store/src/main/java/com/java110/store/api/ContractApi.java
+++ b/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涓嶈兘涓虹┖");
 
diff --git a/service-store/src/main/java/com/java110/store/bmo/contract/IUpdateContractBMO.java b/service-store/src/main/java/com/java110/store/bmo/contract/IUpdateContractBMO.java
index a541c17..e7e3070 100755
--- a/service-store/src/main/java/com/java110/store/bmo/contract/IUpdateContractBMO.java
+++ b/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
diff --git a/service-store/src/main/java/com/java110/store/bmo/contract/impl/UpdateContractBMOImpl.java b/service-store/src/main/java/com/java110/store/bmo/contract/impl/UpdateContractBMOImpl.java
index f1508c3..b30ca51 100755
--- a/service-store/src/main/java/com/java110/store/bmo/contract/impl/UpdateContractBMOImpl.java
+++ b/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("淇濆瓨灞炴�уけ璐�");
+        }
+    }
+
     /**
      * 淇敼 鎴垮眿绉熻祦鐘舵��
      *
diff --git a/service-store/src/main/java/com/java110/store/dao/IContractServiceDao.java b/service-store/src/main/java/com/java110/store/dao/IContractServiceDao.java
index e5d2b73..d72b250 100755
--- a/service-store/src/main/java/com/java110/store/dao/IContractServiceDao.java
+++ b/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;
 
     /**
      * 鏌ヨ鍚堝悓绠$悊鎬绘暟
diff --git a/service-store/src/main/java/com/java110/store/dao/impl/ContractServiceDaoImpl.java b/service-store/src/main/java/com/java110/store/dao/impl/ContractServiceDaoImpl.java
index 970f9d2..b20ac1b 100755
--- a/service-store/src/main/java/com/java110/store/dao/impl/ContractServiceDaoImpl.java
+++ b/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 鍚堝悓绠$悊淇℃伅
diff --git a/service-store/src/main/java/com/java110/store/smo/impl/ContractInnerServiceSMOImpl.java b/service-store/src/main/java/com/java110/store/smo/impl/ContractInnerServiceSMOImpl.java
index 5f3b39a..8afa80b 100644
--- a/service-store/src/main/java/com/java110/store/smo/impl/ContractInnerServiceSMOImpl.java
+++ b/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);
+            // 杩欓噷璋冪敤浣燚AO鐨� 鏂板鎴栨洿鏂版柟娉曪紙涓嶅瓨鍦ㄥ垯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;
diff --git a/springboot/src/main/resources/application-debug.yml b/springboot/src/main/resources/application-debug.yml
index aa18c8e..df1a834 100644
--- a/springboot/src/main/resources/application-debug.yml
+++ b/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:
diff --git a/springboot/src/main/resources/application.yml b/springboot/src/main/resources/application.yml
index d7d549c..e54f7d3 100644
--- a/springboot/src/main/resources/application.yml
+++ b/springboot/src/main/resources/application.yml
@@ -2,6 +2,7 @@
   profiles:
     active: devlocal
 
+
 import:
   line:
     max: 50000

--
Gitblit v1.8.0