diff --git a/pom.xml b/pom.xml index 121b2d4c..5331daaf 100644 --- a/pom.xml +++ b/pom.xml @@ -91,13 +91,12 @@ dev - 192.168.110.207:8848 - 192.168.110.207:4560 + 192.168.24.101:8848 + 192.168.24.101:4560 DEFAULT_GROUP DEFAULT_GROUP nacos nacos - @@ -105,8 +104,6 @@ prod prod - - 47.109.37.87:8848 47.109.37.87:4560 DEFAULT_GROUP diff --git a/ruoyi-common/ruoyi-common-mybatis/pom.xml b/ruoyi-common/ruoyi-common-mybatis/pom.xml index 77a88301..e7f23b1b 100644 --- a/ruoyi-common/ruoyi-common-mybatis/pom.xml +++ b/ruoyi-common/ruoyi-common-mybatis/pom.xml @@ -49,6 +49,11 @@ dynamic-datasource-spring-boot3-starter ${dynamic-ds.version} + + com.github.yulichang + mybatis-plus-join + 1.2.4 + diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionItemController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionItemController.java new file mode 100644 index 00000000..5bf5a833 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionItemController.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.InspectionItemBo; +import org.dromara.property.domain.vo.InspectionItemVo; +import org.dromara.property.service.IInspectionItemService; +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; + +/** + * 巡检项目 + * 前端访问路由地址为:/property/item + * + * @author mocheng + * @date 2025-07-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/item") +public class InspectionItemController extends BaseController { + + private final IInspectionItemService inspectionItemService; + + /** + * 查询巡检项目列表 + */ + @SaCheckPermission("system:item:list") + @GetMapping("/list") + public TableDataInfo list(InspectionItemBo bo, PageQuery pageQuery) { + return inspectionItemService.queryPageList(bo, pageQuery); + } + + /** + * 导出巡检项目列表 + */ + @SaCheckPermission("system:item:export") + @Log(title = "巡检项目", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(InspectionItemBo bo, HttpServletResponse response) { + List list = inspectionItemService.queryList(bo); + ExcelUtil.exportExcel(list, "巡检项目", InspectionItemVo.class, response); + } + + /** + * 获取巡检项目详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:item:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(inspectionItemService.queryById(id)); + } + + /** + * 新增巡检项目 + */ + @SaCheckPermission("system:item:add") + @Log(title = "巡检项目", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody InspectionItemBo bo) { + return toAjax(inspectionItemService.insertByBo(bo)); + } + + /** + * 修改巡检项目 + */ + @SaCheckPermission("system:item:edit") + @Log(title = "巡检项目", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody InspectionItemBo bo) { + return toAjax(inspectionItemService.updateByBo(bo)); + } + + /** + * 删除巡检项目 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:item:remove") + @Log(title = "巡检项目", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(inspectionItemService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionPlanController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionPlanController.java new file mode 100644 index 00000000..5c1ffd38 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionPlanController.java @@ -0,0 +1,107 @@ +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.vo.InspectionPlanDetailVo; +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.InspectionPlanVo; +import org.dromara.property.domain.bo.InspectionPlanBo; +import org.dromara.property.service.IInspectionPlanService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 巡检计划 + * 前端访问路由地址为:/property/inspectionPlan + * + * @author mocheng + * @date 2025-07-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/inspectionPlan") +public class InspectionPlanController extends BaseController { + + private final IInspectionPlanService inspectionPlanService; + + /** + * 查询巡检计划列表 + */ + //@SaCheckPermission("property:inspectionPlan:list") + @GetMapping("/list") + public TableDataInfo list(InspectionPlanBo bo, PageQuery pageQuery) { + return inspectionPlanService.queryPageList(bo, pageQuery); + } + + /** + * 导出巡检计划列表 + */ + //@SaCheckPermission("property:inspectionPlan:export") + @Log(title = "巡检计划", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(InspectionPlanBo bo, HttpServletResponse response) { + List list = inspectionPlanService.queryList(bo); + ExcelUtil.exportExcel(list, "巡检计划", InspectionPlanVo.class, response); + } + + /** + * 获取巡检计划详细信息 + * + * @param id 主键 + */ + // @SaCheckPermission("property:inspectionPlan:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(inspectionPlanService.queryById(id)); + } + + /** + * 新增巡检计划 + */ + @SaCheckPermission("property:inspectionPlan:add") + @Log(title = "巡检计划", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody InspectionPlanBo bo) { + return toAjax(inspectionPlanService.insertByBo(bo)); + } + + /** + * 修改巡检计划 + */ + @SaCheckPermission("property:inspectionPlan:edit") + @Log(title = "巡检计划", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody InspectionPlanBo bo) { + return toAjax(inspectionPlanService.updateByBo(bo)); + } + + /** + * 删除巡检计划 + * + * @param ids 主键串 + */ + @SaCheckPermission("property:inspectionPlan:remove") + @Log(title = "巡检计划", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(inspectionPlanService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionPlanStaffController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionPlanStaffController.java new file mode 100644 index 00000000..fba3435b --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionPlanStaffController.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.InspectionPlanStaffBo; +import org.dromara.property.domain.vo.InspectionPlanStaffVo; +import org.dromara.property.service.IInspectionPlanStaffService; +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/planStaff + * + * @author mocheng + * @date 2025-07-14 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/planStaff") +public class InspectionPlanStaffController extends BaseController { + + private final IInspectionPlanStaffService inspectionPlanStaffService; + + /** + * 查询执行计划人信息列表 + */ + @SaCheckPermission("system:planStaff:list") + @GetMapping("/list") + public TableDataInfo list(InspectionPlanStaffBo bo, PageQuery pageQuery) { + return inspectionPlanStaffService.queryPageList(bo, pageQuery); + } + + /** + * 导出执行计划人信息列表 + */ + @SaCheckPermission("system:planStaff:export") + @Log(title = "执行计划人信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(InspectionPlanStaffBo bo, HttpServletResponse response) { + List list = inspectionPlanStaffService.queryList(bo); + ExcelUtil.exportExcel(list, "执行计划人信息", InspectionPlanStaffVo.class, response); + } + + /** + * 获取执行计划人信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:planStaff:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(inspectionPlanStaffService.queryById(id)); + } + + /** + * 新增执行计划人信息 + */ + @SaCheckPermission("system:planStaff:add") + @Log(title = "执行计划人信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody InspectionPlanStaffBo bo) { + return toAjax(inspectionPlanStaffService.insertByBo(bo)); + } + + /** + * 修改执行计划人信息 + */ + @SaCheckPermission("system:planStaff:edit") + @Log(title = "执行计划人信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody InspectionPlanStaffBo bo) { + return toAjax(inspectionPlanStaffService.updateByBo(bo)); + } + + /** + * 删除执行计划人信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:planStaff:remove") + @Log(title = "执行计划人信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(inspectionPlanStaffService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionPointController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionPointController.java new file mode 100644 index 00000000..586b4eb1 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionPointController.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.InspectionPointBo; +import org.dromara.property.domain.vo.InspectionPointVo; +import org.dromara.property.service.IInspectionPointService; +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; + +/** + * 巡检点 + * 前端访问路由地址为:/property/point + * + * @author mocheng + * @date 2025-07-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/point") +public class InspectionPointController extends BaseController { + + private final IInspectionPointService inspectionPointService; + + /** + * 查询巡检点列表 + */ + @SaCheckPermission("system:point:list") + @GetMapping("/list") + public TableDataInfo list(InspectionPointBo bo, PageQuery pageQuery) { + return inspectionPointService.queryPageList(bo, pageQuery); + } + + /** + * 导出巡检点列表 + */ + @SaCheckPermission("system:point:export") + @Log(title = "巡检点", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(InspectionPointBo bo, HttpServletResponse response) { + List list = inspectionPointService.queryList(bo); + ExcelUtil.exportExcel(list, "巡检点", InspectionPointVo.class, response); + } + + /** + * 获取巡检点详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:point:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(inspectionPointService.queryById(id)); + } + + /** + * 新增巡检点 + */ + @SaCheckPermission("system:point:add") + @Log(title = "巡检点", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody InspectionPointBo bo) { + return toAjax(inspectionPointService.insertByBo(bo)); + } + + /** + * 修改巡检点 + */ + @SaCheckPermission("system:point:edit") + @Log(title = "巡检点", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody InspectionPointBo bo) { + return toAjax(inspectionPointService.updateByBo(bo)); + } + + /** + * 删除巡检点 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:point:remove") + @Log(title = "巡检点", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(inspectionPointService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionRouteController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionRouteController.java new file mode 100644 index 00000000..49a64be6 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionRouteController.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.InspectionRouteBo; +import org.dromara.property.domain.vo.InspectionRouteVo; +import org.dromara.property.service.IInspectionRouteService; +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; + +/** + * 巡检路线 + * 前端访问路由地址为:/property/route + * + * @author mocheng + * @date 2025-07-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/route") +public class InspectionRouteController extends BaseController { + + private final IInspectionRouteService inspectionRouteService; + + /** + * 查询巡检路线列表 + */ + //@SaCheckPermission("system:route:list") + @GetMapping("/list") + public TableDataInfo list(InspectionRouteBo bo, PageQuery pageQuery) { + return inspectionRouteService.queryPageList(bo, pageQuery); + } + + /** + * 导出巡检路线列表 + */ + @SaCheckPermission("system:route:export") + @Log(title = "巡检路线", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(InspectionRouteBo bo, HttpServletResponse response) { + List list = inspectionRouteService.queryList(bo); + ExcelUtil.exportExcel(list, "巡检路线", InspectionRouteVo.class, response); + } + + /** + * 获取巡检路线详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:route:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(inspectionRouteService.queryById(id)); + } + + /** + * 新增巡检路线 + */ + @SaCheckPermission("system:route:add") + @Log(title = "巡检路线", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody InspectionRouteBo bo) { + return toAjax(inspectionRouteService.insertByBo(bo)); + } + + /** + * 修改巡检路线 + */ + @SaCheckPermission("system:route:edit") + @Log(title = "巡检路线", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody InspectionRouteBo bo) { + return toAjax(inspectionRouteService.updateByBo(bo)); + } + + /** + * 删除巡检路线 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:route:remove") + @Log(title = "巡检路线", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(inspectionRouteService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionStaffController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionStaffController.java new file mode 100644 index 00000000..58cb31c0 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionStaffController.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.InspectionStaffBo; +import org.dromara.property.domain.vo.InspectionStaffVo; +import org.dromara.property.service.IInspectionStaffService; +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/staff + * + * @author mocheng + * @date 2025-07-14 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/staff") +public class InspectionStaffController extends BaseController { + + private final IInspectionStaffService inspectionStaffService; + + /** + * 查询执行计划人信息列表 + */ + @SaCheckPermission("system:staff:list") + @GetMapping("/list") + public TableDataInfo list(InspectionStaffBo bo, PageQuery pageQuery) { + return inspectionStaffService.queryPageList(bo, pageQuery); + } + + /** + * 导出执行计划人信息列表 + */ + @SaCheckPermission("system:staff:export") + @Log(title = "执行计划人信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(InspectionStaffBo bo, HttpServletResponse response) { + List list = inspectionStaffService.queryList(bo); + ExcelUtil.exportExcel(list, "执行计划人信息", InspectionStaffVo.class, response); + } + + /** + * 获取执行计划人信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:staff:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(inspectionStaffService.queryById(id)); + } + + /** + * 新增执行计划人信息 + */ + @SaCheckPermission("system:staff:add") + @Log(title = "执行计划人信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody InspectionStaffBo bo) { + return toAjax(inspectionStaffService.insertByBo(bo)); + } + + /** + * 修改执行计划人信息 + */ + @SaCheckPermission("system:staff:edit") + @Log(title = "执行计划人信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody InspectionStaffBo bo) { + return toAjax(inspectionStaffService.updateByBo(bo)); + } + + /** + * 删除执行计划人信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:staff:remove") + @Log(title = "执行计划人信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(inspectionStaffService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionTaskController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionTaskController.java new file mode 100644 index 00000000..c289cf2c --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionTaskController.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.InspectionTaskVo; +import org.dromara.property.domain.bo.InspectionTaskBo; +import org.dromara.property.service.IInspectionTaskService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 巡检任务 + * 前端访问路由地址为:/property/inspectionTask + * + * @author mocheng + * @date 2025-07-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/inspectionTask") +public class InspectionTaskController extends BaseController { + + private final IInspectionTaskService inspectionTaskService; + + /** + * 查询巡检任务列表 + */ + // @SaCheckPermission("property:inspectionTask:list") + @GetMapping("/list") + public TableDataInfo list(InspectionTaskBo bo, PageQuery pageQuery) { + return inspectionTaskService.queryPageList(bo, pageQuery); + } + + /** + * 导出巡检任务列表 + */ + @SaCheckPermission("property:inspectionTask:export") + @Log(title = "巡检任务", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(InspectionTaskBo bo, HttpServletResponse response) { + List list = inspectionTaskService.queryList(bo); + ExcelUtil.exportExcel(list, "巡检任务", InspectionTaskVo.class, response); + } + + /** + * 获取巡检任务详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("property:inspectionTask:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(inspectionTaskService.queryById(id)); + } + + /** + * 新增巡检任务 + */ + @SaCheckPermission("property:inspectionTask:add") + @Log(title = "巡检任务", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody InspectionTaskBo bo) { + return toAjax(inspectionTaskService.insertByBo(bo)); + } + + /** + * 修改巡检任务 + */ + @SaCheckPermission("property:inspectionTask:edit") + @Log(title = "巡检任务", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody InspectionTaskBo bo) { + return toAjax(inspectionTaskService.updateByBo(bo)); + } + + /** + * 删除巡检任务 + * + * @param ids 主键串 + */ + @SaCheckPermission("property:inspectionTask:remove") + @Log(title = "巡检任务", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(inspectionTaskService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CleanOrder.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CleanOrder.java index f0801ca5..88a2afae 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CleanOrder.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CleanOrder.java @@ -98,7 +98,7 @@ public class CleanOrder extends TenantEntity { /** * 状态 */ - private int state; + private Integer state; /** * 联系电话 @@ -113,7 +113,7 @@ public class CleanOrder extends TenantEntity { /** * 是否退订(0:否,1:是) */ - private int isUnbooking; + private Integer isUnbooking; /** * 更新人id diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionItem.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionItem.java new file mode 100644 index 00000000..58daf036 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionItem.java @@ -0,0 +1,40 @@ +package org.dromara.property.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 巡检项目对象 inspection_item + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("inspection_item") +public class InspectionItem extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 项目名称 + */ + private String itemName; + + /** + * 备注 + */ + private String remark; + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPlan.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPlan.java new file mode 100644 index 00000000..dff314c3 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPlan.java @@ -0,0 +1,102 @@ +package org.dromara.property.domain; + +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; + +import java.io.Serial; + +/** + * 巡检计划对象 inspection_plan + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("inspection_plan") +public class InspectionPlan extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 巡检计划名称 + */ + private String planName; + + /** + * 巡检路线id + */ + private Long inspectionRouteId; + + /** + * 巡检周期 + */ + private String inspectionPlanPeriod; + /** + * 任务提前分组 + */ + private Integer beforeTime; + + /** + * 巡检月 + */ + private String inspectionMonth; + /** + * 巡检日 + */ + private String inspectionDay; + /** + * 巡检周 + */ + private String inspectionWorkday; + + /** + * 开始日期 + */ + private Date startDate; + + /** + * 结束日期 + */ + private Date endDate; + /** + * 开始时间 + */ + private String startTime; + + /** + * 结束时间 + */ + private String endTime; + + /** + * 签到方式(0现场拍照(默认定位),1现场定位) + */ + private String signType; + + /** + * 允许补检(0允许1不允许) + */ + private String canReexamine; + + /** + * 备注 + */ + private String remark; + /** + * 状态(0启用1停用) + */ + private String state; + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPlanStaff.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPlanStaff.java new file mode 100644 index 00000000..0ae1cf2a --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPlanStaff.java @@ -0,0 +1,58 @@ +package org.dromara.property.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 执行计划人信息对象 inspection_plan_staff + * + * @author mocheng + * @date 2025-07-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("inspection_plan_staff") +public class InspectionPlanStaff extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + + /** + * 执行计划人id + */ + private Long userId; + + /** + * 计划id + */ + private Long inspectionPlanId; + + /** + * 开始时间 + */ + private Date startTime; + + /** + * 结束时间 + */ + private Date endTime; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPoint.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPoint.java new file mode 100644 index 00000000..f7df1d5a --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPoint.java @@ -0,0 +1,56 @@ +package org.dromara.property.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 巡检点对象 inspection_point + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("inspection_point") +public class InspectionPoint extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 巡检项目id + */ + private Long itemId; + + /** + * 巡检点名称 + */ + private String pointName; + + /** + * 巡检点类型 + */ + private String pointType; + + /** + * nfc编码 + */ + private String nfcCode; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionRoute.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionRoute.java new file mode 100644 index 00000000..59df9a31 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionRoute.java @@ -0,0 +1,44 @@ +package org.dromara.property.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 巡检路线对象 inspection_route + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("inspection_route") +public class InspectionRoute extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 路线名称 + */ + private String routeName; + + /** + * 备注 + */ + private String remark; + /** + * 排序 + */ + private Integer sort; + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionStaff.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionStaff.java new file mode 100644 index 00000000..b879ff63 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionStaff.java @@ -0,0 +1,58 @@ +package org.dromara.property.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 执行计划人信息对象 inspection_staff + * + * @author mocheng + * @date 2025-07-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("inspection_staff") +public class InspectionStaff extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + + /** + * 实际巡检人id + */ + private Long userId; + + /** + * 计划id + */ + private Long inspectionPlanId; + + /** + * 实际巡检开始时间 + */ + private Date startTime; + + /** + * 实际巡检结束时间 + */ + private Date endTime; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTask.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTask.java new file mode 100644 index 00000000..34e94089 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTask.java @@ -0,0 +1,77 @@ +package org.dromara.property.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 巡检任务对象 inspection_task + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("inspection_task") +public class InspectionTask extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 巡检计划id + */ + private Long inspectionPlanId; + + /** + * 实际巡检时间 + */ + private Date actInsTime; + + /** + * 当前巡检人 + */ + private Long actUserId; + + /** + * 巡检方式 + */ + private String taskType; + + /** + * 转移描述 + */ + private String transferDesc; + + /** + * 巡检状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + /** + * 计划巡检时间范围 + */ + private String planInsTime; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetAttach.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetAttach.java index cfa00ba3..64e8c5dd 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetAttach.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetAttach.java @@ -62,20 +62,5 @@ public class MeetAttach extends TenantEntity { */ private String picture; - /** - * 创建人id - */ - private Long createById; - - /** - * 更新人id - */ - private Long updateById; - - /** - * 搜索值 - */ - private String searchValue; - } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetAttachOrder.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetAttachOrder.java index 33a54514..2a9984bb 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetAttachOrder.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetAttachOrder.java @@ -42,20 +42,5 @@ public class MeetAttachOrder extends TenantEntity { */ private Long quantity; - /** - * 创建人id - */ - private Long createById; - - /** - * 更新人id - */ - private Long updateById; - - /** - * 搜索值 - */ - private String searchValue; - } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetBooking.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetBooking.java index af834b5c..aebbef33 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetBooking.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetBooking.java @@ -105,20 +105,4 @@ public class MeetBooking extends TenantEntity { */ private String descs; - /** - * 创建人id - */ - private Long createById; - - /** - * 更新人id - */ - private Long updateById; - - /** - * 搜索值 - */ - private String searchValue; - - } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanBo.java index 5c063c3b..3ae4180b 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanBo.java @@ -86,7 +86,7 @@ public class CleanBo extends BaseEntity { /** * 备注 */ - @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) private String remark; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanOrderBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanOrderBo.java index 8601487b..a7f43f2e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanOrderBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanOrderBo.java @@ -114,12 +114,12 @@ public class CleanOrderBo extends BaseEntity { /** * 是否退订(0:否,1:是) */ - private int isUnbooking; + private Integer isUnbooking; /** * 状态 */ - private int state; + private Integer state; @NotEmpty(message = "订单详情不能为空", groups = {AddGroup.class}) private List cleanList; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionItemBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionItemBo.java new file mode 100644 index 00000000..47a0819a --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionItemBo.java @@ -0,0 +1,40 @@ +package org.dromara.property.domain.bo; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import org.dromara.property.domain.InspectionItem; + +/** + * 巡检项目业务对象 inspection_item + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = InspectionItem.class, reverseConvertGenerate = false) +public class InspectionItemBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 项目名称 + */ + @NotBlank(message = "项目名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String itemName; + + /** + * 备注 + */ + private String remark; + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPlanBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPlanBo.java new file mode 100644 index 00000000..fecd5663 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPlanBo.java @@ -0,0 +1,116 @@ +package org.dromara.property.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.property.domain.InspectionPlan; + +import java.util.Date; +import java.util.List; + +/** + * 巡检计划业务对象 inspection_plan + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = InspectionPlan.class, reverseConvertGenerate = false) +public class InspectionPlanBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 巡检计划名称 + */ + @NotBlank(message = "巡检计划名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String planName; + + /** + * 巡检路线id + */ + @NotNull(message = "巡检路线id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long inspectionRouteId; + + /** + * 巡检周期 + */ + @NotBlank(message = "巡检周期不能为空", groups = { AddGroup.class, EditGroup.class }) + private String inspectionPlanPeriod; + + /** + * 任务提前分组 + */ + @NotNull(message = "任务提前分组不能为空", groups = { AddGroup.class, EditGroup.class }) + private Integer beforeTime; + + /** + * 开始日期 + */ + @NotNull(message = "开始日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date startDate; + + /** + * 结束日期 + */ + @NotNull(message = "结束日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date endDate; + /** + * 开始时间 + */ + @NotNull(message = "开始时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private String startTime; + + /** + * 结束时间 + */ + @NotNull(message = "开始时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private String endTime; + + /** + * 签到方式(0现场拍照(默认定位),1现场定位) + */ + @NotBlank(message = "签到方式(0现场拍照(默认定位),1现场定位)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String signType; + + /** + * 允许补检(0允许1不允许) + */ + @NotBlank(message = "允许补检(0允许1不允许)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String canReexamine; + + /** + * 巡检月 + */ + private String inspectionMonth; + /** + * 巡检日 + */ + private String inspectionDay; + /** + * 巡检周 + */ + private String inspectionWorkday; + + /** + * 备注 + */ + private String remark; + + /** + * 状态(0启用1停用) + */ + private String state; + + private List inspectionPlanStaffBoList; +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPlanStaffBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPlanStaffBo.java new file mode 100644 index 00000000..4a358dca --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPlanStaffBo.java @@ -0,0 +1,56 @@ +package org.dromara.property.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.property.domain.InspectionPlanStaff; + +import java.util.Date; + +/** + * 执行计划人信息业务对象 inspection_plan_staff + * + * @author mocheng + * @date 2025-07-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = InspectionPlanStaff.class, reverseConvertGenerate = false) +public class InspectionPlanStaffBo extends BaseEntity { + + /** + * 主键 + */ + @NotNull(message = "主键不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 执行计划人id + */ + @NotNull(message = "执行计划人id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long userId; + + /** + * 计划id + */ + @NotNull(message = "计划id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long inspectionPlanId; + + /** + * 开始时间 + */ + @NotNull(message = "开始时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date startTime; + + /** + * 结束时间 + */ + @NotNull(message = "结束时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date endTime; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPointBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPointBo.java new file mode 100644 index 00000000..174c74a8 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPointBo.java @@ -0,0 +1,58 @@ +package org.dromara.property.domain.bo; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import org.dromara.property.domain.InspectionPoint; + +/** + * 巡检点业务对象 inspection_point + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = InspectionPoint.class, reverseConvertGenerate = false) +public class InspectionPointBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 巡检项目id + */ + @NotNull(message = "巡检项目id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long itemId; + + /** + * 巡检点名称 + */ + @NotBlank(message = "巡检点名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String pointName; + + /** + * 巡检点类型 + */ + @NotBlank(message = "巡检点类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String pointType; + + /** + * nfc编码 + */ + private String nfcCode; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionRouteBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionRouteBo.java new file mode 100644 index 00000000..14aefc3f --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionRouteBo.java @@ -0,0 +1,44 @@ +package org.dromara.property.domain.bo; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import org.dromara.property.domain.InspectionRoute; + +/** + * 巡检路线业务对象 inspection_route + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = InspectionRoute.class, reverseConvertGenerate = false) +public class InspectionRouteBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 路线名称 + */ + @NotBlank(message = "路线名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String routeName; + + /** + * 备注 + */ + private String remark; + /** + * 排序 + */ + @NotNull(message = "排序不能为空", groups = { EditGroup.class }) + private Integer sort; +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionStaffBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionStaffBo.java new file mode 100644 index 00000000..58ec57f1 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionStaffBo.java @@ -0,0 +1,57 @@ +package org.dromara.property.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.property.domain.InspectionStaff; + +import java.util.Date; + +/** + * 执行计划人信息业务对象 inspection_staff + * + * @author mocheng + * @date 2025-07-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = InspectionStaff.class, reverseConvertGenerate = false) +public class InspectionStaffBo extends BaseEntity { + + /** + * 主键 + */ + @NotNull(message = "主键不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 实际巡检人id + */ + @NotNull(message = "实际巡检人id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long userId; + + /** + * 计划id + */ + @NotNull(message = "计划id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long inspectionPlanId; + + /** + * 实际巡检开始时间 + */ + @NotNull(message = "实际巡检开始时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date startTime; + + /** + * 实际巡检结束时间 + */ + @NotNull(message = "实际巡检结束时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date endTime; + + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionTaskBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionTaskBo.java new file mode 100644 index 00000000..08f7c2c4 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionTaskBo.java @@ -0,0 +1,69 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.InspectionTask; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 巡检任务业务对象 inspection_task + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = InspectionTask.class, reverseConvertGenerate = false) +public class InspectionTaskBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 巡检计划id + */ + private Long inspectionPlanId; + + /** + * 实际巡检时间 + */ + private Date actInsTime; + + /** + * 当前巡检人 + */ + private Long actUserId; + + /** + * 巡检方式 + */ + private String taskType; + + /** + * 转移描述 + */ + private String transferDesc; + + /** + * 巡检状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + /** + * 计划巡检时间范围 + */ + private String planInsTime; +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetAttachOrderBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetAttachOrderBo.java index a7d95dc4..b7c58475 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetAttachOrderBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetAttachOrderBo.java @@ -34,20 +34,5 @@ public class MeetAttachOrderBo extends BaseEntity { */ private Integer quantity; - /** - * 创建人id - */ - private Long createById; - - /** - * 更新人id - */ - private Long updateById; - - /** - * 搜索值 - */ - private String searchValue; - } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentUnitBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentUnitBo.java index c85f3f75..211534ec 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentUnitBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentUnitBo.java @@ -74,7 +74,7 @@ public class ResidentUnitBo extends BaseEntity { * 状态 */ // @NotNull(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long state=1l; + private Long state; /** * 员工人数 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/InspectionPlanPeriodEnum.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/InspectionPlanPeriodEnum.java new file mode 100644 index 00000000..cebf8312 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/InspectionPlanPeriodEnum.java @@ -0,0 +1,38 @@ +package org.dromara.property.domain.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author:yuyongle + * @Date:2025/7/4 10:35 + * @Description:巡检周期枚举 + **/ +@Getter +public enum InspectionPlanPeriodEnum { + /** + * 月/天 + */ + MONTHANDDAY("月/天", "1"), + /** + * 月/天 + */ + WEEK("周", "2"); + + + private final String name; + private final String value; + + InspectionPlanPeriodEnum(String name, String value) { + this.name = name; + this.value = value; + } + + public String getName() { + return this.name; + } + + public String getValue() { + return this.value; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CleanOrderVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CleanOrderVo.java index 6c75b0cf..2017848a 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CleanOrderVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CleanOrderVo.java @@ -116,7 +116,7 @@ public class CleanOrderVo implements Serializable { /** * 是否退订(0:否,1:是) */ - private int isUnbooking; + private Integer isUnbooking; /** * 联系电话 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionItemVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionItemVo.java new file mode 100644 index 00000000..f9e88517 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionItemVo.java @@ -0,0 +1,60 @@ +package org.dromara.property.domain.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.property.domain.InspectionItem; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + +/** + * 巡检项目视图对象 inspection_item + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = InspectionItem.class) +public class InspectionItemVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 项目名称 + */ + @ExcelProperty(value = "项目名称") + private String itemName; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + private Date createTime; + + + /** + * 搜索值 + */ + @ExcelProperty(value = "搜索值") + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPlanDetailVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPlanDetailVo.java new file mode 100644 index 00000000..6b5910b7 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPlanDetailVo.java @@ -0,0 +1,113 @@ +package org.dromara.property.domain.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.property.domain.InspectionPlan; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @Author:yuyongle + * @Date:2025/7/11 17:10 + * @Description: + **/ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = InspectionPlan.class) +public class InspectionPlanDetailVo implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 巡检计划名称 + */ + @ExcelProperty(value = "巡检计划名称") + private String planName; + + /** + * 巡检路线id + */ + @ExcelProperty(value = "巡检路线id") + private Long inspectionRouteId; + + /** + * 巡检周期 + */ + @ExcelProperty(value = "巡检周期") + private String inspectionPlanPeriod; + + /** + * 任务提前分组 + */ + @ExcelProperty(value = "任务提前分组") + private Integer beforeTime; + + /** + * 开始日期 + */ + @ExcelProperty(value = "开始日期") + private Date startDate; + + /** + * 结束日期 + */ + @ExcelProperty(value = "结束日期") + private Date endDate; + + /** + * 签到方式(0现场拍照(默认定位),1现场定位) + */ + @ExcelProperty(value = "签到方式(0现场拍照", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "默=认定位") + private String signType; + + /** + * 允许补检(0允许1不允许) + */ + @ExcelProperty(value = "允许补检(0允许1不允许)") + private String canReexamine; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + /** + * 巡检月 + */ + private String inspectionMonth; + /** + * 巡检日 + */ + private String inspectionDay; + /** + * 巡检周 + */ + private String inspectionWorkday; + /** + * 巡检人员 + */ + private List inspectionPlanStaffVoList; + /** + * 状态(0启用1停用) + */ + private String state; + /** + * 搜索值 + */ + @ExcelProperty(value = "搜索值") + private String searchValue; +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPlanStaffVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPlanStaffVo.java new file mode 100644 index 00000000..92dddbb9 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPlanStaffVo.java @@ -0,0 +1,71 @@ +package org.dromara.property.domain.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.property.domain.InspectionPlanStaff; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 执行计划人信息视图对象 inspection_plan_staff + * + * @author mocheng + * @date 2025-07-14 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = InspectionPlanStaff.class) +public class InspectionPlanStaffVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ExcelProperty(value = "主键") + private Long id; + + /** + * 执行计划人id + */ + @ExcelProperty(value = "执行计划人id") + private Long userId; + /** + * 执行计划人姓名 + */ + @ExcelProperty(value = "执行计划人姓名") + private String userName; + + /** + * 计划id + */ + @ExcelProperty(value = "计划id") + private Long inspectionPlanId; + + /** + * 开始时间 + */ + @ExcelProperty(value = "开始时间") + private Date startTime; + + /** + * 结束时间 + */ + @ExcelProperty(value = "结束时间") + private Date endTime; + + /** + * 搜索值 + */ + @ExcelProperty(value = "搜索值") + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPlanVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPlanVo.java new file mode 100644 index 00000000..d84cd112 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPlanVo.java @@ -0,0 +1,127 @@ +package org.dromara.property.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.NotNull; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.property.domain.InspectionPlan; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 巡检计划视图对象 inspection_plan + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = InspectionPlan.class) +public class InspectionPlanVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 巡检计划名称 + */ + @ExcelProperty(value = "巡检计划名称") + private String planName; + + /** + * 巡检路线id + */ + @ExcelProperty(value = "巡检路线id") + private Long inspectionRouteId; + + /** + * 巡检周期 + */ + @ExcelProperty(value = "巡检周期") + private String inspectionPlanPeriod; + + /** + * 任务提前分组 + */ + @ExcelProperty(value = "任务提前分组") + private Integer beforeTime; + + /** + * 开始日期 + */ + @ExcelProperty(value = "开始日期") + private Date startDate; + + /** + * 结束日期 + */ + @ExcelProperty(value = "结束日期") + private Date endDate; + /** + * 开始时间 + */ + private String startTime; + + /** + * 结束时间 + */ + private String endTime; + + /** + * 签到方式(0现场拍照(默认定位),1现场定位) + */ + @ExcelProperty(value = "签到方式(0现场拍照", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "默=认定位") + private String signType; + + /** + * 允许补检(0允许1不允许) + */ + @ExcelProperty(value = "允许补检(0允许1不允许)") + private String canReexamine; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + /** + * 巡检月 + */ + private String inspectionMonth; + /** + * 巡检日 + */ + private String inspectionDay; + /** + * 巡检周 + */ + private String inspectionWorkday; + /** + * 状态(0启用1停用) + */ + private String state; + /** + * 搜索值 + */ + @ExcelProperty(value = "搜索值") + private String searchValue; + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPointVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPointVo.java new file mode 100644 index 00000000..1ed2899e --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPointVo.java @@ -0,0 +1,83 @@ +package org.dromara.property.domain.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.property.domain.InspectionPoint; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + +/** + * 巡检点视图对象 inspection_point + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = InspectionPoint.class) +public class InspectionPointVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 巡检项目id + */ + @ExcelProperty(value = "巡检项目id") + private Long itemId; + + /** + * 巡检项目id + */ + @ExcelProperty(value = "巡检项目id") + private Long itemName; + + /** + * 巡检点名称 + */ + @ExcelProperty(value = "巡检点名称") + private String pointName; + + /** + * 巡检点类型 + */ + @ExcelProperty(value = "巡检点类型") + private String pointType; + + /** + * nfc编码 + */ + @ExcelProperty(value = "nfc编码") + private String nfcCode; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + private Date createTime; + + /** + * 搜索值 + */ + @ExcelProperty(value = "搜索值") + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionRouteVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionRouteVo.java new file mode 100644 index 00000000..d533d1a1 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionRouteVo.java @@ -0,0 +1,62 @@ +package org.dromara.property.domain.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.property.domain.InspectionRoute; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + +/** + * 巡检路线视图对象 inspection_route + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = InspectionRoute.class) +public class InspectionRouteVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 路线名称 + */ + @ExcelProperty(value = "路线名称") + private String routeName; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + private Date createTime; + /** + * 排序 + */ + @ExcelProperty(value = "排序") + private Integer sort; + /** + * 搜索值 + */ + @ExcelProperty(value = "搜索值") + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionStaffVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionStaffVo.java new file mode 100644 index 00000000..c93e65f6 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionStaffVo.java @@ -0,0 +1,66 @@ +package org.dromara.property.domain.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.property.domain.InspectionStaff; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 执行计划人信息视图对象 inspection_staff + * + * @author mocheng + * @date 2025-07-14 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = InspectionStaff.class) +public class InspectionStaffVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ExcelProperty(value = "主键") + private Long id; + + /** + * 实际巡检人id + */ + @ExcelProperty(value = "实际巡检人id") + private Long userId; + + /** + * 计划id + */ + @ExcelProperty(value = "计划id") + private Long inspectionPlanId; + + /** + * 实际巡检开始时间 + */ + @ExcelProperty(value = "实际巡检开始时间") + private Date startTime; + + /** + * 实际巡检结束时间 + */ + @ExcelProperty(value = "实际巡检结束时间") + private Date endTime; + + /** + * 搜索值 + */ + @ExcelProperty(value = "搜索值") + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskVo.java new file mode 100644 index 00000000..442448f7 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskVo.java @@ -0,0 +1,102 @@ +package org.dromara.property.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.property.domain.InspectionTask; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 巡检任务视图对象 inspection_task + * + * @author mocheng + * @date 2025-07-11 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = InspectionTask.class) +public class InspectionTaskVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 巡检计划id + */ + @ExcelProperty(value = "巡检计划id") + private Long inspectionPlanId; + + /** + * 巡检计划名称 + */ + private String planName; + + /** + * 实际巡检时间 + */ + @ExcelProperty(value = "实际巡检时间") + private Date actInsTime; + + /** + * 当前巡检人 + */ + @ExcelProperty(value = "当前巡检人") + private Long actUserId; + + /** + * 巡检人名称 + */ + @ExcelProperty(value = "巡检人名称") + private Long actUserName; + + /** + * 巡检方式 + */ + @ExcelProperty(value = "巡检方式") + private String taskType; + + /** + * 转移描述 + */ + @ExcelProperty(value = "转移描述") + private String transferDesc; + + /** + * 巡检状态 + */ + @ExcelProperty(value = "巡检状态") + private String status; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + /** + * 计划巡检时间范围 + */ + private String planInsTime; + /** + * 搜索值 + */ + @ExcelProperty(value = "搜索值") + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionItemMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionItemMapper.java new file mode 100644 index 00000000..e6e55d48 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionItemMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.property.domain.InspectionItem; +import org.dromara.property.domain.vo.InspectionItemVo; + +/** + * 巡检项目Mapper接口 + * + * @author mocheng + * @date 2025-07-11 + */ +@Mapper +public interface InspectionItemMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionPlanMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionPlanMapper.java new file mode 100644 index 00000000..cb381507 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionPlanMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.property.domain.InspectionPlan; +import org.dromara.property.domain.vo.InspectionPlanVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 巡检计划Mapper接口 + * + * @author mocheng + * @date 2025-07-11 + */ +@Mapper +public interface InspectionPlanMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionPlanStaffMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionPlanStaffMapper.java new file mode 100644 index 00000000..39834a16 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionPlanStaffMapper.java @@ -0,0 +1,16 @@ +package org.dromara.property.mapper; +import org.apache.ibatis.annotations.Mapper; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.property.domain.InspectionPlanStaff; +import org.dromara.property.domain.vo.InspectionPlanStaffVo; + +/** + * 执行计划人信息Mapper接口 + * + * @author mocheng + * @date 2025-07-14 + */ +@Mapper +public interface InspectionPlanStaffMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionPointMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionPointMapper.java new file mode 100644 index 00000000..4d10b44e --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionPointMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.property.domain.InspectionPoint; +import org.dromara.property.domain.vo.InspectionPointVo; + +/** + * 巡检点Mapper接口 + * + * @author mocheng + * @date 2025-07-11 + */ +@Mapper +public interface InspectionPointMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionRouteMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionRouteMapper.java new file mode 100644 index 00000000..88ea1d8b --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionRouteMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.property.domain.InspectionRoute; +import org.dromara.property.domain.vo.InspectionRouteVo; + +/** + * 巡检路线Mapper接口 + * + * @author mocheng + * @date 2025-07-11 + */ +@Mapper +public interface InspectionRouteMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionStaffMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionStaffMapper.java new file mode 100644 index 00000000..145d95d2 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionStaffMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.property.domain.InspectionStaff; +import org.dromara.property.domain.vo.InspectionStaffVo; + +/** + * 执行计划人信息Mapper接口 + * + * @author mocheng + * @date 2025-07-14 + */ +@Mapper +public interface InspectionStaffMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionTaskMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionTaskMapper.java new file mode 100644 index 00000000..70c3421b --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionTaskMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.property.domain.InspectionTask; +import org.dromara.property.domain.vo.InspectionTaskVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 巡检任务Mapper接口 + * + * @author mocheng + * @date 2025-07-11 + */ +@Mapper +public interface InspectionTaskMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapperMPJ/InspectionTaskMPJMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapperMPJ/InspectionTaskMPJMapper.java new file mode 100644 index 00000000..0fdb163c --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapperMPJ/InspectionTaskMPJMapper.java @@ -0,0 +1,18 @@ +package org.dromara.property.mapperMPJ; + +import com.github.yulichang.base.MPJBaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.property.domain.InspectionTask; +import org.dromara.property.domain.vo.InspectionTaskVo; + +/** + * 巡检任务Mapper接口 + * + * @author mocheng + * @date 2025-07-11 + */ +@Mapper +public interface InspectionTaskMPJMapper extends MPJBaseMapper { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionItemService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionItemService.java new file mode 100644 index 00000000..a734abe8 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionItemService.java @@ -0,0 +1,68 @@ +package org.dromara.property.service; + +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.property.domain.bo.InspectionItemBo; +import org.dromara.property.domain.vo.InspectionItemVo; + +import java.util.Collection; +import java.util.List; + +/** + * 巡检项目Service接口 + * + * @author mocheng + * @date 2025-07-11 + */ +public interface IInspectionItemService { + + /** + * 查询巡检项目 + * + * @param id 主键 + * @return 巡检项目 + */ + InspectionItemVo queryById(Long id); + + /** + * 分页查询巡检项目列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 巡检项目分页列表 + */ + TableDataInfo queryPageList(InspectionItemBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的巡检项目列表 + * + * @param bo 查询条件 + * @return 巡检项目列表 + */ + List queryList(InspectionItemBo bo); + + /** + * 新增巡检项目 + * + * @param bo 巡检项目 + * @return 是否新增成功 + */ + Boolean insertByBo(InspectionItemBo bo); + + /** + * 修改巡检项目 + * + * @param bo 巡检项目 + * @return 是否修改成功 + */ + Boolean updateByBo(InspectionItemBo bo); + + /** + * 校验并批量删除巡检项目信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPlanService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPlanService.java new file mode 100644 index 00000000..4fb556ac --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPlanService.java @@ -0,0 +1,69 @@ +package org.dromara.property.service; + +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.property.domain.bo.InspectionPlanBo; +import org.dromara.property.domain.vo.InspectionPlanDetailVo; +import org.dromara.property.domain.vo.InspectionPlanVo; + +import java.util.Collection; +import java.util.List; + +/** + * 巡检计划Service接口 + * + * @author mocheng + * @date 2025-07-11 + */ +public interface IInspectionPlanService { + + /** + * 查询巡检计划 + * + * @param id 主键 + * @return 巡检计划 + */ + InspectionPlanDetailVo queryById(Long id); + + /** + * 分页查询巡检计划列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 巡检计划分页列表 + */ + TableDataInfo queryPageList(InspectionPlanBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的巡检计划列表 + * + * @param bo 查询条件 + * @return 巡检计划列表 + */ + List queryList(InspectionPlanBo bo); + + /** + * 新增巡检计划 + * + * @param bo 巡检计划 + * @return 是否新增成功 + */ + Boolean insertByBo(InspectionPlanBo bo); + + /** + * 修改巡检计划 + * + * @param bo 巡检计划 + * @return 是否修改成功 + */ + Boolean updateByBo(InspectionPlanBo bo); + + /** + * 校验并批量删除巡检计划信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPlanStaffService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPlanStaffService.java new file mode 100644 index 00000000..4c7e37a3 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPlanStaffService.java @@ -0,0 +1,68 @@ +package org.dromara.property.service; + +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.property.domain.bo.InspectionPlanStaffBo; +import org.dromara.property.domain.vo.InspectionPlanStaffVo; + +import java.util.Collection; +import java.util.List; + +/** + * 执行计划人信息Service接口 + * + * @author mocheng + * @date 2025-07-14 + */ +public interface IInspectionPlanStaffService { + + /** + * 查询执行计划人信息 + * + * @param id 主键 + * @return 执行计划人信息 + */ + InspectionPlanStaffVo queryById(Long id); + + /** + * 分页查询执行计划人信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 执行计划人信息分页列表 + */ + TableDataInfo queryPageList(InspectionPlanStaffBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的执行计划人信息列表 + * + * @param bo 查询条件 + * @return 执行计划人信息列表 + */ + List queryList(InspectionPlanStaffBo bo); + + /** + * 新增执行计划人信息 + * + * @param bo 执行计划人信息 + * @return 是否新增成功 + */ + Boolean insertByBo(InspectionPlanStaffBo bo); + + /** + * 修改执行计划人信息 + * + * @param bo 执行计划人信息 + * @return 是否修改成功 + */ + Boolean updateByBo(InspectionPlanStaffBo bo); + + /** + * 校验并批量删除执行计划人信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPointService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPointService.java new file mode 100644 index 00000000..95beaa24 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPointService.java @@ -0,0 +1,67 @@ +package org.dromara.property.service; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.property.domain.bo.InspectionPointBo; +import org.dromara.property.domain.vo.InspectionPointVo; + +import java.util.Collection; +import java.util.List; + +/** + * 巡检点Service接口 + * + * @author mocheng + * @date 2025-07-11 + */ +public interface IInspectionPointService { + + /** + * 查询巡检点 + * + * @param id 主键 + * @return 巡检点 + */ + InspectionPointVo queryById(Long id); + + /** + * 分页查询巡检点列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 巡检点分页列表 + */ + TableDataInfo queryPageList(InspectionPointBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的巡检点列表 + * + * @param bo 查询条件 + * @return 巡检点列表 + */ + List queryList(InspectionPointBo bo); + + /** + * 新增巡检点 + * + * @param bo 巡检点 + * @return 是否新增成功 + */ + Boolean insertByBo(InspectionPointBo bo); + + /** + * 修改巡检点 + * + * @param bo 巡检点 + * @return 是否修改成功 + */ + Boolean updateByBo(InspectionPointBo bo); + + /** + * 校验并批量删除巡检点信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionRouteService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionRouteService.java new file mode 100644 index 00000000..10a5fea6 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionRouteService.java @@ -0,0 +1,69 @@ +package org.dromara.property.service; + + +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.property.domain.bo.InspectionRouteBo; +import org.dromara.property.domain.vo.InspectionRouteVo; + +import java.util.Collection; +import java.util.List; + +/** + * 巡检路线Service接口 + * + * @author mocheng + * @date 2025-07-11 + */ +public interface IInspectionRouteService { + + /** + * 查询巡检路线 + * + * @param id 主键 + * @return 巡检路线 + */ + InspectionRouteVo queryById(Long id); + + /** + * 分页查询巡检路线列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 巡检路线分页列表 + */ + TableDataInfo queryPageList(InspectionRouteBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的巡检路线列表 + * + * @param bo 查询条件 + * @return 巡检路线列表 + */ + List queryList(InspectionRouteBo bo); + + /** + * 新增巡检路线 + * + * @param bo 巡检路线 + * @return 是否新增成功 + */ + Boolean insertByBo(InspectionRouteBo bo); + + /** + * 修改巡检路线 + * + * @param bo 巡检路线 + * @return 是否修改成功 + */ + Boolean updateByBo(InspectionRouteBo bo); + + /** + * 校验并批量删除巡检路线信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionStaffService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionStaffService.java new file mode 100644 index 00000000..23d1b1ec --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionStaffService.java @@ -0,0 +1,68 @@ +package org.dromara.property.service; + +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.property.domain.bo.InspectionStaffBo; +import org.dromara.property.domain.vo.InspectionStaffVo; + +import java.util.Collection; +import java.util.List; + +/** + * 执行计划人信息Service接口 + * + * @author mocheng + * @date 2025-07-14 + */ +public interface IInspectionStaffService { + + /** + * 查询执行计划人信息 + * + * @param id 主键 + * @return 执行计划人信息 + */ + InspectionStaffVo queryById(Long id); + + /** + * 分页查询执行计划人信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 执行计划人信息分页列表 + */ + TableDataInfo queryPageList(InspectionStaffBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的执行计划人信息列表 + * + * @param bo 查询条件 + * @return 执行计划人信息列表 + */ + List queryList(InspectionStaffBo bo); + + /** + * 新增执行计划人信息 + * + * @param bo 执行计划人信息 + * @return 是否新增成功 + */ + Boolean insertByBo(InspectionStaffBo bo); + + /** + * 修改执行计划人信息 + * + * @param bo 执行计划人信息 + * @return 是否修改成功 + */ + Boolean updateByBo(InspectionStaffBo bo); + + /** + * 校验并批量删除执行计划人信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskService.java new file mode 100644 index 00000000..a0906f27 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskService.java @@ -0,0 +1,68 @@ +package org.dromara.property.service; + +import org.dromara.property.domain.vo.InspectionTaskVo; +import org.dromara.property.domain.bo.InspectionTaskBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 巡检任务Service接口 + * + * @author mocheng + * @date 2025-07-11 + */ +public interface IInspectionTaskService { + + /** + * 查询巡检任务 + * + * @param id 主键 + * @return 巡检任务 + */ + InspectionTaskVo queryById(Long id); + + /** + * 分页查询巡检任务列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 巡检任务分页列表 + */ + TableDataInfo queryPageList(InspectionTaskBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的巡检任务列表 + * + * @param bo 查询条件 + * @return 巡检任务列表 + */ + List queryList(InspectionTaskBo bo); + + /** + * 新增巡检任务 + * + * @param bo 巡检任务 + * @return 是否新增成功 + */ + Boolean insertByBo(InspectionTaskBo bo); + + /** + * 修改巡检任务 + * + * @param bo 巡检任务 + * @return 是否修改成功 + */ + Boolean updateByBo(InspectionTaskBo bo); + + /** + * 校验并批量删除巡检任务信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CleanOrderServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CleanOrderServiceImpl.java index 4c530be4..37cad524 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CleanOrderServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CleanOrderServiceImpl.java @@ -102,7 +102,8 @@ public class CleanOrderServiceImpl implements ICleanOrderService { public TableDataInfo queryPageList(CleanOrderBo bo, PageQuery pageQuery) { // 构造条件查询器,返回的是一个集合 LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectForPage(pageQuery.build(), lqw); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw,CleanOrderVo.class); +// Page result = baseMapper.selectForPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } @@ -133,10 +134,12 @@ public class CleanOrderServiceImpl implements ICleanOrderService { lqw.eq(bo.getStarTime() != null, CleanOrder::getStarTime, bo.getStarTime()); lqw.eq(bo.getEndTime() != null, CleanOrder::getEndTime, bo.getEndTime()); lqw.eq(bo.getUnitId() != null, CleanOrder::getUnitId, bo.getUnitId()); -// lqw.eq(StringUtils.isNotBlank(bo.getUnit()), CleanOrder::getState, bo.getState()); + lqw.eq(bo.getState() != null, CleanOrder::getState, bo.getState()); // lqw.eq(StringUtils.isNotBlank(bo.getUnit()), CleanOrder::getUnit, bo.getUnit()); lqw.eq(StringUtils.isNotBlank(bo.getPersion()), CleanOrder::getPersion, bo.getPersion()); lqw.eq(StringUtils.isNotBlank(bo.getPhone()), CleanOrder::getPhone, bo.getPhone()); + //将lqw中的所有条件都封装到一个params对象中集合中 + return lqw; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionItemServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionItemServiceImpl.java new file mode 100644 index 00000000..f897b352 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionItemServiceImpl.java @@ -0,0 +1,133 @@ +package org.dromara.property.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.property.domain.InspectionItem; +import org.dromara.property.domain.bo.InspectionItemBo; +import org.dromara.property.domain.vo.InspectionItemVo; +import org.dromara.property.mapper.InspectionItemMapper; +import org.dromara.property.service.IInspectionItemService; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 巡检项目Service业务层处理 + * + * @author mocheng + * @date 2025-07-11 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class InspectionItemServiceImpl implements IInspectionItemService { + + private final InspectionItemMapper baseMapper; + + /** + * 查询巡检项目 + * + * @param id 主键 + * @return 巡检项目 + */ + @Override + public InspectionItemVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询巡检项目列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 巡检项目分页列表 + */ + @Override + public TableDataInfo queryPageList(InspectionItemBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的巡检项目列表 + * + * @param bo 查询条件 + * @return 巡检项目列表 + */ + @Override + public List queryList(InspectionItemBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(InspectionItemBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(InspectionItem::getId); + lqw.like(StringUtils.isNotBlank(bo.getItemName()), InspectionItem::getItemName, bo.getItemName()); + lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), InspectionItem::getSearchValue, bo.getSearchValue()); + return lqw; + } + + /** + * 新增巡检项目 + * + * @param bo 巡检项目 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(InspectionItemBo bo) { + InspectionItem add = MapstructUtils.convert(bo, InspectionItem.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改巡检项目 + * + * @param bo 巡检项目 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(InspectionItemBo bo) { + InspectionItem update = MapstructUtils.convert(bo, InspectionItem.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(InspectionItem entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除巡检项目信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java new file mode 100644 index 00000000..02c8aa4a --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java @@ -0,0 +1,184 @@ +package org.dromara.property.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.property.domain.InspectionPlan; +import org.dromara.property.domain.InspectionPlanStaff; +import org.dromara.property.domain.bo.InspectionPlanBo; +import org.dromara.property.domain.bo.InspectionPlanStaffBo; +import org.dromara.property.domain.vo.InspectionPlanDetailVo; +import org.dromara.property.domain.vo.InspectionPlanStaffVo; +import org.dromara.property.domain.vo.InspectionPlanVo; +import org.dromara.property.domain.vo.ResidentPersonVo; +import org.dromara.property.mapper.InspectionPlanMapper; +import org.dromara.property.mapper.InspectionPlanStaffMapper; +import org.dromara.property.mapper.ResidentPersonMapper; +import org.dromara.property.service.IInspectionPlanService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 巡检计划Service业务层处理 + * + * @author mocheng + * @date 2025-07-11 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class InspectionPlanServiceImpl implements IInspectionPlanService { + + private final InspectionPlanMapper baseMapper; + private final ResidentPersonMapper residentPersonMapper; + private final InspectionPlanStaffMapper inspectionPlanStaffMapper; + + /** + * 查询巡检计划 + * + * @param id 主键 + * @return 巡检计划 + */ + @Override + public InspectionPlanDetailVo queryById(Long id){ + InspectionPlanVo inspectionPlanVo = baseMapper.selectVoById(id); + InspectionPlanDetailVo inspectionPlanDetailVo = BeanUtil.copyProperties(inspectionPlanVo, InspectionPlanDetailVo.class); + LambdaQueryWrapper staffQueryWrapper= new LambdaQueryWrapper<>(); + staffQueryWrapper.eq(InspectionPlanStaff::getInspectionPlanId, id); + List inspectionPlanStaffVos =inspectionPlanStaffMapper.selectVoList(staffQueryWrapper); + List userIdlist = inspectionPlanStaffVos.stream() + .map(vo -> vo.getUserId()) + .distinct() + .collect(Collectors.toList()); + if(CollectionUtil.isNotEmpty(userIdlist)){ + new ServiceException("执行计划人不存在"); + } + List residentPersonVolist = residentPersonMapper.selectVoByIds(userIdlist); + if(CollectionUtil.isNotEmpty(residentPersonVolist)){ + inspectionPlanStaffVos.stream().forEach(s->{ + ResidentPersonVo residentPersonVo = residentPersonVolist.stream() + .filter(vo -> vo.getId() != null && vo.getId().equals(s.getUserId())).findFirst().orElse(null); + s.setUserName(residentPersonVo.getUserName()); + }); + inspectionPlanDetailVo.setInspectionPlanStaffVoList(inspectionPlanStaffVos); + } + + return inspectionPlanDetailVo; + } + + /** + * 分页查询巡检计划列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 巡检计划分页列表 + */ + @Override + public TableDataInfo queryPageList(InspectionPlanBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的巡检计划列表 + * + * @param bo 查询条件 + * @return 巡检计划列表 + */ + @Override + public List queryList(InspectionPlanBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(InspectionPlanBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(InspectionPlan::getId); + lqw.like(StringUtils.isNotBlank(bo.getPlanName()), InspectionPlan::getPlanName, bo.getPlanName()); + lqw.eq(bo.getInspectionRouteId() != null, InspectionPlan::getInspectionRouteId, bo.getInspectionRouteId()); + lqw.eq(StringUtils.isNotBlank(bo.getInspectionPlanPeriod()), InspectionPlan::getInspectionPlanPeriod, bo.getInspectionPlanPeriod()); + lqw.eq(bo.getStartDate() != null, InspectionPlan::getStartDate, bo.getStartDate()); + lqw.eq(bo.getEndDate() != null, InspectionPlan::getEndDate, bo.getEndDate()); + lqw.eq(StringUtils.isNotBlank(bo.getSignType()), InspectionPlan::getSignType, bo.getSignType()); + lqw.eq(StringUtils.isNotBlank(bo.getCanReexamine()), InspectionPlan::getCanReexamine, bo.getCanReexamine()); + lqw.like(StringUtils.isNotBlank(bo.getState()), InspectionPlan::getState, bo.getState()); + lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), InspectionPlan::getSearchValue, bo.getSearchValue()); + return lqw; + } + + /** + * 新增巡检计划 + * + * @param bo 巡检计划 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(InspectionPlanBo bo) { + InspectionPlan add = MapstructUtils.convert(bo, InspectionPlan.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + List inspectionPlanStaffBoList = bo.getInspectionPlanStaffBoList(); + if(CollectionUtil.isNotEmpty(inspectionPlanStaffBoList)){ + for (InspectionPlanStaffBo staffBo : inspectionPlanStaffBoList) { + staffBo.setInspectionPlanId(add.getId()); + } + inspectionPlanStaffMapper.insertBatch(BeanUtil.copyToList(inspectionPlanStaffBoList, InspectionPlanStaff.class )); + } + } + return flag; + } + + /** + * 修改巡检计划 + * + * @param bo 巡检计划 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(InspectionPlanBo bo) { + InspectionPlan update = MapstructUtils.convert(bo, InspectionPlan.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(InspectionPlan entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除巡检计划信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanStaffServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanStaffServiceImpl.java new file mode 100644 index 00000000..9a3e4a68 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanStaffServiceImpl.java @@ -0,0 +1,136 @@ +package org.dromara.property.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.property.domain.InspectionPlanStaff; +import org.dromara.property.domain.bo.InspectionPlanStaffBo; +import org.dromara.property.domain.vo.InspectionPlanStaffVo; +import org.dromara.property.mapper.InspectionPlanStaffMapper; +import org.dromara.property.service.IInspectionPlanStaffService; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 执行计划人信息Service业务层处理 + * + * @author mocheng + * @date 2025-07-14 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class InspectionPlanStaffServiceImpl implements IInspectionPlanStaffService { + + private final InspectionPlanStaffMapper baseMapper; + + /** + * 查询执行计划人信息 + * + * @param id 主键 + * @return 执行计划人信息 + */ + @Override + public InspectionPlanStaffVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询执行计划人信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 执行计划人信息分页列表 + */ + @Override + public TableDataInfo queryPageList(InspectionPlanStaffBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的执行计划人信息列表 + * + * @param bo 查询条件 + * @return 执行计划人信息列表 + */ + @Override + public List queryList(InspectionPlanStaffBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(InspectionPlanStaffBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(InspectionPlanStaff::getId); + lqw.eq(bo.getUserId() != null, InspectionPlanStaff::getUserId, bo.getUserId()); + lqw.eq(bo.getInspectionPlanId() != null, InspectionPlanStaff::getInspectionPlanId, bo.getInspectionPlanId()); + lqw.eq(bo.getStartTime() != null, InspectionPlanStaff::getStartTime, bo.getStartTime()); + lqw.eq(bo.getEndTime() != null, InspectionPlanStaff::getEndTime, bo.getEndTime()); + lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), InspectionPlanStaff::getSearchValue, bo.getSearchValue()); + return lqw; + } + + /** + * 新增执行计划人信息 + * + * @param bo 执行计划人信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(InspectionPlanStaffBo bo) { + InspectionPlanStaff add = MapstructUtils.convert(bo, InspectionPlanStaff.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改执行计划人信息 + * + * @param bo 执行计划人信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(InspectionPlanStaffBo bo) { + InspectionPlanStaff update = MapstructUtils.convert(bo, InspectionPlanStaff.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(InspectionPlanStaff entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除执行计划人信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPointServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPointServiceImpl.java new file mode 100644 index 00000000..1bed47e4 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPointServiceImpl.java @@ -0,0 +1,151 @@ +package org.dromara.property.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.property.domain.InspectionPoint; +import org.dromara.property.domain.bo.InspectionPointBo; +import org.dromara.property.domain.vo.InspectionPlanVo; +import org.dromara.property.domain.vo.InspectionPointVo; +import org.dromara.property.mapper.InspectionPlanMapper; +import org.dromara.property.mapper.InspectionPointMapper; +import org.dromara.property.service.IInspectionPointService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Collection; +import java.util.stream.Collectors; + +/** + * 巡检点Service业务层处理 + * + * @author mocheng + * @date 2025-07-11 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class InspectionPointServiceImpl implements IInspectionPointService { + + private final InspectionPointMapper baseMapper; + private final InspectionPlanMapper inspectionPlanMapper; + + /** + * 查询巡检点 + * + * @param id 主键 + * @return 巡检点 + */ + @Override + public InspectionPointVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询巡检点列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 巡检点分页列表 + */ + @Override + public TableDataInfo queryPageList(InspectionPointBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + if (CollectionUtil.isEmpty(result.getRecords())) { + return TableDataInfo.build(result); + } + List itemIdList = result.getRecords().stream() + .map(vo -> vo.getItemId()) + .distinct() + .collect(Collectors.toList()); + List inspectionPlanVos = inspectionPlanMapper.selectVoByIds(itemIdList); + + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的巡检点列表 + * + * @param bo 查询条件 + * @return 巡检点列表 + */ + @Override + public List queryList(InspectionPointBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(InspectionPointBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(InspectionPoint::getId); + lqw.eq(bo.getItemId() != null, InspectionPoint::getItemId, bo.getItemId()); + lqw.like(StringUtils.isNotBlank(bo.getPointName()), InspectionPoint::getPointName, bo.getPointName()); + lqw.eq(StringUtils.isNotBlank(bo.getPointType()), InspectionPoint::getPointType, bo.getPointType()); + lqw.eq(StringUtils.isNotBlank(bo.getNfcCode()), InspectionPoint::getNfcCode, bo.getNfcCode()); + lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), InspectionPoint::getSearchValue, bo.getSearchValue()); + return lqw; + } + + /** + * 新增巡检点 + * + * @param bo 巡检点 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(InspectionPointBo bo) { + InspectionPoint add = MapstructUtils.convert(bo, InspectionPoint.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改巡检点 + * + * @param bo 巡检点 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(InspectionPointBo bo) { + InspectionPoint update = MapstructUtils.convert(bo, InspectionPoint.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(InspectionPoint entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除巡检点信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionRouteServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionRouteServiceImpl.java new file mode 100644 index 00000000..e3fae498 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionRouteServiceImpl.java @@ -0,0 +1,133 @@ +package org.dromara.property.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.property.domain.InspectionRoute; +import org.dromara.property.domain.bo.InspectionRouteBo; +import org.dromara.property.domain.vo.InspectionRouteVo; +import org.dromara.property.mapper.InspectionRouteMapper; +import org.dromara.property.service.IInspectionRouteService; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 巡检路线Service业务层处理 + * + * @author mocheng + * @date 2025-07-11 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class InspectionRouteServiceImpl implements IInspectionRouteService { + + private final InspectionRouteMapper baseMapper; + + /** + * 查询巡检路线 + * + * @param id 主键 + * @return 巡检路线 + */ + @Override + public InspectionRouteVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询巡检路线列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 巡检路线分页列表 + */ + @Override + public TableDataInfo queryPageList(InspectionRouteBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的巡检路线列表 + * + * @param bo 查询条件 + * @return 巡检路线列表 + */ + @Override + public List queryList(InspectionRouteBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(InspectionRouteBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(InspectionRoute::getId); + lqw.like(StringUtils.isNotBlank(bo.getRouteName()), InspectionRoute::getRouteName, bo.getRouteName()); + lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), InspectionRoute::getSearchValue, bo.getSearchValue()); + return lqw; + } + + /** + * 新增巡检路线 + * + * @param bo 巡检路线 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(InspectionRouteBo bo) { + InspectionRoute add = MapstructUtils.convert(bo, InspectionRoute.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改巡检路线 + * + * @param bo 巡检路线 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(InspectionRouteBo bo) { + InspectionRoute update = MapstructUtils.convert(bo, InspectionRoute.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(InspectionRoute entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除巡检路线信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionStaffServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionStaffServiceImpl.java new file mode 100644 index 00000000..1631223e --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionStaffServiceImpl.java @@ -0,0 +1,136 @@ +package org.dromara.property.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.property.domain.InspectionStaff; +import org.dromara.property.domain.bo.InspectionStaffBo; +import org.dromara.property.domain.vo.InspectionStaffVo; +import org.dromara.property.mapper.InspectionStaffMapper; +import org.dromara.property.service.IInspectionStaffService; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 执行计划人信息Service业务层处理 + * + * @author mocheng + * @date 2025-07-14 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class InspectionStaffServiceImpl implements IInspectionStaffService { + + private final InspectionStaffMapper baseMapper; + + /** + * 查询执行计划人信息 + * + * @param id 主键 + * @return 执行计划人信息 + */ + @Override + public InspectionStaffVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询执行计划人信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 执行计划人信息分页列表 + */ + @Override + public TableDataInfo queryPageList(InspectionStaffBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的执行计划人信息列表 + * + * @param bo 查询条件 + * @return 执行计划人信息列表 + */ + @Override + public List queryList(InspectionStaffBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(InspectionStaffBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(InspectionStaff::getId); + lqw.eq(bo.getUserId() != null, InspectionStaff::getUserId, bo.getUserId()); + lqw.eq(bo.getInspectionPlanId() != null, InspectionStaff::getInspectionPlanId, bo.getInspectionPlanId()); + lqw.eq(bo.getStartTime() != null, InspectionStaff::getStartTime, bo.getStartTime()); + lqw.eq(bo.getEndTime() != null, InspectionStaff::getEndTime, bo.getEndTime()); + lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), InspectionStaff::getSearchValue, bo.getSearchValue()); + return lqw; + } + + /** + * 新增执行计划人信息 + * + * @param bo 执行计划人信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(InspectionStaffBo bo) { + InspectionStaff add = MapstructUtils.convert(bo, InspectionStaff.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改执行计划人信息 + * + * @param bo 执行计划人信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(InspectionStaffBo bo) { + InspectionStaff update = MapstructUtils.convert(bo, InspectionStaff.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(InspectionStaff entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除执行计划人信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskServiceImpl.java new file mode 100644 index 00000000..8c0d026f --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskServiceImpl.java @@ -0,0 +1,159 @@ +package org.dromara.property.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.property.domain.InspectionPlan; +import org.dromara.property.domain.InspectionTask; +import org.dromara.property.domain.bo.InspectionTaskBo; +import org.dromara.property.domain.vo.InspectionTaskVo; +import org.dromara.property.mapper.InspectionPlanMapper; +import org.dromara.property.mapper.InspectionTaskMapper; +import org.dromara.property.service.IInspectionTaskService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static java.util.stream.Collectors.toMap; +import static java.util.stream.Collectors.toSet; + +/** + * 巡检任务Service业务层处理 + * + * @author mocheng + * @date 2025-07-11 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class InspectionTaskServiceImpl implements IInspectionTaskService { + + private final InspectionTaskMapper baseMapper; + @Autowired + private final InspectionPlanMapper inspectionPlanMapper; + + /** + * 查询巡检任务 + * + * @param id 主键 + * @return 巡检任务 + */ + @Override + public InspectionTaskVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询巡检任务列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 巡检任务分页列表 + */ + @Override + public TableDataInfo queryPageList(InspectionTaskBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + if (result.getRecords().size() > 0) { + addPlanNameInfo(result); + } + return TableDataInfo.build(result); + } + private void addPlanNameInfo(Page inspectionTaskVoPage) { + // 提取用户userId,方便批量查询 + Set planIds = inspectionTaskVoPage.getRecords().stream().map(InspectionTaskVo::getInspectionPlanId).collect(toSet()); + // 根据planId查询planName + List inspectionPlanList = inspectionPlanMapper.selectList(Wrappers.lambdaQuery(InspectionPlan.class).in(InspectionPlan::getId, planIds)); + // 构造映射关系,方便匹配planId与planName + Map hashMap = inspectionPlanList.stream().collect(toMap(InspectionPlan::getId, InspectionPlan::getPlanName)); + // 将查询补充的信息添加到Vo中 + inspectionTaskVoPage.getRecords().forEach(e -> e.setPlanName(hashMap.get(e.getInspectionPlanId()))); + } + /** + * 查询符合条件的巡检任务列表 + * + * @param bo 查询条件 + * @return 巡检任务列表 + */ + @Override + public List queryList(InspectionTaskBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(InspectionTaskBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(InspectionTask::getId); + lqw.eq(bo.getInspectionPlanId() != null, InspectionTask::getInspectionPlanId, bo.getInspectionPlanId()); + lqw.eq(bo.getActInsTime() != null, InspectionTask::getActInsTime, bo.getActInsTime()); + lqw.eq(bo.getActUserId() != null, InspectionTask::getActUserId, bo.getActUserId()); + lqw.eq(StringUtils.isNotBlank(bo.getTaskType()), InspectionTask::getTaskType, bo.getTaskType()); + lqw.eq(StringUtils.isNotBlank(bo.getTransferDesc()), InspectionTask::getTransferDesc, bo.getTransferDesc()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), InspectionTask::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), InspectionTask::getSearchValue, bo.getSearchValue()); + return lqw; + } + + /** + * 新增巡检任务 + * + * @param bo 巡检任务 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(InspectionTaskBo bo) { + InspectionTask add = MapstructUtils.convert(bo, InspectionTask.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改巡检任务 + * + * @param bo 巡检任务 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(InspectionTaskBo bo) { + InspectionTask update = MapstructUtils.convert(bo, InspectionTask.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(InspectionTask entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除巡检任务信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java index ddc9fc83..5cafdb2f 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java @@ -141,11 +141,12 @@ public class MeetServiceImpl implements IMeetService { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByAsc(Meet::getId); lqw.like(StringUtils.isNotBlank(bo.getName()), Meet::getName, bo.getName()); - lqw.eq(StringUtils.isNotBlank(bo.getLocation()), Meet::getLocation, bo.getLocation()); - lqw.eq(bo.getPersonNumber() != null, Meet::getPersonNumber, bo.getPersonNumber()); - lqw.eq(bo.getBaseService() != null, Meet::getBaseService, bo.getBaseService()); - lqw.eq(bo.getBasePrice() != null, Meet::getBasePrice, bo.getBasePrice()); - lqw.eq(bo.getAttach() != null, Meet::getAttach, bo.getAttach()); +// lqw.eq(StringUtils.isNotBlank(bo.getLocation()), Meet::getLocation, bo.getLocation()); +// lqw.eq(bo.getPersonNumber() != null, Meet::getPersonNumber, bo.getPersonNumber()); +// lqw.eq(bo.getBaseService() != null, Meet::getBaseService, bo.getBaseService()); +// lqw.eq(bo.getBasePrice() != null, Meet::getBasePrice, bo.getBasePrice()); + lqw.eq(bo.getPrincipals() != null, Meet::getPrincipals, bo.getPrincipals()); + lqw.eq(bo.getStatus() != null, Meet::getStatus, bo.getStatus()); return lqw; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java index e7a9269d..adf8c123 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java @@ -74,7 +74,7 @@ public class ServiceWorkOrdersTypeServiceImpl implements IServiceWorkOrdersTypeS private LambdaQueryWrapper buildQueryWrapper(ServiceWorkOrdersTypeBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.orderByAsc(ServiceWorkOrdersType::getId); + lqw.orderByAsc(ServiceWorkOrdersType::getSort); lqw.eq(StringUtils.isNotBlank(bo.getOrderTypeNo()), ServiceWorkOrdersType::getOrderTypeNo, bo.getOrderTypeNo()); lqw.like(StringUtils.isNotBlank(bo.getOrderTypeName()), ServiceWorkOrdersType::getOrderTypeName, bo.getOrderTypeName()); lqw.eq(StringUtils.isNotBlank(bo.getOperationMode()), ServiceWorkOrdersType::getOperationMode, bo.getOperationMode()); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/InspectionTasks.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/InspectionTasks.java new file mode 100644 index 00000000..8801e231 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/InspectionTasks.java @@ -0,0 +1,139 @@ + +package org.dromara.property.tasks; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.RequiredArgsConstructor; +import org.dromara.property.domain.InspectionTask; +import org.dromara.property.domain.bo.InspectionPlanBo; +import org.dromara.property.domain.vo.InspectionPlanVo; +import org.dromara.property.mapper.InspectionTaskMapper; +import org.dromara.property.service.IInspectionPlanService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.PostConstruct; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +import static org.dromara.common.mybatis.core.mapper.BaseMapperPlus.log; +import static org.dromara.property.domain.enums.InspectionPlanPeriodEnum.MONTHANDDAY; +import static org.dromara.property.domain.enums.InspectionPlanPeriodEnum.WEEK; + +/** + * @Author:yuyongle + * @Date:2025/7/11 15:28 + * @Description: 巡检任务定时处理器 + **/ +@Component +@RequiredArgsConstructor +//@Validated +//@RequiredArgsConstructor +//@RestController +//@RequestMapping("/task") +public class InspectionTasks { + + private final IInspectionPlanService inspectionPlanService; + private final InspectionTaskMapper inspectionTaskMapper; + + // 通过巡检计划定时生成巡检任务 + @Scheduled(cron = "0 0 2 * * ?") + @PostConstruct + //@GetMapping("/taskId") + @Transactional(rollbackFor = Exception.class) + public void doInspectionPianTask() { + // 查询所有启用状态的巡检计划 + InspectionPlanBo inspectionPlanBo = new InspectionPlanBo(); + inspectionPlanBo.setState("0"); + List inspectionPlanVoList = inspectionPlanService.queryList(inspectionPlanBo); + // 如果没有有效计划,直接返回 + if (ObjectUtil.isEmpty(inspectionPlanVoList)) { + return; + } + // 处理每个巡检计划 + inspectionPlanVoList.forEach(plan -> { + LambdaQueryWrapperinspectionTaskWrapper = new LambdaQueryWrapper<>(); + inspectionTaskWrapper.eq(InspectionTask::getInspectionPlanId,plan.getId()); + inspectionTaskWrapper.eq(InspectionTask::getInspectionPlanId,plan.getId()); + boolean exists = inspectionTaskMapper.exists(inspectionTaskWrapper); + if(!exists){ + // 根据不同的巡检周期执行相应处理 + switch (plan.getInspectionPlanPeriod()) { + case "1": + // 处理按月/天的巡检计划 + handleMonthlyDailyPlan(plan); + break; + + case "2": + // 处理按周的巡检计划 + handleWeeklyDailyPlan(plan); + break; + default: + // 对于未知的巡检周期类型,记录警告日志 + log.warn("未知类型"); + break; + } + } + + }); + } + + /** + * 处理按月/天的巡检计划 + * @param plan 巡检计划信息 + */ + private void handleMonthlyDailyPlan(InspectionPlanVo plan) { + + // 使用Optional安全处理可能为null的对象 + Optional.ofNullable(plan).ifPresent(p -> { + DateTime today = DateUtil.date(); + DateTime startDate = DateUtil.date(plan.getStartDate()); + DateTime endDate = DateUtil.date(plan.getEndDate()); + String day = DateUtil.today().split("-")[2]; + List inspectionDayList = Arrays.asList(p.getInspectionDay().split(",")); + if(DateUtil.isIn(today, startDate, endDate)&&inspectionDayList.contains(day)){ + InspectionTask task = new InspectionTask(); + task.setInspectionPlanId(p.getId()); + task.setInspectionPlanId(p.getId()); + task.setTaskType(plan.getSignType()); + task.setPlanInsTime(startDate+"~"+p.getEndTime()); + task.setStatus("0"); + inspectionTaskMapper.insert(task); + } + }); + } + /** + * 处理按周的巡检计划 + * @param plan 巡检计划信息 + */ + private void handleWeeklyDailyPlan(InspectionPlanVo plan) { + + // 使用Optional安全处理可能为null的对象 + Optional.ofNullable(plan).ifPresent(p -> { + DateTime today = DateUtil.date(); + DateTime startDate = DateUtil.date(plan.getStartDate()); + DateTime endDate = DateUtil.date(plan.getEndDate()); + String week = String.valueOf(DateUtil.dayOfWeek(DateUtil.date())); + List inspectionWorkdayList = Arrays.asList(p.getInspectionWorkday().split(",")); + if(DateUtil.isIn(today, startDate, endDate)&&inspectionWorkdayList.contains(week)) { + InspectionTask task = new InspectionTask(); + task.setInspectionPlanId(p.getId()); + task.setInspectionPlanId(p.getId()); + task.setTaskType(plan.getSignType()); + task.setPlanInsTime(startDate+"~"+p.getEndTime()); + task.setStatus("0"); + inspectionTaskMapper.insert(task); + + } + }); + } +} diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/CleanOrderMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/CleanOrderMapper.xml index 248b7fac..e4951ffe 100644 --- a/ruoyi-modules/Property/src/main/resources/mapper/Property/CleanOrderMapper.xml +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/CleanOrderMapper.xml @@ -6,14 +6,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/InspectionTaskMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/InspectionTaskMapper.xml new file mode 100644 index 00000000..d4975921 --- /dev/null +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/InspectionTaskMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlController.java index 41950254..c0c34452 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlController.java @@ -116,5 +116,14 @@ public class SisAccessControlController extends BaseController { return R.ok(sisAccessControlService.queryAcTree()); } + /** + * 同步门禁设备 + * + * @return boolean + */ + @GetMapping("/sync") + public R sync() { + return R.ok(sisAccessControlService.syncE8()); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAuthRecordController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAuthRecordController.java index 11884c91..3caf3a45 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAuthRecordController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAuthRecordController.java @@ -1,37 +1,35 @@ package org.dromara.sis.controller; -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; +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.common.core.domain.TreeNode; +import org.dromara.sis.domain.SisAuthRecord; +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.excel.utils.ExcelUtil; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.web.core.BaseController; -import org.dromara.sis.domain.SisAuthRecord; -import org.dromara.sis.domain.bo.AuthLibBo; -import org.dromara.sis.domain.bo.SingleAuthRecordBo; -import org.dromara.sis.domain.bo.SisAuthRecordBo; +import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.sis.domain.vo.SisAuthRecordVo; +import org.dromara.sis.domain.bo.SisAuthRecordBo; import org.dromara.sis.service.ISisAuthRecordService; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; +import org.dromara.common.mybatis.core.page.TableDataInfo; /** * 授权记录 * 前端访问路由地址为:/sis/authRecord * * @author lsm - * @since 2025-06-28 + * @since 2025-07-14 */ @Validated @RequiredArgsConstructor @@ -77,25 +75,13 @@ public class SisAuthRecordController extends BaseController { * 新增授权记录 */ @SaCheckPermission("sis:authRecord:add") - @Log(title = "授权记录", businessType = BusinessType.INSERT) + @Log(title = "人员库授权", businessType = BusinessType.INSERT) @RepeatSubmit() - @PostMapping("/add") + @PostMapping() public R add(@Validated(AddGroup.class) @RequestBody SisAuthRecordBo bo) { return toAjax(sisAuthRecordService.insertByBo(bo)); } - /** - * 新增授权记录 - */ - @SaCheckPermission("sis:authRecord:add") - @Log(title = "单个人像授权", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping("/auth/single") - public R singleAuth(@Validated(AddGroup.class) @RequestBody SingleAuthRecordBo bo) { - return toAjax(sisAuthRecordService.singleAuth(bo)); - } - - /** * 修改授权记录 */ @@ -121,19 +107,22 @@ public class SisAuthRecordController extends BaseController { } /** - * 删除授权记录 + * 查询库id授权的设备 * - * @param bo 授权信息 + * @param libId 人像库id */ - @SaCheckPermission("sis:authRecord:authLib") - @Log(title = "人员库授权", businessType = BusinessType.INSERT) - @PostMapping("/authLib") - public R authLib(@Validated @RequestBody AuthLibBo bo) { - return toAjax(sisAuthRecordService.authLib(bo)); - } - @GetMapping("/authDevice/{libId}") public R> queryAuthDevice(@PathVariable("libId") String libId) { return R.ok(sisAuthRecordService.queryAuthDevice(libId)); } + + /** + * 查询所有可授权设备 + * + * @return List> + */ + @GetMapping("/authDevice/tree") + public R>> tree() { + return R.ok(sisAuthRecordService.authDeviceTree()); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisElevatorFloorRefController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisElevatorFloorRefController.java new file mode 100644 index 00000000..93daebba --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisElevatorFloorRefController.java @@ -0,0 +1,106 @@ +package org.dromara.sis.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.sis.domain.vo.SisElevatorFloorRefVo; +import org.dromara.sis.domain.bo.SisElevatorFloorRefBo; +import org.dromara.sis.service.ISisElevatorFloorRefService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 电梯⇄楼层关联 + * 前端访问路由地址为:/sis/elevatorFloorRef + * + * @author lsm + * @since 2025-07-15 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/elevatorFloorRef") +public class SisElevatorFloorRefController extends BaseController { + + private final ISisElevatorFloorRefService sisElevatorFloorRefService; + + /** + * 查询电梯⇄楼层关联列表 + */ + @SaCheckPermission("sis:elevatorFloorRef:list") + @GetMapping("/list") + public TableDataInfo list(SisElevatorFloorRefBo bo, PageQuery pageQuery) { + return sisElevatorFloorRefService.queryPageList(bo, pageQuery); + } + + /** + * 导出电梯⇄楼层关联列表 + */ + @SaCheckPermission("sis:elevatorFloorRef:export") + @Log(title = "电梯⇄楼层关联", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SisElevatorFloorRefBo bo, HttpServletResponse response) { + List list = sisElevatorFloorRefService.queryList(bo); + ExcelUtil.exportExcel(list, "电梯⇄楼层关联", SisElevatorFloorRefVo.class, response); + } + + /** + * 获取电梯⇄楼层关联详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("sis:elevatorFloorRef:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(sisElevatorFloorRefService.queryById(id)); + } + + /** + * 新增电梯⇄楼层关联 + */ + @SaCheckPermission("sis:elevatorFloorRef:add") + @Log(title = "电梯⇄楼层关联", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SisElevatorFloorRefBo bo) { + return toAjax(sisElevatorFloorRefService.insertByBo(bo)); + } + + /** + * 修改电梯⇄楼层关联 + */ + @SaCheckPermission("sis:elevatorFloorRef:edit") + @Log(title = "电梯⇄楼层关联", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SisElevatorFloorRefBo bo) { + return toAjax(sisElevatorFloorRefService.updateByBo(bo)); + } + + /** + * 删除电梯⇄楼层关联 + * + * @param ids 主键串 + */ + @SaCheckPermission("sis:elevatorFloorRef:remove") + @Log(title = "电梯⇄楼层关联", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(sisElevatorFloorRefService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisFloorInfoController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisFloorInfoController.java new file mode 100644 index 00000000..1f749e5d --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisFloorInfoController.java @@ -0,0 +1,106 @@ +package org.dromara.sis.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.sis.domain.vo.SisFloorInfoVo; +import org.dromara.sis.domain.bo.SisFloorInfoBo; +import org.dromara.sis.service.ISisFloorInfoService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 建筑物楼层信息 + * 前端访问路由地址为:/sis/floorInfo + * + * @author lsm + * @since 2025-07-15 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/floorInfo") +public class SisFloorInfoController extends BaseController { + + private final ISisFloorInfoService sisFloorInfoService; + + /** + * 查询建筑物楼层信息列表 + */ + @SaCheckPermission("sis:floorInfo:list") + @GetMapping("/list") + public TableDataInfo list(SisFloorInfoBo bo, PageQuery pageQuery) { + return sisFloorInfoService.queryPageList(bo, pageQuery); + } + + /** + * 导出建筑物楼层信息列表 + */ + @SaCheckPermission("sis:floorInfo:export") + @Log(title = "建筑物楼层信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SisFloorInfoBo bo, HttpServletResponse response) { + List list = sisFloorInfoService.queryList(bo); + ExcelUtil.exportExcel(list, "建筑物楼层信息", SisFloorInfoVo.class, response); + } + + /** + * 获取建筑物楼层信息详细信息 + * + * @param floorId 主键 + */ + @SaCheckPermission("sis:floorInfo:query") + @GetMapping("/{floorId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("floorId") Long floorId) { + return R.ok(sisFloorInfoService.queryById(floorId)); + } + + /** + * 新增建筑物楼层信息 + */ + @SaCheckPermission("sis:floorInfo:add") + @Log(title = "建筑物楼层信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SisFloorInfoBo bo) { + return toAjax(sisFloorInfoService.insertByBo(bo)); + } + + /** + * 修改建筑物楼层信息 + */ + @SaCheckPermission("sis:floorInfo:edit") + @Log(title = "建筑物楼层信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SisFloorInfoBo bo) { + return toAjax(sisFloorInfoService.updateByBo(bo)); + } + + /** + * 删除建筑物楼层信息 + * + * @param floorIds 主键串 + */ + @SaCheckPermission("sis:floorInfo:remove") + @Log(title = "建筑物楼层信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{floorIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("floorIds") Long[] floorIds) { + return toAjax(sisFloorInfoService.deleteWithValidByIds(List.of(floorIds), true)); + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisPersonLibController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisPersonLibController.java index a7adc2ba..ffafbe4f 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisPersonLibController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisPersonLibController.java @@ -98,7 +98,7 @@ public class SisPersonLibController extends BaseController { */ @SaCheckPermission("sis:personLib:remove") @Log(title = "人像库", businessType = BusinessType.DELETE) - @DeleteMapping("del/{ids}") + @DeleteMapping("/{ids}") public R remove(@NotEmpty(message = "主键不能为空") @PathVariable("ids") Long[] ids) { return toAjax(tbPersonLibService.deleteWithValidByIds(List.of(ids), true)); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/e8/AccessControlController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/e8/AccessControlController.java deleted file mode 100644 index de96e188..00000000 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/e8/AccessControlController.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.dromara.sis.controller.e8; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.domain.R; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.sis.sdk.e8.AccessControlService; -import org.dromara.sis.sdk.e8.domain.QueryDto; -import org.dromara.sis.sdk.e8.domain.accessControl.req.CustomerAuthAddReq; -import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq; -import org.dromara.sis.sdk.e8.domain.accessControl.res.AccessRecordFindRes; -import org.dromara.sis.sdk.e8.domain.accessControl.res.CustomerAuthFindRes; -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 lsm - * @apiNote AccessControlController - * @since 2025/6/24 - */ -@Slf4j -@RestController -@RequiredArgsConstructor -@RequestMapping("/e8AccessControl") -public class AccessControlController { - - private final AccessControlService accessControlService; - - /** - * 远程开门 - * - * @param req 传参 - * @return Boolean - */ - @PostMapping("/remoteOpenDoor") - public R remoteOpenDoor(@RequestBody RemoteOpenDoorReq req) { - log.info("E8远程开门 入参:{}", req); - - Boolean flag = accessControlService.remoteOpenDoor(req); - - if (flag) { - return R.ok(); - } else { - return R.fail("E8远程开门,调用失败!"); - } - } - - /** - * 获取门禁记录列表 - * - * @param dto 查询参数 - * @return IPage - * @apiNote 获取参数示例 {"maxResultCount":10,"pageIndex":1,"queryDto":{"isViewFullData":false}} - */ - @PostMapping("/getPageAccessRecordList") - public R> getPageAccessRecordList(@RequestBody QueryDto dto) { - log.info("E8获取门禁记录列表 入参:{}", dto); - TableDataInfo page = accessControlService.getPageAccessRecordList(dto); - if (page == null) { - return R.fail("E8获取门禁记录列表,调用失败!"); - } else { - return R.ok(page); - } - } - - /** - * 人员授权 - * - * @param req 传参 - * @return Boolean - * @apiNote 参数示例 {"accessAuthModel":0,"authData":[{"floors":[],"gatewayType":1,"id":528705580163141,"type":0}],"authType":0,"elevatorAuthModel":1,"endTime":"2025-07-2511: 23: 39","personIds":[539696740646981],"scheduleId":1,"startTime":"2025-06-2511: 23: 39"} - */ - @PostMapping("/addCustomerAuth") - public R addCustomerAuth(@RequestBody CustomerAuthAddReq req) { - log.info("E8人员授权 入参:{}", req); - - Boolean flag = accessControlService.addCustomerAuth(req); - - if (flag) { - return R.ok(); - } else { - return R.fail("E8人员授权,调用失败!"); - } - } - - /** - * 获取人员权限分页列表 - * - * @param dto 获取参数 - * @return TableDataInfo - * @apiNote 获取参数示例 {"maxResultCount":10,"pageIndex":1,"queryDto":{"isViewFullData":false}} - */ - @PostMapping("getPageCustomerAuth") - public R> getPageCustomerAuth(@RequestBody QueryDto dto) { - log.info("E8获取人员权限分页列表 入参:{}", dto); - - TableDataInfo page = accessControlService.getPageCustomerAuth(dto); - - if (page == null) { - return R.fail("E8获取人员权限分页列表,调用失败!"); - } else { - return R.ok(page); - } - } - -} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/e8/DoorDeviceController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/e8/DoorDeviceController.java deleted file mode 100644 index 6e351d50..00000000 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/e8/DoorDeviceController.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.dromara.sis.controller.e8; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.domain.R; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.sis.sdk.e8.DoorDeviceService; -import org.dromara.sis.sdk.e8.domain.door.req.DoorDeviceAddReq; -import org.dromara.sis.sdk.e8.domain.door.req.DoorDeviceUpdateReq; -import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceAddRes; -import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceFindRes; -import org.dromara.sis.sdk.e8.domain.QueryDto; -import org.springframework.util.ObjectUtils; -import org.springframework.web.bind.annotation.*; - -/** - * @author lsm - * @apiNote DoorDeviceController - * @since 2025/6/23 - */ -@Slf4j -@RestController -@RequiredArgsConstructor -@RequestMapping("/e8DoorDevice") -public class DoorDeviceController { - - private final DoorDeviceService doorDeviceService; - - /** - * 查询门禁信息 - * - * @param id 入参 - * @return Result - */ - @PostMapping("/findDoorDevice/{id}") - public R findDoorDevice(@PathVariable Long id) { - log.info("E8接口 查询门禁信息 入参={}", id); - DoorDeviceFindRes doorDeviceInfo = doorDeviceService.findDoorDevice(id); - if (doorDeviceInfo == null) { - return R.fail("E8接口查询门禁信息,调用失败!"); - } else { - return R.ok(doorDeviceInfo); - } - } - - /** - * 新增门禁信息 - * - * @param addReq 入参 - * @return Boolean - */ - @PostMapping("/addDoorDevice") - public R addDoorDevice(@RequestBody DoorDeviceAddReq addReq) { - log.info("E8接口新增门禁信息 入参={}", addReq); - - DoorDeviceAddRes doorDevice = doorDeviceService.addDoorDevice(addReq); - - if (doorDevice == null) { - return R.fail("E8接口新增门禁信息,调用失败!"); - } else { - return R.ok(doorDevice); - } - } - - /** - * 门禁信息修改 - * - * @param updateReq 入参 - * @return Boolean - */ - @PostMapping("/updateDoorDevice") - public R updateDoorDevice(@RequestBody DoorDeviceUpdateReq updateReq) { - log.info("E8接口门禁信息修改 入参={}", updateReq); - - Boolean flag = doorDeviceService.updateDoorDevice(updateReq); - - if (flag) { - return R.ok(); - } else { - return R.fail("E8接口门禁信息修改,调用失败!"); - } - } - - /** - * 删除门禁信息 - * - * @param id 入参 - * @return Boolean - */ - @PostMapping("/deleteDoorDevice/{id}") - public R deleteDoorDevice(@PathVariable Long id) { - log.info("E8接口删除门禁信息 入参={}", id); - - Boolean flag = doorDeviceService.deleteDoorDevice(id); - - return flag ? R.ok() : R.fail("E8接口删除门禁信息,调用失败!"); - } - - /** - * 查询门禁信息列表 - * - * @param dto 入参 - * @return IPage - */ - @PostMapping("/findDoorDeviceList") - public R> findDoorDeviceList(@RequestBody QueryDto dto) { - log.info("E8接口查询门禁信息列表 入参={}", dto); - TableDataInfo doorDeviceList = doorDeviceService.findDoorDeviceList(dto); - if (ObjectUtils.isEmpty(doorDeviceList)) { - return R.fail("E8接口查询门禁信息列表,调用失败!"); - } else { - return R.ok(doorDeviceList); - } - } -} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/e8/VoucherControlController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/e8/VoucherControlController.java deleted file mode 100644 index dc12c600..00000000 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/e8/VoucherControlController.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.dromara.sis.controller.e8; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.domain.R; -import org.dromara.sis.sdk.e8.VoucherControlService; -import org.dromara.sis.sdk.e8.domain.voucher.req.ChangeCardReq; -import org.dromara.sis.sdk.e8.domain.voucher.req.IssueVoucherReq; -import org.dromara.sis.sdk.e8.domain.voucher.req.OperateVoucherReq; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import java.io.IOException; - -/** - * @author lsm - * @apiNote VoucherControlController - * @since 2025/6/25 - */ -@Slf4j -@RestController -@RequiredArgsConstructor -@RequestMapping("/e8VoucherControl") -public class VoucherControlController { - - private final VoucherControlService voucherControlService; - - /** - * 发行凭证 - * - * @param req 入参 - * @return 是否成功 - */ - @PostMapping("/issueVoucher") - public R issueVoucher(@RequestBody IssueVoucherReq req) { - log.info("E8发行凭证入参:{}", req); - - Long flag = voucherControlService.issueVoucher(req); - - if (flag != null) { - return R.ok(); - } else { - return R.fail("E8发行凭证,调用失败!"); - } - } - - /** - * 操作凭证 - * - * @param req 入参 - * @return Boolean - */ - @PostMapping("/operateVoucher") - public R operateVoucher(@RequestBody OperateVoucherReq req) { - log.info("E8操作凭证入参:{}", req); - - Boolean flag = voucherControlService.operateVoucher(req); - - if (flag) { - return R.ok(); - } else { - return R.fail("E8操作凭证,调用失败!"); - } - } - - /** - * 换卡补卡 - * - * @param req 入参 - * @return Boolean - */ - @PostMapping("/changeCard") - public R changeCard(@RequestBody ChangeCardReq req) { - log.info("E8换卡补卡入参:{}", req); - - Boolean flag = voucherControlService.changeCard(req); - - if (flag) { - return R.ok(); - } else { - return R.fail("E8换卡补卡,调用失败!"); - } - } - - /** - * 上传人脸 - * - * @param file 入参 - * @return imageUrl 人脸图片地址 - */ - @PostMapping("/uploadFace") - public R uploadFace(@RequestParam("file") MultipartFile file) { - log.info("E8上传人脸入参:{}", file.getOriginalFilename()); - - // 获取文件字节数组 - byte[] imageByte; - try { - imageByte = file.getBytes(); - } catch (IOException e) { - log.error("获取上传文件字节失败:{}", e.getMessage()); - return R.fail("E8上传人脸,获取文件字节失败!"); - } - - String imageUrl = voucherControlService.uploadFace(imageByte); - - if (imageUrl != null) { - return R.ok(imageUrl); - } else { - return R.fail("E8上传人脸,调用失败!"); - } - } - -} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAccessControl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAccessControl.java index f36747a6..3445a59f 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAccessControl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAccessControl.java @@ -93,4 +93,9 @@ public class SisAccessControl extends TenantEntity { */ private String outCode; + /** + * 外部门编码 + */ + private String outDoorCode; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthRecord.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthRecord.java index 729b027d..9588f9af 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthRecord.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthRecord.java @@ -11,7 +11,7 @@ import java.io.Serial; * 授权记录对象 sis_auth_record * * @author lsm - * @since 2025-06-28 + * @since 2025-07-14 */ @Data @EqualsAndHashCode(callSuper = true) @@ -33,29 +33,14 @@ public class SisAuthRecord extends TenantEntity { private Long libId; /** - * 图片id - */ - private Long imgId; - - /** - * 门禁id - */ - private Long acId; - - /** - * 设备id - */ - private Long eqbId; - - /* - 门id - */ - private Long doorId; - - /** - * 设备id + * 设备id(门禁/电梯) */ private Long deviceId; + /** + * 设备类型:1-门禁 2-电梯 + */ + private Integer deviceType; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorFloorRef.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorFloorRef.java new file mode 100644 index 00000000..59f93ee5 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorFloorRef.java @@ -0,0 +1,41 @@ +package org.dromara.sis.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 电梯⇄楼层关联对象 sis_elevator_floor_ref + * + * @author lsm + * @since 2025-07-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sis_elevator_floor_ref") +public class SisElevatorFloorRef extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 电梯id + */ + private Long elevatorId; + + /** + * 楼层层数 + */ + private Long layerNum; + + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisFloorInfo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisFloorInfo.java new file mode 100644 index 00000000..77fdca03 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisFloorInfo.java @@ -0,0 +1,50 @@ +package org.dromara.sis.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 建筑物楼层信息对象 sis_floor_info + * + * @author lsm + * @since 2025-07-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sis_floor_info") +public class SisFloorInfo extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 楼层唯一标识 + */ + @TableId(value = "floor_id") + private Long floorId; + + /** + * 最低层 + */ + private Long minLayer; + + /** + * 最高层 + */ + private Long maxLayer; + + /** + * 园区id + */ + private Long communityId; + + /** + * 建筑id + */ + private Long buildingId; + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisLibImgRef.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisLibImgRef.java new file mode 100644 index 00000000..474bbeda --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisLibImgRef.java @@ -0,0 +1,42 @@ +package org.dromara.sis.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 人像库-人像图片关联对象 sis_lib_img_ref + * + * @author lsm + * @since 2025-07-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sis_lib_img_ref") +public class SisLibImgRef extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 人像库id + */ + private Long libId; + + /** + * 人像id + */ + private Long imgId; + + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java index 64bc16db..d59a9742 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java @@ -28,11 +28,6 @@ public class SisPersonLibImg extends TenantEntity { @TableId(value = "id") private Long id; - /** - * 人员库编码 - */ - private Long libId; - /** * 人像名称 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/AuthLibBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/AuthLibBo.java deleted file mode 100644 index a8373f3b..00000000 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/AuthLibBo.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.dromara.sis.domain.bo; - -import jakarta.validation.constraints.NotNull; -import lombok.Data; - -import java.util.List; - -/** - * 人像库授权 - * - * @author lxj - */ -@Data -public class AuthLibBo { - - @NotNull(message = "人像库id不能为空") - private Long libId; - - @NotNull(message = "设备列表不能为空") - private List deviceIds; - -} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SingleAuthRecordBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SingleAuthRecordBo.java deleted file mode 100644 index 9c71ee8b..00000000 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SingleAuthRecordBo.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.dromara.sis.domain.bo; - -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.sis.domain.SisAuthRecord; - -import java.util.List; - -/** - * 授权记录业务对象 sis_auth_record - * - * @author lxj - * @since 2025-06-28 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = SisAuthRecord.class, reverseConvertGenerate = false) -public class SingleAuthRecordBo extends BaseEntity { - - - /** - * 图像库Id - */ - @NotNull(message = "图像库Id不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long libId; - - /** - * 图像id列表 - */ - @NotNull(message = "图像id列表不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long imgId; - - /** - * 门禁id列表 - */ - @NotNull(message = "门禁id列表能为空", groups = {AddGroup.class, EditGroup.class}) - private List acIds; - -} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthRecordBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthRecordBo.java index cb683c05..555c120f 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthRecordBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthRecordBo.java @@ -1,21 +1,21 @@ package org.dromara.sis.domain.bo; -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; +import org.dromara.sis.domain.SisAuthRecord; +import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.sis.domain.SisAuthRecord; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; -import java.util.List; +import java.util.Collection; /** * 授权记录业务对象 sis_auth_record * * @author lsm - * @since 2025-06-28 + * @since 2025-07-14 */ @Data @EqualsAndHashCode(callSuper = true) @@ -23,26 +23,20 @@ import java.util.List; public class SisAuthRecordBo extends BaseEntity { /** - * 图像库Id + * 主键id */ - @NotNull(message = "图像库Id不能为空", groups = {AddGroup.class, EditGroup.class}) + @NotNull(message = "主键id不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 图像库id + */ + @NotNull(message = "图像库id不能为空", groups = {AddGroup.class, EditGroup.class}) private Long libId; /** - * 图像id列表 + * 授权设备idList */ - @NotNull(message = "图像id列表不能为空", groups = {AddGroup.class, EditGroup.class}) - private List imgIds; - - /** - * 门禁id列表 - */ - @NotNull(message = "门禁id列表能为空", groups = {AddGroup.class, EditGroup.class}) - private List acIds; - - /** - * 是否将图片下发到宇视盒子 - */ - private Boolean issue = false; - + @NotEmpty(message = "授权设备idList不能为空", groups = {AddGroup.class, EditGroup.class}) + private Collection deviceIds; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisElevatorFloorRefBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisElevatorFloorRefBo.java new file mode 100644 index 00000000..3da9c32f --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisElevatorFloorRefBo.java @@ -0,0 +1,42 @@ +package org.dromara.sis.domain.bo; + +import org.dromara.sis.domain.SisElevatorFloorRef; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 电梯⇄楼层关联业务对象 sis_elevator_floor_ref + * + * @author lsm + * @since 2025-07-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SisElevatorFloorRef.class, reverseConvertGenerate = false) +public class SisElevatorFloorRefBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 电梯id + */ + @NotNull(message = "电梯id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long elevatorId; + + /** + * 楼层层数 + */ + @NotNull(message = "楼层层数不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long layerNum; + + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisFloorInfoBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisFloorInfoBo.java new file mode 100644 index 00000000..df59a78b --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisFloorInfoBo.java @@ -0,0 +1,53 @@ +package org.dromara.sis.domain.bo; + +import org.dromara.sis.domain.SisFloorInfo; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 建筑物楼层信息业务对象 sis_floor_info + * + * @author lsm + * @since 2025-07-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SisFloorInfo.class, reverseConvertGenerate = false) +public class SisFloorInfoBo extends BaseEntity { + + /** + * 楼层唯一标识 + */ + @NotNull(message = "楼层唯一标识不能为空", groups = { EditGroup.class }) + private Long floorId; + + /** + * 最低层 + */ + @NotNull(message = "最低层不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long minLayer; + + /** + * 最高层 + */ + @NotNull(message = "最高层不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long maxLayer; + + /** + * 园区id + */ + @NotNull(message = "园区id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long communityId; + + /** + * 建筑id + */ + @NotNull(message = "建筑id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long buildingId; + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisLibImgRefBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisLibImgRefBo.java new file mode 100644 index 00000000..6340fa5e --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisLibImgRefBo.java @@ -0,0 +1,42 @@ +package org.dromara.sis.domain.bo; + +import org.dromara.sis.domain.SisLibImgRef; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 人像库-人像图片关联业务对象 sis_lib_img_ref + * + * @author lsm + * @since 2025-07-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SisLibImgRef.class, reverseConvertGenerate = false) +public class SisLibImgRefBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 人像库id + */ + @NotNull(message = "人像库id不能为空", groups = {EditGroup.class, AddGroup.class}) + private Long libId; + + /** + * 人像id + */ + @NotNull(message = "人像id不能为空", groups = {EditGroup.class, AddGroup.class}) + private Long imgId; + + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java index c83c985c..cd92835e 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java @@ -9,6 +9,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; +import java.util.Collection; + /** * 人像信息业务对象 tb_person_lib_img * @@ -29,8 +31,8 @@ public class SisPersonLibImgBo extends BaseEntity { /** * 人员库编码 */ - @NotNull(message = "人像库id不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long libId; + @NotEmpty(message = "人像库id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Collection libIds; /** * 人像名称 @@ -74,14 +76,14 @@ public class SisPersonLibImgBo extends BaseEntity { */ private String birthDate; - /** - * 同步E8 - */ - private Boolean isSyncE8; - /** * 远程库图像ID */ private Long remoteImgId; + /** + * 同步E8 + */ + private Boolean isSyncE8; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAccessControlVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAccessControlVo.java index 864abcaa..d9d30feb 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAccessControlVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAccessControlVo.java @@ -105,6 +105,12 @@ public class SisAccessControlVo implements Serializable { @ExcelProperty(value = "外部编码") private String outCode; + /** + * 外部门编码 + */ + @ExcelProperty(value = "外部编码") + private String outDoorCode; + private String bindDeviceId; private String bindDeviceIp; diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthRecordVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthRecordVo.java index 07a231a9..4f26c293 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthRecordVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthRecordVo.java @@ -3,19 +3,20 @@ package org.dromara.sis.domain.vo; import org.dromara.sis.domain.SisAuthRecord; import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import java.io.Serial; import java.io.Serializable; -import java.util.List; /** * 授权记录视图对象 sis_auth_record * * @author lsm - * @since 2025-06-28 + * @since 2025-07-14 */ @Data @ExcelIgnoreUnannotated @@ -32,41 +33,23 @@ public class SisAuthRecordVo implements Serializable { private Long id; /** - * 图像库Id + * 图像库id */ - @ExcelProperty(value = "图像库Id") + @ExcelProperty(value = "图像库id") private Long libId; /** - * 人像id - */ - @ExcelProperty(value = "人像id") - private Long imgId; - - /** - * 门禁id - */ - @ExcelProperty(value = "门禁id") - private Long acId; - - /** - * 设备id - */ - @ExcelProperty(value = "设备id") - private Long eqbId; - - /** - * E8权限ID - */ - private Long remoteAuthId; - - /* - 门id - */ - private Long doorId; - - /** - * 设备id + * 设备id(门禁/电梯) */ + @ExcelProperty(value = "设备id", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "门禁/电梯") private Long deviceId; + + /** + * 设备类型:1-门禁 2-电梯 + */ + @ExcelProperty(value = "设备类型:1-门禁 2-电梯") + private Integer deviceType; + + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorFloorRefVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorFloorRefVo.java new file mode 100644 index 00000000..31d5b63a --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorFloorRefVo.java @@ -0,0 +1,50 @@ +package org.dromara.sis.domain.vo; + +import org.dromara.sis.domain.SisElevatorFloorRef; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 电梯⇄楼层关联视图对象 sis_elevator_floor_ref + * + * @author lsm + * @since 2025-07-15 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SisElevatorFloorRef.class) +public class SisElevatorFloorRefVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 电梯id + */ + @ExcelProperty(value = "电梯id") + private Long elevatorId; + + /** + * 楼层层数 + */ + @ExcelProperty(value = "楼层层数") + private Long layerNum; + + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisFloorInfoVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisFloorInfoVo.java new file mode 100644 index 00000000..b7ed5471 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisFloorInfoVo.java @@ -0,0 +1,61 @@ +package org.dromara.sis.domain.vo; + +import org.dromara.sis.domain.SisFloorInfo; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 建筑物楼层信息视图对象 sis_floor_info + * + * @author lsm + * @since 2025-07-15 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SisFloorInfo.class) +public class SisFloorInfoVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 楼层唯一标识 + */ + @ExcelProperty(value = "楼层唯一标识") + private Long floorId; + + /** + * 最低层 + */ + @ExcelProperty(value = "最低层") + private Long minLayer; + + /** + * 最高层 + */ + @ExcelProperty(value = "最高层") + private Long maxLayer; + + /** + * 园区id + */ + @ExcelProperty(value = "园区id") + private Long communityId; + + /** + * 建筑id + */ + @ExcelProperty(value = "建筑id") + private Long buildingId; + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisLibImgRefVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisLibImgRefVo.java new file mode 100644 index 00000000..f209f62b --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisLibImgRefVo.java @@ -0,0 +1,47 @@ +package org.dromara.sis.domain.vo; + +import org.dromara.sis.domain.SisLibImgRef; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + + + +/** + * 人像库-人像图片关联视图对象 sis_lib_img_ref + * + * @author lsm + * @since 2025-07-14 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SisLibImgRef.class) +public class SisLibImgRefVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 人像库id + */ + @ExcelProperty(value = "人像库id") + private Long libId; + + /** + * 人像id + */ + @ExcelProperty(value = "人像id") + private Long imgId; + + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java index 7a36ff66..3d9ffe17 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java @@ -8,7 +8,7 @@ import org.dromara.sis.domain.SisPersonLibImg; import java.io.Serial; import java.io.Serializable; - +import java.util.Collection; /** @@ -31,12 +31,6 @@ public class SisPersonLibImgVo implements Serializable { @ExcelProperty(value = "主键id") private Long id; - /** - * 人员库编码 - */ - @ExcelProperty(value = "人员库Id") - private Long libId; - /** * 人像名称 */ @@ -50,8 +44,7 @@ public class SisPersonLibImgVo implements Serializable { private Long imgOssId; /** - * 性别 1:男 -2:女 99:未说明 + * 性别 1:男 2:女 99:未说明 */ @ExcelProperty(value = "性别") private Integer sex; @@ -69,9 +62,7 @@ public class SisPersonLibImgVo implements Serializable { private String tel; /** - * 证件类型 -1:身份证 2:护照 -3:行驶证 99:其它 + * 证件类型 1:身份证 2:护照 3:行驶证 99:其它 */ @ExcelProperty(value = "证件类型") private Integer certificateType; @@ -93,4 +84,10 @@ public class SisPersonLibImgVo implements Serializable { */ @ExcelProperty(value = "远程库图像ID") private Long remoteImgId; + + /** + * 人像库id + */ + @ExcelProperty(value = "人像库id") + private Collection libIds; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthRecordMapper.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthRecordMapper.java index abfef87a..da91c0c0 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthRecordMapper.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthRecordMapper.java @@ -1,17 +1,17 @@ package org.dromara.sis.mapper; -import org.apache.ibatis.annotations.Param; import org.dromara.sis.domain.SisAuthRecord; import org.dromara.sis.domain.vo.SisAuthRecordVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import java.util.List; + /** * 授权记录Mapper接口 * * @author lsm - * @date 2025-06-28 + * @since 2025-07-14 */ public interface SisAuthRecordMapper extends BaseMapperPlus { - - SisAuthRecordVo checkAuth(@Param("personId") Integer personId,@Param("accessControlId") Long accessControlId); + List checkAuth(Long personId); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisElevatorFloorRefMapper.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisElevatorFloorRefMapper.java new file mode 100644 index 00000000..3381838f --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisElevatorFloorRefMapper.java @@ -0,0 +1,15 @@ +package org.dromara.sis.mapper; + +import org.dromara.sis.domain.SisElevatorFloorRef; +import org.dromara.sis.domain.vo.SisElevatorFloorRefVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 电梯⇄楼层关联Mapper接口 + * + * @author lsm + * @date 2025-07-15 + */ +public interface SisElevatorFloorRefMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisFloorInfoMapper.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisFloorInfoMapper.java new file mode 100644 index 00000000..75228ca6 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisFloorInfoMapper.java @@ -0,0 +1,15 @@ +package org.dromara.sis.mapper; + +import org.dromara.sis.domain.SisFloorInfo; +import org.dromara.sis.domain.vo.SisFloorInfoVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 建筑物楼层信息Mapper接口 + * + * @author lsm + * @date 2025-07-15 + */ +public interface SisFloorInfoMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisLibImgRefMapper.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisLibImgRefMapper.java new file mode 100644 index 00000000..1fd6e0e3 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisLibImgRefMapper.java @@ -0,0 +1,15 @@ +package org.dromara.sis.mapper; + +import org.dromara.sis.domain.SisLibImgRef; +import org.dromara.sis.domain.vo.SisLibImgRefVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 人像库-人像图片关联Mapper接口 + * + * @author lsm + * @since 2025-07-14 + */ +public interface SisLibImgRefMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java index 5adfabef..142d43e5 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java @@ -3,34 +3,115 @@ package org.dromara.sis.runner; import cn.hutool.core.collection.CollUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.utils.SpringUtils; +import org.dromara.sis.domain.bo.SisDeviceManageBo; +import org.dromara.sis.domain.vo.SisDeviceManageVo; import org.dromara.sis.domain.vo.SisElevatorInfoVo; +import org.dromara.sis.domain.vo.SisFloorInfoVo; import org.dromara.sis.sdk.hik.HikApiService; +import org.dromara.sis.sdk.hik.calback.HikAlarmCallBack; +import org.dromara.sis.service.ISisDeviceManageService; import org.dromara.sis.service.ISisElevatorInfoService; +import org.dromara.sis.service.ISisFloorInfoService; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; @Slf4j -@RequiredArgsConstructor @Component +@RequiredArgsConstructor public class HikDeviceApplicationRunner implements ApplicationRunner { + private final HikAlarmCallBack hikAlarmCallBack; + private final ISisFloorInfoService floorInfoService; + private final ISisDeviceManageService deviceManageService; private final ISisElevatorInfoService elevatorInfoService; - @Override public void run(ApplicationArguments args) throws Exception { + // 先布放,在登录 + HikApiService.getInstance().setAlarmCallBack(0, hikAlarmCallBack); // 现在查询全部,后面要更具需要查询指定厂商的设备 + HikDeviceApplicationRunner runner = SpringUtils.getAopProxy(this); + // 梯控登录 + runner.hikElevatorInfoLogin(); + // 网络摄像头登录 + hikNetCameraLogin(); + } + + @Async + public void hikElevatorInfoLogin() { List sisElevatorInfoVos = elevatorInfoService.queryAll(); if (CollUtil.isNotEmpty(sisElevatorInfoVos)) { sisElevatorInfoVos.forEach(item -> { // 执行设备登录操作 HikApiService.getInstance().login(item.getControlIp(), item.getControlPort().shortValue(), item.getControlAccount(), item.getControlPwd()); - // todo 更新设备心跳信息 + // 根据建筑ID获取楼层信息 + SisFloorInfoVo floorInfo = floorInfoService.queryByBuildingId(item.getBuildingId()); + // 获取楼层数组 + List layerArray = generateFloorArray(floorInfo.getMinLayer().intValue(), floorInfo.getMaxLayer().intValue()); + // 下发权限 + for (int i = 0; i < layerArray.size(); i++) { + HikApiService.getInstance().controlGateway(item.getControlIp(), (i + 1), layerArray.get(i)); + } }); } - +// String ip = "192.168.24.188"; +// short port = 8000; +// String account = "admin"; +// String pwd = "qweasd123"; +// HikApiService.getInstance().login(ip, port, account, pwd); +// List arrs = Arrays.asList(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2); +// for (int i = 0; i < arrs.size(); i++) { +// HikApiService.getInstance().controlGateway(ip, (i + 1), arrs.get(i)); +// } } + + //输入最低层,最高层,返回楼层数组 + public List generateFloorArray(int minLayer, int maxLayer) { + // 验证输入范围 + if (minLayer > maxLayer) { + throw new IllegalArgumentException("最低层不能大于最高层"); + } + + // 使用List动态收集楼层 + List layerList = new ArrayList<>(); + + // 遍历所有楼层,跳过0层 + for (int layer = minLayer; layer <= maxLayer; layer++) { + if (layer != 0) { + // 初始数组赋值为3,不下发权限 + layerList.add(3); + } + } + + return layerList; + } + + @Async + public void hikNetCameraLogin() { + List deviceList = deviceManageService.queryList(new SisDeviceManageBo()); + + if (CollUtil.isEmpty(deviceList)) { + log.info("没有查询到摄像设备信息,不执行登录"); + return; + } + + deviceList.forEach(item -> { + int handler = HikApiService.getInstance().login(item.getDeviceIp(), item.getDevicePort().shortValue(), item.getDeviceAccount(), item.getDevicePwd()); + if (handler != -1) { + HikApiService.getInstance().setAlarmChan(handler); + } + }); +// String ip = "192.168.24.19"; +// short port = 8000; +// String account = "admin"; +// String pwd = "xzf13579"; +// int handler = HikApiService.getInstance().login(ip, port, account, pwd); + } + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java index 79520312..0f58f525 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java @@ -15,6 +15,16 @@ public class AuthDoorDeviceFindRes { */ private Long id; + /** + * 门名称 + */ + private String name; + + /** + * 设备code + */ + private String deviceNo; + /** * 门禁Id */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/impl/DoorDeviceServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/impl/DoorDeviceServiceImpl.java index aabf65d2..e44a0114 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/impl/DoorDeviceServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/impl/DoorDeviceServiceImpl.java @@ -176,7 +176,7 @@ public class DoorDeviceServiceImpl implements DoorDeviceService { /** * 分页获取授权门信息 * - * @return TableDataInfo + * @return List */ public List getPageAuthDoorDeviceList() { Map queryDto = new HashMap<>(); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java index f4003e9d..4280851a 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java @@ -25,6 +25,7 @@ public class HikApiService { } private static volatile HikApiService instance; + public static HikApiService getInstance() { if (instance == null) { synchronized (HikApiService.class) { @@ -36,6 +37,9 @@ public class HikApiService { return instance; } + public static void init() { + SdkBaseServer.initSdk(); + } /** @@ -47,13 +51,22 @@ public class HikApiService { * @param psw 设备密码 * @return 返回会否登录成功 */ - public Boolean login(String ip, short port, String user, String psw) { + public int login(String ip, short port, String user, String psw) { int i = LoginService.loginDevice(ip, port, user, psw); boolean result = (i != SdkBaseServer.LOGIN_FAIL_CODE); if (result) { CACHE.put(ip, i); } - return result; + return i; + } + + /** + * 注册报警信息回调函数。 + * + * @param callBack 报警信回调 + */ + public boolean setAlarmCallBack(int iIndex, HCNetSDK.FMSGCallBack_V31 callBack) { + return SdkBaseServer.setAlarmCallBack(iIndex, callBack); } /** @@ -107,4 +120,8 @@ public class HikApiService { } return logout; } + + public void setAlarmChan(int handler) { + SdkBaseServer.setAlarmChan(handler); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java new file mode 100644 index 00000000..460ed0ca --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java @@ -0,0 +1,177 @@ +package org.dromara.sis.sdk.hik.calback; + +import cn.hutool.core.codec.Base64Encoder; +import cn.hutool.core.collection.CollUtil; +import com.sun.jna.Pointer; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.sis.domain.vo.*; +import org.dromara.sis.sdk.e8.AccessControlService; +import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq; +import org.dromara.sis.sdk.hik.HCNetSDK; +import org.dromara.sis.sdk.hik.HikApiService; +import org.dromara.sis.sdk.huawei.HuaWeiBoxApi; +import org.dromara.sis.service.*; +import org.springframework.stereotype.Component; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 { + + private final HuaWeiBoxApi huaWeiBoxApi; + private final ISisFloorInfoService floorInfoService; + private final ISisAuthRecordService authRecordService; + private final ISisElevatorInfoService elevatorInfoService; + private final ISisDeviceBindRefService deviceBindRefService; + private final ISisAccessControlService accessControlService; + private final ISisElevatorFloorRefService elevatorFloorRefService; + + private final AccessControlService e8AccessControlService; + + private static final int COMM_UPLOAD_FACESNAP_RESULT = 0x1112; + + @Override + public boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) { + if (lCommand == COMM_UPLOAD_FACESNAP_RESULT) {// 读取抓拍人脸数据 + long s = System.currentTimeMillis(); + log.info("hik 抓拍信息上报完成,lCommand={}", lCommand); + HCNetSDK.NET_VCA_FACESNAP_RESULT result = new HCNetSDK.NET_VCA_FACESNAP_RESULT(); + result.write(); + Pointer pItsPlateInfo = result.getPointer(); + pItsPlateInfo.write(0, pAlarmInfo.getByteArray(0, result.size()), 0, result.size()); + result.read(); + + // 读取人脸小图 + ByteBuffer buffers = result.pBuffer1.getByteBuffer(0, result.dwFacePicLen); + byte[] smallImg = new byte[result.dwFacePicLen]; + buffers.rewind(); + buffers.get(smallImg); + + // 读取人脸大图 + /*ByteBuffer buffers1 = result.pBuffer2.getByteBuffer(0, result.dwBackgroundPicLen); + byte[] bigImg = new byte[result.dwBackgroundPicLen]; + buffers1.rewind(); + buffers1.get(bigImg);*/ + + //设备ip + String sAlarmInfo = new String(pAlarmer.sDeviceIP).trim(); + // 设备绑定关系 + List bindRefList = deviceBindRefService.queryByDeviceIp(sAlarmInfo); + if (CollUtil.isEmpty(bindRefList)) { + log.info("当前报警设备未绑定门禁/梯控,不做处理!"); + return true; + } + + // todo 进行人脸比对 + String smallImgBase64Str = Base64Encoder.encode(smallImg); + long s1 = System.currentTimeMillis(); + Long person = huaWeiBoxApi.findPerson(smallImgBase64Str); + log.info("人脸比对执行完成,耗时:{}", System.currentTimeMillis() - s1); + if (person == null) { + log.info("未命中人脸数据,暂不处理。"); + return true; + } + log.info("人脸比对完成,personId={}", person); + + // 授权记录 + List authVoList = authRecordService.checkAuth(person); + // 获取门禁id + Collection acIds = authVoList.stream().filter(vo -> vo.getDeviceType() == 1).map(SisAuthRecordVo::getDeviceId).toList(); + if (CollUtil.isNotEmpty(acIds)) { + acIds.forEach(id -> { + Long deviceId = bindRefList.stream().filter(vo -> vo.getBindId().equals(id)).findFirst().map(SisDeviceBindRefVo::getDeviceId).orElse(null); + SisAccessControlVo ac = accessControlService.queryById(deviceId); + if (ac != null) { + log.info("调用门禁服务远程开门"); + RemoteOpenDoorReq req = new RemoteOpenDoorReq(); + req.setType(0); + RemoteOpenDoorReq.ControlData data = new RemoteOpenDoorReq.ControlData(); + data.setDeviceId(Long.parseLong(ac.getOutCode())); + data.setDoorId(Long.parseLong(ac.getOutCode())); + req.setControlList(List.of(data)); + Boolean flag = e8AccessControlService.remoteOpenDoor(req); + log.info("远程开门结果,result={}", flag); + } + }); + } + + + // 获取电梯ids + Collection eleIds = authVoList.stream().filter(vo -> vo.getDeviceType() == 2).map(SisAuthRecordVo::getDeviceId).toList(); + if (CollUtil.isNotEmpty(eleIds)) { + eleIds.forEach(id -> { + Long deviceId = bindRefList.stream().filter(vo -> vo.getBindId().equals(id)).findFirst().map(SisDeviceBindRefVo::getDeviceId).orElse(null); + SisElevatorInfoVo ele = elevatorInfoService.queryById(deviceId); + if (ele != null) { + log.info("下发电梯权限"); + // 根据建筑ID获取楼层信息 + SisFloorInfoVo floorInfo = floorInfoService.queryByBuildingId(ele.getBuildingId()); + // 获取电梯⇄楼层关联信息 + List floorRefList = elevatorFloorRefService.queryByElevatorId(deviceId); + // 获取楼层数组 + List layerArray = generateFloorArray(floorInfo.getMinLayer().intValue(), floorInfo.getMaxLayer().intValue()); + + + layerArray.forEach(layer -> { + SisElevatorFloorRefVo floorRef = floorRefList.stream() + .filter(vo -> vo.getLayerNum().intValue() == layer) // 直接使用 layer + .findFirst() + .orElse(null); + + if (floorRef == null) { + HikApiService.getInstance().controlGateway(ele.getControlIp(), layer, 3); + } else { + HikApiService.getInstance().controlGateway(ele.getControlIp(), layer, 2); + } + }); + } + + }); + } + +// List arrs = Arrays.asList(2, 2, 2, 3, 3, 3 ,3, 3, 3, 3, 3, 3, 3, 3, 3, 3); +// List arrs = Arrays.asList(3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2); +// for (int i = 0; i < arrs.size(); i++) { +// HikApiService.getInstance().controlGateway("192.168.24.188", (i + 1), arrs.get(i)); +// } +// log.info("权限下发执行完成,耗时:{}", System.currentTimeMillis() - s); +// try { +// Thread.sleep(10000L); +// List ass = Arrays.asList(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3); +// for (int i = 0; i < arrs.size(); i++) { +// HikApiService.getInstance().controlGateway("192.168.24.188", (i + 1), arrs.get(i)); +// } +// } catch (InterruptedException e) { +// throw new RuntimeException(e); +// } + } else { + log.info("未知报警类型,lCommand={}", lCommand); + } + return true; + } + + //输入最低层,最高层,返回楼层数组 + public List generateFloorArray(int minLayer, int maxLayer) { + + // 验证输入范围 + if (minLayer > maxLayer) { + throw new IllegalArgumentException("最低层不能大于最高层"); + } + // 使用List动态收集楼层 + List layerList = new ArrayList<>(); + // 遍历所有楼层,跳过0层 + for (int layer = minLayer; layer <= maxLayer; layer++) { + if (layer != 0) { + layerList.add(layer); + } + } + + return layerList; + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/DoorService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/DoorService.java index 59c55242..1f218a92 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/DoorService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/DoorService.java @@ -182,6 +182,7 @@ public class DoorService extends SdkBaseServer { public static boolean controlGateway(int lUserID, int lGatewayIndex, int dwStaic) { boolean b = getHcNetSDK().NET_DVR_ControlGateway(lUserID, lGatewayIndex, dwStaic); + log.info("楼层数据下发结果,楼层={},result={}", lGatewayIndex, b); if (!b) { int i = getHcNetSDK().NET_DVR_GetLastError(); log.error("梯控控制失败, errCode={}", i); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/SdkBaseServer.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/SdkBaseServer.java index 9353671e..cad9ba8e 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/SdkBaseServer.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/SdkBaseServer.java @@ -1,6 +1,7 @@ package org.dromara.sis.sdk.hik.service; import com.sun.jna.Native; +import com.sun.jna.Pointer; import lombok.extern.slf4j.Slf4j; import org.dromara.sis.sdk.hik.HCNetSDK; import org.springframework.util.Assert; @@ -18,7 +19,6 @@ public class SdkBaseServer { */ public static final int LOGIN_FAIL_CODE = -1; - public static HCNetSDK getHcNetSDK() { if (hcNetSDK == null) { throw new RuntimeException("HIK sdk 初始化失败!"); @@ -83,6 +83,41 @@ public class SdkBaseServer { return state; } + /** + * 开启hik 设备报警 + * + * @param iIndex 回调函数索引,取值范围:[0,15] + * @param callBack 回调函数 + * @return + */ + public static boolean setAlarmCallBack(int iIndex, HCNetSDK.FMSGCallBack_V31 callBack) { + boolean b = hcNetSDK.NET_DVR_SetDVRMessageCallBack_V50(iIndex, callBack, null); + if (b) { + log.info("hik 报警回调函数设置完成,iIndex={}", iIndex); + } + return b; + } + + public static boolean setAlarmChan(int lUserID){ + //报警布防参数设置 + HCNetSDK.NET_DVR_SETUPALARM_PARAM_V50 m_strAlarmInfoV50 = new HCNetSDK.NET_DVR_SETUPALARM_PARAM_V50(); + m_strAlarmInfoV50.dwSize = m_strAlarmInfoV50.size(); + m_strAlarmInfoV50.byLevel = 0; //布防等级 + m_strAlarmInfoV50.byAlarmInfoType = 1; // 智能交通报警信息上传类型:0- 老报警信息(NET_DVR_PLATE_RESULT),1- 新报警信息(NET_ITS_PLATE_RESULT) + m_strAlarmInfoV50.byRetAlarmTypeV40 = 1; //0- 移动侦测、视频丢失、遮挡、IO信号量等报警信息以普通方式上传(报警类型:COMM_ALARM_V30,报警信息结构体:NET_DVR_ALARMINFO_V30), + // 1- 报警信息以数据可变长方式上传(报警类型:COMM_ALARM_V40,报警信息结构体:NET_DVR_ALARMINFO_V40,设备若不支持则仍以普通方式上传) + m_strAlarmInfoV50.byDeployType = 0; //布防类型:0-客户端布防,1-实时布防 + m_strAlarmInfoV50.write(); + int lAlarmHandle = hcNetSDK.NET_DVR_SetupAlarmChan_V50(lUserID, m_strAlarmInfoV50, Pointer.NULL, 0); + if (lAlarmHandle == -1) { + System.err.println("布防失败,错误码为" + hcNetSDK.NET_DVR_GetLastError()); + return false; + } else { + System.out.println("布防成功"); + return true; + } + } + /** * 登出操作 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java index a1bec530..397c5e7d 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java @@ -1,7 +1,6 @@ package org.dromara.sis.sdk.huawei; import org.dromara.sis.sdk.huawei.domain.AddHWPersonReq; -import org.dromara.sis.sdk.huawei.domain.FinaHWPersonReq; import java.util.Collection; import java.util.List; @@ -32,8 +31,8 @@ public interface HuaWeiBoxApi { /** * 根据抓拍图片比对,返回人员ID * - * @param req 入参 + * @param base64Img 入参 * @return Long */ - Long findPerson(FinaHWPersonReq req); + Long findPerson(String base64Img); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/domain/FinaHWPersonReq.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/domain/FinaHWPersonReq.java index 31520f94..2073291f 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/domain/FinaHWPersonReq.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/domain/FinaHWPersonReq.java @@ -8,7 +8,6 @@ import lombok.NoArgsConstructor; * @apiNote FinaHWPersonReq * @since 2025/7/10 */ -@NoArgsConstructor @Data public class FinaHWPersonReq { /** @@ -23,6 +22,11 @@ public class FinaHWPersonReq { * page */ private PageDTO page; + + public FinaHWPersonReq() { + this.page = new PageDTO(); // 显式初始化 page + } + /** * picture */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java index d123f085..b89ce154 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java @@ -82,25 +82,35 @@ public class HuaWeiBoxApiService implements HuaWeiBoxApi { /** * 根据抓拍图片比对,返回人员ID * - * @param req 入参 + * @param base64Img 入参 * @return Long */ @Override - public Long findPerson(FinaHWPersonReq req){ + public Long findPerson(String base64Img) { String url = "/sdk_service/rest/facerepositories/peoples"; + FinaHWPersonReq req = new FinaHWPersonReq(); + FinaHWPersonReq.PictureDTO picture = new FinaHWPersonReq.PictureDTO(); + picture.setBase64(base64Img); + req.setPicture(picture); + String jsonReq = JSONUtil.toJsonStr(req); String jsonStrRes = huaWeiHttp.doPost(url, jsonReq); JSONObject jsonRes = JSONUtil.parseObj(jsonStrRes); if (jsonRes.getInt("resultCode") != 0) { - log.error("华为盒子人脸比对败,msg:{}", jsonRes.getStr("resultMsg")); + log.error("调用华为盒子人脸比对接口失败,code:{},msg:{}", jsonRes.getInt("resultCode"), jsonRes.getStr("resultMsg")); return null; } - JSONArray jsonArr = jsonRes.getJSONArray("algorithmCode"); + JSONArray jsonArr = jsonRes.getJSONArray("algorithmResults"); JSONObject obj = jsonArr.getJSONObject(0); + if (Integer.parseInt(obj.getStr("number")) == 0) { + log.error("无人脸比对数据"); + return null; + } + JSONArray peopleList = obj.getJSONArray("peopleList"); JSONObject people = peopleList.getJSONObject(0); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/utils/HuaWeiHttp.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/utils/HuaWeiHttp.java index eaf48a38..60c58ff0 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/utils/HuaWeiHttp.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/utils/HuaWeiHttp.java @@ -11,6 +11,10 @@ import org.dromara.common.redis.utils.RedisUtils; import org.springframework.stereotype.Component; import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; /** * @author lsm @@ -21,7 +25,7 @@ import java.util.Map; @Component public class HuaWeiHttp { - private static final String BASE_URL = "https://192.168.110.195:18531"; + private static final String BASE_URL = "https://47.109.37.87:18000"; private static final String USERNAME = "huawei"; private static final String PASSWORD = "qweasd123"; @@ -37,13 +41,14 @@ public class HuaWeiHttp { // 发送请求获取响应 // 使用 try-with-resources 确保资源释放 try (HttpResponse response = HttpRequest.post(url) - .header("Content-Type", "application/json") - .header("Cache-Control", "no-cache") - .body(jsonStr) - .execute()) { + .header("Content-Type", "application/json") + .header("Cache-Control", "no-cache") + .body(jsonStr) + .execute()) { if (response.getStatus() == 200 && response.getCookie("JSESSIONID") != null) { RedisUtils.setCacheObject("JSESSIONID", response.getCookie("JSESSIONID").toString()); RedisUtils.expire("JSESSIONID", 1800); + this.keepAlive(); return true; } else { log.error("华为盒子登录失败,msg:{}", response.body()); @@ -52,6 +57,66 @@ public class HuaWeiHttp { return false; } + // 保活 + public void keepAlive() { + // 创建单线程调度器 + ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); + String url = BASE_URL + "/common/keepAlive"; + + // 保存任务引用,用于后续取消 + final ScheduledFuture[] heartbeatFuture = new ScheduledFuture[1]; + + // 心跳任务 + Runnable heartbeatTask = () -> { + log.info("开始心跳执行华为盒子Session保活"); + // 发送请求获取响应 + // 使用 try-with-resources 确保资源释放 + try (HttpResponse response = HttpRequest.post(url) + .header("Content-Type", "application/json") + .header("Cache-Control", "no-cache") + .header("Cookie", RedisUtils.getCacheObject("JSESSIONID")) + .execute()) { + if (response.getStatus() == 200 && JSONUtil.parseObj(response.body()).getInt("resultCode") == 0) { + RedisUtils.expire("JSESSIONID", 1800); + log.info("保活成功"); + }else { + log.info("保活失败"); + shutdownHeartbeat(scheduler, heartbeatFuture[0]); + } + } catch (Exception e) { + // 异常:立即关闭心跳 + log.error("保活请求异常: {}", e.getMessage()); + shutdownHeartbeat(scheduler, heartbeatFuture[0]); + } + }; + + // 初始延迟0秒,之后每20分钟执行一次 + heartbeatFuture[0] = scheduler.scheduleAtFixedRate(heartbeatTask, 20, 20, TimeUnit.MINUTES); + log.info("心跳任务已启动,首次执行将在20分钟后"); + + // 添加关闭钩子确保程序退出时关闭调度器 + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + if (!scheduler.isShutdown()) { + scheduler.shutdown(); + log.info("程序退出,心跳调度器已关闭"); + } + })); + } + + private static void shutdownHeartbeat(ScheduledExecutorService scheduler, ScheduledFuture future) { + // 取消心跳任务 + if (future != null && !future.isCancelled()) { + future.cancel(false); + log.error("保活失败,心跳任务已取消"); + } + + // 关闭调度器 + if (!scheduler.isShutdown()) { + scheduler.shutdown(); + log.info("心跳调度器已关闭"); + } + } + /** * 发起Post请求 * @@ -70,11 +135,11 @@ public class HuaWeiHttp { String api = BASE_URL + url; try (HttpResponse response = HttpRequest.post(api) - .header("Content-Type", "application/json") - .header("Cache-Control", "no-cache") - .header("Cookie", RedisUtils.getCacheObject("JSESSIONID")) - .body(jsonStr) - .execute()) { + .header("Content-Type", "application/json") + .header("Cache-Control", "no-cache") + .header("Cookie", RedisUtils.getCacheObject("JSESSIONID")) + .body(jsonStr) + .execute()) { if (response.isOk()) { return response.body(); } else { @@ -109,10 +174,10 @@ public class HuaWeiHttp { String fullUrl = HttpUtil.urlWithForm(api, map, null, false); try (HttpResponse response = HttpRequest.delete(fullUrl) - .header("Content-Type", "application/json") - .header("Cache-Control", "no-cache") - .header("Cookie", RedisUtils.getCacheObject("JSESSIONID")) - .execute()) { + .header("Content-Type", "application/json") + .header("Cache-Control", "no-cache") + .header("Cookie", RedisUtils.getCacheObject("JSESSIONID")) + .execute()) { return response.body(); } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/VideoAlarmService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/VideoAlarmService.java index a3b3f2dd..4f02b8f4 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/VideoAlarmService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/VideoAlarmService.java @@ -3,11 +3,8 @@ package org.dromara.sis.sdk.unview.service; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.sis.domain.SisDeviceBindRef; -import org.dromara.sis.domain.enums.ControlTypeEnum; -import org.dromara.sis.domain.vo.SisAuthRecordVo; import org.dromara.sis.sdk.e8.AccessControlService; -import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq; +import org.dromara.sis.sdk.hik.HikApiService; import org.dromara.sis.sdk.unview.model.UvModel; import org.dromara.sis.sdk.unview.model.enums.AlarmTypeEnum; import org.dromara.sis.service.ISisAccessControlService; @@ -16,8 +13,8 @@ import org.dromara.sis.service.ISisDeviceBindRefService; import org.dromara.sis.service.ISisDeviceManageService; import org.springframework.stereotype.Service; +import java.util.Arrays; import java.util.List; -import java.util.Objects; /** * 宇视人体设备告警数据处理 @@ -111,6 +108,7 @@ public class VideoAlarmService { */ private void handleFacialCapture(UvModel.AlarmReportInfo alarmReportData) { + } /** @@ -130,54 +128,57 @@ public class VideoAlarmService { log.info("上报设备信息不存在,不处理词条数据。"); return; } + log.info("开始电梯权限下发。。。。。。。。。。。。。。。。。。。。。。"); compareResults.forEach(result -> { - // 查询设备绑定关联关系表 - SisDeviceBindRef ref = deviceBindRefService.queryByDeviceIp(channelInfo.getIpc_addr()); - if (ref == null) { - return; - } - // 门禁 - if (Objects.equals(ref.getControlType(), ControlTypeEnum.ACCESS_CONTROL.getCode())) { -// SisAccessControlVo controlVo = sisAccessControlService.queryById(ref.getBindId()); -// if (controlVo == null) { -// log.info("设备[{}]未和门禁绑定,不处理此条数据。", channelInfo.getIpc_addr()); -// return; -// } - // 人像库id -// Integer libId = result.getLib_id(); - // 宇视人员id - Integer personId = result.getPerson_id(); - // 门禁id - Long accessControlId = ref.getBindId(); - // 校验人脸是偶有同行此门禁的权限 - SisAuthRecordVo recordVo = authRecordService.checkAuth(personId, accessControlId); - // 如果有通行权限,则打开门禁 - if (recordVo == null) { - log.info("此人像[{}]没有门禁[{}]的通行权限。", personId, accessControlId); - } - // 打开门禁 - RemoteOpenDoorReq remoteOpenDoorReq = new RemoteOpenDoorReq(); - remoteOpenDoorReq.setType(0); - remoteOpenDoorReq.setReason("宇视人像识别,人像id=" + recordVo.getImgId()); - remoteOpenDoorReq.setOperatorId(0L); - RemoteOpenDoorReq.ControlData data = new RemoteOpenDoorReq.ControlData(); - data.setDoorId(recordVo.getDoorId()); - data.setDeviceId(recordVo.getDeviceId()); - remoteOpenDoorReq.setControlList(List.of(data)); - log.info("远程开门参数,params={}", JSONObject.toJSONString(remoteOpenDoorReq)); - Boolean b = accessControlService.remoteOpenDoor(remoteOpenDoorReq); - log.info("远程开门完成, result={}", b); - } - // 远程呼梯 - if (Objects.equals(ref.getControlType(), ControlTypeEnum.REMOTE_CALL_ELEVATOR.getCode())) { - // TODO 待实现 + // 下发梯控权限数据 +// List arrs = Arrays.asList(2, 2, 2, 3, 3, 3 ,3, 3, 3, 3, 3, 3, 3, 3, 3, 3); + List arrs = Arrays.asList(3, 3, 3, 2, 2, 2 ,2, 2, 2, 2, 2, 2, 2, 2, 2, 2); + for (int i = 0; i < arrs.size(); i++) { + HikApiService.getInstance().controlGateway("192.168.24.188", (i + 1), arrs.get(i)); } - // 梯控 - if (Objects.equals(ref.getControlType(), ControlTypeEnum.ELEVATOR_CONTROL.getCode())) { - // TODO 待实现 - } }); +// compareResults.forEach(result -> { +// // 查询设备绑定关联关系表 +// SisDeviceBindRef ref = deviceBindRefService.queryByDeviceIp(channelInfo.getIpc_addr()); +// if (ref == null) { +// return; +// } +// // 门禁 +// if (Objects.equals(ref.getControlType(), ControlTypeEnum.ACCESS_CONTROL.getCode())) { +// // 宇视人员id +// Integer personId = result.getPerson_id(); +// // 门禁id +// Long accessControlId = ref.getBindId(); +// // 校验人脸是偶有同行此门禁的权限 +// SisAuthRecordVo recordVo = authRecordService.checkAuth(personId, accessControlId); +// // 如果有通行权限,则打开门禁 +// if (recordVo == null) { +// log.info("此人像[{}]没有门禁[{}]的通行权限。", personId, accessControlId); +// } +// // 打开门禁 +// RemoteOpenDoorReq remoteOpenDoorReq = new RemoteOpenDoorReq(); +// remoteOpenDoorReq.setType(0); +// remoteOpenDoorReq.setReason("宇视人像识别,人像id=" + recordVo.getImgId()); +// remoteOpenDoorReq.setOperatorId(0L); +// RemoteOpenDoorReq.ControlData data = new RemoteOpenDoorReq.ControlData(); +// data.setDoorId(recordVo.getDoorId()); +// data.setDeviceId(recordVo.getDeviceId()); +// remoteOpenDoorReq.setControlList(List.of(data)); +// log.info("远程开门参数,params={}", JSONObject.toJSONString(remoteOpenDoorReq)); +// Boolean b = accessControlService.remoteOpenDoor(remoteOpenDoorReq); +// log.info("远程开门完成, result={}", b); +// } +// // 远程呼梯 +// if (Objects.equals(ref.getControlType(), ControlTypeEnum.REMOTE_CALL_ELEVATOR.getCode())) { +// // TODO 待实现 +// } +// +// // 梯控 +// if (Objects.equals(ref.getControlType(), ControlTypeEnum.ELEVATOR_CONTROL.getCode())) { +// // TODO 待实现 +// } +// }); } /** diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java index fa6b77c3..d9bdb48b 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java @@ -82,4 +82,11 @@ public interface ISisAccessControlService { */ List> queryAcTree(); + /** + * 同步门禁设备 + * + * @return Boolean + */ + Boolean syncE8(); + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthRecordService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthRecordService.java index c38079d5..8858c71c 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthRecordService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthRecordService.java @@ -1,12 +1,11 @@ package org.dromara.sis.service; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.core.domain.TreeNode; import org.dromara.sis.domain.SisAuthRecord; -import org.dromara.sis.domain.bo.AuthLibBo; -import org.dromara.sis.domain.bo.SingleAuthRecordBo; -import org.dromara.sis.domain.bo.SisAuthRecordBo; import org.dromara.sis.domain.vo.SisAuthRecordVo; +import org.dromara.sis.domain.bo.SisAuthRecordBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; import java.util.Collection; import java.util.List; @@ -15,7 +14,7 @@ import java.util.List; * 授权记录Service接口 * * @author lsm - * @date 2025-06-28 + * @since 2025-07-14 */ public interface ISisAuthRecordService { @@ -70,30 +69,31 @@ public interface ISisAuthRecordService { Boolean deleteWithValidByIds(Collection ids, Boolean isValid); /** - * 通过宇视图片id和门禁id校验此图像是否有通行权限 + * 查询库id授权的设备 * - * @param personId 人像id - * @param accessControlId 门禁id - * @return 返回授权记录 - */ - SisAuthRecordVo checkAuth(Integer personId, Long accessControlId); - - /** - * 单个人像授权 - * - * @param bo 授权信息 - * @return 是否授权成功 - */ - Boolean singleAuth(SingleAuthRecordBo bo); - - Boolean deleteByLibId(Long libId); - - Boolean authLib(AuthLibBo bo); - - /** - * 插叙库id授权的设备 * @param libId 人像库id - * @return + * @return List */ List queryAuthDevice(String libId); + + /** + * 根据人像库id删除授权记录 + * + * @param libId 人像库id + */ + Boolean deleteByLibId(Long libId); + + /** + * 查询所有可授权设备树 + * + * @return List> + */ + List> authDeviceTree(); + + /** + * 根据人脸比对ID,返回授权记录 + * + * @param personId 人脸比对ID + */ + List checkAuth(Long personId); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceBindRefService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceBindRefService.java index d47a2f8f..8b04d92c 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceBindRefService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceBindRefService.java @@ -81,7 +81,7 @@ public interface ISisDeviceBindRefService { * @param ipcAddr 设备ip * @return 返回关联关系表 */ - SisDeviceBindRef queryByDeviceIp(String ipcAddr); + List queryByDeviceIp(String ipcAddr); /** * 批量写入设备绑定关系 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java new file mode 100644 index 00000000..fdca3de7 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java @@ -0,0 +1,75 @@ +package org.dromara.sis.service; + +import org.dromara.sis.domain.vo.SisElevatorFloorRefVo; +import org.dromara.sis.domain.bo.SisElevatorFloorRefBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 电梯⇄楼层关联Service接口 + * + * @author lsm + * @since 2025-07-15 + */ +public interface ISisElevatorFloorRefService { + + /** + * 查询电梯⇄楼层关联 + * + * @param id 主键 + * @return 电梯⇄楼层关联 + */ + SisElevatorFloorRefVo queryById(Long id); + + /** + * 分页查询电梯⇄楼层关联列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 电梯⇄楼层关联分页列表 + */ + TableDataInfo queryPageList(SisElevatorFloorRefBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的电梯⇄楼层关联列表 + * + * @param bo 查询条件 + * @return 电梯⇄楼层关联列表 + */ + List queryList(SisElevatorFloorRefBo bo); + + /** + * 新增电梯⇄楼层关联 + * + * @param bo 电梯⇄楼层关联 + * @return 是否新增成功 + */ + Boolean insertByBo(SisElevatorFloorRefBo bo); + + /** + * 修改电梯⇄楼层关联 + * + * @param bo 电梯⇄楼层关联 + * @return 是否修改成功 + */ + Boolean updateByBo(SisElevatorFloorRefBo bo); + + /** + * 校验并批量删除电梯⇄楼层关联信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 根据电梯id,获取电梯⇄楼层关联信息 + * + * @param elevatorId 电梯id + */ + List queryByElevatorId(Long elevatorId); +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorInfoService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorInfoService.java index 657bc1df..c1ab87f9 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorInfoService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorInfoService.java @@ -71,4 +71,12 @@ public interface ISisElevatorInfoService { * @return 返回电梯列表 */ List queryAll(); + + /** + * 根据查询列表 + * + * @param ids 电梯id + * @return 列表 + */ + List queryListByIds(Collection ids); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisFloorInfoService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisFloorInfoService.java new file mode 100644 index 00000000..928dca17 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisFloorInfoService.java @@ -0,0 +1,76 @@ +package org.dromara.sis.service; + +import org.dromara.sis.domain.vo.SisFloorInfoVo; +import org.dromara.sis.domain.bo.SisFloorInfoBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 建筑物楼层信息Service接口 + * + * @author lsm + * @since 2025-07-15 + */ +public interface ISisFloorInfoService { + + /** + * 查询建筑物楼层信息 + * + * @param floorId 主键 + * @return 建筑物楼层信息 + */ + SisFloorInfoVo queryById(Long floorId); + + /** + * 分页查询建筑物楼层信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 建筑物楼层信息分页列表 + */ + TableDataInfo queryPageList(SisFloorInfoBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的建筑物楼层信息列表 + * + * @param bo 查询条件 + * @return 建筑物楼层信息列表 + */ + List queryList(SisFloorInfoBo bo); + + /** + * 新增建筑物楼层信息 + * + * @param bo 建筑物楼层信息 + * @return 是否新增成功 + */ + Boolean insertByBo(SisFloorInfoBo bo); + + /** + * 修改建筑物楼层信息 + * + * @param bo 建筑物楼层信息 + * @return 是否修改成功 + */ + Boolean updateByBo(SisFloorInfoBo bo); + + /** + * 校验并批量删除建筑物楼层信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 根据建筑ID返回楼层信息 + * + * @param buildingId 建筑ID + * @return 楼层信息 + */ + SisFloorInfoVo queryByBuildingId(Long buildingId); +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisLibImgRefService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisLibImgRefService.java new file mode 100644 index 00000000..3168a7b0 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisLibImgRefService.java @@ -0,0 +1,77 @@ +package org.dromara.sis.service; + +import org.dromara.sis.domain.SisLibImgRef; +import org.dromara.sis.domain.vo.SisLibImgRefVo; +import org.dromara.sis.domain.bo.SisLibImgRefBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 人像库-人像图片关联Service接口 + * + * @author lsm + * @since 2025-07-14 + */ +public interface ISisLibImgRefService { + + /** + * 查询人像库-人像图片关联 + * + * @param libId 主键 + * @return 人像库-人像图片关联 + */ + SisLibImgRefVo queryById(Long libId); + + /** + * 分页查询人像库-人像图片关联列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 人像库-人像图片关联分页列表 + */ + TableDataInfo queryPageList(SisLibImgRefBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的人像库-人像图片关联列表 + * + * @param bo 查询条件 + * @return 人像库-人像图片关联列表 + */ + List queryList(SisLibImgRefBo bo); + + /** + * 新增人像库-人像图片关联 + * + * @param bo 人像库-人像图片关联 + * @return 是否新增成功 + */ + Boolean insertByBo(SisLibImgRefBo bo); + + /** + * 修改人像库-人像图片关联 + * + * @param bo 人像库-人像图片关联 + * @return 是否修改成功 + */ + Boolean updateByBo(SisLibImgRefBo bo); + + /** + * 校验并批量删除人像库-人像图片关联信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 批量添加人像库-人像图片关联 + * + * @param refs 待添加的关联信息 + * @return 是否添加成功 + */ + Boolean addBatch(List refs); +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java index fa606f2d..cbde9276 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java @@ -15,7 +15,6 @@ import org.dromara.common.core.utils.TreeUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.property.api.RemoteFloorService; -import org.dromara.property.api.domain.vo.RemoteFloorVo; import org.dromara.sis.domain.SisAccessControl; import org.dromara.sis.domain.SisDeviceBindRef; import org.dromara.sis.domain.bo.SisAccessControlBo; @@ -24,14 +23,14 @@ import org.dromara.sis.domain.vo.SisAccessControlVo; import org.dromara.sis.domain.vo.SisDeviceManageVo; import org.dromara.sis.mapper.SisAccessControlMapper; import org.dromara.sis.sdk.e8.DoorDeviceService; -import org.dromara.sis.sdk.e8.domain.door.req.DoorDeviceAddReq; -import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceAddRes; +import org.dromara.sis.sdk.e8.domain.door.res.AuthDoorDeviceFindRes; import org.dromara.sis.service.ISisAccessControlService; import org.dromara.sis.service.ISisDeviceBindRefService; import org.dromara.sis.service.ISisDeviceManageService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; @@ -96,12 +95,10 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByAsc(SisAccessControl::getId); -// lqw.eq(StringUtils.isNotBlank(bo.getAccessCode()), SisAccessControl::getAccessCode, bo.getAccessCode()); lqw.like(StringUtils.isNotBlank(bo.getAccessName()), SisAccessControl::getAccessName, bo.getAccessName()); lqw.eq(StringUtils.isNotBlank(bo.getAccessIp()), SisAccessControl::getAccessIp, bo.getAccessIp()); lqw.eq(bo.getAccessPort() != null, SisAccessControl::getAccessPort, bo.getAccessPort()); lqw.eq(bo.getAccessType() != null, SisAccessControl::getAccessType, bo.getAccessType()); -// lqw.eq(StringUtils.isNotBlank(bo.getFactoryCode()), SisAccessControl::getFactoryCode, bo.getFactoryCode()); lqw.eq(bo.getControlType() != null, SisAccessControl::getControlType, bo.getControlType()); lqw.eq(StringUtils.isNotBlank(bo.getControlCode()), SisAccessControl::getControlCode, bo.getControlCode()); lqw.eq(StringUtils.isNotBlank(bo.getOutCode()), SisAccessControl::getOutCode, bo.getOutCode()); @@ -123,63 +120,7 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { @Override @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(SisAccessControlBo bo) { - // 校验楼层是否存在 - RemoteFloorVo remoteFloorVo = remoteFloorService.queryByFloorId(bo.getFloorId()); - Assert.notNull(remoteFloorVo, "当前楼层信息不存在。"); - // 检验设备是否存在 - SisDeviceManageVo sisDeviceManageVo = sisDeviceManageService.queryById(bo.getBindDeviceId()); - Assert.notNull(sisDeviceManageVo, "绑定设备不存在。"); - SisAccessControl add = MapstructUtils.convert(bo, SisAccessControl.class); - add.setCommunityId(remoteFloorVo.getCommunityId()); - add.setBuildingId(remoteFloorVo.getBuildingId()); - add.setUnitId(remoteFloorVo.getUnitId()); - add.setFloorId(remoteFloorVo.getId()); - Assert.notNull(add, "数据处理失败"); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - // 写入关联关系表中 - SisDeviceBindRef sisDeviceBindRef = new SisDeviceBindRef(); - sisDeviceBindRef.setDeviceId(sisDeviceManageVo.getId()); - sisDeviceBindRef.setDeviceIp(sisDeviceManageVo.getDeviceIp()); - sisDeviceBindRef.setBindId(add.getId()); - sisDeviceBindRef.setControlType(ControlTypeEnum.ACCESS_CONTROL.getCode()); - Boolean insert = sisDeviceBindRefService.insert(sisDeviceBindRef); - Assert.isTrue(insert, "写入设备关联表失败!"); - - // 添加E8门禁设备 - if (add.getControlType() == 2L) { - log.info("开始同步写入E8门禁"); - DoorDeviceAddReq e8DoorReq = new DoorDeviceAddReq(); - // 设备类型 - e8DoorReq.setType(add.getAccessType()); - // 设备名称 - e8DoorReq.setName(add.getAccessName()); - // 通讯类型 - e8DoorReq.setCommType(0); - // cpuid - e8DoorReq.setCpuID(""); - // ip - e8DoorReq.setIp(add.getAccessIp()); - // 端口 - e8DoorReq.setPort(add.getAccessPort()); - // 网关ip - e8DoorReq.setGatewayIP(""); - // 子网掩码 - e8DoorReq.setNetMask("255.255.255.0"); - - DoorDeviceAddRes e8DoorRes = doorDeviceService.addDoorDevice(e8DoorReq); - Assert.notNull(e8DoorRes, "写入E8平台失败"); - - log.info("E8平台写入成功,将返回值:{},回写到{}门禁中!", e8DoorRes.getId(), add.getAccessName()); - SisAccessControlBo wbBo = new SisAccessControlBo(); - wbBo.setId(add.getId()); - wbBo.setOutCode(e8DoorRes.getId().toString()); - Boolean update = this.updateByBo(wbBo); - Assert.isTrue(update, "外部编码回写失败"); - log.info("E8平台写入完成!"); - } - } - return flag; + return true; } /** @@ -225,10 +166,7 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 - } - return baseMapper.deleteByIds(ids) > 0; + return true; } /** @@ -260,4 +198,43 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { } return TreeUtils.build(treeNodes, 0L); } + + /** + * 同步门禁设备 + * + * @return Boolean + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean syncE8() { + List authDoorDeviceFindRes = doorDeviceService.getPageAuthDoorDeviceList(); + + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(true, SisAccessControl::getControlType, 2); + List sisAccessControlVos = baseMapper.selectVoList(lqw); + + // 过滤掉authDoorDeviceFindRes中与sisAccessControlVos具有相同 deviceId 和 outCode 的项 + List filter = authDoorDeviceFindRes.stream() + .filter(res -> sisAccessControlVos.stream() + .noneMatch(vo -> vo.getOutCode().equals(res.getDeviceId().toString()))) + .toList(); + + Collection sisACBos = new ArrayList<>(); + for (AuthDoorDeviceFindRes res : filter){ + SisAccessControl ac = new SisAccessControl(); + ac.setFactoryCode(res.getDeviceNo()); + ac.setAccessCode(res.getDeviceId().toString()); + ac.setOutCode(res.getDeviceId().toString()); + ac.setOutDoorCode(res.getId().toString()); + ac.setAccessType(1); + ac.setControlType(2); + ac.setAccessName(res.getName()); + ac.setBuildingId(0L); + ac.setCommunityId(0L); + ac.setAccessIp("127.0.0.1"); + ac.setAccessPort(8080); + sisACBos.add(ac); + } + return baseMapper.insertBatch(sisACBos); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java index 9b262c10..e5736ad3 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java @@ -1,66 +1,49 @@ package org.dromara.sis.service.impl; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.img.ImgUtil; +import cn.hutool.core.lang.Assert; +import org.dromara.common.core.domain.TreeNode; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.dubbo.config.annotation.DubboReference; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.resource.api.RemoteFileService; -import org.dromara.sis.domain.SisAuthRecord; -import org.dromara.sis.domain.SisDeviceManage; -import org.dromara.sis.domain.bo.AuthLibBo; -import org.dromara.sis.domain.bo.SingleAuthRecordBo; +import org.dromara.sis.domain.bo.SisAccessControlBo; +import org.dromara.sis.domain.bo.SisElevatorInfoBo; +import org.dromara.sis.domain.vo.SisAccessControlVo; +import org.dromara.sis.domain.vo.SisElevatorInfoVo; +import org.dromara.sis.service.ISisAccessControlService; +import org.dromara.sis.service.ISisElevatorInfoService; +import org.springframework.stereotype.Service; import org.dromara.sis.domain.bo.SisAuthRecordBo; import org.dromara.sis.domain.vo.SisAuthRecordVo; +import org.dromara.sis.domain.SisAuthRecord; import org.dromara.sis.mapper.SisAuthRecordMapper; -import org.dromara.sis.sdk.e8.AccessControlService; -import org.dromara.sis.sdk.e8.DoorDeviceService; -import org.dromara.sis.sdk.e8.VoucherControlService; -import org.dromara.sis.sdk.unview.UnViewAiBoxApi; -import org.dromara.sis.service.*; -import org.springframework.stereotype.Service; +import org.dromara.sis.service.ISisAuthRecordService; import org.springframework.transaction.annotation.Transactional; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.Base64; -import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Collection; /** * 授权记录Service业务层处理 * * @author lsm - * @since 2025-06-28 + * @since 2025-07-14 */ @Slf4j @RequiredArgsConstructor @Service public class SisAuthRecordServiceImpl implements ISisAuthRecordService { - private final UnViewAiBoxApi unViewAiBoxApi; private final SisAuthRecordMapper baseMapper; - private final VoucherControlService e8VouchService; - private final DoorDeviceService e8DoorDeviceService; - private final ISisPersonLibService sisPersonLibService; - private final ISisEEightRefService sisEEightRefService; - private final AccessControlService e8AccessControlService; - private final ISisPersonLibImgService sisPersonLibImgService; - private final ISisLibDeviceRefService sisLibDeviceRefService; - private final ISisAccessControlService sisAccessControlService; - private final ISisLibDeviceImgRefService sisLibDeviceImgRefService; - private final ISisDeviceManageService deviceManageService; - @DubboReference - private final RemoteFileService remoteFileService; + private final ISisAccessControlService accessControlService; + private final ISisElevatorInfoService elevatorInfoService; /** * 查询授权记录 @@ -82,7 +65,7 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { */ @Override public TableDataInfo queryPageList(SisAuthRecordBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } @@ -116,184 +99,49 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { @Override @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(SisAuthRecordBo bo) { -// List refVos = sisLibDeviceRefService.queryByLibIds(Collections.singleton(bo.getLibId())); -// Assert.notEmpty(refVos, "图像库与设备关联关系不存在"); -// List eqpIds = refVos.stream().map(SisLibDeviceRefVo::getEqpId).toList(); -// -// SisPersonLibVo libVo = sisPersonLibService.queryById(bo.getLibId()); -// Assert.notNull(libVo, "图像库不存在,id=" + (bo.getLibId())); -// -// List imgList = sisPersonLibImgService.queryListByIds(bo.getImgIds()); -// Assert.notEmpty(imgList, "图片不存在"); -// -// List acList = sisAccessControlService.queryListByIds(bo.getAcIds()); -// Assert.notEmpty(acList, "门禁设备不存在!"); -// -// -// try { -// log.info("开始对宇视盒子下发照片,图片:{}、设备:{}", bo.getImgIds(), eqpIds); -// for (SisPersonLibImgVo imgVo : imgList) { -// for (Long eqpId : eqpIds) { -// long eqp_lib_id; -// Integer eqp_lib_img_id; -// -// byte[] imageByte = remoteFileService.downloadToByteArray(imgVo.getImgOssId()); -// Assert.notNull(imageByte, "图片下载失败"); -// -// SisAccessControlDeviceVo vo = sisAccessControlDeviceService.queryById(eqpId); -// Assert.notNull(vo, "门禁控制设备不存在,id=" + eqpId); -// log.info(libVo .getLibType() == 1 ? "准备写入人像设备,code={}" : "准备写入工服设备,code={}", vo.getEqpNo()); -// -// UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo(); -// systemInfo.setAccount(vo.getEqpAccount()); -// systemInfo.setPassword(vo.getEqpPwd()); -// systemInfo.setIp(vo.getEqpIp()); -// systemInfo.setPort(vo.getEqpPort()); -// -// // 获取宇视线上库ID -// SisLibDeviceRefBo refBo = new SisLibDeviceRefBo(); -// refBo.setEqpId(eqpId); -// refBo.setLibId(libVo.getId()); -// List refVo = sisLibDeviceRefService.queryList(refBo); -// Assert.notNull(refVo, "系统库与设备库关联关系不存在!libId:{},eqpId:{}", libVo.getId(), eqpId); -// eqp_lib_id = refVo.get(0).getEqpLibId(); -// -// if (libVo.getLibType() == 1) { -// // 宇视添加人像 -// UvModel.AddPersonParams addPersonParams = new UvModel.AddPersonParams(); -// addPersonParams.setPerson_name(imgVo.getImgName()); -// addPersonParams.setImage_base64(base64Helper(imageByte)); -// addPersonParams.setLib_id(Math.toIntExact(eqp_lib_id)); -// addPersonParams.setSex(imgVo.getSex()); -// addPersonParams.setEmail(imgVo.getEmail()); -// addPersonParams.setTel(imgVo.getTel()); -// addPersonParams.setCertificate_type(imgVo.getCertificateType()); -// addPersonParams.setCertificate_no(imgVo.getCertificateNo()); -// addPersonParams.setBirth_date(imgVo.getBirthDate()); -// // 发起请求获取响应 -// UvModel.AddPersonResult addResult = unViewAiBoxApi.addPerson(systemInfo, addPersonParams); -// eqp_lib_img_id = addResult.getPerson_id(); -// -// } else { -// UvModel.WorkClothesInfo addResult = unViewAiBoxApi.addWorkClothes(systemInfo, Math.toIntExact(eqp_lib_id), base64Helper(imageByte)); -// eqp_lib_img_id = addResult.getWorkclothes_id(); -// } -// Assert.notNull(eqp_lib_img_id, "图片上传宇视盒子失败"); -// log.info("图片上传宇视盒子完成,eqp_lib_img_id = {}", eqp_lib_img_id); -// -// SisLibDeviceImgRefBo ref = new SisLibDeviceImgRefBo(); -// ref.setLibId(libVo.getId()); -// ref.setImgId(imgVo.getId()); -// ref.setEqpId(eqpId); -// ref.setEqpLibId(eqp_lib_id); -// ref.setEqpLibImgId(eqp_lib_img_id.longValue()); -// Boolean insert = sisLibDeviceImgRefService.insertByBo(ref); -// Assert.isTrue(insert, "写入图片关联关系表失败!"); -// -// } -// } -// log.info("图片开始下发完成!"); -// -// log.info("开始写入E8平台,图片:{}、门禁:{}", bo.getImgIds(), bo.getAcIds()); -// for (SisPersonLibImgVo imgVo : imgList) { -// byte[] imageByte = remoteFileService.downloadToByteArray(imgVo.getImgOssId()); -// Assert.notNull(imageByte, "图片下载失败"); -// -// log.info("E8平台上传图片,{}", imgVo.getId()); -// String url = e8VouchService.uploadFace(imageByte); -// Assert.notNull(url, "E8平台上传图片失败"); -// log.info("E8平台上传图片完成!"); -// -// log.info("E8平台发行凭证"); -// IssueVoucherReq req = new IssueVoucherReq(); -// // 34:普通用户卡 -// req.setCardType(34); -// // 70:人脸凭证 -// req.setVoucherType(70); -// // TODO 临时默认人员 -// req.setPersonID(539696740646981L); -// req.setTxtData(url); -// Long vId = e8VouchService.issueVoucher(req); -// Assert.notNull(vId, "E8平台发行凭证失败"); -// log.info("E8平台发行凭证完成!"); -// -// log.info("E8平台授权凭证"); -// // 查询E8授权门列表 -// List authDoorList = e8DoorDeviceService.getPageAuthDoorDeviceList(); -// Assert.notEmpty(authDoorList, "E8平台授权门列表为空"); -// -// // E8 授权列表 -// List authList = new ArrayList<>(acList.size()); -// // 授权记录 -// List recordList = new ArrayList<>(acList.size()); -// // E8授权门 -// AuthDoorDeviceFindRes authDoor = null; -// for (SisAccessControlVo sisAccessControlVo : acList) { -// if (sisAccessControlVo.getControlType() != 1 && sisAccessControlVo.getAccessType() != 2) { -// -// // 通过门禁ID匹配授权门 -// authDoor = authDoorList.stream().filter(item -> item.getDeviceId() == Long.parseLong(sisAccessControlVo.getOutCode())).findFirst().orElse(null); -// -// if (authDoor != null) { -// CustomerAuthAddReq.AuthGroupData door = new CustomerAuthAddReq.AuthGroupData(); -// door.setType(0); -// door.setGatewayType(1); -// // E8授权传入ID为门ID,非门禁ID -// door.setId(authDoor.getId()); -// authList.add(door); -// -// SisAuthRecord authRecord = new SisAuthRecord(); -// authRecord.setDoorId(authDoor.getId()); -// authRecord.setDeviceId(authDoor.getDeviceId()); -// authRecord.setLibId(imgVo.getLibId()); -// authRecord.setImgId(imgVo.getId()); -// authRecord.setAcId(sisAccessControlVo.getId()); -// recordList.add(authRecord); -// } -// } -// } -// -// CustomerAuthAddReq authReq = new CustomerAuthAddReq(); -// authReq.setAuthType(0); -// authReq.setScheduleId(1L); -// authReq.setPersonIds(Collections.singletonList(539696740646981L)); -// authReq.setStartTime("2025-06-25 11: 23: 39"); -// authReq.setEndTime("2025-07-25 11: 23: 39"); -// authReq.setAuthData(authList); -// Boolean auth = e8AccessControlService.addCustomerAuth(authReq); -// Assert.isTrue(auth, "E8平台授权失败"); -// log.info("E8平台授权完成!"); -// boolean insert = baseMapper.insertBatch(recordList); -// Assert.isTrue(insert, "写入E8关联关系表失败!"); -// } -// log.info("写入E8平台完成!"); -// -// } catch (Exception e) { -// throw new RuntimeException(e.getMessage()); -// } -// -// return true; - return true; - } + if (CollUtil.isEmpty(bo.getDeviceIds())) { + return false; + } - public String base64Helper(byte[] imageByte) throws IOException { - // 1. 将字节数组解码为BufferedImage对象 - ByteArrayInputStream bis = new ByteArrayInputStream(imageByte); + // 每次授权先删除上一次授权信息 + deleteByLibId(bo.getLibId()); - // 2. 将图片重新编码为JPG格式的字节数组 - ByteArrayOutputStream bos = new ByteArrayOutputStream(); + // 过滤不是设备的节点数据 + // 门禁设备 + List acVoList = accessControlService.queryListByIds(bo.getDeviceIds()); + // 电梯设备 + List eleVoList = elevatorInfoService.queryListByIds(bo.getDeviceIds()); + if (CollUtil.isEmpty(acVoList) || CollUtil.isEmpty(eleVoList)) { + return false; + } - ImgUtil.convert(bis, "jpg", bos); + // 批量写入授权数据 + boolean flag = false; + log.info("开始写入门禁授权记录,acIds:{}", acVoList); + for (SisAccessControlVo ac : acVoList) { + SisAuthRecord authRecord = new SisAuthRecord(); - byte[] jpgBytes = bos.toByteArray(); + authRecord.setDeviceType(1); + authRecord.setDeviceId(ac.getId()); + authRecord.setLibId(bo.getLibId()); + flag = baseMapper.insert(authRecord) > 0; + Assert.isTrue(flag, "写入门禁授权记录失败!"); + } + log.info("写入门禁授权记录完成"); - // 3. 将JPG字节数组转为Base64字符串 - return Base64.getEncoder().encodeToString(jpgBytes); - } + log.info("开始写入电梯授权记录,eleIds:{}", eleVoList); + for (SisElevatorInfoVo ele : eleVoList) { + SisAuthRecord authRecord = new SisAuthRecord(); - @Override - public Boolean singleAuth(SingleAuthRecordBo bo) { - return null; + authRecord.setDeviceType(2); + authRecord.setLibId(bo.getLibId()); + authRecord.setDeviceId(ele.getElevatorId()); + flag = baseMapper.insert(authRecord) > 0; + Assert.isTrue(flag, "写入电梯授权记录失败!"); + } + log.info("写入电梯授权记录完成"); + + return flag; } /** @@ -331,45 +179,99 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { return baseMapper.deleteByIds(ids) > 0; } - @Override - public SisAuthRecordVo checkAuth(Integer personId, Long accessControlId) { - return baseMapper.checkAuth(personId, accessControlId); - } - - @Override - public Boolean deleteByLibId(Long libId) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(SisAuthRecord::getLibId, libId); - return baseMapper.delete(lqw) > 0; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean authLib(AuthLibBo bo) { - if (CollUtil.isEmpty(bo.getDeviceIds())) { - return false; - } - // 每次授权先删除上一次授权信息 - deleteByLibId(bo.getLibId()); - // 过滤点不是设备的节点数据 - List ls = deviceManageService.queryByIds(bo.getDeviceIds()); - if (CollUtil.isEmpty(ls)) { - return false; - } - // 批量写入授权数据 - List list = ls.stream().map(item -> { - SisAuthRecord authRecord = new SisAuthRecord(); - authRecord.setDeviceId(item.getId()); - authRecord.setLibId(bo.getLibId()); - return authRecord; - }).toList(); - return baseMapper.insertBatch(list); - } - + /** + * 查询库id授权的设备 + * + * @param libId 人像库id + * @return List + */ @Override public List queryAuthDevice(String libId) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(SisAuthRecord::getLibId, libId); return baseMapper.selectList(lqw); } + + /** + * 根据人像库id删除授权记录 + * + * @param libId 人像库id + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean deleteByLibId(Long libId) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SisAuthRecord::getLibId, libId); + return baseMapper.delete(lqw) > 0; + } + + /** + * 查询所有可授权设备树 + * + * @return List> + */ + @Override + public List> authDeviceTree() { + // 暂时将所有数据放入写死的根节点中 + TreeNode root = new TreeNode<>(); + root.setLevel(0); + root.setCode(0L); + root.setParentCode(-1L); + root.setLabel("授权设备"); + + // 创建门禁设备父节点 + TreeNode accessNode = new TreeNode<>(); + accessNode.setLevel(1); + accessNode.setCode(1L); + accessNode.setParentCode(0L); + accessNode.setLabel("门禁设备"); + + // 创建电梯父节点 + TreeNode elevatorNode = new TreeNode<>(); + elevatorNode.setLevel(1); + elevatorNode.setCode(2L); + elevatorNode.setParentCode(0L); + elevatorNode.setLabel("电梯设备"); + + + List acVoList = accessControlService.queryList(new SisAccessControlBo()); + List eleVoList = elevatorInfoService.queryList(new SisElevatorInfoBo()); + + + List> acChildrenList = acVoList.stream().map(item -> { + TreeNode node = new TreeNode<>(); + node.setLevel(2); + node.setCode(item.getId()); + node.setParentCode(1L); + node.setLabel(item.getAccessName()); + return node; + }).toList(); + + List> eleChildrenList = eleVoList.stream().map(item -> { + TreeNode node = new TreeNode<>(); + node.setLevel(2); + node.setCode(item.getElevatorId()); + node.setParentCode(2L); + node.setLabel(item.getElevatorName()); + return node; + }).toList(); + + // 将子节点列表分别添加到对应的父节点 + accessNode.setChildren(acChildrenList); + elevatorNode.setChildren(eleChildrenList); + + // 最后将两个父节点添加到根节点 + root.setChildren(List.of(accessNode, elevatorNode)); + return List.of(root); + } + + /** + * 根据人脸比对ID,返回授权记录 + * + * @param personId 人脸比对ID + */ + @Override + public List checkAuth(Long personId) { + return baseMapper.checkAuth(personId); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceBindRefServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceBindRefServiceImpl.java index 6657674f..7c1f6bd5 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceBindRefServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceBindRefServiceImpl.java @@ -138,10 +138,10 @@ public class SisDeviceBindRefServiceImpl implements ISisDeviceBindRefService { } @Override - public SisDeviceBindRef queryByDeviceIp(String ipcAddr) { + public List queryByDeviceIp(String ipcAddr) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(SisDeviceBindRef::getDeviceIp, ipcAddr); - return baseMapper.selectOne(lqw); + return baseMapper.selectVoList(lqw); } @Override diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java new file mode 100644 index 00000000..524fae90 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java @@ -0,0 +1,145 @@ +package org.dromara.sis.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.dromara.sis.domain.bo.SisElevatorFloorRefBo; +import org.dromara.sis.domain.vo.SisElevatorFloorRefVo; +import org.dromara.sis.domain.SisElevatorFloorRef; +import org.dromara.sis.mapper.SisElevatorFloorRefMapper; +import org.dromara.sis.service.ISisElevatorFloorRefService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 电梯⇄楼层关联Service业务层处理 + * + * @author lsm + * @date 2025-07-15 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefService { + + private final SisElevatorFloorRefMapper baseMapper; + + /** + * 查询电梯⇄楼层关联 + * + * @param id 主键 + * @return 电梯⇄楼层关联 + */ + @Override + public SisElevatorFloorRefVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询电梯⇄楼层关联列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 电梯⇄楼层关联分页列表 + */ + @Override + public TableDataInfo queryPageList(SisElevatorFloorRefBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的电梯⇄楼层关联列表 + * + * @param bo 查询条件 + * @return 电梯⇄楼层关联列表 + */ + @Override + public List queryList(SisElevatorFloorRefBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SisElevatorFloorRefBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(SisElevatorFloorRef::getId); + lqw.eq(bo.getElevatorId() != null, SisElevatorFloorRef::getElevatorId, bo.getElevatorId()); + lqw.eq(bo.getLayerNum() != null, SisElevatorFloorRef::getLayerNum, bo.getLayerNum()); + return lqw; + } + + /** + * 新增电梯⇄楼层关联 + * + * @param bo 电梯⇄楼层关联 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SisElevatorFloorRefBo bo) { + SisElevatorFloorRef add = MapstructUtils.convert(bo, SisElevatorFloorRef.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改电梯⇄楼层关联 + * + * @param bo 电梯⇄楼层关联 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SisElevatorFloorRefBo bo) { + SisElevatorFloorRef update = MapstructUtils.convert(bo, SisElevatorFloorRef.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SisElevatorFloorRef entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除电梯⇄楼层关联信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 根据电梯id,获取电梯⇄楼层关联信息 + * + * @param elevatorId 电梯id + */ + @Override + public List queryByElevatorId(Long elevatorId) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SisElevatorFloorRef::getElevatorId, elevatorId); + return baseMapper.selectVoList(lqw); + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java index 139b88ee..78363c16 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java @@ -253,4 +253,15 @@ public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService { public List queryAll() { return baseMapper.selectVoList(); } + + /** + * 根据查询列表 + * + * @param ids 电梯id + * @return 列表 + */ + @Override + public List queryListByIds(Collection ids){ + return baseMapper.selectVoByIds(ids); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisFloorInfoServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisFloorInfoServiceImpl.java new file mode 100644 index 00000000..60ace67c --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisFloorInfoServiceImpl.java @@ -0,0 +1,149 @@ +package org.dromara.sis.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.dromara.sis.domain.bo.SisFloorInfoBo; +import org.dromara.sis.domain.vo.SisFloorInfoVo; +import org.dromara.sis.domain.SisFloorInfo; +import org.dromara.sis.mapper.SisFloorInfoMapper; +import org.dromara.sis.service.ISisFloorInfoService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 建筑物楼层信息Service业务层处理 + * + * @author lsm + * @since 2025-07-15 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class SisFloorInfoServiceImpl implements ISisFloorInfoService { + + private final SisFloorInfoMapper baseMapper; + + /** + * 查询建筑物楼层信息 + * + * @param floorId 主键 + * @return 建筑物楼层信息 + */ + @Override + public SisFloorInfoVo queryById(Long floorId){ + return baseMapper.selectVoById(floorId); + } + + /** + * 分页查询建筑物楼层信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 建筑物楼层信息分页列表 + */ + @Override + public TableDataInfo queryPageList(SisFloorInfoBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的建筑物楼层信息列表 + * + * @param bo 查询条件 + * @return 建筑物楼层信息列表 + */ + @Override + public List queryList(SisFloorInfoBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SisFloorInfoBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(SisFloorInfo::getFloorId); + lqw.eq(bo.getMinLayer() != null, SisFloorInfo::getMinLayer, bo.getMinLayer()); + lqw.eq(bo.getMaxLayer() != null, SisFloorInfo::getMaxLayer, bo.getMaxLayer()); + lqw.eq(bo.getBuildingId() != null, SisFloorInfo::getBuildingId, bo.getBuildingId()); + lqw.eq(bo.getCommunityId() != null, SisFloorInfo::getCommunityId, bo.getCommunityId()); + return lqw; + } + + /** + * 新增建筑物楼层信息 + * + * @param bo 建筑物楼层信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SisFloorInfoBo bo) { + SisFloorInfo add = MapstructUtils.convert(bo, SisFloorInfo.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setFloorId(add.getFloorId()); + } + return flag; + } + + /** + * 修改建筑物楼层信息 + * + * @param bo 建筑物楼层信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SisFloorInfoBo bo) { + SisFloorInfo update = MapstructUtils.convert(bo, SisFloorInfo.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SisFloorInfo entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除建筑物楼层信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 根据建筑ID返回楼层信息 + * + * @param buildingId 建筑ID + * @return 楼层信息 + */ + @Override + public SisFloorInfoVo queryByBuildingId(Long buildingId){ + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + qw.eq(SisFloorInfo::getBuildingId, buildingId); + return baseMapper.selectVoOne(qw); + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisLibImgRefServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisLibImgRefServiceImpl.java new file mode 100644 index 00000000..4a0a0c74 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisLibImgRefServiceImpl.java @@ -0,0 +1,148 @@ +package org.dromara.sis.service.impl; + +import cn.hutool.core.lang.Assert; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.dromara.sis.domain.bo.SisLibImgRefBo; +import org.dromara.sis.domain.vo.SisLibImgRefVo; +import org.dromara.sis.domain.SisLibImgRef; +import org.dromara.sis.mapper.SisLibImgRefMapper; +import org.dromara.sis.service.ISisLibImgRefService; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 人像库-人像图片关联Service业务层处理 + * + * @author lsm + * @since 2025-07-14 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class SisLibImgRefServiceImpl implements ISisLibImgRefService { + + private final SisLibImgRefMapper baseMapper; + + /** + * 查询人像库-人像图片关联 + * + * @param libId 主键 + * @return 人像库-人像图片关联 + */ + @Override + public SisLibImgRefVo queryById(Long libId){ + return baseMapper.selectVoById(libId); + } + + /** + * 分页查询人像库-人像图片关联列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 人像库-人像图片关联分页列表 + */ + @Override + public TableDataInfo queryPageList(SisLibImgRefBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的人像库-人像图片关联列表 + * + * @param bo 查询条件 + * @return 人像库-人像图片关联列表 + */ + @Override + public List queryList(SisLibImgRefBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SisLibImgRefBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(SisLibImgRef::getLibId); + lqw.orderByAsc(SisLibImgRef::getImgId); + return lqw; + } + + /** + * 新增人像库-人像图片关联 + * + * @param bo 人像库-人像图片关联 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SisLibImgRefBo bo) { + SisLibImgRef add = MapstructUtils.convert(bo, SisLibImgRef.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setLibId(add.getLibId()); + } + return flag; + } + + /** + * 修改人像库-人像图片关联 + * + * @param bo 人像库-人像图片关联 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SisLibImgRefBo bo) { + SisLibImgRef update = MapstructUtils.convert(bo, SisLibImgRef.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SisLibImgRef entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除人像库-人像图片关联信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 批量添加人像库-人像图片关联 + * + * @param refs 待添加的关联信息 + * @return boolean + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean addBatch(List refs){ + boolean flag = baseMapper.insertBatch(refs); + Assert.isTrue( flag, "批量添加人像库-人像图片关联失败"); + return flag; + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java index 70ed0ab9..3381d24a 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java @@ -14,7 +14,9 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.resource.api.RemoteFileService; +import org.dromara.sis.domain.SisLibImgRef; import org.dromara.sis.domain.SisPersonLibImg; +import org.dromara.sis.domain.bo.SisLibImgRefBo; import org.dromara.sis.domain.bo.SisPersonLibImgBo; import org.dromara.sis.domain.vo.*; import org.dromara.sis.mapper.SisPersonLibImgMapper; @@ -38,7 +40,9 @@ import java.util.*; public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { private final SisPersonLibImgMapper baseMapper; + private final HuaWeiBoxApi huaWeiBoxApi; + private final ISisLibImgRefService sisLibImgRefService; @DubboReference private final RemoteFileService remoteFileService; @@ -51,7 +55,15 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { */ @Override public SisPersonLibImgVo queryById(Long id) { - return baseMapper.selectVoById(id); + SisLibImgRefBo refBo = new SisLibImgRefBo(); + refBo.setImgId(id); + List refs = sisLibImgRefService.queryList(refBo); + Collection refIds = refs.stream().map(SisLibImgRefVo::getId).toList(); + + SisPersonLibImgVo vo = new SisPersonLibImgVo(); + vo.setLibIds(refIds); + + return vo; } /** @@ -84,7 +96,6 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByAsc(SisPersonLibImg::getId); - lqw.eq(bo.getLibId() != null, SisPersonLibImg::getLibId, bo.getLibId()); lqw.like(StringUtils.isNotBlank(bo.getImgName()), SisPersonLibImg::getImgName, bo.getImgName()); lqw.eq(bo.getImgOssId() != null, SisPersonLibImg::getImgOssId, bo.getImgOssId()); lqw.eq(bo.getSex() != null, SisPersonLibImg::getSex, bo.getSex()); @@ -130,7 +141,20 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { add.setRemoteImgId(pId); flag = baseMapper.insert(add) > 0; - Assert.isTrue(flag, "新增失败"); + Assert.isTrue(flag, "新增人像失败"); + + log.info("开始写入人像⇄人像库关联表"); + List refs = new ArrayList<>(); + for (Long libId : bo.getLibIds()) { + SisLibImgRef ref = new SisLibImgRef(); + ref.setLibId(libId); + ref.setImgId(add.getId()); + refs.add(ref); + } + Boolean refFlag = sisLibImgRefService.addBatch(refs); + Assert.isTrue(refFlag, "写入人像⇄人像库关联表失败!"); + log.info("写入人像⇄人像库关联表完成"); + } catch (Exception e) { throw new RuntimeException(e.getMessage()); } diff --git a/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml index 27bad1ae..91142918 100644 --- a/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml +++ b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml @@ -5,10 +5,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/ruoyi-visual/ruoyi-nacos/src/main/resources/application.properties b/ruoyi-visual/ruoyi-nacos/src/main/resources/application.properties index 7793dd73..a76b51da 100644 --- a/ruoyi-visual/ruoyi-nacos/src/main/resources/application.properties +++ b/ruoyi-visual/ruoyi-nacos/src/main/resources/application.properties @@ -40,8 +40,8 @@ spring.sql.init.platform=mysql db.num=1 ### Connect URL of DB: -db.url.0=jdbc:mysql://47.109.37.87:3002/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true -db.user.0=by +db.url.0=jdbc:mysql://192.168.24.98:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true +db.user.0=root db.password.0=123456 ### the maximum retry times for push