Jelajahi Sumber

feat(property): 新增房间和户型相关功能

- 新增房间和户型的 CRUD 接口和实现类
- 添加房间和户型的数据模型和映射文件
- 实现房间和户型的批量操作功能
- 添加文件上传和下载功能
- 优化数据库字段命名,使用 LocalDate 替代 Date
- 添加 Swagger API 文档注解
林仔 11 bulan lalu
induk
melakukan
8724c7c03f
44 mengubah file dengan 1331 tambahan dan 91 penghapusan
  1. 5 0
      pom.xml
  2. 1 1
      src/main/java/com/zksy/EnterpriseApplication.java
  3. 2 2
      src/main/java/com/zksy/common/domain/FileManager.java
  4. 1 1
      src/main/java/com/zksy/common/mapper/FileManagerMapper.java
  5. 5 2
      src/main/java/com/zksy/common/service/FileManagerService.java
  6. 12 2
      src/main/java/com/zksy/common/service/impl/FileManagerServiceImpl.java
  7. 11 4
      src/main/java/com/zksy/controller/common/FileManagerController.java
  8. 73 0
      src/main/java/com/zksy/controller/info/EAdminLicenseInfoController.java
  9. 63 0
      src/main/java/com/zksy/controller/info/EArchivesAdministrationController.java
  10. 73 0
      src/main/java/com/zksy/controller/info/EContactManagementController.java
  11. 57 0
      src/main/java/com/zksy/controller/info/EEmployeeInfoController.java
  12. 59 0
      src/main/java/com/zksy/controller/info/EEmployeeMasterController.java
  13. 73 0
      src/main/java/com/zksy/controller/info/EEnterpriseInfoController.java
  14. 73 0
      src/main/java/com/zksy/controller/info/EEnterprisePowerInfoController.java
  15. 73 0
      src/main/java/com/zksy/controller/info/EGasController.java
  16. 71 0
      src/main/java/com/zksy/controller/info/EWaterController.java
  17. 16 13
      src/main/java/com/zksy/controller/property/AHouseTypeController.java
  18. 73 0
      src/main/java/com/zksy/controller/property/APropertyReceiptController.java
  19. 73 0
      src/main/java/com/zksy/controller/property/APublicRentalHousingController.java
  20. 73 0
      src/main/java/com/zksy/controller/property/ARentalPropertyController.java
  21. 14 12
      src/main/java/com/zksy/controller/property/ARoomController.java
  22. 22 4
      src/main/java/com/zksy/property/domain/AHouseType.java
  23. 19 4
      src/main/java/com/zksy/property/domain/ARoom.java
  24. 1 1
      src/main/java/com/zksy/property/mapper/AHouseTypeMapper.java
  25. 1 1
      src/main/java/com/zksy/property/mapper/ARoomMapper.java
  26. 5 1
      src/main/java/com/zksy/property/service/AHouseTypeService.java
  27. 3 3
      src/main/java/com/zksy/property/service/ARoomService.java
  28. 70 5
      src/main/java/com/zksy/property/service/impl/AHouseTypeServiceImpl.java
  29. 22 12
      src/main/java/com/zksy/property/service/impl/ARoomServiceImpl.java
  30. 4 5
      src/main/java/com/zksy/utils/CommonExceptionAdvice.java
  31. 141 0
      src/main/java/com/zksy/utils/ExcelExportUtil.java
  32. 100 0
      src/main/java/com/zksy/utils/ExcelImportUtil.java
  33. 23 0
      src/main/java/com/zksy/utils/JsonConfig.java
  34. 1 1
      src/main/java/com/zksy/utils/exception/BadRequestException.java
  35. 1 1
      src/main/java/com/zksy/utils/exception/BizIllegalException.java
  36. 1 1
      src/main/java/com/zksy/utils/exception/CommonException.java
  37. 1 1
      src/main/java/com/zksy/utils/exception/DbException.java
  38. 1 1
      src/main/java/com/zksy/utils/exception/ForbiddenException.java
  39. 1 1
      src/main/java/com/zksy/utils/exception/ServiceException.java
  40. 1 1
      src/main/java/com/zksy/utils/exception/UnauthorizedException.java
  41. 1 1
      src/main/resources/application-prod.yml
  42. 3 3
      src/main/resources/mapper/common/FileManagerMapper.xml
  43. 3 3
      src/main/resources/mapper/property/AHouseTypeMapper.xml
  44. 5 4
      src/main/resources/mapper/property/ARoomMapper.xml

+ 5 - 0
pom.xml

@@ -70,5 +70,10 @@
             <artifactId>minioutil</artifactId>
             <version>1.0.1</version>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>3.3.2</version>
+        </dependency>
     </dependencies>
 </project>

+ 1 - 1
src/main/java/com/zksy/EnterpriseApplication.java

@@ -11,7 +11,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
  * @version 1.0
  * @project enterprise-assets-service
  * @description 启动服务
- * @date 2025/6/24 14:34:33
+ * @LocalDate 2025/6/24 14:34:33
  */
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
 @EnableScheduling

+ 2 - 2
src/main/java/com/zksy/common/domain/FileManager.java

@@ -69,12 +69,12 @@ public class FileManager implements Serializable {
     /**
      * 修改人
      */
-    private String updateBy;
+    private String upLocalDateBy;
 
     /**
      * 修改时间
      */
-    private Date updateTime;
+    private Date upLocalDateTime;
 
     /**
      * 是否删除(0否1是)

+ 1 - 1
src/main/java/com/zksy/common/mapper/FileManagerMapper.java

@@ -7,7 +7,7 @@ import org.mapstruct.Mapper;
 /**
  * @author Administrator
  * @description 数据库操作Mapper
- * @createDate 2025-06-25 11:57:55
+ * @createLocalDate 2025-06-25 11:57:55
  */
 @Mapper
 public interface FileManagerMapper extends BaseMapper<FileManager> {

+ 5 - 2
src/main/java/com/zksy/common/service/FileManagerService.java

@@ -4,14 +4,17 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.zksy.common.domain.FileManager;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
+
 /**
  * 文件管理Service接口
  *
  * @author sy
- * @date 2025-06-25
+ * @LocalDate 2025-06-25
  */
 public interface FileManagerService extends IService<FileManager> {
     boolean saveMinio(FileManager crmFile, MultipartFile multipartFile);
-    boolean updateMinio(FileManager crmFile, MultipartFile multipartFile);
+    boolean upLocalDateMinio(FileManager crmFile, MultipartFile multipartFile);
     boolean deleteFile(String id);
+    List<FileManager> getFileByFid(String fid);
 }

+ 12 - 2
src/main/java/com/zksy/common/service/impl/FileManagerServiceImpl.java

@@ -1,5 +1,6 @@
 package com.zksy.common.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zksy.common.domain.FileManager;
 import com.zksy.common.mapper.FileManagerMapper;
@@ -9,9 +10,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
+
 /**
  * @author sy
- * @date 2025-06-25
+ * @LocalDate 2025-06-25
  */
 @Service
 public class FileManagerServiceImpl extends ServiceImpl<FileManagerMapper, FileManager> implements FileManagerService {
@@ -32,7 +35,7 @@ public class FileManagerServiceImpl extends ServiceImpl<FileManagerMapper, FileM
     }
 
     @Override
-    public boolean updateMinio(FileManager crmFile, MultipartFile multipartFile) {
+    public boolean upLocalDateMinio(FileManager crmFile, MultipartFile multipartFile) {
         try {
             // 删除minio文件
             minioFileStorageService.deleteFile(crmFile.getFileUrl());
@@ -57,4 +60,11 @@ public class FileManagerServiceImpl extends ServiceImpl<FileManagerMapper, FileM
         return removeById(id);
     }
 
+    @Override
+    public List<FileManager> getFileByFid(String fid) {
+        LambdaQueryWrapper<FileManager> queryWrapper = new LambdaQueryWrapper();
+        queryWrapper.eq(fid != null,FileManager::getFid, fid);
+        return list(queryWrapper);
+    }
+
 }

+ 11 - 4
src/main/java/com/zksy/controller/common/FileManagerController.java

@@ -7,15 +7,17 @@ import com.zksy.utils.AjaxResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.time.LocalDate;
 import java.util.Date;
 
 /**
  * @author sy
- * @date 2025-06-25
+ * @LocalDate 2025-06-25
  */
 @RestController
 @RequestMapping("/fileManager")
@@ -40,9 +42,9 @@ public class FileManagerController {
     @ApiOperation(value = "文件管理修改")
     public AjaxResult updateById(FileManagerDTO fileManagerDTO) {
         FileManager xcrFile = buildXrcFile(fileManagerDTO);
-        xcrFile.setUpdateBy("管理员");
-        xcrFile.setUpdateTime(new Date());
-        return service.updateMinio(xcrFile, fileManagerDTO.getFile())
+        xcrFile.setUpLocalDateBy("管理员");
+        xcrFile.setUpLocalDateTime(new Date());
+        return service.upLocalDateMinio(xcrFile, fileManagerDTO.getFile())
                 ? AjaxResult.success(xcrFile)
                 : AjaxResult.error("更新失败");
     }
@@ -54,6 +56,11 @@ public class FileManagerController {
                 ? AjaxResult.success("删除成功")
                 : AjaxResult.error("删除失败");
     }
+    @GetMapping("/getFileByFid")
+    @ApiOperation(value = "根据fid查询文件")
+    public AjaxResult getFileByFid(String fid) {
+        return AjaxResult.success(service.getFileByFid(fid));
+    }
 
     private FileManager buildXrcFile(FileManagerDTO fileManagerDTO) {
         FileManager xcrFile = new FileManager();

+ 73 - 0
src/main/java/com/zksy/controller/info/EAdminLicenseInfoController.java

@@ -0,0 +1,73 @@
+package com.zksy.controller.info;
+
+import com.zksy.info.domain.EAdminLicenseInfo;
+import com.zksy.info.domain.EEnterprisePowerInfo;
+import com.zksy.info.service.EAdminLicenseInfoService;
+import com.zksy.info.service.EEnterprisePowerInfoService;
+import com.zksy.utils.AjaxResult;
+import com.zksy.utils.ExcelExportUtil;
+import com.zksy.utils.ExcelImportUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.util.Arrays;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project enterprise-assets-service
+ * @description 行政许可控制层
+ * @LocalDate 2025/6/24 14:33:13
+ */
+@RestController
+@RequestMapping("/eadminLicenseInfo")
+@Api(tags = "行政许可信息",description = "行政许可信息desc")
+public class EAdminLicenseInfoController {
+    @Autowired
+    private EAdminLicenseInfoService service;
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "行政许可信息查询分页")
+    public AjaxResult findByPage(long pageNum, long pageSize, String licenseCertificateName,String licenseNumber,String currentStatus){
+        return AjaxResult.success(service.findByPage(pageNum, pageSize, licenseCertificateName,licenseNumber,currentStatus));
+    }
+    @GetMapping("/getEAdminLicenseInfoList")
+    @ApiOperation(value = "行政许可信息查询")
+    public AjaxResult getEAdminLicenseInfoList(String licenseCertificateName,String licenseNumber,String currentStatus){
+        return AjaxResult.success(service.getEAdminLicenseInfoList(licenseCertificateName,licenseNumber,currentStatus));
+    }
+    @GetMapping("/getById/{borrowId}")
+    @ApiOperation(value = "根据Id查询行政许可信息")
+    public AjaxResult getById(@PathVariable String id){
+        return AjaxResult.success(service.getById(id));
+    }
+    @PostMapping("/save")
+    @ApiOperation(value = "行政许可信息保存")
+    public AjaxResult save(@RequestBody EAdminLicenseInfo eAdminLicenseInfo) {
+        return AjaxResult.success(service.save(eAdminLicenseInfo));
+    }
+    @PostMapping("/upLocalDate")
+    @ApiOperation(value = "行政许可信息修改")
+    public AjaxResult upLocalDate(@RequestBody EAdminLicenseInfo eAdminLicenseInfo) {
+        return AjaxResult.success(service.updateById(eAdminLicenseInfo));
+    }
+    @PostMapping("/deleteBatch")
+    @ApiOperation(value = "行政许可信息删除")
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return AjaxResult.success(service.removeBatchByIds(Arrays.asList(ids)));
+    }
+    @PostMapping("/importData")
+    @ApiOperation(value = "导入数据")
+    public AjaxResult importData(MultipartFile file) {
+        return AjaxResult.success(service.saveOrUpdateBatch(ExcelImportUtil.importExcel(file, EAdminLicenseInfo.class)));
+    }
+    @PostMapping("/exportData")
+    @ApiOperation(value = "导出数据")
+    public AjaxResult exportData(HttpServletResponse response,String licenseCertificateName,String licenseNumber,String currentStatus) {
+        return AjaxResult.success(ExcelExportUtil.exportExcel(response,service.getEAdminLicenseInfoList(licenseCertificateName,licenseNumber,currentStatus), EAdminLicenseInfo.class, "行政许可信息","行政许可信息"));
+    }
+
+}

+ 63 - 0
src/main/java/com/zksy/controller/info/EArchivesAdministrationController.java

@@ -0,0 +1,63 @@
+package com.zksy.controller.info;
+
+import com.zksy.info.domain.EAdminLicenseInfo;
+import com.zksy.info.domain.EArchivesAdministration;
+import com.zksy.info.service.EAdminLicenseInfoService;
+import com.zksy.info.service.EArchivesAdministrationService;
+import com.zksy.utils.AjaxResult;
+import com.zksy.utils.ExcelExportUtil;
+import com.zksy.utils.ExcelImportUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.util.Arrays;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project enterprise-assets-service
+ * @description 行政许可控制层
+ * @LocalDate 2025/6/24 14:33:13
+ */
+@RestController
+@RequestMapping("/earchivesAdministration")
+@Api(tags = "员工档案管理",description = "员工档案管理desc")
+public class EArchivesAdministrationController {
+    @Autowired
+    private EArchivesAdministrationService service;
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "员工档案管理查询分页")
+    public AjaxResult findByPage(long pageNum, long pageSize,String workNumber,String fullName, String type){
+        return AjaxResult.success(service.findByPage(pageNum, pageSize,workNumber,fullName, type));
+    }
+    @GetMapping("/getEAdminLicenseInfoList")
+    @ApiOperation(value = "员工档案管理查询")
+    public AjaxResult getEAdminLicenseInfoList(String workNumber,String fullName,String type){
+        return AjaxResult.success(service.getEArchivesAdministrationList(workNumber,fullName,type));
+    }
+    @GetMapping("/getById/{borrowId}")
+    @ApiOperation(value = "根据Id查询员工档案管理")
+    public AjaxResult getById(@PathVariable String id){
+        return AjaxResult.success(service.getById(id));
+    }
+    @PostMapping("/save")
+    @ApiOperation(value = "员工档案管理保存")
+    public AjaxResult save(@RequestBody EArchivesAdministration eAdminLicenseInfo) {
+        return AjaxResult.success(service.save(eAdminLicenseInfo));
+    }
+    @PostMapping("/upLocalDate")
+    @ApiOperation(value = "员工档案管理修改")
+    public AjaxResult upLocalDate(@RequestBody EArchivesAdministration eAdminLicenseInfo) {
+        return AjaxResult.success(service.updateById(eAdminLicenseInfo));
+    }
+    @PostMapping("/deleteBatch")
+    @ApiOperation(value = "员工档案管理删除")
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return AjaxResult.success(service.removeBatchByIds(Arrays.asList(ids)));
+    }
+
+}

+ 73 - 0
src/main/java/com/zksy/controller/info/EContactManagementController.java

@@ -0,0 +1,73 @@
+package com.zksy.controller.info;
+
+import com.zksy.info.domain.EAdminLicenseInfo;
+import com.zksy.info.domain.EContactManagement;
+import com.zksy.info.service.EAdminLicenseInfoService;
+import com.zksy.info.service.EContactManagementService;
+import com.zksy.utils.AjaxResult;
+import com.zksy.utils.ExcelExportUtil;
+import com.zksy.utils.ExcelImportUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.util.Arrays;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project enterprise-assets-service
+ * @description 联系人管理控制层
+ * @LocalDate 2025/6/24 14:33:13
+ */
+@RestController
+@RequestMapping("/econtactManagement")
+@Api(tags = "联系人管理信息",description = "联系人管理信息desc")
+public class EContactManagementController {
+    @Autowired
+    private EContactManagementService service;
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "联系人管理信息查询分页")
+    public AjaxResult findByPage(long pageNum, long pageSize, String contactName,String contactDepartment,String contactMobile){
+        return AjaxResult.success(service.findByPage(pageNum, pageSize, contactName,contactDepartment,contactMobile));
+    }
+    @GetMapping("/getEAdminLicenseInfoList")
+    @ApiOperation(value = "联系人管理信息查询")
+    public AjaxResult getEAdminLicenseInfoList(String contactName,String contactDepartment,String contactMobile){
+        return AjaxResult.success(service.getEContactManagementList(contactName,contactDepartment,contactMobile));
+    }
+    @GetMapping("/getById/{borrowId}")
+    @ApiOperation(value = "根据Id查询联系人管理信息")
+    public AjaxResult getById(@PathVariable String id){
+        return AjaxResult.success(service.getById(id));
+    }
+    @PostMapping("/save")
+    @ApiOperation(value = "联系人管理信息保存")
+    public AjaxResult save(@RequestBody EContactManagement econtactManagement) {
+        return AjaxResult.success(service.save(econtactManagement));
+    }
+    @PostMapping("/upLocalDate")
+    @ApiOperation(value = "联系人管理信息修改")
+    public AjaxResult upLocalDate(@RequestBody EContactManagement econtactManagement) {
+        return AjaxResult.success(service.updateById(econtactManagement));
+    }
+    @PostMapping("/deleteBatch")
+    @ApiOperation(value = "联系人管理信息删除")
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return AjaxResult.success(service.removeBatchByIds(Arrays.asList(ids)));
+    }
+    @PostMapping("/importData")
+    @ApiOperation(value = "导入数据")
+    public AjaxResult importData(MultipartFile file) {
+        return AjaxResult.success(service.saveOrUpdateBatch(ExcelImportUtil.importExcel(file, EContactManagement.class)));
+    }
+    @PostMapping("/exportData")
+    @ApiOperation(value = "导出数据")
+    public AjaxResult exportData(HttpServletResponse response,String contactName,String contactDepartment,String contactMobile) {
+        return AjaxResult.success(ExcelExportUtil.exportExcel(response,service.getEContactManagementList(contactName,contactDepartment,contactMobile), EContactManagement.class, "联系人管理信息","联系人管理信息"));
+    }
+
+}

+ 57 - 0
src/main/java/com/zksy/controller/info/EEmployeeInfoController.java

@@ -0,0 +1,57 @@
+package com.zksy.controller.info;
+
+import com.zksy.info.domain.EEmployeeInfo;
+import com.zksy.info.service.EEmployeeInfoService;
+import com.zksy.property.domain.AHouseType;
+import com.zksy.property.service.AHouseTypeService;
+import com.zksy.utils.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project enterprise-assets-service
+ * @description 员工基本信息控制层
+ * @LocalDate 2025/6/24 14:33:13
+ */
+@RestController
+@RequestMapping("/eemployeeInfo")
+@Api(tags = "员工基本信息控制层",description = "员工基本信息控制层desc")
+public class EEmployeeInfoController {
+    @Autowired
+    private EEmployeeInfoService service;
+    @GetMapping("/getById/{borrowId}")
+    @ApiOperation(value = "员工基本信息查询")
+    public AjaxResult getById(@PathVariable String borrowId) {
+        return AjaxResult.success(service.getById(borrowId));
+    }
+    @GetMapping("/getList")
+    @ApiOperation(value = "员工基本信息查询所有")
+    public AjaxResult getList(String workNumber,String fullName) {
+        return AjaxResult.success(service.getEEmployeeInfoList(workNumber, fullName));
+    }
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "员工基本信息查询分页")
+    public AjaxResult findByPage(long pageNum, long pageSize, String workNumber,String fullName){
+        return AjaxResult.success(service.findByPage(pageNum, pageSize, workNumber, fullName));
+    }
+    @PostMapping("/save")
+    @ApiOperation(value = "员工基本信息保存")
+    public AjaxResult save(@RequestBody EEmployeeInfo eemployeeInfo, MultipartFile multipartFile) {
+        return service.saveEEmployeeInfo(eemployeeInfo, multipartFile)? AjaxResult.success(eemployeeInfo): AjaxResult.error("保存失败");
+    }
+    @PostMapping("/upLocalDate")
+    @ApiOperation(value = "员工基本信息修改")
+    public AjaxResult upLocalDate(@RequestBody EEmployeeInfo eemployeeInfo, MultipartFile multipartFile) {
+        return service.upLocalDateEEmployeeInfo(eemployeeInfo, multipartFile)? AjaxResult.success(eemployeeInfo): AjaxResult.error("修改失败");
+    }
+    @PostMapping("/deleteBatch")
+    @ApiOperation(value = "员工基本信息删除")
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return service.removeBatchEEmployeeInfo(ids)? AjaxResult.success(): AjaxResult.error("删除失败");
+    }
+}

+ 59 - 0
src/main/java/com/zksy/controller/info/EEmployeeMasterController.java

@@ -0,0 +1,59 @@
+package com.zksy.controller.info;
+
+import com.zksy.info.domain.EArchivesAdministration;
+import com.zksy.info.domain.EEmployeeMaster;
+import com.zksy.info.service.EArchivesAdministrationService;
+import com.zksy.info.service.EEmployeeMasterService;
+import com.zksy.utils.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project enterprise-assets-service
+ * @description 员工合同管理控制层
+ * @LocalDate 2025/6/24 14:33:13
+ */
+@RestController
+@RequestMapping("/eemployeeMaster")
+@Api(tags = "员工合同管理",description = "员工合同管理desc")
+public class EEmployeeMasterController {
+    @Autowired
+    private EEmployeeMasterService service;
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "员工合同管理查询分页")
+    public AjaxResult findByPage(long pageNum, long pageSize,String workNumber,String fullName, String contractNo){
+        return AjaxResult.success(service.findByPage(pageNum, pageSize,workNumber,fullName, contractNo));
+    }
+    @GetMapping("/getEAdminLicenseInfoList")
+    @ApiOperation(value = "员工合同管理查询")
+    public AjaxResult getEAdminLicenseInfoList(String workNumber,String fullName,String contractNo){
+        return AjaxResult.success(service.getEEmployeeMasterList(workNumber,fullName,contractNo));
+    }
+    @GetMapping("/getById/{borrowId}")
+    @ApiOperation(value = "根据Id查询员工合同管理")
+    public AjaxResult getById(@PathVariable String id){
+        return AjaxResult.success(service.getById(id));
+    }
+    @PostMapping("/save")
+    @ApiOperation(value = "员工合同管理保存")
+    public AjaxResult save(@RequestBody EEmployeeMaster eemployeeMaster) {
+        return AjaxResult.success(service.save(eemployeeMaster));
+    }
+    @PostMapping("/upLocalDate")
+    @ApiOperation(value = "员工合同管理修改")
+    public AjaxResult upLocalDate(@RequestBody EEmployeeMaster eemployeeMaster) {
+        return AjaxResult.success(service.updateById(eemployeeMaster));
+    }
+    @PostMapping("/deleteBatch")
+    @ApiOperation(value = "员工合同管理删除")
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return AjaxResult.success(service.removeBatchByIds(Arrays.asList(ids)));
+    }
+
+}

+ 73 - 0
src/main/java/com/zksy/controller/info/EEnterpriseInfoController.java

@@ -0,0 +1,73 @@
+package com.zksy.controller.info;
+
+import com.zksy.info.domain.EEnterpriseInfo;
+import com.zksy.info.service.EEnterpriseInfoService;
+import com.zksy.property.domain.AHouseType;
+import com.zksy.property.service.AHouseTypeService;
+import com.zksy.utils.AjaxResult;
+import com.zksy.utils.ExcelExportUtil;
+import com.zksy.utils.ExcelImportUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.util.Arrays;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project enterprise-assets-service
+ * @description 企业基本信息控制层
+ * @LocalDate 2025/6/24 14:33:13
+ */
+@RestController
+@RequestMapping("/enterpriseInfo")
+@Api(tags = "企业基本信息",description = "企业基本信息desc")
+public class EEnterpriseInfoController {
+    @Autowired
+    private EEnterpriseInfoService service;
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "企业基本信息查询分页")
+    public AjaxResult findByPage(long pageNum, long pageSize, String enterpriseName){
+        return AjaxResult.success(service.findByPage(pageNum, pageSize, enterpriseName));
+    }
+    @GetMapping("/getEnterpriseInfoList")
+    @ApiOperation(value = "查询企业基本信息")
+    public AjaxResult getEnterpriseInfoList(String enterpriseName){
+        return AjaxResult.success(service.getEnterpriseInfoList(enterpriseName));
+    }
+    @GetMapping("/getById/{borrowId}")
+    @ApiOperation(value = "根据Id查询企业基本信息")
+    public AjaxResult getById(@PathVariable String id){
+        return AjaxResult.success(service.getById(id));
+    }
+    @PostMapping("/save")
+    @ApiOperation(value = "企业基本信息保存")
+    public AjaxResult save(@RequestBody EEnterpriseInfo houseType) {
+        return AjaxResult.success(service.save(houseType));
+    }
+    @PostMapping("/upLocalDate")
+    @ApiOperation(value = "企业基本信息修改")
+    public AjaxResult upLocalDate(@RequestBody EEnterpriseInfo houseType) {
+        return AjaxResult.success(service.updateById(houseType));
+    }
+    @PostMapping("/deleteBatch")
+    @ApiOperation(value = "企业基本信息删除")
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return AjaxResult.success(service.removeBatchByIds(Arrays.asList(ids)));
+    }
+    @PostMapping("/importData")
+    @ApiOperation(value = "导入数据")
+    public AjaxResult importData(MultipartFile file) {
+        return AjaxResult.success(service.saveOrUpdateBatch(ExcelImportUtil.importExcel(file, EEnterpriseInfo.class)));
+    }
+    @PostMapping("/exportData")
+    @ApiOperation(value = "导出数据")
+    public AjaxResult exportData(HttpServletResponse response,String enterpriseName) {
+        return AjaxResult.success(ExcelExportUtil.exportExcel(response,service.getEnterpriseInfoList(enterpriseName), EEnterpriseInfo.class, "企业基本信息","企业基本信息"));
+    }
+
+}

+ 73 - 0
src/main/java/com/zksy/controller/info/EEnterprisePowerInfoController.java

@@ -0,0 +1,73 @@
+package com.zksy.controller.info;
+
+import com.zksy.info.domain.EEnterpriseInfo;
+import com.zksy.info.domain.EEnterprisePowerInfo;
+import com.zksy.info.service.EEnterpriseInfoService;
+import com.zksy.info.service.EEnterprisePowerInfoService;
+import com.zksy.utils.AjaxResult;
+import com.zksy.utils.ExcelExportUtil;
+import com.zksy.utils.ExcelImportUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.util.Arrays;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project enterprise-assets-service
+ * @description 企业用电控制层
+ * @LocalDate 2025/6/24 14:33:13
+ */
+@RestController
+@RequestMapping("/enterprisePowerInfo")
+@Api(tags = "企业用电信息",description = "企业用电信息desc")
+public class EEnterprisePowerInfoController {
+    @Autowired
+    private EEnterprisePowerInfoService service;
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "企业用电信息查询分页")
+    public AjaxResult findByPage(long pageNum, long pageSize, String enterpriseName){
+        return AjaxResult.success(service.findByPage(pageNum, pageSize, enterpriseName));
+    }
+    @GetMapping("/getEnterpriseInfoList")
+    @ApiOperation(value = "企业用电信息")
+    public AjaxResult getEnterpriseInfoList(String enterpriseName){
+        return AjaxResult.success(service.getEEnterprisePowerInfoList(enterpriseName));
+    }
+    @GetMapping("/getById/{borrowId}")
+    @ApiOperation(value = "根据Id查询企业用电信息")
+    public AjaxResult getById(@PathVariable String id){
+        return AjaxResult.success(service.getById(id));
+    }
+    @PostMapping("/save")
+    @ApiOperation(value = "企业用电信息保存")
+    public AjaxResult save(@RequestBody EEnterprisePowerInfo eEnterprisePowerInfo) {
+        return AjaxResult.success(service.save(eEnterprisePowerInfo));
+    }
+    @PostMapping("/upLocalDate")
+    @ApiOperation(value = "企业用电信息修改")
+    public AjaxResult upLocalDate(@RequestBody EEnterprisePowerInfo eEnterprisePowerInfo) {
+        return AjaxResult.success(service.updateById(eEnterprisePowerInfo));
+    }
+    @PostMapping("/deleteBatch")
+    @ApiOperation(value = "企业用电信息删除")
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return AjaxResult.success(service.removeBatchByIds(Arrays.asList(ids)));
+    }
+    @PostMapping("/importData")
+    @ApiOperation(value = "导入数据")
+    public AjaxResult importData(MultipartFile file) {
+        return AjaxResult.success(service.saveOrUpdateBatch(ExcelImportUtil.importExcel(file, EEnterprisePowerInfo.class)));
+    }
+    @PostMapping("/exportData")
+    @ApiOperation(value = "导出数据")
+    public AjaxResult exportData(HttpServletResponse response,String enterpriseName) {
+        return AjaxResult.success(ExcelExportUtil.exportExcel(response,service.getEEnterprisePowerInfoList(enterpriseName), EEnterprisePowerInfo.class, "企业用电信息","企业用电信息"));
+    }
+
+}

+ 73 - 0
src/main/java/com/zksy/controller/info/EGasController.java

@@ -0,0 +1,73 @@
+package com.zksy.controller.info;
+
+import com.zksy.info.domain.EAdminLicenseInfo;
+import com.zksy.info.domain.EGas;
+import com.zksy.info.service.EAdminLicenseInfoService;
+import com.zksy.info.service.EGasService;
+import com.zksy.utils.AjaxResult;
+import com.zksy.utils.ExcelExportUtil;
+import com.zksy.utils.ExcelImportUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.util.Arrays;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project enterprise-assets-service
+ * @description 燃气控制层
+ * @LocalDate 2025/6/24 14:33:13
+ */
+@RestController
+@RequestMapping("/egas")
+@Api(tags = "燃气信息",description = "燃气信息desc")
+public class EGasController {
+    @Autowired
+    private EGasService service;
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "燃气信息查询分页")
+    public AjaxResult findByPage(long pageNum, long pageSize, String company,String userInfo){
+        return AjaxResult.success(service.findByPage(pageNum, pageSize, company,userInfo));
+    }
+    @GetMapping("/getEGasList")
+    @ApiOperation(value = "燃气信息查询")
+    public AjaxResult getEGasList(String company,String userInfo){
+        return AjaxResult.success(service.getEGasList(company,userInfo));
+    }
+    @GetMapping("/getById/{borrowId}")
+    @ApiOperation(value = "根据Id查询燃气信息")
+    public AjaxResult getById(@PathVariable String id){
+        return AjaxResult.success(service.getById(id));
+    }
+    @PostMapping("/save")
+    @ApiOperation(value = "燃气信息保存")
+    public AjaxResult save(@RequestBody EGas egas) {
+        return AjaxResult.success(service.save(egas));
+    }
+    @PostMapping("/upLocalDate")
+    @ApiOperation(value = "燃气信息修改")
+    public AjaxResult upLocalDate(@RequestBody EGas egas) {
+        return AjaxResult.success(service.updateById(egas));
+    }
+    @PostMapping("/deleteBatch")
+    @ApiOperation(value = "燃气信息删除")
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return AjaxResult.success(service.removeBatchByIds(Arrays.asList(ids)));
+    }
+    @PostMapping("/importData")
+    @ApiOperation(value = "导入数据")
+    public AjaxResult importData(MultipartFile file) {
+        return AjaxResult.success(service.saveOrUpdateBatch(ExcelImportUtil.importExcel(file, EGas.class)));
+    }
+    @PostMapping("/exportData")
+    @ApiOperation(value = "导出数据")
+    public AjaxResult exportData(HttpServletResponse response,String company,String userInfo) {
+        return AjaxResult.success(ExcelExportUtil.exportExcel(response,service.getEGasList(company,userInfo), EGas.class, "燃气信息","燃气信息"));
+    }
+
+}

+ 71 - 0
src/main/java/com/zksy/controller/info/EWaterController.java

@@ -0,0 +1,71 @@
+package com.zksy.controller.info;
+
+import com.zksy.info.domain.EWater;
+import com.zksy.info.service.EWaterService;
+import com.zksy.utils.AjaxResult;
+import com.zksy.utils.ExcelExportUtil;
+import com.zksy.utils.ExcelImportUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.util.Arrays;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project enterprise-assets-service
+ * @description 用水控制层
+ * @LocalDate 2025/6/24 14:33:13
+ */
+@RestController
+@RequestMapping("/ewater")
+@Api(tags = "用水信息",description = "用水信息desc")
+public class EWaterController {
+    @Autowired
+    private EWaterService service;
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "用水信息查询分页")
+    public AjaxResult findByPage(long pageNum, long pageSize, String company,String userInfo){
+        return AjaxResult.success(service.findByPage(pageNum, pageSize, company,userInfo));
+    }
+    @GetMapping("/getEWaterList")
+    @ApiOperation(value = "用水信息查询")
+    public AjaxResult getEWaterList(String company,String userInfo){
+        return AjaxResult.success(service.getEWaterList(company,userInfo));
+    }
+    @GetMapping("/getById/{borrowId}")
+    @ApiOperation(value = "根据Id查询用水信息")
+    public AjaxResult getById(@PathVariable String id){
+        return AjaxResult.success(service.getById(id));
+    }
+    @PostMapping("/save")
+    @ApiOperation(value = "用水信息保存")
+    public AjaxResult save(@RequestBody EWater ewater) {
+        return AjaxResult.success(service.save(ewater));
+    }
+    @PostMapping("/upLocalDate")
+    @ApiOperation(value = "用水信息修改")
+    public AjaxResult upLocalDate(@RequestBody EWater ewater) {
+        return AjaxResult.success(service.updateById(ewater));
+    }
+    @PostMapping("/deleteBatch")
+    @ApiOperation(value = "用水信息删除")
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return AjaxResult.success(service.removeBatchByIds(Arrays.asList(ids)));
+    }
+    @PostMapping("/importData")
+    @ApiOperation(value = "导入数据")
+    public AjaxResult importData(MultipartFile file) {
+        return AjaxResult.success(service.saveOrUpdateBatch(ExcelImportUtil.importExcel(file, EWater.class)));
+    }
+    @PostMapping("/exportData")
+    @ApiOperation(value = "导出数据")
+    public AjaxResult exportData(HttpServletResponse response,String company,String userInfo) {
+        return AjaxResult.success(ExcelExportUtil.exportExcel(response,service.getEWaterList(company,userInfo), EWater.class, "用水信息","用水信息"));
+    }
+
+}

+ 16 - 13
src/main/java/com/zksy/controller/property/AHouseTypeController.java

@@ -6,10 +6,8 @@ import com.zksy.utils.AjaxResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -18,14 +16,19 @@ import java.util.List;
  * @version 1.0
  * @project enterprise-assets-service
  * @description 户型控制层
- * @date 2025/6/24 14:33:13
+ * @LocalDate 2025/6/24 14:33:13
  */
 @RestController
 @RequestMapping("/houseType")
-@Api(value = "户型控制层")
+@Api(tags = "户型控制层",description = "户型控制层desc")
 public class AHouseTypeController {
     @Autowired
     private AHouseTypeService service;
+    @GetMapping("/getById/{borrowId}")
+    @ApiOperation(value = "户型查询")
+    public AjaxResult getById(@PathVariable String borrowId) {
+        return AjaxResult.success(service.getById(borrowId));
+    }
     @GetMapping("/getList")
     @ApiOperation(value = "户型查询所有")
     public AjaxResult getList(String accountNumber) {
@@ -38,17 +41,17 @@ public class AHouseTypeController {
     }
     @PostMapping("/save")
     @ApiOperation(value = "户型保存")
-    public AjaxResult save(AHouseType houseType) {
-        return service.save(houseType)? AjaxResult.success(houseType): AjaxResult.error("保存失败");
+    public AjaxResult save(AHouseType houseType, MultipartFile multipartFile) {
+        return service.saveHouseType(houseType, multipartFile)? AjaxResult.success(houseType): AjaxResult.error("保存失败");
     }
-    @PostMapping("/update")
+    @PostMapping("/upLocalDate")
     @ApiOperation(value = "户型修改")
-    public AjaxResult update(AHouseType houseType) {
-        return service.updateById(houseType)? AjaxResult.success(houseType): AjaxResult.error("修改失败");
+    public AjaxResult upLocalDate(AHouseType houseType, MultipartFile multipartFile) {
+        return service.upLocalDateHouseType(houseType, multipartFile)? AjaxResult.success(houseType): AjaxResult.error("修改失败");
     }
     @PostMapping("/deleteBatch")
     @ApiOperation(value = "户型删除")
-    public AjaxResult delete(List<String> ids) {
-        return service.removeBatchByIds(ids)? AjaxResult.success(): AjaxResult.error("删除失败");
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return service.removeBatchHouseType(ids)? AjaxResult.success(): AjaxResult.error("删除失败");
     }
 }

+ 73 - 0
src/main/java/com/zksy/controller/property/APropertyReceiptController.java

@@ -0,0 +1,73 @@
+package com.zksy.controller.property;
+
+import com.zksy.property.domain.APropertyReceipt;
+import com.zksy.property.domain.ARentalProperty;
+import com.zksy.property.service.APropertyReceiptService;
+import com.zksy.property.service.ARentalPropertyService;
+import com.zksy.utils.AjaxResult;
+import com.zksy.utils.ExcelExportUtil;
+import com.zksy.utils.ExcelImportUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.util.Arrays;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project enterprise-assets-service
+ * @description 标准化厂房收入情况控制层
+ * @LocalDate 2025/6/24 14:33:13
+ */
+@RestController
+@RequestMapping("/apropertyReceipt")
+@Api(tags = "标准化厂房收入情况信息",description = "标准化厂房收入情况信息desc")
+public class APropertyReceiptController {
+    @Autowired
+    private APropertyReceiptService service;
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "标准化厂房收入情况信息查询分页")
+    public AjaxResult findByPage(long pageNum, long pageSize, String unit,String building){
+        return AjaxResult.success(service.findByPage(pageNum, pageSize, unit,building));
+    }
+    @GetMapping("/getARentalPropertyList")
+    @ApiOperation(value = "标准化厂房收入情况信息查询")
+    public AjaxResult getAPropertyReceiptList(String unit,String building){
+        return AjaxResult.success(service.getAPropertyReceiptList(unit,building));
+    }
+    @GetMapping("/getById/{borrowId}")
+    @ApiOperation(value = "根据Id查询标准化厂房收入情况信息")
+    public AjaxResult getById(@PathVariable String id){
+        return AjaxResult.success(service.getById(id));
+    }
+    @PostMapping("/save")
+    @ApiOperation(value = "标准化厂房收入情况信息保存")
+    public AjaxResult save(@RequestBody APropertyReceipt eAdminLicenseInfo) {
+        return AjaxResult.success(service.save(eAdminLicenseInfo));
+    }
+    @PostMapping("/upLocalDate")
+    @ApiOperation(value = "标准化厂房收入情况信息修改")
+    public AjaxResult upLocalDate(@RequestBody APropertyReceipt eAdminLicenseInfo) {
+        return AjaxResult.success(service.updateById(eAdminLicenseInfo));
+    }
+    @PostMapping("/deleteBatch")
+    @ApiOperation(value = "标准化厂房收入情况信息删除")
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return AjaxResult.success(service.removeBatchByIds(Arrays.asList(ids)));
+    }
+    @PostMapping("/importData")
+    @ApiOperation(value = "导入数据")
+    public AjaxResult importData(MultipartFile file) {
+        return AjaxResult.success(service.saveOrUpdateBatch(ExcelImportUtil.importExcel(file, APropertyReceipt.class)));
+    }
+    @PostMapping("/exportData")
+    @ApiOperation(value = "导出数据")
+    public AjaxResult exportData(HttpServletResponse response,String unit,String building) {
+        return AjaxResult.success(ExcelExportUtil.exportExcel(response,service.getAPropertyReceiptList(unit,building), APropertyReceipt.class, "标准化厂房收入情况信息","标准化厂房收入情况信息"));
+    }
+
+}

+ 73 - 0
src/main/java/com/zksy/controller/property/APublicRentalHousingController.java

@@ -0,0 +1,73 @@
+package com.zksy.controller.property;
+
+import com.zksy.property.domain.APropertyReceipt;
+import com.zksy.property.domain.APublicRentalHousing;
+import com.zksy.property.service.APropertyReceiptService;
+import com.zksy.property.service.APublicRentalHousingService;
+import com.zksy.utils.AjaxResult;
+import com.zksy.utils.ExcelExportUtil;
+import com.zksy.utils.ExcelImportUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.util.Arrays;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project enterprise-assets-service
+ * @description 公租房租赁情况控制层
+ * @LocalDate 2025/6/24 14:33:13
+ */
+@RestController
+@RequestMapping("/apublicRentalHousing")
+@Api(tags = "公租房租赁情况信息",description = "公租房租赁情况信息desc")
+public class APublicRentalHousingController {
+    @Autowired
+    private APublicRentalHousingService service;
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "公租房租赁情况信息查询分页")
+    public AjaxResult findByPage(long pageNum, long pageSize, String receiptNumber,String building,String roomNumber){
+        return AjaxResult.success(service.findByPage(pageNum, pageSize, receiptNumber,building,roomNumber));
+    }
+    @GetMapping("/getARentalPropertyList")
+    @ApiOperation(value = "公租房租赁情况信息查询")
+    public AjaxResult getAPropertyReceiptList(String unit,String building,String roomNumber){
+        return AjaxResult.success(service.getAPublicRentalHousingList(unit,building,roomNumber));
+    }
+    @GetMapping("/getById/{borrowId}")
+    @ApiOperation(value = "根据Id查询公租房租赁情况信息")
+    public AjaxResult getById(@PathVariable String id){
+        return AjaxResult.success(service.getById(id));
+    }
+    @PostMapping("/save")
+    @ApiOperation(value = "公租房租赁情况信息保存")
+    public AjaxResult save(@RequestBody APublicRentalHousing eAdminLicenseInfo) {
+        return AjaxResult.success(service.save(eAdminLicenseInfo));
+    }
+    @PostMapping("/upLocalDate")
+    @ApiOperation(value = "公租房租赁情况信息修改")
+    public AjaxResult upLocalDate(@RequestBody APublicRentalHousing eAdminLicenseInfo) {
+        return AjaxResult.success(service.updateById(eAdminLicenseInfo));
+    }
+    @PostMapping("/deleteBatch")
+    @ApiOperation(value = "公租房租赁情况信息删除")
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return AjaxResult.success(service.removeBatchByIds(Arrays.asList(ids)));
+    }
+    @PostMapping("/importData")
+    @ApiOperation(value = "导入数据")
+    public AjaxResult importData(MultipartFile file) {
+        return AjaxResult.success(service.saveOrUpdateBatch(ExcelImportUtil.importExcel(file, APublicRentalHousing.class)));
+    }
+    @PostMapping("/exportData")
+    @ApiOperation(value = "导出数据")
+    public AjaxResult exportData(HttpServletResponse response,String unit,String building,String roomNumber) {
+        return AjaxResult.success(ExcelExportUtil.exportExcel(response,service.getAPublicRentalHousingList(unit,building,roomNumber), APublicRentalHousing.class, "公租房租赁情况信息","公租房租赁情况信息"));
+    }
+
+}

+ 73 - 0
src/main/java/com/zksy/controller/property/ARentalPropertyController.java

@@ -0,0 +1,73 @@
+package com.zksy.controller.property;
+
+import com.zksy.info.domain.EAdminLicenseInfo;
+import com.zksy.info.service.EAdminLicenseInfoService;
+import com.zksy.property.domain.ARentalProperty;
+import com.zksy.property.service.ARentalPropertyService;
+import com.zksy.utils.AjaxResult;
+import com.zksy.utils.ExcelExportUtil;
+import com.zksy.utils.ExcelImportUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.util.Arrays;
+
+/**
+ * @author Administrator
+ * @version 1.0
+ * @project enterprise-assets-service
+ * @description 公租房租赁情况控制层
+ * @LocalDate 2025/6/24 14:33:13
+ */
+@RestController
+@RequestMapping("/arentalProperty")
+@Api(tags = "公租房租赁情况信息",description = "公租房租赁情况信息desc")
+public class ARentalPropertyController {
+    @Autowired
+    private ARentalPropertyService service;
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "公租房租赁情况信息查询分页")
+    public AjaxResult findByPage(long pageNum, long pageSize, String tenantCompany,String electricMeterNumber,String roomNumber){
+        return AjaxResult.success(service.findByPage(pageNum, pageSize, tenantCompany,electricMeterNumber,roomNumber));
+    }
+    @GetMapping("/getARentalPropertyList")
+    @ApiOperation(value = "公租房租赁情况信息查询")
+    public AjaxResult getARentalPropertyList(String licenseCertificateName,String electricMeterNumber,String roomNumber){
+        return AjaxResult.success(service.getARentalPropertyList(licenseCertificateName,electricMeterNumber,roomNumber));
+    }
+    @GetMapping("/getById/{borrowId}")
+    @ApiOperation(value = "根据Id查询公租房租赁情况信息")
+    public AjaxResult getById(@PathVariable String id){
+        return AjaxResult.success(service.getById(id));
+    }
+    @PostMapping("/save")
+    @ApiOperation(value = "公租房租赁情况信息保存")
+    public AjaxResult save(@RequestBody ARentalProperty arentalProperty) {
+        return AjaxResult.success(service.save(arentalProperty));
+    }
+    @PostMapping("/upLocalDate")
+    @ApiOperation(value = "公租房租赁情况信息修改")
+    public AjaxResult upLocalDate(@RequestBody ARentalProperty arentalProperty) {
+        return AjaxResult.success(service.updateById(arentalProperty));
+    }
+    @PostMapping("/deleteBatch")
+    @ApiOperation(value = "公租房租赁情况信息删除")
+    public AjaxResult delete(@RequestBody String[] ids) {
+        return AjaxResult.success(service.removeBatchByIds(Arrays.asList(ids)));
+    }
+    @PostMapping("/importData")
+    @ApiOperation(value = "导入数据")
+    public AjaxResult importData(MultipartFile file) {
+        return AjaxResult.success(service.saveOrUpdateBatch(ExcelImportUtil.importExcel(file, ARentalProperty.class)));
+    }
+    @PostMapping("/exportData")
+    @ApiOperation(value = "导出数据")
+    public AjaxResult exportData(HttpServletResponse response,String licenseCertificateName,String licenseNumber,String currentStatus) {
+        return AjaxResult.success(ExcelExportUtil.exportExcel(response,service.getARentalPropertyList(licenseCertificateName,licenseNumber,currentStatus), ARentalProperty.class, "公租房租赁情况信息","公租房租赁情况信息"));
+    }
+
+}

+ 14 - 12
src/main/java/com/zksy/controller/property/ARoomController.java

@@ -6,10 +6,7 @@ import com.zksy.utils.AjaxResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
@@ -19,17 +16,17 @@ import java.util.List;
  * @version 1.0
  * @project enterprise-assets-service
  * @description 房间控制层
- * @date 2025/6/24 14:33:13
+ * @LocalDate 2025/6/24 14:33:13
  */
 @RestController
 @RequestMapping("/aroom")
-@Api(value = "房间控制层")
+@Api(tags = "房间控制层",description = "房间控制层desc")
 public class ARoomController {
     @Autowired
     private ARoomService service;
-    @GetMapping("/getList")
+    @GetMapping("/getById/{houseTypeId}")
     @ApiOperation(value = "根据户型id查询房间")
-    public AjaxResult getList(String houseTypeId) {
+    public AjaxResult getList(@PathVariable String houseTypeId) {
         return AjaxResult.success(service.getByHouseTypeId(houseTypeId));
     }
     @PostMapping("/save")
@@ -37,14 +34,19 @@ public class ARoomController {
     public AjaxResult save(ARoom houseType, MultipartFile multipartFile) {
         return service.saveARoom(houseType,multipartFile)? AjaxResult.success(houseType): AjaxResult.error("保存失败");
     }
-    @PostMapping("/update")
+    @PostMapping("/upLocalDate")
     @ApiOperation(value = "房间修改")
-    public AjaxResult update(ARoom aRoom, MultipartFile multipartFile) {
-        return service.updateARoom(aRoom,multipartFile)? AjaxResult.success(aRoom): AjaxResult.error("修改失败");
+    public AjaxResult upLocalDate(ARoom aRoom, MultipartFile multipartFile) {
+        return service.upLocalDateARoom(aRoom,multipartFile)? AjaxResult.success(aRoom): AjaxResult.error("修改失败");
+    }
+    @PostMapping("/upLocalDateBatch")
+    @ApiOperation(value = "房间批量修改按钮属性")
+    public AjaxResult upLocalDateBatch(@RequestBody List<ARoom> aRoomList) {
+        return service.updateBatchById(aRoomList)? AjaxResult.success(aRoomList): AjaxResult.error("修改失败");
     }
     @PostMapping("/deleteBatch")
     @ApiOperation(value = "房间删除")
-    public AjaxResult delete(List<String> ids) {
+    public AjaxResult delete(@RequestBody String[] ids) {
         return service.removeBatchARoom(ids)? AjaxResult.success(): AjaxResult.error("删除失败");
     }
 }

+ 22 - 4
src/main/java/com/zksy/property/domain/AHouseType.java

@@ -5,8 +5,13 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
-import java.util.Date;
+import java.time.LocalDate;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 /**
  * 户型表
@@ -14,51 +19,64 @@ import lombok.Data;
  */
 @TableName(value ="a_house_type")
 @Data
+@AllArgsConstructor
+@NoArgsConstructor
 public class AHouseType implements Serializable {
     /**
      * 主键
      */
+    @ApiModelProperty("主键")
     @TableId(type = IdType.ASSIGN_UUID)
     private String id;
 
     /**
      * 户号
      */
+    @ApiModelProperty("户号")
     private String accountNumber;
 
     /**
      * 位置
      */
+    @ApiModelProperty("位置")
     private String address;
 
     /**
      * 面积
      */
+    @ApiModelProperty("面积")
     private String area;
     /**
      * 户型图片
      */
+    @ApiModelProperty("户型图片")
     private String accountUrl;
 
     /**
      * 创建时间
      */
-    private Date createTime;
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDate createTime;
 
     /**
      * 创建人
      */
+    @ApiModelProperty("创建人")
     private String createBy;
 
     /**
      * 修改时间
      */
-    private Date updateTime;
+    @ApiModelProperty("修改时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDate upLocalDateTime;
 
     /**
      * 修改人
      */
-    private String updateBy;
+    @ApiModelProperty("修改人")
+    private String upLocalDateBy;
 
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;

+ 19 - 4
src/main/java/com/zksy/property/domain/ARoom.java

@@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
-import java.util.Date;
+import java.time.LocalDate;
+
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 /**
@@ -18,43 +20,56 @@ public class ARoom implements Serializable {
     /**
      * 主键
      */
+    @ApiModelProperty("主键")
     @TableId(type = IdType.ASSIGN_UUID)
     private String id;
 
     /**
      * 户型主键
      */
+    @ApiModelProperty("户型主键")
     private String houseTypeId;
 
     /**
      * 房间号
      */
+    @ApiModelProperty("房间号")
     private String roomNumber;
 
     /**
      * 房间图片url
      */
+    @ApiModelProperty("房间图片url")
     private String roomPictureUrl;
+    /**
+     * 按钮属性
+     */
+    @ApiModelProperty("按钮属性")
+    private String attribute;
 
     /**
      * 创建时间
      */
-    private Date createTime;
+    @ApiModelProperty("创建时间")
+    private LocalDate createTime;
 
     /**
      * 创建人
      */
+    @ApiModelProperty("创建人")
     private String createBy;
 
     /**
      * 修改时间
      */
-    private Date updateTime;
+    @ApiModelProperty("修改时间")
+    private LocalDate upLocalDateTime;
 
     /**
      * 修改人
      */
-    private String updateBy;
+    @ApiModelProperty("修改人")
+    private String upLocalDateBy;
 
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;

+ 1 - 1
src/main/java/com/zksy/property/mapper/AHouseTypeMapper.java

@@ -7,7 +7,7 @@ import org.apache.ibatis.annotations.Mapper;
 /**
 * @author Administrator
 * @description 针对表【a_house_type(户型表)】的数据库操作Mapper
-* @createDate 2025-06-24 16:24:28
+* @createLocalDate 2025-06-24 16:24:28
 * @Entity com.zksy.property.domain.AHouseType
 */
 @Mapper

+ 1 - 1
src/main/java/com/zksy/property/mapper/ARoomMapper.java

@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 /**
 * @author Administrator
 * @description 针对表【a_room(房间表)】的数据库操作Mapper
-* @createDate 2025-06-26 09:44:49
+* @createLocalDate 2025-06-26 09:44:49
 * @Entity com.zksy.property.domain.ARoom
 */
 public interface ARoomMapper extends BaseMapper<ARoom> {

+ 5 - 1
src/main/java/com/zksy/property/service/AHouseTypeService.java

@@ -3,15 +3,19 @@ package com.zksy.property.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zksy.property.domain.AHouseType;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
 /**
 * @author Administrator
 * @description 针对表【a_house_type(户型表)】的数据库操作Service
-* @createDate 2025-06-24 16:24:28
+* @createLocalDate 2025-06-24 16:24:28
 */
 public interface AHouseTypeService extends IService<AHouseType> {
         List<AHouseType> getHouseTypeList(String accountNumber);
         Page<AHouseType> findByPage(long pageNum, long pageSize, String accountNumber);
+        boolean saveHouseType(AHouseType houseType, MultipartFile multipartFile);
+        boolean upLocalDateHouseType(AHouseType houseType, MultipartFile multipartFile);
+        boolean removeBatchHouseType(String[] ids);
 }

+ 3 - 3
src/main/java/com/zksy/property/service/ARoomService.java

@@ -9,12 +9,12 @@ import java.util.List;
 /**
 * @author Administrator
 * @description 针对表【a_room(房间表)】的数据库操作Service
-* @createDate 2025-06-26 09:44:49
+* @createLocalDate 2025-06-26 09:44:49
 */
 public interface ARoomService extends IService<ARoom> {
 
     List<ARoom> getByHouseTypeId(String houseTypeId);
     boolean saveARoom(ARoom aRoom, MultipartFile multipartFile);
-    boolean updateARoom(ARoom aRoom, MultipartFile multipartFile);
-    boolean removeBatchARoom(List<String> ids);
+    boolean upLocalDateARoom(ARoom aRoom, MultipartFile multipartFile);
+    boolean removeBatchARoom(String[] ids);
 }

+ 70 - 5
src/main/java/com/zksy/property/service/impl/AHouseTypeServiceImpl.java

@@ -1,13 +1,19 @@
 package com.zksy.property.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zksy.property.domain.AHouseType;
+import com.zksy.property.domain.ARoom;
 import com.zksy.property.service.AHouseTypeService;
 import com.zksy.property.mapper.AHouseTypeMapper;
+import com.zksy.property.service.ARoomService;
+import com.zksy.service.MinioFileStorageService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -15,7 +21,7 @@ import java.util.List;
 /**
 * @author Administrator
 * @description 针对表【a_house_type(户型表)】的数据库操作Service实现
-* @createDate 2025-06-24 16:24:28
+* @createLocalDate 2025-06-24 16:24:28
 */
 @Service
 public class AHouseTypeServiceImpl extends ServiceImpl<AHouseTypeMapper, AHouseType>
@@ -23,11 +29,16 @@ public class AHouseTypeServiceImpl extends ServiceImpl<AHouseTypeMapper, AHouseT
 
     @Autowired
     private AHouseTypeMapper mapper;
+    @Autowired
+    private MinioFileStorageService minioFileStorageService;
+    @Autowired
+    private ARoomService roomService;
     @Override
     public List<AHouseType> getHouseTypeList(String accountNumber) {
-        QueryWrapper<AHouseType> queryWrapper = new QueryWrapper();
-        queryWrapper.like("account_number",accountNumber);
-        List<AHouseType> list = mapper.selectList(queryWrapper);
+        LambdaQueryWrapper<AHouseType> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.like(accountNumber != null,AHouseType::getAccountNumber,accountNumber);
+        lambdaQueryWrapper.orderByDesc(AHouseType::getUpLocalDateTime);
+        List<AHouseType> list = mapper.selectList(lambdaQueryWrapper);
         return list;
     }
 
@@ -35,11 +46,65 @@ public class AHouseTypeServiceImpl extends ServiceImpl<AHouseTypeMapper, AHouseT
     public Page<AHouseType> findByPage(long pageNum, long pageSize, String accountNumber){
         Page<AHouseType> page = new Page<>(pageNum,pageSize);
         QueryWrapper<AHouseType> queryWrapper = new QueryWrapper();
-        queryWrapper.like("account_number",accountNumber);
+        queryWrapper.like(accountNumber != null ,"account_number",accountNumber);
+        queryWrapper.orderByDesc("upLocalDate_time");
         Page<AHouseType> page1 = mapper.selectPage(page, queryWrapper);
         return page1;
     }
 
+    @Override
+    @Transactional
+    public boolean saveHouseType(AHouseType houseType, MultipartFile multipartFile) {
+        try {
+            if (multipartFile != null) {
+                String path = minioFileStorageService.uploadFile(multipartFile, "houseType");
+                houseType.setAccountUrl(path);
+            }
+            return save(houseType);
+        }catch (Exception e){
+            e.printStackTrace();
+            throw new RuntimeException("保存失败");
+        }
+    }
+
+    @Override
+    @Transactional
+    public boolean upLocalDateHouseType(AHouseType houseType, MultipartFile multipartFile) {
+        try {
+            if (multipartFile != null) {
+                // 删除minio文件
+                minioFileStorageService.deleteFile(houseType.getAccountUrl());
+                String path = minioFileStorageService.uploadFile(multipartFile, "houseType");
+                houseType.setAccountUrl(path);
+            }
+            return updateById(houseType);
+        }catch (Exception e){
+            e.printStackTrace();
+            throw new RuntimeException("修改失败");
+        }
+    }
+
+    @Override
+    @Transactional
+    public boolean removeBatchHouseType(String[] ids) {
+        try {
+            for (String id : ids) {
+                List<ARoom> houseTypeIds = roomService.getByHouseTypeId( id);
+                if(houseTypeIds != null){
+                    throw new RuntimeException("请先删除该户型下的所有房间");
+                }
+                AHouseType houseType = getById(id);
+                if (houseType != null) {
+                    minioFileStorageService.deleteFile(houseType.getAccountUrl());
+                }
+                removeById(id);
+            }
+            return true;
+        }catch (Exception e){
+            e.printStackTrace();
+            throw new RuntimeException("删除失败");
+        }
+    }
 }
 
 

+ 22 - 12
src/main/java/com/zksy/property/service/impl/ARoomServiceImpl.java

@@ -9,6 +9,8 @@ import com.zksy.property.mapper.ARoomMapper;
 import com.zksy.service.MinioFileStorageService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
@@ -16,7 +18,7 @@ import java.util.List;
 /**
 * @author Administrator
 * @description 针对表【a_room(房间表)】的数据库操作Service实现
-* @createDate 2025-06-26 09:44:49
+* @createLocalDate 2025-06-26 09:44:49
 */
 @Service
 public class ARoomServiceImpl extends ServiceImpl<ARoomMapper, ARoom>
@@ -29,12 +31,13 @@ public class ARoomServiceImpl extends ServiceImpl<ARoomMapper, ARoom>
     @Override
     public List<ARoom> getByHouseTypeId(String houseTypeId) {
         QueryWrapper<ARoom> queryWrapper = new QueryWrapper();
-        queryWrapper.eq("house_type_id",houseTypeId);
+        queryWrapper.eq(houseTypeId != null,"house_type_id",houseTypeId);
         List<ARoom> list = mapper.selectList(queryWrapper);
         return list;
     }
 
     @Override
+    @Transactional
     public boolean saveARoom(ARoom aRoom, MultipartFile multipartFile) {
         try {
             if (multipartFile != null) {
@@ -44,12 +47,13 @@ public class ARoomServiceImpl extends ServiceImpl<ARoomMapper, ARoom>
             return save(aRoom);
         }catch (Exception e){
             e.printStackTrace();
+            throw new RuntimeException("添加失败");
         }
-        return false;
     }
 
     @Override
-    public boolean updateARoom(ARoom aRoom, MultipartFile multipartFile) {
+    @Transactional
+    public boolean upLocalDateARoom(ARoom aRoom, MultipartFile multipartFile) {
         try {
             if (multipartFile != null) {
                 // 删除minio文件
@@ -60,20 +64,26 @@ public class ARoomServiceImpl extends ServiceImpl<ARoomMapper, ARoom>
             return updateById(aRoom);
         }catch (Exception e){
             e.printStackTrace();
+            throw new RuntimeException("修改失败");
         }
-        return false;
     }
 
     @Override
-    public boolean removeBatchARoom(List<String> ids) {
-        for (String id : ids) {
-            ARoom aRoom = getById(id);
-            if (aRoom != null) {
-                minioFileStorageService.deleteFile(aRoom.getRoomPictureUrl());
+    @Transactional
+    public boolean removeBatchARoom(String[] ids) {
+        try {
+            for (String id : ids) {
+                ARoom aRoom = getById(id);
+                if (aRoom != null) {
+                    minioFileStorageService.deleteFile(aRoom.getRoomPictureUrl());
+                }
+                removeById(id);
             }
-            removeById(id);
+            return true;
+        }catch (Exception e){
+            e.printStackTrace();
+            throw new RuntimeException("删除失败");
         }
-        return false;
     }
 }
 

+ 4 - 5
src/main/java/com/zksy/advice/CommonExceptionAdvice.java → src/main/java/com/zksy/utils/CommonExceptionAdvice.java

@@ -1,10 +1,9 @@
-package com.zksy.advice;
+package com.zksy.utils;
 
 
-import com.zksy.exception.BadRequestException;
-import com.zksy.exception.CommonException;
-import com.zksy.exception.DbException;
-import com.zksy.utils.AjaxResult;
+import com.zksy.utils.exception.BadRequestException;
+import com.zksy.utils.exception.CommonException;
+import com.zksy.utils.exception.DbException;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.ResponseEntity;
 import org.springframework.validation.ObjectError;

+ 141 - 0
src/main/java/com/zksy/utils/ExcelExportUtil.java

@@ -0,0 +1,141 @@
+package com.zksy.utils;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.List;
+
+public class ExcelExportUtil {
+
+    /**
+     * 通用 Excel 导出方法,只导出有 @ExcelProperty 注解的字段
+     * @param response HTTP 响应对象
+     * @param dataList 数据列表
+     * @param head 表头类型
+     * @param fileName 文件名
+     * @param sheetName 工作表名
+     * @param <T> 数据类型
+     * @return 导出成功返回 true,失败返回 false
+     */
+    public static <T> boolean exportExcel(HttpServletResponse response, List<T> dataList, Class<T> head,
+                                          String fileName, String sheetName) {
+        try {
+            // 设置响应头
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("UTF-8");
+            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
+
+            // 配置表头样式
+            WriteCellStyle headWriteCellStyle = new WriteCellStyle();
+            headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+            WriteFont headWriteFont = new WriteFont();
+            headWriteFont.setFontHeightInPoints((short)12);
+            headWriteCellStyle.setWriteFont(headWriteFont);
+
+            // 配置内容样式
+            WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
+            contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+
+            // 应用样式策略
+            HorizontalCellStyleStrategy horizontalCellStyleStrategy =
+                    new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
+
+            // 获取输出流并写入 Excel 数据,使用指定的类作为表头,会自动过滤没有 @ExcelProperty 注解的字段
+            try (OutputStream outputStream = response.getOutputStream()) {
+                EasyExcel.write(outputStream, head)
+                        .registerWriteHandler(horizontalCellStyleStrategy)
+                        .sheet(sheetName)
+                        .doWrite(dataList);
+            }
+            return true;
+        } catch (IOException e) {
+            // 记录异常日志
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 导出多 sheet 的 Excel 文件,只导出有 @ExcelProperty 注解的字段
+     * @param response HTTP 响应对象
+     * @param sheetDataList 多个 sheet 的数据列表
+     * @param fileName 文件名
+     */
+    public static void exportMultiSheetExcel(HttpServletResponse response,
+                                             List<SheetData<?>> sheetDataList,
+                                             String fileName) {
+        try {
+            // 设置响应头
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("UTF-8");
+            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
+
+            // 配置表头样式
+            WriteCellStyle headWriteCellStyle = new WriteCellStyle();
+            headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+            WriteFont headWriteFont = new WriteFont();
+            headWriteFont.setFontHeightInPoints((short)12);
+            headWriteCellStyle.setWriteFont(headWriteFont);
+
+            // 配置内容样式
+            WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
+            contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+
+            // 应用样式策略
+            HorizontalCellStyleStrategy horizontalCellStyleStrategy =
+                    new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
+
+            // 获取输出流并写入 Excel 数据
+            try (OutputStream outputStream = response.getOutputStream()) {
+                var excelWriter = EasyExcel.write(outputStream).registerWriteHandler(horizontalCellStyleStrategy).build();
+                try {
+                    for (SheetData<?> sheetData : sheetDataList) {
+                        WriteSheet writeSheet = EasyExcel.writerSheet(sheetData.getSheetName())
+                                .head(sheetData.getHead()).build();
+                        excelWriter.write(sheetData.getDataList(), writeSheet);
+                    }
+                } finally {
+                    // 关闭 writer,释放内存
+                    excelWriter.finish();
+                }
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 内部类,用于存储 sheet 数据
+     */
+    public static class SheetData<T> {
+        private String sheetName;
+        private Class<T> head;
+        private List<T> dataList;
+
+        public SheetData(String sheetName, Class<T> head, List<T> dataList) {
+            this.sheetName = sheetName;
+            this.head = head;
+            this.dataList = dataList;
+        }
+
+        public String getSheetName() {
+            return sheetName;
+        }
+
+        public Class<T> getHead() {
+            return head;
+        }
+
+        public List<T> getDataList() {
+            return dataList;
+        }
+    }
+}

+ 100 - 0
src/main/java/com/zksy/utils/ExcelImportUtil.java

@@ -0,0 +1,100 @@
+package com.zksy.utils;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.read.listener.ReadListener;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+
+public class ExcelImportUtil {
+
+    /**
+     * 通用 Excel 导入方法
+     * @param file 上传的 Excel 文件
+     * @param head 表头类型
+     * @param <T> 数据类型
+     * @return 解析后的对象列表
+     */
+    public static <T> List<T> importExcel(MultipartFile file, Class<T> head) {
+        List<T> dataList = new ArrayList<>();
+
+        try {
+            EasyExcel.read(file.getInputStream(), head, new ReadListener<T>() {
+                @Override
+                public void invoke(T data, AnalysisContext context) {
+                    dataList.add(data);
+                }
+
+                @Override
+                public void doAfterAllAnalysed(AnalysisContext context) {
+                    // 所有数据解析完成后的操作
+                }
+            }).sheet().doRead();
+        } catch (IOException e) {
+            // 记录异常日志,避免在生产环境打印堆栈信息
+            e.printStackTrace();
+        }
+
+        return dataList;
+    }
+
+    /**
+     * 流式处理 Excel 数据的导入方法,适合处理大数据量
+     * @param file 上传的 Excel 文件
+     * @param head 表头类型
+     * @param consumer 数据处理函数
+     * @param <T> 数据类型
+     */
+    public static <T> void importExcelStream(MultipartFile file, Class<T> head, Consumer<T> consumer) {
+        try {
+            EasyExcel.read(file.getInputStream(), head, new ReadListener<T>() {
+                @Override
+                public void invoke(T data, AnalysisContext context) {
+                    // 每读取一行数据就立即处理,无需等待全部数据加载完成
+                    consumer.accept(data);
+                }
+
+                @Override
+                public void doAfterAllAnalysed(AnalysisContext context) {
+                    // 所有数据解析完成后的操作
+                }
+            }).sheet().doRead();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 导入指定 sheet 的 Excel 数据
+     * @param file 上传的 Excel 文件
+     * @param head 表头类型
+     * @param sheetNo sheet 编号,从 0 开始
+     * @param <T> 数据类型
+     * @return 解析后的对象列表
+     */
+    public static <T> List<T> importExcelBySheet(MultipartFile file, Class<T> head, int sheetNo) {
+        List<T> dataList = new ArrayList<>();
+
+        try {
+            EasyExcel.read(file.getInputStream(), head, new ReadListener<T>() {
+                @Override
+                public void invoke(T data, AnalysisContext context) {
+                    dataList.add(data);
+                }
+
+                @Override
+                public void doAfterAllAnalysed(AnalysisContext context) {
+                    // 所有数据解析完成后的操作
+                }
+            }).sheet(sheetNo).doRead();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return dataList;
+    }
+}

+ 23 - 0
src/main/java/com/zksy/utils/JsonConfig.java

@@ -0,0 +1,23 @@
+package com.zksy.utils;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.math.BigInteger;
+
+@Configuration
+@ConditionalOnClass(ObjectMapper.class)
+public class JsonConfig {
+    @Bean
+    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
+        return jacksonObjectMapperBuilder -> {
+            // long -> string
+            jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);
+            jacksonObjectMapperBuilder.serializerByType(BigInteger.class, ToStringSerializer.instance);
+        };
+    }
+}

+ 1 - 1
src/main/java/com/zksy/exception/BadRequestException.java → src/main/java/com/zksy/utils/exception/BadRequestException.java

@@ -1,4 +1,4 @@
-package com.zksy.exception;
+package com.zksy.utils.exception;
 
 public class BadRequestException extends CommonException{
 

+ 1 - 1
src/main/java/com/zksy/exception/BizIllegalException.java → src/main/java/com/zksy/utils/exception/BizIllegalException.java

@@ -1,4 +1,4 @@
-package com.zksy.exception;
+package com.zksy.utils.exception;
 
 public class BizIllegalException extends CommonException{
 

+ 1 - 1
src/main/java/com/zksy/exception/CommonException.java → src/main/java/com/zksy/utils/exception/CommonException.java

@@ -1,4 +1,4 @@
-package com.zksy.exception;
+package com.zksy.utils.exception;
 
 import lombok.Getter;
 

+ 1 - 1
src/main/java/com/zksy/exception/DbException.java → src/main/java/com/zksy/utils/exception/DbException.java

@@ -1,4 +1,4 @@
-package com.zksy.exception;
+package com.zksy.utils.exception;
 
 public class DbException extends CommonException{
 

+ 1 - 1
src/main/java/com/zksy/exception/ForbiddenException.java → src/main/java/com/zksy/utils/exception/ForbiddenException.java

@@ -1,4 +1,4 @@
-package com.zksy.exception;
+package com.zksy.utils.exception;
 
 public class ForbiddenException extends CommonException{
 

+ 1 - 1
src/main/java/com/zksy/exception/ServiceException.java → src/main/java/com/zksy/utils/exception/ServiceException.java

@@ -1,4 +1,4 @@
-package com.zksy.exception;
+package com.zksy.utils.exception;
 
 /**
  * 业务异常

+ 1 - 1
src/main/java/com/zksy/exception/UnauthorizedException.java → src/main/java/com/zksy/utils/exception/UnauthorizedException.java

@@ -1,4 +1,4 @@
-package com.zksy.exception;
+package com.zksy.utils.exception;
 
 public class UnauthorizedException extends CommonException{
 

+ 1 - 1
src/main/resources/application-prod.yml

@@ -33,7 +33,7 @@ spring:
     druid:
       # 主库数据源
       master:
-        url: jdbc:mysql://10.0.114.7:3307/enterprise_assets?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://10.0.114.7:3307/enterprise_assets?useUnicode=true&characterEncoding=utf8&zeroLocalDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: 123456
       # 从库数据源

+ 3 - 3
src/main/resources/mapper/common/FileManagerMapper.xml

@@ -14,8 +14,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="fileSize" column="file_size" jdbcType="DOUBLE"/>
         <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
         <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
-        <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
-        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="upLocalDateBy" column="upLocalDate_by" jdbcType="VARCHAR"/>
+        <result property="upLocalDateTime" column="upLocalDate_time" jdbcType="TIMESTAMP"/>
         <result property="isDelete" column="is_delete" jdbcType="INTEGER"/>
     </resultMap>
 
@@ -23,7 +23,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         id,fid,module_name,
         file_original_name,file_url,file_name,
         file_size,create_by,create_time,
-        update_by,update_time,is_delete
+        upLocalDate_by,upLocalDate_time,is_delete
     </sql>
 
 </mapper>

+ 3 - 3
src/main/resources/mapper/property/AHouseTypeMapper.xml

@@ -12,13 +12,13 @@
             <result property="accountUrl" column="account_url" jdbcType="VARCHAR"/>
             <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
             <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
-            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
-            <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+            <result property="upLocalDateTime" column="upLocalDate_time" jdbcType="TIMESTAMP"/>
+            <result property="upLocalDateBy" column="upLocalDate_by" jdbcType="VARCHAR"/>
     </resultMap>
 
     <sql id="Base_Column_List">
         id,account_number,address,
         area,create_time,create_by,
-        update_time,update_by
+        upLocalDate_time,upLocalDate_by
     </sql>
 </mapper>

+ 5 - 4
src/main/resources/mapper/property/ARoomMapper.xml

@@ -9,15 +9,16 @@
             <result property="houseTypeId" column="house_type_id" jdbcType="VARCHAR"/>
             <result property="roomNumber" column="room_number" jdbcType="VARCHAR"/>
             <result property="roomPictureUrl" column="room_picture_url" jdbcType="VARCHAR"/>
+            <result property="attribute" column="attribute" jdbcType="VARCHAR"/>
             <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
             <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
-            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
-            <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+            <result property="upLocalDateTime" column="upLocalDate_time" jdbcType="TIMESTAMP"/>
+            <result property="upLocalDateBy" column="upLocalDate_by" jdbcType="VARCHAR"/>
     </resultMap>
 
     <sql id="Base_Column_List">
         id,house_type_id,room_number,
-        room_picture_url,create_time,create_by,
-        update_time,update_by
+        room_picture_url,attribute,create_time,create_by,
+        upLocalDate_time,upLocalDate_by
     </sql>
 </mapper>