Browse Source

Merge branch 'master' of http://60.171.161.56:20000/tjf/wuliguanli

wangmengwei 3 months ago
parent
commit
b56c968d13
100 changed files with 10072 additions and 148 deletions
  1. 138 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/asset/AssetTypeController.java
  2. 101 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/assets/CommunityAssetsController.java
  3. 98 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/blackManage/BlackManageController.java
  4. 105 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/butler/ButlerSettingsController.java
  5. 111 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/checkPoint/CheckPointManageController.java
  6. 100 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/checkPoint/CheckPointRecordController.java
  7. 18 11
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
  8. 82 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/OcrController.java
  9. 91 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/communityNews/CommentContentController.java
  10. 129 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/communityNews/CommentIndexController.java
  11. 106 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/communityNews/CommentLikesController.java
  12. 113 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/communityNews/CommentStarsController.java
  13. 110 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/communityNews/CommunityNewsController.java
  14. 91 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/complaintSuggestion/ComplaintSuggestionController.java
  15. 117 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/houseInfo/HouseInfoController.java
  16. 140 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/houseInfo/PropertyFeeController.java
  17. 105 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/houseInfo/PropertySettingsController.java
  18. 99 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/illegalParking/IllegalParkingController.java
  19. 3 3
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java
  20. 2 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java
  21. 2 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
  22. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
  23. 94 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/partyNews/PartyNewsController.java
  24. 121 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/propertyRepair/PropertyRepairController.java
  25. 91 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/proprietorCar/ProprietorCarController.java
  26. 91 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/reservRecord/ReservRecordController.java
  27. 101 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/residentInfo/ResidentInfoController.java
  28. 102 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/staffManage/StaffManageController.java
  29. 102 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/staffTrain/StaffTrainManualController.java
  30. 90 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/staffTrainTime/StaffTrainTimeController.java
  31. 39 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/statistics/StatisticsController.java
  32. 97 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/suggestionFj/SuggestionFjController.java
  33. 3 3
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
  34. 2 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
  35. 2 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
  36. 11 17
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
  37. 2 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
  38. 2 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java
  39. 2 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java
  40. 7 12
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
  41. 14 20
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
  42. 15 21
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
  43. 100 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/UpdateAppController.java
  44. 2 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
  45. 91 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/visitor/VisitorManageController.java
  46. 1 1
      ruoyi-admin/src/main/resources/application.yml
  47. 41 3
      ruoyi-common/pom.xml
  48. 10 0
      ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java
  49. 55 1
      ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
  50. 6 0
      ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java
  51. 26 7
      ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
  52. 71 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/IdCardVo.java
  53. 12 3
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java
  54. 148 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AssetType.java
  55. 314 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/ResidentInfo.java
  56. 208 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/StaffManage.java
  57. 39 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java
  58. 15 6
      ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
  59. 65 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/Base64Util.java
  60. 24 6
      ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
  61. 72 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/FileUtil.java
  62. 77 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java
  63. 77 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtils.java
  64. 874 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/IdCardUtil.java
  65. 98 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/ImageSizeUtil.java
  66. 1 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java
  67. 10 1
      ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java
  68. 1 1
      ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
  69. 73 3
      ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java
  70. 8 1
      ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
  71. 2 2
      ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
  72. 5 3
      ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java
  73. 1 0
      ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
  74. 4 4
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java
  75. 2 2
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java
  76. 134 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/UpdateApp.java
  77. 357 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/assets/CommunityAssets.java
  78. 98 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/blackManage/BlackManage.java
  79. 84 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/butler/ButlerSettings.java
  80. 140 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/checkPoint/CheckPointManage.java
  81. 263 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/checkPoint/CheckPointRecord.java
  82. 139 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/CommentContent.java
  83. 255 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/CommentIndex.java
  84. 143 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/CommentLikes.java
  85. 139 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/CommentStars.java
  86. 316 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/CommunityNews.java
  87. 190 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/vo/CommentChildrenVo.java
  88. 227 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/vo/CommentIndexShVo.java
  89. 187 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/vo/CommentIndexVo.java
  90. 151 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/vo/CommentInteractionVo.java
  91. 61 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/vo/CommentUser.java
  92. 58 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/vo/TargetUser.java
  93. 192 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/complaintSuggestion/ComplaintSuggestion.java
  94. 292 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/houseInfo/HouseInfo.java
  95. 267 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/houseInfo/PropertyFee.java
  96. 99 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/houseInfo/PropertySettings.java
  97. 165 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/illegalParking/IllegalParking.java
  98. 203 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/partyNews/PartyNews.java
  99. 288 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/propertyRepair/PropertyRepair.java
  100. 241 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/proprietorCar/ProprietorCar.java

+ 138 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/asset/AssetTypeController.java

@@ -0,0 +1,138 @@
+package com.ruoyi.web.controller.asset;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.AssetType;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.service.IAssetTypeService;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 资产类型Controller
+ *
+ * @author boman
+ * @date 2025-02-17
+ */
+@RestController
+@RequestMapping("/wuYe/assetType")
+public class AssetTypeController extends BaseController {
+    @Autowired
+    private IAssetTypeService assetTypeService;
+
+    /**
+     * 查询资产类型列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:assetType:list')")
+    @GetMapping("/list")
+    public AjaxResult list(AssetType assetType) {
+
+        List<AssetType> list = assetTypeService.selectAssetTypeList(assetType);
+        return success(list);
+    }
+
+    /**
+     * 查询部门列表(排除节点)
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:assetType:list')")
+    @GetMapping("/list/exclude/{assetId}")
+    public AjaxResult excludeChild(@PathVariable(value = "assetId", required = false) Long assetId)
+    {
+        List<AssetType> assetTypes = assetTypeService.selectAssetTypeList(new AssetType());
+        assetTypes.removeIf(d -> d.getAssetId().intValue() == assetId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), assetId + ""));
+        return success(assetTypes);
+    }
+    /**
+     * 导出资产类型列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:assetType:export')")
+    @Log(title = "资产类型", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, AssetType assetType) {
+        List<AssetType> list = assetTypeService.selectAssetTypeList(assetType);
+        ExcelUtil<AssetType> util = new ExcelUtil<AssetType>(AssetType.class);
+        util.exportExcel(response, list, "资产类型数据");
+    }
+
+    /**
+     * 获取资产类型详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:assetType:query')")
+    @GetMapping(value = "/{assetId}")
+    public AjaxResult getInfo(@PathVariable("assetId") Long assetId) {
+        return success(assetTypeService.selectAssetTypeByAssetId(assetId));
+    }
+
+    /**
+     * 新增资产类型
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:assetType:add')")
+    @Log(title = "资产类型", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody AssetType assetType) {
+        if (!assetTypeService.checkAssetTypeNameUnique(assetType))
+        {
+            return error("新增资产'" + assetType.getAssetName() + "'失败,资产名称已存在");
+        }
+        return toAjax(assetTypeService.insertAssetType(assetType));
+    }
+
+    /**
+     * 修改资产类型
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:assetType:edit')")
+    @Log(title = "资产类型", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody AssetType assetType) {
+        Long assetId = assetType.getAssetId();
+        if (!assetTypeService.checkAssetTypeNameUnique(assetType))
+        {
+            return error("新增资产'" + assetType.getAssetName() + "'失败,资产名称已存在");
+        }
+        else if (assetType.getParentId().equals(assetId))
+        {
+            return error("修改资产'" + assetType.getAssetName() + "'失败,上级资产不能是自己");
+        }
+        else if (StringUtils.equals(UserConstants.DEPT_DISABLE, assetType.getStatus()) && assetTypeService.selectNormalChildrenAssetById(assetId) > 0)
+        {
+            return error("该部门包含未停用的子部门!");
+        }
+        return toAjax(assetTypeService.updateAssetType(assetType));
+    }
+
+    /**
+     * 删除资产类型
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:assetType:remove')")
+    @Log(title = "资产类型", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{assetIds}")
+    public AjaxResult remove(@PathVariable Long[] assetIds) {
+        for (Long assetId : assetIds) {
+            if (assetTypeService.hasChildByAssetId(assetId))
+            {
+                return warn("存在下级资产,不允许删除");
+            }
+        }
+        return toAjax(assetTypeService.deleteAssetTypeByAssetIds(assetIds));
+    }
+
+
+    /**
+     * 获取资产分类树列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:assetType:deptTree')")
+    @GetMapping("/deptTree")
+    public AjaxResult deptTree(AssetType assetType)
+    {
+        return success(assetTypeService.selectAssetTypeTreeList(assetType));
+    }
+}

+ 101 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/assets/CommunityAssetsController.java

@@ -0,0 +1,101 @@
+package com.ruoyi.web.controller.assets;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.assets.CommunityAssets;
+import com.ruoyi.system.service.ICommunityAssetsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 社区资产Controller
+ *
+ * @author boman
+ * @date 2025-02-24
+ */
+@RestController
+@RequestMapping("/wuYe/assets")
+public class CommunityAssetsController extends BaseController {
+    @Autowired
+    private ICommunityAssetsService communityAssetsService;
+
+    /**
+     * 查询社区资产列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:assets:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CommunityAssets communityAssets) {
+        startPage();
+        List<CommunityAssets> list = communityAssetsService.selectCommunityAssetsList(communityAssets);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出社区资产列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:assets:export')")
+    @Log(title = "社区资产", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, CommunityAssets communityAssets) {
+        List<CommunityAssets> list = communityAssetsService.selectCommunityAssetsList(communityAssets);
+        ExcelUtil<CommunityAssets> util = new ExcelUtil<CommunityAssets>(CommunityAssets.class);
+        util.exportExcel(response, list, "社区资产数据");
+    }
+
+    /**
+     * 获取社区资产详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:assets:query')")
+    @GetMapping(value = "/{communityAssetId}")
+    public AjaxResult getInfo(@PathVariable("communityAssetId") Long communityAssetId) {
+        return success(communityAssetsService.selectCommunityAssetsByCommunityAssetId(communityAssetId));
+    }
+
+    /**
+     * 新增社区资产
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:assets:add')")
+    @Log(title = "社区资产", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CommunityAssets communityAssets) {
+        if (!communityAssetsService.checkEquipmentNumberUnique(communityAssets)) {
+            {
+                return error("新增资产'" + communityAssets.getAssetName() + "'失败,资产编号已存在");
+            }
+        }
+        return toAjax(communityAssetsService.insertCommunityAssets(communityAssets));
+    }
+
+    /**
+     * 修改社区资产
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:assets:edit')")
+    @Log(title = "社区资产", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody CommunityAssets communityAssets) {
+        if (!communityAssetsService.checkEquipmentNumberUnique(communityAssets)) {
+            {
+                return error("新增资产'" + communityAssets.getAssetName() + "'失败,资产编号已存在");
+            }
+        }
+        return toAjax(communityAssetsService.updateCommunityAssets(communityAssets));
+    }
+
+    /**
+     * 删除社区资产
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:assets:remove')")
+    @Log(title = "社区资产", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{communityAssetIds}")
+    public AjaxResult remove(@PathVariable Long[] communityAssetIds) {
+        return toAjax(communityAssetsService.deleteCommunityAssetsByCommunityAssetIds(communityAssetIds));
+    }
+}

+ 98 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/blackManage/BlackManageController.java

@@ -0,0 +1,98 @@
+package com.ruoyi.web.controller.blackManage;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.blackManage.BlackManage;
+import com.ruoyi.system.service.IBlackManageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 黑名单管理Controller
+ *
+ * @author boman
+ * @date 2025-02-17
+ */
+@RestController
+@RequestMapping("/wuYe/blackManage")
+public class BlackManageController extends BaseController
+{
+    @Autowired
+    private IBlackManageService blackManageService;
+
+/**
+ * 查询黑名单管理列表
+ */
+@PreAuthorize("@ss.hasPermi('wuYe:blackManage:list')")
+@GetMapping("/list")
+    public TableDataInfo list(BlackManage blackManage)
+    {
+        startPage();
+        List<BlackManage> list = blackManageService.selectBlackManageList(blackManage);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出黑名单管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:blackManage:export')")
+    @Log(title = "黑名单管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BlackManage blackManage)
+    {
+        List<BlackManage> list = blackManageService.selectBlackManageList(blackManage);
+        ExcelUtil<BlackManage> util = new ExcelUtil<BlackManage>(BlackManage.class);
+        util.exportExcel(response, list, "黑名单管理数据");
+    }
+
+    /**
+     * 获取黑名单管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:blackManage:query')")
+    @GetMapping(value = "/{blackManageId}")
+    public AjaxResult getInfo(@PathVariable("blackManageId") Long blackManageId)
+    {
+        return success(blackManageService.selectBlackManageByBlackManageId(blackManageId));
+    }
+
+    /**
+     * 新增黑名单管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:blackManage:add')")
+    @Log(title = "黑名单管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BlackManage blackManage)
+    {
+        return toAjax(blackManageService.insertBlackManage(blackManage));
+    }
+
+    /**
+     * 修改黑名单管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:blackManage:edit')")
+    @Log(title = "黑名单管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody BlackManage blackManage)
+    {
+        return toAjax(blackManageService.updateBlackManage(blackManage));
+    }
+
+    /**
+     * 删除黑名单管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:blackManage:remove')")
+    @Log(title = "黑名单管理", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{blackManageIds}")
+    public AjaxResult remove(@PathVariable Long[] blackManageIds)
+    {
+        return toAjax(blackManageService.deleteBlackManageByBlackManageIds(blackManageIds));
+    }
+}

+ 105 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/butler/ButlerSettingsController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.web.controller.butler;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.system.domain.butler.ButlerSettings;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.system.service.IButlerSettingsService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 物业管家设置Controller
+ *
+ * @author boman
+ * @date 2025-03-07
+ */
+@RestController
+@RequestMapping("/wuYe/settings")
+public class ButlerSettingsController extends BaseController
+{
+    @Autowired
+    private IButlerSettingsService butlerSettingsService;
+
+/**
+ * 查询物业管家设置列表
+ */
+@PreAuthorize("@ss.hasPermi('wuYe:settings:list')")
+@GetMapping("/list")
+    public TableDataInfo list(ButlerSettings butlerSettings)
+    {
+        startPage();
+        List<ButlerSettings> list = butlerSettingsService.selectButlerSettingsList(butlerSettings);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出物业管家设置列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:settings:export')")
+    @Log(title = "物业管家设置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ButlerSettings butlerSettings)
+    {
+        List<ButlerSettings> list = butlerSettingsService.selectButlerSettingsList(butlerSettings);
+        ExcelUtil<ButlerSettings> util = new ExcelUtil<ButlerSettings>(ButlerSettings.class);
+        util.exportExcel(response, list, "物业管家设置数据");
+    }
+
+    /**
+     * 获取物业管家设置详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:settings:query')")
+    @GetMapping(value = "/{settingsId}")
+    public AjaxResult getInfo(@PathVariable("settingsId") Long settingsId)
+    {
+        return success(butlerSettingsService.selectButlerSettingsBySettingsId(settingsId));
+    }
+
+    /**
+     * 新增物业管家设置
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:settings:add')")
+    @Log(title = "物业管家设置", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ButlerSettings butlerSettings)
+    {
+        return toAjax(butlerSettingsService.insertButlerSettings(butlerSettings));
+    }
+
+    /**
+     * 修改物业管家设置
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:settings:edit')")
+    @Log(title = "物业管家设置", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody ButlerSettings butlerSettings)
+    {
+        return toAjax(butlerSettingsService.updateButlerSettings(butlerSettings));
+    }
+
+    /**
+     * 删除物业管家设置
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:settings:remove')")
+    @Log(title = "物业管家设置", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{settingsIds}")
+    public AjaxResult remove(@PathVariable Long[] settingsIds)
+    {
+        return toAjax(butlerSettingsService.deleteButlerSettingsBySettingsIds(settingsIds));
+    }
+}

+ 111 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/checkPoint/CheckPointManageController.java

@@ -0,0 +1,111 @@
+package com.ruoyi.web.controller.checkPoint;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.checkPoint.CheckPointManage;
+import com.ruoyi.system.service.ICheckPointManageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 巡更点管理Controller
+ *
+ * @author boman
+ * @date 2025-02-14
+ */
+@RestController
+@RequestMapping("/wuYe/checkPointManage")
+public class CheckPointManageController extends BaseController {
+    @Autowired
+    private ICheckPointManageService checkPointManageService;
+
+    /**
+     * 查询巡更点管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointManage:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CheckPointManage checkPointManage) {
+        startPage();
+        List<CheckPointManage> list = checkPointManageService.selectCheckPointManageList(checkPointManage);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询巡更点管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointManage:listNoPage')")
+    @GetMapping("/listNoPage")
+    public TableDataInfo listNoPage(CheckPointManage checkPointManage) {
+
+        List<CheckPointManage> list = checkPointManageService.selectCheckPointManageList(checkPointManage);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出巡更点管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointManage:export')")
+    @Log(title = "巡更点管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, CheckPointManage checkPointManage) {
+        List<CheckPointManage> list = checkPointManageService.selectCheckPointManageList(checkPointManage);
+        ExcelUtil<CheckPointManage> util = new ExcelUtil<CheckPointManage>(CheckPointManage.class);
+        util.exportExcel(response, list, "巡更点管理数据");
+    }
+
+    /**
+     * 获取巡更点管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointManage:query')")
+    @GetMapping(value = "/{checkPointManageId}")
+    public AjaxResult getInfo(@PathVariable("checkPointManageId") Long checkPointManageId) {
+        return success(checkPointManageService.selectCheckPointManageByCheckPointManageId(checkPointManageId));
+    }
+
+    /**
+     * 新增巡更点管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointManage:add')")
+    @Log(title = "巡更点管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CheckPointManage checkPointManage) {
+        return toAjax(checkPointManageService.insertCheckPointManage(checkPointManage));
+    }
+
+    /**
+     * 批量新增巡更点管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointManage:addList')")
+    @PostMapping("/addList")
+    public AjaxResult addList(@RequestBody CheckPointManage checkPointManage) {
+        return toAjax(checkPointManageService.batchCheckPointManage(checkPointManage.getCheckPointManageList()));
+    }
+
+    /**
+     * 修改巡更点管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointManage:edit')")
+    @Log(title = "巡更点管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody CheckPointManage checkPointManage) {
+        return toAjax(checkPointManageService.updateCheckPointManage(checkPointManage));
+    }
+
+    /**
+     * 删除巡更点管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointManage:remove')")
+    @Log(title = "巡更点管理", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{checkPointManageIds}")
+    public AjaxResult remove(@PathVariable Long[] checkPointManageIds) {
+        return toAjax(checkPointManageService.deleteCheckPointManageByCheckPointManageIds(checkPointManageIds));
+    }
+}

+ 100 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/checkPoint/CheckPointRecordController.java

@@ -0,0 +1,100 @@
+package com.ruoyi.web.controller.checkPoint;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.checkPoint.CheckPointRecord;
+import com.ruoyi.system.service.ICheckPointRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 巡更点记录Controller
+ *
+ * @author boman
+ * @date 2025-02-14
+ */
+@RestController
+@RequestMapping("/wuYe/checkPointRecord")
+public class CheckPointRecordController extends BaseController {
+    @Autowired
+    private ICheckPointRecordService checkPointRecordService;
+
+    /**
+     * 查询巡更点记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointRecord:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CheckPointRecord checkPointRecord) {
+        startPage();
+        List<CheckPointRecord> list = checkPointRecordService.selectCheckPointRecordList(checkPointRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出巡更点记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointRecord:export')")
+    @Log(title = "巡更点记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, CheckPointRecord checkPointRecord) {
+        List<CheckPointRecord> list = checkPointRecordService.selectCheckPointRecordList(checkPointRecord);
+        ExcelUtil<CheckPointRecord> util = new ExcelUtil<CheckPointRecord>(CheckPointRecord.class);
+        util.exportExcel(response, list, "巡更点记录数据");
+    }
+
+    /**
+     * 获取巡更点记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointRecord:query')")
+    @GetMapping(value = "/{checkPointRecordId}")
+    public AjaxResult getInfo(@PathVariable("checkPointRecordId") Long checkPointRecordId) {
+        return success(checkPointRecordService.selectCheckPointRecordByCheckPointRecordId(checkPointRecordId));
+    }
+
+    /**
+     * 新增巡更点记录
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointRecord:add')")
+    @Log(title = "巡更点记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CheckPointRecord checkPointRecord) {
+        return toAjax(checkPointRecordService.insertCheckPointRecord(checkPointRecord));
+    }
+
+    /**
+     * 修改巡更点记录
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointRecord:edit')")
+    @Log(title = "巡更点记录", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody CheckPointRecord checkPointRecord) {
+        return toAjax(checkPointRecordService.updateCheckPointRecord(checkPointRecord));
+    }
+
+    /**
+     * 删除巡更点记录
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointRecord:remove')")
+    @Log(title = "巡更点记录", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{checkPointRecordIds}")
+    public AjaxResult remove(@PathVariable Long[] checkPointRecordIds) {
+        return toAjax(checkPointRecordService.deleteCheckPointRecordByCheckPointRecordIds(checkPointRecordIds));
+    }
+
+    /**
+     * 巡更点记录首页统计
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:checkPointRecord:count')")
+    @PostMapping("/count")
+    public AjaxResult count( CheckPointRecord checkPointRecord) {
+        return AjaxResult.success(checkPointRecordService.getCheckPointRecordCount(checkPointRecord));
+    }
+}

+ 18 - 11
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java

@@ -1,9 +1,13 @@
 package com.ruoyi.web.controller.common;
 
-import java.util.ArrayList;
-import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.ImageSizeUtil;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.file.FileUtils;
+import com.ruoyi.framework.config.ServerConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,13 +17,11 @@ 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.multipart.MultipartFile;
-import com.ruoyi.common.config.RuoYiConfig;
-import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.file.FileUploadUtils;
-import com.ruoyi.common.utils.file.FileUtils;
-import com.ruoyi.framework.config.ServerConfig;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 通用请求处理
@@ -77,13 +79,18 @@ public class CommonController
     {
         try
         {
+            //压缩图片
+            file = ImageSizeUtil.compressImg(file);
             // 上传文件路径
             String filePath = RuoYiConfig.getUploadPath();
             // 上传并返回新文件名称
             String fileName = FileUploadUtils.upload(filePath, file);
             String url = serverConfig.getUrl() + fileName;
             AjaxResult ajax = AjaxResult.success();
+            //服务器路径
+            String urlOnline = filePath + fileName.replace("/profile/upload", "");
             ajax.put("url", url);
+            ajax.put("urlOnline", urlOnline);
             ajax.put("fileName", fileName);
             ajax.put("newFileName", FileUtils.getName(fileName));
             ajax.put("originalFilename", file.getOriginalFilename());

+ 82 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/OcrController.java

@@ -0,0 +1,82 @@
+package com.ruoyi.web.controller.common;
+
+
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.IdCardVo;
+import com.ruoyi.common.utils.IdCardUtil;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author: tjf
+ * @Date: 2024/4/22 14:24
+ * @Describe:
+ */
+@RestController
+@RequestMapping("/ocr")
+public class OcrController {
+
+    /**
+     * 身份证识别
+     *
+     * @return
+     */
+    @PostMapping("/ocrIdCard")
+    @RepeatSubmit(interval = 1000, message = "请求过于频繁")
+    public AjaxResult ocrIdCard(@RequestBody IdCardVo idCardVo) {
+        return IdCardUtil.idCard(idCardVo.getImage(), idCardVo.getIdCardSide());
+    }
+
+    /**
+     * 营业执照识别
+     *
+     * @return
+     */
+    @PostMapping("/ocrBusinessLicense")
+    @RepeatSubmit(interval = 1000, message = "请求过于频繁")
+    @PreAuthorize("@ss.hasPermi('wuYe:ocr:ocrBusinessLicense')")
+    public AjaxResult ocrBusinessLicense(@RequestBody IdCardVo idCardVo) {
+        return IdCardUtil.businessLicense(idCardVo.getImage());
+    }
+
+    /**
+     * 车牌照识别
+     *
+     * @return
+     */
+    @PostMapping("/licensePlate")
+    @RepeatSubmit(interval = 1000, message = "请求过于频繁")
+    @PreAuthorize("@ss.hasPermi('wuYe:ocr:licensePlate')")
+    public AjaxResult licensePlate(@RequestBody IdCardVo idCardVo) {
+        return IdCardUtil.licensePlate(idCardVo.getImage());
+    }
+
+
+    /**
+     * 行驶证识别
+     *
+     * @return
+     */
+    @PostMapping("/vehicleLicense")
+    @RepeatSubmit(interval = 1000, message = "请求过于频繁")
+    @PreAuthorize("@ss.hasPermi('wuYe:ocr:vehicleLicense')")
+    public AjaxResult vehicleLicense(@RequestBody IdCardVo idCardVo) {
+        return IdCardUtil.vehicleLicense(idCardVo.getImage());
+    }
+
+    /**
+     * 房产证识别
+     *
+     * @return
+     */
+    @PostMapping("/realEstateCertificate")
+    @RepeatSubmit(interval = 1000, message = "请求过于频繁")
+    @PreAuthorize("@ss.hasPermi('wuYe:ocr:realEstateCertificate')")
+    public AjaxResult realEstateCertificate(@RequestBody IdCardVo idCardVo) {
+        return IdCardUtil.realEstateCertificate(idCardVo.getImage());
+    }
+}

+ 91 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/communityNews/CommentContentController.java

@@ -0,0 +1,91 @@
+package com.ruoyi.web.controller.communityNews;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.communityNews.CommentContent;
+import com.ruoyi.system.service.ICommentContentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 社区资讯评论内容Controller
+ *
+ * @author boman
+ * @date 2025-02-25
+ */
+@RestController
+@RequestMapping("/wuYe/commentContent")
+public class CommentContentController extends BaseController {
+    @Autowired
+    private ICommentContentService commentContentService;
+
+    /**
+     * 查询社区资讯评论内容列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentContent:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CommentContent commentContent) {
+        startPage();
+        List<CommentContent> list = commentContentService.selectCommentContentList(commentContent);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出社区资讯评论内容列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentContent:export')")
+    @Log(title = "社区资讯评论内容", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, CommentContent commentContent) {
+        List<CommentContent> list = commentContentService.selectCommentContentList(commentContent);
+        ExcelUtil<CommentContent> util = new ExcelUtil<CommentContent>(CommentContent.class);
+        util.exportExcel(response, list, "社区资讯评论内容数据");
+    }
+
+    /**
+     * 获取社区资讯评论内容详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentContent:query')")
+    @GetMapping(value = "/{contentId}")
+    public AjaxResult getInfo(@PathVariable("contentId") Long contentId) {
+        return success(commentContentService.selectCommentContentByContentId(contentId));
+    }
+
+    /**
+     * 新增社区资讯评论内容
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentContent:add')")
+    @Log(title = "社区资讯评论内容", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CommentContent commentContent) {
+        return toAjax(commentContentService.insertCommentContent(commentContent));
+    }
+
+    /**
+     * 修改社区资讯评论内容
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentContent:edit')")
+    @Log(title = "社区资讯评论内容", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody CommentContent commentContent) {
+        return toAjax(commentContentService.updateCommentContent(commentContent));
+    }
+
+    /**
+     * 删除社区资讯评论内容
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentContent:remove')")
+    @Log(title = "社区资讯评论内容", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{contentIds}")
+    public AjaxResult remove(@PathVariable Long[] contentIds) {
+        return toAjax(commentContentService.deleteCommentContentByContentIds(contentIds));
+    }
+}

+ 129 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/communityNews/CommentIndexController.java

@@ -0,0 +1,129 @@
+package com.ruoyi.web.controller.communityNews;
+
+import com.ruoyi.common.annotation.Anonymous;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.communityNews.CommentIndex;
+import com.ruoyi.system.domain.communityNews.vo.CommentIndexShVo;
+import com.ruoyi.system.domain.communityNews.vo.CommentIndexVo;
+import com.ruoyi.system.service.ICommentIndexService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 社区资讯评论Controller
+ *
+ * @author boman
+ * @date 2025-02-25
+ */
+@RestController
+@RequestMapping("/wuYe/commentIndex")
+public class CommentIndexController extends BaseController {
+    @Autowired
+    private ICommentIndexService commentIndexService;
+
+    /**
+     * 查询社区资讯评论列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentIndex:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CommentIndex commentIndex) {
+        startPage();
+        List<CommentIndex> list = commentIndexService.selectCommentIndexList(commentIndex);
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 查询社区资讯评论-----审核列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentIndex:commentSh')")
+    @GetMapping("/commentSh")
+    public TableDataInfo commentSh(CommentIndexShVo commentIndexShVo) {
+        startPage();
+        List<CommentIndexShVo> list = commentIndexService.commentSh(commentIndexShVo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出社区资讯评论列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentIndex:export')")
+    @Log(title = "社区资讯评论", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, CommentIndex commentIndex) {
+        List<CommentIndex> list = commentIndexService.selectCommentIndexList(commentIndex);
+        ExcelUtil<CommentIndex> util = new ExcelUtil<CommentIndex>(CommentIndex.class);
+        util.exportExcel(response, list, "社区资讯评论数据");
+    }
+
+
+    /**
+     * 根据查询所有一级评论组带子集总数组装成前端所需要的数据结构 带分页
+     */
+    @Anonymous
+    @PostMapping(value = "/getRootComment", name = "查询一级评论")
+    public TableDataInfo getRootComment(@RequestBody CommentIndex commentIndex) {
+        startPage();
+        List<CommentIndexVo> rootComment = commentIndexService.getRootComment(commentIndex);
+        return getDataTable(rootComment);
+    }
+
+    /**
+     * 根据parent_id查询所有评论组装成前端所需要的子集数据结构 带分页
+     */
+    @Anonymous
+    @PostMapping(value = "/getParentComment", name = "查询子级评论")
+    public AjaxResult getParentComment(@RequestBody CommentIndex commentIndex) {
+        startPage();
+        return commentIndexService.getParentComment(commentIndex);
+    }
+
+
+    /**
+     * 获取社区资讯评论详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentIndex:query')")
+    @GetMapping(value = "/{commentId}")
+    public AjaxResult getInfo(@PathVariable("commentId") Long commentId) {
+        return success(commentIndexService.selectCommentIndexByCommentId(commentId));
+    }
+
+    /**
+     * 新增社区资讯评论
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentIndex:add')")
+    @Log(title = "社区资讯评论", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CommentIndex commentIndex) {
+        return toAjax(commentIndexService.insertCommentIndex(commentIndex));
+    }
+
+    /**
+     * 修改社区资讯评论
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentIndex:edit')")
+    @Log(title = "社区资讯评论", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody CommentIndex commentIndex) {
+        return toAjax(commentIndexService.updateCommentIndex(commentIndex));
+    }
+
+    /**
+     * 删除社区资讯评论
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentIndex:remove')")
+    @Log(title = "社区资讯评论", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{commentId}")
+    public AjaxResult remove(@PathVariable Long commentId) {
+        return toAjax(commentIndexService.deleteCommentIndexByCommentId(commentId));
+    }
+}

+ 106 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/communityNews/CommentLikesController.java

@@ -0,0 +1,106 @@
+package com.ruoyi.web.controller.communityNews;
+
+import com.ruoyi.common.annotation.Anonymous;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.manager.AsyncManager;
+import com.ruoyi.framework.manager.factory.AsyncFactory;
+import com.ruoyi.system.domain.communityNews.CommentLikes;
+import com.ruoyi.system.service.ICommentLikesService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 社区资讯点赞Controller
+ *
+ * @author boman
+ * @date 2025-02-25
+ */
+@RestController
+@RequestMapping("/wuYe/commentLikes")
+public class CommentLikesController extends BaseController {
+    @Autowired
+    private ICommentLikesService commentLikesService;
+
+    /**
+     * 查询社区资讯点赞列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentLikes:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CommentLikes commentLikes) {
+        startPage();
+        List<CommentLikes> list = commentLikesService.selectCommentLikesList(commentLikes);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出社区资讯点赞列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentLikes:export')")
+    @Log(title = "社区资讯点赞", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, CommentLikes commentLikes) {
+        List<CommentLikes> list = commentLikesService.selectCommentLikesList(commentLikes);
+        ExcelUtil<CommentLikes> util = new ExcelUtil<CommentLikes>(CommentLikes.class);
+        util.exportExcel(response, list, "社区资讯点赞数据");
+    }
+
+    /**
+     * 获取社区资讯点赞详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentLikes:query')")
+    @GetMapping(value = "/{likesId}")
+    public AjaxResult getInfo(@PathVariable("likesId") Long likesId) {
+        return success(commentLikesService.selectCommentLikesByLikesId(likesId));
+    }
+
+    /**
+     * 新增社区资讯点赞
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentLikes:add')")
+    @Log(title = "社区资讯点赞", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CommentLikes commentLikes) {
+        return toAjax(commentLikesService.insertCommentLikes(commentLikes));
+    }
+
+    /**
+     * 修改社区资讯点赞
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentLikes:edit')")
+    @Log(title = "社区资讯点赞", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody CommentLikes commentLikes) {
+        return toAjax(commentLikesService.updateCommentLikes(commentLikes));
+    }
+
+    /**
+     * 删除社区资讯点赞
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentLikes:remove')")
+    @Log(title = "社区资讯点赞", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{likesIds}")
+    public AjaxResult remove(@PathVariable Long[] likesIds) {
+        return toAjax(commentLikesService.deleteCommentLikesByLikesIds(likesIds));
+    }
+
+
+    /**
+     * 进行点赞操作
+     */
+    @PostMapping("/giveTheThumbs")
+    @Anonymous
+    public AjaxResult giveTheThumbs(@RequestBody CommentLikes commentLikes) {
+        AsyncManager.me().execute(AsyncFactory.giveTheThumbs(commentLikes));
+        System.out.println("点赞返回");
+        return  AjaxResult.success();
+    }
+}

+ 113 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/communityNews/CommentStarsController.java

@@ -0,0 +1,113 @@
+package com.ruoyi.web.controller.communityNews;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.manager.AsyncManager;
+import com.ruoyi.framework.manager.factory.AsyncFactory;
+import com.ruoyi.system.domain.communityNews.CommentStars;
+import com.ruoyi.system.service.ICommentStarsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 社区资讯收藏Controller
+ *
+ * @author boman
+ * @date 2025-02-25
+ */
+@RestController
+@RequestMapping("/wuYe/commentStars")
+public class CommentStarsController extends BaseController {
+    @Autowired
+    private ICommentStarsService commentStarsService;
+
+    /**
+     * 查询社区资讯收藏列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentStars:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CommentStars commentStars) {
+        startPage();
+        List<CommentStars> list = commentStarsService.selectCommentStarsList(commentStars);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出社区资讯收藏列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentStars:export')")
+    @Log(title = "社区资讯收藏", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, CommentStars commentStars) {
+        List<CommentStars> list = commentStarsService.selectCommentStarsList(commentStars);
+        ExcelUtil<CommentStars> util = new ExcelUtil<CommentStars>(CommentStars.class);
+        util.exportExcel(response, list, "社区资讯收藏数据");
+    }
+
+    /**
+     * 获取社区资讯收藏详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentStars:query')")
+    @GetMapping(value = "/{starsId}")
+    public AjaxResult getInfo(@PathVariable("starsId") Long starsId) {
+        return success(commentStarsService.selectCommentStarsByStarsId(starsId));
+    }
+
+    /**
+     * 新增社区资讯收藏
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentStars:add')")
+    @Log(title = "社区资讯收藏", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CommentStars commentStars) {
+        return toAjax(commentStarsService.insertCommentStars(commentStars));
+    }
+
+    /**
+     * 修改社区资讯收藏
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentStars:edit')")
+    @Log(title = "社区资讯收藏", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody CommentStars commentStars) {
+        return toAjax(commentStarsService.updateCommentStars(commentStars));
+    }
+
+    /**
+     * 删除社区资讯收藏
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:commentStars:remove')")
+    @Log(title = "社区资讯收藏", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{starsIds}")
+    public AjaxResult remove(@PathVariable Long[] starsIds) {
+        return toAjax(commentStarsService.deleteCommentStarsByStarsIds(starsIds));
+    }
+
+
+    /**
+     * 社区资讯收藏或取消收藏
+     */
+    @Log(title = "社区资讯收藏", businessType = BusinessType.INSERT)
+    @PostMapping("/getStars")
+    public AjaxResult getStars(@RequestBody CommentStars commentStars) {
+        AsyncManager.me().execute(AsyncFactory.getStars(commentStars));
+        return AjaxResult.success();
+    }
+
+    /**
+     * 党建收藏或取消收藏
+     */
+    @PostMapping("/getPartyNewsStars")
+    public AjaxResult getPartyNewsStars(@RequestBody CommentStars commentStars) {
+        AsyncManager.me().execute(AsyncFactory.getPartyNewsStars(commentStars));
+        return AjaxResult.success();
+    }
+}

+ 110 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/communityNews/CommunityNewsController.java

@@ -0,0 +1,110 @@
+package com.ruoyi.web.controller.communityNews;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.communityNews.CommunityNews;
+import com.ruoyi.system.domain.communityNews.vo.CommentInteractionVo;
+import com.ruoyi.system.service.ICommunityNewsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 社区资讯Controller
+ *
+ * @author boman
+ * @date 2025-02-14
+ */
+@RestController
+@RequestMapping("/wuYe/news")
+public class CommunityNewsController extends BaseController {
+    @Autowired
+    private ICommunityNewsService communityNewsService;
+
+    /**
+     * 查询社区资讯列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:news:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CommunityNews communityNews) {
+        startPage();
+        List<CommunityNews> list = communityNewsService.selectCommunityNewsList(communityNews);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出社区资讯列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:news:export')")
+    @Log(title = "社区资讯", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, CommunityNews communityNews) {
+        List<CommunityNews> list = communityNewsService.selectCommunityNewsList(communityNews);
+        ExcelUtil<CommunityNews> util = new ExcelUtil<CommunityNews>(CommunityNews.class);
+        util.exportExcel(response, list, "社区资讯数据");
+    }
+
+    /**
+     * 获取社区资讯详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:news:query')")
+    @GetMapping(value = "/{communityId}")
+    public AjaxResult getInfo(@PathVariable("communityId") Long communityId) {
+        return success(communityNewsService.selectCommunityNewsByCommunityId(communityId));
+    }
+
+    /**
+     * 新增社区资讯
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:news:add')")
+    @Log(title = "社区资讯", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CommunityNews communityNews) {
+        return toAjax(communityNewsService.insertCommunityNews(communityNews));
+    }
+
+    /**
+     * 修改社区资讯
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:news:edit')")
+    @Log(title = "社区资讯", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody CommunityNews communityNews) {
+        return toAjax(communityNewsService.updateCommunityNews(communityNews));
+    }
+
+    /**
+     * 删除社区资讯 等于把资讯关闭status = 2
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:news:remove')")
+    @Log(title = "社区资讯", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{communityIds}")
+    public AjaxResult remove(@PathVariable Long[] communityIds) {
+        return toAjax(communityNewsService.deleteCommunityNewsByCommunityIds(communityIds));
+    }
+
+
+    /**
+     * 获取未读互动数量
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:news:getCommentInteractionCount')")
+    @PostMapping("/getCommentInteractionCount")
+    public AjaxResult getCommentInteractionCount(@RequestBody CommentInteractionVo commentInteractionVo) {
+        return communityNewsService.getCommentInteractionCount(commentInteractionVo);
+    }
+    /**
+     * 获取未读互动列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:news:getCommentInteraction')")
+    @PostMapping("/getCommentInteraction")
+    public AjaxResult getCommentInteraction(@RequestBody CommentInteractionVo commentInteractionVo) {
+        return communityNewsService.getCommentInteraction(commentInteractionVo);
+    }
+}

+ 91 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/complaintSuggestion/ComplaintSuggestionController.java

@@ -0,0 +1,91 @@
+package com.ruoyi.web.controller.complaintSuggestion;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.complaintSuggestion.ComplaintSuggestion;
+import com.ruoyi.system.service.IComplaintSuggestionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 投诉建议Controller
+ *
+ * @author boman
+ * @date 2025-02-14
+ */
+@RestController
+@RequestMapping("/wuYe/suggestion")
+public class ComplaintSuggestionController extends BaseController {
+    @Autowired
+    private IComplaintSuggestionService complaintSuggestionService;
+
+    /**
+     * 查询投诉建议列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:suggestion:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ComplaintSuggestion complaintSuggestion) {
+        startPage();
+        List<ComplaintSuggestion> list = complaintSuggestionService.selectComplaintSuggestionList(complaintSuggestion);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出投诉建议列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:suggestion:export')")
+    @Log(title = "投诉建议", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ComplaintSuggestion complaintSuggestion) {
+        List<ComplaintSuggestion> list = complaintSuggestionService.selectComplaintSuggestionList(complaintSuggestion);
+        ExcelUtil<ComplaintSuggestion> util = new ExcelUtil<ComplaintSuggestion>(ComplaintSuggestion.class);
+        util.exportExcel(response, list, "投诉建议数据");
+    }
+
+    /**
+     * 获取投诉建议详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:suggestion:query')")
+    @GetMapping(value = "/{suggestionId}")
+    public AjaxResult getInfo(@PathVariable("suggestionId") Long suggestionId) {
+        return success(complaintSuggestionService.selectComplaintSuggestionBySuggestionId(suggestionId));
+    }
+
+    /**
+     * 新增投诉建议
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:suggestion:add')")
+    @Log(title = "投诉建议", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ComplaintSuggestion complaintSuggestion) {
+        return toAjax(complaintSuggestionService.insertComplaintSuggestion(complaintSuggestion));
+    }
+
+    /**
+     * 修改投诉建议
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:suggestion:edit')")
+    @Log(title = "投诉建议", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody ComplaintSuggestion complaintSuggestion) {
+        return toAjax(complaintSuggestionService.updateComplaintSuggestion(complaintSuggestion));
+    }
+
+    /**
+     * 删除投诉建议
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:suggestion:remove')")
+    @Log(title = "投诉建议", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{suggestionIds}")
+    public AjaxResult remove(@PathVariable Long[] suggestionIds) {
+        return toAjax(complaintSuggestionService.deleteComplaintSuggestionBySuggestionIds(suggestionIds));
+    }
+}

+ 117 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/houseInfo/HouseInfoController.java

@@ -0,0 +1,117 @@
+package com.ruoyi.web.controller.houseInfo;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.ResidentInfo;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.houseInfo.HouseInfo;
+import com.ruoyi.system.service.IHouseInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 房屋信息Controller
+ *
+ * @author boman
+ * @date 2025-02-20
+ */
+@RestController
+@RequestMapping("/wuYe/houseInfo")
+public class HouseInfoController extends BaseController {
+    @Autowired
+    private IHouseInfoService houseInfoService;
+
+    /**
+     * 查询房屋信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:houseInfo:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ResidentInfo residentInfo) {
+        startPage();
+        List<ResidentInfo> list = houseInfoService.selectHouseInfoListAndResidentInfo(residentInfo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询房屋信息列表不分页
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:houseInfo:listNoPage')")
+    @GetMapping("/listNoPage")
+    public TableDataInfo listNoPage(HouseInfo houseInfo) {
+        List<HouseInfo> list = houseInfoService.selectHouseInfoList(houseInfo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出房屋信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:houseInfo:export')")
+    @Log(title = "房屋信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, HouseInfo houseInfo) {
+        List<HouseInfo> list = houseInfoService.selectHouseInfoList(houseInfo);
+        ExcelUtil<HouseInfo> util = new ExcelUtil<HouseInfo>(HouseInfo.class);
+        util.exportExcel(response, list, "房屋信息数据");
+    }
+
+    /**
+     * 导入房屋信息列表
+     * @param file
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file) throws Exception
+    {
+        ExcelUtil<HouseInfo> util = new ExcelUtil<HouseInfo>(HouseInfo.class);
+        List<HouseInfo> houseInfoList = util.importExcel(file.getInputStream());
+        return houseInfoService.importHouseInfo(houseInfoList);
+    }
+
+    /**
+     * 获取房屋信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:houseInfo:query')")
+    @GetMapping(value = "/{houseId}")
+    public AjaxResult getInfo(@PathVariable("houseId") Long houseId) {
+        return success(houseInfoService.selectHouseInfoByHouseId(houseId));
+    }
+
+    /**
+     * 新增房屋信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:houseInfo:add')")
+    @Log(title = "房屋信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody HouseInfo houseInfo) {
+        return toAjax(houseInfoService.insertHouseInfo(houseInfo));
+    }
+
+    /**
+     * 修改房屋信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:houseInfo:edit')")
+    @Log(title = "房屋信息", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody HouseInfo houseInfo) {
+        return toAjax(houseInfoService.updateHouseInfo(houseInfo));
+    }
+
+    /**
+     * 删除房屋信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:houseInfo:remove')")
+    @Log(title = "房屋信息", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{houseIds}")
+    public AjaxResult remove(@PathVariable Long[] houseIds) {
+        return toAjax(houseInfoService.deleteHouseInfoByHouseIds(houseIds));
+    }
+}

+ 140 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/houseInfo/PropertyFeeController.java

@@ -0,0 +1,140 @@
+package com.ruoyi.web.controller.houseInfo;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.system.domain.houseInfo.PropertyFee;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.system.service.IPropertyFeeService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 物业费管理Controller
+ *
+ * @author boman
+ * @date 2025-03-03
+ */
+@RestController
+@RequestMapping("/wuYe/fee")
+public class PropertyFeeController extends BaseController
+{
+    @Autowired
+    private IPropertyFeeService propertyFeeService;
+
+/**
+ * 查询物业费管理列表
+ */
+@PreAuthorize("@ss.hasPermi('wuYe:fee:list')")
+@GetMapping("/list")
+    public TableDataInfo list(PropertyFee propertyFee)
+    {
+        startPage();
+        List<PropertyFee> list = propertyFeeService.selectPropertyFeeList(propertyFee);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出物业费管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:fee:export')")
+    @Log(title = "物业费管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, PropertyFee propertyFee)
+    {
+        List<PropertyFee> list = propertyFeeService.selectPropertyFeeList(propertyFee);
+        ExcelUtil<PropertyFee> util = new ExcelUtil<PropertyFee>(PropertyFee.class);
+        util.exportExcel(response, list, "物业费管理数据");
+    }
+
+    /**
+     * 获取物业费管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:fee:query')")
+    @GetMapping(value = "/{propertyId}")
+    public AjaxResult getInfo(@PathVariable("propertyId") Long propertyId)
+    {
+        return success(propertyFeeService.selectPropertyFeeByPropertyId(propertyId));
+    }
+
+    /**
+     * 新增物业费管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:fee:add')")
+    @Log(title = "物业费管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody PropertyFee propertyFee)
+    {
+        return toAjax(propertyFeeService.insertPropertyFee(propertyFee));
+    }
+
+    /**
+     * 修改物业费管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:fee:edit')")
+    @Log(title = "物业费管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody PropertyFee propertyFee)
+    {
+        return toAjax(propertyFeeService.updatePropertyFee(propertyFee));
+    }
+
+    /**
+     * 删除物业费管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:fee:remove')")
+    @Log(title = "物业费管理", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{propertyIds}")
+    public AjaxResult remove(@PathVariable Long[] propertyIds)
+    {
+        return toAjax(propertyFeeService.deletePropertyFeeByPropertyIds(propertyIds));
+    }
+
+
+    /**
+     * 物业费统计
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:fee:statistics')")
+    @Log(title = "物业费管理", businessType = BusinessType.DELETE)
+    @GetMapping("/statistics")
+    public AjaxResult statistics(PropertyFee propertyFee)
+    {
+        return propertyFeeService.statistics(propertyFee);
+    }
+
+    /**
+     * 物业费催缴
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:fee:callPayment')")
+    @Log(title = "物业费管理", businessType = BusinessType.DELETE)
+    @GetMapping("/callPayment/{houseId}")
+    public AjaxResult CallPayment(@PathVariable Long houseId)
+    {
+        return propertyFeeService.CallPayment(houseId);
+    }
+
+    /**
+     * 物业费催缴(一键催缴)
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:fee:callPaymentAll')")
+    @Log(title = "物业费管理", businessType = BusinessType.DELETE)
+    @GetMapping("/callPaymentAll")
+    public AjaxResult CallPaymentAll(PropertyFee propertyFee)
+    {
+        return propertyFeeService.CallPaymentAll(propertyFee);
+    }
+
+}

+ 105 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/houseInfo/PropertySettingsController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.web.controller.houseInfo;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.system.domain.houseInfo.PropertySettings;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.system.service.IPropertySettingsService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 物业费设置Controller
+ *
+ * @author boman
+ * @date 2025-03-11
+ */
+@RestController
+@RequestMapping("/wuYe/fee/settings")
+public class PropertySettingsController extends BaseController
+{
+    @Autowired
+    private IPropertySettingsService propertySettingsService;
+
+/**
+ * 查询物业费设置列表
+ */
+@PreAuthorize("@ss.hasPermi('wuYe:fee:settings:list')")
+@GetMapping("/list")
+    public TableDataInfo list(PropertySettings propertySettings)
+    {
+        startPage();
+        List<PropertySettings> list = propertySettingsService.selectPropertySettingsList(propertySettings);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出物业费设置列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:fee:settings:export')")
+    @Log(title = "物业费设置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, PropertySettings propertySettings)
+    {
+        List<PropertySettings> list = propertySettingsService.selectPropertySettingsList(propertySettings);
+        ExcelUtil<PropertySettings> util = new ExcelUtil<PropertySettings>(PropertySettings.class);
+        util.exportExcel(response, list, "物业费设置数据");
+    }
+
+    /**
+     * 获取物业费设置详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:fee:settings:query')")
+    @GetMapping(value = "/{settingsId}")
+    public AjaxResult getInfo(@PathVariable("settingsId") Long settingsId)
+    {
+        return success(propertySettingsService.selectPropertySettingsBySettingsId(settingsId));
+    }
+
+    /**
+     * 新增物业费设置
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:fee:settings:add')")
+    @Log(title = "物业费设置", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody PropertySettings propertySettings)
+    {
+        return toAjax(propertySettingsService.insertPropertySettings(propertySettings));
+    }
+
+    /**
+     * 修改物业费设置
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:fee:settings:edit')")
+    @Log(title = "物业费设置", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody PropertySettings propertySettings)
+    {
+        return toAjax(propertySettingsService.updatePropertySettings(propertySettings));
+    }
+
+    /**
+     * 删除物业费设置
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:fee:settings:remove')")
+    @Log(title = "物业费设置", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{settingsId}")
+    public AjaxResult remove(@PathVariable Long settingsId)
+    {
+        return toAjax(propertySettingsService.deletePropertySettingsBySettingsId(settingsId));
+    }
+}

+ 99 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/illegalParking/IllegalParkingController.java

@@ -0,0 +1,99 @@
+package com.ruoyi.web.controller.illegalParking;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.illegalParking.IllegalParking;
+import com.ruoyi.system.service.IIllegalParkingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 违章停车登记Controller
+ *
+ * @author boman
+ * @date 2025-02-14
+ */
+@RestController
+@RequestMapping("/wuYe/illegalParking")
+public class IllegalParkingController extends BaseController {
+    @Autowired
+    private IIllegalParkingService illegalParkingService;
+
+    /**
+     * 查询违章停车登记列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:illegalParking:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(IllegalParking illegalParking) {
+        startPage();
+        List<IllegalParking> list = illegalParkingService.selectIllegalParkingList(illegalParking);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出违章停车登记列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:illegalParking:export')")
+    @Log(title = "违章停车登记", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, IllegalParking illegalParking) {
+        List<IllegalParking> list = illegalParkingService.selectIllegalParkingList(illegalParking);
+        ExcelUtil<IllegalParking> util = new ExcelUtil<IllegalParking>(IllegalParking.class);
+        util.exportExcel(response, list, "违章停车登记数据");
+    }
+
+    /**
+     * 获取违章停车登记详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:illegalParking:query')")
+    @GetMapping(value = "/{illegalParkingId}")
+    public AjaxResult getInfo(@PathVariable("illegalParkingId") Long illegalParkingId) {
+        return success(illegalParkingService.selectIllegalParkingByIllegalParkingId(illegalParkingId));
+    }
+
+    /**
+     * 新增违章停车登记
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:illegalParking:add')")
+    @Log(title = "违章停车登记", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody IllegalParking illegalParking) {
+        return toAjax(illegalParkingService.insertIllegalParking(illegalParking));
+    }
+
+    /**
+     * 修改违章停车登记
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:illegalParking:edit')")
+    @Log(title = "违章停车登记", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody IllegalParking illegalParking) {
+        return toAjax(illegalParkingService.updateIllegalParking(illegalParking));
+    }
+
+    /**
+     * 删除违章停车登记
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:illegalParking:remove')")
+    @Log(title = "违章停车登记", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{illegalParkingIds}")
+    public AjaxResult remove(@PathVariable Long[] illegalParkingIds) {
+        return toAjax(illegalParkingService.deleteIllegalParkingByIllegalParkingIds(illegalParkingIds));
+    }
+    /**
+     * 解除黑名单
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:illegalParking:cancel')")
+    @PostMapping("/cancel")
+    public AjaxResult cancel(@RequestBody IllegalParking illegalParking) {
+        return illegalParkingService.cancel(illegalParking);
+    }
+}

+ 3 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java

@@ -94,7 +94,7 @@ public class CacheController
     }
 
     @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
-    @DeleteMapping("/clearCacheName/{cacheName}")
+    @GetMapping("/delete/clearCacheName/{cacheName}")
     public AjaxResult clearCacheName(@PathVariable String cacheName)
     {
         Collection<String> cacheKeys = redisTemplate.keys(cacheName + "*");
@@ -103,7 +103,7 @@ public class CacheController
     }
 
     @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
-    @DeleteMapping("/clearCacheKey/{cacheKey}")
+    @GetMapping("/delete/clearCacheKey/{cacheKey}")
     public AjaxResult clearCacheKey(@PathVariable String cacheKey)
     {
         redisTemplate.delete(cacheKey);
@@ -111,7 +111,7 @@ public class CacheController
     }
 
     @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
-    @DeleteMapping("/clearCacheAll")
+    @GetMapping("/delete/clearCacheAll")
     public AjaxResult clearCacheAll()
     {
         Collection<String> cacheKeys = redisTemplate.keys("*");

+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java

@@ -56,7 +56,7 @@ public class SysLogininforController extends BaseController
 
     @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
     @Log(title = "登录日志", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{infoIds}")
+    @GetMapping("/delete/{infoIds}")
     public AjaxResult remove(@PathVariable Long[] infoIds)
     {
         return toAjax(logininforService.deleteLogininforByIds(infoIds));
@@ -64,7 +64,7 @@ public class SysLogininforController extends BaseController
 
     @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
     @Log(title = "登录日志", businessType = BusinessType.CLEAN)
-    @DeleteMapping("/clean")
+    @GetMapping("/delete/clean")
     public AjaxResult clean()
     {
         logininforService.cleanLogininfor();

+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java

@@ -52,7 +52,7 @@ public class SysOperlogController extends BaseController
 
     @Log(title = "操作日志", businessType = BusinessType.DELETE)
     @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
-    @DeleteMapping("/{operIds}")
+    @GetMapping("/delete/{operIds}")
     public AjaxResult remove(@PathVariable Long[] operIds)
     {
         return toAjax(operLogService.deleteOperLogByIds(operIds));
@@ -60,7 +60,7 @@ public class SysOperlogController extends BaseController
 
     @Log(title = "操作日志", businessType = BusinessType.CLEAN)
     @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
-    @DeleteMapping("/clean")
+    @GetMapping("/delete/clean")
     public AjaxResult clean()
     {
         operLogService.cleanOperLog();

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java

@@ -74,7 +74,7 @@ public class SysUserOnlineController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')")
     @Log(title = "在线用户", businessType = BusinessType.FORCE)
-    @DeleteMapping("/{tokenId}")
+    @GetMapping("/delete/{tokenId}")
     public AjaxResult forceLogout(@PathVariable String tokenId)
     {
         redisCache.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);

+ 94 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/partyNews/PartyNewsController.java

@@ -0,0 +1,94 @@
+package com.ruoyi.web.controller.partyNews;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.partyNews.PartyNews;
+import com.ruoyi.system.service.IPartyNewsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 党建资讯Controller
+ *
+ * @author boman
+ * @date 2025-02-14
+ */
+@RestController
+@RequestMapping("/wuYe/partyNews")
+public class PartyNewsController extends BaseController {
+    @Autowired
+    private IPartyNewsService partyNewsService;
+
+    /**
+     * 查询党建资讯列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:partyNews:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(PartyNews partyNews) {
+        startPage();
+        List<PartyNews> list = partyNewsService.selectPartyNewsList(partyNews);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出党建资讯列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:partyNews:export')")
+    @Log(title = "党建资讯", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, PartyNews partyNews) {
+        List<PartyNews> list = partyNewsService.selectPartyNewsList(partyNews);
+        ExcelUtil<PartyNews> util = new ExcelUtil<PartyNews>(PartyNews.class);
+        util.exportExcel(response, list, "党建资讯数据");
+    }
+
+    /**
+     * 获取党建资讯详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:partyNews:query')")
+    @GetMapping(value = "/{partyId}")
+    public AjaxResult getInfo(@PathVariable("partyId") Long partyId) {
+        return success(partyNewsService.selectPartyNewsByPartyId(partyId));
+    }
+
+    /**
+     * 新增党建资讯
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:partyNews:add')")
+    @Log(title = "党建资讯", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody PartyNews partyNews) {
+        return toAjax(partyNewsService.insertPartyNews(partyNews));
+    }
+
+    /**
+     * 修改党建资讯
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:partyNews:edit')")
+    @Log(title = "党建资讯", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody PartyNews partyNews) {
+        return toAjax(partyNewsService.updatePartyNews(partyNews));
+    }
+
+    /**
+     * 批量关闭党建资讯
+     * @param partyIds
+     * @return
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:partyNews:remove')")
+    @Log(title = "党建资讯", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{partyIds}")
+    public AjaxResult remove(@PathVariable Long[] partyIds) {
+        return toAjax(partyNewsService.deletePartyNewsByPartyIds(partyIds));
+    }
+
+}

+ 121 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/propertyRepair/PropertyRepairController.java

@@ -0,0 +1,121 @@
+package com.ruoyi.web.controller.propertyRepair;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.propertyRepair.PropertyRepair;
+import com.ruoyi.system.service.IPropertyRepairService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 物业报修Controller
+ *
+ * @author boman
+ * @date 2025-02-14
+ */
+@RestController
+@RequestMapping("/wuYe/repair")
+public class PropertyRepairController extends BaseController {
+    @Autowired
+    private IPropertyRepairService propertyRepairService;
+
+    /**
+     * 查询物业报修列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:repair:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(PropertyRepair propertyRepair) {
+        startPage();
+        List<PropertyRepair> list = propertyRepairService.selectPropertyRepairList(propertyRepair);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询我的物业报修列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:repair:myList')")
+    @GetMapping("/myList")
+    public TableDataInfo myList(PropertyRepair propertyRepair) {
+        propertyRepair.setStaffId(getUserId());
+        startPage();
+        List<PropertyRepair> list = propertyRepairService.selectPropertyRepairList(propertyRepair);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出物业报修列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:repair:export')")
+    @Log(title = "物业报修", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, PropertyRepair propertyRepair) {
+        List<PropertyRepair> list = propertyRepairService.selectPropertyRepairList(propertyRepair);
+        ExcelUtil<PropertyRepair> util = new ExcelUtil<PropertyRepair>(PropertyRepair.class);
+        util.exportExcel(response, list, "物业报修数据");
+    }
+
+    /**
+     * 获取物业报修详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:repair:query')")
+    @GetMapping(value = "/{repairId}")
+    public AjaxResult getInfo(@PathVariable("repairId") Long repairId) {
+        return success(propertyRepairService.selectPropertyRepairByRepairId(repairId));
+    }
+
+    /**
+     * 新增物业报修
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:repair:add')")
+    @Log(title = "物业报修", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody PropertyRepair propertyRepair) {
+        return toAjax(propertyRepairService.insertPropertyRepair(propertyRepair));
+    }
+
+    /**
+     * 修改物业报修
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:repair:edit')")
+    @Log(title = "物业报修", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody PropertyRepair propertyRepair) {
+        return toAjax(propertyRepairService.updatePropertyRepair(propertyRepair));
+    }
+
+    /**
+     * 删除物业报修
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:repair:remove')")
+    @Log(title = "物业报修", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{repairIds}")
+    public AjaxResult remove(@PathVariable Long[] repairIds) {
+        return toAjax(propertyRepairService.deletePropertyRepairByRepairIds(repairIds));
+    }
+
+    /**
+     * 指派物业报修人员
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:repair:assign')")
+    @PostMapping("/assign")
+    public AjaxResult assign(@RequestBody PropertyRepair propertyRepair) {
+        return propertyRepairService.assign(propertyRepair);
+    }
+
+    /**
+     * 物业保修一周统计(当前时间往前推7天)
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:repair:statistics:qx')")
+    @GetMapping("/statistics/qx")
+    public AjaxResult statisticsQx() {
+        return propertyRepairService.statisticsQx();
+    }
+}

+ 91 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/proprietorCar/ProprietorCarController.java

@@ -0,0 +1,91 @@
+package com.ruoyi.web.controller.proprietorCar;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.proprietorCar.ProprietorCar;
+import com.ruoyi.system.service.IProprietorCarService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 业主车辆管理Controller
+ *
+ * @author boman
+ * @date 2025-02-20
+ */
+@RestController
+@RequestMapping("/wuYe/car")
+public class ProprietorCarController extends BaseController {
+    @Autowired
+    private IProprietorCarService proprietorCarService;
+
+    /**
+     * 查询业主车辆管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:car:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ProprietorCar proprietorCar) {
+        startPage();
+        List<ProprietorCar> list = proprietorCarService.selectProprietorCarList(proprietorCar);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出业主车辆管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:car:export')")
+    @Log(title = "业主车辆管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ProprietorCar proprietorCar) {
+        List<ProprietorCar> list = proprietorCarService.selectProprietorCarList(proprietorCar);
+        ExcelUtil<ProprietorCar> util = new ExcelUtil<ProprietorCar>(ProprietorCar.class);
+        util.exportExcel(response, list, "业主车辆管理数据");
+    }
+
+    /**
+     * 获取业主车辆管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:car:query')")
+    @GetMapping(value = "/{carId}")
+    public AjaxResult getInfo(@PathVariable("carId") Long carId) {
+        return success(proprietorCarService.selectProprietorCarByCarId(carId));
+    }
+
+    /**
+     * 新增业主车辆管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:car:add')")
+    @Log(title = "业主车辆管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ProprietorCar proprietorCar) {
+        return toAjax(proprietorCarService.insertProprietorCar(proprietorCar));
+    }
+
+    /**
+     * 修改业主车辆管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:car:edit')")
+    @Log(title = "业主车辆管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody ProprietorCar proprietorCar) {
+        return toAjax(proprietorCarService.updateProprietorCar(proprietorCar));
+    }
+
+    /**
+     * 删除业主车辆管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:car:remove')")
+    @Log(title = "业主车辆管理", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{carIds}")
+    public AjaxResult remove(@PathVariable Long[] carIds) {
+        return toAjax(proprietorCarService.deleteProprietorCarByCarIds(carIds));
+    }
+}

+ 91 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/reservRecord/ReservRecordController.java

@@ -0,0 +1,91 @@
+package com.ruoyi.web.controller.reservRecord;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.reservRecord.ReservRecord;
+import com.ruoyi.system.service.IReservRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 预约记录Controller
+ *
+ * @author boman
+ * @date 2025-02-19
+ */
+@RestController
+@RequestMapping("/wuYe/reservRecord")
+public class ReservRecordController extends BaseController {
+    @Autowired
+    private IReservRecordService reservRecordService;
+
+    /**
+     * 查询预约记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:reservRecord:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ReservRecord reservRecord) {
+        startPage();
+        List<ReservRecord> list = reservRecordService.selectReservRecordList(reservRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出预约记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:reservRecord:export')")
+    @Log(title = "预约记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ReservRecord reservRecord) {
+        List<ReservRecord> list = reservRecordService.selectReservRecordList(reservRecord);
+        ExcelUtil<ReservRecord> util = new ExcelUtil<ReservRecord>(ReservRecord.class);
+        util.exportExcel(response, list, "预约记录数据");
+    }
+
+    /**
+     * 获取预约记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:reservRecord:query')")
+    @GetMapping(value = "/{reservRecordId}")
+    public AjaxResult getInfo(@PathVariable("reservRecordId") Long reservRecordId) {
+        return success(reservRecordService.selectReservRecordByReservRecordId(reservRecordId));
+    }
+
+    /**
+     * 新增预约记录
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:reservRecord:add')")
+    @Log(title = "预约记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ReservRecord reservRecord) {
+        return toAjax(reservRecordService.insertReservRecord(reservRecord));
+    }
+
+    /**
+     * 修改预约记录
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:reservRecord:edit')")
+    @Log(title = "预约记录", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody ReservRecord reservRecord) {
+        return toAjax(reservRecordService.updateReservRecord(reservRecord));
+    }
+
+    /**
+     * 删除预约记录
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:reservRecord:remove')")
+    @Log(title = "预约记录", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{reservRecordIds}")
+    public AjaxResult remove(@PathVariable Long[] reservRecordIds) {
+        return toAjax(reservRecordService.deleteReservRecordByReservRecordIds(reservRecordIds));
+    }
+}

+ 101 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/residentInfo/ResidentInfoController.java

@@ -0,0 +1,101 @@
+package com.ruoyi.web.controller.residentInfo;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.domain.entity.ResidentInfo;
+import com.ruoyi.system.service.IResidentInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 居住人员信息,存储居住人员的详细信息Controller
+ *
+ * @author boman
+ * @date 2025-02-20
+ */
+@RestController
+@RequestMapping("/wuYe/residentInfo")
+public class ResidentInfoController extends BaseController {
+    @Autowired
+    private IResidentInfoService residentInfoService;
+
+    /**
+     * 查询居住人员信息,存储居住人员的详细信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:residentInfo:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ResidentInfo residentInfo) {
+        startPage();
+        List<ResidentInfo> list = residentInfoService.selectResidentInfoList(residentInfo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询居住人员党员信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:residentInfo:count')")
+    @GetMapping("/count")
+    public AjaxResult count(ResidentInfo residentInfo) {
+        return residentInfoService.selectCount(residentInfo);
+
+    }
+
+    /**
+     * 导出居住人员信息,存储居住人员的详细信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:residentInfo:export')")
+    @Log(title = "居住人员信息,存储居住人员的详细信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ResidentInfo residentInfo) {
+        List<ResidentInfo> list = residentInfoService.selectResidentInfoList(residentInfo);
+        ExcelUtil<ResidentInfo> util = new ExcelUtil<ResidentInfo>(ResidentInfo.class);
+        util.exportExcel(response, list, "居住人员信息,存储居住人员的详细信息数据");
+    }
+
+    /**
+     * 获取居住人员信息,存储居住人员的详细信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:residentInfo:query')")
+    @GetMapping(value = "/{residentId}")
+    public AjaxResult getInfo(@PathVariable("residentId") Long residentId) {
+        return success(residentInfoService.selectResidentInfoByResidentId(residentId));
+    }
+
+    /**
+     * 新增居住人员信息,存储居住人员的详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:residentInfo:add')")
+    @Log(title = "居住人员信息,存储居住人员的详细信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ResidentInfo residentInfo) {
+        return residentInfoService.insertResidentInfo(residentInfo);
+    }
+
+    /**
+     * 修改居住人员信息,存储居住人员的详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:residentInfo:edit')")
+    @Log(title = "居住人员信息,存储居住人员的详细信息", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody ResidentInfo residentInfo) {
+        return toAjax(residentInfoService.updateResidentInfo(residentInfo));
+    }
+
+    /**
+     * 删除居住人员信息,存储居住人员的详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:residentInfo:remove')")
+    @Log(title = "居住人员信息,存储居住人员的详细信息", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{residentIds}")
+    public AjaxResult remove(@PathVariable Long[] residentIds) {
+        return toAjax(residentInfoService.deleteResidentInfoByResidentIds(residentIds));
+    }
+}

+ 102 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/staffManage/StaffManageController.java

@@ -0,0 +1,102 @@
+package com.ruoyi.web.controller.staffManage;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.domain.entity.StaffManage;
+import com.ruoyi.system.service.IStaffManageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 员工管理Controller
+ *
+ * @author boman
+ * @date 2025-02-18
+ */
+@RestController
+@RequestMapping("/wuYe/staffManage")
+public class StaffManageController extends BaseController {
+    @Autowired
+    private IStaffManageService staffManageService;
+
+    /**
+     * 查询员工管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffManage:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(StaffManage staffManage) {
+        startPage();
+        List<StaffManage> list = staffManageService.selectStaffManageList(staffManage);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询员工管理列表不分页
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffManage:listNoPage')")
+    @GetMapping("/listNoPage")
+    public TableDataInfo listNoPage(StaffManage staffManage) {
+        List<StaffManage> list = staffManageService.selectStaffManageList(staffManage);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出员工管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffManage:export')")
+    @Log(title = "员工管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, StaffManage staffManage) {
+        List<StaffManage> list = staffManageService.selectStaffManageList(staffManage);
+        ExcelUtil<StaffManage> util = new ExcelUtil<StaffManage>(StaffManage.class);
+        util.exportExcel(response, list, "员工管理数据");
+    }
+
+    /**
+     * 获取员工管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffManage:query')")
+    @GetMapping(value = "/{staffId}")
+    public AjaxResult getInfo(@PathVariable("staffId") Long staffId) {
+        return success(staffManageService.selectStaffManageByStaffId(staffId));
+    }
+
+    /**
+     * 新增员工管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffManage:add')")
+    @Log(title = "员工管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody StaffManage staffManage) {
+        return staffManageService.insertStaffManage(staffManage);
+    }
+
+    /**
+     * 修改员工管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffManage:edit')")
+    @Log(title = "员工管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody StaffManage staffManage) {
+        return toAjax(staffManageService.updateStaffManage(staffManage));
+    }
+
+    /**
+     * 删除员工管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffManage:remove')")
+    @Log(title = "员工管理", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{staffIds}")
+    public AjaxResult remove(@PathVariable Long[] staffIds) {
+        getUsername();
+        return toAjax(staffManageService.deleteStaffManageByStaffIds(staffIds));
+    }
+}

+ 102 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/staffTrain/StaffTrainManualController.java

@@ -0,0 +1,102 @@
+package com.ruoyi.web.controller.staffTrain;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.staffTrain.StaffTrainManual;
+import com.ruoyi.system.service.IStaffTrainManualService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 员工培训手册Controller
+ *
+ * @author boman
+ * @date 2025-02-18
+ */
+@RestController
+@RequestMapping("/wuYe/manual")
+public class StaffTrainManualController extends BaseController {
+    @Autowired
+    private IStaffTrainManualService staffTrainManualService;
+
+    /**
+     * 查询员工培训手册列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:manual:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(StaffTrainManual staffTrainManual) {
+        startPage();
+        List<StaffTrainManual> list = staffTrainManualService.selectStaffTrainManualList(staffTrainManual);
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 导出员工培训手册列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:manual:export')")
+    @Log(title = "员工培训手册", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, StaffTrainManual staffTrainManual) {
+        List<StaffTrainManual> list = staffTrainManualService.selectStaffTrainManualList(staffTrainManual);
+        ExcelUtil<StaffTrainManual> util = new ExcelUtil<StaffTrainManual>(StaffTrainManual.class);
+        util.exportExcel(response, list, "员工培训手册数据");
+    }
+
+    /**
+     * 获取员工培训手册详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:manual:query')")
+    @GetMapping(value = "/{manualId}")
+    public AjaxResult getInfo(@PathVariable("manualId") Long manualId) {
+        return success(staffTrainManualService.selectStaffTrainManualByManualId(manualId));
+    }
+
+
+    /**
+     * 获取已读人员名单
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:manual:getRead')")
+    @PostMapping(value = "/getRead")
+    public AjaxResult getRead(@RequestBody StaffTrainManual staffTrainManual) {
+        return staffTrainManualService.getRead(staffTrainManual);
+    }
+
+    /**
+     * 新增员工培训手册
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:manual:add')")
+    @Log(title = "员工培训手册", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody StaffTrainManual staffTrainManual) {
+        return toAjax(staffTrainManualService.insertStaffTrainManual(staffTrainManual));
+    }
+
+    /**
+     * 修改员工培训手册
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:manual:edit')")
+    @Log(title = "员工培训手册", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody StaffTrainManual staffTrainManual) {
+        return toAjax(staffTrainManualService.updateStaffTrainManual(staffTrainManual));
+    }
+
+    /**
+     * 删除员工培训手册
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:manual:remove')")
+    @Log(title = "员工培训手册", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{manualIds}")
+    public AjaxResult remove(@PathVariable Long[] manualIds) {
+        return toAjax(staffTrainManualService.deleteStaffTrainManualByManualIds(manualIds));
+    }
+}

+ 90 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/staffTrainTime/StaffTrainTimeController.java

@@ -0,0 +1,90 @@
+package com.ruoyi.web.controller.staffTrainTime;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.staffTrainTime.StaffTrainTime;
+import com.ruoyi.system.service.IStaffTrainTimeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 员工培训时长Controller
+ *
+ * @author boman
+ * @date 2025-02-21
+ */
+@RestController
+@RequestMapping("/wuYe/staffTrainTime")
+public class StaffTrainTimeController extends BaseController {
+    @Autowired
+    private IStaffTrainTimeService staffTrainTimeService;
+
+    /**
+     * 查询员工培训时长列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffTrainTime:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(StaffTrainTime staffTrainTime) {
+        List<StaffTrainTime> list = staffTrainTimeService.selectStaffTrainTimeList(staffTrainTime);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出员工培训时长列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffTrainTime:export')")
+    @Log(title = "员工培训时长", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, StaffTrainTime staffTrainTime) {
+        List<StaffTrainTime> list = staffTrainTimeService.selectStaffTrainTimeList(staffTrainTime);
+        ExcelUtil<StaffTrainTime> util = new ExcelUtil<StaffTrainTime>(StaffTrainTime.class);
+        util.exportExcel(response, list, "员工培训时长数据");
+    }
+
+    /**
+     * 获取员工培训时长详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffTrainTime:query')")
+    @GetMapping(value = "/{trainTimeId}")
+    public AjaxResult getInfo(@PathVariable("trainTimeId") Long trainTimeId) {
+        return success(staffTrainTimeService.selectStaffTrainTimeByTrainTimeId(trainTimeId));
+    }
+
+    /**
+     * 新增员工培训时长
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffTrainTime:add')")
+    @Log(title = "员工培训时长", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody StaffTrainTime staffTrainTime) {
+        return toAjax(staffTrainTimeService.insertStaffTrainTime(staffTrainTime));
+    }
+
+    /**
+     * 修改员工培训时长
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffTrainTime:edit')")
+    @Log(title = "员工培训时长", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody StaffTrainTime staffTrainTime) {
+        return toAjax(staffTrainTimeService.updateStaffTrainTime(staffTrainTime));
+    }
+
+    /**
+     * 删除员工培训时长
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffTrainTime:remove')")
+    @Log(title = "员工培训时长", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{trainTimeIds}")
+    public AjaxResult remove(@PathVariable Long[] trainTimeIds) {
+        return toAjax(staffTrainTimeService.deleteStaffTrainTimeByTrainTimeIds(trainTimeIds));
+    }
+}

+ 39 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/statistics/StatisticsController.java

@@ -0,0 +1,39 @@
+package com.ruoyi.web.controller.statistics;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.system.domain.houseInfo.PropertyFee;
+import com.ruoyi.system.domain.suggestionFj.SuggestionFj;
+import com.ruoyi.system.service.IStatisticsService;
+import com.ruoyi.system.service.ISuggestionFjService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 首页统计Controller
+ *
+ * @author boman
+ * @date 2025-03-06
+ */
+@RestController
+@RequestMapping("/wuYe/statistics")
+public class StatisticsController {
+
+
+    @Autowired
+    private IStatisticsService statisticsService;
+    /**
+     * APP首页统计
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:statistics:num:app')")
+    @GetMapping("/num/app")
+    public AjaxResult numApp()
+    {
+        return statisticsService.numApp();
+    }
+}

+ 97 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/suggestionFj/SuggestionFjController.java

@@ -0,0 +1,97 @@
+package com.ruoyi.web.controller.suggestionFj;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.suggestionFj.SuggestionFj;
+import com.ruoyi.system.service.ISuggestionFjService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 投诉建议_附件Controller
+ *
+ * @author boman
+ * @date 2025-02-24
+ */
+@RestController
+@RequestMapping("/wuYe/suggestionFj")
+public class SuggestionFjController extends BaseController
+{
+    @Autowired
+    private ISuggestionFjService suggestionFjService;
+
+/**
+ * 查询投诉建议_附件列表
+ */
+@PreAuthorize("@ss.hasPermi('wuYe:suggestionFj:list')")
+@GetMapping("/list")
+    public TableDataInfo list(SuggestionFj suggestionFj)
+    {
+        startPage();
+        List<SuggestionFj> list = suggestionFjService.selectSuggestionFjList(suggestionFj);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出投诉建议_附件列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:suggestionFj:export')")
+    @Log(title = "投诉建议_附件", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SuggestionFj suggestionFj)
+    {
+        List<SuggestionFj> list = suggestionFjService.selectSuggestionFjList(suggestionFj);
+        ExcelUtil<SuggestionFj> util = new ExcelUtil<SuggestionFj>(SuggestionFj.class);
+        util.exportExcel(response, list, "投诉建议_附件数据");
+    }
+
+    /**
+     * 获取投诉建议_附件详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:suggestionFj:query')")
+    @GetMapping(value = "/{suggestionFjId}")
+    public AjaxResult getInfo(@PathVariable("suggestionFjId") Long suggestionFjId)
+    {
+        return success(suggestionFjService.selectSuggestionFjBySuggestionFjId(suggestionFjId));
+    }
+
+    /**
+     * 新增投诉建议_附件
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:suggestionFj:add')")
+    @Log(title = "投诉建议_附件", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody SuggestionFj suggestionFj)
+    {
+        return toAjax(suggestionFjService.insertSuggestionFj(suggestionFj));
+    }
+
+    /**
+     * 修改投诉建议_附件
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:suggestionFj:edit')")
+    @Log(title = "投诉建议_附件", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody SuggestionFj suggestionFj)
+    {
+        return toAjax(suggestionFjService.updateSuggestionFj(suggestionFj));
+    }
+
+    /**
+     * 删除投诉建议_附件
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:suggestionFj:remove')")
+    @Log(title = "投诉建议_附件", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{suggestionFjIds}")
+    public AjaxResult remove(@PathVariable Long[] suggestionFjIds)
+    {
+        return toAjax(suggestionFjService.deleteSuggestionFjBySuggestionFjIds(suggestionFjIds));
+    }
+}

+ 3 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java

@@ -96,7 +96,7 @@ public class SysConfigController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:config:edit')")
     @Log(title = "参数管理", businessType = BusinessType.UPDATE)
-    @PutMapping
+    @PostMapping("/put")
     public AjaxResult edit(@Validated @RequestBody SysConfig config)
     {
         if (!configService.checkConfigKeyUnique(config))
@@ -112,7 +112,7 @@ public class SysConfigController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:config:remove')")
     @Log(title = "参数管理", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{configIds}")
+    @GetMapping("/delete/{configIds}")
     public AjaxResult remove(@PathVariable Long[] configIds)
     {
         configService.deleteConfigByIds(configIds);
@@ -124,7 +124,7 @@ public class SysConfigController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:config:remove')")
     @Log(title = "参数管理", businessType = BusinessType.CLEAN)
-    @DeleteMapping("/refreshCache")
+    @GetMapping("/delete/refreshCache")
     public AjaxResult refreshCache()
     {
         configService.resetConfigCache();

+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java

@@ -89,7 +89,7 @@ public class SysDeptController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:dept:edit')")
     @Log(title = "部门管理", businessType = BusinessType.UPDATE)
-    @PutMapping
+    @PostMapping("/put")
     public AjaxResult edit(@Validated @RequestBody SysDept dept)
     {
         Long deptId = dept.getDeptId();
@@ -115,7 +115,7 @@ public class SysDeptController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:dept:remove')")
     @Log(title = "部门管理", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{deptId}")
+    @GetMapping("/delete/{deptId}")
     public AjaxResult remove(@PathVariable Long deptId)
     {
         if (deptService.hasChildByDeptId(deptId))

+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java

@@ -100,7 +100,7 @@ public class SysDictDataController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:dict:edit')")
     @Log(title = "字典数据", businessType = BusinessType.UPDATE)
-    @PutMapping
+    @PostMapping("/put")
     public AjaxResult edit(@Validated @RequestBody SysDictData dict)
     {
         dict.setUpdateBy(getUsername());
@@ -112,7 +112,7 @@ public class SysDictDataController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:dict:remove')")
     @Log(title = "字典类型", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{dictCodes}")
+    @GetMapping("/delete/{dictCodes}")
     public AjaxResult remove(@PathVariable Long[] dictCodes)
     {
         dictDataService.deleteDictDataByIds(dictCodes);

+ 11 - 17
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java

@@ -1,18 +1,5 @@
 package com.ruoyi.web.controller.system;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -21,6 +8,13 @@ import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.system.service.ISysDictTypeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * 数据字典信息
@@ -68,7 +62,7 @@ public class SysDictTypeController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:dict:add')")
     @Log(title = "字典类型", businessType = BusinessType.INSERT)
-    @PostMapping
+    @PostMapping()
     public AjaxResult add(@Validated @RequestBody SysDictType dict)
     {
         if (!dictTypeService.checkDictTypeUnique(dict))
@@ -84,7 +78,7 @@ public class SysDictTypeController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:dict:edit')")
     @Log(title = "字典类型", businessType = BusinessType.UPDATE)
-    @PutMapping
+    @PostMapping("/put")
     public AjaxResult edit(@Validated @RequestBody SysDictType dict)
     {
         if (!dictTypeService.checkDictTypeUnique(dict))
@@ -100,7 +94,7 @@ public class SysDictTypeController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:dict:remove')")
     @Log(title = "字典类型", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{dictIds}")
+    @GetMapping("/delete/{dictIds}")
     public AjaxResult remove(@PathVariable Long[] dictIds)
     {
         dictTypeService.deleteDictTypeByIds(dictIds);
@@ -112,7 +106,7 @@ public class SysDictTypeController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:dict:remove')")
     @Log(title = "字典类型", businessType = BusinessType.CLEAN)
-    @DeleteMapping("/refreshCache")
+    @GetMapping("/refreshCache")
     public AjaxResult refreshCache()
     {
         dictTypeService.resetDictCache();

+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java

@@ -102,7 +102,7 @@ public class SysMenuController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:menu:edit')")
     @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
-    @PutMapping
+    @PostMapping("/put")
     public AjaxResult edit(@Validated @RequestBody SysMenu menu)
     {
         if (!menuService.checkMenuNameUnique(menu))
@@ -126,7 +126,7 @@ public class SysMenuController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:menu:remove')")
     @Log(title = "菜单管理", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{menuId}")
+    @GetMapping("/delete/{menuId}")
     public AjaxResult remove(@PathVariable("menuId") Long menuId)
     {
         if (menuService.hasChildByMenuId(menuId))

+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java

@@ -71,7 +71,7 @@ public class SysNoticeController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:notice:edit')")
     @Log(title = "通知公告", businessType = BusinessType.UPDATE)
-    @PutMapping
+    @PostMapping("/put")
     public AjaxResult edit(@Validated @RequestBody SysNotice notice)
     {
         notice.setUpdateBy(getUsername());
@@ -83,7 +83,7 @@ public class SysNoticeController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:notice:remove')")
     @Log(title = "通知公告", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{noticeIds}")
+    @GetMapping("/delete/{noticeIds}")
     public AjaxResult remove(@PathVariable Long[] noticeIds)
     {
         return toAjax(noticeService.deleteNoticeByIds(noticeIds));

+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java

@@ -91,7 +91,7 @@ public class SysPostController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:post:edit')")
     @Log(title = "岗位管理", businessType = BusinessType.UPDATE)
-    @PutMapping
+    @PostMapping("/put")
     public AjaxResult edit(@Validated @RequestBody SysPost post)
     {
         if (!postService.checkPostNameUnique(post))
@@ -111,7 +111,7 @@ public class SysPostController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:post:remove')")
     @Log(title = "岗位管理", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{postIds}")
+    @GetMapping("/delete/{postIds}")
     public AjaxResult remove(@PathVariable Long[] postIds)
     {
         return toAjax(postService.deletePostByIds(postIds));

+ 7 - 12
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java

@@ -1,15 +1,5 @@
 package com.ruoyi.web.controller.system;
 
-import java.util.Map;
-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.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.config.RuoYiConfig;
 import com.ruoyi.common.core.controller.BaseController;
@@ -23,6 +13,11 @@ import com.ruoyi.common.utils.file.FileUploadUtils;
 import com.ruoyi.common.utils.file.MimeTypeUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Map;
 
 /**
  * 个人信息 业务处理
@@ -57,7 +52,7 @@ public class SysProfileController extends BaseController
      * 修改用户
      */
     @Log(title = "个人信息", businessType = BusinessType.UPDATE)
-    @PutMapping
+    @PostMapping("/put")
     public AjaxResult updateProfile(@RequestBody SysUser user)
     {
         LoginUser loginUser = getLoginUser();
@@ -87,7 +82,7 @@ public class SysProfileController extends BaseController
      * 重置密码
      */
     @Log(title = "个人信息", businessType = BusinessType.UPDATE)
-    @PutMapping("/updatePwd")
+    @PostMapping("/updatePwd")
     public AjaxResult updatePwd(@RequestBody Map<String, String> params)
     {
         String oldPassword = params.get("oldPassword");

+ 14 - 20
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java

@@ -1,18 +1,5 @@
 package com.ruoyi.web.controller.system;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -30,6 +17,13 @@ import com.ruoyi.system.domain.SysUserRole;
 import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysRoleService;
 import com.ruoyi.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * 角色信息
@@ -111,7 +105,7 @@ public class SysRoleController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.UPDATE)
-    @PutMapping
+    @PostMapping("/put")
     public AjaxResult edit(@Validated @RequestBody SysRole role)
     {
         roleService.checkRoleAllowed(role);
@@ -146,7 +140,7 @@ public class SysRoleController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.UPDATE)
-    @PutMapping("/dataScope")
+    @PostMapping("/dataScope/put")
     public AjaxResult dataScope(@RequestBody SysRole role)
     {
         roleService.checkRoleAllowed(role);
@@ -159,7 +153,7 @@ public class SysRoleController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.UPDATE)
-    @PutMapping("/changeStatus")
+    @PostMapping("/changeStatus/put")
     public AjaxResult changeStatus(@RequestBody SysRole role)
     {
         roleService.checkRoleAllowed(role);
@@ -173,7 +167,7 @@ public class SysRoleController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:role:remove')")
     @Log(title = "角色管理", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{roleIds}")
+    @GetMapping("/delete/{roleIds}")
     public AjaxResult remove(@PathVariable Long[] roleIds)
     {
         return toAjax(roleService.deleteRoleByIds(roleIds));
@@ -218,7 +212,7 @@ public class SysRoleController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.GRANT)
-    @PutMapping("/authUser/cancel")
+    @PostMapping("/authUser/cancel")
     public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole)
     {
         return toAjax(roleService.deleteAuthUser(userRole));
@@ -229,7 +223,7 @@ public class SysRoleController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.GRANT)
-    @PutMapping("/authUser/cancelAll")
+    @PostMapping("/authUser/cancelAll/put")
     public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds)
     {
         return toAjax(roleService.deleteAuthUsers(roleId, userIds));
@@ -240,7 +234,7 @@ public class SysRoleController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.GRANT)
-    @PutMapping("/authUser/selectAll")
+    @PostMapping("/authUser/selectAll/put")
     public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds)
     {
         roleService.checkRoleDataScope(roleId);

+ 15 - 21
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java

@@ -1,21 +1,5 @@
 package com.ruoyi.web.controller.system;
 
-import java.util.List;
-import java.util.stream.Collectors;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.lang3.ArrayUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -31,6 +15,16 @@ import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysPostService;
 import com.ruoyi.system.service.ISysRoleService;
 import com.ruoyi.system.service.ISysUserService;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 用户信息
@@ -148,7 +142,7 @@ public class SysUserController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:user:edit')")
     @Log(title = "用户管理", businessType = BusinessType.UPDATE)
-    @PutMapping
+    @PostMapping("/put")
     public AjaxResult edit(@Validated @RequestBody SysUser user)
     {
         userService.checkUserAllowed(user);
@@ -176,7 +170,7 @@ public class SysUserController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:user:remove')")
     @Log(title = "用户管理", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{userIds}")
+    @GetMapping("/delete/{userIds}")
     public AjaxResult remove(@PathVariable Long[] userIds)
     {
         if (ArrayUtils.contains(userIds, getUserId()))
@@ -191,7 +185,7 @@ public class SysUserController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
     @Log(title = "用户管理", businessType = BusinessType.UPDATE)
-    @PutMapping("/resetPwd")
+    @PostMapping("/resetPwd")
     public AjaxResult resetPwd(@RequestBody SysUser user)
     {
         userService.checkUserAllowed(user);
@@ -206,7 +200,7 @@ public class SysUserController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:user:edit')")
     @Log(title = "用户管理", businessType = BusinessType.UPDATE)
-    @PutMapping("/changeStatus")
+    @PostMapping("/changeStatus")
     public AjaxResult changeStatus(@RequestBody SysUser user)
     {
         userService.checkUserAllowed(user);
@@ -235,7 +229,7 @@ public class SysUserController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:user:edit')")
     @Log(title = "用户管理", businessType = BusinessType.GRANT)
-    @PutMapping("/authRole")
+    @PostMapping("/authRole/put")
     public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
     {
         userService.checkUserDataScope(userId);

+ 100 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/UpdateAppController.java

@@ -0,0 +1,100 @@
+package com.ruoyi.web.controller.system;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.UpdateApp;
+import com.ruoyi.system.service.IUpdateAppService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Controller
+ * 
+ * @author ruoyi
+ * @date 2023-02-16
+ */
+@RestController
+@RequestMapping("/system/app")
+public class UpdateAppController extends BaseController
+{
+    @Autowired
+    private IUpdateAppService updateAppService;
+
+    /**
+     * 查询【请填写功能名称】列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(UpdateApp updateApp)
+    {
+        startPage();
+        List<UpdateApp> list = updateAppService.selectUpdateAppList(updateApp);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出【请填写功能名称】列表
+     */
+    @Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, UpdateApp updateApp)
+    {
+        List<UpdateApp> list = updateAppService.selectUpdateAppList(updateApp);
+        ExcelUtil<UpdateApp> util = new ExcelUtil<UpdateApp>(UpdateApp.class);
+        util.exportExcel(response, list, "【请填写功能名称】数据");
+    }
+
+    /**
+     * 获取【请填写功能名称】详细信息
+     */
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(updateAppService.selectUpdateAppById(id));
+    }
+
+    /**
+     * 新增【请填写功能名称】
+     */
+    @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody UpdateApp updateApp)
+    {
+        return toAjax(updateAppService.insertUpdateApp(updateApp));
+    }
+
+    /**
+     * 修改【请填写功能名称】
+     */
+    @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody UpdateApp updateApp)
+    {
+        return toAjax(updateAppService.updateUpdateApp(updateApp));
+    }
+
+    /**
+     * 删除【请填写功能名称】
+     */
+    @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
+	@GetMapping("/delete/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(updateAppService.deleteUpdateAppByIds(ids));
+    }
+
+    /**
+     * 获取当前最新版本数据
+     */
+    @GetMapping(value = "/new")
+    public AjaxResult getInfoNew(UpdateApp updateApp)
+    {
+        return success(updateAppService.getInfoNew(updateApp));
+    }
+}

+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java

@@ -80,7 +80,7 @@ public class TestController extends BaseController
     }
 
     @ApiOperation("更新用户")
-    @PutMapping("/update")
+    @PostMapping("/put/update")
     public R<String> update(@RequestBody UserEntity user)
     {
         if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
@@ -98,7 +98,7 @@ public class TestController extends BaseController
 
     @ApiOperation("删除用户信息")
     @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class)
-    @DeleteMapping("/{userId}")
+    @GetMapping("/delete/{userId}")
     public R<String> delete(@PathVariable Integer userId)
     {
         if (!users.isEmpty() && users.containsKey(userId))

+ 91 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/visitor/VisitorManageController.java

@@ -0,0 +1,91 @@
+package com.ruoyi.web.controller.visitor;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.visitor.VisitorManage;
+import com.ruoyi.system.service.IVisitorManageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 来访管理Controller
+ *
+ * @author boman
+ * @date 2025-02-14
+ */
+@RestController
+@RequestMapping("/wuYe/visitorManage")
+public class VisitorManageController extends BaseController {
+    @Autowired
+    private IVisitorManageService visitorManageService;
+
+    /**
+     * 查询来访管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:visitorManage:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(VisitorManage visitorManage) {
+        startPage();
+        List<VisitorManage> list = visitorManageService.selectVisitorManageList(visitorManage);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出来访管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:visitorManage:export')")
+    @Log(title = "来访管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, VisitorManage visitorManage) {
+        List<VisitorManage> list = visitorManageService.selectVisitorManageList(visitorManage);
+        ExcelUtil<VisitorManage> util = new ExcelUtil<VisitorManage>(VisitorManage.class);
+        util.exportExcel(response, list, "来访管理数据");
+    }
+
+    /**
+     * 获取来访管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:visitorManage:query')")
+    @GetMapping(value = "/{visitorManageId}")
+    public AjaxResult getInfo(@PathVariable("visitorManageId") Long visitorManageId) {
+        return success(visitorManageService.selectVisitorManageByVisitorManageId(visitorManageId));
+    }
+
+    /**
+     * 新增来访管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:visitorManage:add')")
+    @Log(title = "来访管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody VisitorManage visitorManage) {
+        return toAjax(visitorManageService.insertVisitorManage(visitorManage));
+    }
+
+    /**
+     * 修改来访管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:visitorManage:edit')")
+    @Log(title = "来访管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody VisitorManage visitorManage) {
+        return toAjax(visitorManageService.updateVisitorManage(visitorManage));
+    }
+
+    /**
+     * 删除来访管理
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:visitorManage:remove')")
+    @Log(title = "来访管理", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{visitorManageIds}")
+    public AjaxResult remove(@PathVariable Long[] visitorManageIds) {
+        return toAjax(visitorManageService.deleteVisitorManageByVisitorManageIds(visitorManageIds));
+    }
+}

+ 1 - 1
ruoyi-admin/src/main/resources/application.yml

@@ -32,7 +32,7 @@ spring:
   devtools:
     restart:
       # 热部署开关
-      enabled: true
+      enabled: false
 
 # token配置
 token:

+ 41 - 3
ruoyi-common/pom.xml

@@ -16,7 +16,45 @@
     </description>
 
     <dependencies>
-
+        <!--身份验证依赖-->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>credentials-java</artifactId>
+            <version>LATEST</version>
+        </dependency>
+        <!--thumbnailator 压缩工具-->
+        <dependency>
+            <groupId>net.coobird</groupId>
+            <artifactId>thumbnailator</artifactId>
+            <version>0.4.8</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-fileupload</groupId>
+            <artifactId>commons-fileupload</artifactId>
+            <version>1.3.1</version>
+        </dependency>
+        <!--二维码-->
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>core</artifactId>
+            <version>3.5.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>javase</artifactId>
+            <version>3.5.1</version>
+        </dependency>
+        <!--通用工具hutool-->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.7.21</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.9.0</version>
+        </dependency>
         <!-- Spring框架基本的核心工具 -->
         <dependency>
             <groupId>org.springframework</groupId>
@@ -52,13 +90,13 @@
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
         </dependency>
-  
+
         <!-- JSON工具类 -->
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
         </dependency>
-        
+
         <!-- 阿里JSON解析器 -->
         <dependency>
             <groupId>com.alibaba.fastjson2</groupId>

+ 10 - 0
ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java

@@ -41,4 +41,14 @@ public class CacheConstants
      * 登录账户密码错误次数 redis key
      */
     public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
+    /**
+     * 员工培训手册阅读人员名单 redis key=read_train:manualId value = [userId+":"+员工姓名]
+     */
+    public static final String READ_TRAIN = "read_train:";
+    /**
+     * 员工培训手册阅读人员的阅读时间 redis key
+     */
+    public static final String READ_TRAIN_TIME = "read_train_time:";
+
+
 }

+ 55 - 1
ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java

@@ -1,8 +1,9 @@
 package com.ruoyi.common.constant;
 
-import java.util.Locale;
 import io.jsonwebtoken.Claims;
 
+import java.util.Locale;
+
 /**
  * 通用常量信息
  * 
@@ -170,4 +171,57 @@ public class Constants
      */
     public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
             "org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config", "com.ruoyi.generator" };
+    public static final String ONE ="1";
+    public static final String TWO ="2";
+    public static final String THR ="3";
+    public static final String FOR ="4";
+    public static final String FIV ="5";
+
+
+    public static final String FRONT = "front";
+    public static final String BACK = "back";
+
+    //------------------文章的key----------------------------
+    //社区资讯文章点赞的人员集合的key value = 该文章的[userId]
+    public static final String ONE_LIKE ="one_like:";
+    //对应用户点赞的文章key=my_like_one:{用户id} value =[资讯文章id]
+    public static final String ONE_MY_LIKE ="one_my_like:";
+    //社区资讯文章点赞的数量 给数据库同步数据在 redis中增加一个有过期时间的key key=one_like_count_time:{文章id}#{数量}  过期时候value获取不到
+    public static final String ONE_LIKE_COUNT_TIME ="one_like_count_time:";
+    //社区资讯文章点赞的数量永久key key=like_one_count:{文章id} value = 该文章的点赞数量
+    public static final String ONE_LIKE_COUNT="one_like_count:";
+
+    //------------------社区资讯key----------------------------
+    //社区资讯评论的总数量 key=community_comment_count:{communityId} value = 评论的数量
+    public static final String COMMUNITY_COMMENT_COUNT="community_comment_count:";
+    //------------------回复的key----------------------------
+    //社区资讯回复点赞的人员集合的key value = 该回复的[userId]
+    public static final String TWO_LIKE ="two_like:";
+    //对应用户点赞的回复key=two_my_like:{用户id} value = [评论id]
+    public static final String TWO_MY_LIKE ="two_my_like:";
+    //社区资讯评论点赞的数量 给数据库同步数据在 redis中增加一个有过期时间的key key=two_like_count_time:{评论id}#{数量} 过期时候value获取不到
+    public static final String TWO_LIKE_COUNT_TIME ="two_like_count_time:";
+    //社区资讯评论点赞的数量永久key key=two_like_count:{评论id} value = 该评论的点赞数量
+    public static final String TWO_LIKE_COUNT="two_like_count:";
+
+    //-------------------社区资讯收藏的key-----------------
+    //社区资讯收藏的人员集合的key = stars_community:{communityId} value = 该资讯收藏的[userId]
+    public static final String STARS_COMMUNITY ="stars_community:";
+    //社区资讯收藏的总数的key = stars_user_count:{communityId} value = 收藏的人数值
+    public static final String STARS_USER_COUNT ="stars_user_count:";
+
+    //-------------------党建资讯收藏的key-----------------
+    //党建资讯收藏的人员集合的key = stars_party_news:{userId} value = 该用户收藏的党建[partyId]
+    public static final String STARS_PARTY_NEWS ="stars_party_news:";
+    //党建资讯对应资讯收藏的数量key =stars_party_news_count:{partyId} value = 收藏的数量
+    public static final String STARS_PARTY_NEWS_COUNT ="stars_party_news_count:";
+
+    //-------------------未读互动的key-----------------
+    //记录社区资讯某个用户一共有多少个未读的互动(点赞,收藏,回复)的具体信息,记录成map形式{} key = comment_interaction_user:{userId} hkey = {targetType:targetId} value= CommentInteractionVo
+    public static final String COMMENT_INTERACTION_USER ="comment_interaction_user:";
+    //记录社区资讯某个用户一共有多少个未读的互动的数量key = comment_interaction_user_count:{userId} value = 未读的互动的数量
+    public static final String COMMENT_INTERACTION_USER_COUNT ="comment_interaction_user_count:";
+    //记录社区资讯某个用户对应资讯下有多少个未读的互动key=comment_interaction_community_user_count:{userId} hkey = {community_id} value = 资讯下有多少个未读的互动(点赞,收藏,回复)
+    public static final String COMMENT_INTERACTION_COMMUNITY_USER_COUNT ="comment_interaction_community_user_count:";
+
 }

+ 6 - 0
ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java

@@ -63,6 +63,12 @@ public class UserConstants
     /** InnerLink组件标识 */
     public final static String INNER_LINK = "InnerLink";
 
+    /** 默认密码 */
+    public final static String PASSWORD = "1qaz!QAZ";
+
+    /** 员工角色 */
+    public final static String SYS_EMP_ROLE_TYPE = "sys_emp_role_type";
+
     /** 校验是否唯一的返回标识 */
     public final static boolean UNIQUE = true;
     public final static boolean NOT_UNIQUE = false;

+ 26 - 7
ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java

@@ -1,16 +1,11 @@
 package com.ruoyi.common.core.controller;
 
-import java.beans.PropertyEditorSupport;
-import java.util.Date;
-import java.util.List;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.bind.WebDataBinder;
-import org.springframework.web.bind.annotation.InitBinder;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.ruoyi.common.constant.HttpStatus;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.ResidentInfo;
+import com.ruoyi.common.core.domain.entity.StaffManage;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.page.PageDomain;
 import com.ruoyi.common.core.page.TableDataInfo;
@@ -20,6 +15,14 @@ import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.sql.SqlUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.WebDataBinder;
+import org.springframework.web.bind.annotation.InitBinder;
+
+import java.beans.PropertyEditorSupport;
+import java.util.Date;
+import java.util.List;
 
 /**
  * web层通用数据处理
@@ -199,4 +202,20 @@ public class BaseController
     {
         return getLoginUser().getUsername();
     }
+
+    /**
+     * 获取员工信息
+     */
+    public StaffManage getStaffManage()
+    {
+        return getLoginUser().getStaffManage();
+    }
+
+    /**
+     * 获取员工信息
+     */
+    public ResidentInfo getResidentInfo()
+    {
+        return getLoginUser().getResidentInfo();
+    }
 }

+ 71 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/IdCardVo.java

@@ -0,0 +1,71 @@
+package com.ruoyi.common.core.domain;
+
+import java.io.Serializable;
+
+/**
+ * @Author: tjf
+ * @Date: 2024/4/23 14:58
+ * @Describe:
+ */
+public class IdCardVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 身份证号码
+     */
+    private String idCard;
+    /**
+     * 姓名
+     */
+    private String name;
+    /**
+     * 图片
+     */
+    private String image;
+    /**
+     *-front:身份证含照片的一面
+     * -back:身份证带国徽的一面
+     */
+    private String idCardSide;
+
+    public String getIdCardSide() {
+        return idCardSide;
+    }
+
+    public void setIdCardSide(String idCardSide) {
+        this.idCardSide = idCardSide;
+    }
+
+    public String getIdCard() {
+        return idCard;
+    }
+
+    public void setIdCard(String idCard) {
+        this.idCard = idCard;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getImage() {
+        return image;
+    }
+
+    public void setImage(String image) {
+        this.image = image;
+    }
+
+    @Override
+    public String toString() {
+        return "IdCardVo{" +
+                "idCard='" + idCard + '\'' +
+                ", name='" + name + '\'' +
+                ", image='" + image + '\'' +
+                ", idCardSide='" + idCardSide + '\'' +
+                '}';
+    }
+}

+ 12 - 3
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java

@@ -1,14 +1,16 @@
 package com.ruoyi.common.core.domain;
 
-import java.io.Serializable;
-import java.util.List;
-import java.util.stream.Collectors;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.domain.entity.AssetType;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysMenu;
 import com.ruoyi.common.utils.StringUtils;
 
+import java.io.Serializable;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * Treeselect树结构实体类
  * 
@@ -51,6 +53,13 @@ public class TreeSelect implements Serializable
         this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
     }
 
+    public TreeSelect(AssetType assetType)
+    {
+        this.id = assetType.getAssetId();
+        this.label = assetType.getAssetName();
+        this.children = assetType.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
+    }
+
     public Long getId()
     {
         return id;

+ 148 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AssetType.java

@@ -0,0 +1,148 @@
+package com.ruoyi.common.core.domain.entity;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 资产类型对象 asset_type
+ * 
+ * @author boman
+ * @date 2025-02-17
+ */
+public class AssetType extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 资产类型id */
+    private Long assetId;
+
+    /** 父资产类型id */
+    @Excel(name = "父资产类型id")
+    private Long parentId;
+
+    /** 祖级列表 */
+    @Excel(name = "祖级列表")
+    private String ancestors;
+
+    /** 资产类型名称 */
+    @Excel(name = "资产类型名称")
+    private String assetName;
+
+    /** 显示顺序 */
+    @Excel(name = "显示顺序")
+    private Integer orderNum;
+
+    /** 资产类型状态(0正常 1停用) */
+    @Excel(name = "资产类型状态", readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+    /** 父资产名称 */
+    private String parentName;
+    /** 子资产 */
+    private List<AssetType> children = new ArrayList<AssetType>();
+
+    public String getParentName() {
+        return parentName;
+    }
+
+    public void setParentName(String parentName) {
+        this.parentName = parentName;
+    }
+
+    public List<AssetType> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<AssetType> children) {
+        this.children = children;
+    }
+
+    public void setAssetId(Long assetId)
+    {
+        this.assetId = assetId;
+    }
+
+    public Long getAssetId() 
+    {
+        return assetId;
+    }
+    public void setParentId(Long parentId) 
+    {
+        this.parentId = parentId;
+    }
+
+    public Long getParentId() 
+    {
+        return parentId;
+    }
+    public void setAncestors(String ancestors) 
+    {
+        this.ancestors = ancestors;
+    }
+
+    public String getAncestors() 
+    {
+        return ancestors;
+    }
+    public void setAssetName(String assetName) 
+    {
+        this.assetName = assetName;
+    }
+
+    public String getAssetName() 
+    {
+        return assetName;
+    }
+    public void setOrderNum(Integer orderNum) 
+    {
+        this.orderNum = orderNum;
+    }
+
+    public Integer getOrderNum() 
+    {
+        return orderNum;
+    }
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("assetId", getAssetId())
+            .append("parentId", getParentId())
+            .append("ancestors", getAncestors())
+            .append("assetName", getAssetName())
+            .append("orderNum", getOrderNum())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 314 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/ResidentInfo.java

@@ -0,0 +1,314 @@
+package com.ruoyi.common.core.domain.entity;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 居住人员信息,存储居住人员的详细信息对象 resident_info
+ * 
+ * @author boman
+ * @date 2025-02-27
+ */
+public class ResidentInfo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 居住人员主键,唯一标识每条居住人员信息 */
+    private Long residentId;
+
+    /** 关联房屋信息表的house_id,标识居住人员所属房屋 */
+    @Excel(name = "关联房屋信息表的house_id,标识居住人员所属房屋")
+    private Long houseId;
+    /**
+     * 房屋状态:1-自住,2-空闲,3-待售空闲,4-出租
+     */
+    private Long houseStatus;
+
+    /** 关联sys_user表中user_id */
+    @Excel(name = "关联sys_user表中user_id")
+    private Long userId;
+
+    /** 居住人员的详细门牌号 */
+    @Excel(name = "居住人员的详细门牌号")
+    private String detailedAddress;
+
+    /** 居住人员姓名 */
+    @Excel(name = "居住人员姓名")
+    private String residentName;
+
+    /** 居住人员身份证号码,18位 */
+    @Excel(name = "居住人员身份证号码,18位")
+    private String residentIdCard;
+
+    /** 居住人员出生日期 */
+    @Excel(name = "居住人员出生日期")
+    private String residentBirthday;
+
+    /** 居住人员手机号 */
+    @Excel(name = "居住人员手机号")
+    private String residentPhone;
+
+    /** 居住人员性别:1-男,2-女 */
+    @Excel(name = "居住人员性别:1-男,2-女")
+    private Integer residentGender;
+
+    /** 居住人员与户主的关系,如父子、夫妻等 */
+    @Excel(name = "居住人员与户主的关系,如父子、夫妻等")
+    private String residentRelationship;
+
+    /** 是否是户主:Y-是,N-否 */
+    @Excel(name = "是否是户主:Y-是,N-否")
+    private String isHouseholder;
+
+    /** 是否是租户:Y-是,N-否 */
+    @Excel(name = "是否是租户:Y-是,N-否")
+    private String isTenant;
+
+    /** 居住人员工作单位 */
+    @Excel(name = "居住人员工作单位")
+    private String residentEmployer;
+
+    /** 特殊类型 */
+    @Excel(name = "特殊类型")
+    private String specialType;
+
+    /** 爱好字典值多选 */
+    @Excel(name = "爱好字典值多选")
+    private String residentHobby;
+
+    /** 居住人员面貌,如党员、群众等 */
+    @Excel(name = "居住人员面貌,如党员、群众等")
+    private String residentAppearance;
+
+    /** 身份证正面 */
+    @Excel(name = "身份证正面")
+    private String idCardFront;
+
+    /** 身份证反面 */
+    @Excel(name = "身份证反面")
+    private String idCardBack;
+
+    /** 身份证住址 */
+    @Excel(name = "身份证住址")
+    private String idCardAddress;
+
+    /** 人脸地址 */
+    @Excel(name = "人脸地址")
+    private String facePhoto;
+
+    public Long getHouseStatus() {
+        return houseStatus;
+    }
+
+    public void setHouseStatus(Long houseStatus) {
+        this.houseStatus = houseStatus;
+    }
+
+    public void setResidentId(Long residentId)
+    {
+        this.residentId = residentId;
+    }
+
+    public Long getResidentId() 
+    {
+        return residentId;
+    }
+    public void setHouseId(Long houseId) 
+    {
+        this.houseId = houseId;
+    }
+
+    public Long getHouseId() 
+    {
+        return houseId;
+    }
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+    public void setDetailedAddress(String detailedAddress) 
+    {
+        this.detailedAddress = detailedAddress;
+    }
+
+    public String getDetailedAddress() 
+    {
+        return detailedAddress;
+    }
+    public void setResidentName(String residentName) 
+    {
+        this.residentName = residentName;
+    }
+
+    public String getResidentName() 
+    {
+        return residentName;
+    }
+    public void setResidentIdCard(String residentIdCard) 
+    {
+        this.residentIdCard = residentIdCard;
+    }
+
+    public String getResidentIdCard() 
+    {
+        return residentIdCard;
+    }
+    public void setResidentBirthday(String residentBirthday) 
+    {
+        this.residentBirthday = residentBirthday;
+    }
+
+    public String getResidentBirthday() 
+    {
+        return residentBirthday;
+    }
+    public void setResidentPhone(String residentPhone) 
+    {
+        this.residentPhone = residentPhone;
+    }
+
+    public String getResidentPhone() 
+    {
+        return residentPhone;
+    }
+    public void setResidentGender(Integer residentGender) 
+    {
+        this.residentGender = residentGender;
+    }
+
+    public Integer getResidentGender() 
+    {
+        return residentGender;
+    }
+    public void setResidentRelationship(String residentRelationship) 
+    {
+        this.residentRelationship = residentRelationship;
+    }
+
+    public String getResidentRelationship() 
+    {
+        return residentRelationship;
+    }
+    public void setIsHouseholder(String isHouseholder) 
+    {
+        this.isHouseholder = isHouseholder;
+    }
+
+    public String getIsHouseholder() 
+    {
+        return isHouseholder;
+    }
+    public void setIsTenant(String isTenant) 
+    {
+        this.isTenant = isTenant;
+    }
+
+    public String getIsTenant() 
+    {
+        return isTenant;
+    }
+    public void setResidentEmployer(String residentEmployer) 
+    {
+        this.residentEmployer = residentEmployer;
+    }
+
+    public String getResidentEmployer() 
+    {
+        return residentEmployer;
+    }
+    public void setSpecialType(String specialType) 
+    {
+        this.specialType = specialType;
+    }
+
+    public String getSpecialType() 
+    {
+        return specialType;
+    }
+    public void setResidentHobby(String residentHobby) 
+    {
+        this.residentHobby = residentHobby;
+    }
+
+    public String getResidentHobby() 
+    {
+        return residentHobby;
+    }
+    public void setResidentAppearance(String residentAppearance) 
+    {
+        this.residentAppearance = residentAppearance;
+    }
+
+    public String getResidentAppearance() 
+    {
+        return residentAppearance;
+    }
+    public void setIdCardFront(String idCardFront) 
+    {
+        this.idCardFront = idCardFront;
+    }
+
+    public String getIdCardFront() 
+    {
+        return idCardFront;
+    }
+    public void setIdCardBack(String idCardBack) 
+    {
+        this.idCardBack = idCardBack;
+    }
+
+    public String getIdCardBack() 
+    {
+        return idCardBack;
+    }
+    public void setIdCardAddress(String idCardAddress) 
+    {
+        this.idCardAddress = idCardAddress;
+    }
+
+    public String getIdCardAddress() 
+    {
+        return idCardAddress;
+    }
+    public void setFacePhoto(String facePhoto) 
+    {
+        this.facePhoto = facePhoto;
+    }
+
+    public String getFacePhoto() 
+    {
+        return facePhoto;
+    }
+
+    @Override
+    public String toString() {
+        return "ResidentInfo{" +
+                "residentId=" + residentId +
+                ", houseId=" + houseId +
+                ", houseStatus=" + houseStatus +
+                ", userId=" + userId +
+                ", detailedAddress='" + detailedAddress + '\'' +
+                ", residentName='" + residentName + '\'' +
+                ", residentIdCard='" + residentIdCard + '\'' +
+                ", residentBirthday='" + residentBirthday + '\'' +
+                ", residentPhone='" + residentPhone + '\'' +
+                ", residentGender=" + residentGender +
+                ", residentRelationship='" + residentRelationship + '\'' +
+                ", isHouseholder='" + isHouseholder + '\'' +
+                ", isTenant='" + isTenant + '\'' +
+                ", residentEmployer='" + residentEmployer + '\'' +
+                ", specialType='" + specialType + '\'' +
+                ", residentHobby='" + residentHobby + '\'' +
+                ", residentAppearance='" + residentAppearance + '\'' +
+                ", idCardFront='" + idCardFront + '\'' +
+                ", idCardBack='" + idCardBack + '\'' +
+                ", idCardAddress='" + idCardAddress + '\'' +
+                ", facePhoto='" + facePhoto + '\'' +
+                '}';
+    }
+}

+ 208 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/StaffManage.java

@@ -0,0 +1,208 @@
+package com.ruoyi.common.core.domain.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 员工管理对象 staff_manage
+ * 
+ * @author boman
+ * @date 2025-02-18
+ */
+public class StaffManage extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 员工管理id */
+    private Long staffId;
+    /**
+     * 员工账号id
+     */
+    private Long userId;
+
+    /** 员工姓名 */
+    @Excel(name = "员工姓名")
+    private String staffName;
+
+    /** 员工性别(1男 2女 ) */
+    @Excel(name = "员工性别", readConverterExp = "1=男,2=女")
+    private String gender;
+
+    /** 员工类别,1:保安 2:维修人员 3:物业管理 */
+    @Excel(name = "员工类别,1:保安 2:维修人员 3:物业管理")
+    private String staffCategory;
+
+    /** 维修分类,表示维修人员擅长的维修类别 */
+    @Excel(name = "维修分类,表示维修人员擅长的维修类别")
+    private String maintenanceCategory;
+
+    /** 手机号码 */
+    @Excel(name = "手机号码")
+    private String phoneNumber;
+
+    /** 头像,存储头像的URL或文件路径 */
+    @Excel(name = "头像,存储头像的URL或文件路径")
+    private String avatarPhoto;
+
+    /** 身份证号码 */
+    @Excel(name = "身份证号码")
+    private String idCard;
+
+    /** 身份证正面 */
+    @Excel(name = "身份证正面")
+    private String idCardFront;
+
+    /** 身份证反面 */
+    @Excel(name = "身份证反面")
+    private String idCardBack;
+
+    /** 相关证件 */
+    @Excel(name = "相关证件")
+    private String certificate;
+
+    /** 状态,字典值 */
+    @Excel(name = "状态,字典值")
+    private String status;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public void setStaffId(Long staffId)
+    {
+        this.staffId = staffId;
+    }
+
+    public Long getStaffId() 
+    {
+        return staffId;
+    }
+    public void setStaffName(String staffName) 
+    {
+        this.staffName = staffName;
+    }
+
+    public String getStaffName() 
+    {
+        return staffName;
+    }
+    public void setGender(String gender) 
+    {
+        this.gender = gender;
+    }
+
+    public String getGender() 
+    {
+        return gender;
+    }
+    public void setStaffCategory(String staffCategory) 
+    {
+        this.staffCategory = staffCategory;
+    }
+
+    public String getStaffCategory() 
+    {
+        return staffCategory;
+    }
+    public void setMaintenanceCategory(String maintenanceCategory) 
+    {
+        this.maintenanceCategory = maintenanceCategory;
+    }
+
+    public String getMaintenanceCategory() 
+    {
+        return maintenanceCategory;
+    }
+    public void setPhoneNumber(String phoneNumber) 
+    {
+        this.phoneNumber = phoneNumber;
+    }
+
+    public String getPhoneNumber() 
+    {
+        return phoneNumber;
+    }
+    public void setAvatarPhoto(String avatarPhoto) 
+    {
+        this.avatarPhoto = avatarPhoto;
+    }
+
+    public String getAvatarPhoto() 
+    {
+        return avatarPhoto;
+    }
+    public void setIdCard(String idCard) 
+    {
+        this.idCard = idCard;
+    }
+
+    public String getIdCard() 
+    {
+        return idCard;
+    }
+    public void setIdCardFront(String idCardFront) 
+    {
+        this.idCardFront = idCardFront;
+    }
+
+    public String getIdCardFront() 
+    {
+        return idCardFront;
+    }
+    public void setIdCardBack(String idCardBack) 
+    {
+        this.idCardBack = idCardBack;
+    }
+
+    public String getIdCardBack() 
+    {
+        return idCardBack;
+    }
+    public void setCertificate(String certificate) 
+    {
+        this.certificate = certificate;
+    }
+
+    public String getCertificate() 
+    {
+        return certificate;
+    }
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("staffId", getStaffId())
+            .append("staffName", getStaffName())
+            .append("gender", getGender())
+            .append("staffCategory", getStaffCategory())
+            .append("maintenanceCategory", getMaintenanceCategory())
+            .append("phoneNumber", getPhoneNumber())
+            .append("avatarPhoto", getAvatarPhoto())
+            .append("idCard", getIdCard())
+            .append("idCardFront", getIdCardFront())
+            .append("idCardBack", getIdCardBack())
+            .append("certificate", getCertificate())
+            .append("status", getStatus())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 39 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java

@@ -1,9 +1,12 @@
 package com.ruoyi.common.core.domain.model;
 
 import com.alibaba.fastjson2.annotation.JSONField;
+import com.ruoyi.common.core.domain.entity.ResidentInfo;
+import com.ruoyi.common.core.domain.entity.StaffManage;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
+
 import java.util.Collection;
 import java.util.Set;
 
@@ -71,6 +74,16 @@ public class LoginUser implements UserDetails
      */
     private SysUser user;
 
+    /**
+     * 员工信息
+     */
+    private StaffManage staffManage;
+    /**
+     * 居住人员信息
+     */
+    private ResidentInfo residentInfo;
+
+
     public LoginUser()
     {
     }
@@ -89,6 +102,32 @@ public class LoginUser implements UserDetails
         this.permissions = permissions;
     }
 
+    public LoginUser(Long userId, Long deptId, SysUser user, Set<String> permissions,StaffManage staffManage,ResidentInfo residentInfo)
+    {
+        this.userId = userId;
+        this.deptId = deptId;
+        this.user = user;
+        this.permissions = permissions;
+        this.staffManage = staffManage;
+        this.residentInfo = residentInfo;
+    }
+
+    public StaffManage getStaffManage() {
+        return staffManage;
+    }
+
+    public void setStaffManage(StaffManage staffManage) {
+        this.staffManage = staffManage;
+    }
+
+    public ResidentInfo getResidentInfo() {
+        return residentInfo;
+    }
+
+    public void setResidentInfo(ResidentInfo residentInfo) {
+        this.residentInfo = residentInfo;
+    }
+
     public Long getUserId()
     {
         return userId;

+ 15 - 6
ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java

@@ -1,11 +1,5 @@
 package com.ruoyi.common.core.redis;
 
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.BoundSetOperations;
 import org.springframework.data.redis.core.HashOperations;
@@ -13,6 +7,9 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.ValueOperations;
 import org.springframework.stereotype.Component;
 
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
 /**
  * spring redis 工具类
  *
@@ -218,6 +215,18 @@ public class RedisCache
         redisTemplate.opsForHash().put(key, hKey, value);
     }
 
+
+    /**
+     * 判断Hash中是否存在对应的
+     *
+     * @param key Redis键
+     * @param hKey Hash键
+     */
+    public boolean hasCacheMapKey(final String key, final String hKey)
+    {
+        return redisTemplate.opsForHash().hasKey(key,hKey);
+    }
+
     /**
      * 获取Hash中的数据
      *

+ 65 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/Base64Util.java

@@ -0,0 +1,65 @@
+package com.ruoyi.common.utils;
+
+/**
+ * Base64 工具类
+ */
+public class Base64Util {
+    private static final char last2byte = (char) Integer.parseInt("00000011", 2);
+    private static final char last4byte = (char) Integer.parseInt("00001111", 2);
+    private static final char last6byte = (char) Integer.parseInt("00111111", 2);
+    private static final char lead6byte = (char) Integer.parseInt("11111100", 2);
+    private static final char lead4byte = (char) Integer.parseInt("11110000", 2);
+    private static final char lead2byte = (char) Integer.parseInt("11000000", 2);
+    private static final char[] encodeTable = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'};
+
+    public Base64Util() {
+    }
+
+    public static String encode(byte[] from) {
+        StringBuilder to = new StringBuilder((int) ((double) from.length * 1.34D) + 3);
+        int num = 0;
+        char currentByte = 0;
+
+        int i;
+        for (i = 0; i < from.length; ++i) {
+            for (num %= 8; num < 8; num += 6) {
+                switch (num) {
+                    case 0:
+                        currentByte = (char) (from[i] & lead6byte);
+                        currentByte = (char) (currentByte >>> 2);
+                    case 1:
+                    case 3:
+                    case 5:
+                    default:
+                        break;
+                    case 2:
+                        currentByte = (char) (from[i] & last6byte);
+                        break;
+                    case 4:
+                        currentByte = (char) (from[i] & last4byte);
+                        currentByte = (char) (currentByte << 2);
+                        if (i + 1 < from.length) {
+                            currentByte = (char) (currentByte | (from[i + 1] & lead2byte) >>> 6);
+                        }
+                        break;
+                    case 6:
+                        currentByte = (char) (from[i] & last2byte);
+                        currentByte = (char) (currentByte << 4);
+                        if (i + 1 < from.length) {
+                            currentByte = (char) (currentByte | (from[i + 1] & lead4byte) >>> 4);
+                        }
+                }
+
+                to.append(encodeTable[currentByte]);
+            }
+        }
+
+        if (to.length() % 4 != 0) {
+            for (i = 4 - to.length() % 4; i > 0; --i) {
+                to.append("=");
+            }
+        }
+
+        return to.toString();
+    }
+}

+ 24 - 6
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java

@@ -1,15 +1,15 @@
 package com.ruoyi.common.utils;
 
+import org.apache.commons.lang3.time.DateFormatUtils;
+
 import java.lang.management.ManagementFactory;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.Date;
-import org.apache.commons.lang3.time.DateFormatUtils;
+import java.util.List;
 
 /**
  * 时间工具类
@@ -53,6 +53,11 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         return dateTimeNow(YYYY_MM_DD);
     }
 
+    public static String getYear()
+    {
+        return dateTimeNow(YYYY);
+    }
+
     public static final String getTime()
     {
         return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
@@ -188,4 +193,17 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
+
+    // 返回过去7天的日期字符串列表,包含今天(自定义格式)
+    public static List<String> getPreviousSevenDays(String pattern) {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
+        List<String> dateStrings = new ArrayList<>(7);
+        LocalDate today = LocalDate.now();
+        for (int i = 6; i >= 0; i--) {
+            dateStrings.add(today.minusDays(i).format(formatter));
+        }
+        return dateStrings;
+    }
+
+
 }

+ 72 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/FileUtil.java

@@ -0,0 +1,72 @@
+package com.ruoyi.common.utils;
+
+import java.io.*;
+
+/**
+ * 文件读取工具类
+ */
+public class FileUtil {
+
+    /**
+     * 读取文件内容,作为字符串返回
+     */
+    public static String readFileAsString(String filePath) throws IOException {
+        File file = new File(filePath);
+        if (!file.exists()) {
+            throw new FileNotFoundException(filePath);
+        } 
+
+        if (file.length() > 1024 * 1024 * 1024) {
+            throw new IOException("File is too large");
+        } 
+
+        StringBuilder sb = new StringBuilder((int) (file.length()));
+        // 创建字节输入流  
+        FileInputStream fis = new FileInputStream(filePath);  
+        // 创建一个长度为10240的Buffer
+        byte[] bbuf = new byte[10240];  
+        // 用于保存实际读取的字节数  
+        int hasRead = 0;  
+        while ( (hasRead = fis.read(bbuf)) > 0 ) {  
+            sb.append(new String(bbuf, 0, hasRead));  
+        }  
+        fis.close();  
+        return sb.toString();
+    }
+
+    /**
+     * 根据文件路径读取byte[] 数组
+     */
+    public static byte[] readFileByBytes(String filePath) throws IOException {
+        File file = new File(filePath);
+        if (!file.exists()) {
+            throw new FileNotFoundException(filePath);
+        } else {
+            ByteArrayOutputStream bos = new ByteArrayOutputStream((int) file.length());
+            BufferedInputStream in = null;
+
+            try {
+                in = new BufferedInputStream(new FileInputStream(file));
+                short bufSize = 1024;
+                byte[] buffer = new byte[bufSize];
+                int len1;
+                while (-1 != (len1 = in.read(buffer, 0, bufSize))) {
+                    bos.write(buffer, 0, len1);
+                }
+
+                byte[] var7 = bos.toByteArray();
+                return var7;
+            } finally {
+                try {
+                    if (in != null) {
+                        in.close();
+                    }
+                } catch (IOException var14) {
+                    var14.printStackTrace();
+                }
+
+                bos.close();
+            }
+        }
+    }
+}

+ 77 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java

@@ -0,0 +1,77 @@
+package com.ruoyi.common.utils;
+
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * http 工具类
+ */
+public class HttpUtil {
+
+    public static String post(String requestUrl, String accessToken, String params)
+            throws Exception {
+        String contentType = "application/x-www-form-urlencoded";
+        return HttpUtil.post(requestUrl, accessToken, contentType, params);
+    }
+
+    public static String post(String requestUrl, String accessToken, String contentType, String params)
+            throws Exception {
+        String encoding = "UTF-8";
+        if (requestUrl.contains("nlp")) {
+            encoding = "GBK";
+        }
+        return HttpUtil.post(requestUrl, accessToken, contentType, params, encoding);
+    }
+
+    public static String post(String requestUrl, String accessToken, String contentType, String params, String encoding)
+            throws Exception {
+        String url = requestUrl + "?access_token=" + accessToken;
+        return HttpUtil.postGeneralUrl(url, contentType, params, encoding);
+    }
+
+    public static String postGeneralUrl(String generalUrl, String contentType, String params, String encoding)
+            throws Exception {
+        URL url = new URL(generalUrl);
+        // 打开和URL之间的连接
+        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+        connection.setRequestMethod("POST");
+        // 设置通用的请求属性
+        connection.setRequestProperty("Content-Type", contentType);
+        connection.setRequestProperty("Connection", "Keep-Alive");
+        connection.setUseCaches(false);
+        connection.setDoOutput(true);
+        connection.setDoInput(true);
+
+        // 得到请求的输出流对象
+        DataOutputStream out = new DataOutputStream(connection.getOutputStream());
+        out.write(params.getBytes(encoding));
+        out.flush();
+        out.close();
+
+        // 建立实际的连接
+        connection.connect();
+        // 获取所有响应头字段
+        Map<String, List<String>> headers = connection.getHeaderFields();
+        // 遍历所有的响应头字段
+        for (String key : headers.keySet()) {
+            System.err.println(key + "--->" + headers.get(key));
+        }
+        // 定义 BufferedReader输入流来读取URL的响应
+        BufferedReader in = null;
+        in = new BufferedReader(
+                new InputStreamReader(connection.getInputStream(), encoding));
+        String result = "";
+        String getLine;
+        while ((getLine = in.readLine()) != null) {
+            result += getLine;
+        }
+        in.close();
+        System.err.println("result:" + result);
+        return result;
+    }
+}

+ 77 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtils.java

@@ -0,0 +1,77 @@
+package com.ruoyi.common.utils;
+
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * http 工具类
+ */
+public class HttpUtils {
+
+    public static String post(String requestUrl, String accessToken, String params)
+            throws Exception {
+        String contentType = "application/x-www-form-urlencoded";
+        return HttpUtils.post(requestUrl, accessToken, contentType, params);
+    }
+
+    public static String post(String requestUrl, String accessToken, String contentType, String params)
+            throws Exception {
+        String encoding = "UTF-8";
+        if (requestUrl.contains("nlp")) {
+            encoding = "GBK";
+        }
+        return HttpUtils.post(requestUrl, accessToken, contentType, params, encoding);
+    }
+
+    public static String post(String requestUrl, String accessToken, String contentType, String params, String encoding)
+            throws Exception {
+        String url = requestUrl + "?access_token=" + accessToken;
+        return HttpUtils.postGeneralUrl(url, contentType, params, encoding);
+    }
+
+    public static String postGeneralUrl(String generalUrl, String contentType, String params, String encoding)
+            throws Exception {
+        URL url = new URL(generalUrl);
+        // 打开和URL之间的连接
+        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+        connection.setRequestMethod("POST");
+        // 设置通用的请求属性
+        connection.setRequestProperty("Content-Type", contentType);
+        connection.setRequestProperty("Connection", "Keep-Alive");
+        connection.setUseCaches(false);
+        connection.setDoOutput(true);
+        connection.setDoInput(true);
+
+        // 得到请求的输出流对象
+        DataOutputStream out = new DataOutputStream(connection.getOutputStream());
+        out.write(params.getBytes(encoding));
+        out.flush();
+        out.close();
+
+        // 建立实际的连接
+        connection.connect();
+        // 获取所有响应头字段
+        Map<String, List<String>> headers = connection.getHeaderFields();
+        // 遍历所有的响应头字段
+        for (String key : headers.keySet()) {
+            System.err.println(key + "--->" + headers.get(key));
+        }
+        // 定义 BufferedReader输入流来读取URL的响应
+        BufferedReader in = null;
+        in = new BufferedReader(
+                new InputStreamReader(connection.getInputStream(), encoding));
+        String result = "";
+        String getLine;
+        while ((getLine = in.readLine()) != null) {
+            result += getLine;
+        }
+        in.close();
+        System.err.println("result:" + result);
+        return result;
+    }
+}

+ 874 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/IdCardUtil.java

@@ -0,0 +1,874 @@
+package com.ruoyi.common.utils;
+
+/**
+ * @Author: tjf
+ * @Date: 2024/4/17 9:35
+ * @Describe:
+ */
+
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.core.domain.AjaxResult;
+import okhttp3.*;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.*;
+import java.net.URLEncoder;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.*;
+
+import static com.ruoyi.common.constant.Constants.BACK;
+import static com.ruoyi.common.constant.Constants.FRONT;
+
+
+public class IdCardUtil {
+    /**
+     * 重要提示代码中所需工具类
+     * FileUtil,HttpUtil请从
+     * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
+     * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
+     * 下载
+     * <p>
+     * https://cloud.baidu.com/doc/OCR/s/rk3h7xzck 文档地址
+     */
+
+    // aes key 从console控制台获取 身份证识别使用
+    static String aesKey = "ce539dc069ad0908";
+
+    static byte[] originAesKey = null;
+
+    /**
+     * 身份证识别
+     * {
+     * "log_id": "1559208562721579319",
+     * "direction": 0,
+     * "image_status": "normal",
+     * "photo": "/9j/4AAQSkZJRgABA......",
+     * "photo_location": {
+     * "width": 1189,
+     * "top": 638,
+     * "left": 2248,
+     * "height": 1483
+     * },
+     * "card_image": "/9j/4AAQSkZJRgABA......",
+     * "card_location": {
+     * "top": 328,
+     * "left": 275,
+     * "width": 1329,
+     * "height": 571
+     * },
+     * "words_result": {
+     * "住址": {
+     * "location": {
+     * "left": 267,
+     * "top": 453,
+     * "width": 459,
+     * "height": 99
+     * },
+     * "words": "南京市江宁区弘景大道3889号"
+     * },
+     * "公民身份号码": {
+     * "location": {
+     * "left": 443,
+     * "top": 681,
+     * "width": 589,
+     * "height": 45
+     * },
+     * "words": "330881199904173914"
+     * },
+     * "出生": {
+     * "location": {
+     * "left": 270,
+     * "top": 355,
+     * "width": 357,
+     * "height": 45
+     * },
+     * "words": "19990417"
+     * },
+     * "姓名": {
+     * "location": {
+     * "left": 267,
+     * "top": 176,
+     * "width": 152,
+     * "height": 50
+     * },
+     * "words": "伍云龙"
+     * },
+     * "性别": {
+     * "location": {
+     * "left": 269,
+     * "top": 262,
+     * "width": 33,
+     * "height": 52
+     * },
+     * "words": "男"
+     * },
+     * "民族": {
+     * "location": {
+     * "left": 492,
+     * "top": 279,
+     * "width": 30,
+     * "height": 37
+     * },
+     * "words": "汉"
+     * }
+     * },
+     * "words_result_num": 6
+     * }
+     * <p>
+     * <p>
+     * {
+     * "words_result": {
+     * "失效日期": {
+     * "words": "20390711",
+     * "location": {
+     * "top": 445,
+     * "left": 523,
+     * "width": 153,
+     * "height": 38
+     * }
+     * },
+     * "签发机关": {
+     * "words": "陆丰市公安局",
+     * "location": {
+     * "top": 377,
+     * "left": 339,
+     * "width": 195,
+     * "height": 38
+     * }
+     * },
+     * "签发日期": {
+     * "words": "20190606",
+     * "location": {
+     * "top": 445,
+     * "left": 343,
+     * "width": 152,
+     * "height": 38
+     * }
+     * }
+     * },
+     * "log_id": "1559208562721579328",
+     * "words_result_num": 3,
+     * "error_code": 0,
+     * "image_status": "normal"
+     * }
+     *
+     * @return
+     */
+    public static AjaxResult idCard(String image, String idCardSide) {
+        try {
+            // 文件路径
+            byte[] imgData = FileUtil.readFileByBytes(image);
+
+            String imgStr = encryptImg(aesKey, imgData);
+
+            String imgParam = URLEncoder.encode(imgStr, "UTF-8");
+            String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard";
+            //-front:身份证含照片的一面
+            //-back:身份证带国徽的一面
+            //自动检测身份证正反面,如果传参指定方向与图片相反,支持正常识别,返回参数image_status字段为"reversed_side"
+            String param = "id_card_side=" + idCardSide +
+                    "&image=" + imgParam +
+                    "&AESEncry=" + true;
+            String accessToken = getAccessToken("TvvuZOOh7MgnlDFnw11ln67n", "CY47OI0eKAzYBD2LO55SM3OITzsyq6DK");
+            String encryptResult = HttpUtils.post(url, accessToken, param);
+            String decryptResult = parseResult(encryptResult);
+            JSONObject jsonObject = JSON.parseObject(decryptResult);
+            String wordsResult = jsonObject.getString("words_result");
+            Map<String, Object> map = new HashMap<>(3);
+            if (StringUtils.isNotEmpty(wordsResult)) {
+                JSONObject jsonObjectWordsResult = JSON.parseObject(wordsResult);
+                if (FRONT.equals(idCardSide)) {
+                    String name = JSON.parseObject(jsonObjectWordsResult.getString("姓名")).getString("words");
+                    String address = JSON.parseObject(jsonObjectWordsResult.getString("住址")).getString("words");
+                    String idCard = JSON.parseObject(jsonObjectWordsResult.getString("公民身份号码")).getString("words");
+                    map.put("realName", name);
+                    map.put("address", address);
+                    map.put("idCard", idCard);
+                } else if (BACK.equals(idCardSide)) {
+                    String date = JSON.parseObject(jsonObjectWordsResult.getString("失效日期")).getString("words");
+                    map.put("expirationDate", date);
+                }
+            }
+            return AjaxResult.success(map);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return AjaxResult.error();
+    }
+
+    /**
+     * 加密图片
+     *
+     * @param aesKey
+     * @param imgData
+     * @return
+     * @throws Exception
+     */
+    private static String encryptImg(String aesKey, byte[] imgData) throws Exception {
+        originAesKey = AesKeyUtil.parseAesKey(aesKey);
+        byte[] encImgBytes = AesUtil.encrypt(imgData, originAesKey);
+        String imgStr = Base64Util.encodeBase64(encImgBytes);
+        return imgStr;
+    }
+
+    /**
+     * 解密结果
+     *
+     * @param encryptResult
+     * @return
+     * @throws Exception
+     */
+    private static String parseResult(String encryptResult) throws Exception {
+        JSONObject obj = JSONObject.parseObject(encryptResult);
+        String result = obj.getString("result");
+        byte[] arr = Base64Util.decodeBase64(result);
+        String decryptResult = new String(AesUtil.decrypt(arr, originAesKey));
+        return decryptResult;
+    }
+
+
+    static class AesKeyUtil {
+        private static final String HEX = "0123456789abcdef";
+
+        /**
+         * 获得原生的128位的aeskey
+         * 因为一个byte位8位最后生成的byte数组长度为16
+         * <p>
+         * 16 * 8 = 128
+         *
+         * @param hex
+         * @return
+         */
+        public static byte[] parseAesKey(String hex) throws Exception {
+            char[] data = hex.toCharArray();
+            if (data.length != 16) {
+                throw new Exception(" ase key illegal ");
+            }
+            return decode(hex.toCharArray());
+        }
+
+        private static byte[] decode(char[] data) throws IllegalArgumentException {
+            int len = data.length;
+
+            byte[] out = new byte[len];
+
+            for (int i = 0; i < len; i++) {
+                int f = toDigit(data[i]);
+                out[i] = (byte) (f);
+            }
+            return out;
+        }
+
+        private static int toDigit(char ch) {
+            return HEX.indexOf(ch);
+        }
+    }
+
+    static class AesUtil {
+
+        private static final String ALGORITHM = "AES";
+
+        private static final String ALGORITHM_STR = "AES/ECB/PKCS5Padding";
+
+        /**
+         * aes 加密
+         */
+        private static byte[] encrypt(byte[] src, byte[] aesKey) throws Exception {
+            Cipher cipher = getCipher(aesKey, Cipher.ENCRYPT_MODE);
+            byte[] ret = cipher.doFinal(src);
+            return ret;
+        }
+
+        /**
+         * aes 解密
+         */
+        public static byte[] decrypt(byte[] src, byte[] aesKey) throws Exception {
+            Cipher cipher = getCipher(aesKey, Cipher.DECRYPT_MODE);
+            byte[] original = cipher.doFinal(src);
+            return original;
+        }
+
+        private static Cipher getCipher(byte[] aesKey, int mode) throws Exception {
+            SecretKeySpec secretKeySpec = new SecretKeySpec(aesKey, ALGORITHM);
+            Cipher cipher = Cipher.getInstance(ALGORITHM_STR);
+            cipher.init(mode, secretKeySpec);
+            return cipher;
+        }
+    }
+
+    static class Base64Util {
+
+        private static Base64.Encoder ENCODER = Base64.getEncoder();
+
+        // base64 加密
+        private static Base64.Decoder DECODER = Base64.getDecoder();
+
+        /**
+         * base64加密
+         *
+         * @param arr
+         * @return
+         */
+        private static String encodeBase64(byte[] arr) {
+            String base64 = null;
+            try {
+                base64 = ENCODER.encodeToString(arr);
+            } catch (Exception e) {
+            }
+            return base64;
+        }
+
+        /**
+         * base64解密
+         *
+         * @param str
+         * @return
+         */
+        public static byte[] decodeBase64(String str) {
+            byte[] encodeBase64 = new byte[0];
+            try {
+                encodeBase64 = DECODER.decode(str);
+            } catch (Exception e) {
+            }
+            return encodeBase64;
+        }
+    }
+
+    /**
+     * 营业执照识别
+     * 重要提示代码中所需工具类
+     * FileUtil,Base64Util,HttpUtil,GsonUtils请从
+     * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
+     * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
+     * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
+     * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
+     * 下载
+     */
+    public static AjaxResult businessLicense(String image) {
+        // 请求url
+        String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/business_license";
+        try {
+            // 本地文件路径
+            byte[] imgData = FileUtil.readFileByBytes(image);
+            String imgStr = com.ruoyi.common.utils.Base64Util.encode(imgData);
+            String imgParam = URLEncoder.encode(imgStr, "UTF-8");
+            String param = "image=" + imgParam;
+            String accessToken = getAccessToken("TvvuZOOh7MgnlDFnw11ln67n", "CY47OI0eKAzYBD2LO55SM3OITzsyq6DK");
+            String result = HttpUtils.post(url, accessToken, param);
+            /**
+             *
+             {
+             "words_result": {
+             "经营范围": {
+             "location": {
+             "top": 589,
+             "left": 381,
+             "width": 90,
+             "height": 19
+             },
+             "words": "商务服务业"
+             },
+             "组成形式": {
+             "location": {
+             "top": -1,
+             "left": -1,
+             "width": 0,
+             "height": 0
+             },
+             "words": "无"
+             },
+             "法人": {
+             "location": {
+             "top": 537,
+             "left": 381,
+             "width": 36,
+             "height": 19
+             },
+             "words": "方平"
+             },
+             "证件编号": {
+             "location": {
+             "top": 218,
+             "left": 302,
+             "width": 140,
+             "height": 15
+             },
+             "words": "921MA190538210301"
+             },
+             "注册资本": {
+             "location": {
+             "top": 431,
+             "left": 1044,
+             "width": 152,
+             "height": 21
+             },
+             "words": "200万元"
+             },
+             "单位名称": {
+             "location": {
+             "top": 431,
+             "left": 384,
+             "width": 71,
+             "height": 20
+             },
+             "words": "有限公司"
+             },
+             "有效期": {
+             "location": {
+             "top": 536,
+             "left": 1044,
+             "width": 198,
+             "height": 20
+             },
+             "words": "长期"
+             },
+             "社会信用代码": {
+             "location": {
+             "top": 300,
+             "left": 241,
+             "width": 156,
+             "height": 16
+             },
+             "words": "10440119MA06M85"
+             },
+             "实收资本": {
+             "location": {
+             "top": -1,
+             "left": -1,
+             "width": 0,
+             "height": 0
+             },
+             "words": "无"
+             },
+             "有效期起始日期": {
+             "location": {
+             "top": 536,
+             "left": 1044,
+             "width": 198,
+             "height": 20
+             },
+             "words": "2019年01月01日"
+             },
+             "核准日期": {
+             "location": {
+             "top": 884,
+             "left": 1188,
+             "width": 199,
+             "height": 22
+             },
+             "words": "2019年01月01日"
+             },
+             "成立日期": {
+             "location": {
+             "top": 484,
+             "left": 1043,
+             "width": 126,
+             "height": 19
+             },
+             "words": "2019年01月01日"
+             },
+             "税务登记号": {
+             "location": {
+             "top": -1,
+             "left": -1,
+             "width": 0,
+             "height": 0
+             },
+             "words": "无"
+             },
+             "地址": {
+             "location": {
+             "top": 588,
+             "left": 1043,
+             "width": 55,
+             "height": 22
+             },
+             "words": "广州市"
+             },
+             "登记机关": {
+             "location": {
+             "top": 0,
+             "left": 0,
+             "width": 0,
+             "height": 0
+             },
+             "words": "无"
+             },
+             "类型": {
+             "location": {
+             "top": 484,
+             "left": 382,
+             "width": 258,
+             "height": 20
+             },
+             "words": "有限责任公司(自然人投资或控股)"
+             }
+             },
+             "direction": 0,
+             "words_result_num": 16,
+             "log_id": "3166723741167575145"
+             }
+             */
+            JSONObject jsonObject = JSONObject.parseObject(result);
+            String wordsResult = jsonObject.getString("words_result");
+            Map<String, Object> map = new HashMap<>(9);
+            if (StringUtils.isNotEmpty(wordsResult)) {
+                JSONObject jsonObjectWordsResult = JSON.parseObject(wordsResult);
+                String creditCode = JSON.parseObject(jsonObjectWordsResult.getString("社会信用代码")).getString("words");
+                String enterpriseName = JSON.parseObject(jsonObjectWordsResult.getString("单位名称")).getString("words");
+                String enterpriseType = JSON.parseObject(jsonObjectWordsResult.getString("类型")).getString("words");
+                String enterpriseAddress = JSON.parseObject(jsonObjectWordsResult.getString("地址")).getString("words");
+                String legalName = JSON.parseObject(jsonObjectWordsResult.getString("法人")).getString("words");
+                String registeredCapital = JSON.parseObject(jsonObjectWordsResult.getString("注册资本")).getString("words");
+                String establishData = JSON.parseObject(jsonObjectWordsResult.getString("成立日期")).getString("words");
+                String businessTerm = JSON.parseObject(jsonObjectWordsResult.getString("有效期")).getString("words");
+                String businessScope = JSON.parseObject(jsonObjectWordsResult.getString("经营范围")).getString("words");
+                map.put("creditCode", creditCode);
+                map.put("enterpriseName", enterpriseName);
+                map.put("enterpriseType", enterpriseType);
+                map.put("enterpriseAddress", enterpriseAddress);
+                map.put("legalName", legalName);
+                map.put("registeredCapital", registeredCapital);
+                map.put("establishData", establishData);
+                map.put("businessTerm", businessTerm);
+                map.put("businessScope", businessScope);
+            } else {
+                return AjaxResult.error("营业执照识别失败,请检查。");
+            }
+            return AjaxResult.success(map);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return AjaxResult.error();
+    }
+
+
+    /**
+     * 重要提示代码中所需工具类
+     * FileUtil,Base64Util,HttpUtil,GsonUtils请从
+     * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
+     * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
+     * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
+     * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
+     * 下载
+     * 车牌识别
+     */
+    public static AjaxResult licensePlate(String image) {
+        // 请求url
+        String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate";
+        try {
+            // 本地文件路径
+            byte[] imgData = FileUtil.readFileByBytes(image);
+            String imgStr = com.ruoyi.common.utils.Base64Util.encode(imgData);
+            String imgParam = URLEncoder.encode(imgStr, "UTF-8");
+            String param = "image=" + imgParam;
+            // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
+            String accessToken = getAccessToken("TvvuZOOh7MgnlDFnw11ln67n", "CY47OI0eKAzYBD2LO55SM3OITzsyq6DK");
+            String result = com.ruoyi.common.utils.HttpUtil.post(url, accessToken, param);
+            JSONObject jsonObject = JSONObject.parseObject(result);
+            String wordsResult = jsonObject.getString("words_result");
+            if (StringUtils.isNotEmpty(wordsResult)) {
+                JSONObject jsonObjectWordsResult = JSON.parseObject(wordsResult);
+                String plateNumber = jsonObjectWordsResult.getString("number");
+                System.out.println("车牌:" + plateNumber);
+                return AjaxResult.success(plateNumber);
+            }
+            /**
+             *
+             {
+             "words_result": [
+             {
+             "color": "blue",
+             "number": "京KBT355",
+             "probability": [
+             0.9999992847,
+             0.999999404,
+             0.9999910593,
+             0.9999765158,
+             0.999994874,
+             0.9998959303,
+             0.9999984503
+             ],
+             "vertexes_location": [
+             {
+             "x": 495,
+             "y": 589
+             },
+             {
+             "x": 800,
+             "y": 587
+             },
+             {
+             "x": 800,
+             "y": 676
+             },
+             {
+             "x": 496,
+             "y": 678
+             }
+             ]
+             }
+             ],
+             "log_id": "6845817085824549137"
+             }
+             */
+            System.out.println(result);
+            return AjaxResult.error("识别车牌错误返回:" + result);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return AjaxResult.error();
+    }
+
+    /**
+     * 重要提示代码中所需工具类
+     * FileUtil,Base64Util,HttpUtil,GsonUtils请从
+     * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
+     * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
+     * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
+     * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
+     * 行驶证识别
+     */
+    public static AjaxResult vehicleLicense(String image) {
+        // 请求url
+        String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/vehicle_license";
+        try {
+            // 本地文件路径
+
+            byte[] imgData = FileUtil.readFileByBytes(image);
+            String imgStr = com.ruoyi.common.utils.Base64Util.encode(imgData);
+            String imgParam = URLEncoder.encode(imgStr, "UTF-8");
+            String param = "image=" + imgParam;
+            // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
+            String accessToken = getAccessToken("TvvuZOOh7MgnlDFnw11ln67n", "CY47OI0eKAzYBD2LO55SM3OITzsyq6DK");
+            String result = com.ruoyi.common.utils.HttpUtil.post(url, accessToken, param);
+            JSONObject jsonObject = JSONObject.parseObject(result);
+            String wordsResult = jsonObject.getString("words_result");
+            Map<String, Object> map = new HashMap<>(9);
+            if (StringUtils.isNotEmpty(wordsResult)) {
+                JSONObject jsonObjectWordsResult = JSON.parseObject(wordsResult);
+                String vehicleBrand = JSON.parseObject(jsonObjectWordsResult.getString("品牌型号")).getString("words");
+                String vehicleType = JSON.parseObject(jsonObjectWordsResult.getString("车辆类型")).getString("words");
+                String engineNumber = JSON.parseObject(jsonObjectWordsResult.getString("发动机号码")).getString("words");
+                String identificationNumber = JSON.parseObject(jsonObjectWordsResult.getString("车辆识别代号")).getString("words");
+                String registrationDate = JSON.parseObject(jsonObjectWordsResult.getString("注册日期")).getString("words");
+                String issueDate = JSON.parseObject(jsonObjectWordsResult.getString("发证日期")).getString("words");
+                String plateNumber = JSON.parseObject(jsonObjectWordsResult.getString("号牌号码")).getString("words");
+                map.put("vehicleBrand",vehicleBrand);
+                map.put("vehicleType",vehicleType);
+                map.put("engineNumber",engineNumber);
+                map.put("identificationNumber",identificationNumber);
+                map.put("registrationDate",registrationDate);
+                map.put("issueDate",issueDate);
+                map.put("plateNumber",plateNumber);
+                System.out.println("行驶证识别"+map);
+            }
+            System.out.println(result);
+            return AjaxResult.success(map);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return AjaxResult.error();
+    }
+
+
+    /**
+     * 重要提示代码中所需工具类
+     * FileUtil,Base64Util,HttpUtil,GsonUtils请从
+     * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
+     * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
+     * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
+     * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
+     * 下载
+     */
+    public static AjaxResult realEstateCertificate(String image) {
+        // 请求url
+        String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/real_estate_certificate";
+        try {
+            // 本地文件路径
+            byte[] imgData = FileUtil.readFileByBytes(image);
+            String imgStr = com.ruoyi.common.utils.Base64Util.encode(imgData);
+            String imgParam = URLEncoder.encode(imgStr, "UTF-8");
+
+            String param = "image=" + imgParam;
+
+            // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
+            String accessToken = getAccessToken("TvvuZOOh7MgnlDFnw11ln67n", "CY47OI0eKAzYBD2LO55SM3OITzsyq6DK");
+            String result = com.ruoyi.common.utils.HttpUtil.post(url, accessToken, param);
+
+            /**
+             *
+             {
+             "words_result_num": 11,
+             "words_result": {
+             "权利人": [
+             {
+             "word": "阮兴武"
+             }
+             ],
+             "坐落": [
+             {
+             "word": "吉水县乌江镇前江村丰山组"
+             }
+             ],
+             "权利类型": [
+             {
+             "word": "宅基地使用权/房屋(构筑物)所有权"
+             }
+             ],
+             "面积": [
+             {
+             "word": "土地使用权面积:115.720㎡/房屋建筑面积:298.520㎡"
+             }
+             ],
+             "字第号": [
+             {
+             "word": "0042537"
+             }
+             ],
+             "不动产单元号": [
+             {
+             "word": "360822"
+             }
+             ],
+             "共有情况": [
+             {
+             "word": "家庭成员共有"
+             }
+             ],
+             "用途": [
+             {
+             "word": "农村宅基地/住宅"
+             }
+             ],
+             "使用期限": [
+             {
+             "word": ""
+             }
+             ],
+             "登记日期": [
+             {
+             "word": ""
+             }
+             ],
+             "共有人": [
+             {
+             "word": ""
+             }
+             ]
+             },
+             "log_id": 1739493844726379007
+             }
+             */
+            JSONObject jsonObject = JSONObject.parseObject(result);
+            String wordsResult = jsonObject.getString("words_result");
+            Map<String, Object> map = new HashMap<>(11);
+            if (StringUtils.isNotEmpty(wordsResult)) {
+                JSONObject jsonObjectWordsResult = JSON.parseObject(wordsResult);
+
+                JSONArray ownerNameArray = JSON.parseArray(jsonObjectWordsResult.getString("权利人"));
+                String ownerName = "";
+                if (ownerNameArray != null && ownerNameArray.size() > 0) {
+                    for (Object ownerNameResult : ownerNameArray) {
+                        ownerName = JSONObject.parseObject(ownerNameResult.toString()).getString("word") + ",";
+
+                    }
+                }
+                ownerName = ownerName.substring(0, ownerName.length() - 1);
+                String location = JSON.parseArray(jsonObjectWordsResult.getString("坐落")).getJSONObject(0).getString("word");
+                String rightType = JSON.parseArray(jsonObjectWordsResult.getString("权利类型")).getJSONObject(0).getString("word");
+                String area = JSON.parseArray(jsonObjectWordsResult.getString("面积")).getJSONObject(0).getString("word");
+                String documentNumber = JSON.parseArray(jsonObjectWordsResult.getString("字第号")).getJSONObject(0).getString("word");
+                String propertyUnitNumber = JSON.parseArray(jsonObjectWordsResult.getString("不动产单元号")).getJSONObject(0).getString("word");
+                String coOwnership = JSON.parseArray(jsonObjectWordsResult.getString("共有情况")).getJSONObject(0).getString("word");
+                String usageType = JSON.parseArray(jsonObjectWordsResult.getString("用途")).getJSONObject(0).getString("word");
+                String usagePeriod = JSON.parseArray(jsonObjectWordsResult.getString("使用期限")).getJSONObject(0).getString("word");
+                String registrationDate = JSON.parseArray(jsonObjectWordsResult.getString("登记日期")).getJSONObject(0).getString("word");
+                String coOwner = "";
+                JSONArray coOwnerArray = JSON.parseArray(jsonObjectWordsResult.getString("共有人"));
+                if (coOwnerArray != null && coOwnerArray.size() > 0) {
+                    for (Object coOwnerNameResult : coOwnerArray) {
+                        coOwner = JSONObject.parseObject(coOwnerNameResult.toString()).getString("word") + ",";
+                    }
+                }
+                coOwner = coOwner.substring(0, coOwner.length() - 1);
+                map.put("ownerName", ownerName);
+                map.put("location", location);
+                map.put("rightType", rightType);
+                map.put("area", area);
+                map.put("documentNumber", documentNumber);
+                map.put("propertyUnitNumber", propertyUnitNumber);
+                map.put("coOwnership", coOwnership);
+                map.put("usageType", usageType);
+                map.put("usagePeriod", usagePeriod);
+                map.put("registrationDate", registrationDate);
+                map.put("coOwner", coOwner);
+            } else {
+                return AjaxResult.error("房产证识别失败,请检查。");
+            }
+            System.out.println(result);
+            return AjaxResult.success(map);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return AjaxResult.error();
+    }
+
+    /**
+     * 获取文件base64编码
+     *
+     * @param path      文件路径
+     * @param urlEncode 如果Content-Type是application/x-www-form-urlencoded时,传true
+     * @return base64编码信息,不带文件头
+     * @throws IOException IO异常
+     */
+    static String getFileContentAsBase64(String path, boolean urlEncode) {
+        byte[] b = new byte[0];
+        try {
+            b = Files.readAllBytes(Paths.get(path));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        String base64 = Base64.getEncoder().encodeToString(b);
+        if (urlEncode) {
+            try {
+                base64 = URLEncoder.encode(base64, "utf-8");
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+        return base64;
+    }
+
+    /**
+     * 获取百度开放平台的AccessToken
+     * client_id: 必须参数,应用的API Key;
+     * client_secret: 必须参数,应用的Secret Key;不同的功能不同
+     *
+     * @return
+     */
+    public static String getAccessToken(String apiKey, String secretKey) {
+        String url = "https://aip.baidubce.com/oauth/2.0/token";
+        /**
+         *grant_type: 必须参数,固定为client_credentials;
+         *client_id: 必须参数,应用的API Key;
+         *client_secret: 必须参数,应用的Secret Key;
+         */
+        HashMap<String, Object> paramMap = new HashMap<>(3);
+        paramMap.put("grant_type", "client_credentials");
+        paramMap.put("client_id", apiKey);
+        paramMap.put("client_secret", secretKey);
+        String post = HttpUtil.post(url, paramMap);
+        JSONObject jsonObject = JSONObject.parseObject(post);
+        String accessToken = jsonObject.getString("access_token");
+        return accessToken;
+    }
+
+
+    static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();
+}

+ 98 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/ImageSizeUtil.java

@@ -0,0 +1,98 @@
+package com.ruoyi.common.utils;
+
+import net.coobird.thumbnailator.Thumbnails;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
+
+import java.io.*;
+
+/**
+ * 获取图片尺寸和截图 工具类
+ *
+ * @author zhangxiaoyan
+ */
+public class ImageSizeUtil {
+    /**
+     * 压缩图片 并返回MultipartFile
+     * @param multiFile
+     * @return
+     * @throws Exception
+     */
+    public static MultipartFile compressImg(MultipartFile multiFile) {
+        long size = multiFile.getSize();
+        if (size> 0){
+            double fileSizeMb = size / (1024.0 * 1024.0);
+            if (fileSizeMb < 5){
+                return multiFile;
+            }
+        }
+        // 压缩图片
+        InputStream inputStream = null;
+        ByteArrayOutputStream bos = null;
+        MultipartFile multipartFile = null;
+        InputStream fileInput= null;
+        try {
+            inputStream = multiFile.getInputStream();
+            bos = new ByteArrayOutputStream();
+            // 压缩图片核心代码 scale设置压缩比例 越小压缩图片越小
+            Thumbnails.of(inputStream).scale(0.5f).outputQuality(1f).toOutputStream(bos);
+            fileInput = new ByteArrayInputStream(bos.toByteArray());
+            // 转换 MultipartFile
+            String fieldName = multiFile.getName();
+            String fileName = multiFile.getOriginalFilename();
+            String contentType = multiFile.getContentType();
+            multipartFile = getMulFileByFile(fileInput, fieldName, contentType, fileName);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (inputStream != null){
+                    inputStream.close();
+                }
+                if (bos != null){
+                    bos.close();
+                }
+                if (fileInput != null){
+                    fileInput.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+
+            }
+        }
+        return multipartFile;
+    }
+
+    public static MultipartFile getMulFileByFile(InputStream fis,String fieldName,String contentType,String fileName) {
+        FileItem fileItem = createFileItem(fis,fieldName,contentType,fileName);
+        MultipartFile mfile = new CommonsMultipartFile(fileItem);
+        return mfile;
+    }
+
+    public static FileItem createFileItem(InputStream fis,String fieldName,String contentType,String fileName){
+        FileItemFactory factory = new DiskFileItemFactory(16, null);
+        FileItem item = factory.createItem(fieldName, contentType, false,fileName);
+        int bytesRead = 0;
+        byte[] buffer = new byte[8192];
+        try
+        {
+            OutputStream os = item.getOutputStream();
+            while ((bytesRead = fis.read(buffer, 0, 8192))!= -1)
+            {
+                os.write(buffer, 0, bytesRead);
+            }
+            os.close();
+            fis.close();
+        }
+        catch (IOException e)
+        {
+            e.printStackTrace();
+        }
+        return item;
+    }
+}
+
+

+ 1 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java

@@ -35,6 +35,7 @@ public class MimeTypeUtils
             "rar", "zip", "gz", "bz2",
             // 视频格式
             "mp4", "avi", "rmvb",
+            "wgt", "apk",
             // pdf
             "pdf" };
 

+ 10 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java

@@ -7,6 +7,7 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.script.DefaultRedisScript;
+import org.springframework.data.redis.listener.RedisMessageListenerContainer;
 import org.springframework.data.redis.serializer.StringRedisSerializer;
 
 /**
@@ -47,7 +48,15 @@ public class RedisConfig extends CachingConfigurerSupport
         redisScript.setResultType(Long.class);
         return redisScript;
     }
-
+   /* redis监听设置*/
+    @Bean
+    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
+        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
+        container.setConnectionFactory(connectionFactory);
+        /*添加redis过期时间的监听器*/
+       // container.addMessageListener(redisKeyExpirationListener,redisKeyExpirationListener.getTop());
+        return container;
+    }
     /**
      * 限流脚本
      */

+ 1 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -111,7 +111,7 @@ public class SecurityConfig
             .authorizeHttpRequests((requests) -> {
                 permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                requests.antMatchers("/login", "/register", "/captchaImage").permitAll()
+                requests.antMatchers("/login", "/register", "/captchaImage","/system/app/new").permitAll()
                     // 静态资源,可匿名访问
                     .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                     .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()

+ 73 - 3
ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java

@@ -1,8 +1,5 @@
 package com.ruoyi.framework.manager.factory;
 
-import java.util.TimerTask;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.utils.LogUtils;
 import com.ruoyi.common.utils.ServletUtils;
@@ -12,9 +9,17 @@ import com.ruoyi.common.utils.ip.IpUtils;
 import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.system.domain.SysLogininfor;
 import com.ruoyi.system.domain.SysOperLog;
+import com.ruoyi.system.domain.communityNews.CommentLikes;
+import com.ruoyi.system.domain.communityNews.CommentStars;
+import com.ruoyi.system.service.ICommentLikesService;
+import com.ruoyi.system.service.ICommentStarsService;
 import com.ruoyi.system.service.ISysLogininforService;
 import com.ruoyi.system.service.ISysOperLogService;
 import eu.bitwalker.useragentutils.UserAgent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.TimerTask;
 
 /**
  * 异步工厂(产生任务用)
@@ -99,4 +104,69 @@ public class AsyncFactory
             }
         };
     }
+
+    /**
+     * 点赞操作
+     *
+     * @param commentLikes 点赞信息
+     * @return 任务task
+     */
+    public static TimerTask giveTheThumbs(final CommentLikes commentLikes)
+    {
+        return new TimerTask()
+        {
+            @Override
+            public void run()
+            {
+                System.out.println("进入异步点赞方法");
+                // 进行点赞操作
+                SpringUtils.getBean(ICommentLikesService.class).giveTheThumbs(commentLikes);
+                System.out.println("完成异步点赞方法");
+            }
+        };
+    }
+
+    /**
+     * 社区资讯收藏操作
+     *
+     * @param commentStars 收藏信息
+     * @return 任务task
+     */
+    public static TimerTask getStars(final CommentStars commentStars)
+    {
+        return new TimerTask()
+        {
+            @Override
+            public void run()
+            {
+                System.out.println("进入异步社区资讯收藏方法");
+                // 进行收藏操作
+                SpringUtils.getBean(ICommentStarsService.class).getStars(commentStars);
+                System.out.println("完成异步社区资讯收藏方法");
+            }
+        };
+    }
+
+    /**
+     * 党建收藏操作
+     *
+     * @param commentStars 收藏信息
+     * @return 任务task
+     */
+    public static TimerTask getPartyNewsStars(final CommentStars commentStars)
+    {
+        return new TimerTask()
+        {
+            @Override
+            public void run()
+            {
+                System.out.println("进入异步党建收藏方法");
+                // 进行收藏操作
+                SpringUtils.getBean(ICommentStarsService.class).getPartyNewsStars(commentStars);
+                System.out.println("完成异步党建收藏方法");
+            }
+        };
+    }
+
+
 }

+ 8 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java

@@ -1,5 +1,7 @@
 package com.ruoyi.framework.web.service;
 
+import com.ruoyi.system.service.IResidentInfoService;
+import com.ruoyi.system.service.IStaffManageService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,6 +36,11 @@ public class UserDetailsServiceImpl implements UserDetailsService
     @Autowired
     private SysPermissionService permissionService;
 
+    @Autowired
+    private IResidentInfoService residentInfoService;
+    @Autowired
+    private IStaffManageService staffManageService;
+
     @Override
     public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
     {
@@ -61,6 +68,6 @@ public class UserDetailsServiceImpl implements UserDetailsService
 
     public UserDetails createLoginUser(SysUser user)
     {
-        return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));
+        return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user),staffManageService.selectStaffManageByUserId(user.getUserId()),residentInfoService.selectResidentInfoByUserId(user.getUserId()));
     }
 }

+ 2 - 2
ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java

@@ -163,7 +163,7 @@ public class GenController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('tool:gen:edit')")
     @Log(title = "代码生成", businessType = BusinessType.UPDATE)
-    @PutMapping
+    @PostMapping("/put")
     public AjaxResult editSave(@Validated @RequestBody GenTable genTable)
     {
         genTableService.validateEdit(genTable);
@@ -176,7 +176,7 @@ public class GenController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('tool:gen:remove')")
     @Log(title = "代码生成", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{tableIds}")
+    @GetMapping("/delete/{tableIds}")
     public AjaxResult remove(@PathVariable Long[] tableIds)
     {
         genTableService.deleteGenTableByIds(tableIds);

+ 5 - 3
ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java

@@ -1,12 +1,13 @@
 package com.ruoyi.generator.util;
 
-import java.util.Arrays;
-import org.apache.commons.lang3.RegExUtils;
 import com.ruoyi.common.constant.GenConstants;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.generator.config.GenConfig;
 import com.ruoyi.generator.domain.GenTable;
 import com.ruoyi.generator.domain.GenTableColumn;
+import org.apache.commons.lang3.RegExUtils;
+
+import java.util.Arrays;
 
 /**
  * 代码生成器 工具类
@@ -22,7 +23,8 @@ public class GenUtils
     {
         genTable.setClassName(convertClassName(genTable.getTableName()));
         genTable.setPackageName(GenConfig.getPackageName());
-        genTable.setModuleName(getModuleName(GenConfig.getPackageName()));
+/*        genTable.setModuleName(getModuleName(GenConfig.getPackageName()));*/
+        genTable.setModuleName("wuYe");
         genTable.setBusinessName(getBusinessName(genTable.getTableName()));
         genTable.setFunctionName(replaceText(genTable.getTableComment()));
         genTable.setFunctionAuthor(GenConfig.getAuthor());

+ 1 - 0
ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml

@@ -74,6 +74,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 				AND date_format(create_time,'%Y%m%d') &lt;= date_format(#{params.endTime},'%Y%m%d')
 			</if>
 		</where>
+		order by create_time DESC
 	</select>
 
 	<select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult">

+ 4 - 4
ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java

@@ -115,7 +115,7 @@ public class SysJobController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('monitor:job:edit')")
     @Log(title = "定时任务", businessType = BusinessType.UPDATE)
-    @PutMapping
+    @PostMapping("/put")
     public AjaxResult edit(@RequestBody SysJob job) throws SchedulerException, TaskException
     {
         if (!CronUtils.isValid(job.getCronExpression()))
@@ -151,7 +151,7 @@ public class SysJobController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')")
     @Log(title = "定时任务", businessType = BusinessType.UPDATE)
-    @PutMapping("/changeStatus")
+    @PostMapping("/put/changeStatus")
     public AjaxResult changeStatus(@RequestBody SysJob job) throws SchedulerException
     {
         SysJob newJob = jobService.selectJobById(job.getJobId());
@@ -164,7 +164,7 @@ public class SysJobController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')")
     @Log(title = "定时任务", businessType = BusinessType.UPDATE)
-    @PutMapping("/run")
+    @PostMapping("/put/run")
     public AjaxResult run(@RequestBody SysJob job) throws SchedulerException
     {
         boolean result = jobService.run(job);
@@ -176,7 +176,7 @@ public class SysJobController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('monitor:job:remove')")
     @Log(title = "定时任务", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{jobIds}")
+    @GetMapping("/delete/{jobIds}")
     public AjaxResult remove(@PathVariable Long[] jobIds) throws SchedulerException, TaskException
     {
         jobService.deleteJobByIds(jobIds);

+ 2 - 2
ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java

@@ -72,7 +72,7 @@ public class SysJobLogController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('monitor:job:remove')")
     @Log(title = "定时任务调度日志", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{jobLogIds}")
+    @GetMapping("/delete/{jobLogIds}")
     public AjaxResult remove(@PathVariable Long[] jobLogIds)
     {
         return toAjax(jobLogService.deleteJobLogByIds(jobLogIds));
@@ -83,7 +83,7 @@ public class SysJobLogController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('monitor:job:remove')")
     @Log(title = "调度日志", businessType = BusinessType.CLEAN)
-    @DeleteMapping("/clean")
+    @GetMapping("/delete/clean")
     public AjaxResult clean()
     {
         jobLogService.cleanJobLog();

+ 134 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/UpdateApp.java

@@ -0,0 +1,134 @@
+package com.ruoyi.system.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 【请填写功能名称】对象 update_app
+ * 
+ * @author ruoyi
+ * @date 2023-02-16
+ */
+public class UpdateApp extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    private Long id;
+
+    /** 系统:Android:安卓系统,Apple:苹果系统 */
+    @Excel(name = "系统:Android:安卓系统,Apple:苹果系统")
+    private String model;
+
+    /** app端:1:物管端,2:用户端 */
+    @Excel(name = "app端:1:物管端,2:用户端")
+    private String appPort;
+
+    /** 版本名称 */
+    @Excel(name = "版本名称")
+    private String name;
+
+    /** 版本号 */
+    @Excel(name = "版本号")
+    private String code;
+
+    /** 版本描述 */
+    @Excel(name = "版本描述")
+    private String description;
+
+    /** 下载地址 */
+    @Excel(name = "下载地址")
+    private String path;
+
+    /** 是否有效 0:失效 1:有效 */
+    @Excel(name = "是否有效 0:失效 1:有效")
+    private String isDel;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setModel(String model) 
+    {
+        this.model = model;
+    }
+
+    public String getModel() 
+    {
+        return model;
+    }
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+    public void setCode(String code) 
+    {
+        this.code = code;
+    }
+
+    public String getCode() 
+    {
+        return code;
+    }
+    public void setDescription(String description) 
+    {
+        this.description = description;
+    }
+
+    public String getDescription() 
+    {
+        return description;
+    }
+    public void setPath(String path) 
+    {
+        this.path = path;
+    }
+
+    public String getPath() 
+    {
+        return path;
+    }
+    public void setIsDel(String isDel) 
+    {
+        this.isDel = isDel;
+    }
+
+    public String getIsDel() 
+    {
+        return isDel;
+    }
+
+    public String getAppPort() {
+        return appPort;
+    }
+
+    public void setAppPort(String appPort) {
+        this.appPort = appPort;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("model", getModel())
+            .append("name", getName())
+            .append("code", getCode())
+            .append("description", getDescription())
+            .append("path", getPath())
+            .append("isDel", getIsDel())
+            .append("createTime", getCreateTime())
+            .toString();
+    }
+}

+ 357 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/assets/CommunityAssets.java

@@ -0,0 +1,357 @@
+package com.ruoyi.system.domain.assets;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 社区资产对象 community_assets
+ * 
+ * @author boman
+ * @date 2025-02-24
+ */
+public class CommunityAssets extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 资产ID */
+    private Long communityAssetId;
+
+    /** 资产类型id */
+    @Excel(name = "资产类型id")
+    private Long assetId;
+
+    /** 资产类型,如设备、车辆等 */
+    @Excel(name = "资产类型,如设备、车辆等")
+    private String assetName;
+
+    /** 设备名称 */
+    @Excel(name = "设备名称")
+    private String equipmentName;
+
+    /** 设备封面照片的存储路径 */
+    @Excel(name = "设备封面照片的存储路径")
+    private String equipmentCoverPhoto;
+
+    /** 设备编号,唯一标识 */
+    @Excel(name = "设备编号,唯一标识")
+    private String equipmentNumber;
+
+    /** 设备二维码的存储路径或内容 */
+    @Excel(name = "设备二维码的存储路径或内容")
+    private String equipmentQrCode;
+
+    /** 设备状态,如正常、维修中、报废等 */
+    @Excel(name = "设备状态,如正常、维修中、报废等")
+    private String equipmentStatus;
+
+    /** 设备型号 */
+    @Excel(name = "设备型号")
+    private String equipmentModel;
+
+    /** 设备购买时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "设备购买时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date purchaseDate;
+
+    /** 设备用途描述 */
+    @Excel(name = "设备用途描述")
+    private String equipmentPurpose;
+
+    /** 设备存放位置或使用位置 */
+    @Excel(name = "设备存放位置或使用位置")
+    private String equipmentLocation;
+
+    /** 设备购买价格 */
+    @Excel(name = "设备购买价格")
+    private BigDecimal equipmentPrice;
+
+    /** 设备入库时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "设备入库时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date storageTime;
+
+    /** 入库操作人 */
+    @Excel(name = "入库操作人")
+    private String storagePerson;
+
+    /** 设备出库时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "设备出库时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date outboundTime;
+
+    /** 出库操作人 */
+    @Excel(name = "出库操作人")
+    private String outboundPerson;
+
+    /** 车牌号(如果是车辆类资产) */
+    @Excel(name = "车牌号", readConverterExp = "如=果是车辆类资产")
+    private String plateNumber;
+
+    /** 设备照片的存储路径(多个路径用逗号分隔) */
+    @Excel(name = "设备照片的存储路径", readConverterExp = "多=个路径用逗号分隔")
+    private String equipmentPhotos;
+
+    /** 最近维护日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "最近维护日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date maintenanceDate;
+
+    /** 维护操作人 */
+    @Excel(name = "维护操作人")
+    private String maintenancePerson;
+
+    /** 保修期(月) */
+    @Excel(name = "保修期", readConverterExp = "月=")
+    private String warrantyPeriod;
+
+    /** 折旧率(百分比) */
+    @Excel(name = "折旧率", readConverterExp = "百=分比")
+    private String depreciationRate;
+
+    public void setCommunityAssetId(Long communityAssetId) 
+    {
+        this.communityAssetId = communityAssetId;
+    }
+
+    public Long getCommunityAssetId() 
+    {
+        return communityAssetId;
+    }
+    public void setAssetId(Long assetId) 
+    {
+        this.assetId = assetId;
+    }
+
+    public Long getAssetId() 
+    {
+        return assetId;
+    }
+    public void setAssetName(String assetName) 
+    {
+        this.assetName = assetName;
+    }
+
+    public String getAssetName() 
+    {
+        return assetName;
+    }
+    public void setEquipmentName(String equipmentName) 
+    {
+        this.equipmentName = equipmentName;
+    }
+
+    public String getEquipmentName() 
+    {
+        return equipmentName;
+    }
+    public void setEquipmentCoverPhoto(String equipmentCoverPhoto) 
+    {
+        this.equipmentCoverPhoto = equipmentCoverPhoto;
+    }
+
+    public String getEquipmentCoverPhoto() 
+    {
+        return equipmentCoverPhoto;
+    }
+    public void setEquipmentNumber(String equipmentNumber) 
+    {
+        this.equipmentNumber = equipmentNumber;
+    }
+
+    public String getEquipmentNumber() 
+    {
+        return equipmentNumber;
+    }
+    public void setEquipmentQrCode(String equipmentQrCode) 
+    {
+        this.equipmentQrCode = equipmentQrCode;
+    }
+
+    public String getEquipmentQrCode() 
+    {
+        return equipmentQrCode;
+    }
+    public void setEquipmentStatus(String equipmentStatus) 
+    {
+        this.equipmentStatus = equipmentStatus;
+    }
+
+    public String getEquipmentStatus() 
+    {
+        return equipmentStatus;
+    }
+    public void setEquipmentModel(String equipmentModel) 
+    {
+        this.equipmentModel = equipmentModel;
+    }
+
+    public String getEquipmentModel() 
+    {
+        return equipmentModel;
+    }
+    public void setPurchaseDate(Date purchaseDate) 
+    {
+        this.purchaseDate = purchaseDate;
+    }
+
+    public Date getPurchaseDate() 
+    {
+        return purchaseDate;
+    }
+    public void setEquipmentPurpose(String equipmentPurpose) 
+    {
+        this.equipmentPurpose = equipmentPurpose;
+    }
+
+    public String getEquipmentPurpose() 
+    {
+        return equipmentPurpose;
+    }
+    public void setEquipmentLocation(String equipmentLocation) 
+    {
+        this.equipmentLocation = equipmentLocation;
+    }
+
+    public String getEquipmentLocation() 
+    {
+        return equipmentLocation;
+    }
+    public void setEquipmentPrice(BigDecimal equipmentPrice) 
+    {
+        this.equipmentPrice = equipmentPrice;
+    }
+
+    public BigDecimal getEquipmentPrice() 
+    {
+        return equipmentPrice;
+    }
+    public void setStorageTime(Date storageTime) 
+    {
+        this.storageTime = storageTime;
+    }
+
+    public Date getStorageTime() 
+    {
+        return storageTime;
+    }
+    public void setStoragePerson(String storagePerson) 
+    {
+        this.storagePerson = storagePerson;
+    }
+
+    public String getStoragePerson() 
+    {
+        return storagePerson;
+    }
+    public void setOutboundTime(Date outboundTime) 
+    {
+        this.outboundTime = outboundTime;
+    }
+
+    public Date getOutboundTime() 
+    {
+        return outboundTime;
+    }
+    public void setOutboundPerson(String outboundPerson) 
+    {
+        this.outboundPerson = outboundPerson;
+    }
+
+    public String getOutboundPerson() 
+    {
+        return outboundPerson;
+    }
+    public void setPlateNumber(String plateNumber) 
+    {
+        this.plateNumber = plateNumber;
+    }
+
+    public String getPlateNumber() 
+    {
+        return plateNumber;
+    }
+    public void setEquipmentPhotos(String equipmentPhotos) 
+    {
+        this.equipmentPhotos = equipmentPhotos;
+    }
+
+    public String getEquipmentPhotos() 
+    {
+        return equipmentPhotos;
+    }
+    public void setMaintenanceDate(Date maintenanceDate) 
+    {
+        this.maintenanceDate = maintenanceDate;
+    }
+
+    public Date getMaintenanceDate() 
+    {
+        return maintenanceDate;
+    }
+    public void setMaintenancePerson(String maintenancePerson) 
+    {
+        this.maintenancePerson = maintenancePerson;
+    }
+
+    public String getMaintenancePerson() 
+    {
+        return maintenancePerson;
+    }
+    public void setWarrantyPeriod(String warrantyPeriod) 
+    {
+        this.warrantyPeriod = warrantyPeriod;
+    }
+
+    public String getWarrantyPeriod() 
+    {
+        return warrantyPeriod;
+    }
+
+    public String getDepreciationRate() {
+        return depreciationRate;
+    }
+
+    public void setDepreciationRate(String depreciationRate) {
+        this.depreciationRate = depreciationRate;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("communityAssetId", getCommunityAssetId())
+            .append("assetId", getAssetId())
+            .append("assetName", getAssetName())
+            .append("equipmentName", getEquipmentName())
+            .append("equipmentCoverPhoto", getEquipmentCoverPhoto())
+            .append("equipmentNumber", getEquipmentNumber())
+            .append("equipmentQrCode", getEquipmentQrCode())
+            .append("equipmentStatus", getEquipmentStatus())
+            .append("equipmentModel", getEquipmentModel())
+            .append("purchaseDate", getPurchaseDate())
+            .append("equipmentPurpose", getEquipmentPurpose())
+            .append("equipmentLocation", getEquipmentLocation())
+            .append("equipmentPrice", getEquipmentPrice())
+            .append("storageTime", getStorageTime())
+            .append("storagePerson", getStoragePerson())
+            .append("outboundTime", getOutboundTime())
+            .append("outboundPerson", getOutboundPerson())
+            .append("plateNumber", getPlateNumber())
+            .append("equipmentPhotos", getEquipmentPhotos())
+            .append("maintenanceDate", getMaintenanceDate())
+            .append("maintenancePerson", getMaintenancePerson())
+            .append("warrantyPeriod", getWarrantyPeriod())
+            .append("depreciationRate", getDepreciationRate())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 98 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/blackManage/BlackManage.java

@@ -0,0 +1,98 @@
+package com.ruoyi.system.domain.blackManage;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 黑名单管理对象 black_manage
+ * 
+ * @author boman
+ * @date 2025-02-17
+ */
+public class BlackManage extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 黑名单管理id */
+    private Long blackManageId;
+
+    /** 黑名单类型 */
+    @Excel(name = "黑名单类型")
+    private String blackType;
+
+    /** 黑名单说明 */
+    @Excel(name = "黑名单说明")
+    private String blackTitle;
+
+    /** 黑名单的阈值 */
+    @Excel(name = "黑名单的阈值")
+    private String blackNum;
+
+    /** 黑名单是否启用 */
+    @Excel(name = "黑名单是否启用")
+    private String isDel;
+
+    public void setBlackManageId(Long blackManageId) 
+    {
+        this.blackManageId = blackManageId;
+    }
+
+    public Long getBlackManageId() 
+    {
+        return blackManageId;
+    }
+    public void setBlackType(String blackType) 
+    {
+        this.blackType = blackType;
+    }
+
+    public String getBlackType() 
+    {
+        return blackType;
+    }
+    public void setBlackTitle(String blackTitle) 
+    {
+        this.blackTitle = blackTitle;
+    }
+
+    public String getBlackTitle() 
+    {
+        return blackTitle;
+    }
+    public void setBlackNum(String blackNum) 
+    {
+        this.blackNum = blackNum;
+    }
+
+    public String getBlackNum() 
+    {
+        return blackNum;
+    }
+    public void setIsDel(String isDel) 
+    {
+        this.isDel = isDel;
+    }
+
+    public String getIsDel() 
+    {
+        return isDel;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("blackManageId", getBlackManageId())
+            .append("blackType", getBlackType())
+            .append("blackTitle", getBlackTitle())
+            .append("blackNum", getBlackNum())
+            .append("isDel", getIsDel())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 84 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/butler/ButlerSettings.java

@@ -0,0 +1,84 @@
+package com.ruoyi.system.domain.butler;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 物业管家设置对象 butler_settings
+ * 
+ * @author boman
+ * @date 2025-03-07
+ */
+public class ButlerSettings extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    private Long settingsId;
+
+    /** 标题 */
+    @Excel(name = "标题")
+    private String title;
+
+    /** 内容 */
+    @Excel(name = "内容")
+    private String content;
+
+    /** 是否删除:Y(删除)、N(不删除) */
+    @Excel(name = "是否删除:Y", readConverterExp = "删=除")
+    private String isDel;
+
+    public void setSettingsId(Long settingsId) 
+    {
+        this.settingsId = settingsId;
+    }
+
+    public Long getSettingsId() 
+    {
+        return settingsId;
+    }
+    public void setTitle(String title) 
+    {
+        this.title = title;
+    }
+
+    public String getTitle() 
+    {
+        return title;
+    }
+    public void setContent(String content) 
+    {
+        this.content = content;
+    }
+
+    public String getContent() 
+    {
+        return content;
+    }
+    public void setIsDel(String isDel) 
+    {
+        this.isDel = isDel;
+    }
+
+    public String getIsDel() 
+    {
+        return isDel;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("settingsId", getSettingsId())
+            .append("title", getTitle())
+            .append("content", getContent())
+            .append("isDel", getIsDel())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 140 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/checkPoint/CheckPointManage.java

@@ -0,0 +1,140 @@
+package com.ruoyi.system.domain.checkPoint;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 巡更点管理对象 check_point_manage
+ * 
+ * @author boman
+ * @date 2025-02-14
+ */
+public class CheckPointManage extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 巡更点主键 */
+    private Long checkPointManageId;
+
+    /** 星期几 */
+    @Excel(name = "星期几")
+    private String dateTimeNum;
+
+    /** 巡更类型(字典值) */
+    @Excel(name = "巡更类型(字典值)")
+    private String checkType;
+
+    /** 巡更时间 */
+    @JsonFormat(pattern = "HH:mm:ss")
+    @Excel(name = "巡更时间", width = 30, dateFormat = "HH:mm:ss")
+    private Date checkTime;
+
+    /** 巡更路线 */
+    @Excel(name = "巡更路线")
+    private String checkAddress;
+
+    /** 巡更人负责人姓名 */
+    @Excel(name = "巡更人负责人姓名")
+    private String userName;
+
+    /** 巡更人负责人id */
+    @Excel(name = "巡更人负责人id")
+    private Long useId;
+    private List<CheckPointManage> checkPointManageList;
+
+    public List<CheckPointManage> getCheckPointManageList() {
+        return checkPointManageList;
+    }
+
+    public void setCheckPointManageList(List<CheckPointManage> checkPointManageList) {
+        this.checkPointManageList = checkPointManageList;
+    }
+
+    public void setCheckPointManageId(Long checkPointManageId)
+    {
+        this.checkPointManageId = checkPointManageId;
+    }
+
+    public Long getCheckPointManageId() 
+    {
+        return checkPointManageId;
+    }
+    public void setDateTimeNum(String dateTimeNum) 
+    {
+        this.dateTimeNum = dateTimeNum;
+    }
+
+    public String getDateTimeNum() 
+    {
+        return dateTimeNum;
+    }
+    public void setCheckType(String checkType) 
+    {
+        this.checkType = checkType;
+    }
+
+    public String getCheckType() 
+    {
+        return checkType;
+    }
+    public void setCheckTime(Date checkTime) 
+    {
+        this.checkTime = checkTime;
+    }
+
+    public Date getCheckTime() 
+    {
+        return checkTime;
+    }
+    public void setCheckAddress(String checkAddress) 
+    {
+        this.checkAddress = checkAddress;
+    }
+
+    public String getCheckAddress() 
+    {
+        return checkAddress;
+    }
+    public void setUserName(String userName) 
+    {
+        this.userName = userName;
+    }
+
+    public String getUserName() 
+    {
+        return userName;
+    }
+    public void setUseId(Long useId) 
+    {
+        this.useId = useId;
+    }
+
+    public Long getUseId() 
+    {
+        return useId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("checkPointManageId", getCheckPointManageId())
+            .append("dateTimeNum", getDateTimeNum())
+            .append("checkType", getCheckType())
+            .append("checkTime", getCheckTime())
+            .append("checkAddress", getCheckAddress())
+            .append("userName", getUserName())
+            .append("useId", getUseId())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 263 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/checkPoint/CheckPointRecord.java

@@ -0,0 +1,263 @@
+package com.ruoyi.system.domain.checkPoint;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 巡更点记录对象 check_point_record
+ * 
+ * @author boman
+ * @date 2025-02-21
+ */
+public class CheckPointRecord extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 巡更点记录id */
+    private Long checkPointRecordId;
+
+    /** 巡更点id */
+    @Excel(name = "巡更点id")
+    private Long checkPointManageId;
+
+    /** 星期几 */
+    @Excel(name = "星期几")
+    private String dateTimeNum;
+
+    /** 巡更类型(字典值) */
+    @Excel(name = "巡更类型(字典值)")
+    private String checkType;
+
+    /** 巡更时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "巡更时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date checkTime;
+
+    /** 巡更路线 */
+    @Excel(name = "巡更路线")
+    private String checkAddress;
+
+    /** 巡更人负责人姓名 */
+    @Excel(name = "巡更人负责人姓名")
+    private String userName;
+
+    /** 巡更人负责人id */
+    @Excel(name = "巡更人负责人id")
+    private Long useId;
+
+    /** 巡更人姓名 */
+    @Excel(name = "巡更人姓名")
+    private String checkUserName;
+
+    /** 巡更人id */
+    @Excel(name = "巡更人id")
+    private Long checkUseId;
+    /**
+     * 巡更人员工管理id
+     */
+    private Long checkStaffId;
+
+    /** 巡更人手机号 */
+    @Excel(name = "巡更人手机号")
+    private String checkUsePhone;
+
+    /** 巡更结果 1:正常 2:损坏 */
+    @Excel(name = "巡更结果 1:正常 2:损坏")
+    private String checkResult;
+
+    /** 巡更结果详情 */
+    @Excel(name = "巡更结果详情")
+    private String checkResultDetails;
+
+    /** 巡更结果照片 */
+    @Excel(name = "巡更结果照片")
+    private String checkResultPhoto;
+
+    /** 巡更时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "巡更时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date checkResultTime;
+
+    /** 是否巡更 1:未巡更 2:已巡更 */
+    @Excel(name = "是否巡更 1:未巡更 2:已巡更")
+    private String checkStatus;
+
+    public Long getCheckStaffId() {
+        return checkStaffId;
+    }
+
+    public void setCheckStaffId(Long checkStaffId) {
+        this.checkStaffId = checkStaffId;
+    }
+
+    public void setCheckPointRecordId(Long checkPointRecordId)
+    {
+        this.checkPointRecordId = checkPointRecordId;
+    }
+
+    public Long getCheckPointRecordId() 
+    {
+        return checkPointRecordId;
+    }
+    public void setCheckPointManageId(Long checkPointManageId) 
+    {
+        this.checkPointManageId = checkPointManageId;
+    }
+
+    public Long getCheckPointManageId() 
+    {
+        return checkPointManageId;
+    }
+    public void setDateTimeNum(String dateTimeNum) 
+    {
+        this.dateTimeNum = dateTimeNum;
+    }
+
+    public String getDateTimeNum() 
+    {
+        return dateTimeNum;
+    }
+    public void setCheckType(String checkType) 
+    {
+        this.checkType = checkType;
+    }
+
+    public String getCheckType() 
+    {
+        return checkType;
+    }
+    public void setCheckTime(Date checkTime) 
+    {
+        this.checkTime = checkTime;
+    }
+
+    public Date getCheckTime() 
+    {
+        return checkTime;
+    }
+    public void setCheckAddress(String checkAddress) 
+    {
+        this.checkAddress = checkAddress;
+    }
+
+    public String getCheckAddress() 
+    {
+        return checkAddress;
+    }
+    public void setUserName(String userName) 
+    {
+        this.userName = userName;
+    }
+
+    public String getUserName() 
+    {
+        return userName;
+    }
+    public void setUseId(Long useId) 
+    {
+        this.useId = useId;
+    }
+
+    public Long getUseId() 
+    {
+        return useId;
+    }
+    public void setCheckUserName(String checkUserName) 
+    {
+        this.checkUserName = checkUserName;
+    }
+
+    public String getCheckUserName() 
+    {
+        return checkUserName;
+    }
+    public void setCheckUseId(Long checkUseId) 
+    {
+        this.checkUseId = checkUseId;
+    }
+
+    public Long getCheckUseId() 
+    {
+        return checkUseId;
+    }
+    public void setCheckUsePhone(String checkUsePhone) 
+    {
+        this.checkUsePhone = checkUsePhone;
+    }
+
+    public String getCheckUsePhone() 
+    {
+        return checkUsePhone;
+    }
+    public void setCheckResult(String checkResult) 
+    {
+        this.checkResult = checkResult;
+    }
+
+    public String getCheckResult() 
+    {
+        return checkResult;
+    }
+    public void setCheckResultDetails(String checkResultDetails) 
+    {
+        this.checkResultDetails = checkResultDetails;
+    }
+
+    public String getCheckResultDetails() 
+    {
+        return checkResultDetails;
+    }
+    public void setCheckResultPhoto(String checkResultPhoto) 
+    {
+        this.checkResultPhoto = checkResultPhoto;
+    }
+
+    public String getCheckResultPhoto() 
+    {
+        return checkResultPhoto;
+    }
+    public void setCheckResultTime(Date checkResultTime) 
+    {
+        this.checkResultTime = checkResultTime;
+    }
+
+    public Date getCheckResultTime() 
+    {
+        return checkResultTime;
+    }
+    public void setCheckStatus(String checkStatus) 
+    {
+        this.checkStatus = checkStatus;
+    }
+
+    public String getCheckStatus() 
+    {
+        return checkStatus;
+    }
+
+    @Override
+    public String toString() {
+        return "CheckPointRecord{" +
+                "checkPointRecordId=" + checkPointRecordId +
+                ", checkPointManageId=" + checkPointManageId +
+                ", dateTimeNum='" + dateTimeNum + '\'' +
+                ", checkType='" + checkType + '\'' +
+                ", checkTime=" + checkTime +
+                ", checkAddress='" + checkAddress + '\'' +
+                ", userName='" + userName + '\'' +
+                ", useId=" + useId +
+                ", checkUserName='" + checkUserName + '\'' +
+                ", checkUseId=" + checkUseId +
+                ", checkStaffId=" + checkStaffId +
+                ", checkUsePhone='" + checkUsePhone + '\'' +
+                ", checkResult='" + checkResult + '\'' +
+                ", checkResultDetails='" + checkResultDetails + '\'' +
+                ", checkResultPhoto='" + checkResultPhoto + '\'' +
+                ", checkResultTime=" + checkResultTime +
+                ", checkStatus='" + checkStatus + '\'' +
+                '}';
+    }
+}

+ 139 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/CommentContent.java

@@ -0,0 +1,139 @@
+package com.ruoyi.system.domain.communityNews;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 社区资讯评论内容对象 comment_content
+ * 
+ * @author boman
+ * @date 2025-02-25
+ */
+public class CommentContent extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 内容主键 */
+    private Long contentId;
+
+    /** 评论id */
+    @Excel(name = "评论id")
+    private Long commentId;
+
+    /** 用户id */
+    @Excel(name = "用户id")
+    private Long userId;
+
+    /** 评论内容 */
+    @Excel(name = "评论内容")
+    private String commentContent;
+
+    /** 状态:1:待审核 2:审核通过 3:审核不通过 4:审核通过后下架 */
+    @Excel(name = "状态:1:待审核 2:审核通过 3:审核不通过 4:审核通过后下架")
+    private String status;
+
+    /** 类型:1:文字 2:图片 */
+    @Excel(name = "类型:1:文字 2:图片")
+    private Integer type;
+
+    /** 点赞数量 */
+    @Excel(name = "点赞数量")
+    private Long likeCount;
+
+    /** 逻辑删除(Y:已删除,N:未删除) */
+    private String delFlag;
+
+    public void setContentId(Long contentId) 
+    {
+        this.contentId = contentId;
+    }
+
+    public Long getContentId() 
+    {
+        return contentId;
+    }
+    public void setCommentId(Long commentId) 
+    {
+        this.commentId = commentId;
+    }
+
+    public Long getCommentId() 
+    {
+        return commentId;
+    }
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+    public void setCommentContent(String commentContent) 
+    {
+        this.commentContent = commentContent;
+    }
+
+    public String getCommentContent() 
+    {
+        return commentContent;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public void setType(Integer type)
+    {
+        this.type = type;
+    }
+
+    public Integer getType() 
+    {
+        return type;
+    }
+    public void setLikeCount(Long likeCount) 
+    {
+        this.likeCount = likeCount;
+    }
+
+    public Long getLikeCount() 
+    {
+        return likeCount;
+    }
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("contentId", getContentId())
+            .append("commentId", getCommentId())
+            .append("userId", getUserId())
+            .append("commentContent", getCommentContent())
+            .append("status", getStatus())
+            .append("type", getType())
+            .append("likeCount", getLikeCount())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 255 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/CommentIndex.java

@@ -0,0 +1,255 @@
+package com.ruoyi.system.domain.communityNews;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 社区资讯评论对象 comment_index
+ * 
+ * @author boman
+ * @date 2025-02-25
+ */
+public class CommentIndex extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 社区资讯评论ID */
+    private Long commentId;
+
+    /** 社区资讯ID */
+    @Excel(name = "社区资讯ID")
+    private Long communityId;
+
+    /** 社区资讯标题 */
+    @Excel(name = "社区资讯标题")
+    private String communityTitle;
+
+    /** 社区资讯类型(1:公告 2:通知 3:资讯) */
+    @Excel(name = "社区资讯类型", readConverterExp = "1=:公告,2=:通知,3=:资讯")
+    private String communityType;
+
+    /** 根评论id 1:根评论 2:子评论 */
+    @Excel(name = "根评论id 1:根评论 2:子评论")
+    private Integer isRoot;
+
+    /** 父评论id */
+    @Excel(name = "父评论id")
+    private Long parentId;
+
+    /** 用户id */
+    @Excel(name = "用户id")
+    private Long userId;
+
+    /** 用户昵称 */
+    @Excel(name = "用户昵称")
+    private String nickName;
+
+    /** 头像地址 */
+    @Excel(name = "头像地址")
+    private String avatar;
+
+    /** 所回复目标评论的用户id */
+    @Excel(name = "所回复目标评论的用户id")
+    private Long toUserId;
+
+    /** 所回复目标评论的用户昵称 */
+    @Excel(name = "所回复目标评论的用户昵称")
+    private String toNickName;
+
+    /** 所回复目标评论的头像地址 */
+    @Excel(name = "所回复目标评论的头像地址")
+    private String toAvatar;
+    /**
+     * 是否是二级回复的回复 Y:是 N:否
+     */
+    private String toRoot;
+    /**
+     * 是否是自己的评论
+     */
+    private String isMyself;
+
+    /** 内容id */
+    @Excel(name = "内容id")
+    private Long contentId;
+
+    /** 评论内容(冗余字段) */
+    @Excel(name = "评论内容(冗余字段)")
+    private String commentContent;
+
+    /** 逻辑删除(Y:已删除,N:未删除) */
+    private String delFlag;
+
+    public String getIsMyself() {
+        return isMyself;
+    }
+
+    public void setIsMyself(String isMyself) {
+        this.isMyself = isMyself;
+    }
+
+    public String getToRoot() {
+        return toRoot;
+    }
+
+    public void setToRoot(String toRoot) {
+        this.toRoot = toRoot;
+    }
+
+    public String getCommunityTitle() {
+        return communityTitle;
+    }
+
+    public void setCommunityTitle(String communityTitle) {
+        this.communityTitle = communityTitle;
+    }
+
+    public void setCommentId(Long commentId)
+    {
+        this.commentId = commentId;
+    }
+
+    public Long getCommentId() 
+    {
+        return commentId;
+    }
+    public void setCommunityId(Long communityId) 
+    {
+        this.communityId = communityId;
+    }
+
+    public Long getCommunityId() 
+    {
+        return communityId;
+    }
+    public void setCommunityType(String communityType) 
+    {
+        this.communityType = communityType;
+    }
+
+    public String getCommunityType() 
+    {
+        return communityType;
+    }
+    public void setIsRoot(Integer isRoot) 
+    {
+        this.isRoot = isRoot;
+    }
+
+    public Integer getIsRoot() 
+    {
+        return isRoot;
+    }
+    public void setParentId(Long parentId) 
+    {
+        this.parentId = parentId;
+    }
+
+    public Long getParentId() 
+    {
+        return parentId;
+    }
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+    public void setNickName(String nickName) 
+    {
+        this.nickName = nickName;
+    }
+
+    public String getNickName() 
+    {
+        return nickName;
+    }
+    public void setAvatar(String avatar) 
+    {
+        this.avatar = avatar;
+    }
+
+    public String getAvatar() 
+    {
+        return avatar;
+    }
+    public void setToUserId(Long toUserId) 
+    {
+        this.toUserId = toUserId;
+    }
+
+    public Long getToUserId() 
+    {
+        return toUserId;
+    }
+    public void setToNickName(String toNickName) 
+    {
+        this.toNickName = toNickName;
+    }
+
+    public String getToNickName() 
+    {
+        return toNickName;
+    }
+    public void setToAvatar(String toAvatar) 
+    {
+        this.toAvatar = toAvatar;
+    }
+
+    public String getToAvatar() 
+    {
+        return toAvatar;
+    }
+    public void setContentId(Long contentId) 
+    {
+        this.contentId = contentId;
+    }
+
+    public Long getContentId() 
+    {
+        return contentId;
+    }
+    public void setCommentContent(String commentContent) 
+    {
+        this.commentContent = commentContent;
+    }
+
+    public String getCommentContent() 
+    {
+        return commentContent;
+    }
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    @Override
+    public String toString() {
+        return "CommentIndex{" +
+                "commentId=" + commentId +
+                ", communityId=" + communityId +
+                ", communityTitle='" + communityTitle + '\'' +
+                ", communityType='" + communityType + '\'' +
+                ", isRoot=" + isRoot +
+                ", parentId=" + parentId +
+                ", userId=" + userId +
+                ", nickName='" + nickName + '\'' +
+                ", avatar='" + avatar + '\'' +
+                ", toUserId=" + toUserId +
+                ", toNickName='" + toNickName + '\'' +
+                ", toAvatar='" + toAvatar + '\'' +
+                ", toRoot='" + toRoot + '\'' +
+                ", isMyself='" + isMyself + '\'' +
+                ", contentId=" + contentId +
+                ", commentContent='" + commentContent + '\'' +
+                ", delFlag='" + delFlag + '\'' +
+                '}';
+    }
+}

+ 143 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/CommentLikes.java

@@ -0,0 +1,143 @@
+package com.ruoyi.system.domain.communityNews;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 社区资讯点赞对象 comment_likes
+ * 
+ * @author boman
+ * @date 2025-02-25
+ */
+public class CommentLikes extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 点赞ID */
+    private Long likesId;
+    /** 社区资讯ID */
+    @Excel(name = "社区资讯ID")
+    private Long communityId;
+
+    /** 点赞目标id */
+    @Excel(name = "点赞目标id")
+    private Long targetId;
+
+    /** 点赞目标类型(1:资讯 2:回复) */
+    @Excel(name = "点赞目标类型", readConverterExp = "1=:资讯,2=:回复")
+    private String targetType;
+    /**
+     * 目标标题
+     */
+    private String targetTitle;
+
+    /** 用户id */
+    @Excel(name = "用户id")
+    private Long userId;
+
+    /** 用户昵称 */
+    @Excel(name = "用户昵称")
+    private String nickName;
+
+    /** 头像地址 */
+    @Excel(name = "头像地址")
+    private String avatar;
+
+    /** 逻辑删除(Y:已删除,N:未删除) */
+    private String delFlag;
+
+    public Long getCommunityId() {
+        return communityId;
+    }
+
+    public void setCommunityId(Long communityId) {
+        this.communityId = communityId;
+    }
+
+    public String getTargetTitle() {
+        return targetTitle;
+    }
+
+    public void setTargetTitle(String targetTitle) {
+        this.targetTitle = targetTitle;
+    }
+
+    public void setLikesId(Long likesId)
+    {
+        this.likesId = likesId;
+    }
+
+    public Long getLikesId() 
+    {
+        return likesId;
+    }
+    public void setTargetId(Long targetId) 
+    {
+        this.targetId = targetId;
+    }
+
+    public Long getTargetId() 
+    {
+        return targetId;
+    }
+    public void setTargetType(String targetType) 
+    {
+        this.targetType = targetType;
+    }
+
+    public String getTargetType() 
+    {
+        return targetType;
+    }
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+    public void setNickName(String nickName) 
+    {
+        this.nickName = nickName;
+    }
+
+    public String getNickName() 
+    {
+        return nickName;
+    }
+    public void setAvatar(String avatar) 
+    {
+        this.avatar = avatar;
+    }
+
+    public String getAvatar() 
+    {
+        return avatar;
+    }
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    @Override
+    public String toString() {
+        return "CommentLikes{" +
+                "likesId=" + likesId +
+                ", communityId=" + communityId +
+                ", targetId=" + targetId +
+                ", targetType='" + targetType + '\'' +
+                ", targetTitle='" + targetTitle + '\'' +
+                ", userId=" + userId +
+                ", nickName='" + nickName + '\'' +
+                ", avatar='" + avatar + '\'' +
+                ", delFlag='" + delFlag + '\'' +
+                '}';
+    }
+}

+ 139 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/CommentStars.java

@@ -0,0 +1,139 @@
+package com.ruoyi.system.domain.communityNews;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 社区资讯收藏对象 comment_stars
+ * 
+ * @author boman
+ * @date 2025-02-28
+ */
+public class CommentStars extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 收藏ID */
+    private Long starsId;
+
+    /** 目标ID */
+    @Excel(name = "目标ID")
+    private Long targetId;
+
+    /** 目标类型(1:社区 2:党建 ) */
+    @Excel(name = "目标类型", readConverterExp = "1=:社区,2=:党建")
+    private String targetType;
+
+    /** 目标标题 */
+    @Excel(name = "目标标题")
+    private String targetTitle;
+
+    /** 用户id */
+    @Excel(name = "用户id")
+    private Long userId;
+
+    /** 用户昵称 */
+    @Excel(name = "用户昵称")
+    private String nickName;
+
+    /** 头像地址 */
+    @Excel(name = "头像地址")
+    private String avatar;
+
+    /** 逻辑删除(Y:已删除,N:未删除) */
+    private String delFlag;
+
+    public void setStarsId(Long starsId) 
+    {
+        this.starsId = starsId;
+    }
+
+    public Long getStarsId() 
+    {
+        return starsId;
+    }
+    public void setTargetId(Long targetId) 
+    {
+        this.targetId = targetId;
+    }
+
+    public Long getTargetId() 
+    {
+        return targetId;
+    }
+    public void setTargetType(String targetType) 
+    {
+        this.targetType = targetType;
+    }
+
+    public String getTargetType() 
+    {
+        return targetType;
+    }
+    public void setTargetTitle(String targetTitle) 
+    {
+        this.targetTitle = targetTitle;
+    }
+
+    public String getTargetTitle() 
+    {
+        return targetTitle;
+    }
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+    public void setNickName(String nickName) 
+    {
+        this.nickName = nickName;
+    }
+
+    public String getNickName() 
+    {
+        return nickName;
+    }
+    public void setAvatar(String avatar) 
+    {
+        this.avatar = avatar;
+    }
+
+    public String getAvatar() 
+    {
+        return avatar;
+    }
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("starsId", getStarsId())
+            .append("targetId", getTargetId())
+            .append("targetType", getTargetType())
+            .append("targetTitle", getTargetTitle())
+            .append("userId", getUserId())
+            .append("nickName", getNickName())
+            .append("avatar", getAvatar())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 316 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/CommunityNews.java

@@ -0,0 +1,316 @@
+package com.ruoyi.system.domain.communityNews;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 社区资讯对象 community_news
+ * 
+ * @author boman
+ * @date 2025-02-25
+ */
+public class CommunityNews extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 社区资讯ID */
+    private Long communityId;
+
+    /** 社区资讯标题 */
+    @Excel(name = "社区资讯标题")
+    private String communityTitle;
+
+    /** 社区资讯类型(1:公告 2:通知 3:资讯) */
+    @Excel(name = "社区资讯类型", readConverterExp = "1=:公告,2=:通知,3=:资讯")
+    private String communityType;
+
+    /** 社区资讯内容 */
+    @Excel(name = "社区资讯内容")
+    private String communityContent;
+
+    /** 社区资讯状态(1正常 2关闭) */
+    @Excel(name = "社区资讯状态", readConverterExp = "1=正常,2=关闭")
+    private String status;
+
+    /** 发布时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "发布时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date publishTime;
+
+    /** 用户id */
+    @Excel(name = "用户id")
+    private Long userId;
+
+    /** 员工管理id */
+    @Excel(name = "员工管理id")
+    private Long staffId;
+
+    /** 员工姓名 */
+    @Excel(name = "员工姓名")
+    private String staffName;
+
+    /** 作者,记录资讯的发布者 */
+    @Excel(name = "作者,记录资讯的发布者")
+    private String author;
+
+    /** 来源,记录资讯的来源(如单位、网站等) */
+    @Excel(name = "来源,记录资讯的来源", readConverterExp = "如=单位、网站等")
+    private String source;
+
+    /** 封面图片,存储图片路径或URL */
+    @Excel(name = "封面图片,存储图片路径或URL")
+    private String coverImage;
+
+    /** 浏览次数,记录资讯被查看的次数 */
+    @Excel(name = "浏览次数,记录资讯被查看的次数")
+    private Long viewCount;
+
+    /** 是否置顶:Y(置顶)、N(不置顶) */
+    @Excel(name = "是否置顶:Y", readConverterExp = "置=顶")
+    private String isTop;
+
+    /** 评论数量 */
+    @Excel(name = "评论数量")
+    private String userComment;
+    /**
+     * 是否评论
+     */
+    private String isComment;
+
+    /** 点赞数量 */
+    @Excel(name = "点赞数量")
+    private String userLikes;
+    /**
+     * 是否点赞 N:未点赞 Y:点赞
+     */
+    private String isLike;
+
+    /** 收藏数量 */
+    @Excel(name = "收藏数量")
+    private String userStars;
+    /**
+     * 是否收藏 N:未收藏 Y:收藏
+     */
+    private String isStar;
+    /**
+     * 是否有未读互动 N:否 Y:是
+     */
+    private String isInteraction;
+
+    public String getIsInteraction() {
+        return isInteraction;
+    }
+
+    public void setIsInteraction(String isInteraction) {
+        this.isInteraction = isInteraction;
+    }
+
+    public String getIsComment() {
+        return isComment;
+    }
+
+    public void setIsComment(String isComment) {
+        this.isComment = isComment;
+    }
+
+    public String getIsLike() {
+        return isLike;
+    }
+
+    public void setIsLike(String isLike) {
+        this.isLike = isLike;
+    }
+
+    public String getIsStar() {
+        return isStar;
+    }
+
+    public void setIsStar(String isStar) {
+        this.isStar = isStar;
+    }
+
+    public void setCommunityId(Long communityId)
+    {
+        this.communityId = communityId;
+    }
+
+    public Long getCommunityId() 
+    {
+        return communityId;
+    }
+    public void setCommunityTitle(String communityTitle) 
+    {
+        this.communityTitle = communityTitle;
+    }
+
+    public String getCommunityTitle() 
+    {
+        return communityTitle;
+    }
+    public void setCommunityType(String communityType) 
+    {
+        this.communityType = communityType;
+    }
+
+    public String getCommunityType() 
+    {
+        return communityType;
+    }
+    public void setCommunityContent(String communityContent) 
+    {
+        this.communityContent = communityContent;
+    }
+
+    public String getCommunityContent() 
+    {
+        return communityContent;
+    }
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+    public void setPublishTime(Date publishTime) 
+    {
+        this.publishTime = publishTime;
+    }
+
+    public Date getPublishTime() 
+    {
+        return publishTime;
+    }
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+    public void setStaffId(Long staffId) 
+    {
+        this.staffId = staffId;
+    }
+
+    public Long getStaffId() 
+    {
+        return staffId;
+    }
+    public void setStaffName(String staffName) 
+    {
+        this.staffName = staffName;
+    }
+
+    public String getStaffName() 
+    {
+        return staffName;
+    }
+    public void setAuthor(String author) 
+    {
+        this.author = author;
+    }
+
+    public String getAuthor() 
+    {
+        return author;
+    }
+    public void setSource(String source) 
+    {
+        this.source = source;
+    }
+
+    public String getSource() 
+    {
+        return source;
+    }
+    public void setCoverImage(String coverImage) 
+    {
+        this.coverImage = coverImage;
+    }
+
+    public String getCoverImage() 
+    {
+        return coverImage;
+    }
+    public void setViewCount(Long viewCount) 
+    {
+        this.viewCount = viewCount;
+    }
+
+    public Long getViewCount() 
+    {
+        return viewCount;
+    }
+    public void setIsTop(String isTop) 
+    {
+        this.isTop = isTop;
+    }
+
+    public String getIsTop() 
+    {
+        return isTop;
+    }
+    public void setUserComment(String userComment) 
+    {
+        this.userComment = userComment;
+    }
+
+    public String getUserComment() 
+    {
+        return userComment;
+    }
+    public void setUserLikes(String userLikes) 
+    {
+        this.userLikes = userLikes;
+    }
+
+    public String getUserLikes() 
+    {
+        return userLikes;
+    }
+    public void setUserStars(String userStars) 
+    {
+        this.userStars = userStars;
+    }
+
+    public String getUserStars() 
+    {
+        return userStars;
+    }
+
+
+    @Override
+    public String toString() {
+        return "CommunityNews{" +
+                "communityId=" + communityId +
+                ", communityTitle='" + communityTitle + '\'' +
+                ", communityType='" + communityType + '\'' +
+                ", communityContent='" + communityContent + '\'' +
+                ", status='" + status + '\'' +
+                ", publishTime=" + publishTime +
+                ", userId=" + userId +
+                ", staffId=" + staffId +
+                ", staffName='" + staffName + '\'' +
+                ", author='" + author + '\'' +
+                ", source='" + source + '\'' +
+                ", coverImage='" + coverImage + '\'' +
+                ", viewCount=" + viewCount +
+                ", isTop='" + isTop + '\'' +
+                ", userComment='" + userComment + '\'' +
+                ", isComment='" + isComment + '\'' +
+                ", userLikes='" + userLikes + '\'' +
+                ", isLike='" + isLike + '\'' +
+                ", userStars='" + userStars + '\'' +
+                ", isStar='" + isStar + '\'' +
+                ", isInteraction='" + isInteraction + '\'' +
+                '}';
+    }
+}

+ 190 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/vo/CommentChildrenVo.java

@@ -0,0 +1,190 @@
+package com.ruoyi.system.domain.communityNews.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 评论前端所需要格式主体的子集,子集里面是回复的人和被回复的人
+ * @Author: tjf
+ * @Date: 2025/2/25 15:55
+ * @Describe:
+ */
+public class CommentChildrenVo implements Serializable {
+    /**
+     * [
+     *         {
+     *           id: 1,
+     *           commentUser: {
+     *             id: 1,
+     *             nickName: "花非花",
+     *             avatar:
+     *               "http://qzapp.qlogo.cn/qzapp/101483738/6637A2B6611592A44A7699D14E13F7F7/50",
+     *           },
+     *           content:
+     *             "<a style='text-decoration:none;color: #409eff ' href='https://blog.csdn.net/qq_40942490?spm=1000.2115.3001.5113'>我的CSDN博客地址</a>[害羞][害羞][害羞]<br/>",
+     *           createDate: "2019-9-23 17:36:02",
+     *           childrenList: [
+     *             {
+     *               id: 2,
+     *               commentUser: {
+     *                 id: 2,
+     *                 nickName: "坏菠萝",
+     *                 avatar: "",
+     *               },
+     *               targetUser: {
+     *                 id: 1,
+     *                 nickName: "花非花",
+     *                 avatar:
+     *                   "http://qzapp.qlogo.cn/qzapp/101483738/6637A2B6611592A44A7699D14E13F7F7/50",
+     *               },
+     *               content: "真的就很棒!很Nice![爱你]",
+     *               createDate: "2019-9-23 17:45:26",
+     *             },
+     *           ],
+     */
+    private static final long serialVersionUID = 1L;
+    /**
+     * 评论主体id
+     */
+    private Long id;
+
+    /**
+     * 回复的人
+     */
+    private CommentUser commentUser;
+
+
+    /**
+     * 被回复的人
+     */
+    private TargetUser targetUser;
+
+    /**
+     * 内容
+     */
+    private String content;
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 点赞数量
+     */
+    private Integer likeCount;
+    /**
+     * 当前人员是否点赞
+     */
+    private String isLike;
+    /**
+     * 是否是二级回复的回复 Y:是 N:否
+     */
+    private String toRoot;
+    /**
+     * 是否是自己的评论 Y:是 N:否
+     */
+    private String isMyself;
+
+    /**
+     * 根评论id 1:根评论 2:子评论
+     */
+    private String isRoot;
+
+    public String getIsRoot() {
+        return isRoot;
+    }
+
+    public void setIsRoot(String isRoot) {
+        this.isRoot = isRoot;
+    }
+
+    public String getIsMyself() {
+        return isMyself;
+    }
+
+    public void setIsMyself(String isMyself) {
+        this.isMyself = isMyself;
+    }
+
+    public String getToRoot() {
+        return toRoot;
+    }
+
+    public void setToRoot(String toRoot) {
+        this.toRoot = toRoot;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public CommentUser getCommentUser() {
+        return commentUser;
+    }
+
+    public void setCommentUser(CommentUser commentUser) {
+        this.commentUser = commentUser;
+    }
+
+    public TargetUser getTargetUser() {
+        return targetUser;
+    }
+
+    public void setTargetUser(TargetUser targetUser) {
+        this.targetUser = targetUser;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getLikeCount() {
+        return likeCount;
+    }
+
+    public void setLikeCount(Integer likeCount) {
+        this.likeCount = likeCount;
+    }
+
+    public String getIsLike() {
+        return isLike;
+    }
+
+    public void setIsLike(String isLike) {
+        this.isLike = isLike;
+    }
+
+
+    @Override
+    public String toString() {
+        return "CommentChildrenVo{" +
+                "id=" + id +
+                ", commentUser=" + commentUser +
+                ", targetUser=" + targetUser +
+                ", content='" + content + '\'' +
+                ", createTime=" + createTime +
+                ", likeCount=" + likeCount +
+                ", isLike='" + isLike + '\'' +
+                ", toRoot='" + toRoot + '\'' +
+                ", isMyself='" + isMyself + '\'' +
+                ", isRoot='" + isRoot + '\'' +
+                '}';
+    }
+}

+ 227 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/vo/CommentIndexShVo.java

@@ -0,0 +1,227 @@
+package com.ruoyi.system.domain.communityNews.vo;
+
+import com.ruoyi.common.annotation.Excel;
+
+import java.io.Serializable;
+
+/**
+ * @Author: tjf
+ * @Date: 2025/2/26 17:19
+ * @Describe:
+ */
+public class CommentIndexShVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** 社区资讯评论ID */
+    private Long commentId;
+
+    /** 社区资讯ID */
+    @Excel(name = "社区资讯ID")
+    private Long communityId;
+
+    /** 社区资讯标题 */
+    @Excel(name = "社区资讯标题")
+    private String communityTitle;
+
+    /** 社区资讯类型(1:公告 2:通知 3:资讯) */
+    @Excel(name = "社区资讯类型", readConverterExp = "1=:公告,2=:通知,3=:资讯")
+    private String communityType;
+
+    /** 根评论id 1:根评论 2:子评论 */
+    @Excel(name = "根评论id 1:根评论 2:子评论")
+    private Integer isRoot;
+
+    /** 父评论id */
+    @Excel(name = "父评论id")
+    private Long parentId;
+
+    /** 用户id */
+    @Excel(name = "用户id")
+    private Long userId;
+
+    /** 用户昵称 */
+    @Excel(name = "用户昵称")
+    private String nickName;
+
+    /** 头像地址 */
+    @Excel(name = "头像地址")
+    private String avatar;
+
+    /** 所回复目标评论的用户id */
+    @Excel(name = "所回复目标评论的用户id")
+    private Long toUserId;
+
+    /** 所回复目标评论的用户昵称 */
+    @Excel(name = "所回复目标评论的用户昵称")
+    private String toNickName;
+
+    /** 所回复目标评论的头像地址 */
+    @Excel(name = "所回复目标评论的头像地址")
+    private String toAvatar;
+
+    /** 内容id */
+    @Excel(name = "内容id")
+    private Long contentId;
+
+    /** 评论内容 */
+    @Excel(name = "评论内容(冗余字段)")
+    private String commentContent;
+
+    /** 状态:1:待审核 2:审核通过 3:审核不通过 4:审核通过后下架 */
+    @Excel(name = "状态:1:待审核 2:审核通过 3:审核不通过 4:审核通过后下架")
+    private String status;
+
+    /** 类型:1:文字 2:图片 */
+    @Excel(name = "类型:1:文字 2:图片")
+    private Integer type;
+
+    public Long getCommentId() {
+        return commentId;
+    }
+
+    public void setCommentId(Long commentId) {
+        this.commentId = commentId;
+    }
+
+    public Long getCommunityId() {
+        return communityId;
+    }
+
+    public void setCommunityId(Long communityId) {
+        this.communityId = communityId;
+    }
+
+    public String getCommunityTitle() {
+        return communityTitle;
+    }
+
+    public void setCommunityTitle(String communityTitle) {
+        this.communityTitle = communityTitle;
+    }
+
+    public String getCommunityType() {
+        return communityType;
+    }
+
+    public void setCommunityType(String communityType) {
+        this.communityType = communityType;
+    }
+
+    public Integer getIsRoot() {
+        return isRoot;
+    }
+
+    public void setIsRoot(Integer isRoot) {
+        this.isRoot = isRoot;
+    }
+
+    public Long getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId) {
+        this.parentId = parentId;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getNickName() {
+        return nickName;
+    }
+
+    public void setNickName(String nickName) {
+        this.nickName = nickName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public Long getToUserId() {
+        return toUserId;
+    }
+
+    public void setToUserId(Long toUserId) {
+        this.toUserId = toUserId;
+    }
+
+    public String getToNickName() {
+        return toNickName;
+    }
+
+    public void setToNickName(String toNickName) {
+        this.toNickName = toNickName;
+    }
+
+    public String getToAvatar() {
+        return toAvatar;
+    }
+
+    public void setToAvatar(String toAvatar) {
+        this.toAvatar = toAvatar;
+    }
+
+    public Long getContentId() {
+        return contentId;
+    }
+
+    public void setContentId(Long contentId) {
+        this.contentId = contentId;
+    }
+
+    public String getCommentContent() {
+        return commentContent;
+    }
+
+    public void setCommentContent(String commentContent) {
+        this.commentContent = commentContent;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    @Override
+    public String toString() {
+        return "CommentIndexShVo{" +
+                "commentId=" + commentId +
+                ", communityId=" + communityId +
+                ", communityTitle='" + communityTitle + '\'' +
+                ", communityType='" + communityType + '\'' +
+                ", isRoot=" + isRoot +
+                ", parentId=" + parentId +
+                ", userId=" + userId +
+                ", nickName='" + nickName + '\'' +
+                ", avatar='" + avatar + '\'' +
+                ", toUserId=" + toUserId +
+                ", toNickName='" + toNickName + '\'' +
+                ", toAvatar='" + toAvatar + '\'' +
+                ", contentId=" + contentId +
+                ", commentContent='" + commentContent + '\'' +
+                ", status='" + status + '\'' +
+                ", type=" + type +
+                '}';
+    }
+}

+ 187 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/vo/CommentIndexVo.java

@@ -0,0 +1,187 @@
+package com.ruoyi.system.domain.communityNews.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 评论前端所需要格式主体
+ * @Author: tjf
+ * @Date: 2025/2/25 15:49
+ * @Describe:
+ */
+public class CommentIndexVo implements Serializable {
+    /**
+     * [
+     *         {
+     *           id: 1,
+     *           commentUser: {
+     *             id: 1,
+     *             nickName: "花非花",
+     *             avatar:
+     *               "http://qzapp.qlogo.cn/qzapp/101483738/6637A2B6611592A44A7699D14E13F7F7/50",
+     *           },
+     *           content:
+     *             "<a style='text-decoration:none;color: #409eff ' href='https://blog.csdn.net/qq_40942490?spm=1000.2115.3001.5113'>我的CSDN博客地址</a>[害羞][害羞][害羞]<br/>",
+     *           createDate: "2019-9-23 17:36:02",
+     *           childrenList: [
+     *             {
+     *               id: 2,
+     *               commentUser: {
+     *                 id: 2,
+     *                 nickName: "坏菠萝",
+     *                 avatar: "",
+     *               },
+     *               targetUser: {
+     *                 id: 1,
+     *                 nickName: "花非花",
+     *                 avatar:
+     *                   "http://qzapp.qlogo.cn/qzapp/101483738/6637A2B6611592A44A7699D14E13F7F7/50",
+     *               },
+     *               content: "真的就很棒!很Nice![爱你]",
+     *               createDate: "2019-9-23 17:45:26",
+     *             },
+     *           ],
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 评论主体id
+     */
+    private Long id;
+    /**
+     * 回复的人
+     */
+    private CommentUser commentUser;
+    /**
+     * 内容
+     */
+    private String content;
+    /**
+     * 点赞数量
+     */
+    private Integer likeCount;
+    /**
+     * 当前人员是否点赞
+     */
+    private String isLike;
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 评论子集
+     */
+    private List<CommentChildrenVo> childrenList;
+    /**
+     * 子集总数
+     */
+    private  Integer childrenListCount;
+
+    /**
+     * 是否是自己的评论
+     */
+    private String isMyself;
+    /**
+     * 根评论id 1:根评论 2:子评论
+     */
+    private String isRoot;
+
+    public String getIsRoot() {
+        return isRoot;
+    }
+
+    public void setIsRoot(String isRoot) {
+        this.isRoot = isRoot;
+    }
+
+    public String getIsMyself() {
+        return isMyself;
+    }
+
+    public void setIsMyself(String isMyself) {
+        this.isMyself = isMyself;
+    }
+
+    public Integer getChildrenListCount() {
+        return childrenListCount;
+    }
+
+    public void setChildrenListCount(Integer childrenListCount) {
+        this.childrenListCount = childrenListCount;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public CommentUser getCommentUser() {
+        return commentUser;
+    }
+
+    public void setCommentUser(CommentUser commentUser) {
+        this.commentUser = commentUser;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getLikeCount() {
+        return likeCount;
+    }
+
+    public void setLikeCount(Integer likeCount) {
+        this.likeCount = likeCount;
+    }
+
+    public String getIsLike() {
+        return isLike;
+    }
+
+    public void setIsLike(String isLike) {
+        this.isLike = isLike;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public List<CommentChildrenVo> getChildrenList() {
+        return childrenList;
+    }
+
+    public void setChildrenList(List<CommentChildrenVo> childrenList) {
+        this.childrenList = childrenList;
+    }
+
+    @Override
+    public String toString() {
+        return "CommentIndexVo{" +
+                "id=" + id +
+                ", commentUser=" + commentUser +
+                ", content='" + content + '\'' +
+                ", likeCount=" + likeCount +
+                ", isLike='" + isLike + '\'' +
+                ", createTime=" + createTime +
+                ", childrenList=" + childrenList +
+                ", childrenListCount=" + childrenListCount +
+                ", isMyself='" + isMyself + '\'' +
+                ", isRoot='" + isRoot + '\'' +
+                '}';
+    }
+}

+ 151 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/vo/CommentInteractionVo.java

@@ -0,0 +1,151 @@
+package com.ruoyi.system.domain.communityNews.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 未读互动接收对象
+ * @Author: tjf
+ * @Date: 2025/3/4 9:09
+ * @Describe:
+ */
+public class CommentInteractionVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 目标id */
+    private Long targetId;
+
+    /** 目标类型(1:资讯评论 2:资讯点赞 3:资讯收藏 4:评论回复 5:回复点赞) */
+    private String targetType;
+    /**
+     * 目标标题
+     */
+    private String targetTitle;
+
+    /** 目标用户id */
+
+    private Long targetUserId;
+    /**
+     * 操作人员id
+     */
+    private Long userId;
+
+    /** 用户昵称 */
+
+    private String nickName;
+
+    /** 头像地址 */
+
+    private String avatar;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+    /**
+     * 1:是新增 2:是删除
+     */
+    private String type;
+
+    /** 社区资讯ID 当是点赞回复的时候有值 */
+    private Long communityId;
+
+
+    public Long getCommunityId() {
+        return communityId;
+    }
+
+    public void setCommunityId(Long communityId) {
+        this.communityId = communityId;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public Long getTargetUserId() {
+        return targetUserId;
+    }
+
+    public void setTargetUserId(Long targetUserId) {
+        this.targetUserId = targetUserId;
+    }
+
+    public Long getTargetId() {
+        return targetId;
+    }
+
+    public void setTargetId(Long targetId) {
+        this.targetId = targetId;
+    }
+
+    public String getTargetType() {
+        return targetType;
+    }
+
+    public void setTargetType(String targetType) {
+        this.targetType = targetType;
+    }
+
+    public String getTargetTitle() {
+        return targetTitle;
+    }
+
+    public void setTargetTitle(String targetTitle) {
+        this.targetTitle = targetTitle;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getNickName() {
+        return nickName;
+    }
+
+    public void setNickName(String nickName) {
+        this.nickName = nickName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    @Override
+    public String toString() {
+        return "CommentInteractionVo{" +
+                "targetId=" + targetId +
+                ", targetType='" + targetType + '\'' +
+                ", targetTitle='" + targetTitle + '\'' +
+                ", targetUserId=" + targetUserId +
+                ", userId=" + userId +
+                ", nickName='" + nickName + '\'' +
+                ", avatar='" + avatar + '\'' +
+                ", createTime=" + createTime +
+                ", type='" + type + '\'' +
+                ", communityId=" + communityId +
+                '}';
+    }
+}

+ 61 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/vo/CommentUser.java

@@ -0,0 +1,61 @@
+package com.ruoyi.system.domain.communityNews.vo;
+
+import java.io.Serializable;
+
+/**
+ * 评论前端所需要格式回复的人
+ * @Author: tjf
+ * @Date: 2025/2/25 15:56
+ * @Describe:
+ */
+public class CommentUser implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 人员的userID
+     */
+    private Long id;
+    /**
+     * 人员名称
+     */
+    private String nickName;
+    /**
+     * 头像
+     */
+    private String avatar;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getNickName() {
+        return nickName;
+    }
+
+    public void setNickName(String nickName) {
+        this.nickName = nickName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    @Override
+    public String toString() {
+        return "CommentUser{" +
+                "id=" + id +
+                ", nickName='" + nickName + '\'' +
+                ", avatar='" + avatar + '\'' +
+                '}';
+    }
+}

+ 58 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/communityNews/vo/TargetUser.java

@@ -0,0 +1,58 @@
+package com.ruoyi.system.domain.communityNews.vo;
+
+import java.io.Serializable;
+
+/**
+ * 评论前端所需要格式被回复的人
+ * @Author: tjf
+ * @Date: 2025/2/25 15:54
+ * @Describe:
+ */
+public class TargetUser implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 人员的userID
+     */
+    private Long id;
+    /**
+     * 人员名称
+     */
+    private String nickName;
+    /**
+     * 头像
+     */
+    private String avatar;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getNickName() {
+        return nickName;
+    }
+
+    public void setNickName(String nickName) {
+        this.nickName = nickName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    @Override
+    public String toString() {
+        return "TargetUser{" +
+                "id=" + id +
+                ", nickName='" + nickName + '\'' +
+                ", avatar='" + avatar + '\'' +
+                '}';
+    }
+}

+ 192 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/complaintSuggestion/ComplaintSuggestion.java

@@ -0,0 +1,192 @@
+package com.ruoyi.system.domain.complaintSuggestion;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.system.domain.suggestionFj.SuggestionFj;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 投诉建议对象 complaint_suggestion
+ * 
+ * @author boman
+ * @date 2025-02-14
+ */
+public class ComplaintSuggestion extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 投诉建议ID */
+    private Long suggestionId;
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /** 投诉建议标题,简要描述投诉或建议内容 */
+    @Excel(name = "投诉建议标题,简要描述投诉或建议内容")
+    private String title;
+
+    /** 投诉建议的具体内容,详细描述问题或建议 */
+    @Excel(name = "投诉建议的具体内容,详细描述问题或建议")
+    private String content;
+
+    /** 投诉照片,存储图片路径或URL(可多张,建议用JSON格式存储) */
+    @Excel(name = "投诉照片,存储图片路径或URL", readConverterExp = "可=多张,建议用JSON格式存储")
+    private String images;
+
+    /** 投诉建议提交时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "投诉建议提交时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date createdTime;
+
+    /** 投诉建议状态:pending(待回复)、replied(已回复) */
+    @Excel(name = "投诉建议状态:pending", readConverterExp = "待=回复")
+    private String status;
+
+    /** 投诉建议的回复内容,记录管理员或相关人员的回复 */
+    @Excel(name = "投诉建议的回复内容,记录管理员或相关人员的回复")
+    private String replyContent;
+
+    /** 投诉建议类型 1投诉建议 2*/
+    @Excel(name = "投诉建议类型")
+    private String type;
+
+    /** 投诉建议是否公开:Y(公开)、N(不公开) */
+    @Excel(name = "投诉建议是否公开", readConverterExp = "Y=公开,N=不公开")
+    private String isPublic;
+
+    /** 是否删除:Y(删除)、N(不删除) */
+    private String isDel;
+    /**
+     * 回复附件表
+     */
+    private List<SuggestionFj> suggestionFjList;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public List<SuggestionFj> getSuggestionFjList() {
+        return suggestionFjList;
+    }
+
+    public void setSuggestionFjList(List<SuggestionFj> suggestionFjList) {
+        this.suggestionFjList = suggestionFjList;
+    }
+
+    public void setSuggestionId(Long suggestionId)
+    {
+        this.suggestionId = suggestionId;
+    }
+
+    public Long getSuggestionId() 
+    {
+        return suggestionId;
+    }
+    public void setTitle(String title) 
+    {
+        this.title = title;
+    }
+
+    public String getTitle() 
+    {
+        return title;
+    }
+    public void setContent(String content) 
+    {
+        this.content = content;
+    }
+
+    public String getContent() 
+    {
+        return content;
+    }
+    public void setImages(String images) 
+    {
+        this.images = images;
+    }
+
+    public String getImages() 
+    {
+        return images;
+    }
+    public void setCreatedTime(Date createdTime) 
+    {
+        this.createdTime = createdTime;
+    }
+
+    public Date getCreatedTime() 
+    {
+        return createdTime;
+    }
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+    public void setReplyContent(String replyContent) 
+    {
+        this.replyContent = replyContent;
+    }
+
+    public String getReplyContent() 
+    {
+        return replyContent;
+    }
+    public void setType(String type) 
+    {
+        this.type = type;
+    }
+
+    public String getType() 
+    {
+        return type;
+    }
+    public void setIsPublic(String isPublic) 
+    {
+        this.isPublic = isPublic;
+    }
+
+    public String getIsPublic() 
+    {
+        return isPublic;
+    }
+    public void setIsDel(String isDel) 
+    {
+        this.isDel = isDel;
+    }
+
+    public String getIsDel() 
+    {
+        return isDel;
+    }
+
+    @Override
+    public String toString() {
+        return "ComplaintSuggestion{" +
+                "suggestionId=" + suggestionId +
+                ", userId=" + userId +
+                ", title='" + title + '\'' +
+                ", content='" + content + '\'' +
+                ", images='" + images + '\'' +
+                ", createdTime=" + createdTime +
+                ", status='" + status + '\'' +
+                ", replyContent='" + replyContent + '\'' +
+                ", type='" + type + '\'' +
+                ", isPublic='" + isPublic + '\'' +
+                ", isDel='" + isDel + '\'' +
+                ", suggestionFjList=" + suggestionFjList +
+                '}';
+    }
+}

+ 292 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/houseInfo/HouseInfo.java

@@ -0,0 +1,292 @@
+package com.ruoyi.system.domain.houseInfo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.annotation.Excels;
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.core.domain.entity.ResidentInfo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 房屋信息对象 house_info
+ * 
+ * @author boman
+ * @date 2025-02-20
+ */
+public class HouseInfo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 房屋信息主键,唯一标识每条房屋信息 */
+    private Long houseId;
+
+    /** 权利人姓名 */
+    @Excel(name = "权利人姓名")
+    private String ownerName;
+
+    /** 房屋坐落位置 */
+    @Excel(name = "房屋坐落位置")
+    private String location;
+
+    /** 权利类型,如所有权、使用权等 */
+    @Excel(name = "权利类型,如所有权、使用权等")
+    private String rightType;
+
+    /** 房屋面积,单位为平方米 */
+    @Excel(name = "房屋面积,单位为平方米")
+    private BigDecimal area;
+
+    /** 房屋相关的字第号 */
+    @Excel(name = "房屋相关的字第号")
+    private String documentNumber;
+
+    /** 不动产单元号,唯一标识不动产单元 */
+    @Excel(name = "不动产单元号,唯一标识不动产单元")
+    private String propertyUnitNumber;
+
+    /** 房屋的共有情况,如共有比例等 */
+    @Excel(name = "房屋的共有情况,如共有比例等")
+    private String coOwnership;
+
+    /** 房屋用途,如住宅、商业等 */
+    @Excel(name = "房屋用途,如住宅、商业等")
+    private String usageType;
+
+    /** 房屋使用期限 */
+    @Excel(name = "房屋使用期限")
+    private String usagePeriod;
+
+    /** 房屋登记日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "房屋登记日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date registrationDate;
+
+    /** 共有人姓名,多个共有人可以用逗号分隔 */
+    @Excel(name = "共有人姓名,多个共有人可以用逗号分隔")
+    private String coOwner;
+
+    /** 房屋的详细门牌号 */
+    @Excel(name = "房屋的详细门牌号")
+    private String detailedAddress;
+
+    /** 是否有车位,Y表示有,N表示无 */
+    @Excel(name = "是否有车位,Y表示有,N表示无")
+    private String hasParkingSpace;
+    /**
+     * 车位号
+     */
+    @Excel(name = "车位号")
+    private String parkingNumber;
+
+    /** 房屋所在小区名称 */
+    @Excel(name = "房屋所在小区名称")
+    private String communityName;
+
+    /** 房屋状态:1-自住,2-出租,3-空闲,4-待售 */
+    @Excel(name = "房屋状态:1-自住,2-出租,3-空闲,4-待售")
+    private Integer houseStatus;
+
+    /** 房屋住户信息 */
+    @Excels({
+            @Excel(name = "居住人员的详细门牌号", targetAttr = "detailedAddress"),
+            @Excel(name = "居住人员姓名", targetAttr = "residentName"),
+            @Excel(name = "居住人员身份证号码", targetAttr = "residentIdCard"),
+            @Excel(name = "居住人员出生日期", targetAttr = "residentBirthday"),
+            @Excel(name = "居住人员手机号", targetAttr = "residentPhone"),
+            @Excel(name = "居住人员性别", targetAttr = "residentGender", readConverterExp = "男=1,女=2"),
+            @Excel(name = "居住人员与户主的关系", targetAttr = "residentRelationship"),
+            @Excel(name = "是否是户主", targetAttr = "isHouseholder", readConverterExp = "是=Y,否=N"),
+            @Excel(name = "是否是租户", targetAttr = "isTenant", readConverterExp = "是=Y,否=N"),
+            @Excel(name = "居住人员工作单位", targetAttr = "residentEmployer"),
+            @Excel(name = "居住人员面貌", targetAttr = "residentAppearance")
+    })
+    private List<ResidentInfo> residentInfoList;
+
+    public String getParkingNumber() {
+        return parkingNumber;
+    }
+
+    public void setParkingNumber(String parkingNumber) {
+        this.parkingNumber = parkingNumber;
+    }
+
+    public List<ResidentInfo> getResidentInfoList() {
+        return residentInfoList;
+    }
+
+    public void setResidentInfoList(List<ResidentInfo> residentInfoList) {
+        this.residentInfoList = residentInfoList;
+    }
+
+    public void setHouseId(Long houseId)
+    {
+        this.houseId = houseId;
+    }
+
+    public Long getHouseId() 
+    {
+        return houseId;
+    }
+    public void setOwnerName(String ownerName) 
+    {
+        this.ownerName = ownerName;
+    }
+
+    public String getOwnerName() 
+    {
+        return ownerName;
+    }
+    public void setLocation(String location) 
+    {
+        this.location = location;
+    }
+
+    public String getLocation() 
+    {
+        return location;
+    }
+    public void setRightType(String rightType) 
+    {
+        this.rightType = rightType;
+    }
+
+    public String getRightType() 
+    {
+        return rightType;
+    }
+    public void setArea(BigDecimal area) 
+    {
+        this.area = area;
+    }
+
+    public BigDecimal getArea() 
+    {
+        return area;
+    }
+    public void setDocumentNumber(String documentNumber) 
+    {
+        this.documentNumber = documentNumber;
+    }
+
+    public String getDocumentNumber() 
+    {
+        return documentNumber;
+    }
+    public void setPropertyUnitNumber(String propertyUnitNumber) 
+    {
+        this.propertyUnitNumber = propertyUnitNumber;
+    }
+
+    public String getPropertyUnitNumber() 
+    {
+        return propertyUnitNumber;
+    }
+    public void setCoOwnership(String coOwnership) 
+    {
+        this.coOwnership = coOwnership;
+    }
+
+    public String getCoOwnership() 
+    {
+        return coOwnership;
+    }
+
+    public String getUsageType() {
+        return usageType;
+    }
+
+    public void setUsageType(String usageType) {
+        this.usageType = usageType;
+    }
+
+    public void setUsagePeriod(String usagePeriod)
+    {
+        this.usagePeriod = usagePeriod;
+    }
+
+    public String getUsagePeriod() 
+    {
+        return usagePeriod;
+    }
+    public void setRegistrationDate(Date registrationDate) 
+    {
+        this.registrationDate = registrationDate;
+    }
+
+    public Date getRegistrationDate() 
+    {
+        return registrationDate;
+    }
+    public void setCoOwner(String coOwner) 
+    {
+        this.coOwner = coOwner;
+    }
+
+    public String getCoOwner() 
+    {
+        return coOwner;
+    }
+    public void setDetailedAddress(String detailedAddress) 
+    {
+        this.detailedAddress = detailedAddress;
+    }
+
+    public String getDetailedAddress() 
+    {
+        return detailedAddress;
+    }
+    public void setHasParkingSpace(String hasParkingSpace) 
+    {
+        this.hasParkingSpace = hasParkingSpace;
+    }
+
+    public String getHasParkingSpace() 
+    {
+        return hasParkingSpace;
+    }
+    public void setCommunityName(String communityName) 
+    {
+        this.communityName = communityName;
+    }
+
+    public String getCommunityName() 
+    {
+        return communityName;
+    }
+    public void setHouseStatus(Integer houseStatus) 
+    {
+        this.houseStatus = houseStatus;
+    }
+
+    public Integer getHouseStatus() 
+    {
+        return houseStatus;
+    }
+
+    @Override
+    public String toString() {
+        return "HouseInfo{" +
+                "houseId=" + houseId +
+                ", ownerName='" + ownerName + '\'' +
+                ", location='" + location + '\'' +
+                ", rightType='" + rightType + '\'' +
+                ", area=" + area +
+                ", documentNumber='" + documentNumber + '\'' +
+                ", propertyUnitNumber='" + propertyUnitNumber + '\'' +
+                ", coOwnership='" + coOwnership + '\'' +
+                ", usageType='" + usageType + '\'' +
+                ", usagePeriod='" + usagePeriod + '\'' +
+                ", registrationDate=" + registrationDate +
+                ", coOwner='" + coOwner + '\'' +
+                ", detailedAddress='" + detailedAddress + '\'' +
+                ", hasParkingSpace='" + hasParkingSpace + '\'' +
+                ", parkingNumber='" + parkingNumber + '\'' +
+                ", communityName='" + communityName + '\'' +
+                ", houseStatus=" + houseStatus +
+                ", residentInfoList=" + residentInfoList +
+                '}';
+    }
+}

+ 267 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/houseInfo/PropertyFee.java

@@ -0,0 +1,267 @@
+package com.ruoyi.system.domain.houseInfo;
+
+import java.math.BigDecimal;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 物业费管理对象 property_fee
+ * 
+ * @author boman
+ * @date 2025-03-03
+ */
+public class PropertyFee extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 物业费信息主键 */
+    private Long propertyId;
+
+    /** 房屋信息主键id */
+    @Excel(name = "房屋信息主键id")
+    private Long houseId;
+
+    /** 权利人姓名 */
+    @Excel(name = "权利人姓名")
+    private String ownerName;
+
+    /** 房屋坐落位置 */
+    @Excel(name = "房屋坐落位置")
+    private String location;
+
+    /** 房屋面积,单位为平方米 */
+    @Excel(name = "房屋面积,单位为平方米")
+    private BigDecimal area;
+
+    /** 不动产单元号,唯一标识不动产单元 */
+    @Excel(name = "不动产单元号,唯一标识不动产单元")
+    private String propertyUnitNumber;
+
+    /** 房屋的详细门牌号 */
+    @Excel(name = "房屋的详细门牌号")
+    private String detailedAddress;
+
+    /** 是否有车位,Y表示有,N表示无 */
+    @Excel(name = "是否有车位,Y表示有,N表示无")
+    private String hasParkingSpace;
+
+    /** 车位编号 */
+    @Excel(name = "车位编号")
+    private String parkingNumber;
+
+    /** 房屋所在小区名称 */
+    @Excel(name = "房屋所在小区名称")
+    private String communityName;
+
+    /** 物业费缴费年份 */
+    @Excel(name = "物业费缴费年份")
+    private String year;
+
+    /** 业主缴费时间 */
+    @Excel(name = "业主缴费时间")
+    private String time;
+
+    /** 应缴物业费用 */
+    @Excel(name = "应缴物业费用")
+    private BigDecimal tenementExpense;
+
+    /** 应缴车位费用 */
+    @Excel(name = "应缴车位费用")
+    private BigDecimal parkingExpense;
+
+    /** 应缴能耗费用 */
+    @Excel(name = "应缴能耗费用")
+    private BigDecimal energyExpense;
+
+    /** 应缴总费用 */
+    @Excel(name = "应缴总费用")
+    private BigDecimal totalExpense;
+
+    /** 是否缴费,Y表示有,N表示无 */
+    @Excel(name = "是否缴费,Y表示有,N表示无")
+    private String isExpense;
+
+    public void setPropertyId(Long propertyId) 
+    {
+        this.propertyId = propertyId;
+    }
+
+    public Long getPropertyId() 
+    {
+        return propertyId;
+    }
+    public void setHouseId(Long houseId) 
+    {
+        this.houseId = houseId;
+    }
+
+    public Long getHouseId() 
+    {
+        return houseId;
+    }
+    public void setOwnerName(String ownerName) 
+    {
+        this.ownerName = ownerName;
+    }
+
+    public String getOwnerName() 
+    {
+        return ownerName;
+    }
+    public void setLocation(String location) 
+    {
+        this.location = location;
+    }
+
+    public String getLocation() 
+    {
+        return location;
+    }
+    public void setArea(BigDecimal area) 
+    {
+        this.area = area;
+    }
+
+    public BigDecimal getArea() 
+    {
+        return area;
+    }
+    public void setPropertyUnitNumber(String propertyUnitNumber) 
+    {
+        this.propertyUnitNumber = propertyUnitNumber;
+    }
+
+    public String getPropertyUnitNumber() 
+    {
+        return propertyUnitNumber;
+    }
+    public void setDetailedAddress(String detailedAddress) 
+    {
+        this.detailedAddress = detailedAddress;
+    }
+
+    public String getDetailedAddress() 
+    {
+        return detailedAddress;
+    }
+    public void setHasParkingSpace(String hasParkingSpace) 
+    {
+        this.hasParkingSpace = hasParkingSpace;
+    }
+
+    public String getHasParkingSpace() 
+    {
+        return hasParkingSpace;
+    }
+    public void setParkingNumber(String parkingNumber) 
+    {
+        this.parkingNumber = parkingNumber;
+    }
+
+    public String getParkingNumber() 
+    {
+        return parkingNumber;
+    }
+    public void setCommunityName(String communityName) 
+    {
+        this.communityName = communityName;
+    }
+
+    public String getCommunityName() 
+    {
+        return communityName;
+    }
+    public void setYear(String year) 
+    {
+        this.year = year;
+    }
+
+    public String getYear() 
+    {
+        return year;
+    }
+    public void setTime(String time) 
+    {
+        this.time = time;
+    }
+
+    public String getTime() 
+    {
+        return time;
+    }
+    public void setTenementExpense(BigDecimal tenementExpense) 
+    {
+        this.tenementExpense = tenementExpense;
+    }
+
+    public BigDecimal getTenementExpense() 
+    {
+        return tenementExpense;
+    }
+    public void setParkingExpense(BigDecimal parkingExpense) 
+    {
+        this.parkingExpense = parkingExpense;
+    }
+
+    public BigDecimal getParkingExpense() 
+    {
+        return parkingExpense;
+    }
+    public void setEnergyExpense(BigDecimal energyExpense) 
+    {
+        this.energyExpense = energyExpense;
+    }
+
+    public BigDecimal getEnergyExpense() 
+    {
+        return energyExpense;
+    }
+    public void setTotalExpense(BigDecimal totalExpense) 
+    {
+        this.totalExpense = totalExpense;
+    }
+
+    public BigDecimal getTotalExpense() 
+    {
+        return totalExpense;
+    }
+    public void setIsExpense(String isExpense) 
+    {
+        this.isExpense = isExpense;
+    }
+
+    public String getIsExpense() 
+    {
+        return isExpense;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("propertyId", getPropertyId())
+            .append("houseId", getHouseId())
+            .append("ownerName", getOwnerName())
+            .append("location", getLocation())
+            .append("area", getArea())
+            .append("propertyUnitNumber", getPropertyUnitNumber())
+            .append("detailedAddress", getDetailedAddress())
+            .append("hasParkingSpace", getHasParkingSpace())
+            .append("parkingNumber", getParkingNumber())
+            .append("communityName", getCommunityName())
+            .append("year", getYear())
+            .append("time", getTime())
+            .append("tenementExpense", getTenementExpense())
+            .append("parkingExpense", getParkingExpense())
+            .append("energyExpense", getEnergyExpense())
+            .append("totalExpense", getTotalExpense())
+            .append("isExpense", getIsExpense())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 99 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/houseInfo/PropertySettings.java

@@ -0,0 +1,99 @@
+package com.ruoyi.system.domain.houseInfo;
+
+import java.math.BigDecimal;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 物业费设置对象 property_settings
+ * 
+ * @author boman
+ * @date 2025-03-11
+ */
+public class PropertySettings extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 物业费信息主键 */
+    private Long settingsId;
+
+    /** 应缴物业费用 */
+    @Excel(name = "应缴物业费用")
+    private BigDecimal tenementExpense;
+
+    /** 应缴车位费用 */
+    @Excel(name = "应缴车位费用")
+    private BigDecimal parkingExpense;
+
+    /** 应缴能耗费用 */
+    @Excel(name = "应缴能耗费用")
+    private BigDecimal energyExpense;
+
+    /** 是否删除,Y表示删除,N表示有效 */
+    @Excel(name = "是否删除,Y表示删除,N表示有效")
+    private String isDel;
+
+    public void setSettingsId(Long settingsId) 
+    {
+        this.settingsId = settingsId;
+    }
+
+    public Long getSettingsId() 
+    {
+        return settingsId;
+    }
+    public void setTenementExpense(BigDecimal tenementExpense) 
+    {
+        this.tenementExpense = tenementExpense;
+    }
+
+    public BigDecimal getTenementExpense() 
+    {
+        return tenementExpense;
+    }
+    public void setParkingExpense(BigDecimal parkingExpense) 
+    {
+        this.parkingExpense = parkingExpense;
+    }
+
+    public BigDecimal getParkingExpense() 
+    {
+        return parkingExpense;
+    }
+    public void setEnergyExpense(BigDecimal energyExpense) 
+    {
+        this.energyExpense = energyExpense;
+    }
+
+    public BigDecimal getEnergyExpense() 
+    {
+        return energyExpense;
+    }
+    public void setIsDel(String isDel) 
+    {
+        this.isDel = isDel;
+    }
+
+    public String getIsDel() 
+    {
+        return isDel;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("settingsId", getSettingsId())
+            .append("tenementExpense", getTenementExpense())
+            .append("parkingExpense", getParkingExpense())
+            .append("energyExpense", getEnergyExpense())
+            .append("isDel", getIsDel())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 165 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/illegalParking/IllegalParking.java

@@ -0,0 +1,165 @@
+package com.ruoyi.system.domain.illegalParking;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.List;
+
+/**
+ * 违章停车登记对象 illegal_parking
+ * 
+ * @author boman
+ * @date 2025-02-14
+ */
+public class IllegalParking extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 违章停车登记主键 */
+    private Long illegalParkingId;
+
+    /** 车牌号码 */
+    @Excel(name = "车牌号码")
+    private String plateNumber;
+
+    /** 门户id */
+    @Excel(name = "门户id")
+    private Long portalId;
+
+    /** 关联门户 */
+    @Excel(name = "关联门户")
+    private String visitPortal;
+
+    /** 手机号码 */
+    @Excel(name = "手机号码")
+    private String mobileNumber;
+
+    /** 人员姓名 */
+    @Excel(name = "人员姓名")
+    private String visitName;
+
+    /** 违章照片 */
+    @Excel(name = "违章照片")
+    private String illegalPhoto;
+    /** 车辆类型 */
+    @Excel(name = "车辆类型")
+    private String carType;
+
+    /** 是否黑名单 N:否 Y:是 */
+    @Excel(name = "是否黑名单 N:否 Y:是")
+    private String isBlack;
+    /**
+     * 违停记录子集
+     */
+    private List<IllegalParking> children;
+
+    public List<IllegalParking> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<IllegalParking> children) {
+        this.children = children;
+    }
+
+    public String getCarType() {
+        return carType;
+    }
+
+    public void setCarType(String carType) {
+        this.carType = carType;
+    }
+
+    public void setIllegalParkingId(Long illegalParkingId)
+    {
+        this.illegalParkingId = illegalParkingId;
+    }
+
+    public Long getIllegalParkingId() 
+    {
+        return illegalParkingId;
+    }
+    public void setPlateNumber(String plateNumber) 
+    {
+        this.plateNumber = plateNumber;
+    }
+
+    public String getPlateNumber() 
+    {
+        return plateNumber;
+    }
+    public void setPortalId(Long portalId) 
+    {
+        this.portalId = portalId;
+    }
+
+    public Long getPortalId() 
+    {
+        return portalId;
+    }
+    public void setVisitPortal(String visitPortal) 
+    {
+        this.visitPortal = visitPortal;
+    }
+
+    public String getVisitPortal() 
+    {
+        return visitPortal;
+    }
+    public void setMobileNumber(String mobileNumber) 
+    {
+        this.mobileNumber = mobileNumber;
+    }
+
+    public String getMobileNumber() 
+    {
+        return mobileNumber;
+    }
+    public void setVisitName(String visitName) 
+    {
+        this.visitName = visitName;
+    }
+
+    public String getVisitName() 
+    {
+        return visitName;
+    }
+    public void setIllegalPhoto(String illegalPhoto) 
+    {
+        this.illegalPhoto = illegalPhoto;
+    }
+
+    public String getIllegalPhoto() 
+    {
+        return illegalPhoto;
+    }
+    public void setIsBlack(String isBlack) 
+    {
+        this.isBlack = isBlack;
+    }
+
+    public String getIsBlack() 
+    {
+        return isBlack;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("illegalParkingId", getIllegalParkingId())
+            .append("plateNumber", getPlateNumber())
+            .append("portalId", getPortalId())
+            .append("visitPortal", getVisitPortal())
+            .append("mobileNumber", getMobileNumber())
+            .append("visitName", getVisitName())
+            .append("illegalPhoto", getIllegalPhoto())
+            .append("isBlack", getIsBlack())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 203 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/partyNews/PartyNews.java

@@ -0,0 +1,203 @@
+package com.ruoyi.system.domain.partyNews;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 党建资讯对象 party_news
+ * 
+ * @author boman
+ * @date 2025-02-14
+ */
+public class PartyNews extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 资讯ID */
+    private Long partyId;
+
+    /** 党建资讯标题 */
+    @Excel(name = "党建资讯标题")
+    private String partyTitle;
+
+    /** 党建资讯类型(1:党建活动 2:党建学习3:党建知识) */
+    @Excel(name = "党建资讯类型", readConverterExp = "1=:党建活动,2=:党建学习3:党建知识")
+    private String partyType;
+
+    /** 党建资讯内容 */
+    @Excel(name = "党建资讯内容")
+    private String partyContent;
+
+    /** 党建资讯状态(1正常 2关闭) */
+    @Excel(name = "党建资讯状态", readConverterExp = "1=正常,2=关闭")
+    private String status;
+
+    /** 发布时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "发布时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date publishTime;
+
+    /** 作者,记录资讯的发布者 */
+    @Excel(name = "作者,记录资讯的发布者")
+    private String author;
+
+    /** 来源,记录资讯的来源(如单位、网站等) */
+    @Excel(name = "来源,记录资讯的来源", readConverterExp = "如=单位、网站等")
+    private String source;
+
+    /** 封面图片,存储图片路径或URL */
+    @Excel(name = "封面图片,存储图片路径或URL")
+    private String coverImage;
+
+    /** 浏览次数,记录资讯被查看的次数 */
+    @Excel(name = "浏览次数,记录资讯被查看的次数")
+    private Long viewCount;
+
+    /** 是否置顶:Y(置顶)、N(不置顶) */
+    @Excel(name = "是否置顶:Y", readConverterExp = "置=顶")
+    private String isTop;
+    /** 是否收藏:Y(收藏)、N(不收藏) */
+    private String isStars;
+    /**
+     * 收藏数量
+     */
+    private Integer starsCount;
+
+    public Integer getStarsCount() {
+        return starsCount;
+    }
+
+    public void setStarsCount(Integer starsCount) {
+        this.starsCount = starsCount;
+    }
+
+    public String getIsStars() {
+        return isStars;
+    }
+
+    public void setIsStars(String isStars) {
+        this.isStars = isStars;
+    }
+
+    public void setPartyId(Long partyId)
+    {
+        this.partyId = partyId;
+    }
+
+    public Long getPartyId() 
+    {
+        return partyId;
+    }
+    public void setPartyTitle(String partyTitle) 
+    {
+        this.partyTitle = partyTitle;
+    }
+
+    public String getPartyTitle() 
+    {
+        return partyTitle;
+    }
+    public void setPartyType(String partyType) 
+    {
+        this.partyType = partyType;
+    }
+
+    public String getPartyType() 
+    {
+        return partyType;
+    }
+    public void setPartyContent(String partyContent) 
+    {
+        this.partyContent = partyContent;
+    }
+
+    public String getPartyContent() 
+    {
+        return partyContent;
+    }
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+    public void setPublishTime(Date publishTime) 
+    {
+        this.publishTime = publishTime;
+    }
+
+    public Date getPublishTime() 
+    {
+        return publishTime;
+    }
+    public void setAuthor(String author) 
+    {
+        this.author = author;
+    }
+
+    public String getAuthor() 
+    {
+        return author;
+    }
+    public void setSource(String source) 
+    {
+        this.source = source;
+    }
+
+    public String getSource() 
+    {
+        return source;
+    }
+    public void setCoverImage(String coverImage) 
+    {
+        this.coverImage = coverImage;
+    }
+
+    public String getCoverImage() 
+    {
+        return coverImage;
+    }
+    public void setViewCount(Long viewCount) 
+    {
+        this.viewCount = viewCount;
+    }
+
+    public Long getViewCount() 
+    {
+        return viewCount;
+    }
+    public void setIsTop(String isTop) 
+    {
+        this.isTop = isTop;
+    }
+
+    public String getIsTop() 
+    {
+        return isTop;
+    }
+
+    @Override
+    public String toString() {
+        return "PartyNews{" +
+                "partyId=" + partyId +
+                ", partyTitle='" + partyTitle + '\'' +
+                ", partyType='" + partyType + '\'' +
+                ", partyContent='" + partyContent + '\'' +
+                ", status='" + status + '\'' +
+                ", publishTime=" + publishTime +
+                ", author='" + author + '\'' +
+                ", source='" + source + '\'' +
+                ", coverImage='" + coverImage + '\'' +
+                ", viewCount=" + viewCount +
+                ", isTop='" + isTop + '\'' +
+                ", isStars='" + isStars + '\'' +
+                ", starsCount=" + starsCount +
+                '}';
+    }
+}

+ 288 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/propertyRepair/PropertyRepair.java

@@ -0,0 +1,288 @@
+package com.ruoyi.system.domain.propertyRepair;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 物业报修对象 property_repair
+ * 
+ * @author boman
+ * @date 2025-02-14
+ */
+public class PropertyRepair extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 报修ID */
+    private Long repairId;
+    private Long userId;
+
+    /** 门户id */
+    @Excel(name = "门户id")
+    private Long portalId;
+
+    /** 详细门牌号 */
+    @Excel(name = "详细门牌号")
+    private String houseAddress;
+
+    /** 报修时间,记录报修提交的时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "报修时间,记录报修提交的时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date repairTime;
+
+    /** 报修用户手机号码 */
+    @Excel(name = "报修用户手机号码")
+    private String phoneNumber;
+
+    /** 报修标题,简要描述报修内容 */
+    @Excel(name = "报修标题,简要描述报修内容")
+    private String repairTitle;
+
+    /** 报修类别,如水电维修、门窗维修等 */
+    @Excel(name = "报修类别,如水电维修、门窗维修等")
+    private String maintenanceCategory;
+
+    /** 报修详情,详细描述报修问题 */
+    @Excel(name = "报修详情,详细描述报修问题")
+    private String repairDetails;
+
+    /** 报修详情图片,存储图片路径或URL */
+    @Excel(name = "报修详情图片,存储图片路径或URL")
+    private String repairImages;
+
+    /** 报修状态:1:待分派 2:待上门 3:处理中 4:已完成 */
+    @Excel(name = "报修状态:1:待分派 2:待上门 3:处理中 4:已完成")
+    private String repairStatus;
+
+    /** 维修人员姓名 */
+    @Excel(name = "维修人员姓名")
+    private String staffName;
+
+    /** 维修人员ID */
+    @Excel(name = "维修人员ID")
+    private Long staffId;
+    /** 维修人员手机号 */
+    @Excel(name = "维修人员手机号")
+    private String staffPhone;
+
+    /** 上门时间,记录维修人员上门的时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "上门时间,记录维修人员上门的时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date visitTime;
+
+    /** 上门拍照,存储图片路径或URL */
+    @Excel(name = "上门拍照,存储图片路径或URL")
+    private String visitPhoto;
+
+    /** 维修结束时间,记录维修完成的时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "维修结束时间,记录维修完成的时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date completionTime;
+
+    /** 维修结束拍照,存储图片路径或URL */
+    @Excel(name = "维修结束拍照,存储图片路径或URL")
+    private String completionPhoto;
+
+    /** 维修详情,记录维修的具体过程和结果 */
+    @Excel(name = "维修详情,记录维修的具体过程和结果")
+    private String repairCompletionDetails;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public void setRepairId(Long repairId)
+    {
+        this.repairId = repairId;
+    }
+
+    public Long getRepairId() 
+    {
+        return repairId;
+    }
+    public void setPortalId(Long portalId) 
+    {
+        this.portalId = portalId;
+    }
+
+    public Long getPortalId() 
+    {
+        return portalId;
+    }
+    public void setHouseAddress(String houseAddress) 
+    {
+        this.houseAddress = houseAddress;
+    }
+
+    public String getHouseAddress() 
+    {
+        return houseAddress;
+    }
+    public void setRepairTime(Date repairTime) 
+    {
+        this.repairTime = repairTime;
+    }
+
+    public Date getRepairTime() 
+    {
+        return repairTime;
+    }
+    public void setPhoneNumber(String phoneNumber) 
+    {
+        this.phoneNumber = phoneNumber;
+    }
+
+    public String getPhoneNumber() 
+    {
+        return phoneNumber;
+    }
+    public void setRepairTitle(String repairTitle) 
+    {
+        this.repairTitle = repairTitle;
+    }
+
+    public String getRepairTitle() 
+    {
+        return repairTitle;
+    }
+    public void setMaintenanceCategory(String maintenanceCategory) 
+    {
+        this.maintenanceCategory = maintenanceCategory;
+    }
+
+    public String getMaintenanceCategory() 
+    {
+        return maintenanceCategory;
+    }
+    public void setRepairDetails(String repairDetails) 
+    {
+        this.repairDetails = repairDetails;
+    }
+
+    public String getRepairDetails() 
+    {
+        return repairDetails;
+    }
+    public void setRepairImages(String repairImages) 
+    {
+        this.repairImages = repairImages;
+    }
+
+    public String getRepairImages() 
+    {
+        return repairImages;
+    }
+    public void setRepairStatus(String repairStatus) 
+    {
+        this.repairStatus = repairStatus;
+    }
+
+    public String getRepairStatus() 
+    {
+        return repairStatus;
+    }
+    public void setStaffName(String staffName) 
+    {
+        this.staffName = staffName;
+    }
+
+    public String getStaffName() 
+    {
+        return staffName;
+    }
+    public void setStaffId(Long staffId) 
+    {
+        this.staffId = staffId;
+    }
+
+    public Long getStaffId() 
+    {
+        return staffId;
+    }
+    public void setStaffPhone(String staffPhone) 
+    {
+        this.staffPhone = staffPhone;
+    }
+
+    public String getStaffPhone() 
+    {
+        return staffPhone;
+    }
+    public void setVisitTime(Date visitTime) 
+    {
+        this.visitTime = visitTime;
+    }
+
+    public Date getVisitTime() 
+    {
+        return visitTime;
+    }
+    public void setVisitPhoto(String visitPhoto) 
+    {
+        this.visitPhoto = visitPhoto;
+    }
+
+    public String getVisitPhoto() 
+    {
+        return visitPhoto;
+    }
+    public void setCompletionTime(Date completionTime) 
+    {
+        this.completionTime = completionTime;
+    }
+
+    public Date getCompletionTime() 
+    {
+        return completionTime;
+    }
+    public void setCompletionPhoto(String completionPhoto) 
+    {
+        this.completionPhoto = completionPhoto;
+    }
+
+    public String getCompletionPhoto() 
+    {
+        return completionPhoto;
+    }
+    public void setRepairCompletionDetails(String repairCompletionDetails) 
+    {
+        this.repairCompletionDetails = repairCompletionDetails;
+    }
+
+    public String getRepairCompletionDetails() 
+    {
+        return repairCompletionDetails;
+    }
+
+    @Override
+    public String toString() {
+        return "PropertyRepair{" +
+                "repairId=" + repairId +
+                ", userId=" + userId +
+                ", portalId=" + portalId +
+                ", houseAddress='" + houseAddress + '\'' +
+                ", repairTime=" + repairTime +
+                ", phoneNumber='" + phoneNumber + '\'' +
+                ", repairTitle='" + repairTitle + '\'' +
+                ", maintenanceCategory='" + maintenanceCategory + '\'' +
+                ", repairDetails='" + repairDetails + '\'' +
+                ", repairImages='" + repairImages + '\'' +
+                ", repairStatus='" + repairStatus + '\'' +
+                ", staffName='" + staffName + '\'' +
+                ", staffId=" + staffId +
+                ", staffPhone='" + staffPhone + '\'' +
+                ", visitTime=" + visitTime +
+                ", visitPhoto='" + visitPhoto + '\'' +
+                ", completionTime=" + completionTime +
+                ", completionPhoto='" + completionPhoto + '\'' +
+                ", repairCompletionDetails='" + repairCompletionDetails + '\'' +
+                '}';
+    }
+}

+ 241 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/proprietorCar/ProprietorCar.java

@@ -0,0 +1,241 @@
+package com.ruoyi.system.domain.proprietorCar;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 业主车辆管理对象 proprietor_car
+ * 
+ * @author boman
+ * @date 2025-02-20
+ */
+public class ProprietorCar extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 业主车辆主键 */
+    private Long carId;
+
+    /** 房屋信息id */
+    @Excel(name = "房屋信息id")
+    private Long houseId;
+
+    /** 房屋的详细门牌号 */
+    @Excel(name = "房屋的详细门牌号")
+    private String detailedAddress;
+
+    /** 业主id */
+    @Excel(name = "业主id")
+    private Long userId;
+    /** 居住人员表id */
+    private Long residentId;
+
+    /** 业主姓名 */
+    @Excel(name = "业主姓名")
+    private String userName;
+
+    /** 业主手机号 */
+    @Excel(name = "业主手机号")
+    private String residentPhone;
+
+    /** 车牌号码 */
+    @Excel(name = "车牌号码")
+    private String plateNumber;
+
+    /** 车辆车型 */
+    @Excel(name = "车辆车型")
+    private String vehicleBrand;
+
+    /** 车辆类型 */
+    @Excel(name = "车辆类型")
+    private String vehicleType;
+    /**
+     * 车辆能源类型 燃油 新能源
+     */
+    private String vehicleEnergy;
+
+    /** 车辆颜色 */
+    @Excel(name = "车辆颜色")
+    private String vehicleColour;
+
+    /** 发动机编号 */
+    @Excel(name = "发动机编号")
+    private String engineNumber;
+
+    /** 车辆识别代号 */
+    @Excel(name = "车辆识别代号")
+    private String identificationNumber;
+
+    /** 注册日期 */
+    @Excel(name = "注册日期")
+    private String registrationDate;
+
+    /** 发证日期 */
+    @Excel(name = "发证日期")
+    private String issueDate;
+
+    public String getVehicleEnergy() {
+        return vehicleEnergy;
+    }
+
+    public void setVehicleEnergy(String vehicleEnergy) {
+        this.vehicleEnergy = vehicleEnergy;
+    }
+
+    public Long getResidentId() {
+        return residentId;
+    }
+
+    public void setResidentId(Long residentId) {
+        this.residentId = residentId;
+    }
+
+    public void setCarId(Long carId)
+    {
+        this.carId = carId;
+    }
+
+    public Long getCarId() 
+    {
+        return carId;
+    }
+    public void setHouseId(Long houseId) 
+    {
+        this.houseId = houseId;
+    }
+
+    public Long getHouseId() 
+    {
+        return houseId;
+    }
+    public void setDetailedAddress(String detailedAddress) 
+    {
+        this.detailedAddress = detailedAddress;
+    }
+
+    public String getDetailedAddress() 
+    {
+        return detailedAddress;
+    }
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+    public void setUserName(String userName) 
+    {
+        this.userName = userName;
+    }
+
+    public String getUserName() 
+    {
+        return userName;
+    }
+    public void setResidentPhone(String residentPhone) 
+    {
+        this.residentPhone = residentPhone;
+    }
+
+    public String getResidentPhone() 
+    {
+        return residentPhone;
+    }
+    public void setPlateNumber(String plateNumber) 
+    {
+        this.plateNumber = plateNumber;
+    }
+
+    public String getPlateNumber() 
+    {
+        return plateNumber;
+    }
+    public void setVehicleBrand(String vehicleBrand) 
+    {
+        this.vehicleBrand = vehicleBrand;
+    }
+
+    public String getVehicleBrand() 
+    {
+        return vehicleBrand;
+    }
+    public void setVehicleType(String vehicleType) 
+    {
+        this.vehicleType = vehicleType;
+    }
+
+    public String getVehicleType() 
+    {
+        return vehicleType;
+    }
+    public void setVehicleColour(String vehicleColour) 
+    {
+        this.vehicleColour = vehicleColour;
+    }
+
+    public String getVehicleColour() 
+    {
+        return vehicleColour;
+    }
+    public void setEngineNumber(String engineNumber) 
+    {
+        this.engineNumber = engineNumber;
+    }
+
+    public String getEngineNumber() 
+    {
+        return engineNumber;
+    }
+    public void setIdentificationNumber(String identificationNumber) 
+    {
+        this.identificationNumber = identificationNumber;
+    }
+
+    public String getIdentificationNumber() 
+    {
+        return identificationNumber;
+    }
+    public void setRegistrationDate(String registrationDate) 
+    {
+        this.registrationDate = registrationDate;
+    }
+
+    public String getRegistrationDate() 
+    {
+        return registrationDate;
+    }
+    public void setIssueDate(String issueDate) 
+    {
+        this.issueDate = issueDate;
+    }
+
+    public String getIssueDate() 
+    {
+        return issueDate;
+    }
+
+    @Override
+    public String toString() {
+        return "ProprietorCar{" +
+                "carId=" + carId +
+                ", houseId=" + houseId +
+                ", detailedAddress='" + detailedAddress + '\'' +
+                ", userId=" + userId +
+                ", residentId=" + residentId +
+                ", userName='" + userName + '\'' +
+                ", residentPhone='" + residentPhone + '\'' +
+                ", plateNumber='" + plateNumber + '\'' +
+                ", vehicleBrand='" + vehicleBrand + '\'' +
+                ", vehicleType='" + vehicleType + '\'' +
+                ", vehicleEnergy='" + vehicleEnergy + '\'' +
+                ", vehicleColour='" + vehicleColour + '\'' +
+                ", engineNumber='" + engineNumber + '\'' +
+                ", identificationNumber='" + identificationNumber + '\'' +
+                ", registrationDate='" + registrationDate + '\'' +
+                ", issueDate='" + issueDate + '\'' +
+                '}';
+    }
+}

Some files were not shown because too many files changed in this diff