From 42ffad01769b4c57c76d3ee9f3a69463889f9813 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期五, 22 十一月 2024 18:20:36 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/funingyunwei

---
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java               |   97 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java                     |   40 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolLine.java                     |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwFloorMapper.java                          |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceRecordService.java              |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwDeviceMapper.java                         |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwAccountServiceImpl.java          |   96 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java                    |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolSchemeMapper.java                   |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwBuilding.java                       |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolPoint.java                    |   38 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolPointServiceImpl.java      |  165 ++-
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWorkorderCloudController.java                |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorderLog.java                   |  102 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java                   |   52 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwWorkorderService.java                 |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java                           |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java             |   56 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwBuildingMapper.java                       |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java             |  105 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java                       |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceService.java                    |    2 
 server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java                                         |   19 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java         |   50 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwDeviceRecordMapper.java                   |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolPointMapper.java                    |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java                      |    9 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskService.java                |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java         |   66 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolTaskRecordMapper.java               |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolLineServiceImpl.java       |  142 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractBillMapper.java                   |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwAccount.java                        |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskRecordService.java          |   97 +
 server/system_service/src/main/java/com/doumee/dao/business/model/Company.java                                  |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractMapper.java                       |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceRecordServiceImpl.java     |  146 +-
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwRoomMapper.java                           |    4 
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                        |   19 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskRecordController.java              |   92 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java |  119 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwCustomer.java                       |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolLineService.java                |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwLinePoint.java                      |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTask.java                     |   53 
 server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java                                  |    4 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolLineCloudController.java               |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskCloudController.java               |   20 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerServiceImpl.java         |  205 ++-
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java       |  116 -
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwCustomerMapper.java                       |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolPointService.java               |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwLinePointMapper.java                      |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolLineMapper.java                     |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java                     |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java     |  330 ++++-
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java                         |   13 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceCloudController.java                   |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolSchemeCloudController.java             |    9 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java                         |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java                      |   44 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwAccountMapper.java                        |    3 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceRecordCloudController.java             |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java                           |   18 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolTaskMapper.java                     |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwProjectMapper.java                        |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractRoomMapper.java                   |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java                   |   55 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWorkorderMapper.java                      |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractDetailMapper.java                 |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolSchemeService.java              |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java            |   42 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolPointCloudController.java              |    9 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWorkorderLogMapper.java                   |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java           |  182 ++-
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java        |  270 ++++
 76 files changed, 2,433 insertions(+), 669 deletions(-)

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 6bedf52..43c1651 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
@@ -48,13 +48,14 @@
     public static final String PLATFORM ="PLATFORM" ;
     public static final String POWER_MINUTE ="POWER_MINUTE" ;
     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 RESERVATION_TOTAL_NUM ="RESERVATION_TOTAL_NUM" ;
     public static final String SIGN_IN_PLACE_LAT ="SIGN_IN_PLACE_LAT" ;
     public static final String SIGN_IN_PLACE_LNT ="SIGN_IN_PLACE_LNT" ;
     public static final String SIGN_IN_PLACE_DISTANCE ="SIGN_IN_PLACE_DISTANCE" ;
     public static final String SIGN_IN_QRCODE ="SIGN_IN_QRCODE" ;
-
 
     //琚嫓璁夸汉淇℃伅鏍¢獙鏂瑰紡锛�0鎵嬫満鍙峰崟鐙牎楠� 1鎵嬫満鍙峰拰濮撳悕缁勫悎鏍¢獙锛�
     public static final String BEVISITED_USER_VALID = "BEVISITED_USER_VALID";
@@ -123,6 +124,7 @@
     public static final String VISIT_TIPS = "VISIT_TIPS";
     public static final String VISIT_GUIDEMAP = "VISIT_GUIDEMAP";
     public static final String HIDDEN_DANGER_FILE = "HIDDEN_DANGER_FILE";
+    public static final String YW_WORKORDER_FILE = "YW_WORKORDER_FILE";
     public static final String LOG_DEL_DAYS_LIMIT ="LOG_DEL_DAYS_LIMIT" ;
     public static final String HK_LOG_DEL_DAYS_LIMIT ="HK_LOG_DEL_DAYS_LIMIT" ;
     public static final String HK_NGINX_URL = "HK_NGINX_URL";
@@ -220,7 +222,13 @@
        int sgscxh = 4;
     }
 
-
+    public interface patrolTaskStatus{
+        int waitStart = 0;
+        int working= 1;
+        int timeout = 2;
+        int finish =3;
+        int cancel =4;
+    }
     public static  Date  getBirthdyByCardNo(String idCard){
     if(idCard ==null || idCard.length()<14){
         return null;
@@ -451,6 +459,7 @@
         public static final String GOODSORDER_KEY = "ordercode_";
         public static final String ACTIVITY_SIGN_KEY = "actcode_";
         public static final String AFTERSALE_KEY = "salecode_";
+        public static final String PATROL_SCHEME_CODE_KEY = "patrolSchemeCode";
     }
 
 
@@ -507,6 +516,7 @@
     int driver = 0;//鍙告満浜哄憳
     int visitor = 1;//鏅�氳瀹�
     int internal = 2;//鍐呴儴浜哄憳
+    int customer = 3;//瀹㈡埛浜哄憳
 }
 
 
@@ -1211,6 +1221,11 @@
         HIDDEN_DANGER_SUBMIT(0, "闅愭偅闅忔墜鎷嶆彁鎶�", "闅愭偅闅忔墜鎷嶆彁鎶�"),
         HIDDEN_DANGER_DEAL_BEFORE(1, "闅愭偅闅忔墜鎷嶅鐞嗗墠", "闅愭偅闅忔墜鎷嶅鐞嗗墠"),
         HIDDEN_DANGER_DEAL_AFTER(2, "闅愭偅闅忔墜鎷嶅鐞嗗悗 ", "闅愭偅闅忔墜鎷嶅鐞嗗悗 "),
+        YW_WORKORDER_PROBLEM(3, "杩愮淮宸ュ崟闂闄勪欢 ", "杩愮淮宸ュ崟闂闄勪欢 "),
+        YW_WORKORDER_DEAL(4, "杩愮淮宸ュ崟澶勭悊闄勪欢 ", "杩愮淮宸ュ崟澶勭悊闄勪欢 "),
+        FN_DEVICE_FILE(5, "闃滃畞鏈嶅姟骞冲彴璁惧绫诲瀷鍥剧墖 ", "闃滃畞鏈嶅姟骞冲彴璁惧绫诲瀷鍥剧墖 "),
+        FN_DEVICE_RECORD_FILE(6, "闃滃畞鏈嶅姟骞冲彴杩愮淮璁板綍鍥剧墖 ", "闃滃畞鏈嶅姟骞冲彴杩愮淮璁板綍鍥剧墖 "),
+        FN_PATROL_POINT_FILE(7, "宸℃鐐归檮浠� ", "宸℃鐐归檮浠� "),
         ;
         // 鎴愬憳鍙橀噺
         private String name;
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java b/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
index a879505..be6a72a 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -1292,6 +1292,25 @@
         return now.getTime();
     }
 
+
+    /**
+     * 鑾峰彇X澶╁悗鐨勬棩鏈�
+     * @param date
+     * @param days
+     * @return
+     */
+    public static Date getXDayAfterDate(Date date, int days) {
+        if(date ==null){
+            date = new Date();
+        }
+        Calendar now = Calendar.getInstance();
+        now.setTime(date);
+        now.set(Calendar.DATE, now.get(Calendar.DATE) + days);
+        return now.getTime();
+    }
+
+
+
     /**
      * 寰楀埌涓や釜鏃ユ湡涔嬮棿鐩稿樊鐨勫ぉ鏁�
      *
diff --git a/server/system_service/src/main/java/com/doumee/dao/business/model/Company.java b/server/system_service/src/main/java/com/doumee/dao/business/model/Company.java
index 9c8f1df..b55e513 100644
--- a/server/system_service/src/main/java/com/doumee/dao/business/model/Company.java
+++ b/server/system_service/src/main/java/com/doumee/dao/business/model/Company.java
@@ -55,6 +55,12 @@
     @ApiModelProperty(value = "鍚嶇О")
     @ExcelColumn(name="鍚嶇О")
     private String name;
+    @ApiModelProperty(value = "鍏徃绠�绉�")
+    @ExcelColumn(name="鍏徃绠�绉�")
+    private String shortName;
+    @ApiModelProperty(value = "鍏徃鍦板潃")
+    @ExcelColumn(name="鍏徃鍦板潃")
+    private String address;
 
     @ApiModelProperty(value = "澶囨敞")
     @ExcelColumn(name="澶囨敞")
@@ -76,8 +82,8 @@
     @ExcelColumn(name="鍥炬爣")
     private String imgurl;
 
-    @ApiModelProperty(value = "绫诲瀷 0鐩稿叧鏂瑰叕鍙� 1鍐呴儴缁勭粐 2杩愮淮鍏徃绠$悊")
-    @ExcelColumn(name="绫诲瀷 0鐩稿叧鏂瑰叕鍙� 1鍐呴儴缁勭粐")
+    @ApiModelProperty(value = "绫诲瀷 0鐩稿叧鏂瑰叕鍙� 1鍐呴儴缁勭粐 2杩愮淮璐㈠姟鍏徃绠$悊")
+    @ExcelColumn(name="绫诲瀷 0鐩稿叧鏂瑰叕鍙� 1鍐呴儴缁勭粐 2杩愮淮璐㈠姟鍏徃绠$悊")
     private Integer type;
 
     @ApiModelProperty(value = "鍒嗙被缂栫爜(鍏宠仈category)")
@@ -193,6 +199,9 @@
     @ApiModelProperty(value = "鐖剁骇閮ㄩ棬绾у埆绫诲瀷 0鐩稿叧鏂� 1鍐呴儴缁勭粐", example = "1")
     @TableField(exist = false)
     private String parentType;
+    @ApiModelProperty(value = "璐㈠姟璐︽埛鏁伴噺", example = "1")
+    @TableField(exist = false)
+    private Integer accountNum;
     @ApiModelProperty(value = "erp閮ㄩ棬绾у埆璺緞", example = "1")
     @ExcelColumn(name="erp閮ㄩ棬绾у埆璺緞")
     private String erpCompanyPath;
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java b/server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java
index adfdfc3..add8c58 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java
@@ -63,8 +63,8 @@
     @ExcelColumn(name="绫诲瀷0鍥剧墖 1瑙嗛 2鍏朵粬")
     private Integer type;
 
-    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0闅愭偅鐜板満鎯呭喌 1闅愭偅澶勭悊鍓嶆儏鍐� 2闅愭偅澶勭悊鍚庢儏鍐� 3闅愭偅閫�鍥炶鏄� 4浼氳瀹ゆ枃浠�", example = "1")
-    @ExcelColumn(name="鍏宠仈瀵硅薄绫诲瀷 0闅愭偅鐜板満鎯呭喌 1闅愭偅澶勭悊鍓嶆儏鍐� 2闅愭偅澶勭悊鍚庢儏鍐� 3闅愭偅閫�鍥炶鏄� 4浼氳瀹ゆ枃浠�")
+    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0闅愭偅鐜板満鎯呭喌 1闅愭偅澶勭悊鍓嶆儏鍐� 2闅愭偅澶勭悊鍚庢儏鍐� 3闅愭偅閫�鍥炶鏄� 4浼氳瀹ゆ枃浠� 5闃滃畞璁惧鍥剧墖 6闃滃畞璁惧杩愮淮鍥剧墖", example = "1")
+    @ExcelColumn(name="鍏宠仈瀵硅薄绫诲瀷 0闅愭偅鐜板満鎯呭喌 1闅愭偅澶勭悊鍓嶆儏鍐� 2闅愭偅澶勭悊鍚庢儏鍐� 3闅愭偅閫�鍥炶鏄� 4浼氳瀹ゆ枃浠�  5闃滃畞璁惧鍥剧墖 6闃滃畞璁惧杩愮淮鍥剧墖")
     private Integer objType;
 
     @ApiModelProperty(value = "鏂囦欢鍦板潃")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java
index b5a5677..d9b57e6 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java
@@ -56,6 +56,22 @@
     }
 
     @PreventRepeat
+    @ApiOperation("鍒涘缓璐㈠姟鍏徃")
+    @PostMapping("/createFinanceCompany")
+    @CloudRequiredPermission("business:company:create")
+    public ApiResponse<Integer> createFinanceCompany(@RequestBody Company company, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        company.setLoginUserInfo(this.getLoginUser(token));
+        return ApiResponse.success(companyService.createFinanceCompany(company));
+    }
+    @PreventRepeat
+    @ApiOperation("鏇存柊璐㈠姟鍏徃")
+    @PostMapping("/updateFinanceCompany")
+    @CloudRequiredPermission("business:company:update")
+    public ApiResponse<Integer> updateFinanceCompany(@RequestBody Company company, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        company.setLoginUserInfo(this.getLoginUser(token));
+        return ApiResponse.success(companyService.updateFinanceCompany(company));
+    }
+    @PreventRepeat
     @ApiOperation("鍒涘缓鍔冲姟鍏徃")
     @PostMapping("/createLaborServices")
     @CloudRequiredPermission("business:company:create")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
index f2d0c6f..bfcd847 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
@@ -372,4 +372,44 @@
         return ApiResponse.success(null);
     }
 
+
+
+    /********************************************************闃滃畞杩愮淮*********************************************************************************************/
+
+    @PreventRepeat
+    @ApiOperation("闃滃畞杩愮淮 - 鏂板缓")
+    @PostMapping("/ywCreate")
+    @CloudRequiredPermission("business:member:create")
+    public ApiResponse ywCreate(@RequestBody Member member,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        member.setLoginUserInfo(this.getLoginUser(token));
+        memberService.create(member);
+        return ApiResponse.success("鎿嶄綔鎴愬姛锛�");
+    }
+
+
+    @ApiOperation("闃滃畞杩愮淮 -  鏍规嵁ID淇敼")
+    @PostMapping("/ywUpdateById")
+    @CloudRequiredPermission("business:member:update")
+    public ApiResponse ywUpdateById(@RequestBody Member member,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        member.setLoginUserInfo(this.getLoginUser(token));
+        memberService.ywUpdate(member);
+        return ApiResponse.success(null);
+    }
+
+
+    @ApiOperation("闃滃畞杩愮淮 - 鏌ヨ鍒楄〃")
+    @PostMapping("/ywList")
+    @CloudRequiredPermission("business:member:query")
+    public ApiResponse<List<Member>> ywList (@RequestBody Member model,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        return ApiResponse.success(memberService.ywList(model));
+    }
+
+
+    @ApiOperation("闃滃畞杩愮淮 - 鍒嗛〉鏌ヨ")
+    @PostMapping("/ywFindPage")
+    @CloudRequiredPermission("business:member:query")
+    public ApiResponse<PageData<Member>> ywFindPage (@RequestBody PageWrap<Member> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        return ApiResponse.success(memberService.ywFindPage(pageWrap));
+    }
+
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceCloudController.java
index 649a158..44bd24c 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceCloudController.java
@@ -90,6 +90,6 @@
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:ywdevice:query")
     public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        return ApiResponse.success(ywDeviceService.findById(id));
+        return ApiResponse.success(ywDeviceService.getDetail(id));
     }
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceRecordCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceRecordCloudController.java
index ed91db8..5ac8760 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceRecordCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceRecordCloudController.java
@@ -90,6 +90,6 @@
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:ywdevicerecord:query")
     public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        return ApiResponse.success(ywDeviceRecordService.findById(id));
+        return ApiResponse.success(ywDeviceRecordService.getDetail(id));
     }
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolLineCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolLineCloudController.java
index 8d5a2d0..f49f495 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolLineCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolLineCloudController.java
@@ -90,6 +90,6 @@
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:ywpatrolline:query")
     public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        return ApiResponse.success(ywPatrolLineService.findById(id));
+        return ApiResponse.success(ywPatrolLineService.getDetail(id));
     }
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolPointCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolPointCloudController.java
index 2c5f5f2..af02236 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolPointCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolPointCloudController.java
@@ -78,6 +78,13 @@
         return ApiResponse.success(ywPatrolPointService.findPage(pageWrap));
     }
 
+    @ApiOperation("鍒楄〃鏌ヨ")
+    @PostMapping("/list")
+    @CloudRequiredPermission("business:ywpatrolpoint:query")
+    public ApiResponse<List<YwPatrolPoint>> list (@RequestBody YwPatrolPoint ywPatrolPoint,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        return ApiResponse.success(ywPatrolPointService.findList(ywPatrolPoint));
+    }
+
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:ywpatrolpoint:exportExcel")
@@ -90,6 +97,6 @@
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:ywpatrolpoint:query")
     public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        return ApiResponse.success(ywPatrolPointService.findById(id));
+        return ApiResponse.success(ywPatrolPointService.getDetail(id));
     }
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolSchemeCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolSchemeCloudController.java
index e80b4a0..eda122e 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolSchemeCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolSchemeCloudController.java
@@ -70,6 +70,15 @@
         return ApiResponse.success(null);
     }
 
+    @ApiOperation("鍚敤绂佺敤")
+    @PostMapping("/updateStatus")
+    @CloudRequiredPermission("business:ywpatrolscheme:update")
+    public ApiResponse updateStatus(@RequestBody YwPatrolScheme ywPatrolScheme,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        ywPatrolScheme.setLoginUserInfo(this.getLoginUser(token));
+        ywPatrolSchemeService.updateStatus(ywPatrolScheme);
+        return ApiResponse.success(null);
+    }
+
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
     @CloudRequiredPermission("business:ywpatrolscheme:query")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskCloudController.java
index ce3ce3d..ad901bc 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskCloudController.java
@@ -83,6 +83,17 @@
     @CloudRequiredPermission("business:ywpatroltask:exportExcel")
     public void exportExcel (@RequestBody PageWrap<YwPatrolTask> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         pageWrap.getModel().setLoginUserInfo(this.getLoginUser(token));
+        List<YwPatrolTask> ywPatrolTaskList = ywPatrolTaskService.findPage(pageWrap).getRecords();
+        for (YwPatrolTask ywPatrolTask:ywPatrolTaskList) {
+            if((Constants.equalsInteger(ywPatrolTask.getStatus(),Constants.ZERO) || Constants.equalsInteger(ywPatrolTask.getStatus(),Constants.ONE))
+            && ywPatrolTask.getEndDate().getTime() < System.currentTimeMillis()
+            ){
+                ywPatrolTask.setStatus(Constants.TWO);
+            }
+
+        }
+
+
         ExcelExporter.build(YwPatrolTask.class).export(ywPatrolTaskService.findPage(pageWrap).getRecords(), "杩愮淮宸℃浠诲姟淇℃伅琛�", response);
     }
 
@@ -92,4 +103,13 @@
     public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(ywPatrolTaskService.findById(id));
     }
+    @ApiOperation("浠诲姟鍙栨秷")
+    @GetMapping("/taskCancel")
+    @CloudRequiredPermission("business:ywpatroltask:query")
+    public ApiResponse taskCancel(@RequestParam Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        ywPatrolTaskService.taskCancel(id,this.getLoginUser(token));
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskRecordController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskRecordController.java
new file mode 100644
index 0000000..1d09868
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskRecordController.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.YwPatrolTaskRecord;
+import com.doumee.service.business.YwPatrolTaskRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+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/21 18:11
+ */
+@Api(tags = "杩愮淮宸℃浠诲姟 - 宸℃鐐逛俊鎭〃")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/ywPatrolTaskRecord")
+public class YwPatrolTaskRecordController extends BaseController {
+
+    @Autowired
+    private YwPatrolTaskRecordService ywPatrolTaskRecordService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:ywpatroltaskrecord:create")
+    public ApiResponse create(@RequestBody YwPatrolTaskRecord ywPatrolTaskRecord) {
+        return ApiResponse.success(ywPatrolTaskRecordService.create(ywPatrolTaskRecord));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:ywpatroltaskrecord:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        ywPatrolTaskRecordService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:ywpatroltaskrecord: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));
+        }
+        ywPatrolTaskRecordService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:ywpatroltaskrecord:update")
+    public ApiResponse updateById(@RequestBody YwPatrolTaskRecord ywPatrolTaskRecord) {
+        ywPatrolTaskRecordService.updateById(ywPatrolTaskRecord);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:ywpatroltaskrecord:query")
+    public ApiResponse<PageData<YwPatrolTaskRecord>> findPage (@RequestBody PageWrap<YwPatrolTaskRecord> pageWrap) {
+        return ApiResponse.success(ywPatrolTaskRecordService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:ywpatroltaskrecord:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<YwPatrolTaskRecord> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(YwPatrolTaskRecord.class).export(ywPatrolTaskRecordService.findPage(pageWrap).getRecords(), "杩愮淮宸℃浠诲姟 - 宸℃鐐逛俊鎭〃", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:ywpatroltaskrecord:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(ywPatrolTaskRecordService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWorkorderCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWorkorderCloudController.java
index 7242027..792cdb9 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWorkorderCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWorkorderCloudController.java
@@ -69,6 +69,22 @@
         ywWorkorderService.updateById(ywWorkorder);
         return ApiResponse.success(null);
     }
+    @ApiOperation("鍒嗘淳宸ュ崟")
+    @PostMapping("/dispatchOrder")
+    @CloudRequiredPermission("business:ywworkorder:update")
+    public ApiResponse dispatchOrder(@RequestBody YwWorkorder ywWorkorder,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        ywWorkorder.setLoginUserInfo(this.getLoginUser(token));
+        ywWorkorderService.dispatchOrder(ywWorkorder);
+        return ApiResponse.success(null);
+    }
+    @ApiOperation("澶勭悊宸ュ崟")
+    @PostMapping("/dealOrder")
+    @CloudRequiredPermission("business:ywworkorder:update")
+    public ApiResponse dealOrder(@RequestBody YwWorkorder ywWorkorder,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        ywWorkorder.setLoginUserInfo(this.getLoginUser(token));
+        ywWorkorderService.dealOrder(ywWorkorder);
+        return ApiResponse.success(null);
+    }
 
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwAccountMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwAccountMapper.java
index 5ed0ca0..03bae30 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwAccountMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwAccountMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.YwAccount;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 18:09
  */
-public interface YwAccountMapper extends BaseMapper<YwAccount> {
+public interface YwAccountMapper extends MPJBaseMapper<YwAccount> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwBuildingMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwBuildingMapper.java
index a95d0e0..5bc9687 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwBuildingMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwBuildingMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.YwBuilding;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwBuildingMapper extends BaseMapper<YwBuilding> {
+public interface YwBuildingMapper extends MPJBaseMapper<YwBuilding> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractBillMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractBillMapper.java
index c94e7e5..d9cc770 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractBillMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractBillMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.YwContractBill;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwContractBillMapper extends BaseMapper<YwContractBill> {
+public interface YwContractBillMapper extends MPJBaseMapper<YwContractBill> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractDetailMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractDetailMapper.java
index 1511dc9..311ce08 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractDetailMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractDetailMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import com.doumee.dao.business.model.YwContractDetail;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwContractDetailMapper extends BaseMapper<YwContractDetail> {
+public interface YwContractDetailMapper extends MPJBaseMapper<YwContractDetail> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractMapper.java
index 8bf798a..40fa82f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import com.doumee.dao.business.model.YwContract;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwContractMapper extends BaseMapper<YwContract> {
+public interface YwContractMapper extends MPJBaseMapper<YwContract> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractRoomMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractRoomMapper.java
index b1c767f..d860dce 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractRoomMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwContractRoomMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import com.doumee.dao.business.model.YwContractRoom;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwContractRoomMapper extends BaseMapper<YwContractRoom> {
+public interface YwContractRoomMapper extends MPJBaseMapper<YwContractRoom> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwCustomerMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwCustomerMapper.java
index 53eb1e4..7bba055 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwCustomerMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwCustomerMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.YwCustomer;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwCustomerMapper extends BaseMapper<YwCustomer> {
+public interface YwCustomerMapper extends MPJBaseMapper<YwCustomer> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwDeviceMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwDeviceMapper.java
index 80dab10..54deb3c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwDeviceMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwDeviceMapper.java
@@ -1,12 +1,13 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import com.doumee.dao.business.model.YwDevice;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwDeviceMapper extends BaseMapper<YwDevice> {
+public interface YwDeviceMapper extends MPJBaseMapper<YwDevice> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwDeviceRecordMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwDeviceRecordMapper.java
index 1d81018..5ab27d1 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwDeviceRecordMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwDeviceRecordMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.YwDeviceRecord;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwDeviceRecordMapper extends BaseMapper<YwDeviceRecord> {
+public interface YwDeviceRecordMapper extends MPJBaseMapper<YwDeviceRecord> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwFloorMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwFloorMapper.java
index 24f7fd2..357ef7e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwFloorMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwFloorMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.YwFloor;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/20 15:03
  */
-public interface YwFloorMapper extends BaseMapper<YwFloor> {
+public interface YwFloorMapper extends MPJBaseMapper<YwFloor> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwLinePointMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwLinePointMapper.java
index f251c2b..5c2cee9 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwLinePointMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwLinePointMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.YwLinePoint;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwLinePointMapper extends BaseMapper<YwLinePoint> {
+public interface YwLinePointMapper extends MPJBaseMapper<YwLinePoint> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolLineMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolLineMapper.java
index bc9fe0d..693d0b1 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolLineMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolLineMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import com.doumee.dao.business.model.YwPatrolLine;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwPatrolLineMapper extends BaseMapper<YwPatrolLine> {
+public interface YwPatrolLineMapper extends MPJBaseMapper<YwPatrolLine> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolPointMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolPointMapper.java
index f726c8e..301bf9b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolPointMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolPointMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.YwPatrolPoint;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwPatrolPointMapper extends BaseMapper<YwPatrolPoint> {
+public interface YwPatrolPointMapper extends MPJBaseMapper<YwPatrolPoint> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolSchemeMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolSchemeMapper.java
index 8f80eff..2b8b1a5 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolSchemeMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolSchemeMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.YwPatrolScheme;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwPatrolSchemeMapper extends BaseMapper<YwPatrolScheme> {
+public interface YwPatrolSchemeMapper extends MPJBaseMapper<YwPatrolScheme> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolTaskMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolTaskMapper.java
index 688b3b8..ac00a3e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolTaskMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolTaskMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.YwPatrolTask;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwPatrolTaskMapper extends BaseMapper<YwPatrolTask> {
+public interface YwPatrolTaskMapper extends MPJBaseMapper<YwPatrolTask> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolTaskRecordMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolTaskRecordMapper.java
new file mode 100644
index 0000000..17de015
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolTaskRecordMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.YwPatrolTaskRecord;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/11/21 18:11
+ */
+public interface YwPatrolTaskRecordMapper extends MPJBaseMapper<YwPatrolTaskRecord> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwProjectMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwProjectMapper.java
index 051a985..97b89f1 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwProjectMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwProjectMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.YwProject;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwProjectMapper extends BaseMapper<YwProject> {
+public interface YwProjectMapper extends MPJBaseMapper<YwProject> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwRoomMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwRoomMapper.java
index 954e93e..159160f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwRoomMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwRoomMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.YwRoom;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwRoomMapper extends BaseMapper<YwRoom> {
+public interface YwRoomMapper extends MPJBaseMapper<YwRoom> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWorkorderLogMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWorkorderLogMapper.java
new file mode 100644
index 0000000..a237bbc
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWorkorderLogMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.PlatformLog;
+import com.doumee.dao.business.model.YwWorkorderLog;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/06/28 10:03
+ */
+public interface YwWorkorderLogMapper extends BaseMapper<YwWorkorderLog> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWorkorderMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWorkorderMapper.java
index 6c558e2..8b0aec3 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWorkorderMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWorkorderMapper.java
@@ -1,12 +1,12 @@
 package com.doumee.dao.business;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.YwWorkorder;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/11/19 16:07
  */
-public interface YwWorkorderMapper extends BaseMapper<YwWorkorder> {
+public interface YwWorkorderMapper extends MPJBaseMapper<YwWorkorder> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java
index 7314405..4f5d50b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java
@@ -68,7 +68,7 @@
      //@ExcelColumn(name="鍥炬爣")
     private String imgurl;
 
-    @ApiModelProperty(value = "绫诲瀷 0鍏徃绫诲瀷 1杞﹁締绫诲瀷 2杩愮淮-瀹㈡埛琛屼笟鍒嗙被 3杩愮淮-宸ュ崟鍒嗙被 4杩愮淮-宸℃鍖哄煙 5杩愮淮-璁惧鍒嗙被" )
+    @ApiModelProperty(value = "绫诲瀷 0鍏徃绫诲瀷 1杞﹁締绫诲瀷 2杩愮淮-瀹㈡埛琛屼笟鍒嗙被 3杩愮淮-宸ュ崟鍒嗙被 4杩愮淮-宸℃鍖哄煙 5杩愮淮-璁惧鍒嗙被 6=瀹㈡埛琛屼笟" )
      //@ExcelColumn(name="绫诲瀷 0鍏徃绫诲瀷 1杞﹁締绫诲瀷")
     private Integer type;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
index b4664fe..c40d545 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -64,6 +64,10 @@
     @ApiModelProperty(value = "绫诲瀷 0鍙告満浜哄憳 1鏅�氳瀹�  2鍐呴儴浜哄憳 3瀹㈡埛鑱旂郴浜�", example = "1")
     private Integer type;
 
+    @ApiModelProperty(value = "韬唤 0鑰佹澘 1瓒呯骇绠$悊鍛� 2鍛樺伐", example = "1")
+    @ExcelColumn(name="韬唤 0鑰佹澘 1瓒呯骇绠$悊鍛� 2鍛樺伐")
+    private Integer highCheckor;
+
     @ApiModelProperty(value = "璁垮鍚嶇О/鍐呴儴浜哄憳")
     @ExcelColumn(name="濮撳悕",index = 1,width = 8)
     private String name;
@@ -130,6 +134,9 @@
     private Date birthday;
 
 
+    @ApiModelProperty(value = "瀹㈡埛缂栫爜锛堝叧鑱� YW_CUSTOMER )锛�", example = "1")
+    private Integer customerId;
+
     @ApiModelProperty(value = "韬唤璇佸彿锛圡D4鍔犲瘑锛�")
     private String idcardNo;
     @ApiModelProperty(value = "淇敼鐨勮韩浠借瘉鍙� ")
@@ -169,8 +176,6 @@
     private String hkId;
 
 
-
-
     @ApiModelProperty(value = "娴峰悍鏈�杩戝悓姝ユ椂闂�")
     private Date hkDate;
 
@@ -199,10 +204,6 @@
     @ApiModelProperty(value = "鐧婚檰瀵嗙爜")
     private String passward;
 
-
-    @ApiModelProperty(value = "鏄惁楂樼骇瀹℃壒浜� 0鍚� 1鏄�", example = "1")
-    private Integer highCheckor;
-
     @ApiModelProperty(value = "闂ㄧ瑙掕壊缂栫爜锛堝叧鑱攄evice_role),澶氫釜鑻辨枃閫楀彿闅斿紑", example = "1")
     private String roleId;
 
@@ -215,6 +216,11 @@
     @ApiModelProperty(value = "璁垮鍏徃鍚嶇О")
     private String visitCompanyName;
 
+    @ApiModelProperty(value = "閭")
+    @ExcelColumn(name="閭")
+    private String email;
+
+
 
     @ApiModelProperty(value = "鏈�鍚庢搷浣滀汉")
     @TableField(exist = false)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwAccount.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwAccount.java
index ce8767b..51b3568 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwAccount.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwAccount.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;
@@ -83,5 +84,8 @@
     @ApiModelProperty(value = "寮�鎴疯鍦板潃")
     @ExcelColumn(name="寮�鎴疯鍦板潃")
     private String bankAddr;
+    @ApiModelProperty(value = "浼佷笟鍚嶇О")
+    @TableField(exist = false)
+    private String companyName;
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwBuilding.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwBuilding.java
index fd5463a..da312b2 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwBuilding.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwBuilding.java
@@ -105,6 +105,9 @@
     @ApiModelProperty(value = "鎴挎簮鏁�")
     @TableField(exist = false)
     private Integer roomNum;
+    @ApiModelProperty(value = "椤圭洰鍚嶇О")
+    @TableField(exist = false)
+    private String projectName;
     @ApiModelProperty(value = "鍙嫑鍟嗘埧婧愭暟")
     @TableField(exist = false)
     private Integer roomeRentNum;
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 458b359..a2faed2 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
@@ -1,7 +1,9 @@
 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 com.doumee.dao.system.model.Multifile;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -11,6 +13,7 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * 杩愮淮鍚堝悓淇℃伅琛�
@@ -148,4 +151,8 @@
     @ExcelColumn(name="鐗╀笟璐规�婚噾棰�")
     private BigDecimal wyTotalFee;
 
+    @ApiModelProperty(value = "闄勪欢闆嗗悎")
+    @TableField(exist = false)
+    private List<Multifile> fileList;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwCustomer.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwCustomer.java
index 01f5ad9..bfbd718 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwCustomer.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwCustomer.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;
@@ -141,4 +142,16 @@
     @ExcelColumn(name="鑱旂郴浜虹紪鐮侊紙鍏宠仈member锛�")
     private Integer memberId;
 
+    @ApiModelProperty(value = "鏈夋晥鏈�")
+    @ExcelColumn(name="鏈夋晥鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date validity;
+
+    @ApiModelProperty(value = "榛樿鍛樺伐淇℃伅")
+    @TableField(exist = false)
+    private Member member;
+
+    @ApiModelProperty(value = "鍛樺伐鍚嶇О")
+    @TableField(exist = false)
+    private String memberName;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java
index c5da317..cff24ae 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java
@@ -1,7 +1,9 @@
 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 com.doumee.dao.system.model.Multifile;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -93,4 +95,15 @@
     @ExcelColumn(name="鎵�鍦ㄤ綅缃�")
     private String addr;
 
+    @ApiModelProperty(value = "鍒嗙被鍚嶇О")
+    @TableField(exist = false)
+    private String categoryName;
+
+    @ApiModelProperty(value = "绠$悊鍛樺悕绉�")
+    @TableField(exist = false)
+    private String realName;
+
+    @ApiModelProperty(value = "闄勪欢淇℃伅")
+    @TableField(exist = false)
+    private Multifile multifile;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java
index 7bc54e8..9cacb9e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java
@@ -1,7 +1,9 @@
 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 com.doumee.dao.system.model.Multifile;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -10,6 +12,7 @@
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 杩愮淮璁惧杩愮淮璁板綍琛�
@@ -23,63 +26,87 @@
 
     @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="鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿",index = 5, dateFormat = "yyyy-MM-dd HH:mm:ss")
     @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姝e父 1鎹熷潖 2鎶ュ簾", example = "1")
-    @ExcelColumn(name="鐘舵�� 0姝e父 1鎹熷潖 2鎶ュ簾")
+    @ExcelColumn(name="璁惧鐘舵��",index = 3, valueMapping = "0=姝e父;1=鎹熷潖;2=鎶ュ簾;")
     private Integer status;
 
     @ApiModelProperty(value = "璁惧鍨嬪彿", example = "1")
-    @ExcelColumn(name="璁惧鍨嬪彿")
     private Integer modelNo;
 
     @ApiModelProperty(value = "璁惧绫荤紪鐮侊紙绠$悊yw_device锛�", example = "1")
-    @ExcelColumn(name="璁惧绫荤紪鐮侊紙绠$悊yw_device锛�")
     private Integer deviceId;
 
     @ApiModelProperty(value = "杩愮淮浜哄憳缂栫爜缂栫爜(鍏宠仈system_user)", example = "1")
-    @ExcelColumn(name="杩愮淮浜哄憳缂栫爜缂栫爜(鍏宠仈system_user)")
     private Integer userId;
 
     @ApiModelProperty(value = "渚涘簲鍟�")
-    @ExcelColumn(name="渚涘簲鍟�")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date company;
 
     @ApiModelProperty(value = "鎯呭喌璇存槑")
-    @ExcelColumn(name="鎯呭喌璇存槑")
+    @ExcelColumn(name="杩愮淮澶囨敞",index = 4)
     private String content;
 
     @ApiModelProperty(value = "杩愮淮鏃堕棿")
-    @ExcelColumn(name="杩愮淮鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date dealDate;
 
+    @ApiModelProperty(value = "璁惧鍚嶇О")
+    @ExcelColumn(name="璁惧鍚嶇О",index = 2)
+    @TableField(exist = false)
+    private String deviceName;
+
+    @ApiModelProperty(value = "璁惧缂栧彿")
+    @ExcelColumn(name="璁惧缂栧彿",index = 1)
+    @TableField(exist = false)
+    private String deviceCode;
+
+    @ApiModelProperty(value = "杩愮淮浜哄悕绉�")
+    @ExcelColumn(name="杩愮淮浜�",index = 0)
+    @TableField(exist = false)
+    private String realName;
+
+    @ApiModelProperty(value = "杩愮淮浜虹粍缁囧悕绉�")
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "杩愮淮浜烘墜鏈哄彿")
+    @TableField(exist = false)
+    private String mobile;
+
+    @ApiModelProperty(value = "寮�濮嬫棩鏈� yyyy-MM-dd")
+    @TableField(exist = false)
+    private Date startDate;
+
+    @ApiModelProperty(value = "缁撴潫鏃ユ湡 yyyy-MM-dd")
+    @TableField(exist = false)
+    private Date endDate;
+
+    @ApiModelProperty(value = "闄勪欢淇℃伅")
+    @TableField(exist = false)
+    private List<Multifile> multifileList;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwLinePoint.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwLinePoint.java
index 3251367..54cc29c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwLinePoint.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwLinePoint.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,9 @@
     @ExcelColumn(name="鏄惁鎵爜鎵撳崱 0涓嶉渶瑕� 1闇�瑕�")
     private Integer needScancode;
 
+    @ApiModelProperty(value = "宸℃鐐瑰悕绉�")
+    @TableField(exist = false)
+    private String pointName;
+
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolLine.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolLine.java
index a3d00d9..48a9942 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolLine.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolLine.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;
@@ -10,6 +11,7 @@
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 杩愮淮宸℃璺嚎淇℃伅琛�
@@ -68,4 +70,12 @@
     @ExcelColumn(name="鍥炬爣")
     private String imgurl;
 
+    @ApiModelProperty(value = "宸℃鐐规暟閲�")
+    @TableField(exist = false)
+    private Integer lineAmount;
+
+    @ApiModelProperty(value = "宸℃鐐�")
+    @TableField(exist = false)
+    private List<YwLinePoint> linePointList;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolPoint.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolPoint.java
index 451de6c..e1e0d05 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolPoint.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolPoint.java
@@ -1,7 +1,9 @@
 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 com.doumee.dao.system.model.Multifile;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -10,6 +12,7 @@
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 杩愮淮宸℃鐐逛俊鎭〃
@@ -76,4 +79,39 @@
     @ExcelColumn(name="鍦板潃")
     private String addr;
 
+    @ApiModelProperty(value = "缂栫爜")
+    @ExcelColumn(name="缂栫爜")
+    private String code;
+
+    @ApiModelProperty(value = "缁忓害")
+    @ExcelColumn(name="缁忓害")
+    private String longitude;
+
+    @ApiModelProperty(value = "绾害")
+    @ExcelColumn(name="绾害")
+    private String latitude;
+
+    @ApiModelProperty(value = "鍐呭")
+    @ExcelColumn(name="鍐呭")
+    private String content;
+
+    @ApiModelProperty(value = "宸℃璁惧锛堝叧鑱� yw_device锛�", example = "1")
+    @ExcelColumn(name="宸℃璁惧锛堝叧鑱� yw_device锛�")
+    private Integer deviceId;
+
+    @ApiModelProperty(value = "鍖哄煙鍚嶇О")
+    @TableField(exist = false)
+    private String areaName;
+
+    @ApiModelProperty(value = "璁惧鍚嶇О")
+    @TableField(exist = false)
+    private String deviceName;
+
+    @ApiModelProperty(value = "闄勪欢淇℃伅")
+    @TableField(exist = false)
+    private Multifile multifile;
+
+    @ApiModelProperty(value = "杩囨护鏁版嵁")
+    @TableField(exist = false)
+    private List<Integer> idLists;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java
index 07050d2..da2ec27 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.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;
@@ -23,96 +24,103 @@
 
     @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="鏍囬")
+    @ExcelColumn(name="璁″垝鍚嶇О",index = 0)
     private String title;
 
+    @ApiModelProperty(value = "璁″垝缂栫爜")
+    @ExcelColumn(name="璁″垝缂栧彿",index = 1)
+    private String code;
+
+
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤", example = "1")
-    @ExcelColumn(name="鐘舵�� 0鍚敤 1绂佺敤")
+    @ExcelColumn(name="鐘舵��",index = 9,width = 6,valueMapping = "0=鍚敤;1=鍋滅敤;")
     private Integer status;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
     @ApiModelProperty(value = "宸℃鐐圭紪鐮�(鍏宠仈yw_patrol_line)", example = "1")
-    @ExcelColumn(name="宸℃鐐圭紪鐮�(鍏宠仈yw_patrol_line)")
     private Integer lineId;
 
     @ApiModelProperty(value = "宸℃璐熻矗浜虹紪鐮侀泦鍚堬紝澶氫釜浣跨敤鑻辨枃閫楀彿闅斿紑")
-    @ExcelColumn(name="宸℃璐熻矗浜虹紪鐮侀泦鍚堬紝澶氫釜浣跨敤鑻辨枃閫楀彿闅斿紑")
     private String userIds;
 
     @ApiModelProperty(value = "澶勭悊浜虹紪鐮�(鍏宠仈system_user)", example = "1")
-    @ExcelColumn(name="澶勭悊浜虹紪鐮�(鍏宠仈system_user)")
     private Integer dealUserId;
 
     @ApiModelProperty(value = "澶勭悊鏃堕棿")
-    @ExcelColumn(name="澶勭悊鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date dealDate;
 
     @ApiModelProperty(value = "澶勭悊澶囨敞")
-    @ExcelColumn(name="澶勭悊澶囨敞")
     private String dealInfo;
 
     @ApiModelProperty(value = "寰幆鍛ㄦ湡  0姣忓ぉ 1姣忓懆 2姣忓ぉ", example = "1")
-    @ExcelColumn(name="寰幆鍛ㄦ湡  0姣忓ぉ 1姣忓懆 2姣忓ぉ")
     private Integer circleType;
 
     @ApiModelProperty(value = "寰幆閲嶅瑙勫垯 1-31锛屽涓嫳鏂囬�楀彿闅斿紑")
-    @ExcelColumn(name="寰幆閲嶅瑙勫垯 1-31锛屽涓嫳鏂囬�楀彿闅斿紑")
     private String circleDays;
 
     @ApiModelProperty(value = "寮�濮嬫棩鏈�")
-    @ExcelColumn(name="寮�濮嬫棩鏈�")
+    @ExcelColumn(name="寮�濮嬫棩鏈�",index = 3,width = 6,dateFormat ="yyyy-MM-dd" )
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date startDate;
 
     @ApiModelProperty(value = "缁撴潫鏃ユ湡")
-    @ExcelColumn(name="缁撴潫鏃ユ湡")
+    @ExcelColumn(name="缁撴潫鏃ユ湡",index = 4,width = 6,dateFormat ="yyyy-MM-dd" )
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date endDate;
 
     @ApiModelProperty(value = "寮�濮嬫椂闂寸偣")
-    @ExcelColumn(name="寮�濮嬫椂闂寸偣")
+    @ExcelColumn(name="寮�濮嬫椂闂�",index = 5,width = 6)
     private String startTime;
 
     @ApiModelProperty(value = "缁撴潫鏃堕棿鐐�")
-    @ExcelColumn(name="缁撴潫鏃堕棿鐐�")
+    @ExcelColumn(name="缁撴潫鏃堕棿",index = 6,width = 6)
     private String endTime;
 
     @ApiModelProperty(value = "鎵ц杩涘害 0寰呭紑濮� 1杩涜涓� 2瓒呮湡 3宸插畬鎴�", example = "1")
-    @ExcelColumn(name="鎵ц杩涘害 0寰呭紑濮� 1杩涜涓� 2瓒呮湡 3宸插畬鎴�")
     private Integer processStatus;
 
+    @ApiModelProperty(value = "鍒涘缓浜哄悕绉�")
+    @TableField(exist = false)
+    private String createUserName;
+
+    @ApiModelProperty(value = "璐熻矗浜哄悕绉�")
+    @ExcelColumn(name="璐熻矗浜�",index = 2,width = 6)
+    @TableField(exist = false)
+    private String userName;
+
+    @ApiModelProperty(value = "鎵ц缁撴灉锛�0=寰呭紑濮�;1=杩涜涓�;2=宸茬粨鏉�")
+    @ExcelColumn(name="鎵ц缁撴灉",index = 7,width = 6,valueMapping = "0=寰呭紑濮�;1=杩涜涓�;2=宸茬粨鏉�")
+    @TableField(exist = false)
+    private Integer schemeStatus;
+
+    @ApiModelProperty(value = "瓒呮湡浠诲姟鏁�")
+    @TableField(exist = false)
+    @ExcelColumn(name="瓒呮湡浠诲姟鏁�",index = 8,width = 6)
+    private Integer timeOutTaskNum;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTask.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTask.java
index 2cbdfbc..e23677a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTask.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTask.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;
@@ -23,84 +24,92 @@
 
     @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 title;
 
+    @ApiModelProperty(value = "浠诲姟缂栫爜")
+    @ExcelColumn(name="浠诲姟缂栧彿",index = 2,width = 6)
+    private String code;
+
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "鐘舵�� 0寰呭紑濮� 1杩涜涓� 2宸茶秴鏈� 3宸插畬鎴� 4宸插彇娑�", example = "1")
-    @ExcelColumn(name="鐘舵�� 0寰呭紑濮� 1杩涜涓� 2宸茶秴鏈� 3宸插畬鎴� 4宸插彇娑�")
+    @ExcelColumn(name="鎵ц缁撴灉",index = 7,width = 6,valueMapping = "0=寰呭紑濮�;1=杩涜涓�;2=宸茶秴鏈�;3=宸插畬鎴�;")
     private Integer status;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
     @ApiModelProperty(value = "宸℃璁″垝缂栫爜(鍏宠仈yw_patrol_scheme)", example = "1")
-    @ExcelColumn(name="宸℃璁″垝缂栫爜(鍏宠仈yw_patrol_scheme)")
     private Integer schemeId;
 
     @ApiModelProperty(value = "宸℃鐐圭紪鐮�(鍏宠仈yw_patrol_point)", example = "1")
-    @ExcelColumn(name="宸℃鐐圭紪鐮�(鍏宠仈yw_patrol_point)")
     private Integer pointId;
 
     @ApiModelProperty(value = "澶勭悊浜虹紪鐮�(鍏宠仈system_user)", example = "1")
-    @ExcelColumn(name="澶勭悊浜虹紪鐮�(鍏宠仈system_user)")
     private Integer dealUserId;
 
     @ApiModelProperty(value = "澶勭悊鏃堕棿")
-    @ExcelColumn(name="澶勭悊鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ExcelColumn(name="瀹為檯瀹屾垚鏃堕棿",index = 5,width = 10,dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date dealDate;
 
     @ApiModelProperty(value = "澶勭悊澶囨敞")
-    @ExcelColumn(name="澶勭悊澶囨敞")
     private String dealInfo;
 
     @ApiModelProperty(value = "寰幆鍛ㄦ湡  0姣忓ぉ 1姣忓懆 2姣忓ぉ", example = "1")
-    @ExcelColumn(name="寰幆鍛ㄦ湡  0姣忓ぉ 1姣忓懆 2姣忓ぉ")
     private Integer circleType;
 
     @ApiModelProperty(value = "寮�濮嬫棩鏈�")
-    @ExcelColumn(name="寮�濮嬫棩鏈�")
-    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ExcelColumn(name="寮�濮嬫棩鏈�",index = 3,width = 10,dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date startDate;
 
     @ApiModelProperty(value = "缁撴潫鏃ユ湡")
-    @ExcelColumn(name="缁撴潫鏃ユ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ExcelColumn(name="缁撴潫鏃ユ湡",index = 4,width = 10,dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date endDate;
 
     @ApiModelProperty(value = "宸℃缁撴灉  0姝e父 1寮傚父", example = "1")
-    @ExcelColumn(name="宸℃缁撴灉  0姝e父 1寮傚父")
     private Integer dealStatus;
 
+    @ApiModelProperty(value = "璁″垝鏍囬")
+    @ExcelColumn(name="璁″垝鍚嶇О",index = 0,width = 6)
+    @TableField(exist = false)
+    private String planTitle;
+
+    @ApiModelProperty(value = "鎵ц浜�")
+    @ExcelColumn(name="鎵ц浜�",index = 6,width = 6)
+    @TableField(exist = false)
+    private String userName;
+
+    @ApiModelProperty(value = "璁″垝缂栧彿")
+    @ExcelColumn(name="璁″垝缂栧彿",index = 1,width = 6)
+    @TableField(exist = false)
+    private String planCode;
+
+
+    @ApiModelProperty(value = "搴忓彿" , hidden = true)
+    @TableField(exist = false)
+    private Integer codeSn;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java
new file mode 100644
index 0000000..98c9dde
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java
@@ -0,0 +1,97 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+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;
+
+/**
+ * 杩愮淮宸℃浠诲姟 - 宸℃鐐逛俊鎭〃
+ * @author 姹熻箘韫�
+ * @date 2024/11/21 18:11
+ */
+@Data
+@ApiModel("杩愮淮宸℃浠诲姟 - 宸℃鐐逛俊鎭〃")
+@TableName("`yw_patrol_task_record`")
+public class YwPatrolTaskRecord {
+
+    @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 = "宸℃璁″垝缂栫爜(鍏宠仈yw_patrol_scheme)", example = "1")
+    @ExcelColumn(name="宸℃璁″垝缂栫爜(鍏宠仈yw_patrol_scheme)")
+    private Integer schemeId;
+
+    @ApiModelProperty(value = "宸℃浠诲姟缂栫爜(鍏宠仈yw_patrol_task)", example = "1")
+    @ExcelColumn(name="宸℃浠诲姟缂栫爜(鍏宠仈yw_patrol_task)")
+    private Integer taskId;
+
+    @ApiModelProperty(value = "宸℃鐐圭紪鐮�(鍏宠仈yw_patrol_point)", example = "1")
+    @ExcelColumn(name="宸℃鐐圭紪鐮�(鍏宠仈yw_patrol_point)")
+    private Integer pointId;
+
+    @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
+    @ExcelColumn(name="鎺掑簭鐮�")
+    private Integer sortnum;
+
+    @ApiModelProperty(value = "澶勭悊浜虹紪鐮�(鍏宠仈system_user)", example = "1")
+    @ExcelColumn(name="澶勭悊浜虹紪鐮�(鍏宠仈system_user)")
+    private Integer dealUserId;
+
+    @ApiModelProperty(value = "澶勭悊鏃堕棿")
+    @ExcelColumn(name="澶勭悊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date dealDate;
+
+    @ApiModelProperty(value = "鏄惁宸℃  0=寰呭紑濮嬶紱1=宸插贰妫�锛�", example = "1")
+    @ExcelColumn(name="鏄惁宸℃  0=寰呭紑濮嬶紱1=宸插贰妫�")
+    private Integer status;
+
+    @ApiModelProperty(value = "宸℃缁撴灉  0=姝e父锛�1=寮傚父", example = "1")
+    @ExcelColumn(name="宸℃缁撴灉  0=姝e父锛�1=寮傚父")
+    private Integer dealStatus;
+
+    @ApiModelProperty(value = "澶勭悊澶囨敞")
+    @ExcelColumn(name="澶勭悊澶囨敞")
+    private String dealInfo;
+
+
+    @ApiModelProperty(value = "宸℃鐐瑰悕绉�")
+    @TableField(exist = false)
+    private String pointName;
+
+}
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 58fe4d8..9f18992 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
@@ -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;
@@ -105,4 +106,10 @@
     @ExcelColumn(name="鎵�灞炴ゼ瀹囩紪鐮侊紙鍏宠仈yw_building)")
     private Integer buildingId;
 
+    @ApiModelProperty(value = "椤圭洰鍚嶇О")
+    @TableField(exist = false)
+    private String projectName;
+    @ApiModelProperty(value = "妤煎畤鍚嶇О")
+    @TableField(exist = false)
+    private String buildingName;
 }
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 c6b72ce..a2a2196 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
@@ -1,7 +1,9 @@
 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 com.doumee.dao.system.model.Multifile;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -10,6 +12,7 @@
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 杩愮淮宸ュ崟淇℃伅琛�
@@ -77,8 +80,8 @@
     @ExcelColumn(name="鎵�灞為」鐩紪鐮侊紙鍏宠仈yw_project)")
     private Integer projectId;
 
-    @ApiModelProperty(value = "鎵�灞為」鐩紪鐮侊紙鍏宠仈yw_building)", example = "1")
-    @ExcelColumn(name="鎵�灞為」鐩紪鐮侊紙鍏宠仈yw_building)")
+    @ApiModelProperty(value = "鎵�灞炴ゼ瀹囩紪鐮侊紙鍏宠仈yw_building)", example = "1")
+    @ExcelColumn(name="鎵�灞炴ゼ瀹囩紪鐮侊紙鍏宠仈yw_building)")
     private Integer buildingId;
 
     @ApiModelProperty(value = "鎵�灞炴埧闂寸紪鐮侊紙鍏宠仈yw_room)", example = "1")
@@ -143,5 +146,40 @@
     @ApiModelProperty(value = "澶勭悊鏂瑰紡 0鎸囨淳鍚庡鐞� 1鐩存帴鍥炲", example = "1")
     @ExcelColumn(name="澶勭悊鏂瑰紡 0鎸囨淳鍚庡鐞� 1鐩存帴鍥炲")
     private Integer dealType;
-
+    @ApiModelProperty(value = "椤圭洰鍚嶇О")
+    @TableField(exist = false)
+    private String projectName;
+    @ApiModelProperty(value = "妤煎畤鍚嶇О")
+    @TableField(exist = false)
+    private String buildingName;
+    @ApiModelProperty(value = "鎴挎簮鍚嶇О")
+    @TableField(exist = false)
+    private String roomName;
+    @ApiModelProperty(value = "鎴垮彿")
+    @TableField(exist = false)
+    private String roomNum;
+    @ApiModelProperty(value = "鎻愭姤浜哄鍚�")
+    @TableField(exist = false)
+    private String creatorName;
+    @ApiModelProperty(value = "澶勭悊浜哄鍚�")
+    @TableField(exist = false)
+    private String dealUserName;
+    @ApiModelProperty(value = "鍒嗛厤浜哄鍚�")
+    @TableField(exist = false)
+    private String dispatchUserName;
+    @ApiModelProperty(value = "鎻愭姤缁勭粐")
+    @TableField(exist = false)
+    private String creatorCompany;
+    @ApiModelProperty(value = "鎻愭姤浜烘墜鏈哄彿")
+    @TableField(exist = false)
+    private String creatorPhone;
+    @ApiModelProperty(value = "闂鍥剧墖闆嗗悎")
+    @TableField(exist = false)
+    private List<Multifile> fileList;
+    @ApiModelProperty(value = "澶勭悊鍥剧墖闆嗗悎")
+    @TableField(exist = false)
+    private List<Multifile> dealFileList;
+    @ApiModelProperty(value = "鎿嶄綔璁板綍鍒楄〃")
+    @TableField(exist = false)
+    private List<YwWorkorderLog> logList;
 }
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
new file mode 100644
index 0000000..ea181cb
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorderLog.java
@@ -0,0 +1,102 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 鏈堝彴_浣滀笟鎿嶄綔鍘嗗彶琛�
+ * @author 姹熻箘韫�
+ * @date 2024/06/28 10:03
+ */
+@Data
+@ApiModel("杩愮淮-宸ュ崟鎿嶄綔鍘嗗彶琛�")
+@TableName("`yw_workorder_log`")
+public class YwWorkorderLog {
+
+    @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 = "宸ュ崟缂栫爜锛堝叧鑱攜w_workorder)", example = "1")
+    @ExcelColumn(name="宸ュ崟缂栫爜锛堝叧鑱攜w_workorder)")
+    private Integer jobId;
+
+    @ApiModelProperty(value = "鏍囬")
+    @ExcelColumn(name="鏍囬")
+    private String title;
+
+    @ApiModelProperty(value = "绠�浠�")
+    @ExcelColumn(name="绠�浠�")
+    private String content;
+
+    @ApiModelProperty(value = "鎿嶄綔绫诲瀷 0宸ュ崟鍒涘缓 1鎸囨淳 2澶勭悊", example = "1")
+    @ExcelColumn(name="鎿嶄綔绫诲瀷 0宸ュ崟鍒涘缓 1鎸囨淳 2澶勭悊")
+    private Integer objType;
+
+    @ApiModelProperty(value = "鍏宠仈瀵硅薄缂栫爜")
+    @ExcelColumn(name="鍏宠仈瀵硅薄缂栫爜")
+    private String objId;
+
+    @ApiModelProperty(value = "鎿嶄綔鍓嶅唴瀹�")
+    @ExcelColumn(name="鎿嶄綔鍓嶅唴瀹�")
+    private String beforeContent;
+
+    @ApiModelProperty(value = "鎿嶄綔鍚庡唴瀹�")
+    @ExcelColumn(name="鎿嶄綔鍚庡唴瀹�")
+    private String afterContent;
+
+    @ApiModelProperty(value = "鍙傛暟1 鎿嶄綔浜哄鍚�")
+    @ExcelColumn(name="鍙傛暟1")
+    private String param1;
+
+    @ApiModelProperty(value = "鍙傛暟2 鎸囨淳瀵硅薄濮撳悕")
+    @ExcelColumn(name="鍙傛暟2")
+    private String param2;
+
+    @ApiModelProperty(value = "鍙傛暟3 ")
+    @ExcelColumn(name="鍙傛暟3")
+    private String param3;
+
+    @ApiModelProperty(value = "鍙傛暟4 ")
+    @ExcelColumn(name="鍙傛暟4")
+    private String param4;
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java
index 18cfe71..d890255 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java
@@ -126,4 +126,7 @@
     List<Company> companyTree(Integer type);
 
     void updateSort(UpdateCompanySortDTO dto);
+
+    Integer createFinanceCompany(Company company);
+    Integer updateFinanceCompany(Company company);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
index 24554db..41cb5a8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -210,4 +210,13 @@
 
 
     List<Member>  findDriveList(Member model);
+
+    /********************************************************闃滃畞杩愮淮*********************************************************************************************/
+    Member ywCreate(Member member);
+
+    Member ywUpdate(Member member);
+
+    List<Member> ywList(Member member);
+
+    PageData<Member> ywFindPage(PageWrap<Member> pageWrap);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceRecordService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceRecordService.java
index 2e1d881..fb6c6fa 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceRecordService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceRecordService.java
@@ -95,4 +95,6 @@
      * @return long
      */
     long count(YwDeviceRecord ywDeviceRecord);
+
+    YwDeviceRecord getDetail(Integer id);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceService.java
index 4b82d39..8a27715 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceService.java
@@ -95,4 +95,6 @@
      * @return long
      */
     long count(YwDevice ywDevice);
+
+    YwDevice getDetail(Integer id);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolLineService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolLineService.java
index 96ad10e..658c5eb 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolLineService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolLineService.java
@@ -95,4 +95,6 @@
      * @return long
      */
     long count(YwPatrolLine ywPatrolLine);
+
+    YwPatrolLine getDetail(Integer id);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolPointService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolPointService.java
index 35ca914..8be507c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolPointService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolPointService.java
@@ -95,4 +95,6 @@
      * @return long
      */
     long count(YwPatrolPoint ywPatrolPoint);
+
+    YwPatrolPoint getDetail(Integer id);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolSchemeService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolSchemeService.java
index b4134a8..413946d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolSchemeService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolSchemeService.java
@@ -95,4 +95,10 @@
      * @return long
      */
     long count(YwPatrolScheme ywPatrolScheme);
+
+    /**
+     * 绂佸惎鐢�
+     * @param ywPatrolScheme
+     */
+    void updateStatus(YwPatrolScheme ywPatrolScheme);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskRecordService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskRecordService.java
new file mode 100644
index 0000000..23b5444
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskRecordService.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.YwPatrolTaskRecord;
+import java.util.List;
+
+/**
+ * 杩愮淮宸℃浠诲姟 - 宸℃鐐逛俊鎭〃Service瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2024/11/21 18:11
+ */
+public interface YwPatrolTaskRecordService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param ywPatrolTaskRecord 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(YwPatrolTaskRecord ywPatrolTaskRecord);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param ywPatrolTaskRecord 瀹炰綋瀵硅薄
+     */
+    void delete(YwPatrolTaskRecord ywPatrolTaskRecord);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param ywPatrolTaskRecord 瀹炰綋瀵硅薄
+     */
+    void updateById(YwPatrolTaskRecord ywPatrolTaskRecord);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param ywPatrolTaskRecords 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<YwPatrolTaskRecord> ywPatrolTaskRecords);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return YwPatrolTaskRecord
+     */
+    YwPatrolTaskRecord findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param ywPatrolTaskRecord 瀹炰綋瀵硅薄
+     * @return YwPatrolTaskRecord
+     */
+    YwPatrolTaskRecord findOne(YwPatrolTaskRecord ywPatrolTaskRecord);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param ywPatrolTaskRecord 瀹炰綋瀵硅薄
+     * @return List<YwPatrolTaskRecord>
+     */
+    List<YwPatrolTaskRecord> findList(YwPatrolTaskRecord ywPatrolTaskRecord);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<YwPatrolTaskRecord>
+     */
+    PageData<YwPatrolTaskRecord> findPage(PageWrap<YwPatrolTaskRecord> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param ywPatrolTaskRecord 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(YwPatrolTaskRecord ywPatrolTaskRecord);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskService.java
index 7247607..a14111f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskService.java
@@ -95,4 +95,6 @@
      * @return long
      */
     long count(YwPatrolTask ywPatrolTask);
+
+    void taskCancel(Integer id, LoginUserInfo loginUserInfo);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwWorkorderService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwWorkorderService.java
index dd37a85..6064bde 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwWorkorderService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwWorkorderService.java
@@ -95,4 +95,7 @@
      * @return long
      */
     long count(YwWorkorder ywWorkorder);
+
+    void dispatchOrder(YwWorkorder ywWorkorder);
+    void dealOrder(YwWorkorder ywWorkorder);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
index 01d2a84..4cdd677 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -64,6 +64,32 @@
     @Autowired
     private CompanyJoinMapper companyJoinMapper;
 
+    /**
+     * 鍒涘缓璐㈠姟鍏徃
+     * @param company
+     * @return
+     */
+    @Override
+    public Integer createFinanceCompany(Company company) {
+        company.setType(Constants.TWO);
+        if(companyMapper.selectCount(new QueryWrapper<Company>().lambda()
+                .eq(Company::getName,company.getName())
+                .eq(Company::getType,company.getType())
+                .eq(Company::getIsdeleted,Constants.ZERO)) >0){
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝鍚嶇О涓嶈兘閲嶅~");
+        }
+        company.setCreateDate(new Date());
+        company.setCreator(company.getLoginUserInfo().getId());
+        company.setIsdeleted(Constants.ZERO);
+        company.setStatus(Constants.ZERO);
+        company.setSortnum(0);//榛樿鏈�涓婇潰
+        company.setHkDate(company.getCreateDate());
+        company.setEditDate(company.getCreateDate());
+        company.setEditor(company.getCreator());
+        companyMapper.insert(company);
+        return company.getId();
+    }
+
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public Integer create(Company company) {
@@ -332,6 +358,18 @@
         companyMapper.updateById(company);
         return null;
     }
+    @Override
+    public Integer updateFinanceCompany(Company company) {
+        if(companyMapper.selectCount(new QueryWrapper<Company>().lambda()
+                .eq(Company::getName,company.getName())
+                .eq(Company::getType,company.getType())
+                .ne(Company::getId,company.getId())
+                .eq(Company::getIsdeleted,Constants.ZERO)) >0){
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝鍚嶇О涓嶈兘閲嶅~");
+        }
+        companyMapper.updateById(company);
+        return company.getId();
+    }
 
     @Override
     public void updateByIdInBatch(List<Company> companys) {
@@ -570,7 +608,8 @@
         /*        .leftJoin(Member.class, Member::getId,Company::getHeadId)*/
       /*  queryWrapper.leftJoin(" company c on c.id=t.parent_id");*/
         queryWrapper.selectAll(Company.class)
-                .select("(select count(m.id) from member m where m.COMPANY_ID=t.id and m.ISDELETED=0) as countNum") ;
+                .select("(select count(m.id) from member m where m.COMPANY_ID=t.id and m.ISDELETED=0) ",Company::getCountNum)
+                .select("(select count(m.id) from yw_account m where m.COMPANY_ID=t.id and m.ISDELETED=0)",Company::getAccountNum) ;
         queryWrapper.select("t1.name",Company::getParentName);
         queryWrapper.select("t1.company_path",Company::getParentCompanyPath);
         queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getStatus()),Company::getStatus,Constants.ZERO);
@@ -651,6 +690,7 @@
         QueryWrapper<Company> wrapper = new QueryWrapper<>();
         wrapper.lambda()
                 .eq(Company::getIsdeleted,Constants.ZERO)
+                .eq(Company::getType,company.getType())
                 .eq(Company::getName,company.getName());
         List<Company> companies = companyMapper.selectList(wrapper);
         if (CollectionUtils.isEmpty(companies)){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index cb9484e..12428ac 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -128,6 +128,9 @@
     
     @Value("${debug_model}")
     private Boolean isDebug;
+
+
+
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public Member create(Member member) {
@@ -2100,6 +2103,108 @@
 
     }
 
+    /********************************************************闃滃畞杩愮淮*********************************************************************************************/
 
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public Member ywCreate(Member member) {
+        if(Objects.isNull(member)
+        || Objects.isNull(member.getCustomerId())
+        || StringUtils.isBlank(member.getName())
+        || StringUtils.isBlank(member.getPhone())
+        || Objects.isNull(member.getHighCheckor())
+        || Objects.isNull(member.getIdcardType())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = member.getLoginUserInfo();
+        member.setCreator(loginUserInfo.getId());
+        member.setCreateDate(new Date());
+        member.setType(Constants.memberType.customer);
+        member.setStatus(Constants.ZERO);
+        member.setIsdeleted(Constants.ZERO);
+        member.setStatus(Constants.ZERO);
+        this.checkYwMember(member);
+        memberMapper.insert(member);
+        return member;
+    }
+
+    @Override
+    public Member ywUpdate(Member member) {
+        if(Objects.isNull(member)
+                || Objects.isNull(member.getCustomerId())
+                || Objects.isNull(member.getId())
+                || StringUtils.isBlank(member.getName())
+                || StringUtils.isBlank(member.getPhone())
+                || Objects.isNull(member.getHighCheckor())
+                || Objects.isNull(member.getIdcardType())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = member.getLoginUserInfo();
+        member.setEditor(loginUserInfo.getId());
+        member.setCustomerId(null);
+        member.setEditDate(new Date());
+        member.setType(Constants.memberType.customer);
+        member.setStatus(Constants.ZERO);
+        member.setIsdeleted(Constants.ZERO);
+        member.setStatus(Constants.ZERO);
+        this.checkYwMember(member);
+        memberMapper.updateById(member);
+        return member;
+    }
+
+
+    @Override
+    public List<Member> ywList(Member member) {
+        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>()
+                .lambda().eq(Member::getIsdeleted,Constants.ZERO)
+                        .eq(Member::getStatus,Constants.ZERO)
+                .eq(Member::getType,Constants.memberType.customer)
+        );
+        return memberList;
+    }
+
+
+    public void checkYwMember(Member member){
+        if (StringUtils.isBlank(member.getPhone())||!PhoneUtil.isPhone(member.getPhone())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐢佃瘽鍙风爜鏍煎紡鏈夎");
+        }
+        if (StringUtils.isNotBlank(member.getIdcardNo()) && Constants.equalsInteger(member.getIdcardType(),Constants.ZERO)  && !IdcardUtil.isValidCard(member.getIdcardNo())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"韬唤璇佸彿鏍煎紡鏈夎");
+        }
+        if(StringUtils.isNotBlank(member.getIdcardNo() ) && Constants.equalsInteger(member.getIdcardType(),Constants.ZERO) ){
+            if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
+                            .ne(Objects.nonNull(member.getId()),Member::getId,member.getId())
+                    .eq(Member::getIdcardNo, DESUtil.encrypt(Constants.EDS_PWD, member.getIdcardNo()))
+                    .eq(Member::getIsdeleted,Constants.ZERO)) >0){
+                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "韬唤璇佸彿銆�"+member.getIdcardNo()+"銆戝凡琚娇鐢紝涓嶈兘閲嶅");
+            }
+        }
+        if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
+                .ne(Objects.nonNull(member.getId()),Member::getId,member.getId())
+                .eq(Member::getPhone,  member.getPhone())
+                .eq(Member::getIsdeleted,Constants.ZERO) ) >0){
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鎵嬫満鍙枫��"+member.getPhone()+"銆戝凡琚娇鐢紝涓嶈兘閲嶅");
+        }
+    }
+
+
+    @Override
+    public PageData<Member> ywFindPage(PageWrap<Member> pageWrap) {
+        IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<Member>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        Member model = pageWrap.getModel();
+        IPage iPage = memberMapper.selectJoinPage(page,Member.class,new MPJLambdaWrapper<Member>()
+                .eq(Member::getIsdeleted,Constants.ZERO)
+                .eq(Member::getType,Constants.memberType.customer)
+                .eq(Objects.nonNull(model)&&Objects.nonNull(model.getCustomerId()),Member::getCustomerId,model.getCustomerId())
+                .and(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getName()),i->i.like(Member::getName,model.getName()).or().like(
+                        Member::getPhone,model.getName()
+                ))
+        );
+        return PageData.from(iPage);
+    }
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwAccountServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwAccountServiceImpl.java
index 2bc6259..0256c8f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwAccountServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwAccountServiceImpl.java
@@ -1,20 +1,28 @@
 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.dao.CompanyMapper;
+import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.YwAccount;
+import com.doumee.dao.business.model.YwProject;
 import com.doumee.service.business.YwAccountService;
 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 com.github.yulichang.wrapper.MPJLambdaWrapper;
 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;
 
 /**
@@ -27,16 +35,38 @@
 
     @Autowired
     private YwAccountMapper ywAccountMapper;
+    @Autowired
+    private CompanyMapper companyMapper;
 
     @Override
-    public Integer create(YwAccount ywAccount) {
-        ywAccountMapper.insert(ywAccount);
-        return ywAccount.getId();
+    public Integer create(YwAccount model) {
+
+        if(model.getCompanyId()==null){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勫叕鍙镐俊鎭�");
+        }
+        Company ywProject = companyMapper.selectById(model.getCompanyId());
+        if(ywProject ==null || Constants.equalsInteger(ywProject.getIsdeleted(),Constants.ONE)
+                || !Constants.equalsInteger(ywProject.getType(),Constants.TWO)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勫叕鍙镐俊鎭紒");
+        }
+        model.setCreator(model.getLoginUserInfo().getId());
+        model.setIsdeleted(Constants.ZERO);
+        model.setCreateDate(new Date());
+        model.setStatus(Constants.ZERO);
+        model.setEditDate(model.getCreateDate());
+        model.setEditor(model.getCreator());
+        ywAccountMapper.insert(model);
+        return model.getId();
     }
 
     @Override
     public void deleteById(Integer id, LoginUserInfo user) {
-        ywAccountMapper.deleteById(id);
+        YwAccount model = new YwAccount();
+        model.setId(id);
+        model.setIsdeleted(Constants.ONE);
+        model.setEditDate(model.getCreateDate());
+        model.setEditor(model.getCreator());
+        ywAccountMapper.updateById(model);
     }
 
     @Override
@@ -50,12 +80,24 @@
         if (CollectionUtils.isEmpty(ids)) {
             return;
         }
-        ywAccountMapper.deleteBatchIds(ids);
+        for(Integer id : ids){
+            this.deleteById(id,user);
+        }
     }
 
     @Override
-    public void updateById(YwAccount ywAccount) {
-        ywAccountMapper.updateById(ywAccount);
+    public void updateById(YwAccount model) {
+        if(model.getCompanyId()==null){
+        throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勫叕鍙镐俊鎭�");
+    }
+        Company ywProject = companyMapper.selectById(model.getCompanyId());
+        if(ywProject ==null || Constants.equalsInteger(ywProject.getIsdeleted(),Constants.ONE)
+                || !Constants.equalsInteger(ywProject.getType(),Constants.TWO)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勫叕鍙镐俊鎭紒");
+        }
+        model.setEditDate(model.getCreateDate());
+        model.setEditor(model.getCreator());
+        ywAccountMapper.updateById(model);
     }
 
     @Override
@@ -88,54 +130,58 @@
     @Override
     public PageData<YwAccount> findPage(PageWrap<YwAccount> pageWrap) {
         IPage<YwAccount> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<YwAccount> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<YwAccount> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(YwAccount.class)
+                        .selectAs(Company::getName,YwAccount::getCompanyName)
+                                .leftJoin(Company.class,Company::getId,YwAccount::getCompanyId);
+        pageWrap.getModel().setIsdeleted(Constants.ZERO);
         Utils.MP.blankToNull(pageWrap.getModel());
         if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(YwAccount::getId, pageWrap.getModel().getId());
+            queryWrapper.eq(YwAccount::getId, pageWrap.getModel().getId());
         }
         if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(YwAccount::getCreator, pageWrap.getModel().getCreator());
+            queryWrapper.eq(YwAccount::getCreator, pageWrap.getModel().getCreator());
         }
         if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(YwAccount::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(YwAccount::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+            queryWrapper.ge(YwAccount::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.le(YwAccount::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
         }
         if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(YwAccount::getEditor, pageWrap.getModel().getEditor());
+            queryWrapper.eq(YwAccount::getEditor, pageWrap.getModel().getEditor());
         }
         if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(YwAccount::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(YwAccount::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+            queryWrapper.ge(YwAccount::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.le(YwAccount::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
         }
         if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(YwAccount::getIsdeleted, pageWrap.getModel().getIsdeleted());
+            queryWrapper.eq(YwAccount::getIsdeleted, pageWrap.getModel().getIsdeleted());
         }
         if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(YwAccount::getRemark, pageWrap.getModel().getRemark());
+            queryWrapper.eq(YwAccount::getRemark, pageWrap.getModel().getRemark());
         }
         if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(YwAccount::getStatus, pageWrap.getModel().getStatus());
+            queryWrapper.eq(YwAccount::getStatus, pageWrap.getModel().getStatus());
         }
         if (pageWrap.getModel().getTitle() != null) {
-            queryWrapper.lambda().eq(YwAccount::getTitle, pageWrap.getModel().getTitle());
+            queryWrapper.like(YwAccount::getTitle, pageWrap.getModel().getTitle());
         }
         if (pageWrap.getModel().getCompanyId() != null) {
-            queryWrapper.lambda().eq(YwAccount::getCompanyId, pageWrap.getModel().getCompanyId());
+            queryWrapper.eq(YwAccount::getCompanyId, pageWrap.getModel().getCompanyId());
         }
         if (pageWrap.getModel().getType() != null) {
-            queryWrapper.lambda().eq(YwAccount::getType, pageWrap.getModel().getType());
+            queryWrapper.eq(YwAccount::getType, pageWrap.getModel().getType());
         }
         if (pageWrap.getModel().getName() != null) {
-            queryWrapper.lambda().eq(YwAccount::getName, pageWrap.getModel().getName());
+            queryWrapper.eq(YwAccount::getName, pageWrap.getModel().getName());
         }
         if (pageWrap.getModel().getBankName() != null) {
-            queryWrapper.lambda().eq(YwAccount::getBankName, pageWrap.getModel().getBankName());
+            queryWrapper.eq(YwAccount::getBankName, pageWrap.getModel().getBankName());
         }
         if (pageWrap.getModel().getBankNo() != null) {
-            queryWrapper.lambda().eq(YwAccount::getBankNo, pageWrap.getModel().getBankNo());
+            queryWrapper.eq(YwAccount::getBankNo, pageWrap.getModel().getBankNo());
         }
         if (pageWrap.getModel().getBankAddr() != null) {
-            queryWrapper.lambda().eq(YwAccount::getBankAddr, pageWrap.getModel().getBankAddr());
+            queryWrapper.eq(YwAccount::getBankAddr, pageWrap.getModel().getBankAddr());
         }
         for(PageWrap.SortData sortData: pageWrap.getSorts()) {
             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java
index 3a3071e..1764e4a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java
@@ -1,11 +1,14 @@
 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.YwBuildingMapper;
+import com.doumee.dao.business.YwProjectMapper;
 import com.doumee.dao.business.model.YwBuilding;
 import com.doumee.dao.business.model.YwProject;
 import com.doumee.service.business.YwBuildingService;
@@ -13,6 +16,7 @@
 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.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -30,9 +34,18 @@
 
     @Autowired
     private YwBuildingMapper ywBuildingMapper;
+    @Autowired
+    private YwProjectMapper ywProjectMapper;
 
     @Override
     public Integer create(YwBuilding model) {
+        if(model.getProjectId()==null){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勯」鐩俊鎭紒");
+        }
+        YwProject ywProject = ywProjectMapper.selectById(model.getProjectId());
+        if(ywProject ==null ||Constants.equalsInteger(ywProject.getIsdeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勯」鐩俊鎭紒");
+        }
         model.setCreator(model.getLoginUserInfo().getId());
         model.setIsdeleted(Constants.ZERO);
         model.setCreateDate(new Date());
@@ -107,69 +120,72 @@
     @Override
     public PageData<YwBuilding> findPage(PageWrap<YwBuilding> pageWrap) {
         IPage<YwBuilding> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<YwBuilding> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<YwBuilding> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(YwBuilding.class )
+                .selectAs(YwProject::getName,YwBuilding::getProjectName)
+                .leftJoin(YwProject.class,YwProject::getId,YwBuilding::getProjectId);
         Utils.MP.blankToNull(pageWrap.getModel());
         pageWrap.getModel().setIsdeleted(Constants.ZERO);
-        queryWrapper.select("*,(select count(1) from yw_room a where a.isdeleted=0 and a.BUILDING_ID=yw_building.id) as roomNum"+
-                ",(select count(1) from yw_room a where a.isdeleted=0 and a.BUILDING_ID=yw_building.id and a.IS_INVESTMENT=1) as roomRentNum");
+        queryWrapper.select("*,(select count(1) from yw_room a where a.isdeleted=0 and a.BUILDING_ID=t.id) as roomNum"+
+                ",(select count(1) from yw_room a where a.isdeleted=0 and a.BUILDING_ID=t.id and a.IS_INVESTMENT=1) as roomRentNum");
         if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getId, pageWrap.getModel().getId());
+            queryWrapper.eq(YwBuilding::getId, pageWrap.getModel().getId());
         }
         if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getCreator, pageWrap.getModel().getCreator());
+            queryWrapper.eq(YwBuilding::getCreator, pageWrap.getModel().getCreator());
         }
         if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(YwBuilding::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(YwBuilding::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+            queryWrapper.ge(YwBuilding::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.le(YwBuilding::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
         }
         if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getEditor, pageWrap.getModel().getEditor());
+            queryWrapper.eq(YwBuilding::getEditor, pageWrap.getModel().getEditor());
         }
         if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(YwBuilding::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(YwBuilding::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+            queryWrapper.ge(YwBuilding::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.le(YwBuilding::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
         }
         if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getIsdeleted, pageWrap.getModel().getIsdeleted());
+            queryWrapper.eq(YwBuilding::getIsdeleted, pageWrap.getModel().getIsdeleted());
         }
         if (pageWrap.getModel().getName() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getName, pageWrap.getModel().getName());
+            queryWrapper.eq(YwBuilding::getName, pageWrap.getModel().getName());
         }
         if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getRemark, pageWrap.getModel().getRemark());
+            queryWrapper.eq(YwBuilding::getRemark, pageWrap.getModel().getRemark());
         }
         if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getStatus, pageWrap.getModel().getStatus());
+            queryWrapper.eq(YwBuilding::getStatus, pageWrap.getModel().getStatus());
         }
         if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getSortnum, pageWrap.getModel().getSortnum());
+            queryWrapper.eq(YwBuilding::getSortnum, pageWrap.getModel().getSortnum());
         }
         if (pageWrap.getModel().getImgurl() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getImgurl, pageWrap.getModel().getImgurl());
+            queryWrapper.eq(YwBuilding::getImgurl, pageWrap.getModel().getImgurl());
         }
         if (pageWrap.getModel().getCode() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getCode, pageWrap.getModel().getCode());
+            queryWrapper.eq(YwBuilding::getCode, pageWrap.getModel().getCode());
         }
         if (pageWrap.getModel().getAddr() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getAddr, pageWrap.getModel().getAddr());
+            queryWrapper.eq(YwBuilding::getAddr, pageWrap.getModel().getAddr());
         }
         if (pageWrap.getModel().getArea() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getArea, pageWrap.getModel().getArea());
+            queryWrapper.eq(YwBuilding::getArea, pageWrap.getModel().getArea());
         }
         if (pageWrap.getModel().getCqArea() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getCqArea, pageWrap.getModel().getCqArea());
+            queryWrapper.eq(YwBuilding::getCqArea, pageWrap.getModel().getCqArea());
         }
         if (pageWrap.getModel().getRentArea() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getRentArea, pageWrap.getModel().getRentArea());
+            queryWrapper.eq(YwBuilding::getRentArea, pageWrap.getModel().getRentArea());
         }
         if (pageWrap.getModel().getOnFloor() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getOnFloor, pageWrap.getModel().getOnFloor());
+            queryWrapper.eq(YwBuilding::getOnFloor, pageWrap.getModel().getOnFloor());
         }
         if (pageWrap.getModel().getUnderFloor() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getUnderFloor, pageWrap.getModel().getUnderFloor());
+            queryWrapper.eq(YwBuilding::getUnderFloor, pageWrap.getModel().getUnderFloor());
         }
         if (pageWrap.getModel().getProjectId() != null) {
-            queryWrapper.lambda().eq(YwBuilding::getProjectId, pageWrap.getModel().getProjectId());
+            queryWrapper.eq(YwBuilding::getProjectId, pageWrap.getModel().getProjectId());
         }
         for(PageWrap.SortData sortData: pageWrap.getSorts()) {
             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
@@ -178,7 +194,7 @@
                 queryWrapper.orderByAsc(sortData.getProperty());
             }
         }
-        return PageData.from(ywBuildingMapper.selectPage(page, queryWrapper));
+        return PageData.from(ywBuildingMapper.selectJoinPage(page,YwBuilding.class, queryWrapper));
     }
 
     @Override
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 bb21643..40bd2b7 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,11 +1,20 @@
 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.YwContractMapper;
+import com.doumee.dao.business.YwCustomerMapper;
+import com.doumee.dao.business.YwProjectMapper;
+import com.doumee.dao.business.YwRoomMapper;
+import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.YwContract;
+import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.service.business.YwContractService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -13,8 +22,10 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -27,11 +38,44 @@
 
     @Autowired
     private YwContractMapper ywContractMapper;
+    @Autowired
+    private CompanyMapper companyMapper;
+    @Autowired
+    private YwProjectMapper projectMapper;
+    @Autowired
+    private YwRoomMapper roomMapper;
+    @Autowired
+    private SystemUserMapper systemUserMapper;
+    @Autowired
+    private YwCustomerMapper customerMapper;
 
     @Override
-    public Integer create(YwContract ywContract) {
-        ywContractMapper.insert(ywContract);
-        return ywContract.getId();
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public Integer create(YwContract model) {
+        isParamValidCreated(model);
+
+        model.setCreator(model.getLoginUserInfo().getId());
+        model.setIsdeleted(Constants.ZERO);
+        model.setCreateDate(new Date());
+        model.setStatus(Constants.ZERO);
+        model.setEditDate(model.getCreateDate());
+        model.setEditor(model.getCreator());
+
+        ywContractMapper.insert(model);
+
+        return model.getId();
+    }
+
+    private void isParamValidCreated(YwContract model) {
+        if(model.getCompanyId()==null){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勫叕鍙镐俊鎭�");
+        }
+        Company ywProject = companyMapper.selectById(model.getCompanyId());
+        if(ywProject ==null || Constants.equalsInteger(ywProject.getIsdeleted(),Constants.ONE)
+                || !Constants.equalsInteger(ywProject.getType(),Constants.TWO)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勫叕鍙镐俊鎭紒");
+        }
+
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerServiceImpl.java
index 840edc8..8d5464e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerServiceImpl.java
@@ -1,21 +1,36 @@
 package com.doumee.service.business.impl;
 
+import cn.emay.sdk.util.StringUtil;
+import cn.hutool.core.util.IdcardUtil;
+import cn.hutool.core.util.PhoneUtil;
+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.DESUtil;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.MemberMapper;
 import com.doumee.dao.business.YwCustomerMapper;
+import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.YwCustomer;
 import com.doumee.service.business.YwCustomerService;
 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 com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 杩愮淮瀹㈡埛淇℃伅琛⊿ervice瀹炵幇
@@ -28,11 +43,68 @@
     @Autowired
     private YwCustomerMapper ywCustomerMapper;
 
+    @Autowired
+    private MemberMapper memberMapper;
+
     @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public Integer create(YwCustomer ywCustomer) {
+        if(Objects.isNull(ywCustomer)
+            || Objects.nonNull(ywCustomer.getType())
+            || StringUtils.isBlank(ywCustomer.getName())
+            || Objects.isNull(ywCustomer.getMember())
+            || StringUtils.isBlank(ywCustomer.getMember().getName())
+            || StringUtils.isBlank(ywCustomer.getMember().getPhone())
+            || Objects.isNull(ywCustomer.getMember().getHighCheckor())
+            || Objects.isNull(ywCustomer.getMember().getIdcardType())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = ywCustomer.getLoginUserInfo();
+        ywCustomer.setStatus(Constants.ZERO);
+        ywCustomer.setIsdeleted(Constants.ZERO);
+        ywCustomer.setCreator(loginUserInfo.getId());
+        ywCustomer.setCreateDate(new Date());
         ywCustomerMapper.insert(ywCustomer);
+
+        Member member = ywCustomer.getMember();
+        member.setCreator(loginUserInfo.getId());
+        member.setCreateDate(new Date());
+        member.setIsdeleted(Constants.ZERO);
+        member.setStatus(Constants.ZERO);
+        member.setCompanyType(ywCustomer.getId());
+        member.setType(Constants.memberType.customer);
+        this.checkMember(member);
+        memberMapper.insert(member);
+
+        ywCustomer.setMemberId(member.getId());
+        ywCustomerMapper.updateById(ywCustomer);
+
         return ywCustomer.getId();
     }
+
+
+    public void checkMember(Member member){
+        if (StringUtils.isBlank(member.getPhone())||!PhoneUtil.isPhone(member.getPhone())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐢佃瘽鍙风爜鏍煎紡鏈夎");
+        }
+        if (StringUtils.isNotBlank(member.getIdcardNo()) && Constants.equalsInteger(member.getIdcardType(),Constants.ZERO)  && !IdcardUtil.isValidCard(member.getIdcardNo())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"韬唤璇佸彿鏍煎紡鏈夎");
+        }
+        if(StringUtils.isNotBlank(member.getIdcardNo() ) && Constants.equalsInteger(member.getIdcardType(),Constants.ZERO) ){
+            if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
+                    .eq(Member::getIdcardNo, DESUtil.encrypt(Constants.EDS_PWD, member.getIdcardNo()))
+                    .eq(Member::getIsdeleted,Constants.ZERO)) >0){
+                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "韬唤璇佸彿銆�"+member.getIdcardNo()+"銆戝凡琚娇鐢紝涓嶈兘閲嶅");
+            }
+        }
+        if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
+                .eq(Member::getPhone,  member.getPhone())
+                .eq(Member::getIsdeleted,Constants.ZERO) ) >0){
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鎵嬫満鍙枫��"+member.getPhone()+"銆戝凡琚娇鐢紝涓嶈兘閲嶅");
+        }
+    }
+
 
     @Override
     public void deleteById(Integer id, LoginUserInfo user) {
@@ -55,6 +127,17 @@
 
     @Override
     public void updateById(YwCustomer ywCustomer) {
+        if(Objects.isNull(ywCustomer)
+                || Objects.nonNull(ywCustomer.getType())
+                || StringUtils.isBlank(ywCustomer.getName())
+                || Objects.isNull(ywCustomer.getMemberId())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+
+        LoginUserInfo loginUserInfo = ywCustomer.getLoginUserInfo();
+        ywCustomer.setEditor(loginUserInfo.getId());
+        ywCustomer.setEditDate(new Date());
         ywCustomerMapper.updateById(ywCustomer);
     }
 
@@ -73,6 +156,17 @@
         return ywCustomerMapper.selectById(id);
     }
 
+    public YwCustomer getDetail(Integer id) {
+        YwCustomer ywCustomer = ywCustomerMapper.selectById(id);
+        if(Objects.isNull(ywCustomer)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        Member member = memberMapper.selectById(ywCustomer.getMemberId());
+        if(Objects.nonNull(member)){
+            ywCustomer.setMember(member);
+        }
+        return ywCustomer;
+    }
     @Override
     public YwCustomer findOne(YwCustomer ywCustomer) {
         QueryWrapper<YwCustomer> wrapper = new QueryWrapper<>(ywCustomer);
@@ -88,106 +182,19 @@
     @Override
     public PageData<YwCustomer> findPage(PageWrap<YwCustomer> pageWrap) {
         IPage<YwCustomer> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<YwCustomer> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<YwCustomer> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getId, pageWrap.getModel().getId());
-        }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(YwCustomer::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(YwCustomer::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(YwCustomer::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(YwCustomer::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getIndustryId() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getIndustryId, pageWrap.getModel().getIndustryId());
-        }
-        if (pageWrap.getModel().getType() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getType, pageWrap.getModel().getType());
-        }
-        if (pageWrap.getModel().getName() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getName, pageWrap.getModel().getName());
-        }
-        if (pageWrap.getModel().getPhone() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getPhone, pageWrap.getModel().getPhone());
-        }
-        if (pageWrap.getModel().getIdcardNo() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getIdcardNo, pageWrap.getModel().getIdcardNo());
-        }
-        if (pageWrap.getModel().getIdcardDecode() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getIdcardDecode, pageWrap.getModel().getIdcardDecode());
-        }
-        if (pageWrap.getModel().getCode() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getCode, pageWrap.getModel().getCode());
-        }
-        if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getStatus, pageWrap.getModel().getStatus());
-        }
-        if (pageWrap.getModel().getHighCheckor() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getHighCheckor, pageWrap.getModel().getHighCheckor());
-        }
-        if (pageWrap.getModel().getLastLoginDate() != null) {
-            queryWrapper.lambda().ge(YwCustomer::getLastLoginDate, Utils.Date.getStart(pageWrap.getModel().getLastLoginDate()));
-            queryWrapper.lambda().le(YwCustomer::getLastLoginDate, Utils.Date.getEnd(pageWrap.getModel().getLastLoginDate()));
-        }
-        if (pageWrap.getModel().getLoginNum() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getLoginNum, pageWrap.getModel().getLoginNum());
-        }
-        if (pageWrap.getModel().getUserId() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getUserId, pageWrap.getModel().getUserId());
-        }
-        if (pageWrap.getModel().getIdcardType() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getIdcardType, pageWrap.getModel().getIdcardType());
-        }
-        if (pageWrap.getModel().getAccountBank() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getAccountBank, pageWrap.getModel().getAccountBank());
-        }
-        if (pageWrap.getModel().getAccountNo() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getAccountNo, pageWrap.getModel().getAccountNo());
-        }
-        if (pageWrap.getModel().getAccountPhone() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getAccountPhone, pageWrap.getModel().getAccountPhone());
-        }
-        if (pageWrap.getModel().getCreditCard() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getCreditCard, pageWrap.getModel().getCreditCard());
-        }
-        if (pageWrap.getModel().getFpType() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getFpType, pageWrap.getModel().getFpType());
-        }
-        if (pageWrap.getModel().getAccountAddr() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getAccountAddr, pageWrap.getModel().getAccountAddr());
-        }
-        if (pageWrap.getModel().getIdentityType() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getIdentityType, pageWrap.getModel().getIdentityType());
-        }
-        if (pageWrap.getModel().getEmail() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getEmail, pageWrap.getModel().getEmail());
-        }
-        if (pageWrap.getModel().getMemberId() != null) {
-            queryWrapper.lambda().eq(YwCustomer::getMemberId, pageWrap.getModel().getMemberId());
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-        }
-        return PageData.from(ywCustomerMapper.selectPage(page, queryWrapper));
+        YwCustomer model = pageWrap.getModel();
+        IPage iPage = ywCustomerMapper.selectJoinPage(page,YwCustomer.class,
+                queryWrapper
+                .selectAll(YwCustomer.class)
+                .selectAs(Member::getName,YwCustomer::getMemberName)
+                .leftJoin(Member.class,Member::getId,YwCustomer::getMemberId)
+                .eq(YwCustomer::getIsdeleted,Constants.ZERO)
+                .like(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getName()),YwCustomer::getName,model.getName())
+                .orderByDesc(YwCustomer::getCreateDate)
+        );
+        return PageData.from(iPage);
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceRecordServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceRecordServiceImpl.java
index 7d0be5b..2cab8a2 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceRecordServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceRecordServiceImpl.java
@@ -1,21 +1,35 @@
 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;
 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.YwDeviceRecordMapper;
+import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.YwCustomer;
+import com.doumee.dao.business.model.YwDevice;
 import com.doumee.dao.business.model.YwDeviceRecord;
+import com.doumee.dao.system.MultifileMapper;
+import com.doumee.dao.system.model.Multifile;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.YwDeviceRecordService;
 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 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.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 杩愮淮璁惧杩愮淮璁板綍琛⊿ervice瀹炵幇
@@ -27,10 +41,38 @@
 
     @Autowired
     private YwDeviceRecordMapper ywDeviceRecordMapper;
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
+    private MultifileMapper multifileMapper;
+
 
     @Override
     public Integer create(YwDeviceRecord ywDeviceRecord) {
+        if(Objects.isNull(ywDeviceRecord)
+        || Objects.isNull(ywDeviceRecord.getDeviceId())
+        || Objects.isNull(ywDeviceRecord.getStatus())
+        || StringUtils.isBlank(ywDeviceRecord.getContent())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = ywDeviceRecord.getLoginUserInfo();
+        ywDeviceRecord.setCreateDate(new Date());
+        ywDeviceRecord.setCreator(loginUserInfo.getId());
+        ywDeviceRecord.setIsdeleted(Constants.ZERO);
         ywDeviceRecordMapper.insert(ywDeviceRecord);
+
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywDeviceRecord.getMultifileList())){
+            List<Multifile> multifiles = ywDeviceRecord.getMultifileList();
+            for (Multifile multifile:multifiles) {
+                multifile.setCreator(loginUserInfo.getId());
+                multifile.setCreateDate(new Date());
+                multifile.setIsdeleted(Constants.ZERO);
+                multifile.setObjType(Constants.MultiFile.FN_DEVICE_RECORD_FILE.getKey());
+                multifile.setObjId(ywDeviceRecord.getId());
+            }
+            multifileMapper.insert(multifiles);
+        }
         return ywDeviceRecord.getId();
     }
 
@@ -73,6 +115,36 @@
         return ywDeviceRecordMapper.selectById(id);
     }
 
+
+    @Override
+    public YwDeviceRecord getDetail(Integer id) {
+        YwDeviceRecord ywDeviceRecord =  ywDeviceRecordMapper.selectJoinOne(YwDeviceRecord.class,
+                new MPJLambdaWrapper<YwDeviceRecord>()
+                        .selectAll(YwDeviceRecord.class)
+                        .selectAs(SystemUser::getRealname,YwDeviceRecord::getRealName)
+                        .selectAs(SystemUser::getMobile,YwDeviceRecord::getMobile)
+                        .selectAs(Company::getName,YwDeviceRecord::getCompanyName)
+                        .selectAs(YwDevice::getName,YwDeviceRecord::getDeviceName)
+                        .leftJoin(SystemUser.class,SystemUser::getId,YwDeviceRecord::getUserId)
+                        .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
+                        .leftJoin(YwDevice.class,YwDevice::getId,YwDeviceRecord::getDeviceId)
+                        .eq(YwDeviceRecord::getId,id)
+                        .last(" limit  1 ")
+        );
+        List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId,id).eq(Multifile::getObjType,Constants.MultiFile.FN_DEVICE_RECORD_FILE));
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifiles)) {
+            String path = systemDictDataBiz.queryByCode(Constants.FTP, Constants.FTP_RESOURCE_PATH).getCode()
+                    + systemDictDataBiz.queryByCode(Constants.FTP, Constants.YW_DEVICE).getCode();
+            for (Multifile multifile : multifiles) {
+                multifile.setFileurlFull(path + multifile.getFileurl());
+            }
+            ywDeviceRecord.setMultifileList(multifiles);
+        }
+        return ywDeviceRecord;
+    }
+
+
     @Override
     public YwDeviceRecord findOne(YwDeviceRecord ywDeviceRecord) {
         QueryWrapper<YwDeviceRecord> wrapper = new QueryWrapper<>(ywDeviceRecord);
@@ -88,62 +160,26 @@
     @Override
     public PageData<YwDeviceRecord> findPage(PageWrap<YwDeviceRecord> pageWrap) {
         IPage<YwDeviceRecord> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<YwDeviceRecord> queryWrapper = new QueryWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(YwDeviceRecord::getId, pageWrap.getModel().getId());
-        }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(YwDeviceRecord::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(YwDeviceRecord::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(YwDeviceRecord::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(YwDeviceRecord::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(YwDeviceRecord::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(YwDeviceRecord::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(YwDeviceRecord::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(YwDeviceRecord::getStatus, pageWrap.getModel().getStatus());
-        }
-        if (pageWrap.getModel().getModelNo() != null) {
-            queryWrapper.lambda().eq(YwDeviceRecord::getModelNo, pageWrap.getModel().getModelNo());
-        }
-        if (pageWrap.getModel().getDeviceId() != null) {
-            queryWrapper.lambda().eq(YwDeviceRecord::getDeviceId, pageWrap.getModel().getDeviceId());
-        }
-        if (pageWrap.getModel().getUserId() != null) {
-            queryWrapper.lambda().eq(YwDeviceRecord::getUserId, pageWrap.getModel().getUserId());
-        }
-        if (pageWrap.getModel().getCompany() != null) {
-            queryWrapper.lambda().ge(YwDeviceRecord::getCompany, Utils.Date.getStart(pageWrap.getModel().getCompany()));
-            queryWrapper.lambda().le(YwDeviceRecord::getCompany, Utils.Date.getEnd(pageWrap.getModel().getCompany()));
-        }
-        if (pageWrap.getModel().getContent() != null) {
-            queryWrapper.lambda().eq(YwDeviceRecord::getContent, pageWrap.getModel().getContent());
-        }
-        if (pageWrap.getModel().getDealDate() != null) {
-            queryWrapper.lambda().ge(YwDeviceRecord::getDealDate, Utils.Date.getStart(pageWrap.getModel().getDealDate()));
-            queryWrapper.lambda().le(YwDeviceRecord::getDealDate, Utils.Date.getEnd(pageWrap.getModel().getDealDate()));
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-        }
-        return PageData.from(ywDeviceRecordMapper.selectPage(page, queryWrapper));
+        YwDeviceRecord model = pageWrap.getModel();
+        IPage iPage = ywDeviceRecordMapper.selectJoinPage(page,YwDeviceRecord.class,
+                new MPJLambdaWrapper<YwDeviceRecord>()
+                        .selectAll(YwDeviceRecord.class)
+                        .selectAs(SystemUser::getRealname,YwDeviceRecord::getRealName)
+                        .selectAs(SystemUser::getMobile,YwDeviceRecord::getMobile)
+                        .selectAs(Company::getName,YwDeviceRecord::getCompanyName)
+                        .selectAs(YwDevice::getName,YwDeviceRecord::getDeviceName)
+                        .selectAs(YwDevice::getCode,YwDeviceRecord::getDeviceCode)
+                        .leftJoin(SystemUser.class,SystemUser::getId,YwDeviceRecord::getUserId)
+                        .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
+                        .leftJoin(YwDevice.class,YwDevice::getId,YwDeviceRecord::getDeviceId)
+                        .eq(YwDeviceRecord::getIsdeleted,Constants.ZERO)
+                        .and(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getDeviceName()),i->i.like(YwDevice::getName,model.getDeviceName()).or().like(YwDevice::getCode,model.getDeviceName()))
+                        .ge(Objects.nonNull(model.getStartDate()),YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()))
+                        .le(Objects.nonNull(model.getEndDate()),YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()))
+                        .eq(YwDeviceRecord::getIsdeleted,Constants.ZERO)
+        );
+        return PageData.from(iPage);
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java
index 0684415..1b4b13a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java
@@ -1,21 +1,35 @@
 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;
 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.YwDeviceMapper;
+import com.doumee.dao.business.model.Category;
 import com.doumee.dao.business.model.YwDevice;
+import com.doumee.dao.system.MultifileMapper;
+import com.doumee.dao.system.model.Multifile;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.YwDeviceService;
 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 com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.extern.java.Log;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 杩愮淮璁惧淇℃伅琛⊿ervice瀹炵幇
@@ -28,15 +42,61 @@
     @Autowired
     private YwDeviceMapper ywDeviceMapper;
 
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
+    private MultifileMapper multifileMapper;
+
+    @Autowired
+    private RedisTemplate<String,Object> redisTemplate;
+
+
     @Override
     public Integer create(YwDevice ywDevice) {
+        if(Objects.isNull(ywDevice)
+            || StringUtils.isBlank(ywDevice.getName())
+            || StringUtils.isBlank(ywDevice.getCode())
+            || Objects.isNull(ywDevice.getStatus())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = ywDevice.getLoginUserInfo();
+        if(ywDeviceMapper.selectCount(new QueryWrapper<YwDevice>().lambda().eq(YwDevice::getIsdeleted,Constants.ZERO).eq(YwDevice::getCode,ywDevice.getCode()))>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁惧缂栧彿閲嶅!");
+        }
+//        if(StringUtils.isBlank(ywDevice.getCode())){
+//            String code = this.getMaxAutoMaticDeviceCode();
+//            while (ywDeviceMapper.selectCount(new QueryWrapper<YwDevice>().lambda().eq(YwDevice::getIsdeleted,Constants.ZERO).eq(YwDevice::getCode,code))>Constants.ZERO){
+//                code = this.getMaxAutoMaticDeviceCode();
+//            }
+//             ywDevice.setCode(code);
+//        }else{
+//
+//        }
+        ywDevice.setCreateDate(new Date());
+        ywDevice.setCreator(loginUserInfo.getId());
+        ywDevice.setIsdeleted(Constants.ZERO);
         ywDeviceMapper.insert(ywDevice);
+
+        if(Objects.nonNull(ywDevice.getMultifile())){
+            ywDevice.getMultifile().setCreator(loginUserInfo.getId());
+            ywDevice.getMultifile().setCreateDate(new Date());
+            ywDevice.getMultifile().setIsdeleted(Constants.ZERO);
+            ywDevice.getMultifile().setObjType(Constants.MultiFile.FN_DEVICE_FILE.getKey());
+            ywDevice.getMultifile().setObjId(ywDevice.getId());
+            multifileMapper.insert(ywDevice.getMultifile());
+        }
+
         return ywDevice.getId();
     }
 
     @Override
     public void deleteById(Integer id, LoginUserInfo user) {
-        ywDeviceMapper.deleteById(id);
+        ywDeviceMapper.update(new UpdateWrapper<YwDevice>().lambda().set(YwDevice::getIsdeleted,Constants.ONE)
+                .set(YwDevice::getEditDate," now() ")
+                .set(YwDevice::getEditor,user.getId())
+                .eq(YwDevice::getId,user.getId())
+        );
     }
 
     @Override
@@ -55,7 +115,36 @@
 
     @Override
     public void updateById(YwDevice ywDevice) {
+        if(Objects.isNull(ywDevice)
+                || StringUtils.isBlank(ywDevice.getName())
+                || StringUtils.isBlank(ywDevice.getCode())
+                || Objects.isNull(ywDevice.getStatus())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = ywDevice.getLoginUserInfo();
+        if(ywDeviceMapper.selectCount(new QueryWrapper<YwDevice>().lambda().eq(YwDevice::getIsdeleted,Constants.ZERO)
+                .eq(YwDevice::getCode,ywDevice.getCode())
+                .ne(YwDevice::getId,ywDevice.getId()))>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁惧缂栧彿閲嶅!");
+        }
+        ywDevice.setEditDate(new Date());
+        ywDevice.setEditor(loginUserInfo.getId());
         ywDeviceMapper.updateById(ywDevice);
+        multifileMapper.delete(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId,ywDevice.getId())
+                .eq(Multifile::getObjType,Constants.MultiFile.FN_DEVICE_FILE.getKey())
+        );
+        if(Objects.nonNull(ywDevice.getMultifile())){
+            ywDevice.getMultifile().setCreator(loginUserInfo.getId());
+            ywDevice.getMultifile().setCreateDate(new Date());
+            ywDevice.getMultifile().setIsdeleted(Constants.ZERO);
+            ywDevice.getMultifile().setObjType(Constants.MultiFile.FN_DEVICE_FILE.getKey());
+            ywDevice.getMultifile().setObjId(ywDevice.getId());
+            multifileMapper.insert(ywDevice.getMultifile());
+        }
+
+
     }
 
     @Override
@@ -74,6 +163,20 @@
     }
 
     @Override
+    public YwDevice getDetail(Integer id) {
+        YwDevice ywDevice = ywDeviceMapper.selectById(id);
+        Multifile multifile = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda().eq(Multifile::getObjId,id).eq(Multifile::getObjType,Constants.MultiFile.FN_DEVICE_FILE).last(" limit 1"));
+        if(Objects.nonNull(multifile)){
+            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_DEVICE).getCode();
+            multifile.setFileurlFull(path + multifile.getFileurl());
+            ywDevice.setMultifile(multifile);
+        }
+        return ywDevice;
+    }
+
+
+    @Override
     public YwDevice findOne(YwDevice ywDevice) {
         QueryWrapper<YwDevice> wrapper = new QueryWrapper<>(ywDevice);
         return ywDeviceMapper.selectOne(wrapper);
@@ -88,70 +191,21 @@
     @Override
     public PageData<YwDevice> findPage(PageWrap<YwDevice> pageWrap) {
         IPage<YwDevice> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<YwDevice> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<YwDevice> queryWrapper = new MPJLambdaWrapper<YwDevice>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(YwDevice::getId, pageWrap.getModel().getId());
-        }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(YwDevice::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(YwDevice::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(YwDevice::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(YwDevice::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(YwDevice::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(YwDevice::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(YwDevice::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getName() != null) {
-            queryWrapper.lambda().eq(YwDevice::getName, pageWrap.getModel().getName());
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(YwDevice::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(YwDevice::getStatus, pageWrap.getModel().getStatus());
-        }
-        if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(YwDevice::getSortnum, pageWrap.getModel().getSortnum());
-        }
-        if (pageWrap.getModel().getModelNo() != null) {
-            queryWrapper.lambda().eq(YwDevice::getModelNo, pageWrap.getModel().getModelNo());
-        }
-        if (pageWrap.getModel().getCateId() != null) {
-            queryWrapper.lambda().eq(YwDevice::getCateId, pageWrap.getModel().getCateId());
-        }
-        if (pageWrap.getModel().getUserId() != null) {
-            queryWrapper.lambda().eq(YwDevice::getUserId, pageWrap.getModel().getUserId());
-        }
-        if (pageWrap.getModel().getCompany() != null) {
-            queryWrapper.lambda().ge(YwDevice::getCompany, Utils.Date.getStart(pageWrap.getModel().getCompany()));
-            queryWrapper.lambda().le(YwDevice::getCompany, Utils.Date.getEnd(pageWrap.getModel().getCompany()));
-        }
-        if (pageWrap.getModel().getContent() != null) {
-            queryWrapper.lambda().eq(YwDevice::getContent, pageWrap.getModel().getContent());
-        }
-        if (pageWrap.getModel().getCode() != null) {
-            queryWrapper.lambda().eq(YwDevice::getCode, pageWrap.getModel().getCode());
-        }
-        if (pageWrap.getModel().getAddr() != null) {
-            queryWrapper.lambda().eq(YwDevice::getAddr, pageWrap.getModel().getAddr());
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-        }
-        return PageData.from(ywDeviceMapper.selectPage(page, queryWrapper));
+        YwDevice model = pageWrap.getModel();
+        queryWrapper.selectAll(YwDevice.class)
+                .selectAs(Category::getName,YwDevice::getCategoryName)
+                .selectAs(SystemUser::getRealname,YwDevice::getRealName)
+                .leftJoin(Category.class,Category::getId,YwDevice::getCateId)
+                .leftJoin(SystemUser.class,SystemUser::getId,YwDevice::getUserId)
+                .and(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getName()),i->i.like(YwDevice::getName,model.getName()).or().like(YwDevice::getCode,model.getName()))
+                .eq(Objects.nonNull(model.getStatus()),YwDevice::getStatus,model.getStatus())
+                .eq(YwDevice::getIsdeleted,Constants.ZERO)
+                .orderByDesc(YwDevice::getCreateDate)
+        ;
+        IPage iPage = ywDeviceMapper.selectJoinPage(page,YwDevice.class,queryWrapper);
+        return PageData.from(iPage);
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolLineServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolLineServiceImpl.java
index cc81d81..f5b6603 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolLineServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolLineServiceImpl.java
@@ -1,21 +1,30 @@
 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.YwLinePointMapper;
 import com.doumee.dao.business.YwPatrolLineMapper;
-import com.doumee.dao.business.model.YwPatrolLine;
+import com.doumee.dao.business.model.*;
 import com.doumee.service.business.YwPatrolLineService;
 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 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.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 杩愮淮宸℃璺嚎淇℃伅琛⊿ervice瀹炵幇
@@ -28,9 +37,40 @@
     @Autowired
     private YwPatrolLineMapper ywPatrolLineMapper;
 
+    @Autowired
+    private YwLinePointMapper ywLinePointMapper;
+
     @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public Integer create(YwPatrolLine ywPatrolLine) {
+        if(Objects.isNull(ywPatrolLine)
+        || StringUtils.isBlank(ywPatrolLine.getName())
+        || com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(ywPatrolLine.getLinePointList())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+
+        LoginUserInfo loginUserInfo = ywPatrolLine.getLoginUserInfo();
+        ywPatrolLine.setCreateDate(new Date());
+        ywPatrolLine.setCreator(loginUserInfo.getId());
+        ywPatrolLine.setIsdeleted(Constants.ZERO);
+        ywPatrolLine.setStatus(Constants.ZERO);
         ywPatrolLineMapper.insert(ywPatrolLine);
+        //寰幆澶勭悊 瀛愰泦鏁版嵁
+
+        List<YwLinePoint> ywLinePointList = ywPatrolLine.getLinePointList();
+        for (YwLinePoint ywLinePoint:ywLinePointList) {
+            if(Objects.isNull(ywLinePoint)
+            || Objects.isNull(ywLinePoint.getPointId())
+            || Objects.isNull(ywLinePoint.getNeedScancode())
+            ){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"宸℃鐐归厤缃敊璇�");
+            }
+            ywLinePoint.setCreateDate(new Date());
+            ywLinePoint.setCreator(loginUserInfo.getId());
+            ywLinePoint.setIsdeleted(Constants.ZERO);
+            ywLinePoint.setLineId(ywLinePoint.getId());
+        }
+        ywLinePointMapper.insert(ywLinePointList);
         return ywPatrolLine.getId();
     }
 
@@ -55,7 +95,34 @@
 
     @Override
     public void updateById(YwPatrolLine ywPatrolLine) {
+        if(Objects.isNull(ywPatrolLine)
+                || StringUtils.isBlank(ywPatrolLine.getName())
+                || com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(ywPatrolLine.getLinePointList())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+
+        LoginUserInfo loginUserInfo = ywPatrolLine.getLoginUserInfo();
+        ywPatrolLine.setEditDate(new Date());
+        ywPatrolLine.setEditor(loginUserInfo.getId());
         ywPatrolLineMapper.updateById(ywPatrolLine);
+        //鍒犻櫎瀛愭暟鎹�
+        ywLinePointMapper.delete(new QueryWrapper<YwLinePoint>().lambda()
+                .eq(YwLinePoint::getLineId,ywPatrolLine.getId()));
+        //寰幆澶勭悊 瀛愰泦鏁版嵁
+        List<YwLinePoint> ywLinePointList = ywPatrolLine.getLinePointList();
+        for (YwLinePoint ywLinePoint:ywLinePointList) {
+            if(Objects.isNull(ywLinePoint)
+                    || Objects.isNull(ywLinePoint.getPointId())
+                    || Objects.isNull(ywLinePoint.getNeedScancode())
+            ){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"宸℃鐐归厤缃敊璇�");
+            }
+            ywLinePoint.setLineId(ywLinePoint.getId());
+            ywLinePoint.setCreateDate(new Date());
+            ywLinePoint.setCreator(loginUserInfo.getId());
+            ywLinePoint.setIsdeleted(Constants.ZERO);
+        }
+        ywLinePointMapper.insert(ywLinePointList);
     }
 
     @Override
@@ -73,6 +140,25 @@
         return ywPatrolLineMapper.selectById(id);
     }
 
+
+    @Override
+    public YwPatrolLine getDetail(Integer id) {
+        YwPatrolLine ywPatrolLine =  ywPatrolLineMapper.selectById(id);
+
+        List<YwLinePoint> ywLinePointList = ywLinePointMapper.selectJoinList(YwLinePoint.class,new MPJLambdaWrapper<YwLinePoint>()
+                .selectAll(YwLinePoint.class)
+                .selectAs(YwPatrolPoint::getName,YwLinePoint::getPointName)
+                .leftJoin(YwPatrolLine.class,YwPatrolLine::getId,YwLinePoint::getPointId)
+                .eq(YwLinePoint::getLineId,id)
+                .orderByAsc(YwLinePoint::getSortnum)
+        );
+
+        ywPatrolLine.setLinePointList(ywLinePointList);
+
+        return ywPatrolLine;
+    }
+
+
     @Override
     public YwPatrolLine findOne(YwPatrolLine ywPatrolLine) {
         QueryWrapper<YwPatrolLine> wrapper = new QueryWrapper<>(ywPatrolLine);
@@ -88,51 +174,17 @@
     @Override
     public PageData<YwPatrolLine> findPage(PageWrap<YwPatrolLine> pageWrap) {
         IPage<YwPatrolLine> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<YwPatrolLine> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<YwPatrolLine> queryWrapper = new MPJLambdaWrapper<YwPatrolLine>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(YwPatrolLine::getId, pageWrap.getModel().getId());
-        }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(YwPatrolLine::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(YwPatrolLine::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(YwPatrolLine::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(YwPatrolLine::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(YwPatrolLine::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(YwPatrolLine::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(YwPatrolLine::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getName() != null) {
-            queryWrapper.lambda().eq(YwPatrolLine::getName, pageWrap.getModel().getName());
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(YwPatrolLine::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(YwPatrolLine::getStatus, pageWrap.getModel().getStatus());
-        }
-        if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(YwPatrolLine::getSortnum, pageWrap.getModel().getSortnum());
-        }
-        if (pageWrap.getModel().getImgurl() != null) {
-            queryWrapper.lambda().eq(YwPatrolLine::getImgurl, pageWrap.getModel().getImgurl());
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-        }
-        return PageData.from(ywPatrolLineMapper.selectPage(page, queryWrapper));
+        YwPatrolLine model = pageWrap.getModel();
+        queryWrapper.selectAll(YwPatrolLine.class)
+                .select(" ( select count(1) from  yw_line_point y where y.LINE_ID = t.id ) as lineAmount ")
+                .like(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getName()),YwPatrolLine::getName,model.getName())
+                .eq(YwPatrolLine::getIsdeleted,Constants.ZERO)
+                .orderByDesc(YwPatrolLine::getCreateDate)
+        ;
+        IPage iPage = ywPatrolLineMapper.selectJoinPage(page,YwPatrolLine.class,queryWrapper);
+        return PageData.from(iPage);
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolPointServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolPointServiceImpl.java
index 0af2a22..948ccf5 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolPointServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolPointServiceImpl.java
@@ -1,21 +1,34 @@
 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;
 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.YwPatrolPointMapper;
+import com.doumee.dao.business.model.Category;
+import com.doumee.dao.business.model.YwDevice;
 import com.doumee.dao.business.model.YwPatrolPoint;
+import com.doumee.dao.system.MultifileMapper;
+import com.doumee.dao.system.model.Multifile;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.YwPatrolPointService;
 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 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.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 杩愮淮宸℃鐐逛俊鎭〃Service瀹炵幇
@@ -27,16 +40,50 @@
 
     @Autowired
     private YwPatrolPointMapper ywPatrolPointMapper;
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
+    private MultifileMapper multifileMapper;
 
     @Override
     public Integer create(YwPatrolPoint ywPatrolPoint) {
+        if(Objects.isNull(ywPatrolPoint)
+                || Objects.isNull(ywPatrolPoint.getCode())
+                || Objects.isNull(ywPatrolPoint.getName())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(ywPatrolPointMapper.selectCount(new QueryWrapper<YwPatrolPoint>().lambda().eq(YwPatrolPoint::getIsdeleted,Constants.ZERO)
+                .eq(YwPatrolPoint::getCode,ywPatrolPoint.getCode()))>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸℃鐐圭紪鐮侀噸澶�!");
+        }
+        LoginUserInfo loginUserInfo = ywPatrolPoint.getLoginUserInfo();
+        ywPatrolPoint.setCreateDate(new Date());
+        ywPatrolPoint.setCreator(loginUserInfo.getId());
+        ywPatrolPoint.setIsdeleted(Constants.ZERO);
+        ywPatrolPoint.setStatus(Constants.ZERO);
         ywPatrolPointMapper.insert(ywPatrolPoint);
+
+
+        if(Objects.nonNull(ywPatrolPoint.getMultifile())){
+            ywPatrolPoint.getMultifile().setCreator(loginUserInfo.getId());
+            ywPatrolPoint.getMultifile().setCreateDate(new Date());
+            ywPatrolPoint.getMultifile().setIsdeleted(Constants.ZERO);
+            ywPatrolPoint.getMultifile().setObjType(Constants.MultiFile.FN_PATROL_POINT_FILE.getKey());
+            ywPatrolPoint.getMultifile().setObjId(ywPatrolPoint.getId());
+            multifileMapper.insert(ywPatrolPoint.getMultifile());
+        }
+
         return ywPatrolPoint.getId();
     }
 
     @Override
     public void deleteById(Integer id, LoginUserInfo user) {
-        ywPatrolPointMapper.deleteById(id);
+        ywPatrolPointMapper.update(new UpdateWrapper<YwPatrolPoint>().lambda().set(YwPatrolPoint::getIsdeleted,Constants.ONE)
+                .set(YwPatrolPoint::getEditDate," now() ")
+                .set(YwPatrolPoint::getEditor,user.getId())
+                .eq(YwPatrolPoint::getId,user.getId())
+        );
     }
 
     @Override
@@ -55,7 +102,36 @@
 
     @Override
     public void updateById(YwPatrolPoint ywPatrolPoint) {
+        if(Objects.isNull(ywPatrolPoint)
+                || Objects.isNull(ywPatrolPoint.getId())
+                || Objects.isNull(ywPatrolPoint.getCode())
+                || Objects.isNull(ywPatrolPoint.getName())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(ywPatrolPointMapper.selectCount(new QueryWrapper<YwPatrolPoint>().lambda().eq(YwPatrolPoint::getIsdeleted,Constants.ZERO)
+                .eq(YwPatrolPoint::getCode,ywPatrolPoint.getCode()).ne(YwPatrolPoint::getId,ywPatrolPoint.getId()))>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸℃鐐圭紪鐮侀噸澶�!");
+        }
+        LoginUserInfo loginUserInfo = ywPatrolPoint.getLoginUserInfo();
+        ywPatrolPoint.setEditDate(new Date());
+        ywPatrolPoint.setEditor(loginUserInfo.getId());
         ywPatrolPointMapper.updateById(ywPatrolPoint);
+
+        multifileMapper.delete(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId,ywPatrolPoint.getId())
+                .eq(Multifile::getObjType,Constants.MultiFile.FN_PATROL_POINT_FILE.getKey())
+        );
+
+        if(Objects.nonNull(ywPatrolPoint.getMultifile())){
+            ywPatrolPoint.getMultifile().setCreator(loginUserInfo.getId());
+            ywPatrolPoint.getMultifile().setCreateDate(new Date());
+            ywPatrolPoint.getMultifile().setIsdeleted(Constants.ZERO);
+            ywPatrolPoint.getMultifile().setObjType(Constants.MultiFile.FN_PATROL_POINT_FILE.getKey());
+            ywPatrolPoint.getMultifile().setObjId(ywPatrolPoint.getId());
+            multifileMapper.insert(ywPatrolPoint.getMultifile());
+        }
+
     }
 
     @Override
@@ -74,6 +150,22 @@
     }
 
     @Override
+    public YwPatrolPoint getDetail(Integer id) {
+        YwPatrolPoint ywPatrolPoint = ywPatrolPointMapper.selectById(id);
+        Multifile multifile = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda().eq(Multifile::getObjId,id)
+                .eq(Multifile::getObjType,Constants.MultiFile.FN_PATROL_POINT_FILE).last(" limit 1"));
+        if(Objects.nonNull(multifile)){
+            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_PATROL).getCode();
+            multifile.setFileurlFull(path + multifile.getFileurl());
+            ywPatrolPoint.setMultifile(multifile);
+        }
+        return ywPatrolPoint;
+    }
+
+
+
+    @Override
     public YwPatrolPoint findOne(YwPatrolPoint ywPatrolPoint) {
         QueryWrapper<YwPatrolPoint> wrapper = new QueryWrapper<>(ywPatrolPoint);
         return ywPatrolPointMapper.selectOne(wrapper);
@@ -81,64 +173,33 @@
 
     @Override
     public List<YwPatrolPoint> findList(YwPatrolPoint ywPatrolPoint) {
-        QueryWrapper<YwPatrolPoint> wrapper = new QueryWrapper<>(ywPatrolPoint);
+        QueryWrapper<YwPatrolPoint> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(YwPatrolPoint::getIsdeleted,Constants.ZERO);
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywPatrolPoint.getIdLists())){
+            wrapper.lambda().notIn(YwPatrolPoint::getId,ywPatrolPoint.getIdLists());
+        }
         return ywPatrolPointMapper.selectList(wrapper);
     }
   
     @Override
     public PageData<YwPatrolPoint> findPage(PageWrap<YwPatrolPoint> pageWrap) {
         IPage<YwPatrolPoint> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<YwPatrolPoint> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<YwPatrolPoint> queryWrapper = new MPJLambdaWrapper<YwPatrolPoint>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(YwPatrolPoint::getId, pageWrap.getModel().getId());
-        }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(YwPatrolPoint::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(YwPatrolPoint::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(YwPatrolPoint::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(YwPatrolPoint::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(YwPatrolPoint::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(YwPatrolPoint::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(YwPatrolPoint::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getName() != null) {
-            queryWrapper.lambda().eq(YwPatrolPoint::getName, pageWrap.getModel().getName());
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(YwPatrolPoint::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(YwPatrolPoint::getStatus, pageWrap.getModel().getStatus());
-        }
-        if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(YwPatrolPoint::getSortnum, pageWrap.getModel().getSortnum());
-        }
-        if (pageWrap.getModel().getImgurl() != null) {
-            queryWrapper.lambda().eq(YwPatrolPoint::getImgurl, pageWrap.getModel().getImgurl());
-        }
-        if (pageWrap.getModel().getAreaId() != null) {
-            queryWrapper.lambda().eq(YwPatrolPoint::getAreaId, pageWrap.getModel().getAreaId());
-        }
-        if (pageWrap.getModel().getAddr() != null) {
-            queryWrapper.lambda().eq(YwPatrolPoint::getAddr, pageWrap.getModel().getAddr());
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-        }
-        return PageData.from(ywPatrolPointMapper.selectPage(page, queryWrapper));
+        YwPatrolPoint model = pageWrap.getModel();
+        queryWrapper.selectAll(YwPatrolPoint.class)
+                .selectAs(Category::getName,YwPatrolPoint::getAreaName)
+                .selectAs(YwDevice::getName,YwPatrolPoint::getDeviceName)
+                .leftJoin(Category.class,Category::getId,YwPatrolPoint::getAreaId)
+                .leftJoin(YwDevice.class,YwDevice::getId,YwPatrolPoint::getDeviceId)
+                .and(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getName()),
+                        i->i.like(YwPatrolPoint::getName,model.getName()).or().like(YwPatrolPoint::getCode,model.getName()))
+                .eq(Objects.nonNull(model.getAreaId()),YwPatrolPoint::getAreaId,model.getAreaId())
+                .eq(YwPatrolPoint::getIsdeleted,Constants.ZERO)
+                .orderByDesc(YwPatrolPoint::getCreateDate)
+        ;
+        IPage iPage = ywPatrolPointMapper.selectJoinPage(page,YwPatrolPoint.class,queryWrapper);
+        return PageData.from(iPage);
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java
index 5b4cd7b..d85a2fe 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java
@@ -1,21 +1,35 @@
 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.DateUtil;
 import com.doumee.core.utils.Utils;
+import com.doumee.core.utils.Week;
+import com.doumee.core.utils.redis.RedisUtil;
+import com.doumee.dao.business.YwLinePointMapper;
 import com.doumee.dao.business.YwPatrolSchemeMapper;
-import com.doumee.dao.business.model.YwPatrolScheme;
+import com.doumee.dao.business.YwPatrolTaskMapper;
+import com.doumee.dao.business.YwPatrolTaskRecordMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.YwPatrolSchemeService;
 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 com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 杩愮淮宸℃璁″垝淇℃伅琛⊿ervice瀹炵幇
@@ -27,12 +41,146 @@
 
     @Autowired
     private YwPatrolSchemeMapper ywPatrolSchemeMapper;
+    @Autowired
+    private YwPatrolTaskMapper ywPatrolTaskMapper;
+    @Autowired
+    private YwLinePointMapper ywLinePointMapper;
+    @Autowired
+    private YwPatrolTaskRecordMapper ywPatrolTaskRecordMapper;
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
 
     @Override
     public Integer create(YwPatrolScheme ywPatrolScheme) {
+        if(Objects.isNull(ywPatrolScheme)
+        || StringUtils.isBlank(ywPatrolScheme.getTitle())
+                ||Objects.isNull(ywPatrolScheme.getLineId())
+                ||StringUtils.isBlank(ywPatrolScheme.getUserIds())
+                ||Objects.isNull(ywPatrolScheme.getStartDate())
+                ||Objects.isNull(ywPatrolScheme.getEndDate())
+                ||Objects.isNull(ywPatrolScheme.getCircleType())
+                ||StringUtils.isBlank(ywPatrolScheme.getStartTime())
+                ||StringUtils.isBlank(ywPatrolScheme.getEndTime())
+                || (!Constants.equalsInteger(ywPatrolScheme.getCircleType(),Constants.ZERO) &&StringUtils.isBlank(ywPatrolScheme.getCircleDays()))
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = ywPatrolScheme.getLoginUserInfo();
+        ywPatrolScheme.setCreateDate(new Date());
+        ywPatrolScheme.setCreator(loginUserInfo.getId());
+        ywPatrolScheme.setIsdeleted(Constants.ZERO);
+        ywPatrolScheme.setStatus(Constants.ZERO);
+        ywPatrolScheme.setCode(this.getNextCode());
         ywPatrolSchemeMapper.insert(ywPatrolScheme);
+
+        this.createThreeDaysData(ywPatrolScheme);
         return ywPatrolScheme.getId();
     }
+
+    public synchronized String  getNextCode(){
+        String prefix =  "P";
+        Integer countNum  = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.PATROL_SCHEME_CODE_KEY,Integer.class);
+        countNum = Constants.formatIntegerNum(countNum)+1;
+        //鏇存柊缂撳瓨
+        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.PATROL_SCHEME_CODE_KEY,countNum);
+        String nextIndex =Integer.toString( countNum );
+        return prefix + StringUtils.leftPad(nextIndex,4,"0");
+    }
+
+
+
+    public void createThreeDaysData(YwPatrolScheme ywPatrolScheme){
+        //寰幆鐢熸垚涓夊ぉ鍐呯殑鏁版嵁
+        for (int i = 0; i < 3; i++) {
+            Date schemeDate = DateUtil.getXDayAfterDate(new Date(),i);
+            this.createTask(schemeDate,ywPatrolScheme);
+        }
+    }
+
+    /**
+     * 鏍规嵁鏃ユ湡鐢熸垚浠诲姟
+     * @param schemeDate
+     * @param ywPatrolScheme
+     */
+    public void createTask(Date schemeDate,YwPatrolScheme ywPatrolScheme){
+        if(ywPatrolScheme.getStartDate().getTime() > schemeDate.getTime()
+            || ywPatrolScheme.getEndDate().getTime() < schemeDate.getTime() ){
+            return;
+        }
+        if(Constants.equalsInteger(ywPatrolScheme.getCircleType(),Constants.ONE)){
+            //姣忓懆鏍规嵁鏃ユ湡鐢熸垚 鏍规嵁鏃ユ湡鑾峰彇鏄懆鍑�
+            Week week = DateUtil.getWeek(schemeDate);
+            if(Objects.isNull(week)){
+                return;
+            }
+            List<String> weeks = Arrays.asList(ywPatrolScheme.getCircleDays().split(","));
+            String weekStr = weeks.stream().filter(i->Constants.equalsInteger(Integer.valueOf(i),week.getNumber())).findFirst().get();
+            if(StringUtils.isBlank(weekStr)){
+                return;
+            }
+        }else{
+            //姣忔湀鏍规嵁鏃ユ湡鐢熸垚 鏍规嵁鏃ユ湡鑾峰彇鏄摢澶�
+            List<String> days = Arrays.asList(ywPatrolScheme.getCircleDays().split(","));
+            String dayStr = DateUtil.getFomartDate(schemeDate,"dd");
+            if(Objects.isNull(days.stream().filter(i->StringUtils.equals(i,dayStr)).findFirst().get())){
+                return;
+            };
+        }
+        String schemeDateStr = DateUtil.getDate(schemeDate,"yyyy-MM-dd");
+        //鏌ヨ褰撳ぉ鏄惁鐢熸垚杩囨暟鎹�
+        if(ywPatrolTaskMapper.selectCount(new QueryWrapper<YwPatrolTask>().lambda().eq(YwPatrolTask::getSchemeId,ywPatrolScheme.getId()).like(YwPatrolTask::getStartDate,schemeDateStr))>Constants.ZERO){
+            return;
+        };
+        YwPatrolTask ywPatrolTaskForCodeSn = ywPatrolTaskMapper.selectOne(new MPJLambdaWrapper<YwPatrolTask>()
+                .select(" ifnull( max(replace(code,'"+ywPatrolScheme.getCode()+"-','')),0) AS codeSn ")
+                .eq(YwPatrolTask::getSchemeId,ywPatrolScheme.getId())
+                .orderByDesc( YwPatrolTask::getId)
+                .last(" limit 1 ")
+        );
+        Integer codeSn = ywPatrolTaskForCodeSn.getCodeSn();
+
+        List<YwLinePoint> ywLinePointList = ywLinePointMapper.selectList(new QueryWrapper<YwLinePoint>().lambda()
+                .eq(YwLinePoint::getLineId,ywPatrolScheme.getLineId())
+                .eq(YwLinePoint::getIsdeleted,Constants.ZERO)
+                .orderByAsc(YwLinePoint::getSortnum));
+        if(CollectionUtils.isEmpty(ywLinePointList)){
+            return;
+        }
+        codeSn = codeSn + 1;
+        String nextCode = StringUtils.leftPad(codeSn.toString(),3,"0");
+        YwPatrolTask ywPatrolTask = new YwPatrolTask();
+        ywPatrolTask.setCreateDate(new Date());
+        ywPatrolTask.setCreator(ywPatrolScheme.getCreator());
+        ywPatrolTask.setIsdeleted(Constants.ZERO);
+        ywPatrolTask.setStatus(Constants.patrolTaskStatus.waitStart);
+        ywPatrolTask.setSchemeId(ywPatrolScheme.getId()); 
+        ywPatrolTask.setCircleType(ywPatrolScheme.getCircleType());
+        ywPatrolTask.setStartDate(DateUtil.getDateFromString(schemeDateStr +" "+ ywPatrolScheme.getStartTime() +":00"));
+        ywPatrolTask.setEndDate(DateUtil.getDateFromString(schemeDateStr +" "+ ywPatrolScheme.getEndTime() +":00"));
+        ywPatrolTask.setDealUserId(ywPatrolScheme.getDealUserId()); 
+        ywPatrolTask.setCode(ywPatrolScheme.getCode() + "-" + nextCode);
+        ywPatrolTaskMapper.insert(ywPatrolTask);
+        
+        List<YwPatrolTaskRecord> ywPatrolTaskRecordList = new ArrayList<>();
+        for (int i = 0; i < ywLinePointList.size(); i++) {
+            YwLinePoint ywLinePoint = ywLinePointList.get(i);
+            //鐢熸垚浠诲姟鏁版嵁
+            YwPatrolTaskRecord ywPatrolTaskRecord = new YwPatrolTaskRecord();
+            ywPatrolTaskRecord.setCreateDate(new Date());
+            ywPatrolTaskRecord.setCreator(ywPatrolScheme.getCreator());
+            ywPatrolTaskRecord.setIsdeleted(Constants.ZERO);
+            ywPatrolTaskRecord.setStatus(Constants.ZERO);
+            ywPatrolTaskRecord.setSchemeId(ywPatrolScheme.getId());
+            ywPatrolTaskRecord.setPointId(ywLinePoint.getPointId());
+            ywPatrolTaskRecord.setTaskId(ywPatrolTask.getId());
+            ywPatrolTaskRecord.setDealUserId(ywPatrolScheme.getDealUserId());
+            ywPatrolTaskRecord.setSortnum(i+1);
+            ywPatrolTaskRecordList.add(ywPatrolTaskRecord);
+        }
+        ywPatrolTaskRecordMapper.insert(ywPatrolTaskRecordList);
+    }
+
+
 
     @Override
     public void deleteById(Integer id, LoginUserInfo user) {
@@ -55,7 +203,42 @@
 
     @Override
     public void updateById(YwPatrolScheme ywPatrolScheme) {
+        if(Objects.isNull(ywPatrolScheme)
+                || Objects.isNull(ywPatrolScheme.getId())
+                || StringUtils.isBlank(ywPatrolScheme.getTitle())
+                ||Objects.isNull(ywPatrolScheme.getLineId())
+                ||StringUtils.isBlank(ywPatrolScheme.getUserIds())
+                ||Objects.isNull(ywPatrolScheme.getStartDate())
+                ||Objects.isNull(ywPatrolScheme.getEndDate())
+                ||Objects.isNull(ywPatrolScheme.getCircleType())
+                ||StringUtils.isBlank(ywPatrolScheme.getStartTime())
+                ||StringUtils.isBlank(ywPatrolScheme.getEndTime())
+                || (!Constants.equalsInteger(ywPatrolScheme.getCircleType(),Constants.ZERO) &&StringUtils.isBlank(ywPatrolScheme.getCircleDays()))
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = ywPatrolScheme.getLoginUserInfo();
+        ywPatrolScheme.setEditDate(new Date());
+        ywPatrolScheme.setEditor(loginUserInfo.getId());
         ywPatrolSchemeMapper.updateById(ywPatrolScheme);
+    }
+
+    @Override
+    public void updateStatus(YwPatrolScheme ywPatrolScheme) {
+        if(Objects.isNull(ywPatrolScheme)
+                || Objects.isNull(ywPatrolScheme.getId())
+                || Objects.isNull(ywPatrolScheme.getStatus())
+                || !(Constants.equalsInteger(ywPatrolScheme.getStatus(),Constants.ZERO) || Constants.equalsInteger(ywPatrolScheme.getStatus(),Constants.ONE ))
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = ywPatrolScheme.getLoginUserInfo();
+        ywPatrolScheme.setEditDate(new Date());
+        ywPatrolScheme.setEditor(loginUserInfo.getId());
+        ywPatrolSchemeMapper.updateById(ywPatrolScheme);
+        if(Constants.equalsInteger(ywPatrolScheme.getStatus(),Constants.ZERO)){
+            this.createThreeDaysData(ywPatrolScheme);
+        }
     }
 
     @Override
@@ -88,92 +271,77 @@
     @Override
     public PageData<YwPatrolScheme> findPage(PageWrap<YwPatrolScheme> pageWrap) {
         IPage<YwPatrolScheme> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<YwPatrolScheme> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<YwPatrolScheme> queryWrapper = new MPJLambdaWrapper<YwPatrolScheme>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getId, pageWrap.getModel().getId());
+        YwPatrolScheme model = pageWrap.getModel();
+        queryWrapper.selectAll(YwPatrolScheme.class)
+                .select(" t2.realName as createUserName ")
+                .select(" t1.realName as userName ")
+                .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolScheme::getUserIds)
+                .leftJoin(" system_user t2 on t.creator =  t2.id  ")
+                .eq(YwPatrolScheme::getIsdeleted,Constants.ZERO)
+                .like(StringUtils.isNotBlank(model.getTitle()),YwPatrolScheme::getTitle,model.getTitle())
+                //鏌ヨ鏈夋椂娈典氦闆嗙殑鏁版嵁
+                .apply(Objects.nonNull(model.getStartDate())&&Objects.nonNull(model.getEndDate()),
+                        " t.START_DATE <= '"+Utils.Date.getStart(pageWrap.getModel().getEndDate())+"' and t.END_DATE >= '"+Utils.Date.getStart(pageWrap.getModel().getStartDate())+"' "
+                )
+//                .ge(Objects.nonNull(model.getStartDate()),YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()))
+//                .le(Objects.nonNull(model.getEndDate()),YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()))
+                .orderByDesc(YwPatrolScheme::getCreateDate)
+        ;
+        IPage<YwPatrolScheme> iPage = ywPatrolSchemeMapper.selectJoinPage(page,YwPatrolScheme.class,queryWrapper);
+        for (YwPatrolScheme ywPatrolScheme:iPage.getRecords()) {
+            this.getSchemeStatus(ywPatrolScheme);
         }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(YwPatrolScheme::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(YwPatrolScheme::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(YwPatrolScheme::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(YwPatrolScheme::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getTitle() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getTitle, pageWrap.getModel().getTitle());
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getStatus, pageWrap.getModel().getStatus());
-        }
-        if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getSortnum, pageWrap.getModel().getSortnum());
-        }
-        if (pageWrap.getModel().getLineId() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getLineId, pageWrap.getModel().getLineId());
-        }
-        if (pageWrap.getModel().getUserIds() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getUserIds, pageWrap.getModel().getUserIds());
-        }
-        if (pageWrap.getModel().getDealUserId() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getDealUserId, pageWrap.getModel().getDealUserId());
-        }
-        if (pageWrap.getModel().getDealDate() != null) {
-            queryWrapper.lambda().ge(YwPatrolScheme::getDealDate, Utils.Date.getStart(pageWrap.getModel().getDealDate()));
-            queryWrapper.lambda().le(YwPatrolScheme::getDealDate, Utils.Date.getEnd(pageWrap.getModel().getDealDate()));
-        }
-        if (pageWrap.getModel().getDealInfo() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getDealInfo, pageWrap.getModel().getDealInfo());
-        }
-        if (pageWrap.getModel().getCircleType() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getCircleType, pageWrap.getModel().getCircleType());
-        }
-        if (pageWrap.getModel().getCircleDays() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getCircleDays, pageWrap.getModel().getCircleDays());
-        }
-        if (pageWrap.getModel().getStartDate() != null) {
-            queryWrapper.lambda().ge(YwPatrolScheme::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()));
-            queryWrapper.lambda().le(YwPatrolScheme::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getStartDate()));
-        }
-        if (pageWrap.getModel().getEndDate() != null) {
-            queryWrapper.lambda().ge(YwPatrolScheme::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()));
-            queryWrapper.lambda().le(YwPatrolScheme::getEndDate, Utils.Date.getEnd(pageWrap.getModel().getEndDate()));
-        }
-        if (pageWrap.getModel().getStartTime() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getStartTime, pageWrap.getModel().getStartTime());
-        }
-        if (pageWrap.getModel().getEndTime() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getEndTime, pageWrap.getModel().getEndTime());
-        }
-        if (pageWrap.getModel().getProcessStatus() != null) {
-            queryWrapper.lambda().eq(YwPatrolScheme::getProcessStatus, pageWrap.getModel().getProcessStatus());
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-        }
-        return PageData.from(ywPatrolSchemeMapper.selectPage(page, queryWrapper));
+        return PageData.from(iPage);
     }
+
+    //鑾峰彇鐘舵��
+    public void getSchemeStatus(YwPatrolScheme ywPatrolScheme){
+        List<YwPatrolTask> ywPatrolTaskList = ywPatrolTaskMapper.selectList(new QueryWrapper<YwPatrolTask>().lambda()
+                .eq(YwPatrolTask::getSchemeId,ywPatrolScheme.getId())
+                .eq(YwPatrolTask::getIsdeleted,Constants.ZERO)
+                .ne(YwPatrolTask::getStatus,Constants.FOUR)
+        );
+
+        if(CollectionUtils.isEmpty(ywPatrolTaskList)){
+            ywPatrolScheme.setSchemeStatus(Constants.ZERO);
+            ywPatrolScheme.setTimeOutTaskNum(Constants.ZERO);
+            return;
+        }
+        //杩囨护鏁版嵁鏄惁瀛樺湪杩涜涓殑
+        if(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)).collect(Collectors.toList()).size()>Constants.ZERO){
+            ywPatrolScheme.setSchemeStatus(Constants.ONE);
+            ywPatrolScheme.setTimeOutTaskNum(ywPatrolTaskList.stream().filter(i->i.getEndDate().getTime()>System.currentTimeMillis())
+                    .collect(Collectors.toList()).size());
+            return;
+        }
+
+        //杩囨护鏁版嵁鏄笉鏄叏閮ㄦ湭寮�濮�
+        if(Constants.equalsInteger(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ZERO)).collect(Collectors.toList()).size(),ywPatrolTaskList.size())){
+            ywPatrolScheme.setSchemeStatus(Constants.ZERO);
+            ywPatrolScheme.setTimeOutTaskNum(ywPatrolTaskList.stream().filter(i->i.getEndDate().getTime()>System.currentTimeMillis())
+                    .collect(Collectors.toList()).size());
+            return;
+        }
+        //杩囨护鏁版嵁鏄笉鏄叏閮ㄥ凡瀹屾垚
+        if(Constants.equalsInteger(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.THREE)).collect(Collectors.toList()).size()
+                ,ywPatrolTaskList.size())){
+            ywPatrolScheme.setSchemeStatus(Constants.TWO);
+            return;
+        }
+    }
+
+
+
 
     @Override
     public long count(YwPatrolScheme ywPatrolScheme) {
         QueryWrapper<YwPatrolScheme> wrapper = new QueryWrapper<>(ywPatrolScheme);
         return ywPatrolSchemeMapper.selectCount(wrapper);
     }
+
+
+
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java
new file mode 100644
index 0000000..85bfb6a
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java
@@ -0,0 +1,119 @@
+package com.doumee.service.business.impl;
+
+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.YwPatrolTaskRecordMapper;
+import com.doumee.dao.business.model.YwDeviceRecord;
+import com.doumee.dao.business.model.YwPatrolPoint;
+import com.doumee.dao.business.model.YwPatrolScheme;
+import com.doumee.dao.business.model.YwPatrolTaskRecord;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.service.business.YwPatrolTaskRecordService;
+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 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.util.List;
+import java.util.Objects;
+
+/**
+ * 杩愮淮宸℃浠诲姟 - 宸℃鐐逛俊鎭〃Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2024/11/21 18:11
+ */
+@Service
+public class YwPatrolTaskRecordServiceImpl implements YwPatrolTaskRecordService {
+
+    @Autowired
+    private YwPatrolTaskRecordMapper ywPatrolTaskRecordMapper;
+
+    @Override
+    public Integer create(YwPatrolTaskRecord ywPatrolTaskRecord) {
+        ywPatrolTaskRecordMapper.insert(ywPatrolTaskRecord);
+        return ywPatrolTaskRecord.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        ywPatrolTaskRecordMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(YwPatrolTaskRecord ywPatrolTaskRecord) {
+        UpdateWrapper<YwPatrolTaskRecord> deleteWrapper = new UpdateWrapper<>(ywPatrolTaskRecord);
+        ywPatrolTaskRecordMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        ywPatrolTaskRecordMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(YwPatrolTaskRecord ywPatrolTaskRecord) {
+        ywPatrolTaskRecordMapper.updateById(ywPatrolTaskRecord);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<YwPatrolTaskRecord> ywPatrolTaskRecords) {
+        if (CollectionUtils.isEmpty(ywPatrolTaskRecords)) {
+            return;
+        }
+        for (YwPatrolTaskRecord ywPatrolTaskRecord: ywPatrolTaskRecords) {
+            this.updateById(ywPatrolTaskRecord);
+        }
+    }
+
+    @Override
+    public YwPatrolTaskRecord findById(Integer id) {
+        return ywPatrolTaskRecordMapper.selectById(id);
+    }
+
+    @Override
+    public YwPatrolTaskRecord findOne(YwPatrolTaskRecord ywPatrolTaskRecord) {
+        QueryWrapper<YwPatrolTaskRecord> wrapper = new QueryWrapper<>(ywPatrolTaskRecord);
+        return ywPatrolTaskRecordMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<YwPatrolTaskRecord> findList(YwPatrolTaskRecord ywPatrolTaskRecord) {
+        QueryWrapper<YwPatrolTaskRecord> wrapper = new QueryWrapper<>(ywPatrolTaskRecord);
+        return ywPatrolTaskRecordMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<YwPatrolTaskRecord> findPage(PageWrap<YwPatrolTaskRecord> pageWrap) {
+        IPage<YwPatrolTaskRecord> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        MPJLambdaWrapper<YwPatrolTaskRecord> queryWrapper = new MPJLambdaWrapper<YwPatrolTaskRecord>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        YwPatrolTaskRecord model = pageWrap.getModel();
+        queryWrapper.selectAll(YwPatrolTaskRecord.class)
+                .selectAs(YwPatrolPoint::getName,YwPatrolTaskRecord::getPointName)
+                .leftJoin(YwPatrolPoint.class,YwPatrolPoint::getId,YwPatrolTaskRecord::getPointId)
+                .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolTaskRecord::getDealUserId)
+                .eq(YwPatrolScheme::getIsdeleted, Constants.ZERO)
+                .like(StringUtils.isNotBlank(model.getPointName()),YwPatrolPoint::getName,model.getPointName())
+                .eq(Objects.nonNull(model) && Objects.nonNull(model.getStatus()) , YwPatrolTaskRecord::getStatus,model.getStatus())
+                .orderByDesc(YwPatrolScheme::getCreateDate)
+        ;
+        IPage<YwPatrolTaskRecord> iPage = ywPatrolTaskRecordMapper.selectJoinPage(page,YwPatrolTaskRecord.class,queryWrapper); 
+        return PageData.from(iPage);
+    }
+
+    @Override
+    public long count(YwPatrolTaskRecord ywPatrolTaskRecord) {
+        QueryWrapper<YwPatrolTaskRecord> wrapper = new QueryWrapper<>(ywPatrolTaskRecord);
+        return ywPatrolTaskRecordMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java
index 556a5b5..3bfe5a0 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java
@@ -1,21 +1,32 @@
 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.YwPatrolTaskMapper;
+import com.doumee.dao.business.model.YwDeviceRecord;
+import com.doumee.dao.business.model.YwPatrolScheme;
 import com.doumee.dao.business.model.YwPatrolTask;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.YwPatrolTaskService;
 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 com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.extern.java.Log;
+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.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 杩愮淮宸℃浠诲姟淇℃伅琛⊿ervice瀹炵幇
@@ -84,82 +95,45 @@
         QueryWrapper<YwPatrolTask> wrapper = new QueryWrapper<>(ywPatrolTask);
         return ywPatrolTaskMapper.selectList(wrapper);
     }
+
+
+    @Override
+    public void taskCancel(Integer id, LoginUserInfo loginUserInfo) {
+        YwPatrolTask ywPatrolTask = ywPatrolTaskMapper.selectById(id);
+        if(Objects.isNull(ywPatrolTask)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(ywPatrolTask.getStatus(),Constants.ZERO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐘舵�佸凡娴佽浆");
+        }
+        ywPatrolTask.setStatus(Constants.FOUR);
+        ywPatrolTask.setEditDate(new Date());
+        ywPatrolTask.setEditor(loginUserInfo.getId());
+        ywPatrolTaskMapper.updateById(ywPatrolTask);
+    }
+
   
     @Override
     public PageData<YwPatrolTask> findPage(PageWrap<YwPatrolTask> pageWrap) {
         IPage<YwPatrolTask> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<YwPatrolTask> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<YwPatrolTask> queryWrapper = new MPJLambdaWrapper<YwPatrolTask>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(YwPatrolTask::getId, pageWrap.getModel().getId());
-        }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(YwPatrolTask::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(YwPatrolTask::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(YwPatrolTask::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(YwPatrolTask::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(YwPatrolTask::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(YwPatrolTask::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(YwPatrolTask::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getTitle() != null) {
-            queryWrapper.lambda().eq(YwPatrolTask::getTitle, pageWrap.getModel().getTitle());
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(YwPatrolTask::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(YwPatrolTask::getStatus, pageWrap.getModel().getStatus());
-        }
-        if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(YwPatrolTask::getSortnum, pageWrap.getModel().getSortnum());
-        }
-        if (pageWrap.getModel().getSchemeId() != null) {
-            queryWrapper.lambda().eq(YwPatrolTask::getSchemeId, pageWrap.getModel().getSchemeId());
-        }
-        if (pageWrap.getModel().getPointId() != null) {
-            queryWrapper.lambda().eq(YwPatrolTask::getPointId, pageWrap.getModel().getPointId());
-        }
-        if (pageWrap.getModel().getDealUserId() != null) {
-            queryWrapper.lambda().eq(YwPatrolTask::getDealUserId, pageWrap.getModel().getDealUserId());
-        }
-        if (pageWrap.getModel().getDealDate() != null) {
-            queryWrapper.lambda().ge(YwPatrolTask::getDealDate, Utils.Date.getStart(pageWrap.getModel().getDealDate()));
-            queryWrapper.lambda().le(YwPatrolTask::getDealDate, Utils.Date.getEnd(pageWrap.getModel().getDealDate()));
-        }
-        if (pageWrap.getModel().getDealInfo() != null) {
-            queryWrapper.lambda().eq(YwPatrolTask::getDealInfo, pageWrap.getModel().getDealInfo());
-        }
-        if (pageWrap.getModel().getCircleType() != null) {
-            queryWrapper.lambda().eq(YwPatrolTask::getCircleType, pageWrap.getModel().getCircleType());
-        }
-        if (pageWrap.getModel().getStartDate() != null) {
-            queryWrapper.lambda().ge(YwPatrolTask::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()));
-            queryWrapper.lambda().le(YwPatrolTask::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getStartDate()));
-        }
-        if (pageWrap.getModel().getEndDate() != null) {
-            queryWrapper.lambda().ge(YwPatrolTask::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()));
-            queryWrapper.lambda().le(YwPatrolTask::getEndDate, Utils.Date.getEnd(pageWrap.getModel().getEndDate()));
-        }
-        if (pageWrap.getModel().getDealStatus() != null) {
-            queryWrapper.lambda().eq(YwPatrolTask::getDealStatus, pageWrap.getModel().getDealStatus());
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-        }
-        return PageData.from(ywPatrolTaskMapper.selectPage(page, queryWrapper));
+        YwPatrolTask model = pageWrap.getModel();
+        queryWrapper.selectAll(YwPatrolTask.class)
+                .selectAs(YwPatrolScheme::getCode,YwPatrolTask::getPlanCode)
+                .selectAs(SystemUser::getRealname,YwPatrolTask::getUserName)
+                .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolTask::getDealUserId)
+                .leftJoin(YwPatrolScheme.class,YwPatrolScheme::getId,YwPatrolTask::getSchemeId)
+                .eq(YwPatrolTask::getIsdeleted, Constants.ZERO)
+                .like(StringUtils.isNotBlank(model.getPlanTitle()),YwPatrolScheme::getTitle,model.getPlanTitle())
+
+                .ge(Objects.nonNull(model.getStartDate()), YwPatrolTask::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()))
+                .le(Objects.nonNull(model.getEndDate()),YwPatrolTask::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()))
+
+                .orderByDesc(YwPatrolTask::getId)
+        ;
+        IPage<YwPatrolTask> iPage = ywPatrolTaskMapper.selectJoinPage(page,YwPatrolTask.class,queryWrapper);
+        return PageData.from(iPage);
     }
 
     @Override
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 32ce71d..ec63fca 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
@@ -17,6 +17,7 @@
 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.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -129,73 +130,78 @@
     @Override
     public PageData<YwRoom> findPage(PageWrap<YwRoom> pageWrap) {
         IPage<YwRoom> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<YwRoom> queryWrapper = new QueryWrapper<>();
+         MPJLambdaWrapper<YwRoom> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(YwBuilding.class )
+                .selectAs(YwProject::getName,YwRoom::getProjectName)
+                .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
+                .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
+                .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId);
         pageWrap.getModel().setIsdeleted(Constants.ZERO);
         Utils.MP.blankToNull(pageWrap.getModel());
         if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(YwRoom::getId, pageWrap.getModel().getId());
+            queryWrapper.eq(YwRoom::getId, pageWrap.getModel().getId());
         }
         if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(YwRoom::getCreator, pageWrap.getModel().getCreator());
+            queryWrapper.eq(YwRoom::getCreator, pageWrap.getModel().getCreator());
         }
         if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(YwRoom::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(YwRoom::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+            queryWrapper.ge(YwRoom::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.le(YwRoom::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
         }
         if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(YwRoom::getEditor, pageWrap.getModel().getEditor());
+            queryWrapper.eq(YwRoom::getEditor, pageWrap.getModel().getEditor());
         }
         if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(YwRoom::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(YwRoom::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+            queryWrapper.ge(YwRoom::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.le(YwRoom::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
         }
         if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(YwRoom::getIsdeleted, pageWrap.getModel().getIsdeleted());
+            queryWrapper.eq(YwRoom::getIsdeleted, pageWrap.getModel().getIsdeleted());
         }
         if (pageWrap.getModel().getName() != null) {
-            queryWrapper.lambda().eq(YwRoom::getName, pageWrap.getModel().getName());
+            queryWrapper.eq(YwRoom::getName, pageWrap.getModel().getName());
         }
         if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(YwRoom::getRemark, pageWrap.getModel().getRemark());
+            queryWrapper.eq(YwRoom::getRemark, pageWrap.getModel().getRemark());
         }
         if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(YwRoom::getStatus, pageWrap.getModel().getStatus());
+            queryWrapper.eq(YwRoom::getStatus, pageWrap.getModel().getStatus());
         }
         if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(YwRoom::getSortnum, pageWrap.getModel().getSortnum());
+            queryWrapper.eq(YwRoom::getSortnum, pageWrap.getModel().getSortnum());
         }
         if (pageWrap.getModel().getImgurl() != null) {
-            queryWrapper.lambda().eq(YwRoom::getImgurl, pageWrap.getModel().getImgurl());
+            queryWrapper.eq(YwRoom::getImgurl, pageWrap.getModel().getImgurl());
         }
         if (pageWrap.getModel().getCode() != null) {
-            queryWrapper.lambda().eq(YwRoom::getCode, pageWrap.getModel().getCode());
+            queryWrapper.eq(YwRoom::getCode, pageWrap.getModel().getCode());
         }
         if (pageWrap.getModel().getRoomNum() != null) {
-            queryWrapper.lambda().eq(YwRoom::getRoomNum, pageWrap.getModel().getRoomNum());
+            queryWrapper.eq(YwRoom::getRoomNum, pageWrap.getModel().getRoomNum());
         }
         if (pageWrap.getModel().getIsInvestment() != null) {
-            queryWrapper.lambda().eq(YwRoom::getIsInvestment, pageWrap.getModel().getIsInvestment());
+            queryWrapper.eq(YwRoom::getIsInvestment, pageWrap.getModel().getIsInvestment());
         }
         if (pageWrap.getModel().getArea() != null) {
-            queryWrapper.lambda().eq(YwRoom::getArea, pageWrap.getModel().getArea());
+            queryWrapper.eq(YwRoom::getArea, pageWrap.getModel().getArea());
         }
         if (pageWrap.getModel().getFeeArea() != null) {
-            queryWrapper.lambda().eq(YwRoom::getFeeArea, pageWrap.getModel().getFeeArea());
+            queryWrapper.eq(YwRoom::getFeeArea, pageWrap.getModel().getFeeArea());
         }
         if (pageWrap.getModel().getRentArea() != null) {
-            queryWrapper.lambda().eq(YwRoom::getRentArea, pageWrap.getModel().getRentArea());
+            queryWrapper.eq(YwRoom::getRentArea, pageWrap.getModel().getRentArea());
         }
         if (pageWrap.getModel().getFloor() != null) {
-            queryWrapper.lambda().eq(YwRoom::getFloor, pageWrap.getModel().getFloor());
+            queryWrapper.eq(YwRoom::getFloor, pageWrap.getModel().getFloor());
         }
         if (pageWrap.getModel().getProjectId() != null) {
-            queryWrapper.lambda().eq(YwRoom::getProjectId, pageWrap.getModel().getProjectId());
+            queryWrapper.eq(YwRoom::getProjectId, pageWrap.getModel().getProjectId());
         }
         if (pageWrap.getModel().getBuildingId() != null) {
-            queryWrapper.lambda().eq(YwRoom::getBuildingId, pageWrap.getModel().getBuildingId());
+            queryWrapper.eq(YwRoom::getBuildingId, pageWrap.getModel().getBuildingId());
         }
-        queryWrapper.lambda().orderByAsc(YwRoom::getRoomNum);
-        return PageData.from(ywRoomMapper.selectPage(page, queryWrapper));
+        queryWrapper.orderByAsc(YwRoom::getRoomNum);
+        return PageData.from(ywRoomMapper.selectJoinPage(page,YwRoom.class, queryWrapper));
     }
 
     @Override
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 cc78386..66f431f 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
@@ -1,21 +1,36 @@
 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;
 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.YwWorkorderMapper;
-import com.doumee.dao.business.model.YwWorkorder;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.MultifileMapper;
+import com.doumee.dao.system.SystemUserMapper;
+import com.doumee.dao.system.model.Multifile;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.YwWorkorderService;
 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 com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+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;
 
 /**
@@ -28,16 +43,112 @@
 
     @Autowired
     private YwWorkorderMapper ywWorkorderMapper;
+    @Autowired
+    private SystemUserMapper systemUserMapper;
+    @Autowired
+    private YwWorkorderLogMapper ywWorkorderLogMapper;
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
+    private MultifileMapper multifileMapper;
+    @Autowired
+    private YwProjectMapper ywProjectMapper;
+    @Autowired
+    private YwRoomMapper ywRoomMapper;
+    @Autowired
+    private YwBuildingMapper ywBuildingMapper;
 
     @Override
-    public Integer create(YwWorkorder ywWorkorder) {
-        ywWorkorderMapper.insert(ywWorkorder);
-        return ywWorkorder.getId();
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public Integer create(YwWorkorder model) {
+
+        dealParamValid(model);
+        model.setCreator(model.getLoginUserInfo().getId());
+        model.setIsdeleted(Constants.ZERO);
+        model.setCreateDate(new Date());
+        model.setStatus(Constants.ZERO);
+        model.setEditDate(model.getCreateDate());
+        model.setEditor(model.getCreator());
+        ywWorkorderMapper.insert(model);
+
+        List<Multifile> fileList = new ArrayList<>();
+        if(model.getFileList()!=null && model.getFileList().size()>0){
+            boolean isTrue = false;
+            for (int i = 0; i <  model.getFileList().size(); i++) {
+                Multifile multifile =  model.getFileList().get(i);
+                if(StringUtils.isBlank(multifile.getFileurl())){
+                    continue;
+                }
+                multifile.setCreateDate(new Date());
+                multifile.setCreator(model.getEditor());
+                multifile.setIsdeleted(Constants.ZERO);
+                multifile.setObjId(model.getId());
+                multifile.setCreator(model.getCreator());
+                multifile.setObjType(Constants.MultiFile.YW_WORKORDER_PROBLEM.getKey());
+                multifile.setSortnum(i+1);
+                fileList.add(multifile);
+            }
+        }
+        if(fileList.size()>0){
+            multifileMapper.insert(fileList);
+        }
+        dealLogBiz(model,Constants.ZERO,model.getLoginUserInfo().getRealname(),null);//璁板綍鏂板缓鏃ュ織
+        return model.getId();
+    }
+
+    private void dealLogBiz(YwWorkorder model, int 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.setParam1(param1);
+        log.setParam2(param2);
+        if(type ==0){
+            log.setTitle("鍒涘缓宸ュ崟");
+        }else  if(type ==1){
+            log.setTitle("鍒嗘淳宸ュ崟");
+        }else  if(type ==2){
+            log.setTitle("澶勭悊宸ュ崟");
+        }
+        ywWorkorderLogMapper.insert(log);
+    }
+
+    private void dealParamValid(YwWorkorder model) {
+        if(Constants.equalsInteger(model.getAreaType(),Constants.ZERO))   {
+            //濡傛灉鏄競鍐呰淇紝蹇呴』閫夋嫨鎴挎簮淇℃伅
+            if(model.getRoomId()==null){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勬埧婧愪俊鎭紒");
+            }
+            YwRoom room = ywRoomMapper.selectById(model.getRoomId());
+            if(room ==null || Constants.equalsInteger(room.getIsdeleted(),Constants.ONE)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勬埧婧愪俊鎭紒");
+            }
+            model.setBuildingId(room.getBuildingId());
+            model.setProjectId(room.getProjectId());
+        }else{
+            //濡傛灉鏄叕鍏卞尯鍩熻淇紝蹇呴』閫夋嫨妤煎畤淇℃伅
+            if(model.getBuildingId()==null){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勬ゼ瀹囦俊鎭紒");
+            }
+            YwBuilding room = ywBuildingMapper.selectById(model.getRoomId());
+            if(room ==null || Constants.equalsInteger(room.getIsdeleted(),Constants.ONE)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勬ゼ瀹囦俊鎭紒");
+            }
+            model.setProjectId(room.getProjectId());
+        }
     }
 
     @Override
     public void deleteById(Integer id, LoginUserInfo user) {
-        ywWorkorderMapper.deleteById(id);
+        YwWorkorder model = new YwWorkorder();
+        model.setId(id);
+        model.setEditDate(new Date());
+        model.setEditor(user.getId());
+        model.setIsdeleted(Constants.ONE);
+        ywWorkorderMapper.updateById(model);
     }
 
     @Override
@@ -51,14 +162,131 @@
         if (CollectionUtils.isEmpty(ids)) {
             return;
         }
-        ywWorkorderMapper.deleteBatchIds(ids);
+        for(Integer id : ids){
+            this.deleteById(id,user);
+        }
     }
 
     @Override
-    public void updateById(YwWorkorder ywWorkorder) {
-        ywWorkorderMapper.updateById(ywWorkorder);
-    }
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public  void dispatchOrder(YwWorkorder ywWorkorder){
+        YwWorkorder model = this.findById(ywWorkorder.getId());
+        if(model ==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝宸ュ崟淇℃伅涓嶅瓨鍦紒");
+        }
+        if(!Constants.equalsInteger(model.getDealStatus(),Constants.ZERO) && !Constants.equalsInteger(model.getDealStatus(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝宸ュ崟鐘舵�佸凡娴佽浆锛屼笉鏀寔褰撳墠鎿嶄綔锛�");
+        }
 
+        SystemUser user = systemUserMapper.selectById(ywWorkorder.getDealUserId());
+        if(user ==null ||  (user.getDeleted()!=null&& user.getDeleted() )){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝鍛樺伐淇℃伅涓嶅瓨鍦紒");
+        }
+        YwWorkorder update = new YwWorkorder();
+        update.setId(model.getId());
+        update.setEditDate(new Date());
+        update.setEditor(ywWorkorder.getLoginUserInfo().getId());
+        update.setDealStatus(Constants.ONE);
+        update.setDispatchUserId(update.getEditor());
+        update.setDispatchDate(update.getEditDate());
+        update.setDispatchInfo(ywWorkorder.getDispatchInfo());
+        ywWorkorderMapper.updateById(update);
+        dealLogBiz(model,Constants.ONE,model.getLoginUserInfo().getRealname(),user.getRealname());//璁板綍鏂板缓鏃ュ織
+    }
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public  void dealOrder(YwWorkorder ywWorkorder){
+        YwWorkorder model = this.findById(ywWorkorder.getId());
+        if(model ==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝宸ュ崟淇℃伅涓嶅瓨鍦紒");
+        }
+        if(!Constants.equalsInteger(model.getDealStatus(),Constants.ZERO) && !Constants.equalsInteger(model.getDealStatus(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝宸ュ崟鐘舵�佸凡娴佽浆锛屼笉鏀寔褰撳墠鎿嶄綔锛�");
+        }
+
+        SystemUser user = systemUserMapper.selectById(ywWorkorder.getDealUserId());
+        if(user ==null ||  (user.getDeleted()!=null&& user.getDeleted() )){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝鍛樺伐淇℃伅涓嶅瓨鍦紒");
+        }
+        YwWorkorder update = new YwWorkorder();
+        update.setId(model.getId());
+        update.setEditDate(new Date());
+        update.setEditor(ywWorkorder.getLoginUserInfo().getId());
+        update.setDealStatus(Constants.TWO);
+        update.setDealUserId(update.getEditor());
+        update.setDealDate(update.getEditDate());
+        update.setDealInfo(ywWorkorder.getDispatchInfo());
+        ywWorkorderMapper.updateById(update);
+        dealLogBiz(model,Constants.TWO,model.getLoginUserInfo().getRealname(),null);//璁板綍鏂板缓鏃ュ織
+    }
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public void updateById(YwWorkorder model) {
+        dealParamValid(model);
+        model.setEditDate(new Date());
+        model.setEditor(model.getLoginUserInfo().getId());
+        ywWorkorderMapper.updateById(model);
+
+        List<Multifile> fileList = new ArrayList<>();
+        if(model.getFileList()!=null && model.getFileList().size()>0){
+            for (int i = 0; i <  model.getFileList().size(); i++) {
+                Multifile multifile =  model.getFileList().get(i);
+                if(StringUtils.isBlank(multifile.getFileurl())){
+                    continue;
+                }
+                multifile.setCreateDate(new Date());
+                multifile.setCreator(model.getEditor());
+                multifile.setIsdeleted(Constants.ZERO);
+                multifile.setObjId(model.getId());
+                multifile.setCreator(model.getCreator());
+                multifile.setObjType(Constants.MultiFile.YW_WORKORDER_PROBLEM.getKey());
+                multifile.setSortnum(i+1);
+                fileList.add(multifile);
+            }
+        }
+        multifileMapper.update(null,new UpdateWrapper<Multifile>().lambda()
+                .set(Multifile::getIsdeleted,Constants.ONE)
+                .set(Multifile::getEditDate,model.getEditDate())
+                .set(Multifile::getEditor,model.getEditor())
+                .eq(Multifile::getIsdeleted, Constants.ZERO)
+                .eq(Multifile::getObjType,Constants.MultiFile.YW_WORKORDER_PROBLEM.getKey())
+        );
+        if(fileList.size()>0){
+            multifileMapper.insert(fileList);
+        }
+    }
+    private void initFiles(YwWorkorder 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_WORKORDER_PROBLEM.getKey()
+                        ,Constants.MultiFile.YW_WORKORDER_DEAL.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_WORKORDER_FILE).getCode();
+            for(Multifile f : multifiles){
+                if(StringUtils.isBlank(f.getFileurl())){
+                    continue;
+                }
+                f.setFileurlFull(path+f.getFileurl());
+                if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.YW_WORKORDER_PROBLEM.getKey())){
+                    //鐜板満鎯呭喌
+                    if(model.getFileList() == null){
+                        model.setFileList(new ArrayList<>());
+                    }
+                    model.getFileList().add(f);
+                }
+                if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.YW_WORKORDER_DEAL.getKey())){
+                    //澶勭悊闄勪欢
+                    if(model.getDealFileList() == null){
+                        model.setDealFileList(new ArrayList<>());
+                    }
+                    model.getDealFileList().add(f);
+                }
+
+            }
+        }
+    }
     @Override
     public void updateByIdInBatch(List<YwWorkorder> ywWorkorders) {
         if (CollectionUtils.isEmpty(ywWorkorders)) {
@@ -71,7 +299,25 @@
 
     @Override
     public YwWorkorder findById(Integer id) {
-        return ywWorkorderMapper.selectById(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)
+                .leftJoin(SystemUser.class,SystemUser::getId,YwWorkorder::getDealUserId)
+                .eq(YwWorkorder::getId,id);
+        YwWorkorder model = ywWorkorderMapper.selectJoinOne(YwWorkorder.class,wrapper);
+        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)));
+        return model;
     }
 
     @Override
@@ -82,6 +328,7 @@
 
     @Override
     public List<YwWorkorder> findList(YwWorkorder ywWorkorder) {
+        ywWorkorder.setIsdeleted(Constants.ZERO);
         QueryWrapper<YwWorkorder> wrapper = new QueryWrapper<>(ywWorkorder);
         return ywWorkorderMapper.selectList(wrapper);
     }
@@ -90,6 +337,7 @@
     public PageData<YwWorkorder> findPage(PageWrap<YwWorkorder> pageWrap) {
         IPage<YwWorkorder> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
         QueryWrapper<YwWorkorder> queryWrapper = new QueryWrapper<>();
+        pageWrap.getModel().setIsdeleted(Constants.ZERO);
         Utils.MP.blankToNull(pageWrap.getModel());
         if (pageWrap.getModel().getId() != null) {
             queryWrapper.lambda().eq(YwWorkorder::getId, pageWrap.getModel().getId());

--
Gitblit v1.9.3