From 47305dd209a3ce3889b088a2f2e2f05c923178c5 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期一, 25 十一月 2024 18:38:01 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/funingyunwei

---
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                       |   92 +++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractCloudController.java                |    8 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractRevenueCloudController.java         |   92 +++
 server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java                         |    1 
 server/system_service/src/main/java/com/doumee/cloud/SystemCloudController.java                                |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractRevenueMapper.java               |   14 
 server/system_service/src/main/java/com/doumee/cloud/SystemMenuCloudController.java                            |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwFloorCloudController.java                   |    8 
 server/system_service/src/main/java/com/doumee/cloud/SystemDataPermissionCloudController.java                  |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorderLog.java                  |    4 
 server/visits/dmvisit_admin/src/main/java/com/doumee/service/impl/HkSyncEventServiceImpl.java                  |    2 
 server/system_service/src/main/java/com/doumee/cloud/SystemDictDataCloudController.java                        |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java            |    3 
 server/system_service/src/main/java/com/doumee/cloud/SystemLoginLogCloudController.java                        |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractRevenueService.java          |   97 +++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java                  |  151 +++-
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java                 |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java                          |    8 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java            |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwFloorServiceImpl.java           |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java                      |   55 ++
 server/system_service/src/main/java/com/doumee/cloud/SystemDictCloudController.java                            |    2 
 server/system_service/src/main/java/com/doumee/cloud/SystemPositionCloudController.java                        |    2 
 server/system_service/src/main/java/com/doumee/cloud/SystemTraceLogCloudController.java                        |    2 
 server/system_service/src/main/java/com/doumee/cloud/NoticesCloudController.java                               |    2 
 server/system_service/src/main/java/com/doumee/cloud/SystemDepartmentCloudController.java                      |    2 
 server/system_service/src/main/java/com/doumee/cloud/SystemUserCloudController.java                            |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java                     |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractRevenueServiceImpl.java |  206 +++++++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java        |  179 ++++++
 server/system_service/src/main/java/com/doumee/cloud/SystemRoleCloudController.java                            |    2 
 server/system_service/src/main/java/com/doumee/cloud/SystemPermissionCloudController.java                      |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractBillService.java             |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractRoom.java                  |   13 
 server/system_service/src/main/java/com/doumee/cloud/SystemMonitorCloudController.java                         |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractRevenue.java               |  101 +++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java    |  330 +++++++----
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java       |  158 +++--
 38 files changed, 1,313 insertions(+), 270 deletions(-)

diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/NoticesCloudController.java b/server/system_service/src/main/java/com/doumee/cloud/NoticesCloudController.java
similarity index 98%
rename from server/system_service/src/main/java/com/doumee/api/cloud/NoticesCloudController.java
rename to server/system_service/src/main/java/com/doumee/cloud/NoticesCloudController.java
index 26880b7..300bccb 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/NoticesCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/cloud/NoticesCloudController.java
@@ -1,4 +1,4 @@
-package com.doumee.api.cloud;
+package com.doumee.cloud;
 
 import com.doumee.api.BaseController;
 import com.doumee.config.annotation.CloudRequiredPermission;
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemCloudController.java b/server/system_service/src/main/java/com/doumee/cloud/SystemCloudController.java
similarity index 97%
rename from server/system_service/src/main/java/com/doumee/api/cloud/SystemCloudController.java
rename to server/system_service/src/main/java/com/doumee/cloud/SystemCloudController.java
index ef10c47..21ebe0b 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/cloud/SystemCloudController.java
@@ -1,4 +1,4 @@
-package com.doumee.api.cloud;
+package com.doumee.cloud;
 
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemUserBiz;
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java b/server/system_service/src/main/java/com/doumee/cloud/SystemDataPermissionCloudController.java
similarity index 99%
rename from server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java
rename to server/system_service/src/main/java/com/doumee/cloud/SystemDataPermissionCloudController.java
index 6166fcb..7be2b30 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/cloud/SystemDataPermissionCloudController.java
@@ -1,4 +1,4 @@
-package com.doumee.api.cloud;
+package com.doumee.cloud;
 
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemDataPermissionBiz;
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDepartmentCloudController.java b/server/system_service/src/main/java/com/doumee/cloud/SystemDepartmentCloudController.java
similarity index 99%
rename from server/system_service/src/main/java/com/doumee/api/cloud/SystemDepartmentCloudController.java
rename to server/system_service/src/main/java/com/doumee/cloud/SystemDepartmentCloudController.java
index 5f9f971..2e6d218 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDepartmentCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/cloud/SystemDepartmentCloudController.java
@@ -1,4 +1,4 @@
-package com.doumee.api.cloud;
+package com.doumee.cloud;
 
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemDepartmentBiz;
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictCloudController.java b/server/system_service/src/main/java/com/doumee/cloud/SystemDictCloudController.java
similarity index 98%
rename from server/system_service/src/main/java/com/doumee/api/cloud/SystemDictCloudController.java
rename to server/system_service/src/main/java/com/doumee/cloud/SystemDictCloudController.java
index 7d0dcbc..ee91d10 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/cloud/SystemDictCloudController.java
@@ -1,4 +1,4 @@
-package com.doumee.api.cloud;
+package com.doumee.cloud;
 
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemDictBiz;
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java b/server/system_service/src/main/java/com/doumee/cloud/SystemDictDataCloudController.java
similarity index 99%
rename from server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java
rename to server/system_service/src/main/java/com/doumee/cloud/SystemDictDataCloudController.java
index 38ce34c..74b0efe 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/cloud/SystemDictDataCloudController.java
@@ -1,4 +1,4 @@
-package com.doumee.api.cloud;
+package com.doumee.cloud;
 
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemDictDataBiz;
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemLoginLogCloudController.java b/server/system_service/src/main/java/com/doumee/cloud/SystemLoginLogCloudController.java
similarity index 98%
rename from server/system_service/src/main/java/com/doumee/api/cloud/SystemLoginLogCloudController.java
rename to server/system_service/src/main/java/com/doumee/cloud/SystemLoginLogCloudController.java
index 6a2a031..8ab92d9 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemLoginLogCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/cloud/SystemLoginLogCloudController.java
@@ -1,4 +1,4 @@
-package com.doumee.api.cloud;
+package com.doumee.cloud;
 
 import com.doumee.api.BaseController;
 import com.doumee.config.annotation.CloudRequiredPermission;
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemMenuCloudController.java b/server/system_service/src/main/java/com/doumee/cloud/SystemMenuCloudController.java
similarity index 99%
rename from server/system_service/src/main/java/com/doumee/api/cloud/SystemMenuCloudController.java
rename to server/system_service/src/main/java/com/doumee/cloud/SystemMenuCloudController.java
index d274b92..3ffadd8 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemMenuCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/cloud/SystemMenuCloudController.java
@@ -1,4 +1,4 @@
-package com.doumee.api.cloud;
+package com.doumee.cloud;
 
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemMenuBiz;
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemMonitorCloudController.java b/server/system_service/src/main/java/com/doumee/cloud/SystemMonitorCloudController.java
similarity index 97%
rename from server/system_service/src/main/java/com/doumee/api/cloud/SystemMonitorCloudController.java
rename to server/system_service/src/main/java/com/doumee/cloud/SystemMonitorCloudController.java
index 303ada4..ae2916d 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemMonitorCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/cloud/SystemMonitorCloudController.java
@@ -1,4 +1,4 @@
-package com.doumee.api.cloud;
+package com.doumee.cloud;
 
 import com.doumee.api.BaseController;
 import com.doumee.config.annotation.CloudRequiredPermission;
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemPermissionCloudController.java b/server/system_service/src/main/java/com/doumee/cloud/SystemPermissionCloudController.java
similarity index 98%
rename from server/system_service/src/main/java/com/doumee/api/cloud/SystemPermissionCloudController.java
rename to server/system_service/src/main/java/com/doumee/cloud/SystemPermissionCloudController.java
index c99d039..a6c70aa 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemPermissionCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/cloud/SystemPermissionCloudController.java
@@ -1,4 +1,4 @@
-package com.doumee.api.cloud;
+package com.doumee.cloud;
 
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemPermissionBiz;
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemPositionCloudController.java b/server/system_service/src/main/java/com/doumee/cloud/SystemPositionCloudController.java
similarity index 99%
rename from server/system_service/src/main/java/com/doumee/api/cloud/SystemPositionCloudController.java
rename to server/system_service/src/main/java/com/doumee/cloud/SystemPositionCloudController.java
index a60d8ba..dd2ba2b 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemPositionCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/cloud/SystemPositionCloudController.java
@@ -1,4 +1,4 @@
-package com.doumee.api.cloud;
+package com.doumee.cloud;
 
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemPositionBiz;
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java b/server/system_service/src/main/java/com/doumee/cloud/SystemRoleCloudController.java
similarity index 99%
rename from server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java
rename to server/system_service/src/main/java/com/doumee/cloud/SystemRoleCloudController.java
index f5d0896..4b47963 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/cloud/SystemRoleCloudController.java
@@ -1,4 +1,4 @@
-package com.doumee.api.cloud;
+package com.doumee.cloud;
 
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemRoleBiz;
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemTraceLogCloudController.java b/server/system_service/src/main/java/com/doumee/cloud/SystemTraceLogCloudController.java
similarity index 98%
rename from server/system_service/src/main/java/com/doumee/api/cloud/SystemTraceLogCloudController.java
rename to server/system_service/src/main/java/com/doumee/cloud/SystemTraceLogCloudController.java
index 2f4ce98..488e089 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemTraceLogCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/cloud/SystemTraceLogCloudController.java
@@ -1,4 +1,4 @@
-package com.doumee.api.cloud;
+package com.doumee.cloud;
 
 import com.doumee.api.BaseController;
 import com.doumee.config.annotation.CloudRequiredPermission;
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemUserCloudController.java b/server/system_service/src/main/java/com/doumee/cloud/SystemUserCloudController.java
similarity index 99%
rename from server/system_service/src/main/java/com/doumee/api/cloud/SystemUserCloudController.java
rename to server/system_service/src/main/java/com/doumee/cloud/SystemUserCloudController.java
index 882d368..8167d7d 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemUserCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/cloud/SystemUserCloudController.java
@@ -1,4 +1,4 @@
-package com.doumee.api.cloud;
+package com.doumee.cloud;
 
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemUserBiz;
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
index eca4a9b..0e40100 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -51,6 +51,7 @@
     public static final String SPECIAL_COMPANY_ID ="SPECIAL_COMPANY_ID" ;
     public static final String YW_DEVICE ="YW_DEVICE" ;
     public static final String YW_PATROL ="YW_PATROL" ;
+    public static final String YW_CONTRACT_BILL ="YW_CONTRACT_BILL" ;
 
     public static final String RESERVATION_TOTAL_NUM ="RESERVATION_TOTAL_NUM" ;
     public static final String SIGN_IN_PLACE_LAT ="SIGN_IN_PLACE_LAT" ;
@@ -144,6 +145,7 @@
     public static final String MYSQL_BACKUP_DIR ="MYSQL_BACKUP_DIR" ;
     public static final String EVENT_FILES_PRIVATE_DOMAIN ="EVENT_FILES_PRIVATE_DOMAIN" ;
     public static final String EVENT_FILES_PUBLIC_DOMAIN ="EVENT_FILES_PUBLIC_DOMAIN" ;
+    public static final String YW_CONTRACT_FILE = "YW_CONTRACT_FILE";
     public static  boolean DEALING_HK_SYNCPRIVILEGE= false;
     public static  boolean DEALING_HK_SYNCDEVICE = false;
     public static  boolean DEALING_HK_SYNCPLATFORM = false;
@@ -213,17 +215,17 @@
     }
 
 
-
-    public interface BillPayStatus{
-        //璁垮鐘舵��(0:鏈鍒�,1:宸茬鍒�,2:宸茬閫�,3:婊炵暀,4:鏈闂�,5:鑷姩绛剧,6:鏈閫�)
-        int waitSign = 0;
-        int signin= 1;
-        int signout = 2;
-        int noleave =3;
-        int novisit =4;
-        int autoOut =5;
-        int noSignout =6;
+    /**
+     * 璐﹀崟绫诲瀷 0绉熻祦鏉℃ 1鐗╀笟鏉℃ 2绉熻祦鎶奸噾 3鐗╀笟鎶奸噾 4鑷缓璐﹀崟
+     */
+    public interface contractBillType{
+        int lease = 0;
+        int property= 1;
+        int leaseDeposit = 2;
+        int propertyDeposit =3;
+        int create =4;
     }
+
 
     /**
      * 浣滀笟绫诲瀷 0鑷湁杞﹀嵏璐� 1鑷湁杞﹁璐� 2澶栧崗杞﹀嵏璐� 3澶栧崗杞﹁璐� 4甯傚叕鍙稿鍗忚溅鍗歌揣
@@ -1249,6 +1251,8 @@
         FN_DEVICE_RECORD_FILE(6, "闃滃畞鏈嶅姟骞冲彴杩愮淮璁板綍鍥剧墖 ", "闃滃畞鏈嶅姟骞冲彴杩愮淮璁板綍鍥剧墖 "),
         FN_PATROL_POINT_FILE(7, "宸℃鐐归檮浠� ", "宸℃鐐归檮浠� "),
         FN_CONTRACT_BILL_FILE(8, "鍚堝悓璐﹀崟闄勪欢 ", "鍚堝悓璐﹀崟闄勪欢 "),
+        YW_CONTRACT_FILE(9, "鍚堝悓闄勪欢 ", "鍚堝悓闄勪欢 ")
+
         ;
         // 鎴愬憳鍙橀噺
         private String name;
@@ -1303,6 +1307,74 @@
             return noteinfo;
         }
 
+    }
+
+    /**
+     * 杩愮淮鍚堝悓銆佸伐鍗曚俊鎭褰曠被鍨�
+     * 鎿嶄綔绫诲瀷 0宸ュ崟鍒涘缓 1鎸囨淳 2澶勭悊 3鍚堝悓鍒涘缓 4鍚堝悓鍙樻洿 5鍚堝悓閫�绉�
+     */
+    public  enum YwLogType{
+        WORKORDER_CREATE(0, "宸ュ崟鍒涘缓", "宸ュ崟鍒涘缓"),
+        WORKORDER_DISPATCH(1, "宸ュ崟鎸囨淳", "宸ュ崟鎸囨淳"),
+        WORKORDER_DEAL(2, "宸ュ崟澶勭悊 ", "宸ュ崟澶勭悊 "),
+        CONTRACT_CREATE(3, "鍚堝悓鍒涘缓 ", "鍚堝悓鍒涘缓 "),
+        CONTRACT_UPDATE(4, "鍚堝悓鍙樻洿 ", "鍚堝悓鍙樻洿 "),
+        CONTRACT_BACK(5, "鍚堝悓閫�绉� ", "鍚堝悓閫�绉� "),
+
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private int key;
+        private String noteinfo;// 鎻忚堪
+
+        // 鏋勯�犳柟娉�
+        YwLogType(int key, String name, String noteinfo) {
+            this.name = name;
+            this.key = key;
+            this.noteinfo = noteinfo;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getName(int index) {
+            for (MultiFile c : MultiFile.values()) {
+                if (c.getKey() == index) {
+                    return c.name;
+                }
+            }
+            return null;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getInfo(int index) {
+            for (YwLogType c : YwLogType.values()) {
+                if (c.getKey() == index) {
+                    return c.noteinfo;
+                }
+            }
+            return null;
+        }
+
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getKey() {
+            return key;
+        }
+
+        public void setKey(int key) {
+            this.key = key;
+        }
+
+        public String getNoteinfo() {
+            return noteinfo;
+        }
+
 
 
     }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java
index bb4103e..57d7c63 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java
@@ -90,7 +90,6 @@
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:ywcontractbill:query")
     public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-
-        return ApiResponse.success(ywContractBillService.findById(id));
+        return ApiResponse.success(ywContractBillService.getDetail(id));
     }
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractCloudController.java
index f387de4..73abf9f 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractCloudController.java
@@ -40,6 +40,14 @@
         ywContract.setLoginUserInfo(this.getLoginUser(token));
         return ApiResponse.success(ywContractService.create(ywContract));
     }
+    @PreventRepeat
+    @ApiOperation("閫�绉�")
+    @PostMapping("/backRent")
+    @CloudRequiredPermission("business:ywcontract:update")
+    public ApiResponse backRent(@RequestBody YwContract ywContract,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        ywContract.setLoginUserInfo(this.getLoginUser(token));
+        return ApiResponse.success(ywContractService.backRent(ywContract));
+    }
 
     @ApiOperation("鏍规嵁ID鍒犻櫎")
     @GetMapping("/delete/{id}")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractRevenueCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractRevenueCloudController.java
new file mode 100644
index 0000000..f67ad1d
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractRevenueCloudController.java
@@ -0,0 +1,92 @@
+package com.doumee.cloud.admin;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.YwContractRevenue;
+import com.doumee.service.business.YwContractRevenueService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/11/25 10:29
+ */
+@Api(tags = "杩愮淮鍚堝悓鏀舵敮娴佹按")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/ywContractRevenue")
+public class YwContractRevenueCloudController extends BaseController {
+
+    @Autowired
+    private YwContractRevenueService ywContractRevenueService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:ywcontractrevenue:create")
+    public ApiResponse create(@RequestBody YwContractRevenue ywContractRevenue,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        ywContractRevenue.setLoginUserInfo(getLoginUser(token));
+        return ApiResponse.success(ywContractRevenueService.create(ywContractRevenue));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:ywcontractrevenue:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        ywContractRevenueService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:ywcontractrevenue:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        ywContractRevenueService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:ywcontractrevenue:update")
+    public ApiResponse updateById(@RequestBody YwContractRevenue ywContractRevenue) {
+        ywContractRevenueService.updateById(ywContractRevenue);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:ywcontractrevenue:query")
+    public ApiResponse<PageData<YwContractRevenue>> findPage (@RequestBody PageWrap<YwContractRevenue> pageWrap) {
+        return ApiResponse.success(ywContractRevenueService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:ywcontractrevenue:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<YwContractRevenue> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(YwContractRevenue.class).export(ywContractRevenueService.findPage(pageWrap).getRecords(), "杩愮淮鍚堝悓鏀舵敮娴佹按", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:ywcontractrevenue:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(ywContractRevenueService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwFloorCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwFloorCloudController.java
index e503f64..c541f6f 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwFloorCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwFloorCloudController.java
@@ -79,6 +79,14 @@
         return ApiResponse.success(ywFloorService.findPage(pageWrap));
     }
 
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/list")
+    @CloudRequiredPermission("business:ywfloor:query")
+    public ApiResponse<List<YwFloor>> findList (@RequestBody  YwFloor pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        pageWrap. setLoginUserInfo(this.getLoginUser(token));
+        return ApiResponse.success(ywFloorService.findList(pageWrap));
+    }
+
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:ywfloor:exportExcel")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
index eff6a72..0448627 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
@@ -53,6 +53,7 @@
                 .host(host)
                 .select()
                 .apis( basePackage("com.doumee.cloud"))
+//                .apis( basePackage("com.doumee.api.cloud"))
 //                .apis( basePackage("com.doumee.api.common"))
 
 //                .apis( basePackage("com.doumee.cloud.openapi;com.doumee.api.common"))
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/service/impl/HkSyncEventServiceImpl.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/service/impl/HkSyncEventServiceImpl.java
index 0a46fbe..d94a198 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/service/impl/HkSyncEventServiceImpl.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/service/impl/HkSyncEventServiceImpl.java
@@ -32,7 +32,7 @@
     @Autowired
     private InterfaceLogService interfaceLogService;
 
-    @PostConstruct
+//    @PostConstruct
     public  int  initHkConfig(){
         //鑾峰彇鏍圭粍缁囩紪鐮�
         initHkParamConfig();
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractRevenueMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractRevenueMapper.java
new file mode 100644
index 0000000..39704de
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractRevenueMapper.java
@@ -0,0 +1,14 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.YwContractRevenue;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/11/25 10:29
+ */
+public interface YwContractRevenueMapper extends MPJBaseMapper<YwContractRevenue> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java
index bc6981a..99b45fa 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java
@@ -57,6 +57,9 @@
     @ApiModelProperty(value = "鐘舵�� 0寰呮墽琛� 1鎵ц涓� 2宸插埌鏈� 3宸查��绉�", example = "1")
     @ExcelColumn(name="鐘舵�� 0寰呮墽琛� 1鎵ц涓� 2宸插埌鏈� 3宸查��绉�")
     private Integer status;
+    @ApiModelProperty(value = "璐﹀崟缁撴竻鐘舵�侊細 0寰呬粯娆� 1閮ㄥ垎鏀舵 2宸茬粨娓� 3宸插叧闂�", example = "1")
+    @ExcelColumn(name="璐﹀崟缁撴竻鐘舵�侊細 0寰呬粯娆� 1閮ㄥ垎鏀舵 2宸茬粨娓� 3宸插叧闂�")
+    private Integer billStatus;
 
     @ApiModelProperty(value = "绫诲瀷 0鐗╀笟绉熻祦 1鐗╀笟 2绉熻祦", example = "1")
     @ExcelColumn(name="绫诲瀷 0鐗╀笟绉熻祦 1鐗╀笟 2绉熻祦")
@@ -101,7 +104,37 @@
     @ApiModelProperty(value = "鑱旂郴浜虹紪鐮侊紙鍏宠仈memebr)", example = "1")
     @ExcelColumn(name="鑱旂郴浜虹紪鐮侊紙鍏宠仈memebr)")
     private Integer memberId;
+    @ApiModelProperty(value = "閫�绉熺被鍨� 0鍒版湡閫�绉� 1鎹㈡埧閫�绉� 2杩濈害閫�绉� 3鍗忓晢閫�绉�", example = "1")
+    @ExcelColumn(name="閫�绉熺被鍨� 0鍒版湡閫�绉� 1鎹㈡埧閫�绉� 2杩濈害閫�绉� 3鍗忓晢閫�绉�")
+    private Integer btType;
 
+    @ApiModelProperty(value = "閫�绉熸搷浣滄椂闂�")
+    @ExcelColumn(name="閫�绉熸搷浣滄椂闂�")
+    private Date btActDate;
+
+    @ApiModelProperty(value = "閫�绉熸搷浣滀汉锛堝叧鑱攕ystem_user)", example = "1")
+    @ExcelColumn(name="閫�绉熸搷浣滀汉锛堝叧鑱攕ystem_user)")
+    private Integer btActUserId;
+
+    @ApiModelProperty(value = "閫�绉熷師鍥�")
+    @ExcelColumn(name="閫�绉熷師鍥�")
+    private String btInfo;
+
+    @ApiModelProperty(value = "閫�绉熸棩鏈�")
+    @ExcelColumn(name="閫�绉熸棩鏈�")
+    private Date btDate;
+
+    @ApiModelProperty(value = "閫�绉熺粡鍔炰汉缂栫爜", example = "1")
+    @ExcelColumn(name="閫�绉熺粡鍔炰汉缂栫爜")
+    private Integer btUserId;
+
+    @ApiModelProperty(value = "閫�绉熺鍒版棩鏈�")
+    @ExcelColumn(name="閫�绉熺鍒版棩鏈�")
+    private Date btSignDate;
+
+    @ApiModelProperty(value = "閫�绉熺粨绠楅噾棰濆悎璁�", example = "1")
+    @ExcelColumn(name="閫�绉熺粨绠楅噾棰濆悎璁�")
+    private BigDecimal btFee;
     @ApiModelProperty(value = "绉熻祦鏉℃鎶奸噾锛堝厓锛�", example = "1")
     @ExcelColumn(name="绉熻祦鏉℃鎶奸噾锛堝厓锛�")
     private BigDecimal zlDeposit;
@@ -158,12 +191,30 @@
     @ApiModelProperty(value = "鍏徃鍚嶇О")
     @TableField(exist = false)
     private String companyName;
+    @ApiModelProperty(value = "缁忓姙浜哄鍚�")
+    @TableField(exist = false)
+    private String userName;
+    @ApiModelProperty(value = "椤圭洰鍚�")
+    @TableField(exist = false)
+    private String projectName;
+    @ApiModelProperty(value = "绉熷鍚嶇О")
+    @TableField(exist = false)
+    private String renterName;
+    @ApiModelProperty(value = "鍒涘缓浜哄鍚�")
+    @TableField(exist = false)
+    private String creatorName;
     @ApiModelProperty(value = "绉熻祦鎬婚潰绉�", example = "1")
     @TableField(exist = false)
     private BigDecimal totalArea;
     @ApiModelProperty(value = "鐗╀笟鏉℃闆嗗悎")
     @TableField(exist = false)
     private List<YwContractDetail> wyDetailList;
+    @ApiModelProperty(value = "鎿嶄綔鏃ュ織闆嗗悎")
+    @TableField(exist = false)
+    private List<YwWorkorderLog> logList;
+    @ApiModelProperty(value = "璐﹀崟闆嗗悎")
+    @TableField(exist = false)
+    private List<YwContractBill> billList;
     @ApiModelProperty(value = "閲嶆柊寮�濮嬫椂闂�")
     @TableField(exist = false)
     private Date queryStartTime;
@@ -171,4 +222,8 @@
     @ApiModelProperty(value = "鏌ヨ缁撴潫鏃堕棿")
     @TableField(exist = false)
     private Date queryEndTime;
+
+    @ApiModelProperty(value = "閫�绉熸椂鏂板鐨勬敹浠樻璐﹀崟")
+    @TableField(exist = false)
+    private List<YwContractBill> addBillList;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java
index 121375e..4d1a770 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java
@@ -28,118 +28,181 @@
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelColumn(name="鏇存柊鏃堕棿")
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
     private String remark;
     @ApiModelProperty(value = "璐﹀崟鍚嶇О")
-    @ExcelColumn(name="璐﹀崟鍚嶇О")
     private String title;
-    @ApiModelProperty(value = "绫诲瀷 0绉熻祦鏉℃ 1鐗╀笟鏉℃ 2绉熻祦鎶奸噾 3鐗╀笟鎶奸噾", example = "1")
-    @ExcelColumn(name="绫诲瀷 0绉熻祦鏉℃ 1鐗╀笟鏉℃ 2绉熻祦鎶奸噾 3鐗╀笟鎶奸噾")
+    @ApiModelProperty(value = "璐﹀崟缂栧彿")
+    private String code;
+    @ApiModelProperty(value = "绫诲瀷 0鍚堝悓璐﹀崟 1鑷缓璐﹀崟", example = "1")
+    @ExcelColumn(name="璐﹀崟鏉ユ簮",index = 12,width = 6,valueMapping = "0=鍚堝悓璐﹀崟;1=鑷缓璐﹀崟;")
     private Integer type;
+
     @ApiModelProperty(value = "鐘舵�� 0寮�濮嬶紱1鍏抽棴锛�", example = "1")
-    @ExcelColumn(name="鐘舵�� 0寮�濮嬶紱1鍏抽棴锛�")
     private Integer status;
 
     @ApiModelProperty(value = "寮�濮嬫椂闂�")
-    @ExcelColumn(name="寮�濮嬫椂闂�")
+    @ExcelColumn(name="璁¤垂寮�濮嬫棩鏈�",index = 10,width = 6,dateFormat = "yyyy-MM-dd")
     private Date startDate;
-
-    @ApiModelProperty(value = "瀹為檯浠樻鏃�")
-    @ExcelColumn(name="瀹為檯浠樻鏃�")
-    private Date actPayDate;
-    @ApiModelProperty(value = "璁″垝浠樻鏃�")
-    @ExcelColumn(name="璁″垝浠樻鏃�")
-    private Date planPayDate;
     @ApiModelProperty(value = "缁撴潫鏃堕棿")
-    @ExcelColumn(name="缁撴潫鏃堕棿")
+    @ExcelColumn(name="璁¤垂缁撴潫鏃ユ湡",index = 11,width = 6,dateFormat = "yyyy-MM-dd")
     private Date endDate;
 
+    @ApiModelProperty(value = "瀹為檯浠樻鏃�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date actPayDate;
 
     @ApiModelProperty(value = "璁″垝浠樻鏃�")
-    @ExcelColumn(name="璁″垝浠樻鏃�")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date planPayData;
-
-    @ApiModelProperty(value = "瀹為檯浠樻鏃�")
-    @ExcelColumn(name="瀹為檯浠樻鏃�")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date actPayData;
+    private Date planPayDate;
 
     @ApiModelProperty(value = "鍚堝悓鏉℃缂栫爜锛堝叧鑱攜w_contract_detail)", example = "1")
-    @ExcelColumn(name="鍚堝悓鏉℃缂栫爜锛堝叧鑱攜w_contract_detail)")
     private Integer detailId;
 
     @ApiModelProperty(value = "鍚堝悓缂栫爜锛堝叧鑱攜w_contract)", example = "1")
-    @ExcelColumn(name="鍚堝悓缂栫爜锛堝叧鑱攜w_contract)")
     private Integer contractId;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
-    @ApiModelProperty(value = "鎬婚噾棰�", example = "1")
-    @ExcelColumn(name="鎬婚噾棰�")
+    @ApiModelProperty(value = "璐﹀崟閲戦", example = "1")
+    @ExcelColumn(name="璐﹀崟閲戦",index = 4,width = 6)
     private BigDecimal totleFee;
 
-    @ApiModelProperty(value = "璐圭敤绫诲瀷锛�0=绉熻祦璐癸紱1=鐗╀笟璐癸紱2=鎶奸噾锛�3=淇濊瘉閲戯紱4=姘寸數璐癸紱5=鏉傞」璐癸紱6=鍏朵粬", example = "1")
-    @ExcelColumn(name="璐圭敤绫诲瀷锛�0=绉熻祦璐癸紱1=鐗╀笟璐癸紱2=鎶奸噾锛�3=淇濊瘉閲戯紱4=姘寸數璐癸紱5=鏉傞」璐癸紱6=鍏朵粬")
+    @ApiModelProperty(value = "搴旀敹閲戦", example = "1")
+    @ExcelColumn(name="搴旀敹閲戦",index = 5,width = 6)
+    private BigDecimal receivableFee;
+
+    @ApiModelProperty(value = "璐圭敤绫诲瀷锛�0=绉熻祦璐癸紱1=鐗╀笟璐癸紱2=绉熻祦鎶奸噾锛�3=鐗╀笟璇侀噾锛�4=姘寸數璐癸紱5=鏉傞」璐癸紱6=鍏朵粬 ", example = "1")
+    @ExcelColumn(name="璐圭敤绫诲瀷",index = 8,width = 6,valueMapping = "0=绉熻祦璐癸紱1=鐗╀笟璐癸紱2=绉熻祦鎶奸噾锛�3=鐗╀笟璇侀噾锛�4=姘寸數璐癸紱5=鏉傞」璐癸紱6=鍏朵粬;")
     private Integer costType;
 
     @ApiModelProperty(value = "璐﹀崟绫诲瀷锛�0=鏀舵锛�1=浠樻", example = "1")
-    @ExcelColumn(name="璐﹀崟绫诲瀷锛�0=鏀舵锛�1=浠樻")
     private Integer billType;
 
+    @ApiModelProperty(value = "璐圭敤绫诲瀷锛�0=鍛ㄦ湡璐圭敤锛�1=涓�娆℃�ц垂鐢�")
+    @TableField(exist = false)
+    private Integer feeType;
+
     @ApiModelProperty(value = "鎵�灞炲叕鍙�", example = "1")
-    @ExcelColumn(name="鎵�灞炲叕鍙�")
     private Integer companyId;
 
-    @ApiModelProperty(value = "浠樻鐘舵�侊細0=寰呮敹娆撅紱1=宸茬粨娓咃紱2=閮ㄥ垎缁撴竻锛�3=寰呬粯娆�")
-    @ExcelColumn(name="浠樻鐘舵�侊細0=寰呮敹娆撅紱1=宸茬粨娓咃紱2=閮ㄥ垎缁撴竻锛�3=寰呬粯娆�")
+    @ApiModelProperty(value = "浠樻鐘舵�侊細0=寰呮敹娆撅紱1=宸茬粨娓咃紱2=閮ㄥ垎缁撴竻锛�3=寰呬粯娆撅紱4=寰呴��娆撅紱5=宸插叧闂�")
+    @ExcelColumn(name="缁撴竻鐘舵��",index = 3,width = 6,valueMapping = "0=寰呮敹娆�;1=宸茬粨娓�;2=閮ㄥ垎缁撴竻;3=寰呬粯娆�;4=寰呴��娆�;5=宸插叧闂�;")
     private Integer payStatus;
+    @ApiModelProperty(value = "閫�绉熺被鍨� 0鍒版湡閫�绉� 1鎹㈡埧閫�绉� 2杩濈害閫�绉� 3鍗忓晢閫�绉�", example = "1")
+    @ExcelColumn(name="閫�绉熺被鍨� 0鍒版湡閫�绉� 1鎹㈡埧閫�绉� 2杩濈害閫�绉� 3鍗忓晢閫�绉�")
+    private Integer btType;
 
+    @ApiModelProperty(value = "閫�绉熸搷浣滄椂闂�")
+    @ExcelColumn(name="閫�绉熸搷浣滄椂闂�")
+    private Date btActDate;
+
+    @ApiModelProperty(value = "閫�绉熸搷浣滀汉锛堝叧鑱攕ystem_user)", example = "1")
+    @ExcelColumn(name="閫�绉熸搷浣滀汉锛堝叧鑱攕ystem_user)")
+    private Integer btActUserId;
+
+    @ApiModelProperty(value = "閫�绉熷師鍥�")
+    @ExcelColumn(name="閫�绉熷師鍥�")
+    private String btInfo;
+
+    @ApiModelProperty(value = "閫�绉熸棩鏈�")
+    @ExcelColumn(name="閫�绉熸棩鏈�")
+    private Date btDate;
+
+    @ApiModelProperty(value = "閫�绉熺粡鍔炰汉缂栫爜", example = "1")
+    @ExcelColumn(name="閫�绉熺粡鍔炰汉缂栫爜")
+    private Integer btUserId;
+
+    @ApiModelProperty(value = "閫�绉熺鍒版棩鏈�")
+    @ExcelColumn(name="閫�绉熺鍒版棩鏈�")
+    private Date btSignDate;
+
+    @ApiModelProperty(value = "閫�绉熺粨绠楅噾棰濆悎璁�", example = "1")
+    @ExcelColumn(name="閫�绉熺粨绠楅噾棰濆悎璁�")
+    private BigDecimal btFee;
     @ApiModelProperty(value = "瀹㈡埛鍚嶇О锛堜粯娆炬柟锛�", example = "1")
+    @ExcelColumn(name="瀹㈡埛鍚嶇О",index = 0,width = 10)
     @TableField(exist = false)
     private String customerName;
-
-    @ApiModelProperty(value = "鍚堝悓鍚嶇О", example = "1")
-    @TableField(exist = false)
-    private String contractName;
 
     @ApiModelProperty(value = "鍏徃鍚嶇О", example = "1")
     @TableField(exist = false)
     private String companyName;
 
+    @ApiModelProperty(value = "鍗曞彿鏃ユ湡", example = "1",hidden = true)
+    @TableField(exist = false)
+    private String codeDate;
+
+
+    @ApiModelProperty(value = "鍚堝悓缂栧彿", example = "1")
+    @ExcelColumn(name="鍚堝悓缂栧彿",index = 2,width = 10)
+    @TableField(exist = false)
+    private String contractCode;
+
+    @ApiModelProperty(value = "妤煎畤鎴块棿", example = "1")
+    @ExcelColumn(name="妤煎畤鎴块棿",index = 1,width = 10)
+    @TableField(exist = false)
+    private String roomPathName;
+
+    @ApiModelProperty(value = "鎴块棿鏁版嵁", example = "1")
+    @TableField(exist = false)
+    private List<YwRoom> ywRoomList ;
+
+
+    @ApiModelProperty(value = "璁″垝浠樻鏃� - 寮�濮�")
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date planPayDateStart;
+
+
+    @ApiModelProperty(value = "璁″垝浠樻鏃� - 缁撴潫")
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date planPayDateEnd;
+
+    @ApiModelProperty(value = "瀹炴敹閲戦")
+    @TableField(exist = false)
+    @ExcelColumn(name="瀹炴敹閲戦",index = 6,width = 6)
+    private BigDecimal actReceivableFee;
+
+    @ApiModelProperty(value = "闇�鏀堕噾棰�")
+    @TableField(exist = false)
+    @ExcelColumn(name="闇�鏀堕噾棰�",index = 7,width = 6)
+    private BigDecimal needReceivableFee;
+
+    @ApiModelProperty(value = "鏄惁閫炬湡锛�0=鍚︼紱1=鏄�")
+    @TableField(exist = false)
+    @ExcelColumn(name="鏄惁閫炬湡",index = 9,width = 6,valueMapping = "0=鏈�炬湡锛�1=宸查�炬湡")
+    private BigDecimal isOverdue;
+
     @ApiModelProperty(value = "闄勪欢淇℃伅", example = "1")
     @TableField(exist = false)
     private List<Multifile> multifileList;
 
-
-    @ApiModelProperty(value = "闄勪欢淇℃伅", example = "1")
+    @ApiModelProperty(value = "鍏宠仈鎴块棿鏁版嵁", example = "1")
     @TableField(exist = false)
     private List<YwContractRoom> ywContractRoomList;
 
+    @ApiModelProperty(value = "鏀舵敮娴佹按", example = "1")
+    @TableField(exist = false)
+    private List<YwContractRevenue> ywContractRevenueList;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractRevenue.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractRevenue.java
new file mode 100644
index 0000000..c0bad0d
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractRevenue.java
@@ -0,0 +1,101 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.core.model.LoginUserModel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import java.math.BigDecimal;
+
+/**
+ * 杩愮淮鍚堝悓鏀舵敮娴佹按
+ * @author 姹熻箘韫�
+ * @date 2024/11/25 10:29
+ */
+@Data
+@ApiModel("杩愮淮鍚堝悓鏀舵敮娴佹按")
+@TableName("`yw_contract_revenue`")
+public class YwContractRevenue extends LoginUserModel {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer creator;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private Integer editor;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @ExcelColumn(name="鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "鐘舵�� 0=寮�鍚紱1=鍏抽棴", example = "1")
+    @ExcelColumn(name="鐘舵�� 0=寮�鍚紱1=鍏抽棴")
+    private Integer status;
+
+    @ApiModelProperty(value = "瀹炴敹閲戦", example = "1")
+    @ExcelColumn(name="瀹炴敹閲戦")
+    private BigDecimal actReceivableFee;
+
+    @ApiModelProperty(value = "瀹為檯浠樻鏃�")
+    @ExcelColumn(name="瀹為檯浠樻鏃�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date actPayDate;
+
+    @ApiModelProperty(value = "浠樻绫诲瀷锛�0=鐜伴噾锛�1=缃戦摱杞处锛�2=POS鏈猴紱3=鏀粯瀹濓紱4=寰俊锛�5=杞处鏀エ锛�6=鍏朵粬", example = "1")
+    @ExcelColumn(name="浠樻绫诲瀷锛�0=鐜伴噾锛�1=缃戦摱杞处锛�2=POS鏈猴紱3=鏀粯瀹濓紱4=寰俊锛�5=杞处鏀エ锛�6=鍏朵粬")
+    private Integer payType;
+
+    @ApiModelProperty(value = "鎵�灞炲叕鍙革紙鍏宠仈 company锛�", example = "1")
+    @ExcelColumn(name="鎵�灞炲叕鍙革紙鍏宠仈 company锛�")
+    private Integer companyId;
+
+    @ApiModelProperty(value = "鏀舵敮璐︽埛锛堝叧鑱攜w_account)", example = "1")
+    @ExcelColumn(name="鏀舵敮璐︽埛锛堝叧鑱攜w_account)")
+    private Integer accountId;
+
+    @ApiModelProperty(value = "鍚堝悓涓婚敭锛堝叧鑱攜w_contract锛�", example = "1")
+    @ExcelColumn(name="鍚堝悓涓婚敭锛堝叧鑱攜w_contract锛�")
+    private Integer contractId;
+
+    @ApiModelProperty(value = "璐﹀崟涓婚敭锛堝叧鑱攜w_contract_bill锛�", example = "1")
+    @ExcelColumn(name="璐﹀崟涓婚敭锛堝叧鑱攜w_contract_bill锛�")
+    private Integer billId;
+
+    @ApiModelProperty(value = "鏀舵敮绫诲瀷锛�0=鏀跺叆锛�1=鏀嚭", example = "1")
+    @ExcelColumn(name="鏀舵敮绫诲瀷锛�0=鏀跺叆锛�1=鏀嚭")
+    private Integer revenueType;
+
+
+    @ApiModelProperty(value = "瀹㈡埛鍚嶇О")
+    @TableField(exist = false)
+    private String customerNme;
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractRoom.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractRoom.java
index 43ac515..b4bf766 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractRoom.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractRoom.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.core.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
@@ -68,4 +69,16 @@
     @ExcelColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
+    @ApiModelProperty(value = "椤圭洰鍚嶇О")
+    @TableField(exist = false)
+    private String projectName;
+    @ApiModelProperty(value = "妤煎畤鍚嶇О")
+    @TableField(exist = false)
+    private String buildingName;
+    @ApiModelProperty(value = "妤煎眰鍚嶇О")
+    @TableField(exist = false)
+    private String floorName;
+    @ApiModelProperty(value = "鎴块棿鍚嶇О")
+    @TableField(exist = false)
+    private String roomName;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java
index 9f18992..8474876 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java
@@ -94,8 +94,8 @@
     @ExcelColumn(name="璁$闈㈢Н锛堝钩鏂圭背锛�")
     private BigDecimal rentArea;
 
-    @ApiModelProperty(value = "妤煎眰鏁�", example = "1")
-    @ExcelColumn(name="妤煎眰鏁�")
+    @ApiModelProperty(value = "妤煎眰缂栫爜锛堝叧鑱攜w_floor)", example = "1")
+    @ExcelColumn(name="妤煎眰缂栫爜")
     private Integer floor;
 
     @ApiModelProperty(value = "鎵�灞為」鐩紪鐮侊紙鍏宠仈yw_project)", example = "1")
@@ -112,4 +112,8 @@
     @ApiModelProperty(value = "妤煎畤鍚嶇О")
     @TableField(exist = false)
     private String buildingName;
+    @ApiModelProperty(value = "妤煎眰鍚嶇О")
+    @TableField(exist = false)
+    private String floorName;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java
index a2a2196..10e5f3f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java
@@ -87,6 +87,9 @@
     @ApiModelProperty(value = "鎵�灞炴埧闂寸紪鐮侊紙鍏宠仈yw_room)", example = "1")
     @ExcelColumn(name="鎵�灞炴埧闂寸紪鐮侊紙鍏宠仈yw_room)")
     private Integer roomId;
+    @ApiModelProperty(value = "鎵�灞炴ゼ灞傜紪鐮侊紙鍏宠仈yw_floor)", example = "1")
+    @ExcelColumn(name="鎵�灞炴ゼ灞傜紪鐮侊紙鍏宠仈yw_floor)")
+    private Integer floorId;
 
     @ApiModelProperty(value = "鎻愭姤浜虹紪鐮�", example = "1")
     @ExcelColumn(name="鎻愭姤浜虹紪鐮�")
@@ -155,6 +158,9 @@
     @ApiModelProperty(value = "鎴挎簮鍚嶇О")
     @TableField(exist = false)
     private String roomName;
+    @ApiModelProperty(value = "妤煎眰鍚嶇О")
+    @TableField(exist = false)
+    private String floorName;
     @ApiModelProperty(value = "鎴垮彿")
     @TableField(exist = false)
     private String roomNum;
@@ -164,6 +170,9 @@
     @ApiModelProperty(value = "澶勭悊浜哄鍚�")
     @TableField(exist = false)
     private String dealUserName;
+    @ApiModelProperty(value = "绫诲埆鍚嶇О")
+    @TableField(exist = false)
+    private String categoryName;
     @ApiModelProperty(value = "鍒嗛厤浜哄鍚�")
     @TableField(exist = false)
     private String dispatchUserName;
@@ -182,4 +191,11 @@
     @ApiModelProperty(value = "鎿嶄綔璁板綍鍒楄〃")
     @TableField(exist = false)
     private List<YwWorkorderLog> logList;
+    @ApiModelProperty(value = "閲嶆柊寮�濮嬫椂闂�")
+    @TableField(exist = false)
+    private Date queryStartTime;
+
+    @ApiModelProperty(value = "鏌ヨ缁撴潫鏃堕棿")
+    @TableField(exist = false)
+    private Date queryEndTime;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorderLog.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorderLog.java
index ea181cb..e769039 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorderLog.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorderLog.java
@@ -65,8 +65,8 @@
     @ExcelColumn(name="绠�浠�")
     private String content;
 
-    @ApiModelProperty(value = "鎿嶄綔绫诲瀷 0宸ュ崟鍒涘缓 1鎸囨淳 2澶勭悊", example = "1")
-    @ExcelColumn(name="鎿嶄綔绫诲瀷 0宸ュ崟鍒涘缓 1鎸囨淳 2澶勭悊")
+    @ApiModelProperty(value = "鎿嶄綔绫诲瀷 0宸ュ崟鍒涘缓 1鎸囨淳 2澶勭悊 3鍚堝悓鍒涘缓 4鍚堝悓鍙樻洿 5鍚堝悓閫�绉� ", example = "1")
+    @ExcelColumn(name="鎿嶄綔绫诲瀷 0宸ュ崟鍒涘缓 1鎸囨淳 2澶勭悊 3鍚堝悓鍒涘缓 4鍚堝悓鍙樻洿 5鍚堝悓閫�绉�")
     private Integer objType;
 
     @ApiModelProperty(value = "鍏宠仈瀵硅薄缂栫爜")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractBillService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractBillService.java
index 901b6cf..e805977 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractBillService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractBillService.java
@@ -95,4 +95,11 @@
      * @return long
      */
     long count(YwContractBill ywContractBill);
+
+    YwContractBill getDetail(Integer id);
+
+    /**
+     * 澶勭悊璐﹀崟缂栧彿
+     */
+    void dealDayBillCode();
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractRevenueService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractRevenueService.java
new file mode 100644
index 0000000..5945c12
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractRevenueService.java
@@ -0,0 +1,97 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.YwContractRevenue;
+import java.util.List;
+
+/**
+ * 杩愮淮鍚堝悓鏀舵敮娴佹按Service瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2024/11/25 10:29
+ */
+public interface YwContractRevenueService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param ywContractRevenue 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(YwContractRevenue ywContractRevenue);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param ywContractRevenue 瀹炰綋瀵硅薄
+     */
+    void delete(YwContractRevenue ywContractRevenue);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param ywContractRevenue 瀹炰綋瀵硅薄
+     */
+    void updateById(YwContractRevenue ywContractRevenue);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param ywContractRevenues 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<YwContractRevenue> ywContractRevenues);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return YwContractRevenue
+     */
+    YwContractRevenue findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param ywContractRevenue 瀹炰綋瀵硅薄
+     * @return YwContractRevenue
+     */
+    YwContractRevenue findOne(YwContractRevenue ywContractRevenue);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param ywContractRevenue 瀹炰綋瀵硅薄
+     * @return List<YwContractRevenue>
+     */
+    List<YwContractRevenue> findList(YwContractRevenue ywContractRevenue);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<YwContractRevenue>
+     */
+    PageData<YwContractRevenue> findPage(PageWrap<YwContractRevenue> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param ywContractRevenue 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(YwContractRevenue ywContractRevenue);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java
index 4730f58..58af13f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java
@@ -95,4 +95,6 @@
      * @return long
      */
     long count(YwContract ywContract);
+
+    Integer backRent(YwContract ywContract);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java
index b3cdf03..7d4dc16 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java
@@ -1,5 +1,6 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
@@ -8,9 +9,10 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.YwContractBillMapper;
+import com.doumee.dao.business.YwContractRevenueMapper;
 import com.doumee.dao.business.YwContractRoomMapper;
-import com.doumee.dao.business.model.YwContractBill;
-import com.doumee.dao.business.model.YwContractRoom;
+import com.doumee.dao.business.YwRoomMapper;
+import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.MultifileMapper;
 import com.doumee.dao.system.model.Multifile;
 import com.doumee.service.business.YwContractBillService;
@@ -18,15 +20,15 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 杩愮淮鍚堝悓璐﹀崟淇℃伅琛⊿ervice瀹炵幇
@@ -45,27 +47,40 @@
     @Autowired
     private MultifileMapper multifileMapper;
 
+    @Autowired
+    private YwContractRevenueMapper ywContractRevenueMapper;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+
+
     @Override
     public Integer create(YwContractBill ywContractBill) {
         if(Objects.isNull(ywContractBill)
-        || Objects.isNull(ywContractBill.getContractId())
-        || Objects.isNull(ywContractBill.getTotleFee())
-        || Objects.isNull(ywContractBill.getPlanPayData())
+                || Objects.isNull(ywContractBill.getContractId())
+                || Objects.isNull(ywContractBill.getTotleFee())
+                || Objects.isNull(ywContractBill.getPlanPayDate())
                 || Objects.isNull(ywContractBill.getCostType())
                 || Objects.isNull(ywContractBill.getBillType())
                 || Objects.isNull(ywContractBill.getCompanyId())
-                || Objects.isNull(ywContractBill.getStartDate())
-                || Objects.isNull(ywContractBill.getEndDate())
+                || com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(ywContractBill.getYwContractRoomList())
+                || Objects.nonNull(ywContractBill.getFeeType())
+                || (Constants.equalsInteger(ywContractBill.getFeeType(),Constants.ZERO)&& (Objects.isNull(ywContractBill.getStartDate())
+                || Objects.isNull(ywContractBill.getEndDate())))
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         LoginUserInfo loginUserInfo = ywContractBill.getLoginUserInfo();
+        ywContractBill.setReceivableFee(ywContractBill.getTotleFee());
         ywContractBill.setCreateDate(new Date());
         ywContractBill.setCreator(loginUserInfo.getId());
         ywContractBill.setIsdeleted(Constants.ZERO);
+        ywContractBill.setType(Constants.ONE);
         ywContractBill.setStatus(Constants.ZERO);
         ywContractBillMapper.insert(ywContractBill);
 
+        //鎴挎簮鏁版嵁
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBill.getYwContractRoomList())){
             for (YwContractRoom ywContractRoom:ywContractBill.getYwContractRoomList()) {
                 if(Objects.isNull(ywContractRoom)
@@ -77,11 +92,11 @@
                 ywContractRoom.setIsdeleted(Constants.ZERO);
                 ywContractRoom.setContractId(ywContractBill.getId());
                 ywContractRoom.setType(Constants.ONE);
-
             }
             ywContractRoomMapper.insert(ywContractBill.getYwContractRoomList());
         }
 
+        //闄勪欢鏁版嵁
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBill.getMultifileList())){
             for (Multifile multifile:ywContractBill.getMultifileList()) {
                 if(Objects.isNull(multifile)
@@ -92,7 +107,7 @@
                 multifile.setCreator(loginUserInfo.getId());
                 multifile.setCreateDate(new Date());
                 multifile.setIsdeleted(Constants.ZERO);
-                multifile.setObjType(Constants.MultiFile.FN_PATROL_POINT_FILE.getKey());
+                multifile.setObjType(Constants.MultiFile.FN_CONTRACT_BILL_FILE.getKey());
                 multifile.setObjId(ywContractBill.getId());
             }
             multifileMapper.insert(ywContractBill.getMultifileList());
@@ -122,61 +137,7 @@
 
     @Override
     public void updateById(YwContractBill ywContractBill) {
-        if(Objects.isNull(ywContractBill)
-                || Objects.isNull(ywContractBill.getId())
-                || Objects.isNull(ywContractBill.getContractId())
-                || Objects.isNull(ywContractBill.getTotleFee())
-                || Objects.isNull(ywContractBill.getPlanPayData())
-                || Objects.isNull(ywContractBill.getCostType())
-                || Objects.isNull(ywContractBill.getBillType())
-                || Objects.isNull(ywContractBill.getCompanyId())
-                || Objects.isNull(ywContractBill.getStartDate())
-                || Objects.isNull(ywContractBill.getEndDate())
-                || ywContractBill.getTotleFee().compareTo(BigDecimal.ZERO)<=Constants.ZERO
-        ){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST);
-        }
-        LoginUserInfo loginUserInfo = ywContractBill.getLoginUserInfo();
-        ywContractBill.setEditDate(new Date());
-        ywContractBill.setEditor(loginUserInfo.getId());
-        if(Constants.equalsInteger(ywContractBill.getBillType(),Constants.ZERO)){
-            ywContractBill.setPayStatus(Constants.ZERO);
-        }else{
-            ywContractBill.setPayStatus(Constants.THREE);
-        }
-        ywContractBillMapper.insert(ywContractBill);
-
-        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBill.getYwContractRoomList())){
-            for (YwContractRoom ywContractRoom:ywContractBill.getYwContractRoomList()) {
-                if(Objects.isNull(ywContractRoom)
-                        || Objects.isNull(ywContractRoom.getRoomId())){
-                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"璇烽�夋嫨鎴挎簮鏁版嵁");
-                }
-                ywContractRoom.setCreateDate(new Date());
-                ywContractRoom.setCreator(loginUserInfo.getId());
-                ywContractRoom.setIsdeleted(Constants.ZERO);
-                ywContractRoom.setContractId(ywContractBill.getId());
-                ywContractRoom.setType(Constants.ONE);
-
-            }
-            ywContractRoomMapper.insert(ywContractBill.getYwContractRoomList());
-        }
-
-        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBill.getMultifileList())){
-            for (Multifile multifile:ywContractBill.getMultifileList()) {
-                if(Objects.isNull(multifile)
-                        || StringUtils.isBlank(multifile.getFileurl())
-                        || StringUtils.isBlank(multifile.getName())){
-                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"闄勪欢淇℃伅閿欒");
-                }
-                multifile.setCreator(loginUserInfo.getId());
-                multifile.setCreateDate(new Date());
-                multifile.setIsdeleted(Constants.ZERO);
-                multifile.setObjType(Constants.MultiFile.FN_PATROL_POINT_FILE.getKey());
-                multifile.setObjId(ywContractBill.getId());
-            }
-            multifileMapper.insert(ywContractBill.getMultifileList());
-        }
+        ywContractBillMapper.updateById(ywContractBill);
     }
 
     @Override
@@ -194,6 +155,61 @@
         return ywContractBillMapper.selectById(id);
     }
 
+
+    @Override
+    public YwContractBill getDetail(Integer id) {
+        YwContractBill ywContractBill = ywContractBillMapper.selectJoinOne(YwContractBill.class,
+                new MPJLambdaWrapper<YwContractBill>().selectAll(YwContractBill.class)
+                        .select(" ( select ifnull(sum(yw.ACT_RECEIVABLE_FEE),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
+                        .selectAs(YwContract::getCode,YwContractBill::getContractCode)
+                        .selectAs(YwCustomer::getName,YwContractBill::getCustomerName)
+                        .leftJoin(YwContract.class,YwContract::getId,YwContractBill::getContractId)
+                        .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
+                        .eq(YwContractBill::getIsdeleted,Constants.ZERO)
+                        .eq(YwContractBill::getId,id));
+        if(Objects.isNull(ywContractBill)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        //鎴挎簮鏁版嵁
+        ywContractBill.setYwContractRoomList(ywContractRoomMapper.selectJoinList(YwContractRoom.class,new MPJLambdaWrapper<YwContractRoom>()
+                .selectAll(YwContractRoom.class)
+                .selectAs(YwProject::getName,YwRoom::getProjectName)
+                .selectAs(YwFloor::getName,YwRoom::getFloorName)
+                .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
+                .leftJoin(YwRoom.class,YwRoom::getId,YwContractRoom::getRoomId)
+                .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor)
+                .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
+                .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId)
+                .eq(YwContractRoom::getContractId,id)
+                .eq(YwContractRoom::getType,Constants.ONE)
+        ));
+        //鏀舵敮鏄庣粏
+        ywContractBill.setYwContractRevenueList(
+            ywContractRevenueMapper.selectJoinList(YwContractRevenue.class,new MPJLambdaWrapper<YwContractRevenue>()
+                            .selectAll(YwContractRevenue.class)
+                            .selectAs(YwCustomer::getName,YwContractRevenue::getCustomerNme)
+                            .leftJoin(YwContract.class,YwContract::getId,YwContractRevenue::getContractId)
+                            .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
+                    .eq(YwContractRevenue::getBillId,id)
+            )
+        );
+        //闄勪欢鏁版嵁
+        List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId,id)
+                .eq(Multifile::getObjType,Constants.MultiFile.FN_CONTRACT_BILL_FILE.getKey()));
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
+            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_CONTRACT_BILL).getCode();
+            for (Multifile multifile:multifileList) {
+                if(StringUtils.isNotBlank(multifile.getFileurl())){
+                    multifile.setFileurlFull(path + multifile.getFileurl());
+                }
+            }
+            ywContractBill.setMultifileList(multifileList);
+        }
+        return ywContractBill;
+    }
+
     @Override
     public YwContractBill findOne(YwContractBill ywContractBill) {
         QueryWrapper<YwContractBill> wrapper = new QueryWrapper<>(ywContractBill);
@@ -209,67 +225,143 @@
     @Override
     public PageData<YwContractBill> findPage(PageWrap<YwContractBill> pageWrap) {
         IPage<YwContractBill> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<YwContractBill> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<YwContractBill> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(YwContractBill::getId, pageWrap.getModel().getId());
+        YwContractBill model = pageWrap.getModel();
+        IPage<YwContractBill> iPage = ywContractBillMapper.selectJoinPage(page,YwContractBill.class,
+            queryWrapper.selectAll(YwContractBill.class)
+                    .select(" ( select ifnull(sum(yw.ACT_RECEIVABLE_FEE),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
+                    .selectAs(YwContract::getCode,YwContractBill::getContractCode)
+                    .selectAs(YwCustomer::getName,YwContractBill::getCustomerName)
+                    .leftJoin(YwContract.class,YwContract::getId,YwContractBill::getContractId)
+                    .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
+                    .eq(YwContractBill::getIsdeleted,Constants.ZERO)
+                    .like(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getCustomerName()),
+                            YwCustomer::getName,model.getCustomerName())
+                    .eq(Objects.nonNull(model)&&Objects.nonNull(model.getStatus()),
+                            YwContractBill::getStatus,model.getStatus())
+                    .eq(Objects.nonNull(model)&&Objects.nonNull(model.getPayStatus()),
+                            YwContractBill::getPayStatus,model.getPayStatus())
+                    .eq(Objects.nonNull(model)&&Objects.nonNull(model.getType()),
+                            YwContractBill::getType,model.getType())
+                    .eq(Objects.nonNull(model)&&Objects.nonNull(model.getContractId()),
+                            YwContractBill::getContractId,model.getContractId())
+                .ge(YwContractBill::getPlanPayDate, Utils.Date.getStart(model.getPlanPayDateStart()))
+                .le(YwContractBill::getPlanPayDate, Utils.Date.getEnd(model.getPlanPayDateEnd())) )
+        ;
+        this.dealRoomDetail(iPage.getRecords());
+        for (YwContractBill ywContractBill:iPage.getRecords()) {
+            //闇�鏀堕噾棰�
+            ywContractBill.setNeedReceivableFee(
+                    ywContractBill.getReceivableFee().subtract(ywContractBill.getActReceivableFee())
+            );
+            //妤煎畤鍚嶇О
+            List<YwContractRoom> ywContractRoomList = ywContractBill.getYwContractRoomList();
+            StringBuilder roomPathName = new StringBuilder();
+            for (YwContractRoom ywContractRoom:ywContractRoomList) {
+                if(StringUtils.isNotBlank(ywContractRoom.getProjectName())){
+                    roomPathName.append(ywContractRoom.getProjectName());
+                }
+                if(StringUtils.isNotBlank(ywContractRoom.getBuildingName())){
+                    roomPathName.append(ywContractRoom.getBuildingName());
+                }
+                if(StringUtils.isNotBlank(ywContractRoom.getFloorName())){
+                    roomPathName.append(ywContractRoom.getFloorName());
+                }
+                if(StringUtils.isNotBlank(ywContractRoom.getRoomName())){
+                    roomPathName.append(ywContractRoom.getRoomName());
+                }
+                if(StringUtils.isNotBlank(roomPathName)){
+                    roomPathName.append(";");
+                }
+            }
+            ywContractBill.setRoomPathName(roomPathName.toString());
+
         }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(YwContractBill::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(YwContractBill::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(YwContractBill::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(YwContractBill::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(YwContractBill::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(YwContractBill::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(YwContractBill::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(YwContractBill::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(YwContractBill::getStatus, pageWrap.getModel().getStatus());
-        }
-        if (pageWrap.getModel().getStartDate() != null) {
-            queryWrapper.lambda().ge(YwContractBill::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()));
-            queryWrapper.lambda().le(YwContractBill::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getStartDate()));
-        }
-        if (pageWrap.getModel().getEndDate() != null) {
-            queryWrapper.lambda().ge(YwContractBill::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()));
-            queryWrapper.lambda().le(YwContractBill::getEndDate, Utils.Date.getEnd(pageWrap.getModel().getEndDate()));
-        }
-        if (pageWrap.getModel().getDetailId() != null) {
-            queryWrapper.lambda().eq(YwContractBill::getDetailId, pageWrap.getModel().getDetailId());
-        }
-        if (pageWrap.getModel().getContractId() != null) {
-            queryWrapper.lambda().eq(YwContractBill::getContractId, pageWrap.getModel().getContractId());
-        }
-        if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(YwContractBill::getSortnum, pageWrap.getModel().getSortnum());
-        }
-        if (pageWrap.getModel().getTotleFee() != null) {
-            queryWrapper.lambda().eq(YwContractBill::getTotleFee, pageWrap.getModel().getTotleFee());
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
+
+        return PageData.from(iPage);
+    }
+
+    public void dealRoomDetail(List<YwContractBill> ywContractBillList){
+        //鏌ヨ璐﹀崟涓嬬殑妤煎畤鏁版嵁
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBillList)){
+            //鑾峰彇鎵�鏈夋暟鎹�
+            List<Integer> billIdList = ywContractBillList.stream().map(i->i.getId()).collect(Collectors.toList());
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(billIdList)){
+                List<YwContractRoom> ywContractRoomList  = ywContractRoomMapper.selectJoinList(YwContractRoom.class,new MPJLambdaWrapper<YwContractRoom>()
+                        .selectAll(YwContractRoom.class)
+                        .selectAs(YwProject::getName,YwRoom::getProjectName)
+                        .selectAs(YwFloor::getName,YwRoom::getFloorName)
+                        .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
+                        .selectAs(YwRoom::getName,YwContractRoom::getRoomName)
+                        .leftJoin(YwRoom.class,YwRoom::getId,YwContractRoom::getRoomId)
+                        .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor)
+                        .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
+                        .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId)
+                        .in(YwContractRoom::getContractId,billIdList)
+                        .eq(YwContractRoom::getType,Constants.ONE)
+                );
+                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractRoomList)){
+                    for (YwContractBill ywContractBill:ywContractBillList) {
+                        ywContractBill.setYwContractRoomList(
+                                ywContractRoomList.stream().filter(i->Constants.equalsInteger(i.getContractId(),ywContractBill.getId())).collect(Collectors.toList())
+                        );
+                    }
+                }
             }
         }
-        return PageData.from(ywContractBillMapper.selectPage(page, queryWrapper));
     }
+
 
     @Override
     public long count(YwContractBill ywContractBill) {
         QueryWrapper<YwContractBill> wrapper = new QueryWrapper<>(ywContractBill);
         return ywContractBillMapper.selectCount(wrapper);
     }
+
+
+
+    @Override
+    public void dealDayBillCode(){
+        List<YwContractBill> ywContractBillList = ywContractBillMapper.selectJoinList(YwContractBill.class,
+                new MPJLambdaWrapper<YwContractBill>()
+                        .selectAll(YwContractBill.class)
+                        .select(" DATE(CREATE_DATE)  as codeDate")
+                        .isNull(YwContractBill::getCode)
+                        .orderByAsc(YwContractBill::getId)
+        );
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBillList)){
+            List<String> codeDateList = ywContractBillList.stream().map(i->i.getCodeDate()).collect(Collectors.toList());
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(codeDateList)){
+                Set<String> codeDateSet = new HashSet<String>(codeDateList);
+                for (String codeDate:codeDateSet) {
+                    //鑾峰彇褰撳墠鏃ユ湡鐨勬暟鎹�
+                    List<YwContractBill> codeDateBillList =
+                            ywContractBillList.stream().filter(i->i.getCodeDate().equals(codeDate)).collect(Collectors.toList());
+                    if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(codeDateBillList)){
+                        continue;
+                    }
+                    //鏌ヨ鏈�澶х殑鍗曞彿
+                    YwContractBill ywContractBill = ywContractBillMapper.selectOne(new QueryWrapper<YwContractBill>().lambda()
+                            .isNotNull(YwContractBill::getCode)
+                            .apply(" CREATE_DATE like '"+codeDate+"%' ")
+                            .orderByDesc(YwContractBill::getId)
+                    );
+                    Integer maxCode = Constants.ONE;
+                    if(Objects.nonNull(ywContractBill)){
+                        maxCode = Integer.valueOf(ywContractBill.getCode().replace("ZD"+codeDate,""));
+                    }
+                    for (YwContractBill contractBill:codeDateBillList) {
+                        maxCode = maxCode + 1;
+                        contractBill.setCode("ZD" + codeDate + "-" + StringUtils.leftPad(maxCode.toString() , 4,"0"));
+                        ywContractBillMapper.update(null, new UpdateWrapper<YwContractBill>().lambda().set(YwContractBill::getCode,contractBill.getCode())
+                                .eq(YwContractBill::getId,ywContractBill.getId()));
+                    }
+                }
+            }
+        }
+    }
+
+
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractRevenueServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractRevenueServiceImpl.java
new file mode 100644
index 0000000..7a0754c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractRevenueServiceImpl.java
@@ -0,0 +1,206 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.YwAccountMapper;
+import com.doumee.dao.business.YwContractBillMapper;
+import com.doumee.dao.business.YwContractRevenueMapper;
+import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.YwAccount;
+import com.doumee.dao.business.model.YwContractBill;
+import com.doumee.dao.business.model.YwContractRevenue;
+import com.doumee.service.business.YwContractRevenueService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 杩愮淮鍚堝悓鏀舵敮娴佹按Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2024/11/25 10:29
+ */
+@Service
+public class YwContractRevenueServiceImpl implements YwContractRevenueService {
+
+    @Autowired
+    private YwContractRevenueMapper ywContractRevenueMapper;
+
+    @Autowired
+    private YwContractBillMapper ywContractBillMapper;
+
+    @Autowired
+    private CompanyMapper companyMapper;
+
+    @Autowired
+    private YwAccountMapper ywAccountMapper;
+
+    @Override
+    public Integer create(YwContractRevenue ywContractRevenue) {
+        if(Objects.isNull(ywContractRevenue)
+        || Objects.isNull(ywContractRevenue.getActReceivableFee())
+                || Objects.isNull(ywContractRevenue.getActPayDate())
+                || Objects.isNull(ywContractRevenue.getPayType())
+                || Objects.isNull(ywContractRevenue.getCompanyId())
+                || Objects.isNull(ywContractRevenue.getAccountId())
+                || Objects.isNull(ywContractRevenue.getBillId())
+        ){
+             throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        YwContractBill ywContractBill = ywContractBillMapper.selectById(ywContractRevenue.getBillId());
+        if(Objects.isNull(ywContractBill)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌璐﹀崟淇℃伅");
+        }
+        Company company =companyMapper.selectById(ywContractRevenue.getCompanyId());
+        if(Objects.isNull(company)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鎵�灞炲叕鍙镐俊鎭�");
+        }
+        YwAccount ywAccount =ywAccountMapper.selectById(ywContractRevenue.getAccountId());
+        if(Objects.isNull(ywAccount)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鏀舵敮璐︽埛淇℃伅");
+        }
+        LoginUserInfo loginUserInfo = ywContractRevenue.getLoginUserInfo();
+        ywContractRevenue.setCreateDate(new Date());
+        ywContractRevenue.setCreator(loginUserInfo.getId());
+        ywContractRevenue.setIsdeleted(Constants.ZERO);
+        ywContractRevenue.setStatus(Constants.ZERO);
+        ywContractRevenue.setContractId(ywContractBill.getContractId());
+        ywContractRevenue.setRevenueType(ywContractBill.getBillType());
+        ywContractRevenueMapper.insert(ywContractRevenue);
+        //鏍规嵁鏀舵敮鎯呭喌 鏇存柊璐﹀崟鏁版嵁
+
+
+
+
+
+
+        return ywContractRevenue.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        ywContractRevenueMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(YwContractRevenue ywContractRevenue) {
+        UpdateWrapper<YwContractRevenue> deleteWrapper = new UpdateWrapper<>(ywContractRevenue);
+        ywContractRevenueMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        ywContractRevenueMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(YwContractRevenue ywContractRevenue) {
+        ywContractRevenueMapper.updateById(ywContractRevenue);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<YwContractRevenue> ywContractRevenues) {
+        if (CollectionUtils.isEmpty(ywContractRevenues)) {
+            return;
+        }
+        for (YwContractRevenue ywContractRevenue: ywContractRevenues) {
+            this.updateById(ywContractRevenue);
+        }
+    }
+
+    @Override
+    public YwContractRevenue findById(Integer id) {
+        return ywContractRevenueMapper.selectById(id);
+    }
+
+    @Override
+    public YwContractRevenue findOne(YwContractRevenue ywContractRevenue) {
+        QueryWrapper<YwContractRevenue> wrapper = new QueryWrapper<>(ywContractRevenue);
+        return ywContractRevenueMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<YwContractRevenue> findList(YwContractRevenue ywContractRevenue) {
+        QueryWrapper<YwContractRevenue> wrapper = new QueryWrapper<>(ywContractRevenue);
+        return ywContractRevenueMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<YwContractRevenue> findPage(PageWrap<YwContractRevenue> pageWrap) {
+        IPage<YwContractRevenue> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<YwContractRevenue> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(YwContractRevenue::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(YwContractRevenue::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(YwContractRevenue::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(YwContractRevenue::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(YwContractRevenue::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(YwContractRevenue::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(YwContractRevenue::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(YwContractRevenue::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(YwContractRevenue::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.lambda().eq(YwContractRevenue::getStatus, pageWrap.getModel().getStatus());
+        }
+        if (pageWrap.getModel().getActReceivableFee() != null) {
+            queryWrapper.lambda().eq(YwContractRevenue::getActReceivableFee, pageWrap.getModel().getActReceivableFee());
+        }
+        if (pageWrap.getModel().getActPayDate() != null) {
+            queryWrapper.lambda().ge(YwContractRevenue::getActPayDate, Utils.Date.getStart(pageWrap.getModel().getActPayDate()));
+            queryWrapper.lambda().le(YwContractRevenue::getActPayDate, Utils.Date.getEnd(pageWrap.getModel().getActPayDate()));
+        }
+        if (pageWrap.getModel().getPayType() != null) {
+            queryWrapper.lambda().eq(YwContractRevenue::getPayType, pageWrap.getModel().getPayType());
+        }
+        if (pageWrap.getModel().getCompanyId() != null) {
+            queryWrapper.lambda().eq(YwContractRevenue::getCompanyId, pageWrap.getModel().getCompanyId());
+        }
+        if (pageWrap.getModel().getAccountId() != null) {
+            queryWrapper.lambda().eq(YwContractRevenue::getAccountId, pageWrap.getModel().getAccountId());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(ywContractRevenueMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(YwContractRevenue ywContractRevenue) {
+        QueryWrapper<YwContractRevenue> wrapper = new QueryWrapper<>(ywContractRevenue);
+        return ywContractRevenueMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
index 15da9a9..4d2465c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
@@ -1,5 +1,6 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
@@ -50,6 +51,8 @@
     @Autowired
     private MultifileMapper multifileMapper;
     @Autowired
+    private YwWorkorderLogMapper  ywWorkorderLogMapper;
+    @Autowired
     private CompanyMapper companyMapper;
     @Autowired
     private YwProjectMapper projectMapper;
@@ -62,6 +65,8 @@
     @Autowired
     private MemberMapper memberMapper;
 
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public Integer create(YwContract model) {
@@ -77,7 +82,70 @@
         ywContractMapper.insert(model);
         dealDetailListBiz(model);//澶勭悊鏉℃淇℃伅
         dealMultifileBiz(model);//澶勭悊闄勪欢淇℃伅
+        dealLogBiz(model,Constants.YwLogType.CONTRACT_CREATE,null,null);//璁板綍鏂板缓鏃ュ織
         return model.getId();
+    }
+    /**
+     * 閫�绉熸彁浜�
+     * @param param
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public  Integer backRent(YwContract param){
+        isParamValidBackRent(param);
+        //澶勭悊
+        dealBackRentBillBiz(param);
+        YwContract update = new YwContract();
+        update.setEditDate(new Date());
+        update.setEditor(param.getLoginUserInfo().getId());
+        update.setBtActDate(update.getEditDate());
+        update.setBtActUserId(update.getEditor());
+        update.setStatus(Constants.THREE);
+        update.setBtInfo(param.getBtInfo());
+        update.setBtDate(param.getBtDate());
+        update.setBtType(param.getBtType());
+        update.setBtUserId(param.getBtUserId());
+        update.setBtFee(param.getBtFee());
+        ywContractMapper.updateById(update);
+        dealLogBiz(param,Constants.YwLogType.CONTRACT_BACK,null,null);
+        return param.getId();
+    }
+
+    private void dealBackRentBillBiz(YwContract param) {
+    }
+
+    private void isParamValidBackRent(YwContract param) {
+        if(param.getId()==null
+                || param.getBtType() == null
+                || param.getBtDate() == null
+                || param.getBtUserId() == null
+                || param.getBtSignDate() == null
+                ||StringUtils.isBlank( param.getBtInfo())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        YwContract model = ywContractMapper.selectById(param.getId());
+        if(model==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝鍚堝悓淇℃伅涓嶅瓨鍦紝璇疯繑鍥炲垪琛ㄥ埛鏂伴噸璇曪紒");
+        }
+
+        SystemUser user = systemUserMapper.selectById(param.getUserId());
+        if(user ==null ||  (user.getDeleted()!=null&& user.getDeleted() )){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝缁忓姙浜轰俊鎭笉瀛樺湪锛�");
+        }
+        if(param.getAddBillList()!=null && param.getAddBillList().size()>0){
+            for(YwContractBill bill: param.getAddBillList()){
+                if(bill.getCostType() == null
+                        ||bill.getFeeType() == null
+                        ||bill.getReceivableFee() == null
+                        ||bill.getCompanyId() == null
+                        ||bill.getPlanPayDate() == null
+                        ||(Constants.equalsInteger(bill.getFeeType(),Constants.ZERO)
+                        && (bill.getStartDate() ==null || bill.getEndDate() ==null) )){
+
+                }
+            }
+        }
     }
 
     private void dealDetailListBiz(YwContract model) {
@@ -182,10 +250,10 @@
         bill.setStatus(Constants.ZERO);
         bill.setStartDate(model.getStartDate());
         bill.setEndDate(model.getEndDate());
-        bill.setType(type);
+        bill.setType(Constants.ZERO);
+        bill.setCostType(type);
         bill.setTotleFee(type==Constants.THREE?model.getZlDeposit():model.getWyDeposit());//鎶奸噾璐圭敤
         bill.setSortnum(0);
-        bill.setTitle(type==Constants.THREE?"绉熻祦鎶奸噾":"鐗╀笟鎶奸噾" );
         return bill;
     }
 
@@ -387,7 +455,8 @@
         bill.setContractId(model.getId());
         bill.setStatus(Constants.ZERO);
         bill.setDetailId(d.getId());
-        bill.setType(d.getType());
+        bill.setCostType(d.getType());
+        bill.setType(Constants.ZERO);
         return bill;
     }
 
@@ -400,7 +469,28 @@
         return  data;
     }
 
+    private void initFiles(YwContract model) {
+        List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId, model.getId() )
+                .in(Multifile::getObjType, Arrays.asList(new Integer[]{Constants.MultiFile.YW_CONTRACT_FILE.getKey()}))
+                .eq(Multifile::getIsdeleted,Constants.ZERO));
+        if(multifiles!=null){
+            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_CONTRACT_FILE).getCode();
+            for(Multifile f : multifiles){
+                if(StringUtils.isBlank(f.getFileurl())){
+                    continue;
+                }
+                f.setFileurlFull(path+f.getFileurl());
+                //鐜板満鎯呭喌
+                if(model.getFileList() == null){
+                    model.setFileList(new ArrayList<>());
+                }
+                model.getFileList().add(f);
 
+            }
+        }
+    }
 
 
     private void dealMultifileBiz(YwContract model) {
@@ -416,7 +506,7 @@
                 multifile.setIsdeleted(Constants.ZERO);
                 multifile.setObjId(model.getId());
                 multifile.setCreator(model.getCreator());
-                multifile.setObjType(Constants.MultiFile.YW_WORKORDER_PROBLEM.getKey());
+                multifile.setObjType(Constants.MultiFile.YW_CONTRACT_FILE.getKey());
                 multifile.setSortnum(i+1);
                 fileList.add(multifile);
             }
@@ -594,10 +684,87 @@
             this.updateById(ywContract);
         }
     }
-
+    private void dealLogBiz(YwContract model,Constants.YwLogType type,String param1,String param2) {
+        YwWorkorderLog log = new YwWorkorderLog();
+        log.setCreateDate(model.getEditDate());
+        log.setCreator(model.getCreator());
+        log.setJobId(model.getId());
+        log.setIsdeleted(Constants.ZERO);
+        log.setObjId(model.getId()+"");
+        log.setObjType(type.getKey());
+        log.setParam1(param1);
+        log.setParam2(param2);
+        log.setTitle(type.getNoteinfo());
+        ywWorkorderLogMapper.insert(log);
+    }
     @Override
     public YwContract findById(Integer id) {
-        return ywContractMapper.selectById(id);
+        MPJLambdaWrapper<YwContract> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(YwContract.class )
+                .selectAs(Company::getName,YwContract::getCompanyName )
+                .selectAs(SystemUser::getRealname,YwContract::getUserName )
+                .selectAs(YwCustomer::getName,YwContract::getRenterName )
+                .selectAs(YwProject::getName,YwContract::getProjectName )
+                .select("t4.realname",YwContract::getCreatorName )
+                .leftJoin(Company.class,Company::getId,YwContract::getCompanyId)
+                .leftJoin(SystemUser.class,SystemUser::getId,YwContract::getUserId)
+                .leftJoin(SystemUser.class,SystemUser::getId,YwContract::getCreator)
+                .leftJoin(YwProject.class,YwProject::getId,YwContract::getProjectId)
+                .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId);
+        YwContract model = ywContractMapper.selectJoinOne(YwContract.class,queryWrapper);
+        if(model != null){
+            //鍚堝悓闄勪欢
+            initFiles(model);
+            //鏌ヨ鎴挎簮淇℃伅鏁版嵁
+            MPJLambdaWrapper<YwRoom> rw = new MPJLambdaWrapper<>();
+            rw.selectAll(YwRoom.class )
+                    .selectAs(YwProject::getName,YwRoom::getProjectName)
+                    .selectAs(YwFloor::getName,YwRoom::getFloorName)
+                    .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
+                    .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
+                    .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId)
+                    .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor)
+                    .eq(YwRoom::getIsdeleted,Constants.ZERO)
+                    .exists("(select a.id from yw_contract_room a where a.isdeleted=1 and a.room_id=t.id and a.contract_id="+model.getId()+")");
+            model.setRoomList(roomMapper.selectJoinList(YwRoom.class,rw));
+
+            //鏌ヨ绉熻硟鏉℃淇℃伅
+            MPJLambdaWrapper<YwContractDetail> dw = new MPJLambdaWrapper<>();
+            dw.selectAll(YwContractDetail.class )
+                    .eq(YwContractDetail::getIsdeleted,Constants.ZERO)
+                    .eq(YwContractDetail::getContractId,model.getId())
+                    .in(YwContractDetail::getType,Constants.ZERO,Constants.TWO)
+                    .orderByAsc(YwContractDetail::getSortnum);
+            model.setZlDetailList(ywContractDetailMapper.selectJoinList(YwContractDetail.class,dw));
+            //鏌ヨ鐗╂キ鏉℃淇℃伅
+            dw = new MPJLambdaWrapper<>();
+            dw.selectAll(YwContractDetail.class )
+                    .eq(YwContractDetail::getIsdeleted,Constants.ZERO)
+                    .eq(YwContractDetail::getContractId,model.getId())
+                    .in(YwContractDetail::getType,Constants.ONE,Constants.THREE)
+                    .orderByAsc(YwContractDetail::getSortnum);
+            model.setWyDetailList(ywContractDetailMapper.selectJoinList(YwContractDetail.class,dw));
+
+            //鏌ヨ鎿嶄綔鏃ュ織璁板綍
+            YwWorkorderLog log = new YwWorkorderLog();
+            log.setJobId(model.getId());
+            log.setIsdeleted(Constants.ZERO);
+            model.setLogList(ywWorkorderLogMapper.selectList(new QueryWrapper<YwWorkorderLog>(log)
+                    .lambda()
+                    .in(YwWorkorderLog::getObjType,Constants.YwLogType.CONTRACT_BACK.getKey()
+                            ,Constants.YwLogType.CONTRACT_CREATE.getKey()
+                            ,Constants.YwLogType.CONTRACT_UPDATE.getKey())
+                    .orderByAsc(YwWorkorderLog::getCreateDate)));
+
+            //鏌ヨ璐﹀崟闆嗗悎
+            model.setBillList(ywContractBillMapper.selectJoinList(YwContractBill.class,new MPJLambdaWrapper<YwContractBill>()
+                            .selectAll(YwContractBill.class )
+                            .eq(  YwContractBill::getContractId,model.getId())
+                            .eq(YwContractBill::getIsdeleted,Constants.ZERO)
+                            .orderByAsc(YwContractBill::getSortnum,YwContractBill::getCreateDate)));
+        }
+
+        return model;
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwFloorServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwFloorServiceImpl.java
index 38f62cf..b3b74de 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwFloorServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwFloorServiceImpl.java
@@ -121,6 +121,7 @@
 
     @Override
     public List<YwFloor> findList(YwFloor ywFloor) {
+        ywFloor.setIsdeleted(Constants.ZERO);
         QueryWrapper<YwFloor> wrapper = new QueryWrapper<>(ywFloor);
         return ywFloorMapper.selectList(wrapper);
     }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java
index ec63fca..b41d0ca 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java
@@ -10,6 +10,7 @@
 import com.doumee.dao.business.YwBuildingMapper;
 import com.doumee.dao.business.YwRoomMapper;
 import com.doumee.dao.business.model.YwBuilding;
+import com.doumee.dao.business.model.YwFloor;
 import com.doumee.dao.business.model.YwProject;
 import com.doumee.dao.business.model.YwRoom;
 import com.doumee.service.business.YwRoomService;
@@ -131,11 +132,13 @@
     public PageData<YwRoom> findPage(PageWrap<YwRoom> pageWrap) {
         IPage<YwRoom> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
          MPJLambdaWrapper<YwRoom> queryWrapper = new MPJLambdaWrapper<>();
-        queryWrapper.selectAll(YwBuilding.class )
+        queryWrapper.selectAll(YwRoom.class )
                 .selectAs(YwProject::getName,YwRoom::getProjectName)
+                .selectAs(YwFloor::getName,YwRoom::getFloorName)
                 .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
                 .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
-                .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId);
+                .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId)
+                .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor);
         pageWrap.getModel().setIsdeleted(Constants.ZERO);
         Utils.MP.blankToNull(pageWrap.getModel());
         if (pageWrap.getModel().getId() != null) {
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java
index 66f431f..f4c95e9 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java
@@ -28,10 +28,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * 杩愮淮宸ュ崟淇℃伅琛⊿ervice瀹炵幇
@@ -57,6 +54,8 @@
     private YwRoomMapper ywRoomMapper;
     @Autowired
     private YwBuildingMapper ywBuildingMapper;
+    @Autowired
+    private YwFloorMapper ywFloorMapper;
 
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
@@ -67,6 +66,7 @@
         model.setIsdeleted(Constants.ZERO);
         model.setCreateDate(new Date());
         model.setStatus(Constants.ZERO);
+        model.setDealStatus(Constants.ZERO);
         model.setEditDate(model.getCreateDate());
         model.setEditor(model.getCreator());
         ywWorkorderMapper.insert(model);
@@ -92,27 +92,21 @@
         if(fileList.size()>0){
             multifileMapper.insert(fileList);
         }
-        dealLogBiz(model,Constants.ZERO,model.getLoginUserInfo().getRealname(),null);//璁板綍鏂板缓鏃ュ織
+        dealLogBiz(model,Constants.YwLogType.WORKORDER_CREATE,model.getLoginUserInfo().getRealname(),null);//璁板綍鏂板缓鏃ュ織
         return model.getId();
     }
 
-    private void dealLogBiz(YwWorkorder model, int type,String param1,String param2) {
+    private void dealLogBiz(YwWorkorder model,Constants.YwLogType type,String param1,String param2) {
         YwWorkorderLog log = new YwWorkorderLog();
         log.setCreateDate(model.getEditDate());
         log.setCreator(model.getCreator());
         log.setJobId(model.getId());
         log.setIsdeleted(Constants.ZERO);
         log.setObjId(model.getId()+"");
-        log.setObjType(type);
+        log.setObjType(type.getKey());
         log.setParam1(param1);
         log.setParam2(param2);
-        if(type ==0){
-            log.setTitle("鍒涘缓宸ュ崟");
-        }else  if(type ==1){
-            log.setTitle("鍒嗘淳宸ュ崟");
-        }else  if(type ==2){
-            log.setTitle("澶勭悊宸ュ崟");
-        }
+        log.setTitle(type.getNoteinfo());
         ywWorkorderLogMapper.insert(log);
     }
 
@@ -130,13 +124,14 @@
             model.setProjectId(room.getProjectId());
         }else{
             //濡傛灉鏄叕鍏卞尯鍩熻淇紝蹇呴』閫夋嫨妤煎畤淇℃伅
-            if(model.getBuildingId()==null){
-                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勬ゼ瀹囦俊鎭紒");
+            if(model.getFloorId()==null){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勬ゼ灞備俊鎭紒");
             }
-            YwBuilding room = ywBuildingMapper.selectById(model.getRoomId());
+            YwFloor room = ywFloorMapper.selectById(model.getFloorId());
             if(room ==null || Constants.equalsInteger(room.getIsdeleted(),Constants.ONE)){
-                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勬ゼ瀹囦俊鎭紒");
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勬ゼ灞備俊鎭紒");
             }
+            model.setBuildingId(room.getBuildingId());
             model.setProjectId(room.getProjectId());
         }
     }
@@ -190,8 +185,9 @@
         update.setDispatchUserId(update.getEditor());
         update.setDispatchDate(update.getEditDate());
         update.setDispatchInfo(ywWorkorder.getDispatchInfo());
+        update.setDealUserId(ywWorkorder.getDealUserId());
         ywWorkorderMapper.updateById(update);
-        dealLogBiz(model,Constants.ONE,model.getLoginUserInfo().getRealname(),user.getRealname());//璁板綍鏂板缓鏃ュ織
+        dealLogBiz(model,Constants.YwLogType.WORKORDER_DISPATCH,ywWorkorder.getLoginUserInfo().getRealname(),user.getRealname());//璁板綍鏂板缓鏃ュ織
     }
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
@@ -217,7 +213,7 @@
         update.setDealDate(update.getEditDate());
         update.setDealInfo(ywWorkorder.getDispatchInfo());
         ywWorkorderMapper.updateById(update);
-        dealLogBiz(model,Constants.TWO,model.getLoginUserInfo().getRealname(),null);//璁板綍鏂板缓鏃ュ織
+        dealLogBiz(model,Constants.YwLogType.WORKORDER_DEAL,ywWorkorder.getLoginUserInfo().getRealname(),null);//璁板綍鏂板缓鏃ュ織
     }
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
@@ -299,24 +295,33 @@
 
     @Override
     public YwWorkorder findById(Integer id) {
-        MPJLambdaWrapper<YwWorkorder> wrapper = new MPJLambdaWrapper<>();
-        wrapper.selectAll(YwWorkorder.class )
-                .select("t4.realname",YwWorkorder::getDealUserName)
-                .select("t3.realname",YwWorkorder::getDispatchUserName)
-                .selectAs(SystemUser::getRealname,YwWorkorder::getCreatorName)
-                .selectAs(SystemUser::getMobile,YwWorkorder::getCreatorPhone)
-                .selectAs(Company::getCompanyNamePath,YwWorkorder::getCreatorCompany)
-                .leftJoin(SystemUser.class,SystemUser::getId,YwWorkorder::getCreator)
-                .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
-                .leftJoin(SystemUser.class,SystemUser::getId,YwWorkorder::getDispatchUserId)
+        MPJLambdaWrapper<YwWorkorder> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(YwWorkorder.class )
+                .selectAs(SystemUser::getRealname,YwWorkorder::getDealUserName)
+                .select("t3.realname",YwWorkorder::getCreatorName)
+                .selectAs(Category::getName,YwWorkorder::getCategoryName)
+                .selectAs(YwRoom::getName,YwWorkorder::getRoomName)
+                .selectAs(YwRoom::getRoomNum,YwWorkorder::getRoomNum)
+                .selectAs(YwFloor::getName,YwWorkorder::getFloorName)
+                .selectAs(YwBuilding::getName,YwWorkorder::getBuildingName)
                 .leftJoin(SystemUser.class,SystemUser::getId,YwWorkorder::getDealUserId)
+                .leftJoin(Category.class,Category::getId,YwWorkorder::getCateId)
+                .leftJoin(SystemUser.class,SystemUser::getId,YwWorkorder::getCreator)
+                .leftJoin(YwRoom.class,YwRoom::getId,YwWorkorder::getRoomId)
+                .leftJoin(YwFloor.class,YwFloor::getId,YwWorkorder::getFloorId)
+                .leftJoin(YwBuilding.class,YwBuilding::getId,YwWorkorder::getBuildingId)
                 .eq(YwWorkorder::getId,id);
-        YwWorkorder model = ywWorkorderMapper.selectJoinOne(YwWorkorder.class,wrapper);
+        YwWorkorder model = ywWorkorderMapper.selectJoinOne(YwWorkorder.class,queryWrapper);
         initFiles(model);//璇诲彇闄勪欢淇℃伅
         YwWorkorderLog log = new YwWorkorderLog();
         log.setJobId(model.getId());
         log.setIsdeleted(Constants.ZERO);
-        model.setLogList(ywWorkorderLogMapper.selectList(new QueryWrapper<YwWorkorderLog>(log).lambda().orderByAsc(YwWorkorderLog::getCreateDate)));
+        model.setLogList(ywWorkorderLogMapper.selectList(new QueryWrapper<YwWorkorderLog>(log)
+                 .lambda()
+                 .in(YwWorkorderLog::getObjType,Constants.YwLogType.WORKORDER_DEAL.getKey()
+                 ,Constants.YwLogType.WORKORDER_CREATE.getKey()
+                   ,Constants.YwLogType.WORKORDER_DISPATCH.getKey())
+                .orderByAsc(YwWorkorderLog::getCreateDate)));
         return model;
     }
 
@@ -336,101 +341,115 @@
     @Override
     public PageData<YwWorkorder> findPage(PageWrap<YwWorkorder> pageWrap) {
         IPage<YwWorkorder> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<YwWorkorder> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<YwWorkorder> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(YwWorkorder.class )
+                .selectAs(SystemUser::getRealname,YwWorkorder::getDealUserName)
+                .select("t3.realname",YwWorkorder::getCreatorName)
+                .selectAs(Category::getName,YwWorkorder::getCategoryName)
+                .selectAs(YwRoom::getName,YwWorkorder::getRoomName)
+                .selectAs(YwRoom::getRoomNum,YwWorkorder::getRoomNum)
+                .selectAs(YwFloor::getName,YwWorkorder::getFloorName)
+                .selectAs(YwBuilding::getName,YwWorkorder::getBuildingName)
+                .leftJoin(SystemUser.class,SystemUser::getId,YwWorkorder::getDealUserId)
+                .leftJoin(Category.class,Category::getId,YwWorkorder::getCateId)
+                .leftJoin(SystemUser.class,SystemUser::getId,YwWorkorder::getCreator)
+                .leftJoin(YwRoom.class,YwRoom::getId,YwWorkorder::getRoomId)
+                .leftJoin(YwFloor.class,YwFloor::getId,YwWorkorder::getFloorId)
+                .leftJoin(YwBuilding.class,YwBuilding::getId,YwWorkorder::getBuildingId);
         pageWrap.getModel().setIsdeleted(Constants.ZERO);
         Utils.MP.blankToNull(pageWrap.getModel());
         if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getId, pageWrap.getModel().getId());
+            queryWrapper.eq(YwWorkorder::getId, pageWrap.getModel().getId());
         }
         if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getCreator, pageWrap.getModel().getCreator());
+            queryWrapper.eq(YwWorkorder::getCreator, pageWrap.getModel().getCreator());
         }
         if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(YwWorkorder::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(YwWorkorder::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+            queryWrapper.ge(YwWorkorder::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.le(YwWorkorder::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
         }
         if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getEditor, pageWrap.getModel().getEditor());
+            queryWrapper.eq(YwWorkorder::getEditor, pageWrap.getModel().getEditor());
         }
         if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(YwWorkorder::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(YwWorkorder::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+            queryWrapper.ge(YwWorkorder::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.le(YwWorkorder::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
         }
         if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getIsdeleted, pageWrap.getModel().getIsdeleted());
+            queryWrapper.eq(YwWorkorder::getIsdeleted, pageWrap.getModel().getIsdeleted());
         }
         if (pageWrap.getModel().getTitle() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getTitle, pageWrap.getModel().getTitle());
+            queryWrapper.eq(YwWorkorder::getTitle, pageWrap.getModel().getTitle());
         }
         if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getRemark, pageWrap.getModel().getRemark());
+            queryWrapper.eq(YwWorkorder::getRemark, pageWrap.getModel().getRemark());
         }
         if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getStatus, pageWrap.getModel().getStatus());
+            queryWrapper.eq(YwWorkorder::getStatus, pageWrap.getModel().getStatus());
         }
         if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getSortnum, pageWrap.getModel().getSortnum());
+            queryWrapper.eq(YwWorkorder::getSortnum, pageWrap.getModel().getSortnum());
         }
         if (pageWrap.getModel().getContent() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getContent, pageWrap.getModel().getContent());
+            queryWrapper.eq(YwWorkorder::getContent, pageWrap.getModel().getContent());
         }
         if (pageWrap.getModel().getGetDate() != null) {
-            queryWrapper.lambda().ge(YwWorkorder::getGetDate, Utils.Date.getStart(pageWrap.getModel().getGetDate()));
-            queryWrapper.lambda().le(YwWorkorder::getGetDate, Utils.Date.getEnd(pageWrap.getModel().getGetDate()));
+            queryWrapper.ge(YwWorkorder::getGetDate, Utils.Date.getStart(pageWrap.getModel().getGetDate()));
+            queryWrapper.le(YwWorkorder::getGetDate, Utils.Date.getEnd(pageWrap.getModel().getGetDate()));
         }
         if (pageWrap.getModel().getProjectId() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getProjectId, pageWrap.getModel().getProjectId());
+            queryWrapper.eq(YwWorkorder::getProjectId, pageWrap.getModel().getProjectId());
         }
         if (pageWrap.getModel().getBuildingId() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getBuildingId, pageWrap.getModel().getBuildingId());
+            queryWrapper.eq(YwWorkorder::getBuildingId, pageWrap.getModel().getBuildingId());
         }
         if (pageWrap.getModel().getRoomId() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getRoomId, pageWrap.getModel().getRoomId());
+            queryWrapper.eq(YwWorkorder::getRoomId, pageWrap.getModel().getRoomId());
         }
         if (pageWrap.getModel().getUserId() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getUserId, pageWrap.getModel().getUserId());
+            queryWrapper.eq(YwWorkorder::getUserId, pageWrap.getModel().getUserId());
         }
         if (pageWrap.getModel().getPhone() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getPhone, pageWrap.getModel().getPhone());
+            queryWrapper.eq(YwWorkorder::getPhone, pageWrap.getModel().getPhone());
         }
         if (pageWrap.getModel().getSubmitDate() != null) {
-            queryWrapper.lambda().ge(YwWorkorder::getSubmitDate, Utils.Date.getStart(pageWrap.getModel().getSubmitDate()));
-            queryWrapper.lambda().le(YwWorkorder::getSubmitDate, Utils.Date.getEnd(pageWrap.getModel().getSubmitDate()));
+            queryWrapper.ge(YwWorkorder::getSubmitDate, Utils.Date.getStart(pageWrap.getModel().getSubmitDate()));
+            queryWrapper.le(YwWorkorder::getSubmitDate, Utils.Date.getEnd(pageWrap.getModel().getSubmitDate()));
         }
         if (pageWrap.getModel().getCateId() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getCateId, pageWrap.getModel().getCateId());
+            queryWrapper.eq(YwWorkorder::getCateId, pageWrap.getModel().getCateId());
         }
         if (pageWrap.getModel().getAreaType() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getAreaType, pageWrap.getModel().getAreaType());
+            queryWrapper.eq(YwWorkorder::getAreaType, pageWrap.getModel().getAreaType());
         }
         if (pageWrap.getModel().getCode() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getCode, pageWrap.getModel().getCode());
+            queryWrapper.eq(YwWorkorder::getCode, pageWrap.getModel().getCode());
         }
         if (pageWrap.getModel().getDealStatus() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getDealStatus, pageWrap.getModel().getDealStatus());
+            queryWrapper.eq(YwWorkorder::getDealStatus, pageWrap.getModel().getDealStatus());
         }
         if (pageWrap.getModel().getDispatchUserId() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getDispatchUserId, pageWrap.getModel().getDispatchUserId());
+            queryWrapper.eq(YwWorkorder::getDispatchUserId, pageWrap.getModel().getDispatchUserId());
         }
         if (pageWrap.getModel().getDispatchDate() != null) {
-            queryWrapper.lambda().ge(YwWorkorder::getDispatchDate, Utils.Date.getStart(pageWrap.getModel().getDispatchDate()));
-            queryWrapper.lambda().le(YwWorkorder::getDispatchDate, Utils.Date.getEnd(pageWrap.getModel().getDispatchDate()));
+            queryWrapper.ge(YwWorkorder::getDispatchDate, Utils.Date.getStart(pageWrap.getModel().getDispatchDate()));
+            queryWrapper.le(YwWorkorder::getDispatchDate, Utils.Date.getEnd(pageWrap.getModel().getDispatchDate()));
         }
         if (pageWrap.getModel().getDispatchInfo() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getDispatchInfo, pageWrap.getModel().getDispatchInfo());
+            queryWrapper.eq(YwWorkorder::getDispatchInfo, pageWrap.getModel().getDispatchInfo());
         }
         if (pageWrap.getModel().getDealUserId() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getDealUserId, pageWrap.getModel().getDealUserId());
+            queryWrapper.eq(YwWorkorder::getDealUserId, pageWrap.getModel().getDealUserId());
         }
         if (pageWrap.getModel().getDealDate() != null) {
-            queryWrapper.lambda().ge(YwWorkorder::getDealDate, Utils.Date.getStart(pageWrap.getModel().getDealDate()));
-            queryWrapper.lambda().le(YwWorkorder::getDealDate, Utils.Date.getEnd(pageWrap.getModel().getDealDate()));
+            queryWrapper.ge(YwWorkorder::getDealDate, Utils.Date.getStart(pageWrap.getModel().getDealDate()));
+            queryWrapper.le(YwWorkorder::getDealDate, Utils.Date.getEnd(pageWrap.getModel().getDealDate()));
         }
         if (pageWrap.getModel().getDealInfo() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getDealInfo, pageWrap.getModel().getDealInfo());
+            queryWrapper.eq(YwWorkorder::getDealInfo, pageWrap.getModel().getDealInfo());
         }
         if (pageWrap.getModel().getDealType() != null) {
-            queryWrapper.lambda().eq(YwWorkorder::getDealType, pageWrap.getModel().getDealType());
+            queryWrapper.eq(YwWorkorder::getDealType, pageWrap.getModel().getDealType());
         }
         for(PageWrap.SortData sortData: pageWrap.getSorts()) {
             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
@@ -439,6 +458,9 @@
                 queryWrapper.orderByAsc(sortData.getProperty());
             }
         }
+        queryWrapper.ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), YwWorkorder::getCreateDate, pageWrap.getModel().getQueryStartTime())
+                .le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()), YwWorkorder::getCreateDate, pageWrap.getModel().getQueryEndTime());
+        queryWrapper.orderByDesc(YwContract::getCreateDate );
         return PageData.from(ywWorkorderMapper.selectPage(page, queryWrapper));
     }
 

--
Gitblit v1.9.3