From 0a99001be87811ebb884b8f3f491f48054a22330 Mon Sep 17 00:00:00 2001
From: renkang <8417338+k94314517@user.noreply.gitee.com>
Date: 星期二, 13 五月 2025 17:29:00 +0800
Subject: [PATCH] 客户资料 巡检任务业务

---
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktakingRecord.java               |   26 -
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java  |    7 
 server/visits/dmvisit_admin/src/main/resources/bootstrap.yml                                                     |    2 
 server/system_service/src/main/java/com/doumee/dao/system/dto/ImportMaterialDTO.java                             |   60 ++++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTask.java                      |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java       |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java        |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java                |   22 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java              |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwTempConfigServiceImpl.java        |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java                        |   30 -
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java      |   28 -
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java                    |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java                           |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java                   |   12 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwMaterialController.java                       |   21 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java                            |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java                     |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java              |   56 +++-
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelOutVO.java               |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwMaterialService.java                   |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java          |   95 ++++++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java        |   27 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java              |   12 
 server/visits/dmvisit_service/src/main/resources/application-test.yml                                            |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java                        |    4 
 server/system_gateway/src/main/resources/bootstrap.yml                                                           |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java                      |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java                       |    2 
 server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java                                   |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/excel/ExcelReplaceCommon.java                        |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java            |    8 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java          |  153 ++++++++--
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java           |   10 
 server/visits/admin_timer/src/main/java/com/doumee/api/YwTimerController.java                                    |   11 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java      |  161 ++++++----
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java         |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java            |    2 
 39 files changed, 594 insertions(+), 233 deletions(-)

diff --git a/server/system_gateway/src/main/resources/bootstrap.yml b/server/system_gateway/src/main/resources/bootstrap.yml
index 8ecd0a5..bbb8fb4 100644
--- a/server/system_gateway/src/main/resources/bootstrap.yml
+++ b/server/system_gateway/src/main/resources/bootstrap.yml
@@ -1,11 +1,11 @@
 spring:
   profiles:
-    active: dev
+    active: pro
   application:
     name: system_gateway
   # 瀹夊叏閰嶇疆
-  security:
     # 楠岀鍏挜鍦板潃
+  security:
     oauth2:
       authorizationserver:
         token-uri: https://
\ No newline at end of file
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/dto/ImportMaterialDTO.java b/server/system_service/src/main/java/com/doumee/dao/system/dto/ImportMaterialDTO.java
new file mode 100644
index 0000000..716e7b5
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/ImportMaterialDTO.java
@@ -0,0 +1,60 @@
+package com.doumee.dao.system.dto;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/05/04 18:21
+ */
+@Data
+@ApiModel("瀵煎叆鐗╂枡淇℃伅")
+public class ImportMaterialDTO {
+
+    @ApiModelProperty(value = "鐗╂枡缂栧彿")
+    @ExcelColumn(name="鐗╂枡缂栧彿",index = 0,width = 10)
+    private String code;
+
+    @ApiModelProperty(value = "鐗╂枡鍚嶇О")
+    @ExcelColumn(name="鐗╂枡鍚嶇О",index = 1,width = 10)
+    private String name;
+
+    @ApiModelProperty(value = "鐗╂枡鍒嗙被")
+    @ExcelColumn(name="鐗╂枡鍒嗙被",index = 2,width = 10)
+    private String categoryName;
+
+    @ApiModelProperty(value = "鐗╂枡瀛愬垎绫�")
+    @ExcelColumn(name="鐗╂枡瀛愬垎绫�",index = 3,width = 10)
+    private String categoryChildName;
+
+    @ApiModelProperty(value = "鏉$爜")
+    @ExcelColumn(name="鏉$爜",index = 4,width = 10)
+    private String qrcode;
+
+    @ApiModelProperty(value = "鍝佺墝")
+    @ExcelColumn(name="鍝佺墝",index = 5,width = 10)
+    private String brand;
+
+    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
+    @ExcelColumn(name="瑙勬牸鍨嬪彿",index = 6,width = 10)
+    private String attr;
+
+    @ApiModelProperty(value = "鍗曚綅")
+    @ExcelColumn(name="鍗曚綅",index = 7,width = 10)
+    private String unitName;
+
+    @ApiModelProperty(value = "瀹夊叏搴撳瓨锛堜笅闄愶級", example = "1")
+    @ExcelColumn(name="瀹夊叏搴撳瓨锛堜笅闄愶級",index = 8,width = 16)
+    private BigDecimal minStock;
+
+    @ApiModelProperty(value = "瀹夊叏搴撳瓨锛堜笂闄愶級", example = "1")
+    @ExcelColumn(name="瀹夊叏搴撳瓨锛堜笂闄愶級",index = 9,width = 16)
+    private BigDecimal maxStock;
+
+
+
+}
diff --git a/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java b/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
index 3dd4077..3a31274 100644
--- a/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
+++ b/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
@@ -98,4 +98,11 @@
     @GetMapping("/timer/yw/ywPatrolSchemeTaskTimer")
     ApiResponse ywPatrolSchemeTaskTimer();
 
+    @ApiOperation("銆愰槣瀹佽繍缁淬�戝畾鏃舵洿鏂版埧婧愮璧佺姸鎬�")
+    @GetMapping("/timer/yw/ywRoomStatusTimer")
+    ApiResponse ywRoomStatusTimer();
+
+
+
+
 }
diff --git a/server/visits/admin_timer/src/main/java/com/doumee/api/YwTimerController.java b/server/visits/admin_timer/src/main/java/com/doumee/api/YwTimerController.java
index eda709f..4d0d49f 100644
--- a/server/visits/admin_timer/src/main/java/com/doumee/api/YwTimerController.java
+++ b/server/visits/admin_timer/src/main/java/com/doumee/api/YwTimerController.java
@@ -83,6 +83,17 @@
     }
 
 
+
+    @ApiOperation("瀹氭椂鏇存柊鎴挎簮绉熻祦鐘舵��")
+    @GetMapping("/ywRoomStatusTimer")
+    public ApiResponse ywRoomStatusTimer() {
+        ywContractService.updRentContractStatus();
+        ywContractService.updRoomLeaseNowStatus();
+        return ApiResponse.success("瀹氭椂鏇存柊鎴挎簮绉熻祦鐘舵�佷换鍔℃墽琛屼腑");
+    }
+
+
+
     @ApiOperation("瀹氭椂鏇存柊redis鏁版嵁")
     @GetMapping("/ywUpdRedisDataTimer")
     public ApiResponse ywUpdRedisDataTimer() {
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java
index 1d6d9d6..4916c65 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java
@@ -14,6 +14,7 @@
 import com.doumee.dao.business.vo.YwContractBillCallDataVO;
 import com.doumee.dao.business.vo.YwContractBillDataVO;
 import com.doumee.service.business.YwContractBillService;
+import com.doumee.service.business.YwContractService;
 import com.doumee.service.business.impl.SmsEmailServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -38,6 +39,9 @@
 
     @Autowired
     private SmsEmailServiceImpl smsEmailService;
+
+    @Autowired
+    private YwContractService ywContractService;
 
     @PreventRepeat
     @ApiOperation("鏂板缓")
@@ -129,6 +133,15 @@
         return ApiResponse.success("鐢熸垚鎴愬姛");
     }
 
+    @LoginNoRequired
+    @ApiOperation("鏇存柊鎴挎簮绉熻祦鐘舵��")
+    @GetMapping("/dealRoomStatus")
+    public ApiResponse dealRoomStatus() {
+        ywContractService.updRentContractStatus();
+        ywContractService.updRoomLeaseNowStatus();
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
     @ApiOperation("鑾峰彇寰呭鐞嗚处鍗�")
     @GetMapping("/getWaitDealList")
     @CloudRequiredPermission("business:ywcontractbill:query")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwMaterialController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwMaterialController.java
index 4470c79..1929afc 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwMaterialController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwMaterialController.java
@@ -10,13 +10,15 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.YwMaterial;
 import com.doumee.service.business.YwMaterialService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import io.swagger.annotations.*;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
 import javax.servlet.http.HttpServletResponse;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -91,7 +93,7 @@
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:ywmaterial:exportExcel")
     public void exportExcel (@RequestBody PageWrap<YwMaterial> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        ExcelExporter.build(YwMaterial.class).export(ywMaterialService.findPage(pageWrap).getRecords(), "杩愮淮璧勪骇淇℃伅琛�", response);
+        ExcelExporter.build(YwMaterial.class).export(ywMaterialService.findPage(pageWrap).getRecords(), "鐗╂枡淇℃伅琛�", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
@@ -100,4 +102,15 @@
     public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(ywMaterialService.getDetail(id));
     }
+
+
+    @ApiOperation("鐗╂枡淇℃伅瀵煎叆")
+    @PostMapping("/importMaterialBatch")
+    @CloudRequiredPermission("business:ywmaterial:query")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file", value = "file", required = true, paramType = "query", dataType = "file", dataTypeClass = File.class),
+    })
+    public ApiResponse importMaterialBatch(@ApiParam(value = "file") MultipartFile file,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        return ApiResponse.success(ywMaterialService.importMaterialBatch(file,getLoginUser(token)));
+    }
 }
diff --git a/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml b/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
index 9dc10e9..2df12af 100644
--- a/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
+++ b/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: dev
+    active: pro
   application:
     name: visitsAdmin
     # 瀹夊叏閰嶇疆
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/excel/ExcelReplaceCommon.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/excel/ExcelReplaceCommon.java
index e0c27a1..9adc1f6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/excel/ExcelReplaceCommon.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/excel/ExcelReplaceCommon.java
@@ -94,7 +94,7 @@
             IContext context = report.createContext();
             for (YwTempConfig ywTempConfig:ywTempConfigList) {
                 if(StringUtils.isBlank(ywTempConfig.getUrl())){
-                    ywTempConfig.setUrl("-");
+                    ywTempConfig.setUrl(" - ");
                 }
                 context.put(ywTempConfig.getTitle().replace("${","").replace("}",""), ywTempConfig.getUrl());
             }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java
index de03a54..e476672 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java
@@ -204,6 +204,10 @@
     @ExcelColumn(name="鐗╀笟璐规�婚噾棰�")
     private BigDecimal wyTotalFee;
 
+    @ApiModelProperty(value = "鍚堝悓鐘舵�侀泦鍚�")
+    @TableField(exist = false)
+    private List<Integer> statusList;
+
     @ApiModelProperty(value = "鎴块棿涓婚敭 鏌ヨ浣跨敤")
     @TableField(exist = false)
     private Integer roomId;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java
index c59d394..dadcb8f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java
@@ -157,11 +157,11 @@
     @TableField(exist = false)
     private Integer customerId;
 
-    @ApiModelProperty(value = "鏄惁鍙戦�侀偖浠讹細0=鍚︼紱1=鏄�", example = "1")
+    @ApiModelProperty(value = "鏄惁鍙戦�侀偖浠讹細0=鍚︼紱1=鍙戦�佹垚鍔燂紱2=鍙戦�佸け璐�", example = "1")
     @TableField(exist = false)
     private Integer isSendEmail;
 
-    @ApiModelProperty(value = "鏄惁鍙戦�佺煭淇★細0=鍚︼紱1=鏄�", example = "1")
+    @ApiModelProperty(value = "鏄惁鍙戦�佺煭淇★細0=鍚︼紱1=鍙戦�佹垚鍔燂紱2=鍙戦�佸け璐�", example = "1")
     @TableField(exist = false)
     private Integer isSendSms;
 
@@ -178,6 +178,7 @@
     @ExcelColumn(name="鍚堝悓缂栧彿",index = 2,width = 10)
     @TableField(exist = false)
     private String contractCode;
+
     @ApiModelProperty(value = "鍚堝悓鐘舵��", example = "1")
     @TableField(exist = false)
     private Integer contractStatus;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java
index 37e6303..258a1c5 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java
@@ -26,89 +26,77 @@
 
     @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 = "鍚嶇О")
-    @ExcelColumn(name="鍚嶇О")
+    @ExcelColumn(name="鐗╂枡鍚嶇О",index = 1,width = 10)
     private String name;
 
     @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤", example = "1")
-    @ExcelColumn(name="鐘舵�� 0鍚敤 1绂佺敤")
+    @ExcelColumn(name="鐘舵��",index = 8,width = 8,valueMapping = "0=鍚敤;1=绂佺敤;")
     private Integer status;
 
     @ApiModelProperty(value = "缂栧彿")
-    @ExcelColumn(name="缂栧彿")
+    @ExcelColumn(name="鐗╂枡缂栧彿",index = 0,width = 10)
     private String code;
 
     @ApiModelProperty(value = "鎵�灞炰竴绾у垎绫荤紪鐮侊紙鍏宠仈category)", example = "1")
-    @ExcelColumn(name="鎵�灞炰竴绾у垎绫荤紪鐮侊紙鍏宠仈category)")
     private Integer parentCateId;
 
     @ApiModelProperty(value = "鎵�灞炰簩绾у垎绫荤紪鐮�(鍏宠仈category锛�", example = "1")
-    @ExcelColumn(name="鎵�灞炰簩绾у垎绫荤紪鐮�(鍏宠仈category锛�")
     private Integer cateId;
 
     @ApiModelProperty(value = "鏉$爜")
-    @ExcelColumn(name="鏉$爜")
+    @ExcelColumn(name="鏉$爜",index = 2,width = 10)
     private String qrcode;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
     @ApiModelProperty(value = "鍝佺墝")
-    @ExcelColumn(name="鍝佺墝")
+    @ExcelColumn(name="鍝佺墝",index = 3,width = 10)
     private String brand;
 
     @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
-    @ExcelColumn(name="瑙勬牸鍨嬪彿")
+    @ExcelColumn(name="瑙勬牸鍨嬪彿",index = 4,width = 10)
     private String attr;
 
     @ApiModelProperty(value = "瀹夊叏搴撳瓨锛堜笅闄愶級", example = "1")
-    @ExcelColumn(name="瀹夊叏搴撳瓨锛堜笅闄愶級")
+    @ExcelColumn(name="瀹夊叏搴撳瓨锛堜笅闄愶級",index = 6,width = 16)
     private BigDecimal minStock;
 
     @ApiModelProperty(value = "瀹夊叏搴撳瓨锛堜笂闄愶級", example = "1")
-    @ExcelColumn(name="瀹夊叏搴撳瓨锛堜笂闄愶級")
+    @ExcelColumn(name="瀹夊叏搴撳瓨锛堜笂闄愶級",index = 7,width = 16)
     private BigDecimal maxStock;
 
     @ApiModelProperty(value = "鍗曚綅")
-    @ExcelColumn(name="鍗曚綅")
+    @ExcelColumn(name="鍗曚綅",index = 5,width = 10)
     private String unitName;
 
     @ApiModelProperty(value = "鎵�灞炴埧婧愮紪鐮�(鍏宠仈yw_room)", example = "1")
-    @ExcelColumn(name="鎵�灞炴埧婧愮紪鐮�(鍏宠仈yw_room)")
     private Integer roomId;
 
     @ApiModelProperty(value = "鏄惁鑷姩缂栫爜锛�0=鍚︼紱1=鏄紱", example = "1")
-    @ExcelColumn(name="鏄惁鑷姩缂栫爜锛�0=鍚︼紱1=鏄紱")
     private Integer autoCode;
 
     @ApiModelProperty(value = "闄勪欢淇℃伅", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java
index 36e1608..4ce319c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java
@@ -92,6 +92,9 @@
     @ExcelColumn(name="鍗曟嵁缂栧彿")
     private String code;
 
+    @ApiModelProperty(value = "棰嗙敤浜�", example = "1")
+    private Integer outUserId;
+
     @ApiModelProperty(value = "鍑哄叆搴撴暟鎹槑缁�", example = "1")
     @TableField(exist = false)
     private List<YwOutinboundRecord> recordList;
@@ -108,4 +111,8 @@
     @ApiModelProperty(value = "鎿嶄綔浜哄悕绉�", example = "1")
     @TableField(exist = false)
     private String createUserName;
+
+    @ApiModelProperty(value = "棰嗙敤浜哄悕绉�", example = "1")
+    @TableField(exist = false)
+    private String outUserName;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java
index d8a3f12..ef8192b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java
@@ -24,53 +24,47 @@
 
     @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 HH:mm:ss")
+    @ExcelColumn(name="鍒涘缓鏃堕棿",width = 10,index = 11,dateFormat = "yyyy-MM-dd HH:mm:ss")
     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 = "鍑哄叆搴撹褰曚富閿�", example = "1")
-    @ExcelColumn(name="鍑哄叆搴撹褰曚富閿�")
     private Integer outInBoundId;
 
     @ApiModelProperty(value = "鐗╄祫缂栫爜锛堝叧鑱攜w_material)", example = "1")
-    @ExcelColumn(name="鐗╄祫缂栫爜锛堝叧鑱攜w_material)")
     private Integer materialId;
 
     @ApiModelProperty(value = "鏁伴噺", example = "1")
-    @ExcelColumn(name="鏁伴噺")
+    @ExcelColumn(name="鏁伴噺",width = 10,index = 5)
     private BigDecimal stock;
 
     @ApiModelProperty(value = "璧勪骇缂栫爜")
     @TableField(exist = false)
+    @ExcelColumn(name="鐗╂枡缂栫爜",width = 10,index = 1)
     private String materialCode;
 
     @ApiModelProperty(value = "璧勪骇鍚嶇О")
     @TableField(exist = false)
+    @ExcelColumn(name="鐗╂枡鍚嶇О",width = 10,index = 2)
     private String materialName;
 
     @ApiModelProperty(value = "璧勪骇鏉″舰鐮�")
@@ -83,6 +77,7 @@
 
     @ApiModelProperty(value = "璧勪骇鍗曚綅")
     @TableField(exist = false)
+    @ExcelColumn(name="鍗曚綅",width = 10,index = 6)
     private String materialUnitName;
 
     @ApiModelProperty(value = "鎿嶄綔绫诲瀷锛�1=鍑哄簱锛�0=鍏ュ簱锛堝垎椤靛垪琛ㄦ煡璇娇鐢級", example = "1")
@@ -95,31 +90,38 @@
 
     @ApiModelProperty(value = "浠撳簱鍚嶇О")
     @TableField(exist = false)
+    @ExcelColumn(name="浠撳簱",width = 10,index = 8)
     private String warehouseName;
 
     @ApiModelProperty(value = "鍗曟嵁鏃ユ湡")
     @TableField(exist = false)
     @JsonFormat(pattern = "yyyy-MM-dd")
+    @ExcelColumn(name="鍗曟嵁鏃ユ湡",width = 10,index = 0,dateFormat = "yyyy-MM-dd")
     private Date doneDate;
 
     @ApiModelProperty(value = "涓�绾у垎绫诲悕绉�")
     @TableField(exist = false)
+    @ExcelColumn(name="鐗╂枡鍒嗙被",width = 10,index = 3)
     private String categoryParentName;
 
     @ApiModelProperty(value = "浜岀骇鍒嗙被鍚嶇О")
     @TableField(exist = false)
+    @ExcelColumn(name="鐗╂枡瀛愬垎绫�",width = 10,index = 4)
     private String categoryName;
 
     @ApiModelProperty(value = "鎿嶄綔浜哄悕绉�", example = "1")
     @TableField(exist = false)
+    @ExcelColumn(name="鍒涘缓浜�",width = 10,index = 10)
     private String createUserName;
 
     @ApiModelProperty(value = "鍗曟嵁缂栧彿", example = "1")
     @TableField(exist = false)
+    @ExcelColumn(name="鍗曟嵁缂栧彿",width = 10,index = 9)
     private String code;
 
     @ApiModelProperty(value = "绫诲瀷 0閲囪喘鍏ュ簱 1棰嗙敤閫�鍥� 2璋冩暣鍏ュ簱 3鍏朵粬鍏ュ簱 4鐩樼泩鍏ュ簱 5棰嗙敤鍑哄簱 6浠撳簱鍑哄簱 7璋冩暣鍑哄簱 8閲囪喘鍑哄簱 9鍏朵粬鍑哄簱 10鐩樹簭鍑哄簱", example = "1")
     @TableField(exist = false)
+    @ExcelColumn(name="绫诲瀷",width = 10,index = 7,valueMapping = "0=閲囪喘鍏ュ簱;1=棰嗙敤閫�鍥�;2=璋冩暣鍏ュ簱;3=鍏朵粬鍏ュ簱;4=鐩樼泩鍏ュ簱;5=棰嗙敤鍑哄簱;6=浠撳簱鍑哄簱;7=璋冩暣鍑哄簱;8=閲囪喘鍑哄簱;9=鍏朵粬鍑哄簱;10=鐩樹簭鍑哄簱;")
     private Integer type;
 
 
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 69f6075..2ea3bf2 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
@@ -54,7 +54,7 @@
     private String remark;
 
     @ApiModelProperty(value = "鐘舵�� 0寰呭紑濮� 1杩涜涓� 2宸茶秴鏈� 3宸插畬鎴� 4宸插彇娑�", example = "1")
-    @ExcelColumn(name="鎵ц缁撴灉",index = 7,width = 6,valueMapping = "0=寰呭紑濮�;1=杩涜涓�;2=宸茶秴鏈�;3=宸插畬鎴�;")
+    @ExcelColumn(name="鎵ц缁撴灉",index = 7,width = 6,valueMapping = "0=寰呭紑濮�;1=杩涜涓�;2=宸茶秴鏈�;3=宸插畬鎴�;4=宸插彇娑�;")
     private Integer status;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
@@ -103,6 +103,9 @@
     @TableField(exist = false)
     private String userName;
 
+    @ApiModelProperty(value = "鍙鐞嗕汉锛堝涓互,鍒嗗壊锛�")
+    @TableField(exist = false)
+    private String userIds;
 
     @ApiModelProperty(value = "浠诲姟鐘舵�侊細澶氫釜浠�,鍒嗗壊 0寰呭紑濮� 1杩涜涓� 2宸茶秴鏈� 3宸插畬鎴� 4宸插彇娑�")
     @TableField(exist = false)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java
index caa8f4a..d0434c4 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java
@@ -106,6 +106,13 @@
     @ExcelColumn(name="鎵�灞炴ゼ瀹囩紪鐮侊紙鍏宠仈yw_building)")
     private Integer buildingId;
 
+    @ApiModelProperty(value = "褰撳墠绉熻祦鐘舵�侊細0=鏈璧侊紱1=宸茬璧�")
+    private Integer leaseNowStatus;
+
+    @ApiModelProperty(value = "閫�绉熷埌鏈熸棩鏈燂紝閫�绉熶娇鐢�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date leaseRentDate;
+
     @ApiModelProperty(value = "绉熻祦鐘舵�侊細0=寰呯璧侊紱1=宸茬璧� ;2=鏈紑鍚璧�", example = "1")
     @TableField(exist = false)
     private Integer leaseStatus;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java
index 16a6200..b402a67 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java
@@ -57,7 +57,6 @@
     @ExcelColumn(name="鏁伴噺",index = 6,width = 10)
     private BigDecimal stock;
 
-
     @ApiModelProperty(value = "鐗╂枡缂栫爜")
     @ExcelColumn(name="鐗╂枡缂栫爜",index = 0,width = 10)
     @TableField(exist = false)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java
index 3addc97..ea7869f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java
@@ -35,7 +35,7 @@
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
     @ExcelColumn(name="鍒涘缓鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktakingRecord.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktakingRecord.java
index 6672876..44c5b68 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktakingRecord.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktakingRecord.java
@@ -25,97 +25,91 @@
 
     @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 = 9,width = 30)
     private String remark;
 
     @ApiModelProperty(value = "鐘舵�� 0鏈紑濮� 1宸茬洏鐐�", example = "1")
-    @ExcelColumn(name="鐘舵�� 0鏈紑濮� 1宸茬洏鐐�")
     private Integer status;
 
     @ApiModelProperty(value = "鐩樼偣鍛樼紪鐮�(鍏宠仈system_user)")
-    @ExcelColumn(name="鐩樼偣鍛樼紪鐮�(鍏宠仈system_user)")
     private String userId;
 
     @ApiModelProperty(value = "鐩樼偣鏃堕棿")
-    @ExcelColumn(name="鐩樼偣鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDate;
 
     @ApiModelProperty(value = "缂栧彿")
-    @ExcelColumn(name="缂栧彿")
     private String code;
 
     @ApiModelProperty(value = "鐗╄祫缂栫爜锛堝叧鑱攜w_material)", example = "1")
-    @ExcelColumn(name="鐗╄祫缂栫爜锛堝叧鑱攜w_material)")
     private Integer materialId;
 
     @ApiModelProperty(value = "璐﹂潰鏁伴噺", example = "1")
-    @ExcelColumn(name="璐﹂潰鏁伴噺")
+    @ExcelColumn(name="璐﹂潰鏁伴噺",index = 7,width = 10)
     private BigDecimal stock;
 
     @ApiModelProperty(value = "瀹為檯鐩樼偣搴撳瓨閲�", example = "1")
-    @ExcelColumn(name="瀹為檯鐩樼偣搴撳瓨閲�")
+    @ExcelColumn(name="鐩樼偣鏁伴噺",index = 8,width = 10)
     private BigDecimal actStock;
 
     @ApiModelProperty(value = "鐩樼偣 0璐﹀疄鐩哥 1鐩樹簭 2鐩樼泩", example = "1")
-    @ExcelColumn(name="鐩樼偣 0璐﹀疄鐩哥 1鐩樹簭 2鐩樼泩")
     private Integer type;
 
     @ApiModelProperty(value = "鐩樼偣璁″垝缂栫爜(鍏宠仈yw_stocktaking)", example = "1")
-    @ExcelColumn(name="鐩樼偣璁″垝缂栫爜(鍏宠仈yw_stocktaking)")
     private Integer stocktakingId;
 
     @ApiModelProperty(value = "璧勪骇缂栫爜")
     @TableField(exist = false)
+    @ExcelColumn(name="鐗╂枡缂栫爜",index = 0,width = 10)
     private String materialCode;
 
     @ApiModelProperty(value = "璧勪骇鍚嶇О")
     @TableField(exist = false)
+    @ExcelColumn(name="鐗╂枡鍚嶇О",index = 1,width = 10)
     private String materialName;
 
     @ApiModelProperty(value = "璧勪骇鏉″舰鐮�")
     @TableField(exist = false)
+    @ExcelColumn(name="鏉$爜",index = 2,width = 10)
     private String materialQrcode;
 
     @ApiModelProperty(value = "璧勪骇鍝佺墝")
     @TableField(exist = false)
+    @ExcelColumn(name="鍝佺墝",index = 3,width = 10)
     private String materialBrand;
 
     @ApiModelProperty(value = "璧勪骇瑙勬牸鍨嬪彿")
     @TableField(exist = false)
+    @ExcelColumn(name="瑙勬牸鍨嬪彿",index = 4,width = 10)
     private String materialAttr;
 
     @ApiModelProperty(value = "璧勪骇鍗曚綅")
     @TableField(exist = false)
+    @ExcelColumn(name="鍗曚綅",index = 5,width = 10)
     private String materialUnitName;
 
     @ApiModelProperty(value = "浠撳簱鍚嶇О")
+    @ExcelColumn(name="浠撳簱",index = 6,width = 10)
     @TableField(exist = false)
     private String warehouseName;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java
index 6c80566..f2c95f8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java
@@ -98,7 +98,7 @@
     private String code;
 
     @ApiModelProperty(value = "澶勭悊鐘舵�� 0寰呭鐞� 1宸插垎娲� 2宸插鐞�", example = "1")
-    @ExcelColumn(name="宸ュ崟鐘舵��",index = 7,width = 10,valueMapping = "0=寰呭鐞�;1=宸插垎娲�;2=宸插鐞�;")
+    @ExcelColumn(name="宸ュ崟鐘舵��",index = 7,width = 10,valueMapping = "0=寰呮寚娲�;1=宸叉寚娲�;2=宸插鐞�;")
     private Integer dealStatus;
 
     @ApiModelProperty(value = "鍒嗘淳浜虹紪鐮�(鍏宠仈system_user)", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelOutVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelOutVO.java
index 23e6818..d2c86d6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelOutVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelOutVO.java
@@ -39,14 +39,17 @@
     @ExcelColumn(name="鍑哄簱鏁伴噺",index = 4,width = 16)
     private String outMaterialNum;
 
-    @ApiModelProperty(value = "鎿嶄綔浜哄悕绉�", example = "1")
+    @ApiModelProperty(value = "棰嗙敤浜�", example = "1")
     @ExcelColumn(name="棰嗙敤浜�",index = 5,width = 16)
-    private String createUserName;
+    private String outUserName;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
     @ExcelColumn(name="鎿嶄綔鏃堕棿",index = 6,width = 16,dateFormat = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createDate;
 
+    @ApiModelProperty(value = "棰嗙敤浜�", example = "1")
+    @ExcelColumn(name="鎿嶄綔浜哄悕绉�",index = 7,width = 16)
+    private String createUserName;
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java
index 84f74eb..bca5059 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java
@@ -102,5 +102,17 @@
 
     void dealTimeOut();
 
+    /**
+     * 鍒版湡鍚堝悓 鏈彂璧烽��绉熺殑杩涜鏁版嵁璋冩暣 鎶婂悎鍚屼笅鐨勬埧婧愰噴鏀� 瀹氭椂鏃堕棿闇�瑕佸湪姣忓ぉ鏅氫笂12鐐瑰墠
+     */
+    void updRoomLeaseNowStatus();
+
+
+    /**
+     * 閫�绉熶腑/宸查��绉熷悎鍚� 鎶婂埌浜嗛��绉熸棩鏈熸椂闂寸殑鏁版嵁 杩涜鎴挎簮閲婃斁 瀹氭椂鏃堕棿闇�瑕佸湪姣忓ぉ鏅氫笂12鐐瑰墠
+     */
+    void updRentContractStatus();
+
+
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwMaterialService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwMaterialService.java
index 6da3431..6e0c811 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwMaterialService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwMaterialService.java
@@ -1,8 +1,11 @@
 package com.doumee.service.business;
 
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.YwMaterial;
+import org.springframework.web.multipart.MultipartFile;
+
 import java.util.List;
 
 /**
@@ -98,4 +101,6 @@
     long count(YwMaterial ywMaterial);
 
     YwMaterial getDetail(Integer id);
+
+    Integer importMaterialBatch(MultipartFile file, LoginUserInfo loginUserInfo);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 12976d2..135c516 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2231,12 +2231,12 @@
                 throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "韬唤璇佸彿銆�"+member.getIdcardNo()+"銆戝凡琚娇鐢紝涓嶈兘閲嶅");
             }
         }
-        if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
-                .ne(Objects.nonNull(member.getId()),Member::getId,member.getId())
-                .eq(Member::getPhone,  member.getPhone())
-                .eq(Member::getIsdeleted,Constants.ZERO) ) >0){
-            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鎵嬫満鍙枫��"+member.getPhone()+"銆戝凡琚娇鐢紝涓嶈兘閲嶅");
-        }
+//        if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
+//                .ne(Objects.nonNull(member.getId()),Member::getId,member.getId())
+//                .eq(Member::getPhone,  member.getPhone())
+//                .eq(Member::getIsdeleted,Constants.ZERO) ) >0){
+//            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鎵嬫満鍙枫��"+member.getPhone()+"銆戝凡琚娇鐢紝涓嶈兘閲嶅");
+//        }
     }
 
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
index b760dd1..a50a208 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
@@ -595,7 +595,7 @@
         SmsEmail smsEmail = new SmsEmail();
         smsEmail.setIsdeleted(Constants.ZERO);
         smsEmail.setCreateDate(new Date());
-        smsEmail.setStatus(result?Constants.ZERO:Constants.ONE);
+        smsEmail.setStatus(result?Constants.ONE:Constants.TWO);
         smsEmail.setType(Constants.ZERO);
         smsEmail.setRemark(result?"鐭俊鍙戦�佹垚鍔�":"鐭俊鍙戦�佸け璐�");
         smsEmail.setTitle("璐﹀崟鍌垂");
@@ -618,13 +618,13 @@
         if(result){
             result=   emailService.sendEmail(email,"璐﹀崟鍌垂",content,null);
         }
-        content = systemDictDataBiz.queryByCode(Constants.SMS,Constants.SMS_COMNAME).getCode() + content;
         SmsEmail smsEmail = new SmsEmail();
         smsEmail.setRemark(result?"閭欢鍙戦�佹垚鍔�":"閭欢鍙戦�佸け璐�");
         smsEmail.setIsdeleted(Constants.ZERO);
+        smsEmail.setTitle("璐﹀崟鍌垂");
         smsEmail.setCreateDate(new Date());
-        smsEmail.setStatus(result?Constants.ZERO:Constants.ONE);
-        smsEmail.setType(Constants.TWO);
+        smsEmail.setStatus(result?Constants.ONE:Constants.TWO);
+        smsEmail.setType(Constants.ONE);
         smsEmail.setObjId(billId);
         smsEmail.setObjType(Constants.TWO+"");
         smsEmail.setContent(content);
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java
index 5d36fa2..e456e57 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java
@@ -232,6 +232,17 @@
                 ywContractBill.getReceivableFee().subtract(ywContractBill.getActReceivableFee())
         );
 
+        if(Constants.equalsInteger(ywContractBill.getStatus(),Constants.ZERO)
+                && (Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.ZERO)
+                || Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.TWO)
+                || Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.THREE)
+                || Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.FOUR))
+                && Utils.Date.getEnd(ywContractBill.getPlanPayDate()).getTime() < System.currentTimeMillis()){
+            ywContractBill.setIsOverdue(Constants.ONE);
+        }else{
+            ywContractBill.setIsOverdue(Constants.ZERO);
+        }
+
         //鎴挎簮鏁版嵁
         ywContractBill.setYwContractRoomList(
                 ywContractRoomMapper.selectJoinList(YwContractRoom.class,new MPJLambdaWrapper<YwContractRoom>()
@@ -239,8 +250,8 @@
                 .selectAs(YwProject::getName,YwRoom::getProjectName)
                 .selectAs(YwFloor::getName,YwRoom::getFloorName)
                 .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
-                .selectAs(YwRoom::getCode,YwContractRoom::getRoomName)
-                .selectAs(YwRoom::getArea,YwContractRoom::getArea)
+                .selectAs(YwRoom::getRoomNum,YwContractRoom::getRoomName)
+                .selectAs(YwRoom::getRentArea,YwContractRoom::getArea)
                 .leftJoin(YwRoom.class,YwRoom::getId,YwContractRoom::getRoomId)
                 .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor)
                 .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
@@ -345,7 +356,7 @@
                 || Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.TWO)
                 || Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.THREE)
                 || Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.FOUR))
-            && ywContractBill.getPlanPayDate().getTime() < System.currentTimeMillis()){
+            && Utils.Date.getEnd(ywContractBill.getPlanPayDate()).getTime() < System.currentTimeMillis()){
                 ywContractBill.setIsOverdue(Constants.ONE);
             }else{
                 ywContractBill.setIsOverdue(Constants.ZERO);
@@ -392,6 +403,8 @@
         IPage<YwContractBill> iPage = ywContractBillMapper.selectJoinPage(page,YwContractBill.class,
                 queryWrapper.selectAll(YwContractBill.class)
                         .select(" ( select ifnull( sum( CASE WHEN t.bill_type = 0 and yw.REVENUE_TYPE = 0 THEN yw.ACT_RECEIVABLE_FEE when  t.bill_type = 0 and yw.REVENUE_TYPE = 1 then -yw.ACT_RECEIVABLE_FEE  when t.bill_type = 1 and yw.REVENUE_TYPE = 0 then -yw.ACT_RECEIVABLE_FEE else  yw.ACT_RECEIVABLE_FEE END),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
+                        .select(" ifnull((select s.status  from sms_email s where s.OBJ_ID = t.id and s.OBJ_TYPE = 2 order by s.CREATE_DATE desc  limit 1 ),0)  ",YwContractBill::getIsSendEmail)
+                        .select(" ifnull((select s.status  from sms_email s where s.OBJ_ID = t.id and s.OBJ_TYPE = 1 order by s.CREATE_DATE desc  limit 1 ),0)  ",YwContractBill::getIsSendSms)
                         .selectAs(YwContract::getCode,YwContractBill::getContractCode)
                         .selectAs(YwCustomer::getName,YwContractBill::getCustomerName)
                         .leftJoin(YwContract.class,YwContract::getId,YwContractBill::getContractId)
@@ -405,12 +418,12 @@
                                 YwContractBill::getBillType,model.getBillType())
                         .eq(Objects.nonNull(model)&&Objects.nonNull(model.getPayStatus()),
                                 YwContractBill::getPayStatus,model.getPayStatus())
-                        .in(Objects.nonNull(model)&&Objects.nonNull(model.getPayStatus()),
-                                YwContractBill::getPayStatus,Constants.ZERO,Constants.THREE,Constants.TWO,Constants.FOUR)
+                        .in(YwContractBill::getPayStatus,Constants.ZERO,Constants.TWO,Constants.THREE)
                         .eq(Objects.nonNull(model)&&Objects.nonNull(model.getType()),
                                 YwContractBill::getType,model.getType())
                         .le(Objects.nonNull(model)&&Objects.nonNull(model.getIsOverdue())&&Constants.equalsInteger(model.getIsOverdue(),Constants.ONE),
                                 YwContractBill::getPlanPayDate, DateUtil.getCurrDateTime())
+                        .lt(YwContractBill::getPlanPayDate, DateUtil.getDate(new Date(),"yyyy-MM-dd"))
                         .eq(Objects.nonNull(model)&&Objects.nonNull(model.getIsOverdue())&&Constants.equalsInteger(model.getIsOverdue(),Constants.ONE),
                                 YwContractBill::getStatus, Constants.ZERO)
                         .ge(Objects.nonNull(model)&&Objects.nonNull(model.getPlanPayDateStart()),YwContractBill::getPlanPayDate, Utils.Date.getStart(model.getPlanPayDateStart()))
@@ -455,7 +468,7 @@
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBillList)){
             //鑾峰彇鎵�鏈夋暟鎹�
             List<Integer> billIdList = ywContractBillList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)).map(i->i.getId()).collect(Collectors.toList());
-            List<Integer> contractIdList = ywContractBillList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ZERO)).map(i->i.getContractId()).collect(Collectors.toList());
+            List<Integer> contractIdList = ywContractBillList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ZERO)||Constants.equalsInteger(i.getType(),Constants.TWO)).map(i->i.getContractId()).collect(Collectors.toList());
             List<YwContractRoom> ywContractRoomList  = new ArrayList<>();
             if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(billIdList)){
                 ywContractRoomList.addAll( ywContractRoomMapper.selectJoinList(YwContractRoom.class,new MPJLambdaWrapper<YwContractRoom>()
@@ -463,7 +476,7 @@
                         .selectAs(YwProject::getName,YwRoom::getProjectName)
                         .selectAs(YwFloor::getName,YwRoom::getFloorName)
                         .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
-                        .selectAs(YwRoom::getCode,YwContractRoom::getRoomName)
+                        .selectAs(YwRoom::getRoomNum,YwContractRoom::getRoomName)
                         .leftJoin(YwRoom.class,YwRoom::getId,YwContractRoom::getRoomId)
                         .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor)
                         .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
@@ -479,7 +492,7 @@
                         .selectAs(YwProject::getName,YwRoom::getProjectName)
                         .selectAs(YwFloor::getName,YwRoom::getFloorName)
                         .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
-                        .selectAs(YwRoom::getCode,YwContractRoom::getRoomName)
+                        .selectAs(YwRoom::getRoomNum,YwContractRoom::getRoomName)
                         .leftJoin(YwRoom.class,YwRoom::getId,YwContractRoom::getRoomId)
                         .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor)
                         .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
@@ -690,7 +703,8 @@
                     .selectAs(YwContractDetail::getType,YwContractBill::getDetailType)
                     .selectAs(YwContract::getZlPayType,YwContractBill::getZlPayType)
                     .selectAs(YwContract::getWyPayType,YwContractBill::getWyPayType)
-                    .select(" ( select ifnull(sum(y.rent_area),0) from yw_room y left join yw_contract_room yr on y.id = yr.room_id where yr.contract_id = t.contract_id and y.IS_INVESTMENT = 0 and yr.type = 0 )  " , YwContractBill::getTotalArea)
+                    .select(" ( select ifnull(sum(y.rent_area),0) from yw_room y left join yw_contract_room yr on y.id = yr.room_id where yr.contract_id = t.contract_id and y.IS_INVESTMENT = 1 and yr.type = 0 )  " , YwContractBill::getTotalArea)
+                    .select(" ( select ifnull( sum( CASE WHEN t.bill_type = 0 and yw.REVENUE_TYPE = 0 THEN yw.ACT_RECEIVABLE_FEE when  t.bill_type = 0 and yw.REVENUE_TYPE = 1 then -yw.ACT_RECEIVABLE_FEE  when t.bill_type = 1 and yw.REVENUE_TYPE = 0 then -yw.ACT_RECEIVABLE_FEE else  yw.ACT_RECEIVABLE_FEE END),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
                     .leftJoin(YwContract.class,YwContract::getId,YwContractBill::getContractId)
                     .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
                     .leftJoin(YwContractDetail.class,YwContractDetail::getId,YwContractBill::getDetailId)
@@ -825,7 +839,7 @@
             }else if(y.getTitle().equals("${搴旀敹鏃ユ湡}")&&Objects.nonNull(ywContractBill.getPlanPayDate())){
                 y.setUrl(DateUtil.formatDate(ywContractBill.getPlanPayDate(),"yyyy-MM-dd"));
             }else if(y.getTitle().equals("${搴旀敹閲戦}")&&Objects.nonNull(ywContractBill.getReceivableFee())){
-                y.setUrl(ywContractBill.getReceivableFee().toString());
+                y.setUrl((ywContractBill.getReceivableFee().subtract(ywContractBill.getActReceivableFee())).setScale(2).toString());
             }else if(y.getTitle().equals("${璐﹀崟澶囨敞}")){
                 if(StringUtils.isNotBlank(ywContractBill.getRemark())){
                     y.setUrl(ywContractBill.getRemark());
@@ -926,14 +940,19 @@
                     .selectAs(YwContractDetail::getType,YwContractBill::getDetailType)
                     .selectAs(YwContract::getZlPayType,YwContractBill::getZlPayType)
                     .selectAs(YwContract::getWyPayType,YwContractBill::getWyPayType)
-                    .select(" ( select ifnull(sum(r.rent_area),0) from yw_room y left join yw_contract_room yr on y.id = yr.room_id where yr.contract_id = t.contract_id and y.IS_INVESTMENT = 0 and yr.type = 0 )  " , YwContractBill::getTotalArea)
+                    .select(" ( select ifnull(sum(y.rent_area),0) from yw_room y left join yw_contract_room yr on y.id = yr.room_id where yr.contract_id = t.contract_id and y.IS_INVESTMENT = 1 and yr.type = 0 )  " , YwContractBill::getTotalArea)
                     .leftJoin(YwContract.class,YwContract::getId,YwContractBill::getContractId)
                     .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
                     .leftJoin(YwContractDetail.class,YwContractDetail::getId,YwContractBill::getDetailId)
                     .eq(YwContractBill::getId,ywSmsEmailBillCallDTO.getBillId())
                     .last( "limit 1" )
             );
-            this.dealTempData(tempList,ywContractBill,loginUserInfo);
+
+            List<YwContractBill> ywContractBillList = new ArrayList<>();
+            ywContractBillList.add(ywContractBill);
+            this.dealRoomDetail(ywContractBillList);
+
+//            this.dealTempData(tempList,ywContractBill,loginUserInfo);
             Member member = memberMapper.selectById(ywSmsEmailBillCallDTO.getUserId());
             if(Objects.isNull(member)){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀛樺湪鏈煡璇㈠埌鐨勪汉鍛樹俊鎭�");
@@ -947,11 +966,10 @@
                 if(Constants.equalsInteger(ywSmsEmailBillCallDTO.getSendEmail(),Constants.ONE) && StringUtils.isNotBlank(member.getEmail())
                         && emailTempConfigOptional.isPresent()){
                     String content = this.dealTempSmsEmailData(emailTempConfigOptional.get().getTitle(),tempList,ywContractBill,loginUserInfo);
-                    smsEmailService.sendEmail(content,member.getEmail(),ywContractBill.getId());
+                    smsEmailService.sendEmail(member.getEmail(),content,ywContractBill.getId());
                 }
             }
         }
-         
     }
 
 
@@ -963,82 +981,87 @@
         for (YwTempConfig y:ywTempConfigList) {
             if(y.getTitle().equals("${璐圭敤鍚嶇О}")&&Objects.nonNull(ywContractBill.getCostType())){
                 //璐圭敤绫诲瀷锛�0=绉熻祦璐癸紱1=鐗╀笟璐癸紱2=绉熻祦鎶奸噾锛�3=鐗╀笟鎶奸噾锛�4=姘寸數璐癸紱5=鏉傞」璐癸紱6=鍏朵粬; 7=淇濊瘉閲�
-                if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.ZERO)){ 
-                    tempStr.replace("${璐圭敤鍚嶇О}","绉熻祦璐�");
+                if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.ZERO)){
+                    tempStr = tempStr.replace("${璐圭敤鍚嶇О}","绉熻祦璐�");
                 }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.ONE)){
-                    tempStr.replace("${璐圭敤鍚嶇О}","鐗╀笟璐�");
+                    tempStr = tempStr.replace("${璐圭敤鍚嶇О}","鐗╀笟璐�");
                 }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.TWO)){
-                    tempStr.replace("${璐圭敤鍚嶇О}","绉熻祦鎶奸噾");
+                    tempStr = tempStr.replace("${璐圭敤鍚嶇О}","绉熻祦鎶奸噾");
                 }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.THREE)){
-                    tempStr.replace("${璐圭敤鍚嶇О}","鐗╀笟鎶奸噾");
+                  tempStr =   tempStr.replace("${璐圭敤鍚嶇О}","鐗╀笟鎶奸噾");
                 }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.FOUR)){
-                    tempStr.replace("${璐圭敤鍚嶇О}","姘寸數璐�");
+                  tempStr =   tempStr.replace("${璐圭敤鍚嶇О}","姘寸數璐�");
                 }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.FIVE)){
-                    tempStr.replace("${璐圭敤鍚嶇О}","鏉傞」璐�");
+                  tempStr =   tempStr.replace("${璐圭敤鍚嶇О}","鏉傞」璐�");
                 }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.SIX)){
-                    tempStr.replace("${璐圭敤鍚嶇О}","鍏朵粬");
+                  tempStr =   tempStr.replace("${璐圭敤鍚嶇О}","鍏朵粬");
                 }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.SEVEN)){
-                    tempStr.replace("${璐圭敤鍚嶇О}","淇濊瘉閲�");
+                  tempStr =   tempStr.replace("${璐圭敤鍚嶇О}","淇濊瘉閲�");
                 }
-            }else if(y.getTitle().equals("${璁¤垂鍛ㄦ湡}")&&Objects.nonNull(ywContractBill.getDetailType())){
-                if(Constants.equalsInteger(ywContractBill.getDetailType(),Constants.ZERO)){
-                    //绉熻祦鏀粯鏂瑰紡 0=涓�娆℃�т粯娆撅紱1=姣忎笁涓湀涓�浠橈紱2=鍏釜鏈堜竴浠橈紱3=涓�骞翠竴浠�
-                    if(Objects.nonNull(ywContractBill.getZlPayType())){
-                        if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.ZERO)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�娆℃�т粯娆�");
-                        }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.ONE)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","姣忎笁涓湀涓�浠�");
-                        }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.TWO)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","鍏釜鏈堜竴浠�");
-                        }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.THREE)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�骞翠竴浠�");
+            }else if(y.getTitle().equals("${璁¤垂鍛ㄦ湡}")){
+                if(Objects.nonNull(ywContractBill.getDetailType())){
+                    if(Constants.equalsInteger(ywContractBill.getDetailType(),Constants.ZERO)){
+                        //绉熻祦鏀粯鏂瑰紡 0=涓�娆℃�т粯娆撅紱1=姣忎笁涓湀涓�浠橈紱2=鍏釜鏈堜竴浠橈紱3=涓�骞翠竴浠�
+                        if(Objects.nonNull(ywContractBill.getZlPayType())){
+                            if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.ZERO)){
+                                tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�娆℃�т粯娆�");
+                            }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.ONE)){
+                                tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","姣忎笁涓湀涓�浠�");
+                            }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.TWO)){
+                                tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","鍏釜鏈堜竴浠�");
+                            }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.THREE)){
+                                tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�骞翠竴浠�");
+                            }
+                        }
+                    }else{
+                        //鐗╀笟鏀粯鏂瑰紡 0=涓�娆℃�т粯娆撅紱1=姣忎笁涓湀涓�浠橈紱2=鍏釜鏈堜竴浠橈紱3=涓�骞翠竴浠�
+                        if(Objects.nonNull(ywContractBill.getWyPayType())){
+                            if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.ZERO)){
+                                tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�娆℃�т粯娆�");
+                            }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.ONE)){
+                                tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","姣忎笁涓湀涓�浠�");
+                            }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.TWO)){
+                                tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","鍏釜鏈堜竴浠�");
+                            }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.THREE)){
+                                tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�骞翠竴浠�");
+                            }
                         }
                     }
                 }else{
-                    //鐗╀笟鏀粯鏂瑰紡 0=涓�娆℃�т粯娆撅紱1=姣忎笁涓湀涓�浠橈紱2=鍏釜鏈堜竴浠橈紱3=涓�骞翠竴浠�
-                    if(Objects.nonNull(ywContractBill.getWyPayType())){
-                        if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.ZERO)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�娆℃�т粯娆�");
-                        }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.ONE)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","姣忎笁涓湀涓�浠�");
-                        }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.TWO)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","鍏釜鏈堜竴浠�");
-                        }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.THREE)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�骞翠竴浠�");
-                        }
-                    }
+                    tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","");
                 }
+
             }else if(y.getTitle().equals("${鍗曚环}")&&Objects.nonNull(ywContractBill.getPrice())){
-                tempStr.replace("${鍗曚环}",ywContractBill.getPrice().toString());
+                tempStr = tempStr.replace("${鍗曚环}",ywContractBill.getPrice().setScale(2).toString());
             }else if(y.getTitle().equals("${鍗曚綅}")&&Objects.nonNull(ywContractBill.getCircleType())){
                 //浠樻鍛ㄦ湡绫诲瀷 0=鍏冩瘡骞崇背澶�;1=鍏冩瘡骞崇背鏈�;2=鍏冩瘡骞崇背骞�;3=鍏冩瘡澶�;4=鍏冩瘡鏈�;5=鍏冩瘡骞�;6=鍏冩瘡鍦�;
                 if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ZERO)){
-                    tempStr.replace("${鍗曚綅}","鍏冩瘡骞崇背澶�");
+                  tempStr =   tempStr.replace("${鍗曚綅}","鍏冩瘡骞崇背澶�");
                 }else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
-                    tempStr.replace("${鍗曚綅}","鍏冩瘡骞崇背鏈�");
+                  tempStr =   tempStr.replace("${鍗曚綅}","鍏冩瘡骞崇背鏈�");
                 }else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.TWO)){
-                    tempStr.replace("${鍗曚綅}","鍏冩瘡骞崇背骞�");
+                  tempStr =   tempStr.replace("${鍗曚綅}","鍏冩瘡骞崇背骞�");
                 } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.THREE)){
-                    tempStr.replace("${鍗曚綅}","鍏冩瘡澶�");
+                  tempStr =   tempStr.replace("${鍗曚綅}","鍏冩瘡澶�");
                 } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.FOUR)){
-                    tempStr.replace("${鍗曚綅}","鍏冩瘡鏈�");
+                  tempStr =   tempStr.replace("${鍗曚綅}","鍏冩瘡鏈�");
                 } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.FIVE)){
-                    tempStr.replace("${鍗曚綅}","鍏冩瘡骞�");
+                  tempStr =   tempStr.replace("${鍗曚綅}","鍏冩瘡骞�");
                 } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.SIX)){
-                    tempStr.replace("${鍗曚綅}","鍏冩瘡鍦�");
+                  tempStr =   tempStr.replace("${鍗曚綅}","鍏冩瘡鍦�");
                 }
             }else if(y.getTitle().equals("${搴旀敹鏃ユ湡}")&&Objects.nonNull(ywContractBill.getPlanPayDate())){
-                tempStr.replace("${搴旀敹鏃ユ湡}",DateUtil.formatDate(ywContractBill.getPlanPayDate(),"yyyy-MM-dd"));
+                tempStr = tempStr.replace("${搴旀敹鏃ユ湡}",DateUtil.formatDate(ywContractBill.getPlanPayDate(),"yyyy-MM-dd"));
             }else if(y.getTitle().equals("${搴旀敹閲戦}")&&Objects.nonNull(ywContractBill.getReceivableFee())){
-                tempStr.replace("${搴旀敹閲戦}",ywContractBill.getReceivableFee().toString());
+                tempStr = tempStr.replace("${搴旀敹閲戦}",(ywContractBill.getReceivableFee().subtract(ywContractBill.getActReceivableFee())).setScale(2).toString());
             }else if(y.getTitle().equals("${璐﹀崟澶囨敞}")){
                 if(StringUtils.isNotBlank(ywContractBill.getRemark())){
-                    tempStr.replace("${璐﹀崟澶囨敞}",ywContractBill.getRemark());
+                  tempStr =   tempStr.replace("${璐﹀崟澶囨敞}",ywContractBill.getRemark());
                 }else{
-                    tempStr.replace("${璐﹀崟澶囨敞}","");
+                  tempStr =   tempStr.replace("${璐﹀崟澶囨敞}","");
                 }
             }else if(y.getTitle().equals("${绉熷鍚嶇О}")&&StringUtils.isNotBlank(ywContractBill.getCustomerName())){
-                tempStr.replace("${绉熷鍚嶇О}",ywContractBill.getCustomerName());
+                tempStr = tempStr.replace("${绉熷鍚嶇О}",ywContractBill.getCustomerName());
             }else if(y.getTitle().equals("${鎴块棿淇℃伅}")){
                 if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBill.getYwContractRoomList())){
                     StringBuilder roomPathName = new StringBuilder();
@@ -1059,32 +1082,32 @@
                             roomPathName.append(";");
                         }
                     }
-                    tempStr.replace("${鎴块棿淇℃伅}",roomPathName.toString());
+                    tempStr = tempStr.replace("${鎴块棿淇℃伅}",roomPathName.toString());
                 }
             }else if(y.getTitle().equals("${绉熻祦闈㈢Н}")&&Objects.nonNull(ywContractBill.getTotalArea())){
                 tempStr.replace("${绉熻祦闈㈢Н}",ywContractBill.getTotalArea().toString());
             }else if(y.getTitle().equals("${鎵�灞炲叕鍙歌处鎴峰悕绉皚")){
                 if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getName())){
-                    tempStr.replace("${鎵�灞炲叕鍙歌处鎴峰悕绉皚",ywAccount.getName());
+                  tempStr =   tempStr.replace("${鎵�灞炲叕鍙歌处鎴峰悕绉皚",ywAccount.getName());
                 }else{
-                    tempStr.replace("${鎵�灞炲叕鍙歌处鎴峰悕绉皚","-");
+                  tempStr =   tempStr.replace("${鎵�灞炲叕鍙歌处鎴峰悕绉皚","-");
                 }
             }else if(y.getTitle().equals("${鎵�灞炲叕鍙搁摱琛岃处鍙穧")){ 
                 if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getName())){
-                    tempStr.replace("${鎵�灞炲叕鍙搁摱琛岃处鍙穧",ywAccount.getName());
+                  tempStr =   tempStr.replace("${鎵�灞炲叕鍙搁摱琛岃处鍙穧",ywAccount.getName());
                 }else{
-                    tempStr.replace("${鎵�灞炲叕鍙搁摱琛岃处鍙穧","-");
+                  tempStr =   tempStr.replace("${鎵�灞炲叕鍙搁摱琛岃处鍙穧","-");
                 }
             }else if(y.getTitle().equals("${鎵�灞炲叕鍙稿紑鎴烽摱琛寎")){
                 if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getBankNo())){
-                    tempStr.replace("${鎵�灞炲叕鍙稿紑鎴烽摱琛寎",ywAccount.getBankNo());
+                  tempStr =   tempStr.replace("${鎵�灞炲叕鍙稿紑鎴烽摱琛寎",ywAccount.getBankNo());
                 }else{
-                    tempStr.replace("${鎵�灞炲叕鍙稿紑鎴烽摱琛寎","-");
+                  tempStr =   tempStr.replace("${鎵�灞炲叕鍙稿紑鎴烽摱琛寎","-");
                 }
             }else if(y.getTitle().equals("${閫氱煡鍗曠敓鎴愭棩鏈焳")){
-                tempStr.replace("${閫氱煡鍗曠敓鎴愭棩鏈焳",DateUtil.formatDate(new Date(),"yyyy-MM-dd"));
+                tempStr = tempStr.replace("${閫氱煡鍗曠敓鎴愭棩鏈焳",DateUtil.formatDate(new Date(),"yyyy-MM-dd"));
             }else if(y.getTitle().equals("${鍒惰〃浜哄悕绉皚")){
-                tempStr.replace("${鍒惰〃浜哄悕绉皚",loginUserInfo.getRealname());
+                tempStr = tempStr.replace("${鍒惰〃浜哄悕绉皚",loginUserInfo.getRealname());
             } 
         }
         return tempStr;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
index 49ecb0b..383ca4c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
@@ -84,7 +84,7 @@
         model.setEditor(model.getCreator());
         if(model.getStartDate().getTime() > System.currentTimeMillis()){
             model.setStatus(Constants.ZERO);
-        }else if(model.getStartDate().getTime() <= System.currentTimeMillis() && model.getEndDate().getTime() > System.currentTimeMillis()){
+        }else if(model.getStartDate().getTime() <= System.currentTimeMillis() && Utils.Date.getEnd(model.getEndDate()).getTime() > System.currentTimeMillis()){
             model.setStatus(Constants.ONE);
         }else{
             model.setStatus(Constants.TWO);
@@ -112,6 +112,12 @@
             t.setEditor(model.getCreator());
             t.setType(Constants.ZERO);
             list.add(t);
+        }
+        if(Constants.equalsInteger(model.getStatus(),Constants.ONE)){
+            //鏇存柊鎴挎簮鏁版嵁涓虹璧佷腑
+            roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ONE)
+                    .in(YwRoom::getId,model.getRoomList().stream().map(i->i.getId()).collect(Collectors.toList()))
+            );
         }
         ywContractRoomMapper.insert(list);
     }
@@ -341,6 +347,13 @@
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public  Integer backRent(YwContract param){
         isParamValidBackRent(param);
+        YwContract model = ywContractMapper.selectById(param.getId());
+        if(Objects.isNull(model)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!(model.getStartDate().getTime()<=param.getBtDate().getTime()&&model.getEndDate().getTime()>=param.getBtDate().getTime())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閫�绉熸棩鏈熼敊璇紝璇锋鏌ラ��绉熸棩鏈熼渶鍦ㄥ悎鍚屾棩鏈熷唴锛�");
+        }
         param.setEditDate(new Date());
         param.setEditor(param.getLoginUserInfo().getId());
         //澶勭悊
@@ -364,30 +377,47 @@
         update.setBtRemark(getbackRentRemarkByParam(param));
         ywContractMapper.updateById(update);
         dealLogBiz(param,Constants.YwLogType.CONTRACT_BACK, param.getLoginUserInfo().getRealname(),getbackRentLogByParam(param));
+        //濡傛灉閫�绉熸棩鏈熷皬浜庡綋鍓嶆棩鏈� 鍒欑洿鎺ラ噴鏀炬埧婧愪俊鎭� 鏈璧�
+        if(Utils.Date.getEnd(param.getBtDate()).getTime()<System.currentTimeMillis()){
+            List<YwContractRoom> contractRoomList = ywContractRoomMapper.selectList(new QueryWrapper<YwContractRoom>().lambda()
+                    .eq(YwContractRoom::getContractId, param.getId()));
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(contractRoomList)){
+                //鏇存柊鎴挎簮鏁版嵁涓烘湭绉熻祦
+                roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ZERO)
+                        .in(YwRoom::getId,contractRoomList.stream().map(i->i.getRoomId()).collect(Collectors.toList()))
+                );
+            }
+        }
         return param.getId();
     }
 
 
     @Override
     public  void dealTimeOut(){
-        //瀹氭椂澶勭悊鍚堝悓鎵ц涓�
-        ywContractMapper.update(new UpdateWrapper<YwContract>()
-                .lambda()
-                .set(YwContract::getStatus,Constants.ONE)
-                .set(YwContract::getEditDate,DateUtil.getCurrDateTime())
+
+        List<YwContract> listA = ywContractMapper.selectList(new QueryWrapper<YwContract>().lambda()
                 .eq(YwContract::getIsdeleted,Constants.ZERO)
                 .in(YwContract::getStatus,Constants.ZERO)
                 .apply(" START_DATE < NOW()  AND END_DATE > NOW() ")
         );
-        //瀹氭椂澶勭悊鍚堝悓宸茶繃鏈�
-        ywContractMapper.update(new UpdateWrapper<YwContract>()
-                        .lambda()
-                .set(YwContract::getStatus,Constants.TWO)
-                .set(YwContract::getEditDate,DateUtil.getCurrDateTime())
-                .eq(YwContract::getIsdeleted,Constants.ZERO)
-                .in(YwContract::getStatus,Constants.ONE,Constants.ZERO)
-                .apply(" END_DATE < CURRENT_DATE ")
-        );
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(listA)){
+            //瀹氭椂澶勭悊鍚堝悓鎵ц涓�
+            ywContractMapper.update(new UpdateWrapper<YwContract>()
+                    .lambda()
+                    .set(YwContract::getStatus,Constants.ONE)
+                    .set(YwContract::getEditDate,DateUtil.getCurrDateTime())
+                    .in(YwContract::getId,listA.stream().map(i->i.getId()).collect(Collectors.toList()))
+            );
+
+            List<YwContractRoom> contractRoomList = ywContractRoomMapper.selectList(new QueryWrapper<YwContractRoom>().lambda().in(YwContractRoom::getContractId,
+                    listA.stream().map(i->i.getId()).collect(Collectors.toList())));
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(contractRoomList)){
+                //鏇存柊鎴挎簮鏁版嵁涓虹璧佷腑
+                roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ONE)
+                        .in(YwRoom::getId,contractRoomList.stream().map(i->i.getRoomId()).collect(Collectors.toList()))
+                );
+            }
+        }
 
     }
 
@@ -420,7 +450,7 @@
                         ||Constants.equalsInteger(bill.getPayStatus(),Constants.THREE)){
                     if(bill.getStartDate().getTime()<=param.getBtDate().getTime()){
                         canBills.add(bill);
-                        canBillCount = canBillCount ++;
+                        canBillCount = canBillCount + 1 ;
                     }else{
                         //濡傛灉杩樻病寮�濮嬶紝璐﹀崟鐩存帴鍏抽棴
                         closeBills.add(bill);
@@ -432,11 +462,11 @@
                         noBills.add(bill);
                     }else{
                         canBills.add(bill);
-                        canBillCount = canBillCount ++;
+                        canBillCount = canBillCount + 1 ;
                     }
                 }else  if(Constants.equalsInteger(bill.getPayStatus(),Constants.TWO) ){
                      canBills.add(bill);
-                    canBillCount = canBillCount ++;
+                    canBillCount = canBillCount + 1 ;
                 }
             }
         }
@@ -464,12 +494,17 @@
                     if(fee.compareTo(new BigDecimal(0))== 0){
                         //濡傛灉璐圭敤姝eソ锛屽垯淇敼璐﹀崟淇℃伅涓哄凡缁撴竻
                         b.setPayStatus(Constants.ONE);
-                        canBillCount = canBillCount --;
-                    }else if(fee.compareTo(new BigDecimal(0))> 0){
+                        canBillCount = canBillCount - 1 ;
+                    }else if(fee.compareTo(new BigDecimal(0))< 0){
                         //濡傛灉闇�瑕佽繘琛岄��娆撅紝鏇存柊璐﹀崟淇℃伅涓哄緟閫�娆�
                         b.setPayStatus(Constants.FOUR);
-                    }else if(fee.compareTo(new BigDecimal(0)) < 0){
-                        //濡傛灉璐﹀崟杩樻湁娆惧緟鏀讹紝鍒欎繚鎸佺姸鎬佷笉鍙�
+                    }else if(fee.compareTo(new BigDecimal(0)) > 0){
+                        //濡傛灉璐﹀崟杩樻湁娆惧緟鏀讹紝鍒欐洿鏂拌处鍗曚负寰呮敹娆�
+                        if(b.getPayStatus()==Constants.ZERO){
+                            b.setPayStatus(Constants.ZERO);
+                        }else if(b.getPayStatus()!=Constants.TWO){
+                            b.setPayStatus(Constants.TWO);
+                        }
                     }
                     b.setReceivableFee(editBill.getReceivableFee());
                 }
@@ -654,8 +689,8 @@
             //2025-1-23 13:56:53 鍔犲叆 鍓嶇鍏ュ弬璋冩暣鍚庣殑璐﹀崟淇℃伅
             List<YwContractBill> ywContractBillList = new ArrayList<>();
             //鏌ヨ绉熻祦鏉℃
-            if(Constants.equalsInteger(model.getType(),Constants.ZERO )
-                    || Constants.equalsInteger(model.getType(),Constants.TWO)&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details1)){
+            if((Constants.equalsInteger(model.getType(),Constants.ZERO )
+                    || Constants.equalsInteger(model.getType(),Constants.TWO))&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details1)){
                 YwContractDetail ywContractDetail = details1.get(Constants.ZERO);
                 YwContractBill zlBill = new YwContractBill();
                 BeanUtils.copyProperties(model.getZlBillDTO(),zlBill);
@@ -691,8 +726,8 @@
                 }
             }
             //鏌ヨ鐗╀笟璐﹀崟
-            if(Constants.equalsInteger(model.getType(),Constants.ZERO )
-                    || Constants.equalsInteger(model.getType(),Constants.TWO)&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details2)){
+            if((Constants.equalsInteger(model.getType(),Constants.ZERO )
+                    || Constants.equalsInteger(model.getType(),Constants.ONE))&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details2)){
                 YwContractDetail ywContractDetail = details2.get(Constants.ZERO);
                 YwContractBill wyBill = new YwContractBill();
                 BeanUtils.copyProperties(model.getWyBillDTO(),wyBill);
@@ -1396,7 +1431,7 @@
                 .selectAs(YwCustomer::getName, YwContract::getRenterName)
                 .selectAs(YwProject::getName, YwContract::getProjectName)
                 .select("t3.realname", YwContract::getCreatorName)
-                .select("(select sum(r.area) from yw_contract_room cr left join yw_room r on r.id = cr.room_id where r.isdeleted=0 and cr.contract_id =t.id)", YwContract::getTotalArea)
+                .select("(select sum(r.RENT_AREA) from yw_contract_room cr left join yw_room r on r.id = cr.room_id where r.isdeleted=0 and cr.contract_id =t.id)", YwContract::getTotalArea)
                 .leftJoin(Company.class, Company::getId, YwContract::getCompanyId)
                 .leftJoin(SystemUser.class, SystemUser::getId, YwContract::getUserId)
                 .leftJoin(SystemUser.class, SystemUser::getId, YwContract::getCreator)
@@ -1457,14 +1492,12 @@
         //鏌ヨ璐﹀崟闆嗗悎
         model.setBillList(ywContractBillMapper.selectJoinList(YwContractBill.class,new MPJLambdaWrapper<YwContractBill>()
                 .selectAll(YwContractBill.class )
-                //.select(" ( select ifnull(sum(case when yw.REVENUE_TYPE = 0 then yw.ACT_RECEIVABLE_FEE  else  -yw.ACT_RECEIVABLE_FEE end),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
                 .select(" ( select ifnull( sum( CASE WHEN t.bill_type = 0 and yw.REVENUE_TYPE = 0 THEN yw.ACT_RECEIVABLE_FEE when  t.bill_type = 0 and yw.REVENUE_TYPE = 1 then -yw.ACT_RECEIVABLE_FEE  when t.bill_type = 1 and yw.REVENUE_TYPE = 0 then -yw.ACT_RECEIVABLE_FEE else  yw.ACT_RECEIVABLE_FEE END),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
                 .eq(  YwContractBill::getContractId,model.getId())
                 .eq(YwContractBill::getIsdeleted,Constants.ZERO)
                 .orderByAsc(YwContractBill::getSortnum,YwContractBill::getCreateDate)));
         for (YwContractBill ywContractBill:model.getBillList()) {
             ywContractBill.setNeedReceivableFee(ywContractBill.getReceivableFee());
-//            ywContractBill.setNeedReceivableFee(ywContractBill.getReceivableFee().subtract(ywContractBill.getActReceivableFee()));
         }
         model.setCanBackRentBills(new ArrayList<>());
         long nowStart = Utils.Date.getStart(date).getTime();
@@ -1574,6 +1607,9 @@
         if (pageWrap.getModel().getCreateDate() != null) {
             queryWrapper.ge(YwContract::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
             queryWrapper.le(YwContract::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getStatusList() != null) {
+            queryWrapper.in(YwContract::getStatus, pageWrap.getModel().getStatusList());
         }
         if (pageWrap.getModel().getEditor() != null) {
             queryWrapper.eq(YwContract::getEditor, pageWrap.getModel().getEditor());
@@ -1712,4 +1748,63 @@
         QueryWrapper<YwContract> wrapper = new QueryWrapper<>(ywContract);
         return ywContractMapper.selectCount(wrapper);
     }
+
+
+    /**
+     * 鍒版湡鍚堝悓 鏈彂璧烽��绉熺殑杩涜鏁版嵁璋冩暣 鎶婂悎鍚屼笅鐨勬埧婧愰噴鏀� 瀹氭椂鏃堕棿闇�瑕佸湪姣忓ぉ鏅氫笂12鐐瑰墠
+     */
+    @Override
+    public void updRoomLeaseNowStatus(){
+
+        //瀹氭椂澶勭悊鍚堝悓宸茶繃鏈�
+        List<YwContract> ywContractList = ywContractMapper.selectList(new QueryWrapper<YwContract>().lambda()
+                .eq(YwContract::getIsdeleted,Constants.ZERO)
+                .in(YwContract::getStatus,Constants.ONE,Constants.ZERO)
+                .apply(" DATE(END_DATE) = CURRENT_DATE ")
+        );
+
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractList)){
+            ywContractMapper.update(new UpdateWrapper<YwContract>()
+                    .lambda()
+                    .set(YwContract::getStatus,Constants.TWO)
+                    .set(YwContract::getEditDate,DateUtil.getCurrDateTime())
+                    .in(YwContract::getId,ywContractList.stream().map(i->i.getId()).collect(Collectors.toList()))
+            );
+
+
+            List<YwContractRoom> contractRoomList = ywContractRoomMapper.selectList(new QueryWrapper<YwContractRoom>().lambda().in(YwContractRoom::getContractId,
+                    ywContractList.stream().map(i->i.getId()).collect(Collectors.toList())));
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(contractRoomList)){
+                //鏇存柊鎴挎簮鏁版嵁涓虹璧佷腑
+                roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ZERO)
+                        .in(YwRoom::getId,contractRoomList.stream().map(i->i.getRoomId()).collect(Collectors.toList()))
+                );
+            }
+        }
+    }
+
+
+    /**
+     * 閫�绉熶腑/宸查��绉熷悎鍚� 鎶婂埌浜嗛��绉熸棩鏈熸椂闂寸殑鏁版嵁 杩涜鎴挎簮閲婃斁 瀹氭椂鏃堕棿闇�瑕佸湪姣忓ぉ鏅氫笂12鐐瑰墠
+     */
+    @Override
+    public void updRentContractStatus(){
+        List<YwContract> ywContractList = ywContractMapper.selectList(new QueryWrapper<YwContract>().lambda()
+                .eq(YwContract::getIsdeleted,Constants.ZERO)
+                .in(YwContract::getStatus,Constants.THREE,Constants.FOUR)
+                .eq(YwContract::getBtDate,DateUtil.getCurrDate())
+        );
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractList)){
+            List<YwContractRoom> contractRoomList = ywContractRoomMapper.selectList(new QueryWrapper<YwContractRoom>().lambda().in(YwContractRoom::getContractId,
+                    ywContractList.stream().map(i->i.getId()).collect(Collectors.toList())));
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(contractRoomList)){
+                //鏇存柊鎴挎簮鏁版嵁涓哄緟绉熻祦
+                roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ZERO)
+                        .in(YwRoom::getId,contractRoomList.stream().map(i->i.getRoomId()).collect(Collectors.toList()))
+                );
+            }
+        }
+    }
+
+
 }
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 dda5508..69ddf41 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
@@ -430,7 +430,7 @@
         ywDeviceStatusDataVO.setAmount(ywDeviceList.size());
         ywDeviceStatusDataVO.setWorkAmount(ywDeviceList.stream().filter(i->Objects.nonNull(i.getStatus())&&Constants.equalsInteger(i.getStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
         ywDeviceStatusDataVO.setExceptionAmount(ywDeviceList.stream().filter(i->Objects.nonNull(i.getStatus())&&Constants.equalsInteger(i.getStatus(),Constants.ONE)).collect(Collectors.toList()).size());
-        ywDeviceStatusDataVO.setErrAmount(ywDeviceList.stream().filter(i->Objects.nonNull(i.getStatus())&&Constants.equalsInteger(i.getStatus(),Constants.THREE)).collect(Collectors.toList()).size());
+        ywDeviceStatusDataVO.setErrAmount(ywDeviceList.stream().filter(i->Objects.nonNull(i.getStatus())&&Constants.equalsInteger(i.getStatus(),Constants.TWO)).collect(Collectors.toList()).size());
         return ywDeviceStatusDataVO;
 
     }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java
index a434cd2..ea498da 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java
@@ -1,6 +1,8 @@
 package com.doumee.service.business.impl;
 
+import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A;
 import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.annotation.excel.ExcelImporter;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
@@ -9,11 +11,14 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.CategoryMapper;
 import com.doumee.dao.business.YwMaterialMapper;
 import com.doumee.dao.business.YwOutinboundMapper;
 import com.doumee.dao.business.YwOutinboundRecordMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.MultifileMapper;
+import com.doumee.dao.system.dto.ImportMaterialDTO;
+import com.doumee.dao.system.dto.ImportSystemUserDTO;
 import com.doumee.dao.system.model.Multifile;
 import com.doumee.service.business.YwMaterialService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -22,16 +27,19 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import javafx.scene.paint.Material;
 import org.apache.commons.lang.StringUtils;
-import org.checkerframework.checker.units.qual.A;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 杩愮淮璧勪骇淇℃伅琛⊿ervice瀹炵幇
@@ -51,6 +59,9 @@
     private YwOutinboundRecordMapper ywOutinboundRecordMapper;
 
     @Autowired
+    private CategoryMapper categoryMapper;
+
+    @Autowired
     private SystemDictDataBiz systemDictDataBiz;
 
     @Override
@@ -67,8 +78,17 @@
         ywMaterial.setId(null);
         if(StringUtils.isBlank(ywMaterial.getCode())){
             //鑷姩鐢熸垚 TODO 瀛樺湪闂
-            Long countCode = ywMaterialMapper.selectCount(new QueryWrapper<YwMaterial>().lambda().eq(YwMaterial::getAutoCode, Constants.ONE));
-            String nextCode = StringUtils.leftPad(Long.toString(countCode + 1),4,"0");
+            YwMaterial lastAutoMaterial = ywMaterialMapper.selectOne(new QueryWrapper<YwMaterial>().lambda().eq(YwMaterial::getAutoCode,Constants.ONE).last("limit 1 "));
+            Long countCode = 0L;
+            String nextCode = StringUtils.leftPad(Long.toString(countCode + 1 ),4,"0");
+            if(Objects.nonNull(lastAutoMaterial)){
+                Long maxCode = Long.valueOf(lastAutoMaterial.getCode().replace("P",""));
+                nextCode = StringUtils.leftPad(Long.toString(maxCode + 1),4,"0");
+                while (ywMaterialMapper.selectCount(new QueryWrapper<YwMaterial>().lambda().eq(YwMaterial::getCode, "P"+nextCode))>Constants.ZERO){
+                    countCode = countCode + 1 ;
+                    nextCode = StringUtils.leftPad(Long.toString(countCode),4,"0");
+                }
+            }
             ywMaterial.setCode("P"+nextCode);
             ywMaterial.setAutoCode(Constants.ONE);
         }else{
@@ -247,4 +267,67 @@
         QueryWrapper<YwMaterial> wrapper = new QueryWrapper<>(ywMaterial);
         return ywMaterialMapper.selectCount(wrapper);
     }
+
+
+    @Override
+    public Integer importMaterialBatch(MultipartFile file,LoginUserInfo loginUserInfo) {
+        try {
+            ExcelImporter ie = new ExcelImporter(file, 0, 0);
+            List<ImportMaterialDTO> dataList = ie.getDataList(ImportMaterialDTO.class, null);
+            if (CollectionUtils.isEmpty(dataList)) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�");
+            }
+
+            List<Category> allCategory = categoryMapper.selectList(new QueryWrapper<Category>().lambda()
+                    .eq(Category::getIsdeleted,Constants.ZERO).eq(Category::getIsdeleted,Constants.ZERO)
+                    .eq(Category::getType,Constants.SEVEN)
+            );
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(allCategory)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏃犲垎绫诲熀纭�鏁版嵁锛�");
+            }
+            List<Category> categoryList = allCategory.stream().filter(i->Objects.isNull(i.getParentId())).collect(Collectors.toList());
+            for (Category category: categoryList) {
+                category.setChildCategoryList(
+                        allCategory.stream().filter(i->Objects.nonNull(i.getParentId())&&Constants.equalsInteger(i.getParentId(),category.getId())).collect(Collectors.toList())
+                );
+            }
+            List<YwMaterial> ywMaterialList = new ArrayList<>();
+            for (int i = 0; i < dataList.size(); i++) {
+                ImportMaterialDTO importMaterialDTO = dataList.get(i);
+                if(Objects.isNull(importMaterialDTO)
+                    || StringUtils.isBlank(importMaterialDTO.getName())
+                    || StringUtils.isBlank(importMaterialDTO.getCategoryName())
+                    || StringUtils.isBlank(importMaterialDTO.getCategoryChildName())
+                    || StringUtils.isBlank(importMaterialDTO.getQrcode())
+                ){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�"+(i+1)+"琛屽繀濉」缂哄け锛�");
+                }
+                YwMaterial ywMaterial = new YwMaterial();
+                BeanUtils.copyProperties(importMaterialDTO,ywMaterial);
+                Optional<Category> categoryOptional = categoryList.stream().filter(j->j.getName().equals(importMaterialDTO.getCategoryName())).findAny();
+                if(categoryOptional.isPresent()){
+                    Category category = categoryOptional.get();
+                    ywMaterial.setParentCateId(category.getId());
+                    Optional<Category> childCategoryOptional = category.getChildCategoryList().stream().filter(j->j.getName().equals(importMaterialDTO.getCategoryChildName())).findAny();
+                    if(childCategoryOptional.isPresent()){
+                        ywMaterial.setCateId(childCategoryOptional.get().getId());
+                    }else{
+                        throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�"+(i+1)+"琛岀墿鏂欏瓙鍒嗙被鏈煡璇㈠埌锛�");
+                    }
+                }else{
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�"+(i+1)+"琛岀墿鏂欏垎绫绘湭鏌ヨ鍒帮紒");
+                }
+                ywMaterialList.add(ywMaterial);
+            }
+
+            for (YwMaterial ywMaterial:ywMaterialList) {
+                ywMaterial.setLoginUserInfo(loginUserInfo);
+                this.create(ywMaterial);
+            }
+        } catch (Exception e) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),e.getMessage());
+
+        }
+        return null;
+    }
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java
index 203c692..42437cd 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java
@@ -95,7 +95,7 @@
     public List<YwOutinboundRecord> verifyData(YwOutinbound ywOutinbound){
         if(Objects.isNull(ywOutinbound)
                 || Objects.isNull(ywOutinbound.getType())
-//                || (Objects.nonNull(ywOutinbound.getType()) && (!(ywOutinbound.getType() == Constants.ZERO || ywOutinbound.getType() == Constants.ONE)))
+                || ((ywOutinbound.getType() >= 5 && ywOutinbound.getType() <= 9 ) && Objects.isNull(ywOutinbound.getOutUserId()) )
                 || Objects.isNull(ywOutinbound.getWarehouseId())
                 || Objects.isNull(ywOutinbound.getDoneDate())
                 || com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(ywOutinbound.getRecordList())
@@ -158,9 +158,9 @@
                 //鍑哄簱
                 if(Objects.isNull(ywStock) || ywStock.getStock().compareTo(ywOutinboundRecord.getStock()) < Constants.ZERO){
                     throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), ywMaterial.getName() + "搴撳瓨涓嶈冻锛岃鍒锋柊閲嶈瘯");
-                }else if(ywStock.getStock().compareTo(ywOutinboundRecord.getStock()) == Constants.ZERO){
+                }/*else if(ywStock.getStock().compareTo(ywOutinboundRecord.getStock()) == Constants.ZERO){
                     ywStockMapper.deleteById(ywStock.getId());
-                }else{
+                }*/else{
                     ywStockMapper.update(new UpdateWrapper<YwStock>().lambda()
                             .setSql(" stock = ( stock - "+ywOutinboundRecord.getStock()+") ")
                             .set(YwStock::getEditDate, DateUtil.getCurrDateTime())
@@ -252,22 +252,29 @@
         }
         List<Integer> typeList  = Constants.ywOutInType.getAllTypeKey(model.getInOut());
         queryWrapper.selectAll(YwOutinbound.class)
-                .selectAs(SystemUser::getRealname,YwOutinbound::getCreateUserName)
+                .select(" s1.realname  ",YwOutinbound::getCreateUserName)
+                .select(" s2.realname  ",YwOutinbound::getOutUserName)
                 .selectAs(YwWarehouse::getName,YwOutinbound::getWarehouseName)
-                .leftJoin(SystemUser.class,SystemUser::getId,YwOutinbound::getCreator)
                 .leftJoin(YwWarehouse.class,YwWarehouse::getId,YwOutinbound::getWarehouseId)
+                .leftJoin("system_user s1 on t.creator = s1.id")
+                .leftJoin("system_user s2 on t.out_user_id = s2.id")
                 .like(StringUtils.isNotBlank(model.getCode()),YwOutinbound::getCode,model.getCode())
                 .eq(Objects.nonNull(model.getType()),YwOutinbound::getType,model.getType())
                 .eq(Objects.nonNull(model.getWarehouseId()),YwOutinbound::getWarehouseId,model.getWarehouseId())
                 .in(Objects.nonNull(model.getInOut()),YwOutinbound::getType,typeList)
         ;
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(pageWrap.getSorts())){
+            for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+                if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                    queryWrapper.orderByDesc(sortData.getProperty());
+                } else {
+                    queryWrapper.orderByAsc(sortData.getProperty());
+                }
             }
+        }else{
+            queryWrapper.orderByDesc(YwOutinbound::getCode);
         }
+
         IPage iPage = ywOutinboundMapper.selectJoinPage(page,YwOutinbound.class,queryWrapper);
         if(Objects.nonNull(iPage.getRecords())){
             iPage.setRecords(this.getDetailData(iPage.getRecords()));
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 c8c5326..cb32343 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
@@ -123,7 +123,7 @@
         );
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywPatrolSchemeList)){
             for (YwPatrolScheme ywPatrolScheme:ywPatrolSchemeList) {
-                this.createTask(new Date(),ywPatrolScheme);
+                this.createTask(DateUtil.getXDayAfterDate(new Date(),2),ywPatrolScheme);
             }
         }
     }
@@ -301,6 +301,7 @@
         ywPatrolScheme.setEditDate(new Date());
         ywPatrolScheme.setEditor(loginUserInfo.getId());
         ywPatrolSchemeMapper.updateById(ywPatrolScheme);
+        this.createThreeDaysData(ywPatrolScheme);
     }
 
     @Override
@@ -356,15 +357,9 @@
         YwPatrolScheme model = pageWrap.getModel();
         queryWrapper.selectAll(YwPatrolScheme.class)
                 .select(" t2.realName as createUserName ")
-//                .select(" t1.realName as userName ")
-//                .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolScheme::getUserIds)
                 .leftJoin(" system_user t2 on t.creator =  t2.id  ")
                 .eq(YwPatrolScheme::getIsdeleted,Constants.ZERO)
                 .like(StringUtils.isNotBlank(model.getTitle()),YwPatrolScheme::getTitle,model.getTitle())
-                //鏌ヨ鏈夋椂娈典氦闆嗙殑鏁版嵁
-              /*  .apply(Objects.nonNull(model.getStartDate())&&Objects.nonNull(model.getEndDate()),
-                        " t.START_DATE <= '"+pageWrap.getModel().getEndDate()+"' or t.END_DATE >= '"+pageWrap.getModel().getStartDate()+"' "
-                )*/
                 .ge( model.getStartDate()!=null,YwPatrolScheme::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()))
                 .le(Objects.nonNull(model.getEndDate()),YwPatrolScheme::getStartDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()))
                 .ge(Objects.nonNull(model.getStartDateSec()),YwPatrolScheme::getEndDate, Utils.Date.getStart(pageWrap.getModel().getStartDateSec()))
@@ -405,21 +400,24 @@
             ywPatrolScheme.setTimeOutTaskNum(Constants.ZERO);
             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(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)).collect(Collectors.toList()).size()>Constants.ZERO){
+        if(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)||Constants.equalsInteger(i.getStatus(),Constants.ZERO)).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())){
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
index b1fbb04..963f7b8 100644
--- 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
@@ -28,9 +28,11 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 杩愮淮宸℃浠诲姟 - 宸℃鐐逛俊鎭〃Service瀹炵幇
@@ -134,7 +136,7 @@
                 .selectAs(SystemUser::getRealname,YwPatrolTaskRecord::getRealname)
 
                 .selectAs(YwPatrolScheme::getTitle,YwPatrolTaskRecord::getSchemeTitle)
-                .selectAs(YwPatrolTask::getTitle,YwPatrolTaskRecord::getTaskCode)
+                .selectAs(YwPatrolTask::getCode,YwPatrolTaskRecord::getTaskCode)
                 .selectAs(YwPatrolTask::getStartDate,YwPatrolTaskRecord::getStartDate)
                 .selectAs(YwPatrolTask::getEndDate,YwPatrolTaskRecord::getEndDate)
 
@@ -213,7 +215,8 @@
         if(Objects.isNull(ywPatrolScheme)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌宸℃璁″垝淇℃伅");
         }
-        if(!ywPatrolScheme.getUserIds().equals(loginUserInfo.getId().toString())){
+        List<String>  userIdList = Arrays.asList(ywPatrolScheme.getUserIds().split(","));
+        if(userIdList.stream().filter(i->Constants.equalsInteger(Integer.valueOf(i),loginUserInfo.getId())).collect(Collectors.toList()).size()<=0){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"闈炴偍鐨勫贰妫�浠诲姟鏃犳硶杩涜澶勭悊");
         }
         YwPatrolTask ywPatrolTask = ywPatrolTaskMapper.selectById(model.getTaskId());
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 104c528..31722e2 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
@@ -85,6 +85,7 @@
                 .selectAll(YwPatrolTask.class)
                 .selectAs(YwPatrolScheme::getCode,YwPatrolTask::getPlanCode)
                 .selectAs(YwPatrolScheme::getTitle,YwPatrolTask::getPlanTitle)
+                .selectAs(YwPatrolScheme::getUserIds,YwPatrolTask::getUserIds)
                 .selectAs(SystemUser::getRealname,YwPatrolTask::getUserName)
                 .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id  and ytr.ISDELETED = 0  ) ",YwPatrolTask::getPatrolNum)
                 .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id  and ytr.STATUS = 1 and ytr.ISDELETED = 0) ",YwPatrolTask::getFinishNum)
@@ -139,6 +140,7 @@
         queryWrapper.selectAll(YwPatrolTask.class)
                 .selectAs(YwPatrolScheme::getCode,YwPatrolTask::getPlanCode)
                 .selectAs(YwPatrolScheme::getTitle,YwPatrolTask::getPlanTitle)
+                .selectAs(YwPatrolScheme::getUserIds,YwPatrolTask::getUserIds)
                 .selectAs(SystemUser::getRealname,YwPatrolTask::getUserName)
                 .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id  and ytr.ISDELETED = 0  ) ",YwPatrolTask::getPatrolNum)
                 .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id  and ytr.STATUS = 1 and ytr.ISDELETED = 0) ",YwPatrolTask::getFinishNum)
@@ -146,7 +148,7 @@
                 .leftJoin(YwPatrolScheme.class,YwPatrolScheme::getId,YwPatrolTask::getSchemeId)
                 .eq(YwPatrolTask::getIsdeleted, Constants.ZERO)
                 .eq(Objects.nonNull(model.getStatus()) && !Constants.equalsInteger(model.getStatus(),Constants.TWO),YwPatrolTask::getStatus, model.getStatus())
-                .eq(Objects.nonNull(model.getDealUserId()),YwPatrolScheme::getUserIds, model.getDealUserId())
+                .apply(Objects.nonNull(model.getDealUserId())," find_in_set("+model.getDealUserId()+",t2.USER_IDS) ")
                 .apply(Objects.nonNull(model.getStatus()) && Constants.equalsInteger(model.getStatus(),Constants.TWO)," t.status = 1 and t.END_DATE > now() ")
                 .apply(StringUtils.isNotBlank(model.getQueryStatus())," find_in_set(t.status ,'"+model.getQueryStatus()+"') ")
                 .like(StringUtils.isNotBlank(model.getPlanTitle()),YwPatrolScheme::getTitle,model.getPlanTitle())
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java
index 36cda9c..ee5fbf6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java
@@ -296,13 +296,7 @@
 
         List<YwRoom>  ywRoomList = ywRoomMapper.selectJoinList(YwRoom.class,new MPJLambdaWrapper<YwRoom>()
                 .selectAll(YwRoom.class)
-//                        .select("  ( SELECT count(1) FROM  yw_contract y1 " +
-//                                " left join yw_contract_room y2 on y1.id = y2.contract_id " +
-//                                " where 1 = 1 and y2.type = 0  and y1.`STATUS` in( 0,1,2) " +
-//                                " and y1.START_DATE <  now() and y1.END_DATE >  now() and y2.ROOM_ID = yw_room.id ) as investmentStatus ")
-                .select(" ifnull( ( select case when y1.status = 3 then now() BETWEEN y1.START_DATE and y1.BT_DATE else now() BETWEEN y1.START_DATE and y1.END_DATE END  " +
-                        "from yw_contract y1 left join yw_contract_room y2 on y1.id = y2.CONTRACT_ID and y2.TYPE = 0  " +
-                        "where y1.`STATUS` <> 4  and y2.room_id = t.id order by y1.create_date desc  limit 1  ) ,0) ",YwRoom::getLeaseStatus)
+                .select(" ifnull( (  case when t.IS_INVESTMENT = 0 then 2 else t.LEASE_NOW_STATUS end  ) ,0) ",YwRoom::getLeaseStatus)
                 .eq(YwRoom::getIsdeleted,Constants.ZERO)
                 .eq(YwRoom::getStatus,Constants.ZERO)
                 .eq(YwRoom::getIsInvestment,Constants.ONE)
@@ -313,7 +307,7 @@
                         "  ) ")
                 .apply(Objects.nonNull(dataDTO)&&Objects.nonNull(dataDTO.getStartDate())&&Objects.nonNull(dataDTO.getEndDate())," id not in  (" +
                         " SELECT y2.room_id FROM  yw_contract y1 left join yw_contract_room y2 on y1.id = y2.contract_id where 1 = 1 and y1.`STATUS` = 3 " +
-                        " and y1.START_DATE < '"+dataDTO.getEndDate()+" 00:00:00' and y1.BT_DATE > '"+ dataDTO.getStartDate() +"  00:00:00' " +
+                        " and y1.START_DATE < '"+dataDTO.getEndDate()+" 00:00:00' and y1.BT_DATE >= '"+ dataDTO.getStartDate() +"  00:00:00' " +
                         "  ) ")
                 .orderByAsc(YwRoom::getRoomNum)
         );
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java
index 1b7a0a9..65e696b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java
@@ -67,6 +67,7 @@
         model.setStatus(Constants.ZERO);
         model.setEditDate(model.getCreateDate());
         model.setEditor(model.getCreator());
+        model.setLeaseNowStatus(Constants.ZERO);
         ywRoomMapper.insert(model);
         return model.getId();
     }
@@ -138,9 +139,10 @@
         queryWrapper.selectAll(YwRoom.class )
                 .selectAs(YwProject::getName,YwRoom::getProjectName)
                 .selectAs(YwFloor::getName,YwRoom::getFloorName)
-                .select(" ifnull( ( select case when y1.status = 3 then now() BETWEEN y1.START_DATE and y1.BT_DATE else now() BETWEEN y1.START_DATE and y1.END_DATE END  " +
-                        "from yw_contract y1 left join yw_contract_room y2 on y1.id = y2.CONTRACT_ID and y2.TYPE = 0  " +
-                        "where y1.`STATUS` <> 4  and y2.room_id = t.id order by y1.create_date desc  limit 1  ) ,0) ",YwRoom::getLeaseStatus)
+//                .select(" ifnull( ( select case when y1.status = 3 then now() BETWEEN y1.START_DATE and y1.BT_DATE else now() BETWEEN y1.START_DATE and y1.END_DATE END  " +
+//                        "from yw_contract y1 left join yw_contract_room y2 on y1.id = y2.CONTRACT_ID and y2.TYPE = 0  " +
+//                        "where y1.`STATUS` <> 4  and y2.room_id = t.id order by y1.create_date desc  limit 1  ) ,0) ",YwRoom::getLeaseStatus)
+                .select(" ifnull( (  case when t.IS_INVESTMENT = 0 then 2 else t.LEASE_NOW_STATUS end  ) ,0) ",YwRoom::getLeaseStatus)
                 .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
                 .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
                 .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId)
@@ -173,9 +175,10 @@
                 .selectAs(YwProject::getName,YwRoom::getProjectName)
                 .selectAs(YwFloor::getName,YwRoom::getFloorName)
                 .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
-                .select(" ifnull( ( select case when y1.status = 3 then now() BETWEEN y1.START_DATE and y1.BT_DATE else now() BETWEEN y1.START_DATE and y1.END_DATE END  " +
-                        "from yw_contract y1 left join yw_contract_room y2 on y1.id = y2.CONTRACT_ID and y2.TYPE = 0  " +
-                        "where y1.`STATUS` <> 4  and y2.room_id = t.id order by y1.create_date desc  limit 1  ) ,0) ",YwRoom::getLeaseStatus)
+//                .select(" ifnull( ( select case when y1.status = 3 then now() BETWEEN y1.START_DATE and y1.BT_DATE else now() BETWEEN y1.START_DATE and y1.END_DATE END  " +
+//                        "from yw_contract y1 left join yw_contract_room y2 on y1.id = y2.CONTRACT_ID and y2.TYPE = 0  " +
+//                        "where y1.`STATUS` <> 4  and y2.room_id = t.id order by y1.create_date desc  limit 1  ) ,0) ",YwRoom::getLeaseStatus)
+                .select(" ifnull( (  case when t.IS_INVESTMENT = 0 then 2 else t.LEASE_NOW_STATUS end  ) ,0) ",YwRoom::getLeaseStatus)
                 .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
                 .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId)
                 .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor);
@@ -245,11 +248,11 @@
         }
         queryWrapper.orderByAsc(YwRoom::getRoomNum);
         IPage<YwRoom> iPage = ywRoomMapper.selectJoinPage(page,YwRoom.class, queryWrapper);
-        for (YwRoom ywRoom:iPage.getRecords()) {
-            if(Constants.equalsInteger(ywRoom.getIsInvestment(),Constants.ZERO)){
-                ywRoom.setLeaseStatus(Constants.TWO);
-            }
-        }
+//        for (YwRoom ywRoom:iPage.getRecords()) {
+//            if(Constants.equalsInteger(ywRoom.getIsInvestment(),Constants.ZERO)){
+//                ywRoom.setLeaseStatus(Constants.TWO);
+//            }
+//        }
         return PageData.from(iPage);
     }
 
@@ -302,10 +305,34 @@
                         .eq(YwContractRoom::getType,Constants.ZERO)
                         .eq(YwContractRoom::getRoomId,ywRoom.getId())
                         .orderByDesc(YwContract::getStartDate)
+                        .orderByDesc(YwContract::getId)
                 );
                 if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(roomContractList)){
                     roomStatusDataVO.setRoomStatus(Constants.ZERO);
-                    roomStatusDataVO.setFreeDayAmount(Constants.ZERO);
+                    //鏌ヨ鏄惁鏈夊凡閫�绉熷悎鍚�
+                    List<YwContract> roomRentContractList =   ywContractMapper.selectJoinList(YwContract.class,new MPJLambdaWrapper<YwContract>()
+                            .selectAll(YwContract.class)
+                            .selectAs(YwCustomer::getName,YwContract::getRenterName)
+                            .leftJoin(YwContractRoom.class,YwContractRoom::getContractId,YwContract::getId)
+                            .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
+                            .eq(YwContract::getIsdeleted,Constants.ZERO)
+                            .eq(YwContract::getStatus,Constants.FOUR)
+                            .eq(YwContractRoom::getType,Constants.ZERO)
+                            .eq(YwContractRoom::getRoomId,ywRoom.getId())
+                            .orderByDesc(YwContract::getStartDate)
+                            .orderByDesc(YwContract::getId)
+                    );
+                    if(CollectionUtils.isEmpty(roomRentContractList)){
+                        roomStatusDataVO.setFreeDayAmount(Constants.ZERO);
+                    }else{
+                        YwContract ywContract = roomRentContractList.get(Constants.ZERO);
+                        //鏌ヨ閫�绉熸棩鏈熷拰褰撳墠鏃ユ湡鐩稿樊澶╂暟
+                        Integer btDays = DateUtil.daysBetweenDates(new Date(),ywContract.getBtDate());
+                        if(btDays>=Constants.ZERO){
+                            roomStatusDataVO.setFreeDayAmount(btDays);
+                        }
+                    }
+
                 }else{
                     YwContract ywContract = roomContractList.get(Constants.ZERO);
                     //鍚堝悓鐘舵�� 0寰呮墽琛� 1鎵ц涓� 2宸插埌鏈� 3閫�绉熶腑 4宸查��绉�
@@ -397,7 +424,7 @@
                 .select(" ( select  ifnull(sum(yr.RENT_AREA),0)  from yw_contract_room y left join yw_room yr on y.room_id = yr.id  where y.type = 0 and y.CONTRACT_ID = t.id ) " , YwContract::getTotalArea)
                 .select(" ( select  ifnull(sum(y.TOTLE_FEE),0)  from yw_contract_bill y   where y.CONTRACT_ID = t.id and y.type = 0 and y.COST_TYPE=0 and y.BILL_TYPE = 0  ) " , YwContract::getTotalFee)
                 .eq(YwContract::getIsdeleted,Constants.ZERO)
-                .in(YwContract::getStatus,Constants.ONE,Constants.TWO,Constants.THREE)
+                .in(YwContract::getStatus,Constants.ZERO,Constants.ONE,Constants.TWO,Constants.THREE)
                 .apply(Objects.nonNull(model.getBuildingId()),
                         " t.id in ( select y.CONTRACT_ID from yw_contract_room y left join yw_room yr on y.room_id = yr.id  where y.type = 0 and  yr.BUILDING_ID = "+model.getBuildingId()+" ) ")
                 .apply(Objects.nonNull(model.getProjectId()),
@@ -434,7 +461,8 @@
                 .eq(Objects.nonNull(model.getBuildingId()),YwRoom::getBuildingId,model.getBuildingId())
                 .eq(Objects.nonNull(model.getProjectId()),YwRoom::getProjectId,model.getProjectId())
                 .in(YwContractRoom::getContractId,contractId)
-                .orderByAsc(YwRoom::getSortnum)
+                .last(" group by t.id  " +
+                        "ORDER BY t.sortnum ASC  ")
         );
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywLeaseRoomList)){
             ywRoomContractDataVO.setLeaseArea(
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java
index b04ef29..a1531fe 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java
@@ -195,6 +195,7 @@
                 .set(YwStocktakingRecord::getActStock,ywStocktakingRecord.getActStock())
                 .set(YwStocktakingRecord::getUserId,loginUserInfo.getId())
                 .set(YwStocktakingRecord::getPlanDate, DateUtil.getCurrDateTime())
+                .set(StringUtils.isNotBlank(ywStocktakingRecord.getRemark()),YwStocktakingRecord::getRemark, ywStocktakingRecord.getRemark())
                 .eq(YwStocktakingRecord::getId,ywStocktakingRecord.getId())
         );
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java
index 76ba25d..3ca923e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java
@@ -442,7 +442,7 @@
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(recordList)){
             //鍚堣鐩樼偣鏁版嵁
             ywStocktaking.setFinishAmount(recordList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)).collect(Collectors.toList()).size());
-            ywStocktaking.setUnFinishAmount(recordList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
+            ywStocktaking.setUnFinishAmount(recordList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.TWO)).collect(Collectors.toList()).size());
             ywStocktaking.setEqualAmount(recordList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)&&Constants.equalsInteger(i.getType(),Constants.ZERO)).collect(Collectors.toList()).size());
             ywStocktaking.setLossAmount(recordList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)&&Constants.equalsInteger(i.getType(),Constants.ONE)).collect(Collectors.toList()).size());
             ywStocktaking.setProfitAmount(recordList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)&&Constants.equalsInteger(i.getType(),Constants.TWO)).collect(Collectors.toList()).size());
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwTempConfigServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwTempConfigServiceImpl.java
index 6568f12..c68200e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwTempConfigServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwTempConfigServiceImpl.java
@@ -232,8 +232,6 @@
                 .set(YwTempConfig::getUrl,leasesTemp.getUrl())
                 .eq(YwTempConfig::getId,leasesTemp.getId())
         );
-
-
         YwTempConfig otherTemp = ywCallTempDataDTO.getOtherTemp();
         if(Objects.isNull(otherTemp.getId())
                 || Objects.isNull(otherTemp.getTitle())
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java
index cf15928..8e969d7 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java
@@ -132,7 +132,7 @@
         if(ywStockMapper.selectCount(new QueryWrapper<YwStock>().lambda().eq(YwStock::getIsdeleted,Constants.ZERO)
                 .gt(YwStock::getStock,Constants.ZERO)
                 .eq(YwStock::getWarehouseId,ywWarehouse.getId()))>Constants.ZERO){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠浠撳簱鍐呮湁搴撳瓨鐨勭墿鏂欙紝涓嶅彲鍒犻櫎");
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠浠撳簱鍐呮湁搴撳瓨鐨勭墿鏂欙紝涓嶅彲绂佺敤");
         };
         ywWarehouseMapper.update(new UpdateWrapper<YwWarehouse>().lambda().eq(YwWarehouse::getId,ywWarehouse.getId()).set(YwWarehouse::getStatus,ywWarehouse.getStatus()));
     }
diff --git a/server/visits/dmvisit_service/src/main/resources/application-test.yml b/server/visits/dmvisit_service/src/main/resources/application-test.yml
index a8d00a5..5e192c8 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-test.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-test.yml
@@ -28,7 +28,7 @@
 debug_model: true
 
 ########################鍘嬬缉鍖呮枃浠朵綅缃�  ########################
-zip_file_path: d://
+zip_file_path: /usr/local/static_resources/fn/
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
   org-user-data-origin: 0 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺

--
Gitblit v1.9.3