From 69fe3de2b3bea4bd6b01e2a7a10caaa8697a7a78 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 22 十一月 2024 11:05:49 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                        |   15 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskRecordController.java              |   92 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java               |   97 +++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolLine.java                     |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceRecordService.java              |    2 
 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/YwDeviceMapper.java                         |    1 
 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_service/src/main/java/com/doumee/dao/business/YwPatrolSchemeMapper.java                   |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolPoint.java                    |   38 +
 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/YwPatrolPointServiceImpl.java      |  165 +++-
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java       |  116 +--
 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/model/YwPatrolScheme.java                   |   52 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java     |  326 +++++++--
 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/service/business/YwDeviceService.java                    |    2 
 server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java                                         |   19 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceRecordCloudController.java             |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskService.java                |    2 
 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/YwPatrolTaskRecordMapper.java               |   13 
 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/YwPatrolLineServiceImpl.java       |  142 +++-
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskRecordService.java          |   97 +++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceRecordServiceImpl.java     |  146 ++-
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolPointCloudController.java              |    9 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java           |  182 +++--
 35 files changed, 1,388 insertions(+), 434 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 68b1003..9113018 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";
@@ -221,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;
@@ -452,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";
     }
 
 
@@ -1214,6 +1222,9 @@
         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/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/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_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 9b4ea71..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
@@ -2,6 +2,7 @@
 
 import com.github.yulichang.base.MPJBaseMapper;
 import com.doumee.dao.business.model.YwDevice;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
 
 /**
  * @author 姹熻箘韫�
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 fb0feae..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
@@ -1,5 +1,6 @@
 package com.doumee.dao.business;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.YwPatrolScheme;
 import com.github.yulichang.base.MPJBaseMapper;
 
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/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/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/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..80565ec 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 = yw_patrol_line.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..1ddf1ad 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,loginUserInfo);
         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,LoginUserInfo loginUserInfo){
+        //寰幆鐢熸垚涓夊ぉ鍐呯殑鏁版嵁
+        for (int i = 0; i < 3; i++) {
+            Date schemeDate = DateUtil.getXDayAfterDate(new Date(),i);
+            this.createTask(schemeDate,ywPatrolScheme,loginUserInfo);
+        }
+    }
+
+    /**
+     * 鏍规嵁鏃ユ湡鐢熸垚浠诲姟
+     * @param schemeDate
+     * @param ywPatrolScheme
+     */
+    public void createTask(Date schemeDate,YwPatrolScheme ywPatrolScheme,LoginUserInfo loginUserInfo){
+        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(loginUserInfo.getId());
+        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(loginUserInfo.getId());
+            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,loginUserInfo);
+        }
     }
 
     @Override
@@ -88,92 +271,73 @@
     @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())
+                .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

--
Gitblit v1.9.3