From b4eb1b683886899c4914f2a97961144624c46c74 Mon Sep 17 00:00:00 2001
From: renkang <8417338+k94314517@user.noreply.gitee.com>
Date: 星期四, 21 十一月 2024 18:36:02 +0800
Subject: [PATCH] 设备、巡检任务业务

---
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                        |    9 
 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/service/business/impl/YwPatrolTaskRecordServiceImpl.java |  119 ++++++
 server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java                                         |   19 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTask.java                     |   53 +-
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwPatrolSchemeMapper.java                   |    1 
 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/YwPatrolTaskService.java                |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java       |  116 ++---
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/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/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/service/business/YwPatrolTaskRecordService.java          |   97 +++++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolSchemeCloudController.java             |    9 
 16 files changed, 834 insertions(+), 197 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 201033d..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
@@ -222,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;
@@ -453,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";
     }
 
 
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/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/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/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/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/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