Преглед на файлове

refactor(contract): 重构合同签订逻辑

- 优化了合同签订流程,增加了合同信息的保存- 更新了异常处理方式,提高了系统稳定性
- 调整了房屋状态更新逻辑,暂时保留空闲状态
- 租客信息的保存逻辑也被暂时保留- 修复了一些代码格式和类型转换问题
nahida преди 10 месеца
родител
ревизия
eb7b1b4960

+ 4 - 4
src/main/java/com/zksy/controller/property/dto/ASimplifiedHouseInfoDto.java

@@ -15,10 +15,10 @@ public class ASimplifiedHouseInfoDto {
     private String building;
     private String floor;
     private String sortSearch;
-    private String rentRangeMin;
-    private String rentRangeMax;
-    private String areaMin;
-    private String areaMax;
+    private Integer rentRangeMin;
+    private Integer rentRangeMax;
+    private Integer areaMin;
+    private Integer areaMax;
     private Integer pageNum;
     private Integer pageSize;
 }

+ 1 - 0
src/main/java/com/zksy/property/domain/vo/HouseInfoVo.java

@@ -63,6 +63,7 @@ public class HouseInfoVo {
         private String ContractExpirationDate;//到期日期
         private String ContractDeposit;//押金
         private String ContractStatus;//合同状态
+        private String ContractOriginalUrl;//原合同地址
     }
 
 }

+ 46 - 8
src/main/java/com/zksy/property/service/impl/AContractInfoServiceImpl.java

@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zksy.property.domain.AContractInfo;
 import com.zksy.property.domain.AHouseInfoDetail;
 import com.zksy.property.domain.ASimplifiedHouseInfo;
-import com.zksy.property.domain.ATenantInfo;
 import com.zksy.property.domain.bo.*;
 import com.zksy.property.domain.dto.ContractFormDTO;
 import com.zksy.property.factory.ContractFactory;
@@ -79,7 +78,7 @@ public class AContractInfoServiceImpl extends ServiceImpl<AContractInfoMapper, A
         ASimplifiedHouseInfo aSimplifiedHouseInfo = aSimplifiedHouseInfoService.getById(dto.getHouseId());
 
         if (!"空闲".equals(aSimplifiedHouseInfo.getStatus())) {
-            throw new RuntimeException("此房屋已存在合同");
+            throw new RuntimeException("此房屋已");
         }
 
         Contract baseContract = ContractFactory.createContract(aSimplifiedHouseInfo.getAssetType());
@@ -87,20 +86,59 @@ public class AContractInfoServiceImpl extends ServiceImpl<AContractInfoMapper, A
         RentalTempBo bo = new RentalTempBo();
         var resPath = "";
 
-
+        AContractInfo contractInfo = new AContractInfo();
         var contractNumber = generateAssetNumber();
         if (baseContract instanceof ContractA) {
-            processContractA((ContractA) baseContract, aSimplifiedHouseInfo, houseInfoDetail, bo);
+            var contractA = (ContractA) baseContract;
+            processContractA(contractA , aSimplifiedHouseInfo, houseInfoDetail, bo);
             resPath = fillContractData(bo, aSimplifiedHouseInfo.getAssetType());
+            contractInfo.setContractNumber(contractNumber);
+            contractInfo.setContractDate(LocalDate.parse(contractA.getTenantTimeStart()));
+            contractInfo.setContractTime(contractA.getTenantTime());
+            contractInfo.setContractExpirationDate(LocalDate.parse(contractA.getTenantTimeEnd()));
+            contractInfo.setContractDeposit(new BigDecimal(contractA.getTenantDepositAmount()));
+            contractInfo.setContractStatus("有效");
+            contractInfo.setSimplifiedHouseId(dto.getHouseId());
+            contractInfo.setOriginalContractUrl(resPath);
+            contractInfo.setSignContractUrl(null);
+            contractInfo.setCreateTime(LocalDateTime.now());
+            contractInfo.setUpdateTime(LocalDateTime.now());
+            this.save(contractInfo);
         } else if (baseContract instanceof ContractB) {
-            processContractB((ContractB) baseContract, aSimplifiedHouseInfo, houseInfoDetail, bo);
+            var contractB = (ContractB) baseContract;
+            processContractB(contractB, aSimplifiedHouseInfo, houseInfoDetail, bo);
             resPath = fillContractData(bo, aSimplifiedHouseInfo.getAssetType());
+            contractInfo.setContractNumber(contractNumber);
+            contractInfo.setContractDate(LocalDate.parse(contractB.getLeaseStartDate()));
+            contractInfo.setContractTime(contractB.getLeaseTermYears());
+            contractInfo.setContractExpirationDate(LocalDate.parse(contractB.getLeaseEndDate()));
+            contractInfo.setContractDeposit(new BigDecimal(contractB.getDepositAmount()));
+            contractInfo.setContractStatus("有效");
+            contractInfo.setSimplifiedHouseId(dto.getHouseId());
+            contractInfo.setOriginalContractUrl(resPath);
+            contractInfo.setSignContractUrl(null);
+            contractInfo.setCreateTime(LocalDateTime.now());
+            contractInfo.setUpdateTime(LocalDateTime.now());
+            this.save(contractInfo);
         } else if (baseContract instanceof ContractC) {
-            processContractC((ContractC) baseContract, bo,contractNumber);
+            var contractC = (ContractC) baseContract;
+            processContractC(contractC, bo,contractNumber);
             resPath = fillContractData(bo, aSimplifiedHouseInfo.getAssetType());
+            contractInfo.setContractNumber(contractNumber);
+            contractInfo.setContractDate(LocalDate.parse(contractC.getLeaseStartDate()));
+            contractInfo.setContractTime(contractC.getLeaseTermMonths());
+            contractInfo.setContractExpirationDate(LocalDate.parse(contractC.getLeaseEndDate()));
+            contractInfo.setContractDeposit(new BigDecimal(contractC.getDepositAmount()));
+            contractInfo.setContractStatus("有效");
+            contractInfo.setSimplifiedHouseId(dto.getHouseId());
+            contractInfo.setOriginalContractUrl(resPath);
+            contractInfo.setSignContractUrl(null);
+            contractInfo.setCreateTime(LocalDateTime.now());
+            contractInfo.setUpdateTime(LocalDateTime.now());
+            this.save(contractInfo);
         }
 
-        aSimplifiedHouseInfo.setStatus("已租");
+        /*aSimplifiedHouseInfo.setStatus("已租");
         aSimplifiedHouseInfoService.updateById(aSimplifiedHouseInfo);
 
         ATenantInfo aTenantInfo = new ATenantInfo();
@@ -113,7 +151,7 @@ public class AContractInfoServiceImpl extends ServiceImpl<AContractInfoMapper, A
         aTenantInfo.setSimplifiedHouseId(dto.getHouseId());
         aTenantInfo.setCreateTime(LocalDateTime.now());
         aTenantInfo.setUpdateTime(LocalDateTime.now());
-        aTenantInfoService.save(aTenantInfo);
+        aTenantInfoService.save(aTenantInfo);*/
 
         return resPath;
     }

+ 2 - 0
src/main/java/com/zksy/property/service/impl/ASimplifiedHouseInfoServiceImpl.java

@@ -37,6 +37,7 @@ public class ASimplifiedHouseInfoServiceImpl extends ServiceImpl<ASimplifiedHous
         queryWrapper.like(building != null,ASimplifiedHouseInfo::getBuilding,building);
         queryWrapper.like(houseName != null,ASimplifiedHouseInfo::getHouseName,houseName);
         queryWrapper.like(status != null,ASimplifiedHouseInfo::getStatus,status);
+        queryWrapper.orderByDesc(ASimplifiedHouseInfo::getCreateTime);
         return this.page(page,queryWrapper);
     }
 
@@ -220,6 +221,7 @@ public class ASimplifiedHouseInfoServiceImpl extends ServiceImpl<ASimplifiedHous
             contract.setContractExpirationDate(formatDate(contractInfo.getContractExpirationDate()));
             contract.setContractDeposit(contractInfo.getContractDeposit().toString());
             contract.setContractStatus(contractInfo.getContractStatus());
+            contract.setContractOriginalUrl(contractInfo.getSignContractUrl());
         }
 
         return contract;

+ 2 - 2
src/main/java/com/zksy/utils/CommonExceptionAdvice.java

@@ -57,8 +57,8 @@ public class CommonExceptionAdvice {
 
     @ExceptionHandler(Exception.class)
     public Object handleRuntimeException(Exception e) {
-        return AjaxResult.error(e.getCause().getMessage());
-//        return processResponse(new CommonException("服务器内部异常", 500));
+        log.error("服务器内部异常 -> ", e);
+        return AjaxResult.error(e.getMessage() != null ? e.getMessage() : "服务器内部异常");
     }
 
     private ResponseEntity<AjaxResult> processResponse(CommonException e){

+ 11 - 2
src/test/java/com/zksy/property/service/impl/AContractInfoServiceImplTest.java

@@ -23,14 +23,22 @@ class AContractInfoServiceImplTest {
         var map = new HashMap<String, Object>();
         map.put("tenantName", "123");
         map.put("landlordName", "123");
-        map.put("tenantTimeStart", "123");
+        map.put("tenantTimeStart", "2025-07-17");
         map.put("tenantTime", "123");
-        map.put("tenantTimeEnd", "123");
+        map.put("tenantTimeEnd", "2028-07-17");
         map.put("tenantRent", "123");
         map.put("tenantDeposit", "123");
         map.put("tenantDepositAmount", "123");
         dto.setContractData(map);
 
+        var obj = new ContractFormDTO.RentalInfo();
+        obj.setRentalName("刘昊林");
+        obj.setRentalIdCard("123456789");
+        obj.setRentalPhone("456789123");
+        obj.setRentalTimeStart("2025-07-17");
+        obj.setRentalTime("18个月");
+        obj.setRentalRect("9.9");
+        dto.setRentalInfo(obj);
         aContractInfoService.signContract(dto);
     }
 
@@ -119,4 +127,5 @@ class AContractInfoServiceImplTest {
             dto.setContractData(leaseMap);
         aContractInfoService.signContract(dto);
     }
+
 }