diff --git a/ruoyi-api/pom.xml b/ruoyi-api/pom.xml
index e276c9a7..2033c86d 100644
--- a/ruoyi-api/pom.xml
+++ b/ruoyi-api/pom.xml
@@ -14,6 +14,7 @@
ruoyi-api-resource
ruoyi-api-workflow
property-api
+ sis-api
ruoyi-api
diff --git a/ruoyi-api/sis-api/pom.xml b/ruoyi-api/sis-api/pom.xml
new file mode 100644
index 00000000..0b79046c
--- /dev/null
+++ b/ruoyi-api/sis-api/pom.xml
@@ -0,0 +1,29 @@
+
+
+
+ org.dromara
+ ruoyi-api
+ ${revision}
+
+ 4.0.0
+
+ sis-api
+
+
+ 安防api模块
+
+
+
+
+
+
+ org.dromara
+ ruoyi-common-core
+
+
+
+
+
+
diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSisAuth.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSisAuth.java
new file mode 100644
index 00000000..f657f718
--- /dev/null
+++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSisAuth.java
@@ -0,0 +1,13 @@
+package org.dromara.sis.api;
+
+import org.dromara.sis.api.domain.RemotePersonAuth;
+
+/**
+ * @author lsm
+ * @apiNote RemoteSisAuth
+ * @since 2025/7/24
+ */
+public interface RemoteSisAuth {
+
+ Long personAuth(RemotePersonAuth personAuth);
+}
diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java
new file mode 100644
index 00000000..a31fc040
--- /dev/null
+++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java
@@ -0,0 +1,44 @@
+package org.dromara.sis.api.domain;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author lsm
+ * @apiNote RemotePersonAuth
+ * @since 2025/7/24
+ */
+@Data
+public class RemotePersonAuth implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ private Long id;
+
+ private String name;
+
+ private Integer sex;
+
+ private String phone;
+
+ private String email;
+
+ private Integer cardType = 1;
+
+ private String idCardNumber;
+
+ private String ossId;
+
+ private String carNumber;
+
+ private Long authGroupId;
+
+ private Date begDate;
+
+ private Date endDate;
+
+}
diff --git a/ruoyi-modules/Property/pom.xml b/ruoyi-modules/Property/pom.xml
index 40ad288a..fdb2815b 100644
--- a/ruoyi-modules/Property/pom.xml
+++ b/ruoyi-modules/Property/pom.xml
@@ -115,6 +115,12 @@
property-api
+
+ org.dromara
+ sis-api
+ 2.4.0
+
+
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CostReturnPayFeeController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CostReturnPayFeeController.java
index 79c7e7bb..956f94b6 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CostReturnPayFeeController.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CostReturnPayFeeController.java
@@ -40,7 +40,7 @@ public class CostReturnPayFeeController extends BaseController {
/**
* 查询费用-抄类型列表
*/
- @SaCheckPermission("system:returnPayFee:list")
+ //@SaCheckPermission("system:returnPayFee:list")
@GetMapping("/list")
public TableDataInfo list(CostReturnPayFeeBo bo, PageQuery pageQuery) {
return costReturnPayFeeService.queryPageList(bo, pageQuery);
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerContingenPlanController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerContingenPlanController.java
new file mode 100644
index 00000000..2c9d0f77
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerContingenPlanController.java
@@ -0,0 +1,106 @@
+package org.dromara.property.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.property.domain.bo.CustomerContingenPlanBo;
+import org.dromara.property.domain.vo.CustomerContingenPlanVo;
+import org.dromara.property.service.ICustomerContingenPlanService;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 客户服务-应急预案
+ * 前端访问路由地址为:/system/contingenPlan
+ *
+ * @author mocheng
+ * @date 2025-07-22
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/contingenPlan")
+public class CustomerContingenPlanController extends BaseController {
+
+ private final ICustomerContingenPlanService customerContingenPlanService;
+
+ /**
+ * 查询客户服务-应急预案列表
+ */
+ // @SaCheckPermission("system:contingenPlan:list")
+ @GetMapping("/list")
+ public TableDataInfo list(CustomerContingenPlanBo bo, PageQuery pageQuery) {
+ return customerContingenPlanService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出客户服务-应急预案列表
+ */
+ @SaCheckPermission("system:contingenPlan:export")
+ @Log(title = "客户服务-应急预案", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(CustomerContingenPlanBo bo, HttpServletResponse response) {
+ List list = customerContingenPlanService.queryList(bo);
+ ExcelUtil.exportExcel(list, "客户服务-应急预案", CustomerContingenPlanVo.class, response);
+ }
+
+ /**
+ * 获取客户服务-应急预案详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("system:contingenPlan:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable("id") Long id) {
+ return R.ok(customerContingenPlanService.queryById(id));
+ }
+
+ /**
+ * 新增客户服务-应急预案
+ */
+ @SaCheckPermission("system:contingenPlan:add")
+ @Log(title = "客户服务-应急预案", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody CustomerContingenPlanBo bo) {
+ return toAjax(customerContingenPlanService.insertByBo(bo));
+ }
+
+ /**
+ * 修改客户服务-应急预案
+ */
+ @SaCheckPermission("system:contingenPlan:edit")
+ @Log(title = "客户服务-应急预案", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody CustomerContingenPlanBo bo) {
+ return toAjax(customerContingenPlanService.updateByBo(bo));
+ }
+
+ /**
+ * 删除客户服务-应急预案
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("system:contingenPlan:remove")
+ @Log(title = "客户服务-应急预案", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable("ids") Long[] ids) {
+ return toAjax(customerContingenPlanService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerFeedbacksController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerFeedbacksController.java
new file mode 100644
index 00000000..92c12061
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerFeedbacksController.java
@@ -0,0 +1,106 @@
+package org.dromara.property.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.property.domain.bo.CustomerFeedbacksBo;
+import org.dromara.property.domain.vo.CustomerFeedbacksVo;
+import org.dromara.property.service.ICustomerFeedbacksService;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 客户服务-意见反馈
+ * 前端访问路由地址为:/system/feedbacks
+ *
+ * @author mocheng
+ * @date 2025-07-22
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/feedbacks")
+public class CustomerFeedbacksController extends BaseController {
+
+ private final ICustomerFeedbacksService customerFeedbacksService;
+
+ /**
+ * 查询客户服务-意见反馈列表
+ */
+ @SaCheckPermission("system:feedbacks:list")
+ @GetMapping("/list")
+ public TableDataInfo list(CustomerFeedbacksBo bo, PageQuery pageQuery) {
+ return customerFeedbacksService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出客户服务-意见反馈列表
+ */
+ @SaCheckPermission("system:feedbacks:export")
+ @Log(title = "客户服务-意见反馈", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(CustomerFeedbacksBo bo, HttpServletResponse response) {
+ List list = customerFeedbacksService.queryList(bo);
+ ExcelUtil.exportExcel(list, "客户服务-意见反馈", CustomerFeedbacksVo.class, response);
+ }
+
+ /**
+ * 获取客户服务-意见反馈详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("system:feedbacks:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable("id") Long id) {
+ return R.ok(customerFeedbacksService.queryById(id));
+ }
+
+ /**
+ * 新增客户服务-意见反馈
+ */
+ @SaCheckPermission("system:feedbacks:add")
+ @Log(title = "客户服务-意见反馈", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody CustomerFeedbacksBo bo) {
+ return toAjax(customerFeedbacksService.insertByBo(bo));
+ }
+
+ /**
+ * 修改客户服务-意见反馈
+ */
+ @SaCheckPermission("system:feedbacks:edit")
+ @Log(title = "客户服务-意见反馈", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody CustomerFeedbacksBo bo) {
+ return toAjax(customerFeedbacksService.updateByBo(bo));
+ }
+
+ /**
+ * 删除客户服务-意见反馈
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("system:feedbacks:remove")
+ @Log(title = "客户服务-意见反馈", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable("ids") Long[] ids) {
+ return toAjax(customerFeedbacksService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerNoticesController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerNoticesController.java
new file mode 100644
index 00000000..dc372f4f
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerNoticesController.java
@@ -0,0 +1,106 @@
+package org.dromara.property.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.property.domain.vo.CustomerNoticesVo;
+import org.dromara.property.domain.bo.CustomerNoticesBo;
+import org.dromara.property.service.ICustomerNoticesService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 客户服务-通知公告
+ * 前端访问路由地址为:/domain/notices
+ *
+ * @author 余永乐
+ * @date 2025-07-22
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/notices")
+public class CustomerNoticesController extends BaseController {
+
+ private final ICustomerNoticesService customerNoticesService;
+
+ /**
+ * 查询客户服务-通知公告列表
+ */
+ //@SaCheckPermission("domain:notices:list")
+ @GetMapping("/list")
+ public TableDataInfo list(CustomerNoticesBo bo, PageQuery pageQuery) {
+ return customerNoticesService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出客户服务-通知公告列表
+ */
+ @SaCheckPermission("domain:notices:export")
+ @Log(title = "客户服务-通知公告", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(CustomerNoticesBo bo, HttpServletResponse response) {
+ List list = customerNoticesService.queryList(bo);
+ ExcelUtil.exportExcel(list, "客户服务-通知公告", CustomerNoticesVo.class, response);
+ }
+
+ /**
+ * 获取客户服务-通知公告详细信息
+ *
+ * @param id 主键
+ */
+ //@SaCheckPermission("domain:notices:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable("id") Long id) {
+ return R.ok(customerNoticesService.queryById(id));
+ }
+
+ /**
+ * 新增客户服务-通知公告
+ */
+ @SaCheckPermission("domain:notices:add")
+ @Log(title = "客户服务-通知公告", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody CustomerNoticesBo bo) {
+ return toAjax(customerNoticesService.insertByBo(bo));
+ }
+
+ /**
+ * 修改客户服务-通知公告
+ */
+ @SaCheckPermission("domain:notices:edit")
+ @Log(title = "客户服务-通知公告", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody CustomerNoticesBo bo) {
+ return toAjax(customerNoticesService.updateByBo(bo));
+ }
+
+ /**
+ * 删除客户服务-通知公告
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("domain:notices:remove")
+ @Log(title = "客户服务-通知公告", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable("ids") Long[] ids) {
+ return toAjax(customerNoticesService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServeceCustomerController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerServeceController.java
similarity index 60%
rename from ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServeceCustomerController.java
rename to ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerServeceController.java
index 65e0362a..87a52429 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServeceCustomerController.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerServeceController.java
@@ -1,13 +1,9 @@
package org.dromara.property.controller;
-import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
-import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
-import org.dromara.property.domain.bo.ServerBookingBo;
-import org.dromara.property.domain.vo.ServeceCustomerCountVo;
-import org.dromara.property.domain.vo.ServerBookingVo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.property.domain.vo.ServiceWorkOrderAnalysisVo;
import org.dromara.property.service.IServiceWorkOrdersService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
@@ -17,19 +13,19 @@ import org.springframework.web.bind.annotation.RestController;
/**
* @Author:yuyongle
* @Date:2025/7/21 15:25
- * @Description:客户服务控制器
+ * @Description:工单看板控制器
**/
@Validated
@RequiredArgsConstructor
@RestController
-@RequestMapping("/serveceCustomer")
-public class ServeceCustomerController {
+@RequestMapping("/customerServece")
+public class CustomerServeceController extends BaseController {
private final IServiceWorkOrdersService serviceWorkOrdersService;
/**
* 查询客户服务工单看板统计
*/
@GetMapping("/counts")
- public R counts() {
+ public R counts() {
return R.ok(serviceWorkOrdersService.counts());
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/EnumFetcherController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/EnumFetcherController.java
index 5ff66972..f9ce45d0 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/EnumFetcherController.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/EnumFetcherController.java
@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import java.util.List;
import java.util.Map;
/**
@@ -28,8 +29,8 @@ public class EnumFetcherController {
*/
@GetMapping("/enum-values/{name}")
- public R