diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteResidentPersonService.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteResidentPersonService.java new file mode 100644 index 00000000..b3d4986c --- /dev/null +++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteResidentPersonService.java @@ -0,0 +1,19 @@ +package org.dromara.property.api; + +import org.dromara.property.api.domain.vo.RemoteResidentPersonVo; + +import java.util.List; + +/** + * @author lsm + * @apiNote RemoteResidentPersonService + * @since 2025/7/26 + */ +public interface RemoteResidentPersonService { + + // 查询已上传图片,未授权人员 + List queryUnAuthPerson(); + + // 更新E8平台id + Boolean updateE8Id(Long personId, Long e8Id); +} diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteResidentPersonVo.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteResidentPersonVo.java new file mode 100644 index 00000000..01409e4e --- /dev/null +++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteResidentPersonVo.java @@ -0,0 +1,35 @@ +package org.dromara.property.api.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * @author lsm + * @apiNote RemoteResidentPersonVo + * @since 2025/7/26 + */ +@Data +public class RemoteResidentPersonVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long id; + + private String ossId; + + private String name; + + private Long gender; + + private String idCard; + + private Long authGroupId; + + private Date authBegDate; + + private Date authEndDate; +} diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSisAuth.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSisAuth.java index f657f718..9e7caf2f 100644 --- a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSisAuth.java +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSisAuth.java @@ -9,5 +9,5 @@ import org.dromara.sis.api.domain.RemotePersonAuth; */ public interface RemoteSisAuth { - Long personAuth(RemotePersonAuth personAuth); + Boolean personAuth(RemotePersonAuth personAuth); } diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java index a31fc040..f6c80e75 100644 --- a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java @@ -37,8 +37,8 @@ public class RemotePersonAuth implements Serializable { private Long authGroupId; - private Date begDate; + private Date authBegDate; - private Date endDate; + private Date authEndDate; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CapitalApplicationController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CapitalApplicationController.java new file mode 100644 index 00000000..aa7da895 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CapitalApplicationController.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.CapitalApplicationVo; +import org.dromara.property.domain.bo.CapitalApplicationBo; +import org.dromara.property.service.ICapitalApplicationService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 资产申请 + * 前端访问路由地址为:/domain/application + * + * @author mocheng + * @date 2025-07-25 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/capitalApplication") +public class CapitalApplicationController extends BaseController { + + private final ICapitalApplicationService capitalApplicationService; + + /** + * 查询资产申请列表 + */ + @SaCheckPermission("domain:application:list") + @GetMapping("/list") + public TableDataInfo list(CapitalApplicationBo bo, PageQuery pageQuery) { + return capitalApplicationService.queryPageList(bo, pageQuery); + } + + /** + * 导出资产申请列表 + */ + @SaCheckPermission("domain:application:export") + @Log(title = "资产申请", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(CapitalApplicationBo bo, HttpServletResponse response) { + List list = capitalApplicationService.queryList(bo); + ExcelUtil.exportExcel(list, "资产申请", CapitalApplicationVo.class, response); + } + + /** + * 获取资产申请详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("domain:application:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(capitalApplicationService.queryById(id)); + } + + /** + * 新增资产申请 + */ + @SaCheckPermission("domain:application:add") + @Log(title = "资产申请", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CapitalApplicationBo bo) { + return toAjax(capitalApplicationService.insertByBo(bo)); + } + + /** + * 修改资产申请 + */ + @SaCheckPermission("domain:application:edit") + @Log(title = "资产申请", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CapitalApplicationBo bo) { + return toAjax(capitalApplicationService.updateByBo(bo)); + } + + /** + * 删除资产申请 + * + * @param ids 主键串 + */ + @SaCheckPermission("domain:application:remove") + @Log(title = "资产申请", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(capitalApplicationService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CarInfoController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CarInfoController.java new file mode 100644 index 00000000..059e656b --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CarInfoController.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.CarInfoVo; +import org.dromara.property.domain.bo.CarInfoBo; +import org.dromara.property.service.ICarInfoService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 车辆管理-车辆信息 + * 前端访问路由地址为:/property/carInfo + * + * @author mocheng + * @date 2025-07-26 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/carInfo") +public class CarInfoController extends BaseController { + + private final ICarInfoService carInfoService; + + /** + * 查询车辆管理-车辆信息列表 + */ + @SaCheckPermission("property:carInfo:list") + @GetMapping("/list") + public TableDataInfo list(CarInfoBo bo, PageQuery pageQuery) { + return carInfoService.queryPageList(bo, pageQuery); + } + + /** + * 导出车辆管理-车辆信息列表 + */ + @SaCheckPermission("property:carInfo:export") + @Log(title = "车辆管理-车辆信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(CarInfoBo bo, HttpServletResponse response) { + List list = carInfoService.queryList(bo); + ExcelUtil.exportExcel(list, "车辆管理-车辆信息", CarInfoVo.class, response); + } + + /** + * 获取车辆管理-车辆信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("property:carInfo:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(carInfoService.queryById(id)); + } + + /** + * 新增车辆管理-车辆信息 + */ + @SaCheckPermission("property:carInfo:add") + @Log(title = "车辆管理-车辆信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CarInfoBo bo) { + return toAjax(carInfoService.insertByBo(bo)); + } + + /** + * 修改车辆管理-车辆信息 + */ + @SaCheckPermission("property:carInfo:edit") + @Log(title = "车辆管理-车辆信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CarInfoBo bo) { + return toAjax(carInfoService.updateByBo(bo)); + } + + /** + * 删除车辆管理-车辆信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("property:carInfo:remove") + @Log(title = "车辆管理-车辆信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(carInfoService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CarTypeController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CarTypeController.java new file mode 100644 index 00000000..1572a3b8 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CarTypeController.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.CarTypeVo; +import org.dromara.property.domain.bo.CarTypeBo; +import org.dromara.property.service.ICarTypeService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 车辆管理-车辆类型 + * 前端访问路由地址为:/property/carType + * + * @author mocheng + * @date 2025-07-26 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/carType") +public class CarTypeController extends BaseController { + + private final ICarTypeService carTypeService; + + /** + * 查询车辆管理-车辆类型列表 + */ + @SaCheckPermission("property:carType:list") + @GetMapping("/list") + public TableDataInfo list(CarTypeBo bo, PageQuery pageQuery) { + return carTypeService.queryPageList(bo, pageQuery); + } + + /** + * 导出车辆管理-车辆类型列表 + */ + @SaCheckPermission("property:carType:export") + @Log(title = "车辆管理-车辆类型", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(CarTypeBo bo, HttpServletResponse response) { + List list = carTypeService.queryList(bo); + ExcelUtil.exportExcel(list, "车辆管理-车辆类型", CarTypeVo.class, response); + } + + /** + * 获取车辆管理-车辆类型详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("property:carType:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(carTypeService.queryById(id)); + } + + /** + * 新增车辆管理-车辆类型 + */ + @SaCheckPermission("property:carType:add") + @Log(title = "车辆管理-车辆类型", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CarTypeBo bo) { + return toAjax(carTypeService.insertByBo(bo)); + } + + /** + * 修改车辆管理-车辆类型 + */ + @SaCheckPermission("property:carType:edit") + @Log(title = "车辆管理-车辆类型", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CarTypeBo bo) { + return toAjax(carTypeService.updateByBo(bo)); + } + + /** + * 删除车辆管理-车辆类型 + * + * @param ids 主键串 + */ + @SaCheckPermission("property:carType:remove") + @Log(title = "车辆管理-车辆类型", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(carTypeService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/MaintainKnowledgeController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/MaintainKnowledgeController.java new file mode 100644 index 00000000..cc288f38 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/MaintainKnowledgeController.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.MaintainKnowledgeVo; +import org.dromara.property.domain.bo.MaintainKnowledgeBo; +import org.dromara.property.service.IMaintainKnowledgeService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 维保知识 + * 前端访问路由地址为:/domain/knowledge + * + * @author mocheng + * @date 2025-07-24 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/knowledge") +public class MaintainKnowledgeController extends BaseController { + + private final IMaintainKnowledgeService maintainKnowledgeService; + + /** + * 查询维保知识列表 + */ + @SaCheckPermission("domain:knowledge:list") + @GetMapping("/list") + public TableDataInfo list(MaintainKnowledgeBo bo, PageQuery pageQuery) { + return maintainKnowledgeService.queryPageList(bo, pageQuery); + } + + /** + * 导出维保知识列表 + */ + @SaCheckPermission("domain:knowledge:export") + @Log(title = "维保知识", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(MaintainKnowledgeBo bo, HttpServletResponse response) { + List list = maintainKnowledgeService.queryList(bo); + ExcelUtil.exportExcel(list, "维保知识", MaintainKnowledgeVo.class, response); + } + + /** + * 获取维保知识详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("domain:knowledge:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(maintainKnowledgeService.queryById(id)); + } + + /** + * 新增维保知识 + */ + @SaCheckPermission("domain:knowledge:add") + @Log(title = "维保知识", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody MaintainKnowledgeBo bo) { + return toAjax(maintainKnowledgeService.insertByBo(bo)); + } + + /** + * 修改维保知识 + */ + @SaCheckPermission("domain:knowledge:edit") + @Log(title = "维保知识", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody MaintainKnowledgeBo bo) { + return toAjax(maintainKnowledgeService.updateByBo(bo)); + } + + /** + * 删除维保知识 + * + * @param ids 主键串 + */ + @SaCheckPermission("domain:knowledge:remove") + @Log(title = "维保知识", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(maintainKnowledgeService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CapitalApplication.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CapitalApplication.java new file mode 100644 index 00000000..ba648acd --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CapitalApplication.java @@ -0,0 +1,95 @@ +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.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 资产申请对象 capital_application + * + * @author mocheng + * @date 2025-07-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("capital_application") +public class CapitalApplication extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * 标题 + */ + private String title; + /** + * 审核人意见 + */ + private String auditOpinion; + /** + * 审核人 + */ + private Long audit; + /** + * 仓库id + */ + private Long depotId; + + /** + * 申请人id + */ + private Long applicat; + + /** + * 申请人手机号 + */ + private String phone; + + /** + * 供应商id + */ + private Long supplier; + + /** + * 采购方式 + */ + private String buyType; + + /** + * 采购单价 + */ + private BigDecimal buyUnitPrice; + + /** + * 采购金额 + */ + private BigDecimal buyAmount; + + /** + * 状态 + */ + private String state; + + /** + * 备注 + */ + private String remark; + + /** + * 申请时间 + */ + private Date applicationTime; + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CapitalInfo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CapitalInfo.java new file mode 100644 index 00000000..9494338c --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CapitalInfo.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.math.BigDecimal; + +import java.io.Serial; + +/** + * 资产信息对象 capital_info + * + * @author mocheng + * @date 2025-07-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("capital_info") +public class CapitalInfo extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 资产名称 + */ + private String capitalName; + + /** + * 资产类型 + */ + private String capitalType; + + /** + * 规格 + */ + private String spec; + + /** + * 资产申请id + */ + private Long capitalApplicationId; + + /** + * 购买数量 + */ + private Integer buyQuantity; + + /** + * 采购单价 + */ + private BigDecimal buyUnitPrice; + + /** + * 金额小计 + */ + private BigDecimal buyAmount; + + /** + * 备注 + */ + private String remark; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CarInfo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CarInfo.java new file mode 100644 index 00000000..a6d9f242 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CarInfo.java @@ -0,0 +1,83 @@ +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; + +/** + * 车辆管理-车辆信息对象 car_info + * + * @author mocheng + * @date 2025-07-26 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("car_info") +public class CarInfo extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + + /** + * 车牌号 + */ + private String carNumber; + + /** + * 车架号 + */ + private String carFrameNumber; + + /** + * 车辆颜色 + */ + private String carColour; + + /** + * 品牌型号 + */ + private String carBrand; + + /** + * 车辆类型id + */ + private Long carTypeId; + + /** + * 登记日期 + */ + private Date carRecordDates; + + /** + * 预计停留 + */ + private Integer plannedStay; + + /** + * 车主 + */ + private Long carOwners; + + /** + * 备注 + */ + private String remark; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CarType.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CarType.java new file mode 100644 index 00000000..3f290e46 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CarType.java @@ -0,0 +1,51 @@ +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; + +/** + * 车辆管理-车辆类型对象 car_type + * + * @author mocheng + * @date 2025-07-26 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("car_type") +public class CarType extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + + /** + * 车辆类型编码 + */ + private String carTypeNumber; + + /** + * 车辆类型名称 + */ + private String carTypeName; + + /** + * 说明 + */ + private String remark; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MaintainKnowledge.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MaintainKnowledge.java new file mode 100644 index 00000000..f479190d --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MaintainKnowledge.java @@ -0,0 +1,68 @@ +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; + +/** + * 维保知识对象 maintain_knowledge + * + * @author mocheng + * @date 2025-07-24 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("maintain_knowledge") +public class MaintainKnowledge extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + + /** + * 标题 + */ + private String title; + + /** + * 状态(0草稿1状态2已发布) + */ + private String status; + + /** + * 封面 + */ + private String covers; + + /** + * 内容 + */ + private String content; + + /** + * 描述 + */ + private String depict; + + /** + * 发布时间 + */ + private Date releaseTime; + + /** + * 位置类型(0操作指引,1处理案例2常见问题) + */ + private String type; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentPerson.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentPerson.java index 06c6ba55..015a4355 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentPerson.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentPerson.java @@ -40,6 +40,10 @@ public class ResidentPerson extends TenantEntity { * 联系电话 */ private String phone; + /** + * 人员类型 + */ + private String type; /** * 身份证号 */ @@ -84,10 +88,22 @@ public class ResidentPerson extends TenantEntity { * 备注 */ private String remark; + /** * 权限组 */ private Long authGroupId; + + /** + * 开始时间 + */ + private Date authBegDate; + + /** + * 结束时间 + */ + private Date authEndDate; + /** * e8平台id */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentUnit.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentUnit.java index 1f94ad76..8faa2608 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentUnit.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentUnit.java @@ -83,6 +83,16 @@ public class ResidentUnit extends TenantEntity { */ private Long authGroupId; + /** + * 开始时间 + */ + private Date authBegDate; + + /** + * 结束时间 + */ + private Date authEndDate; + /** * 创建人id */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CapitalApplicationBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CapitalApplicationBo.java new file mode 100644 index 00000000..f7105373 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CapitalApplicationBo.java @@ -0,0 +1,102 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.CapitalApplication; +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.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 资产申请业务对象 capital_application + * + * @author mocheng + * @date 2025-07-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = CapitalApplication.class, reverseConvertGenerate = false) +public class CapitalApplicationBo extends BaseEntity { + + /** + * + */ + @NotNull(message = "不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 标题 + */ + @NotBlank(message = "标题不能为空", groups = { AddGroup.class, EditGroup.class }) + private String title; + /** + * 仓库id + */ + private Long depotId; + /** + * 申请人id + */ + @NotNull(message = "申请人id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long applicat; + + /** + * 申请人手机号 + */ + @NotBlank(message = "申请人手机号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String phone; + + /** + * 供应商id + */ + @NotNull(message = "供应商id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long supplier; + + /** + * 采购方式 + */ + @NotBlank(message = "采购方式不能为空", groups = { AddGroup.class, EditGroup.class }) + private String buyType; + + /** + * 采购单价 + */ + private BigDecimal buyUnitPrice; + + /** + * 采购金额 + */ + private BigDecimal buyAmount; + /** + * 审核人意见 + */ + private String auditOpinion; + /** + * 审核人 + */ + private Long audit; + /** + * 状态 + */ + private String state; + + /** + * 备注 + */ + private String remark; + + /** + * 申请时间 + */ + private Date applicationTime; + @NotEmpty(message = "资产不能为空", groups = { AddGroup.class, EditGroup.class }) + private List capitalInfoBolist; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CapitalInfoBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CapitalInfoBo.java new file mode 100644 index 00000000..13a502bc --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CapitalInfoBo.java @@ -0,0 +1,81 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.CapitalInfo; +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.math.BigDecimal; + +/** + * 资产信息业务对象 capital_info + * + * @author mocheng + * @date 2025-07-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = CapitalInfo.class, reverseConvertGenerate = false) +public class CapitalInfoBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 资产名称 + */ + @NotBlank(message = "资产名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String capitalName; + + /** + * 资产类型 + */ + @NotBlank(message = "资产类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String capitalType; + + /** + * 规格 + */ + @NotBlank(message = "规格不能为空", groups = { AddGroup.class, EditGroup.class }) + private String spec; + + /** + * 资产申请id + */ + private Long capitalApplicationId; + + /** + * 购买数量 + */ + @NotNull(message = "购买数量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Integer buyQuantity; + + /** + * 采购单价 + */ + @NotNull(message = "采购单价不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal buyUnitPrice; + + /** + * 金额小计 + */ + private BigDecimal buyAmount; + + /** + * 备注 + */ + private String remark; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CarInfoBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CarInfoBo.java new file mode 100644 index 00000000..87359efb --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CarInfoBo.java @@ -0,0 +1,78 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.CarInfo; +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; + +/** + * 车辆管理-车辆信息业务对象 car_info + * + * @author mocheng + * @date 2025-07-26 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = CarInfo.class, reverseConvertGenerate = false) +public class CarInfoBo extends BaseEntity { + + /** + * 主键 + */ + private Long id; + + /** + * 车牌号 + */ + @NotBlank(message = "车牌号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String carNumber; + + /** + * 车架号 + */ + @NotBlank(message = "车架号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String carFrameNumber; + + /** + * 车辆颜色 + */ + private String carColour; + + /** + * 品牌型号 + */ + private String carBrand; + + /** + * 车辆类型id + */ + private Long carTypeId; + + /** + * 登记日期 + */ + private Date carRecordDates; + + /** + * 预计停留 + */ + private Integer plannedStay; + + /** + * 车主 + */ + private Long carOwners; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CarTypeBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CarTypeBo.java new file mode 100644 index 00000000..cd1b8325 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CarTypeBo.java @@ -0,0 +1,46 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.CarType; +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.*; + +/** + * 车辆管理-车辆类型业务对象 car_type + * + * @author mocheng + * @date 2025-07-26 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = CarType.class, reverseConvertGenerate = false) +public class CarTypeBo extends BaseEntity { + + /** + * 主键 + */ + private Long id; + + /** + * 车辆类型编码 + */ + @NotBlank(message = "车辆类型编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String carTypeNumber; + + /** + * 车辆类型名称 + */ + @NotBlank(message = "车辆类型名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String carTypeName; + + /** + * 说明 + */ + private String remark; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MaintainKnowledgeBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MaintainKnowledgeBo.java new file mode 100644 index 00000000..8306542e --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MaintainKnowledgeBo.java @@ -0,0 +1,78 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.MaintainKnowledge; +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; + +/** + * 维保知识业务对象 maintain_knowledge + * + * @author mocheng + * @date 2025-07-24 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = MaintainKnowledge.class, reverseConvertGenerate = false) +public class MaintainKnowledgeBo extends BaseEntity { + + /** + * 主键 + */ + @NotNull(message = "主键不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 标题 + */ + @NotBlank(message = "标题不能为空", groups = { AddGroup.class, EditGroup.class }) + private String title; + + /** + * 状态(0草稿1状态2已发布) + */ + @NotBlank(message = "状态(0草稿1状态2已发布)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String status; + + /** + * 封面 + */ + //@NotBlank(message = "封面不能为空", groups = { AddGroup.class, EditGroup.class }) + private String covers; + + /** + * 内容 + */ + private String content; + + /** + * 描述 + */ + @NotBlank(message = "描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String depict; + + /** + * 发布时间 + */ + @NotNull(message = "发布时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date releaseTime; + + /** + * 位置类型(0操作指引,1处理案例2常见问题) + */ + @NotBlank(message = "位置类型(0操作指引,1处理案例2常见问题)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String type; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentPersonBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentPersonBo.java index 6d9bede8..da62b997 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentPersonBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentPersonBo.java @@ -38,34 +38,37 @@ public class ResidentPersonBo extends BaseEntity { */ @NotBlank(message = "联系电话不能为空", groups = { AddGroup.class, EditGroup.class }) private String phone; - + /** + * 人员类型 + */ + @NotBlank(message = "人员类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String type; /** * 性别 */ @NotNull(message = "性别不能为空", groups = { AddGroup.class, EditGroup.class }) private Long gender; - /** - * 权限组 - */ - @NotNull(message = "权限组不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long authGroupId; - /** * 证件号 */ @NotBlank(message = "证件号不能为空", groups = { AddGroup.class, EditGroup.class }) private String idCard; + /** + * 权限组 + */ + private Long authGroupId; + /** * 开始时间 */ - private Date begDate; + private Date authBegDate; /** * 结束时间 */ - private Date endDate; + private Date authEndDate; /** * e8平台id 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 7e98a386..95612baf 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 @@ -69,6 +69,21 @@ public class ResidentUnitBo extends BaseEntity { @NotNull(message = "入驻时间不能为空", groups = { AddGroup.class, EditGroup.class }) private Date time; + /** + * 权限组 + */ + private Long authGroupId; + + /** + * 开始时间 + */ + private Date authBegDate; + + /** + * 结束时间 + */ + private Date authEndDate; + /** * 状态 */ @@ -81,12 +96,6 @@ public class ResidentUnitBo extends BaseEntity { // @NotNull(message = "员工人数不能为空", groups = { AddGroup.class, EditGroup.class }) private Long number=0L; - /** - * 权限组 - */ - @NotNull(message = "权限组不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long authGroupId; - /** * 备注 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CapitalApplicationVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CapitalApplicationVo.java new file mode 100644 index 00000000..420776bd --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CapitalApplicationVo.java @@ -0,0 +1,135 @@ +package org.dromara.property.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.property.domain.CapitalApplication; +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; + + + +/** + * 资产申请视图对象 capital_application + * + * @author mocheng + * @date 2025-07-25 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = CapitalApplication.class) +public class CapitalApplicationVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; + + /** + * 标题 + */ + @ExcelProperty(value = "标题") + private String title; + /** + * 仓库id + */ + private Long depotId; + /** + * 申请人id + */ + @ExcelProperty(value = "申请人id") + private Long applicat; + + + /** + * 申请人名称 + */ + @ExcelProperty(value = "申请人名称") + private String applicatName; + + /** + * 申请人手机号 + */ + @ExcelProperty(value = "申请人手机号") + private String phone; + + /** + * 供应商id + */ + @ExcelProperty(value = "供应商id") + private Long supplier; + + /** + * 供应商名称 + */ + @ExcelProperty(value = "供应商名称") + private String supplierName; + + + /** + * 采购方式 + */ + @ExcelProperty(value = "采购方式") + private String buyType; + + /** + * 采购单价 + */ + @ExcelProperty(value = "采购单价") + private BigDecimal buyUnitPrice; + + /** + * 采购金额 + */ + @ExcelProperty(value = "采购金额") + private BigDecimal buyAmount; + + /** + * 状态 + */ + @ExcelProperty(value = "状态") + private String state; + /** + * 审核人意见 + */ + private String auditOpinion; + /** + * 审核人 + */ + private Long audit; + /** + * 审核人名称 + */ + private String auditName; + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 申请时间 + */ + @ExcelProperty(value = "申请时间") + private Date applicationTime; + + /** + * 搜索值 + */ + @ExcelProperty(value = "搜索值") + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CapitalInfoVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CapitalInfoVo.java new file mode 100644 index 00000000..a7ca24f4 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CapitalInfoVo.java @@ -0,0 +1,93 @@ +package org.dromara.property.domain.vo; + +import java.math.BigDecimal; +import org.dromara.property.domain.CapitalInfo; +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; + + + +/** + * 资产信息视图对象 capital_info + * + * @author mocheng + * @date 2025-07-25 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = CapitalInfo.class) +public class CapitalInfoVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 资产名称 + */ + @ExcelProperty(value = "资产名称") + private String capitalName; + + /** + * 资产类型 + */ + @ExcelProperty(value = "资产类型") + private String capitalType; + + /** + * 规格 + */ + @ExcelProperty(value = "规格") + private String spec; + + /** + * 资产申请id + */ + @ExcelProperty(value = "资产申请id") + private Long capitalApplicationId; + + /** + * 购买数量 + */ + @ExcelProperty(value = "购买数量") + private Integer buyQuantity; + + /** + * 采购单价 + */ + @ExcelProperty(value = "采购单价") + private BigDecimal buyUnitPrice; + + /** + * 金额小计 + */ + @ExcelProperty(value = "金额小计") + private BigDecimal buyAmount; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 搜索值 + */ + @ExcelProperty(value = "搜索值") + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CarInfoVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CarInfoVo.java new file mode 100644 index 00000000..728c3759 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CarInfoVo.java @@ -0,0 +1,94 @@ +package org.dromara.property.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.property.domain.CarInfo; +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; + + + +/** + * 车辆管理-车辆信息视图对象 car_info + * + * @author mocheng + * @date 2025-07-26 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = CarInfo.class) +public class CarInfoVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ExcelProperty(value = "主键") + private Long id; + + /** + * 车牌号 + */ + @ExcelProperty(value = "车牌号") + private String carNumber; + + /** + * 车架号 + */ + @ExcelProperty(value = "车架号") + private String carFrameNumber; + + /** + * 车辆颜色 + */ + @ExcelProperty(value = "车辆颜色") + private String carColour; + + /** + * 品牌型号 + */ + @ExcelProperty(value = "品牌型号") + private String carBrand; + + /** + * 车辆类型id + */ + @ExcelProperty(value = "车辆类型id") + private Long carTypeId; + + /** + * 登记日期 + */ + @ExcelProperty(value = "登记日期") + private Date carRecordDates; + + /** + * 预计停留 + */ + @ExcelProperty(value = "预计停留") + private Integer plannedStay; + + /** + * 车主 + */ + @ExcelProperty(value = "车主") + private Long carOwners; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CarTypeVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CarTypeVo.java new file mode 100644 index 00000000..b735f215 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CarTypeVo.java @@ -0,0 +1,56 @@ +package org.dromara.property.domain.vo; + +import org.dromara.property.domain.CarType; +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; + + + +/** + * 车辆管理-车辆类型视图对象 car_type + * + * @author mocheng + * @date 2025-07-26 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = CarType.class) +public class CarTypeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ExcelProperty(value = "主键") + private Long id; + + /** + * 车辆类型编码 + */ + @ExcelProperty(value = "车辆类型编码") + private String carTypeNumber; + + /** + * 车辆类型名称 + */ + @ExcelProperty(value = "车辆类型名称") + private String carTypeName; + + /** + * 说明 + */ + @ExcelProperty(value = "说明") + private String remark; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MaintainKnowledgeVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MaintainKnowledgeVo.java new file mode 100644 index 00000000..3f9447ef --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MaintainKnowledgeVo.java @@ -0,0 +1,88 @@ +package org.dromara.property.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.property.domain.MaintainKnowledge; +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; + + + +/** + * 维保知识视图对象 maintain_knowledge + * + * @author mocheng + * @date 2025-07-24 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = MaintainKnowledge.class) +public class MaintainKnowledgeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ExcelProperty(value = "主键") + private Long id; + + /** + * 标题 + */ + @ExcelProperty(value = "标题") + private String title; + + /** + * 状态(0草稿1状态2已发布) + */ + @ExcelProperty(value = "状态(0草稿1状态2已发布)") + private String status; + + /** + * 封面 + */ + @ExcelProperty(value = "封面") + private String covers; + + /** + * 内容 + */ + @ExcelProperty(value = "内容") + private String content; + + /** + * 描述 + */ + @ExcelProperty(value = "描述") + private String depict; + + /** + * 发布时间 + */ + @ExcelProperty(value = "发布时间") + private Date releaseTime; + + /** + * 位置类型(0操作指引,1处理案例2常见问题) + */ + @ExcelProperty(value = "位置类型(0操作指引,1处理案例2常见问题)") + private String type; + + /** + * 搜索值 + */ + @ExcelProperty(value = "搜索值") + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonVo.java index 6363dfa1..2ff3eb57 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonVo.java @@ -43,7 +43,10 @@ public class ResidentPersonVo implements Serializable { */ @ExcelProperty(value = "用户名称") private String userName; - + /** + * 人员类型 + */ + private String type; /** * 联系电话 */ @@ -113,5 +116,27 @@ public class ResidentPersonVo implements Serializable { @ExcelProperty(value = "权限组id") private Long authGroupId; + /** + * 开始时间 + */ + @ExcelProperty(value = "开始时间") + private Date authBegDate; + + /** + * 结束时间 + */ + @ExcelProperty(value = "结束时间") + private Date authEndDate; + + /** + * e8平台id + */ + private Long eEightId; + + /** + * 证件号 + */ + private String idCard; + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentUnitVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentUnitVo.java index 822f2aec..2e9cc0f6 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentUnitVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentUnitVo.java @@ -109,4 +109,16 @@ public class ResidentUnitVo implements Serializable { @ExcelProperty(value = "权限组id") private Long authGroupId; + /** + * 开始时间 + */ + @ExcelProperty(value = "开始时间") + private Date authBegDate; + + /** + * 结束时间 + */ + @ExcelProperty(value = "结束时间") + private Date authEndDate; + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrderAnalysisVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrderAnalysisVo.java index f3175d99..9687a5db 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrderAnalysisVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrderAnalysisVo.java @@ -34,6 +34,10 @@ public class ServiceWorkOrderAnalysisVo { public static class BarChartVo { private String month; // 月份,如 "2025-02" private int orderCount; // 工单数量 + public BarChartVo(String month, int orderCount) { + this.month = month; + this.orderCount = orderCount; + } } /** * 满意度图表数据对象 @@ -44,6 +48,13 @@ public class ServiceWorkOrderAnalysisVo { private String name; // 满意度名称:如“满意” private Long value; // 数量 private Double rate; // 占比(百分比) + + public SatisfactionChartVo(String name, Long value,Double rate) { + this.name = name; + this.value = value; + this.rate = rate; + + } } /** @@ -53,10 +64,12 @@ public class ServiceWorkOrderAnalysisVo { @Accessors(chain = true) public static class PieChartVo { private String type; // 工单类型 - private Long quantity; // 工单数量 - private double percentage; // 占比 + private Integer quantity; // 工单数量 + + public PieChartVo(String type, Integer quantity) { + this.type = type; + this.quantity = quantity; - public PieChartVo(String string, Long count, double percentage) { } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java new file mode 100644 index 00000000..2121eee2 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java @@ -0,0 +1,54 @@ +package org.dromara.property.dubbo; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.property.api.RemoteResidentPersonService; +import org.dromara.property.api.domain.vo.RemoteResidentPersonVo; +import org.dromara.property.domain.bo.ResidentPersonBo; +import org.dromara.property.domain.vo.ResidentPersonVo; +import org.dromara.property.service.IResidentPersonService; + +import java.util.List; + +/** + * @author lsm + * @apiNote RemoteResidentPersonServiceImpl + * @since 2025/7/26 + */ +@Slf4j +@DubboService +@RequiredArgsConstructor +public class RemoteResidentPersonServiceImpl implements RemoteResidentPersonService { + + private final IResidentPersonService residentPersonService; + + // 查询已上传图片,未授权人员 + @Override + public List queryUnAuthPerson() { + List listVo = residentPersonService.queryUnAuthPerson(); + + return listVo.stream().map(vo -> { + RemoteResidentPersonVo remoteResidentPersonVo = new RemoteResidentPersonVo(); + remoteResidentPersonVo.setId(vo.getId()); + remoteResidentPersonVo.setOssId(vo.getImg()); + remoteResidentPersonVo.setName(vo.getUserName()); + remoteResidentPersonVo.setIdCard(vo.getIdCard()); + remoteResidentPersonVo.setGender(vo.getGender()); + remoteResidentPersonVo.setAuthGroupId(vo.getAuthGroupId()); + remoteResidentPersonVo.setAuthBegDate(vo.getAuthBegDate()); + remoteResidentPersonVo.setAuthEndDate(vo.getAuthEndDate()); + return remoteResidentPersonVo; + }).toList(); + } + + // 更新E8平台id + @Override + public Boolean updateE8Id(Long personId, Long e8Id) { + ResidentPersonBo bo = new ResidentPersonBo(); + bo.setId(personId); + bo.setEEightId(e8Id); + return residentPersonService.updateByBo(bo); + } + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CapitalApplicationMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CapitalApplicationMapper.java new file mode 100644 index 00000000..749f9f0e --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CapitalApplicationMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.property.domain.CapitalApplication; +import org.dromara.property.domain.vo.CapitalApplicationVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 资产申请Mapper接口 + * + * @author mocheng + * @date 2025-07-25 + */ +@Mapper +public interface CapitalApplicationMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CapitalInfoMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CapitalInfoMapper.java new file mode 100644 index 00000000..b2189f33 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CapitalInfoMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.property.domain.CapitalInfo; +import org.dromara.property.domain.vo.CapitalInfoVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 资产信息Mapper接口 + * + * @author mocheng + * @date 2025-07-25 + */ +@Mapper +public interface CapitalInfoMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CarInfoMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CarInfoMapper.java new file mode 100644 index 00000000..891c8dd8 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CarInfoMapper.java @@ -0,0 +1,15 @@ +package org.dromara.property.mapper; + +import org.dromara.property.domain.CarInfo; +import org.dromara.property.domain.vo.CarInfoVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 车辆管理-车辆信息Mapper接口 + * + * @author mocheng + * @date 2025-07-26 + */ +public interface CarInfoMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CarTypeMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CarTypeMapper.java new file mode 100644 index 00000000..e9c20a23 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CarTypeMapper.java @@ -0,0 +1,15 @@ +package org.dromara.property.mapper; + +import org.dromara.property.domain.CarType; +import org.dromara.property.domain.vo.CarTypeVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 车辆管理-车辆类型Mapper接口 + * + * @author mocheng + * @date 2025-07-26 + */ +public interface CarTypeMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MaintainKnowledgeMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MaintainKnowledgeMapper.java new file mode 100644 index 00000000..5876a19b --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MaintainKnowledgeMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.property.domain.MaintainKnowledge; +import org.dromara.property.domain.vo.MaintainKnowledgeVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 维保知识Mapper接口 + * + * @author mocheng + * @date 2025-07-24 + */ +@Mapper +public interface MaintainKnowledgeMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICapitalApplicationService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICapitalApplicationService.java new file mode 100644 index 00000000..d9884a54 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICapitalApplicationService.java @@ -0,0 +1,69 @@ +package org.dromara.property.service; + +import org.dromara.property.domain.CapitalApplication; +import org.dromara.property.domain.vo.CapitalApplicationVo; +import org.dromara.property.domain.bo.CapitalApplicationBo; +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-25 + */ +public interface ICapitalApplicationService { + + /** + * 查询资产申请 + * + * @param id 主键 + * @return 资产申请 + */ + CapitalApplicationVo queryById(Long id); + + /** + * 分页查询资产申请列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 资产申请分页列表 + */ + TableDataInfo queryPageList(CapitalApplicationBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的资产申请列表 + * + * @param bo 查询条件 + * @return 资产申请列表 + */ + List queryList(CapitalApplicationBo bo); + + /** + * 新增资产申请 + * + * @param bo 资产申请 + * @return 是否新增成功 + */ + Boolean insertByBo(CapitalApplicationBo bo); + + /** + * 修改资产申请 + * + * @param bo 资产申请 + * @return 是否修改成功 + */ + Boolean updateByBo(CapitalApplicationBo 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/ICarInfoService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICarInfoService.java new file mode 100644 index 00000000..975b1435 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICarInfoService.java @@ -0,0 +1,69 @@ +package org.dromara.property.service; + +import org.dromara.property.domain.CarInfo; +import org.dromara.property.domain.vo.CarInfoVo; +import org.dromara.property.domain.bo.CarInfoBo; +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-26 + */ +public interface ICarInfoService { + + /** + * 查询车辆管理-车辆信息 + * + * @param id 主键 + * @return 车辆管理-车辆信息 + */ + CarInfoVo queryById(Long id); + + /** + * 分页查询车辆管理-车辆信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 车辆管理-车辆信息分页列表 + */ + TableDataInfo queryPageList(CarInfoBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的车辆管理-车辆信息列表 + * + * @param bo 查询条件 + * @return 车辆管理-车辆信息列表 + */ + List queryList(CarInfoBo bo); + + /** + * 新增车辆管理-车辆信息 + * + * @param bo 车辆管理-车辆信息 + * @return 是否新增成功 + */ + Boolean insertByBo(CarInfoBo bo); + + /** + * 修改车辆管理-车辆信息 + * + * @param bo 车辆管理-车辆信息 + * @return 是否修改成功 + */ + Boolean updateByBo(CarInfoBo 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/ICarTypeService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICarTypeService.java new file mode 100644 index 00000000..8efc4af1 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICarTypeService.java @@ -0,0 +1,69 @@ +package org.dromara.property.service; + +import org.dromara.property.domain.CarType; +import org.dromara.property.domain.vo.CarTypeVo; +import org.dromara.property.domain.bo.CarTypeBo; +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-26 + */ +public interface ICarTypeService { + + /** + * 查询车辆管理-车辆类型 + * + * @param id 主键 + * @return 车辆管理-车辆类型 + */ + CarTypeVo queryById(Long id); + + /** + * 分页查询车辆管理-车辆类型列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 车辆管理-车辆类型分页列表 + */ + TableDataInfo queryPageList(CarTypeBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的车辆管理-车辆类型列表 + * + * @param bo 查询条件 + * @return 车辆管理-车辆类型列表 + */ + List queryList(CarTypeBo bo); + + /** + * 新增车辆管理-车辆类型 + * + * @param bo 车辆管理-车辆类型 + * @return 是否新增成功 + */ + Boolean insertByBo(CarTypeBo bo); + + /** + * 修改车辆管理-车辆类型 + * + * @param bo 车辆管理-车辆类型 + * @return 是否修改成功 + */ + Boolean updateByBo(CarTypeBo 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/IMaintainKnowledgeService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IMaintainKnowledgeService.java new file mode 100644 index 00000000..33d25599 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IMaintainKnowledgeService.java @@ -0,0 +1,69 @@ +package org.dromara.property.service; + +import org.dromara.property.domain.MaintainKnowledge; +import org.dromara.property.domain.vo.MaintainKnowledgeVo; +import org.dromara.property.domain.bo.MaintainKnowledgeBo; +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-24 + */ +public interface IMaintainKnowledgeService { + + /** + * 查询维保知识 + * + * @param id 主键 + * @return 维保知识 + */ + MaintainKnowledgeVo queryById(Long id); + + /** + * 分页查询维保知识列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 维保知识分页列表 + */ + TableDataInfo queryPageList(MaintainKnowledgeBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的维保知识列表 + * + * @param bo 查询条件 + * @return 维保知识列表 + */ + List queryList(MaintainKnowledgeBo bo); + + /** + * 新增维保知识 + * + * @param bo 维保知识 + * @return 是否新增成功 + */ + Boolean insertByBo(MaintainKnowledgeBo bo); + + /** + * 修改维保知识 + * + * @param bo 维保知识 + * @return 是否修改成功 + */ + Boolean updateByBo(MaintainKnowledgeBo 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/IResidentPersonService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IResidentPersonService.java index 8832750f..fde3919a 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IResidentPersonService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IResidentPersonService.java @@ -1,6 +1,5 @@ package org.dromara.property.service; -import org.dromara.property.domain.ResidentPerson; import org.dromara.property.domain.vo.ResidentPersonVo; import org.dromara.property.domain.bo.ResidentPersonBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -13,7 +12,7 @@ import java.util.List; * 入驻员工Service接口 * * @author mocheng - * @date 2025-06-19 + * @since 2025-06-19 */ public interface IResidentPersonService { @@ -69,8 +68,16 @@ public interface IResidentPersonService { /** * 获取单位人员数量 - * @param unitId - * @return + * + * @param unitId 单元id + * @return Long */ Long queryPersonCount(Long unitId); + + /** + * 查询已上传图片,未授权人员 + * + * @return List + */ + List queryUnAuthPerson(); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CapitalApplicationServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CapitalApplicationServiceImpl.java new file mode 100644 index 00000000..60eecb0c --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CapitalApplicationServiceImpl.java @@ -0,0 +1,247 @@ +package org.dromara.property.service.impl; + +import cn.hutool.core.collection.CollUtil; +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.*; +import org.dromara.property.domain.vo.CostItemsVo; +import org.dromara.property.mapper.*; +import org.springframework.stereotype.Service; +import org.dromara.property.domain.bo.CapitalApplicationBo; +import org.dromara.property.domain.vo.CapitalApplicationVo; +import org.dromara.property.service.ICapitalApplicationService; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 资产申请Service业务层处理 + * + * @author mocheng + * @date 2025-07-25 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class CapitalApplicationServiceImpl implements ICapitalApplicationService { + + private final CapitalApplicationMapper baseMapper; + private final CapitalInfoMapper capitalMapper; + private final AssetMapper assetsMapper; + private final DepotLogMapper depotLogMapper; + private final SuppliersMapper supplierMapper; + private final ResidentPersonMapper residentPersonMapper; + + /** + * 查询资产申请 + * + * @param id 主键 + * @return 资产申请 + */ + @Override + public CapitalApplicationVo queryById(Long id) { + CapitalApplicationVo capitalApplicationVo = baseMapper.selectVoById(id); + List suppliersList = supplierMapper.selectList(); + List residentPeopleList = residentPersonMapper.selectList(); + assembly(suppliersList, residentPeopleList,capitalApplicationVo); + return capitalApplicationVo; + } + + /** + * 分页查询资产申请列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 资产申请分页列表 + */ + @Override + public TableDataInfo queryPageList(CapitalApplicationBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + if (CollUtil.isNotEmpty(result.getRecords())) { + List suppliersList = supplierMapper.selectList(); + List residentPeopleList = residentPersonMapper.selectList(); + result.getRecords().stream().forEach(s -> { + assembly(suppliersList, residentPeopleList,s); + } + ); + } + return TableDataInfo.build(result); + } + + /** + * 组装数据 + */ + private void assembly(List suppliersList,List residentPeopleList,CapitalApplicationVo capitalApplicationVo) { + if (CollUtil.isNotEmpty(suppliersList)) { + Suppliers suppliers = suppliersList.stream() + .filter(vo -> vo.getId() != null && vo.getId().equals(capitalApplicationVo.getSupplier())).findFirst().orElse(null); + capitalApplicationVo.setSupplierName(suppliers.getSuppliersName()); + } + if (CollUtil.isNotEmpty(residentPeopleList)) { + ResidentPerson residentPerson = residentPeopleList.stream() + .filter(vo -> vo.getId() != null && vo.getId().equals(capitalApplicationVo.getApplicat())).findFirst().orElse(null); + capitalApplicationVo.setApplicatName(residentPerson.getUserName()); + ResidentPerson residentPersons = residentPeopleList.stream() + .filter(vo -> vo.getId() != null && vo.getId().equals(capitalApplicationVo.getAudit())).findFirst().orElse(null); + capitalApplicationVo.setAuditName(residentPersons.getUserName()); + } + } + + /** + * 查询符合条件的资产申请列表 + * + * @param bo 查询条件 + * @return 资产申请列表 + */ + @Override + public List queryList(CapitalApplicationBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(CapitalApplicationBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(CapitalApplication::getId); + lqw.eq(StringUtils.isNotBlank(bo.getTitle()), CapitalApplication::getTitle, bo.getTitle()); + lqw.eq(bo.getApplicat() != null, CapitalApplication::getApplicat, bo.getApplicat()); + lqw.eq(StringUtils.isNotBlank(bo.getPhone()), CapitalApplication::getPhone, bo.getPhone()); + lqw.eq(bo.getSupplier() != null, CapitalApplication::getSupplier, bo.getSupplier()); + lqw.eq(StringUtils.isNotBlank(bo.getBuyType()), CapitalApplication::getBuyType, bo.getBuyType()); + lqw.eq(bo.getBuyUnitPrice() != null, CapitalApplication::getBuyUnitPrice, bo.getBuyUnitPrice()); + lqw.eq(bo.getBuyAmount() != null, CapitalApplication::getBuyAmount, bo.getBuyAmount()); + lqw.eq(StringUtils.isNotBlank(bo.getState()), CapitalApplication::getState, bo.getState()); + lqw.eq(bo.getApplicationTime() != null, CapitalApplication::getApplicationTime, bo.getApplicationTime()); + lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), CapitalApplication::getSearchValue, bo.getSearchValue()); + return lqw; + } + + /** + * 新增资产申请 + * + * @param bo 资产申请 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(CapitalApplicationBo bo) { + CapitalApplication add = MapstructUtils.convert(bo, CapitalApplication.class); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + bo.getCapitalInfoBolist().stream().forEach(s -> { + s.setCapitalApplicationId(add.getId()); + CapitalInfo capitalInfo = MapstructUtils.convert(s, CapitalInfo.class); + capitalMapper.insert(capitalInfo); + //validCapitalInfoBefore(add,capitalInfo); + validEntityBeforeSave(add); + }); + } + return flag; + } + + /** + * 修改资产申请 + * + * @param bo 资产申请 + * @return 是否修改成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(CapitalApplicationBo bo) { + CapitalApplication update = MapstructUtils.convert(bo, CapitalApplication.class); + validEntityBeforeUpdate(update); + bo.getCapitalInfoBolist().stream().forEach(s -> { + CapitalInfo capitalInfo = MapstructUtils.convert(s, CapitalInfo.class); + capitalMapper.deleteById(capitalInfo); + capitalMapper.insert(capitalInfo); + //TODO 做一些数据校验,如唯一约束 + CapitalApplication capitalApplication = baseMapper.selectById(bo.getId()); + if (bo.getState().equals("1") && !bo.getState().equals(capitalApplication.getState())) { + validCapitalInfoBefore(update, capitalInfo); + } + }); + return baseMapper.updateById(update) > 0; + } + + /** + * 校验资产类型和仓库 + */ + private void validCapitalInfoBefore(CapitalApplication capitalApplication, CapitalInfo capitalInfo) { + LambdaQueryWrapper assetQueryWrapper = new LambdaQueryWrapper<>(); + assetQueryWrapper.eq(Asset::getModel, capitalInfo.getCapitalType()); + assetQueryWrapper.eq(Asset::getName, capitalInfo.getCapitalName()); + assetQueryWrapper.eq(Asset::getSpecs, capitalInfo.getSpec()); + List assets = assetsMapper.selectList(assetQueryWrapper); + if (assets.isEmpty()) { + Asset asset = new Asset(); + asset.setModel(capitalInfo.getCapitalType()); + asset.setName(capitalInfo.getCapitalName()); + asset.setSpecs(capitalInfo.getSpec()); + asset.setSpecs(capitalInfo.getSpec()); + asset.setPrice(capitalInfo.getBuyUnitPrice().longValue()); + asset.setSuppliersId(capitalApplication.getSupplier()); + asset.setStorageTime(new Date()); + asset.setType(0L); + assetsMapper.insert(asset); + } else { + // 如果查询到多个结果,默认使用第一个 + Asset asset = assets.get(0); + LambdaQueryWrapper depotLogWrapper = new LambdaQueryWrapper<>(); + depotLogWrapper.eq(DepotLog::getAssetId, asset.getId()); + depotLogWrapper.eq(DepotLog::getDepotId, asset.getDepotId()); + if (!depotLogMapper.exists(depotLogWrapper)) { + DepotLog depotLog = new DepotLog(); + depotLog.setAssetId(asset.getId()); + depotLog.setDepotId(capitalApplication.getDepotId()); + depotLogMapper.insert(depotLog); + } + } + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(CapitalApplication entity) { + + } + + /** + * 修改前的数据校验 + */ + private void validEntityBeforeUpdate(CapitalApplication entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除资产申请信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + ids.forEach(s -> { + LambdaQueryWrapper objectLambdaQueryWrapper = new LambdaQueryWrapper<>(); + objectLambdaQueryWrapper.eq(CapitalInfo::getCapitalApplicationId, s); + capitalMapper.delete(objectLambdaQueryWrapper); + }); + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CarInfoServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CarInfoServiceImpl.java new file mode 100644 index 00000000..c6b712fc --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CarInfoServiceImpl.java @@ -0,0 +1,139 @@ +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.springframework.stereotype.Service; +import org.dromara.property.domain.bo.CarInfoBo; +import org.dromara.property.domain.vo.CarInfoVo; +import org.dromara.property.domain.CarInfo; +import org.dromara.property.mapper.CarInfoMapper; +import org.dromara.property.service.ICarInfoService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 车辆管理-车辆信息Service业务层处理 + * + * @author mocheng + * @date 2025-07-26 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class CarInfoServiceImpl implements ICarInfoService { + + private final CarInfoMapper baseMapper; + + /** + * 查询车辆管理-车辆信息 + * + * @param id 主键 + * @return 车辆管理-车辆信息 + */ + @Override + public CarInfoVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询车辆管理-车辆信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 车辆管理-车辆信息分页列表 + */ + @Override + public TableDataInfo queryPageList(CarInfoBo 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(CarInfoBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(CarInfoBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(CarInfo::getId); + lqw.eq(StringUtils.isNotBlank(bo.getCarNumber()), CarInfo::getCarNumber, bo.getCarNumber()); + lqw.eq(StringUtils.isNotBlank(bo.getCarFrameNumber()), CarInfo::getCarFrameNumber, bo.getCarFrameNumber()); + lqw.eq(StringUtils.isNotBlank(bo.getCarColour()), CarInfo::getCarColour, bo.getCarColour()); + lqw.eq(StringUtils.isNotBlank(bo.getCarBrand()), CarInfo::getCarBrand, bo.getCarBrand()); + lqw.eq(bo.getCarTypeId() != null, CarInfo::getCarTypeId, bo.getCarTypeId()); + lqw.eq(bo.getCarRecordDates() != null, CarInfo::getCarRecordDates, bo.getCarRecordDates()); + lqw.eq(bo.getPlannedStay() != null, CarInfo::getPlannedStay, bo.getPlannedStay()); + lqw.eq(bo.getCarOwners() != null, CarInfo::getCarOwners, bo.getCarOwners()); + return lqw; + } + + /** + * 新增车辆管理-车辆信息 + * + * @param bo 车辆管理-车辆信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(CarInfoBo bo) { + CarInfo add = MapstructUtils.convert(bo, CarInfo.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改车辆管理-车辆信息 + * + * @param bo 车辆管理-车辆信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(CarInfoBo bo) { + CarInfo update = MapstructUtils.convert(bo, CarInfo.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(CarInfo 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/CarTypeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CarTypeServiceImpl.java new file mode 100644 index 00000000..1fc20aa0 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CarTypeServiceImpl.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.springframework.stereotype.Service; +import org.dromara.property.domain.bo.CarTypeBo; +import org.dromara.property.domain.vo.CarTypeVo; +import org.dromara.property.domain.CarType; +import org.dromara.property.mapper.CarTypeMapper; +import org.dromara.property.service.ICarTypeService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 车辆管理-车辆类型Service业务层处理 + * + * @author mocheng + * @date 2025-07-26 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class CarTypeServiceImpl implements ICarTypeService { + + private final CarTypeMapper baseMapper; + + /** + * 查询车辆管理-车辆类型 + * + * @param id 主键 + * @return 车辆管理-车辆类型 + */ + @Override + public CarTypeVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询车辆管理-车辆类型列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 车辆管理-车辆类型分页列表 + */ + @Override + public TableDataInfo queryPageList(CarTypeBo 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(CarTypeBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(CarTypeBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(CarType::getId); + lqw.eq(StringUtils.isNotBlank(bo.getCarTypeNumber()), CarType::getCarTypeNumber, bo.getCarTypeNumber()); + lqw.like(StringUtils.isNotBlank(bo.getCarTypeName()), CarType::getCarTypeName, bo.getCarTypeName()); + return lqw; + } + + /** + * 新增车辆管理-车辆类型 + * + * @param bo 车辆管理-车辆类型 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(CarTypeBo bo) { + CarType add = MapstructUtils.convert(bo, CarType.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改车辆管理-车辆类型 + * + * @param bo 车辆管理-车辆类型 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(CarTypeBo bo) { + CarType update = MapstructUtils.convert(bo, CarType.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(CarType 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/MaintainKnowledgeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MaintainKnowledgeServiceImpl.java new file mode 100644 index 00000000..26bf2369 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MaintainKnowledgeServiceImpl.java @@ -0,0 +1,139 @@ +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.springframework.stereotype.Service; +import org.dromara.property.domain.bo.MaintainKnowledgeBo; +import org.dromara.property.domain.vo.MaintainKnowledgeVo; +import org.dromara.property.domain.MaintainKnowledge; +import org.dromara.property.mapper.MaintainKnowledgeMapper; +import org.dromara.property.service.IMaintainKnowledgeService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 维保知识Service业务层处理 + * + * @author mocheng + * @date 2025-07-24 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class MaintainKnowledgeServiceImpl implements IMaintainKnowledgeService { + + private final MaintainKnowledgeMapper baseMapper; + + /** + * 查询维保知识 + * + * @param id 主键 + * @return 维保知识 + */ + @Override + public MaintainKnowledgeVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询维保知识列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 维保知识分页列表 + */ + @Override + public TableDataInfo queryPageList(MaintainKnowledgeBo 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(MaintainKnowledgeBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(MaintainKnowledgeBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(MaintainKnowledge::getId); + lqw.eq(StringUtils.isNotBlank(bo.getTitle()), MaintainKnowledge::getTitle, bo.getTitle()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), MaintainKnowledge::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getCovers()), MaintainKnowledge::getCovers, bo.getCovers()); + lqw.eq(StringUtils.isNotBlank(bo.getContent()), MaintainKnowledge::getContent, bo.getContent()); + lqw.eq(StringUtils.isNotBlank(bo.getDepict()), MaintainKnowledge::getDepict, bo.getDepict()); + lqw.eq(bo.getReleaseTime() != null, MaintainKnowledge::getReleaseTime, bo.getReleaseTime()); + lqw.eq(StringUtils.isNotBlank(bo.getType()), MaintainKnowledge::getType, bo.getType()); + lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), MaintainKnowledge::getSearchValue, bo.getSearchValue()); + return lqw; + } + + /** + * 新增维保知识 + * + * @param bo 维保知识 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(MaintainKnowledgeBo bo) { + MaintainKnowledge add = MapstructUtils.convert(bo, MaintainKnowledge.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改维保知识 + * + * @param bo 维保知识 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(MaintainKnowledgeBo bo) { + MaintainKnowledge update = MapstructUtils.convert(bo, MaintainKnowledge.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(MaintainKnowledge 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/ResidentPersonServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java index 34d0c82f..db0a92ae 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java @@ -1,7 +1,6 @@ package org.dromara.property.service.impl; import cn.hutool.core.lang.Assert; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -10,10 +9,13 @@ 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.vo.ResidentUnitVo; +import org.dromara.property.service.IResidentUnitService; import org.dromara.sis.api.RemoteSisAuth; import org.dromara.sis.api.domain.RemotePersonAuth; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.ResidentPersonBo; import org.dromara.property.domain.vo.ResidentPersonVo; @@ -22,6 +24,7 @@ import org.dromara.property.mapper.ResidentPersonMapper; import org.dromara.property.service.IResidentPersonService; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.Collection; @@ -30,14 +33,18 @@ import java.util.Collection; * 入驻员工Service业务层处理 * * @author mocheng - * @date 2025-06-19 + * @since 2025-06-19 */ @Slf4j -@RequiredArgsConstructor @Service public class ResidentPersonServiceImpl implements IResidentPersonService { - private final ResidentPersonMapper baseMapper; + @Resource + private ResidentPersonMapper baseMapper; + + @Lazy + @Autowired + private IResidentUnitService residentUnitService; @DubboReference private RemoteSisAuth remoteSisAuth; @@ -108,7 +115,13 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { ResidentPerson add = MapstructUtils.convert(bo, ResidentPerson.class); Assert.notNull(add, "数据处理失败"); // 唯一性校验 + assert add != null; validEntityBeforeSave(add); + + // 首次入驻新用户权限组默认使用公司权限 + ResidentUnitVo ruVo = residentUnitService.queryById(bo.getUnitId()); + add.setAuthGroupId(ruVo.getAuthGroupId()); + boolean flag = baseMapper.insert(add) > 0; Assert.isTrue(flag, "员工入驻失败!"); if (flag) { @@ -116,21 +129,20 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { RemotePersonAuth personAuth = new RemotePersonAuth(); personAuth.setId(add.getId()); personAuth.setName(bo.getUserName()); - personAuth.setSex(bo.getGender() != 1L ? 0 : 1); + personAuth.setSex(bo.getGender().intValue()); personAuth.setPhone(bo.getPhone()); personAuth.setEmail(bo.getEmail()); personAuth.setIdCardNumber(bo.getIdCard()); personAuth.setOssId(bo.getImg()); personAuth.setCarNumber(bo.getCarNumber()); - personAuth.setBegDate(bo.getBegDate()); - personAuth.setEndDate(bo.getEndDate()); - personAuth.setAuthGroupId(bo.getAuthGroupId()); - Long personId = remoteSisAuth.personAuth(personAuth); - Assert.notNull(personId, "新增授权记录失败"); - bo.setId(add.getId()); - bo.setEEightId(personId); - this.updateByBo(bo); + // 使用公司权限组 + personAuth.setAuthBegDate(ruVo.getAuthBegDate()); + personAuth.setAuthEndDate(ruVo.getAuthEndDate()); + personAuth.setAuthGroupId(ruVo.getAuthGroupId()); + + Boolean auth = remoteSisAuth.personAuth(personAuth); + Assert.isTrue(auth, "新增授权记录失败"); } return flag; } @@ -177,7 +189,17 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(ResidentPerson::getId, ids); + List list = baseMapper.selectVoList(lqw); + + boolean hasEnabled = list.stream() + .anyMatch(vo -> vo.getState() == 1); // 遇到第一个启用人员立即返回 + Assert.isTrue(!hasEnabled, "当前存在人员状态为启用,请核对后再试!"); + + boolean hasE8 = list.stream() + .anyMatch(vo -> vo.getEEightId() != null); // 遇到第一个e8人员立即返回 + Assert.isTrue(!hasE8, "当前存在人员已下发权限,请删除通行权限后再试!"); } return baseMapper.deleteByIds(ids) > 0; } @@ -185,8 +207,8 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { /** * 获取单位人员数量 * - * @param unitId - * @return + * @param unitId 单位id + * @return Long */ @Override public Long queryPersonCount(Long unitId) { @@ -194,4 +216,18 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { lqw.eq(unitId != null, ResidentPerson::getUnitId, unitId); return baseMapper.selectCount(lqw); } + + /** + * 查询已上传图片,未授权人员 + * + * @return List + */ + @Override + public List queryUnAuthPerson(){ + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.isNotNull(ResidentPerson::getImg) + .ne(ResidentPerson::getImg, "") + .isNull(ResidentPerson::getEEightId); + return baseMapper.selectVoList(lqw); + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java index c5d29d02..bab10962 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java @@ -363,10 +363,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { default -> "未知"; }; - satisfactionRateList.add(new ServiceWorkOrderAnalysisVo.SatisfactionChartVo() - .setName(name) - .setValue((long) count) - .setRate(rate)); + satisfactionRateList.add(new ServiceWorkOrderAnalysisVo.SatisfactionChartVo(name,count,rate)); } return satisfactionRateList; @@ -404,6 +401,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { } catch (Exception e) { // 忽略格式错误的日期 + e.printStackTrace(); } } @@ -431,24 +429,24 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { Map workOrderTypeCounts = serviceWorkOrdersList.stream() .collect(Collectors.groupingBy(ServiceWorkOrders::getType, Collectors.counting())); - long total = serviceWorkOrdersList.size(); List result = new ArrayList<>(); for (Map.Entry entry : workOrderTypeCounts.entrySet()) { Long typeId = entry.getKey(); - Long count = entry.getValue(); + Integer count = entry.getValue().intValue(); + // 查询类型名称 ServiceWorkOrdersType serviceWorkOrdersType = serviceWorkOrdersTypeMapper.selectById(typeId); - String typeName = serviceWorkOrdersType != null ? serviceWorkOrdersType.getOrderTypeName() : "未知类型"; - // 计算占比(保留两位小数) - double percentage = Math.round(((double) count / total) * 10000) / 100.0; - result.add(new ServiceWorkOrderAnalysisVo.PieChartVo(typeName.toString(), count, percentage)); + String type = serviceWorkOrdersType != null ? serviceWorkOrdersType.getOrderTypeName() : "未知类型"; + + // 添加到结果中 + result.add(new ServiceWorkOrderAnalysisVo.PieChartVo(type, count)); } + return result; } private List getRecentSixMonthsWorkOrders(List ordersList) { LocalDate today = LocalDate.now(); - // 获取近6个月的日期范围(含当月) List months = new ArrayList<>(); for (int i = 5; i >= 0; i--) { @@ -463,10 +461,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { // 构建柱状图数据 return months.stream() - .map(month -> new ServiceWorkOrderAnalysisVo.BarChartVo() - .setMonth(month) - .setOrderCount(Math.toIntExact(orderCountMap.getOrDefault(month, 0L))) - ) + .map(month -> new ServiceWorkOrderAnalysisVo.BarChartVo(month,Math.toIntExact(orderCountMap.getOrDefault(month, 0L)))) .collect(Collectors.toList()); } } diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/CapitalApplicationMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/CapitalApplicationMapper.xml new file mode 100644 index 00000000..c2f3dabe --- /dev/null +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/CapitalApplicationMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/CapitalInfoMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/CapitalInfoMapper.xml new file mode 100644 index 00000000..11de98b9 --- /dev/null +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/CapitalInfoMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/CarInfoMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/CarInfoMapper.xml new file mode 100644 index 00000000..f34ed4f7 --- /dev/null +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/CarInfoMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/CarTypeMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/CarTypeMapper.xml new file mode 100644 index 00000000..c8b7cf76 --- /dev/null +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/CarTypeMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/MaintainKnowledgeMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/MaintainKnowledgeMapper.xml new file mode 100644 index 00000000..5412040f --- /dev/null +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/MaintainKnowledgeMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java new file mode 100644 index 00000000..04f08c89 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java @@ -0,0 +1,199 @@ +package org.dromara.sis.config.timer; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.constant.CodePrefixConstants; +import org.dromara.common.tenant.helper.TenantHelper; +import org.dromara.property.api.RemoteResidentPersonService; +import org.dromara.property.api.domain.vo.RemoteResidentPersonVo; +import org.dromara.resource.api.RemoteFileService; +import org.dromara.sis.api.domain.RemotePersonAuth; +import org.dromara.sis.domain.bo.SisPersonLibImgBo; +import org.dromara.sis.domain.vo.*; +import org.dromara.sis.sdk.e8.E8PlatformApi; +import org.dromara.sis.sdk.e8.domain.accessControl.req.CustomerAuthAddReq; +import org.dromara.sis.sdk.e8.domain.custom.req.CustomAddReq; +import org.dromara.sis.sdk.e8.domain.voucher.req.IssueVoucherReq; +import org.dromara.sis.sdk.huawei.HuaWeiBoxApi; +import org.dromara.sis.sdk.huawei.domain.AddHWPersonReq; +import org.dromara.sis.service.ISisAccessControlService; +import org.dromara.sis.service.ISisAuthGroupRefService; +import org.dromara.sis.service.ISisAuthRecordService; +import org.dromara.sis.service.ISisPersonLibImgService; +import org.dromara.sis.service.impl.SisPersonLibImgServiceImpl; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; + +import java.util.ArrayList; +import java.util.Base64; +import java.util.Collection; +import java.util.List; + +/** + * @author lsm + * @apiNote AuthTimer + * @since 2025/7/26 + */ +@Slf4j +@Configuration +@EnableScheduling +@RequiredArgsConstructor +public class AuthTimer { + + @DubboReference + private RemoteFileService remoteFileService; + + @DubboReference + private RemoteResidentPersonService remoteResidentPersonService; + + private final HuaWeiBoxApi huaWeiBoxApi; + private final E8PlatformApi e8PlatformApi; + private final ISisAuthRecordService sisAuthRecordService; + private final ISisPersonLibImgService sisPersonLibImgService; + private final ISisAuthGroupRefService sisAuthGroupRefService; + private final ISisAccessControlService sisAccessControlService; + + /** + * 每两分钟执行一次 + */ +// @Scheduled(cron = "0 */1 * * * ?") + public void autoAuth() { + List unAuthPerson = remoteResidentPersonService.queryUnAuthPerson(); +// if (CollUtil.isNotEmpty(unAuthPerson)) { +// +// try { +// for (RemoteResidentPersonVo person : unAuthPerson) { +// log.info("开始定时授权:{}", person.getId()); +// +// // 判断是否已存在授权 +// SisAuthRecordVo authRecord = sisAuthRecordService.queryByGroupIdAndPersonId(person.getAuthGroupId(), person.getId()); +// if (ObjectUtil.isEmpty(authRecord)) { +// // 无授权记录时,补录 +// this.syncAuthRecord(person); +// } +// +// // 读取人像 +// byte[] imgByte = remoteFileService.downloadToByteArray(Long.parseLong(person.getOssId())); +// if (imgByte == null) continue; +// +// // 写入华为盒子 +// Long huaweiId = syncHuaweiBox(person, imgByte); +// if (huaweiId == null) continue; +// +// // 更新人像信息huaweiBoxId +// Boolean update = sisPersonLibImgService.updateByPersonId(person.getId(), huaweiId); +// if (!update) continue; +// +// // 同步E8平台 +// Long e8Id = syncE8Plat(person, imgByte); +// if (e8Id == null) continue; +// +// // 更新入驻员工E8平台id +// remoteResidentPersonService.updateE8Id(person.getId(), e8Id); +// +// } +// } catch (Exception e) { +// throw new RuntimeException(e); +// } +// +// } + } + + private void syncAuthRecord(RemoteResidentPersonVo person) { + log.info("开始补录授权记录、人像信息"); + RemotePersonAuth personAuth = new RemotePersonAuth(); + personAuth.setId(person.getId()); + personAuth.setOssId(person.getOssId()); + personAuth.setName(person.getName()); + personAuth.setSex(person.getGender().intValue()); + personAuth.setIdCardNumber(person.getIdCard()); + personAuth.setAuthGroupId(person.getAuthGroupId()); + personAuth.setAuthBegDate(person.getAuthBegDate()); + personAuth.setAuthEndDate(person.getAuthEndDate()); + sisAuthRecordService.insertByPerson(personAuth); + log.info("补录授权记录、人像信息完成"); + } + + private Long syncHuaweiBox(RemoteResidentPersonVo vo, byte[] imgByte) { + log.info("开始写入华为平台"); + AddHWPersonReq req = new AddHWPersonReq(); + req.setIndex(CodePrefixConstants.PERSON_LIB_IMAGE_CODE_PREFIX + IdUtil.getSnowflakeNextIdStr()); + req.setName(vo.getName()); + req.setGender(vo.getGender() == 1L ? "0" : vo.getGender() == 2L ? "1" : "-1"); + req.setCredentialType("0"); + req.setCredentialNumber(vo.getIdCard()); + + ArrayList pictures = new ArrayList<>(); + pictures.add(Base64.getEncoder().encodeToString(imgByte)); + req.setPictures(pictures); + + Long pId = huaWeiBoxApi.addPerson(List.of(req)); + Assert.notNull(pId, "调用华为盒子新增图片失败"); + log.info("写入华为盒子完成,pId={}", pId); + return pId; + } + + private Long syncE8Plat(RemoteResidentPersonVo vo, byte[] imgByte) throws Exception { + + log.info("e8平台上传照片"); + String e8ImgUrl = e8PlatformApi.uploadFace(imgByte); + Assert.notNull(e8ImgUrl, "图片上传E8平台失败"); + log.info("e8平台上传照片完成"); + + log.info("e8同步新建人员"); + CustomAddReq req = new CustomAddReq(); + req.setName(vo.getName()); + req.setGender(vo.getGender() != 1L ? 0 : 1); + req.setIdentityType(0); + req.setIdentityNo(vo.getIdCard()); + Long e8Id = e8PlatformApi.addCustomer(req).getId(); + Assert.notNull(e8Id, "e8同步新建人员失败"); + log.info("e8同步新建人员完成"); + + + log.info("e8平台开始发行凭证"); + IssueVoucherReq voucherReq = new IssueVoucherReq(); + voucherReq.setVoucherType(70); + voucherReq.setPersonID(e8Id); + voucherReq.setTxtData(e8ImgUrl); + voucherReq.setCardType(34); + Long voucherId = e8PlatformApi.issueVoucher(voucherReq); + Assert.notNull(voucherId, "e8平台发行凭证失败"); + log.info("e8平台发行凭证成功"); + + // 获取门禁 + List refVos = sisAuthGroupRefService.queryListByGroupId(vo.getAuthGroupId()); + Collection deviceIds = refVos.stream().filter(ref -> ref.getDeviceType() == 1).map(SisAuthGroupRefVo::getDeviceId).toList(); + if (CollUtil.isNotEmpty(deviceIds)) { + // 初始化赋值 + CustomerAuthAddReq authReq = new CustomerAuthAddReq(); + authReq.setPersonIds(List.of(e8Id)); + authReq.setStartTime(DateUtil.format(vo.getAuthBegDate(), "yyyy-MM-dd HH:mm:ss")); + authReq.setEndTime(DateUtil.format(vo.getAuthEndDate(), "yyyy-MM-dd HH:mm:ss")); + List list = new ArrayList<>(); + SisAccessControlVo accessControlVo; + for (Long deviceId : deviceIds) { + accessControlVo = sisAccessControlService.queryById(deviceId); + CustomerAuthAddReq.AuthGroupData authData = new CustomerAuthAddReq.AuthGroupData(); + authData.setId(Long.parseLong(accessControlVo.getOutDoorCode())); + authData.setType(0); + authData.setGatewayType(1); + list.add(authData); + } + authReq.setAuthData(list); + + log.info("e8平台开始授权"); + Boolean flag = e8PlatformApi.addCustomerAuth(authReq); + Assert.isTrue(flag, "E8平台授权失败!"); + log.info("E8平台授权完成!"); + } + return e8Id; + } +} 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 9d17b9df..9b8d9a6a 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 @@ -7,7 +7,6 @@ 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; @@ -15,7 +14,6 @@ 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; @@ -121,8 +119,8 @@ public class SisAuthRecordController extends BaseController { * * @return List> */ -// @GetMapping("/authDevice/tree") -// public R>> tree() { -// return R.ok(sisAuthRecordService.authDeviceTree()); -// } + @GetMapping("/authDevice/tree") + public R>> tree() { + return R.ok(sisAuthRecordService.authDeviceTree()); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthGroupRef.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthGroupRef.java index 4d145869..3d4d6493 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthGroupRef.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthGroupRef.java @@ -11,7 +11,7 @@ import java.io.Serial; * 权限组⇄设备关联对象 sis_auth_group_ref * * @author lsm - * @date 2025-07-23 + * @sincex 2025-07-23 */ @Data @EqualsAndHashCode(callSuper = true) @@ -30,7 +30,7 @@ public class SisAuthGroupRef extends TenantEntity { /** * 权限组id */ - private Long groupId; + private Long authGroupId; /** * 设备id(门禁/电梯) 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 f6f7aa6a..52767289 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 @@ -5,7 +5,6 @@ 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; @@ -13,7 +12,7 @@ import java.io.Serial; * 授权记录对象 sis_auth_record * * @author lsm - * @date 2025-07-24 + * @since 2025-07-24 */ @Data @EqualsAndHashCode(callSuper = true) @@ -35,7 +34,7 @@ public class SisAuthRecord extends TenantEntity { private Long targetId; /** - * 对象类型:1-单位 2-人 + * 来源类型:1-单位 2-人 */ private Long targetType; 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 d59a9742..afe110e9 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 @@ -12,7 +12,7 @@ import java.io.Serial; * 人像信息对象 tb_person_lib_img * * @author mocheng - * @date 2025-06-24 + * @since 2025-06-24 */ @Data @EqualsAndHashCode(callSuper = true) @@ -73,4 +73,9 @@ public class SisPersonLibImg extends TenantEntity { */ private Long remoteImgId; + /** + * 入驻员工id + */ + private Long residentPersonId; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthGroupRefBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthGroupRefBo.java index c9310fc0..84935f36 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthGroupRefBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthGroupRefBo.java @@ -13,7 +13,7 @@ import jakarta.validation.constraints.*; * 权限组⇄设备关联业务对象 sis_auth_group_ref * * @author lsm - * @date 2025-07-23 + * @since 2025-07-23 */ @Data @EqualsAndHashCode(callSuper = true) @@ -30,7 +30,7 @@ public class SisAuthGroupRefBo extends BaseEntity { * 权限组id */ @NotNull(message = "权限组id不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long groupId; + private Long authGroupId; /** * 设备id(门禁/电梯) 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 02057276..3b7b7298 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 @@ -15,7 +15,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; * 授权记录业务对象 sis_auth_record * * @author lsm - * @date 2025-07-24 + * @since 2025-07-24 */ @Data @EqualsAndHashCode(callSuper = true) @@ -35,7 +35,7 @@ public class SisAuthRecordBo extends BaseEntity { private Long targetId; /** - * 对象类型:1-单位 2-人 + * 来源类型:1-单位 2-人 */ @NotNull(message = "对象类型:1-单位 2-人不能为空", groups = { AddGroup.class, EditGroup.class }) private Long targetType; 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 cd92835e..15358a83 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 @@ -82,8 +82,8 @@ public class SisPersonLibImgBo extends BaseEntity { private Long remoteImgId; /** - * 同步E8 + * 入驻员工id */ - private Boolean isSyncE8; + private Long residentPersonId; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthGroupRefVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthGroupRefVo.java index cfd5a63b..ead82fbe 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthGroupRefVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthGroupRefVo.java @@ -10,7 +10,6 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; -import java.util.Date; @@ -18,7 +17,7 @@ import java.util.Date; * 权限组⇄设备关联视图对象 sis_auth_group_ref * * @author lsm - * @date 2025-07-23 + * @since 2025-07-23 */ @Data @ExcelIgnoreUnannotated @@ -38,7 +37,7 @@ public class SisAuthGroupRefVo implements Serializable { * 权限组id */ @ExcelProperty(value = "权限组id") - private Long groupId; + private Long authGroupId; /** * 设备id(门禁/电梯) 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 3691fca4..6b9f1a11 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 @@ -1,18 +1,14 @@ package org.dromara.sis.domain.vo; import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; 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.Date; @@ -20,7 +16,7 @@ import java.util.Date; * 授权记录视图对象 sis_auth_record * * @author lsm - * @date 2025-07-24 + * @since 2025-07-24 */ @Data @ExcelIgnoreUnannotated @@ -43,7 +39,7 @@ public class SisAuthRecordVo implements Serializable { private Long targetId; /** - * 对象类型:1-单位 2-人 + * 来源类型:1-单位 2-人 */ @ExcelProperty(value = "对象类型:1-单位 2-人") private Long targetType; 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 3d9ffe17..ecbd52b3 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 @@ -90,4 +90,10 @@ public class SisPersonLibImgVo implements Serializable { */ @ExcelProperty(value = "人像库id") private Collection libIds; + + /** + * 入驻员工id + */ + @ExcelProperty(value = "入驻员工id") + private Long residentPersonId; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthImpl.java index 30d6db2a..79e0764d 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthImpl.java @@ -20,7 +20,7 @@ public class RemoteSisAuthImpl implements RemoteSisAuth { private final ISisAuthRecordService sisAuthRecordService; @Override - public Long personAuth(RemotePersonAuth personAuth) { + public Boolean personAuth(RemotePersonAuth personAuth) { return sisAuthRecordService.insertByPerson(personAuth); } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthGroupRefMapper.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthGroupRefMapper.java index ac1e6b26..42cf832a 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthGroupRefMapper.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthGroupRefMapper.java @@ -1,5 +1,6 @@ package org.dromara.sis.mapper; +import org.apache.ibatis.annotations.Mapper; import org.dromara.sis.domain.SisAuthGroupRef; import org.dromara.sis.domain.vo.SisAuthGroupRefVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; @@ -8,8 +9,9 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; * 权限组⇄设备关联Mapper接口 * * @author lsm - * @date 2025-07-23 + * @since 2025-07-23 */ +@Mapper public interface SisAuthGroupRefMapper extends BaseMapperPlus { } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisPersonLibImgMapper.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisPersonLibImgMapper.java index df1e89a4..0739cebb 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisPersonLibImgMapper.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisPersonLibImgMapper.java @@ -1,5 +1,6 @@ package org.dromara.sis.mapper; +import org.apache.ibatis.annotations.Mapper; import org.dromara.sis.domain.SisPersonLibImg; import org.dromara.sis.domain.vo.SisPersonLibImgVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; @@ -8,8 +9,9 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; * 人像信息Mapper接口 * * @author mocheng - * @date 2025-06-24 + * @since 2025-06-24 */ +@Mapper public interface SisPersonLibImgMapper extends BaseMapperPlus { } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/custom/req/CustomAddReq.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/custom/req/CustomAddReq.java index 8e31bfd3..03103bc4 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/custom/req/CustomAddReq.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/custom/req/CustomAddReq.java @@ -106,7 +106,7 @@ public class CustomAddReq { /** * 组织ID(以;分隔) */ - private String organIds; + private String organIds = "1"; /** * 客户明细 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 6b680cec..29db7901 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 @@ -1,6 +1,9 @@ package org.dromara.sis.sdk.hik; +import com.alibaba.fastjson2.JSONObject; import lombok.extern.slf4j.Slf4j; +import org.dromara.sis.sdk.hik.model.DeviceInfo; +import org.dromara.sis.sdk.hik.service.CamearService; import org.dromara.sis.sdk.hik.service.DoorService; import org.dromara.sis.sdk.hik.service.LoginService; import org.dromara.sis.sdk.hik.service.SdkBaseServer; @@ -139,10 +142,29 @@ public class HikApiService { * @param deviceIp 设备ip * @return 范湖通道信息 */ - public Object getChannelInfo(String deviceIp) { - - - return null; + public DeviceInfo getChannelInfo(String deviceIp) { + Integer lHandel = CACHE.get(deviceIp); + return CamearService.getDeviceChannelInfo(lHandel); } + + public static void main(String[] args) { +// String ip ="192.168.10.253"; +// short port = 8000; +// String user = "admin"; +// String wd ="ncqzfdl123"; + + String ip = "192.168.24.251"; + short port = 8000; + String user = "admin"; + String wd = "hik12345+"; + + SdkBaseServer.initSdk(); + getInstance().login(ip, port, user, wd); + Integer lHandel = CACHE.get(ip); + DeviceInfo deviceChannelInfo = CamearService.getDeviceChannelInfo(lHandel); + System.out.println(JSONObject.toJSONString(deviceChannelInfo)); + } + + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikSdkConstans.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikSdkConstans.java index a2be010e..a1c6e062 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikSdkConstans.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikSdkConstans.java @@ -9,4 +9,6 @@ public class HikSdkConstans { public static final Integer DEFAULT_RTSP_PORT = 554; + public static final String DEFAULT_CHANNEL_PREFX = "01"; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/SDK_Structure.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/SDK_Structure.java index 15cb181e..2fc94b36 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/SDK_Structure.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/SDK_Structure.java @@ -1,31 +1,28 @@ package org.dromara.sis.sdk.hik; +import com.sun.jna.Structure; + import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; -import com.sun.jna.Structure; -public class SDK_Structure extends Structure -{ - protected List getFieldOrder() - { - List fieldOrderList = new ArrayList(); - for (Class cls = getClass();!cls.equals(SDK_Structure.class);cls = cls.getSuperclass()) - { - Field[] fields = cls.getDeclaredFields(); - int modifiers; - for (Field field : fields) - { - modifiers = field.getModifiers(); - if (Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) - { - continue; - } - fieldOrderList.add(field.getName()); - } - } - //System.out.println(fieldOrderList); - return fieldOrderList; - } +public class SDK_Structure extends Structure { + protected List getFieldOrder() { + List fieldOrderList = new ArrayList(); + for (Class cls = getClass(); !cls.equals(SDK_Structure.class); cls = cls.getSuperclass()) { + Field[] fields = cls.getDeclaredFields(); + int modifiers; + for (Field field : fields) { + modifiers = field.getModifiers(); + if (Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) { + continue; + } + fieldOrderList.add(field.getName()); + } + } + //System.out.println(fieldOrderList); + return fieldOrderList; + } + } 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 index 30c775c1..d5097877 100644 --- 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 @@ -2,6 +2,7 @@ package org.dromara.sis.sdk.hik.calback; import cn.hutool.core.codec.Base64Encoder; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; import com.sun.jna.Pointer; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -36,6 +37,7 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 { private final HuaWeiBoxApi huaWeiBoxApi; private final ISisAuthRecordService authRecordService; + private final ISisAuthGroupRefService authGroupRefService; private final ISisElevatorInfoService elevatorInfoService; private final ISisDeviceBindRefService deviceBindRefService; private final ISisAccessControlService accessControlService; @@ -321,6 +323,44 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 { } log.info("人脸比对完成,personId={}", person); + // TODO 测试逻辑,只针对门禁 + + // 授权纪录 + SisAuthRecordVo authRecord = authRecordService.checkAuth(person); + if (authRecord == null) { + log.info("当前人脸未授权,暂不处理。"); + return true; + } + + Date now = new Date(); + if(DateUtil.compare(now, authRecord.getEndDate()) > 0){ + log.info("当前人脸已过期,暂不处理。"); + return true; + } + + // 授权设备列表 + List authGroupRefVos = authGroupRefService.queryListByGroupId(authRecord.getGroupId()); + // 获取门禁id + Collection acIds = authGroupRefVos.stream().filter(vo -> vo.getDeviceType() == 1).map(SisAuthGroupRefVo::getDeviceId).toList(); + if (CollUtil.isNotEmpty(acIds)) { + acIds.forEach(id -> { + // controlType 1-门禁 + Long deviceId = bindRefList.stream().filter(vo -> vo.getBindId().equals(id) && vo.getControlType() == 1).findFirst().map(SisDeviceBindRefVo::getBindId).orElse(null); + if (deviceId != null) { + SisAccessControlVo ac = accessControlService.queryById(deviceId); + log.info("调用门禁服务远程开门,doorName:{}", ac.getAccessName()); + 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 = e8PlatformApi.remoteOpenDoor(req); + log.info("远程开门结果,result={}", flag); + } + }); + } + // 授权记录 // List authVoList = authRecordService.checkAuth(person); // 获取门禁id diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/model/DeviceInfo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/model/DeviceInfo.java new file mode 100644 index 00000000..850264c7 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/model/DeviceInfo.java @@ -0,0 +1,71 @@ +package org.dromara.sis.sdk.hik.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class DeviceInfo { + + /** + * 设备支持的总组数 + */ + private Integer dwGroupNum; + + /** + * 最大模拟通道个数 + */ + private Integer dwAChanNum; + + /** + * 数字通道个数 + */ + private Integer dwDChanNum; + + /** + * 起始数字通道 + */ + private Integer dwStartDChan; + + private List channelInfo; + + @Data + public static class DeviceChannelInfo { + /** + * 通道id + */ + private Integer channelId; + + /** + * 通道名称 + */ + private String channelName; + + /** + * 通道设备ip + */ + private String channelIp; + + /** + * 通道设备端口 + */ + private Short channelPort; + + /** + * 通道账号 + */ + private String channelAccount; + + /** + * 通道密码 + */ + private String channelPwd; + + /** + * 通过状态 + */ + private Integer channelStatus; + + } + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/CamearService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/CamearService.java index 0c648632..c31d4fdd 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/CamearService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/CamearService.java @@ -1,9 +1,14 @@ package org.dromara.sis.sdk.hik.service; - import com.sun.jna.ptr.IntByReference; import lombok.extern.slf4j.Slf4j; import org.dromara.sis.sdk.hik.HCNetSDK; +import org.dromara.sis.sdk.hik.model.DeviceInfo; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; import static org.dromara.sis.sdk.hik.HCNetSDK.NET_DVR_GET_IPPARACFG_V40; @@ -15,7 +20,7 @@ public class CamearService extends SdkBaseServer { * * @return */ - public static Object getDeviceChannelInfo(int lUserID) { + public static DeviceInfo getDeviceChannelInfo(int lUserID) { HCNetSDK.NET_DVR_IPPARACFG_V40 lpOutBuffer = new HCNetSDK.NET_DVR_IPPARACFG_V40(); lpOutBuffer.read(); lpOutBuffer.dwSize = lpOutBuffer.size(); @@ -24,7 +29,48 @@ public class CamearService extends SdkBaseServer { if (success) { lpOutBuffer.read(); } - return null; + + DeviceInfo deviceInfo = new DeviceInfo(); + deviceInfo.setDwGroupNum(lpOutBuffer.dwGroupNum); + deviceInfo.setDwAChanNum(lpOutBuffer.dwAChanNum); + deviceInfo.setDwDChanNum(lpOutBuffer.dwDChanNum); + deviceInfo.setDwStartDChan(lpOutBuffer.dwStartDChan); + + List channelInfo = new ArrayList<>(64); + deviceInfo.setChannelInfo(channelInfo); + int num = 0; + for (int i = 0; i < lpOutBuffer.dwDChanNum; i++) { + HCNetSDK.NET_DVR_PICCFG_V30 dvrPiccfgV30 = new HCNetSDK.NET_DVR_PICCFG_V30(); + dvrPiccfgV30.dwSize = dvrPiccfgV30.size(); + IntByReference lpBytesReturned = new IntByReference(0); + int channelNum = i + lpOutBuffer.dwStartDChan; + getHcNetSDK().NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_PICCFG_V30, channelNum, dvrPiccfgV30.getPointer(), dvrPiccfgV30.dwSize, lpBytesReturned); + dvrPiccfgV30.read(); + + if (dvrPiccfgV30.dwSize == 0) { + // 代表此通道不存在数据那次此次不操作 + log.info("通道[{}],无数据,不处理", channelNum); + } else { + String channelName = new String(dvrPiccfgV30.sChanName, Charset.forName("GBK")).trim(); + HCNetSDK.NET_DVR_IPDEVINFO_V31 netDvrIpdevinfoV31 = lpOutBuffer.struIPDevInfo[num]; + String sUserName = new String(netDvrIpdevinfoV31.sUserName, StandardCharsets.UTF_8).trim(); + String sPassword = new String(netDvrIpdevinfoV31.sPassword, StandardCharsets.UTF_8).trim(); + String ip = new String(netDvrIpdevinfoV31.struIP.sIpV4, StandardCharsets.UTF_8).trim(); + short wDVRPort = netDvrIpdevinfoV31.wDVRPort; + + DeviceInfo.DeviceChannelInfo deviceChannelInfo = new DeviceInfo.DeviceChannelInfo(); + deviceChannelInfo.setChannelId( channelNum); + deviceChannelInfo.setChannelName(channelName); + deviceChannelInfo.setChannelIp(ip); + deviceChannelInfo.setChannelPort(wDVRPort); + deviceChannelInfo.setChannelAccount(sUserName); + deviceChannelInfo.setChannelPwd(sPassword); + deviceChannelInfo.setChannelStatus(0); + channelInfo.add(deviceChannelInfo); + num++; + } + } + return deviceInfo; } } 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 c5ceb086..da31abe6 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 @@ -136,6 +136,4 @@ public class SdkBaseServer { hcNetSDK.NET_DVR_Cleanup(); } } - - } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/zkmedia/ZLMediaKitServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/zkmedia/ZLMediaKitServiceImpl.java index d48d3f77..77775311 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/zkmedia/ZLMediaKitServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/zkmedia/ZLMediaKitServiceImpl.java @@ -199,7 +199,6 @@ public class ZLMediaKitServiceImpl implements ZLMediaKitService { return null; } - @Override public Boolean delFFmpegSource(String key) { Map commonParams = getCommonParams(); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthGroupRefService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthGroupRefService.java index 5c406fd6..c6cbd785 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthGroupRefService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthGroupRefService.java @@ -44,10 +44,13 @@ public interface ISisAuthGroupRefService { /** * 新增权限组⇄设备关联 * - * @param bo 权限组⇄设备关联 + * @param authGroupId 权限组id + * @param acIds 门禁id + * @param eleIds 电梯id + * @param floorIds 楼层id * @return 是否新增成功 */ - Boolean insertByBo(SisAuthGroupRefBo bo); + Boolean insertByBo(Long authGroupId, Collection acIds, Collection eleIds, Collection floorIds); /** * 修改权限组⇄设备关联 @@ -66,12 +69,17 @@ public interface ISisAuthGroupRefService { */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - - /** * 通过权限组id,查询授权设备列表 * * @param groupId 权限id */ List queryListByGroupId(Long groupId); + + /** + * 通过权限组id,删除授权设备列表 + * + * @param groupId 权限id + */ + Boolean deleteByGroupId(Long groupId); } 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 58bdda55..a9848854 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 @@ -2,7 +2,6 @@ package org.dromara.sis.service; import org.dromara.common.core.domain.TreeNode; import org.dromara.sis.api.domain.RemotePersonAuth; -import org.dromara.sis.domain.SisAuthRecord; import org.dromara.sis.domain.vo.SisAuthRecordVo; import org.dromara.sis.domain.bo.SisAuthRecordBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -50,7 +49,7 @@ public interface ISisAuthRecordService { * @param bo 授权记录 * @return 是否新增成功 */ - Long insertByPerson(RemotePersonAuth bo); + Boolean insertByPerson(RemotePersonAuth bo); /** * 修改授权记录 @@ -87,14 +86,23 @@ public interface ISisAuthRecordService { /** * 查询所有可授权设备树 * - * @return List> + * @return List> */ -// List> authDeviceTree(); + List> authDeviceTree(); /** * 根据人脸比对ID,返回授权记录 * * @param personId 人脸比对ID */ -// List checkAuth(Long personId); + SisAuthRecordVo checkAuth(Long personId); + + /** + * 根据权限组ID,人员id,返回授权记录 + * + * @param groupId 权限组ID + * @param personId 人员id + * @return SisAuthRecordVo + */ + SisAuthRecordVo queryByGroupIdAndPersonId(Long groupId, Long personId); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisPersonLibImgService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisPersonLibImgService.java index 8926a3e1..621a00ea 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisPersonLibImgService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisPersonLibImgService.java @@ -73,4 +73,13 @@ public interface ISisPersonLibImgService { * @return 列表 */ List queryListByIds(Collection ids); + + /** + * 根据入驻员工id,更新huaweiBoxId + * + * @param personId 入驻员工id + * @param huaweiBoxId 华为盒子图像id + * @return Boolean + */ + Boolean updateByPersonId(Long personId, Long huaweiBoxId); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupRefServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupRefServiceImpl.java index 73068551..251b0826 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupRefServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupRefServiceImpl.java @@ -1,7 +1,8 @@ package org.dromara.sis.service.impl; +import cn.hutool.core.lang.Assert; +import org.apache.dubbo.config.annotation.DubboReference; 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; @@ -9,12 +10,19 @@ 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.api.RemoteFloorService; +import org.dromara.property.api.domain.vo.RemoteFloorVo; +import org.dromara.sis.domain.bo.SisElevatorFloorRefBo; +import org.dromara.sis.domain.vo.SisElevatorInfoVo; +import org.dromara.sis.service.ISisElevatorFloorRefService; +import org.dromara.sis.service.ISisElevatorInfoService; import org.springframework.stereotype.Service; import org.dromara.sis.domain.bo.SisAuthGroupRefBo; import org.dromara.sis.domain.vo.SisAuthGroupRefVo; import org.dromara.sis.domain.SisAuthGroupRef; import org.dromara.sis.mapper.SisAuthGroupRefMapper; import org.dromara.sis.service.ISisAuthGroupRefService; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; @@ -27,12 +35,18 @@ import java.util.Collection; * @date 2025-07-23 */ @Slf4j -@RequiredArgsConstructor @Service +@RequiredArgsConstructor public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService { private final SisAuthGroupRefMapper baseMapper; + private final ISisElevatorInfoService elevatorInfoService; + private final ISisElevatorFloorRefService sisElevatorFloorRefService; + + @DubboReference + private RemoteFloorService remoteFloorService; + /** * 查询权限组⇄设备关联 * @@ -40,7 +54,7 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService { * @return 权限组⇄设备关联 */ @Override - public SisAuthGroupRefVo queryById(Long id){ + public SisAuthGroupRefVo queryById(Long id) { return baseMapper.selectVoById(id); } @@ -74,7 +88,7 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByAsc(SisAuthGroupRef::getId); - lqw.eq(bo.getGroupId() != null, SisAuthGroupRef::getGroupId, bo.getGroupId()); + lqw.eq(bo.getAuthGroupId() != null, SisAuthGroupRef::getAuthGroupId, bo.getAuthGroupId()); lqw.eq(bo.getDeviceId() != null, SisAuthGroupRef::getDeviceId, bo.getDeviceId()); lqw.eq(bo.getDeviceType() != null, SisAuthGroupRef::getDeviceType, bo.getDeviceType()); return lqw; @@ -83,18 +97,58 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService { /** * 新增权限组⇄设备关联 * - * @param bo 权限组⇄设备关联 + * @param authGroupId 权限组id + * @param acIds 门禁id + * @param eleIds 电梯id + * @param floorIds 授权楼层id * @return 是否新增成功 */ @Override - public Boolean insertByBo(SisAuthGroupRefBo bo) { - SisAuthGroupRef add = MapstructUtils.convert(bo, SisAuthGroupRef.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(Long authGroupId, Collection acIds, Collection eleIds, Collection floorIds) { + // 删除权限组⇄设备关联关系 + this.deleteByGroupId(authGroupId); + + // 电梯设备 + List eleVoList = elevatorInfoService.queryListByIds(eleIds); + + log.info("开始写入授权组门禁,acIds:{}", acIds); + boolean check = false; + for (Long ac : acIds) { + SisAuthGroupRef groupRef = new SisAuthGroupRef(); + groupRef.setAuthGroupId(authGroupId); + groupRef.setDeviceType(1L); + groupRef.setDeviceId(ac); + check = baseMapper.insert(groupRef) > 0; + Assert.isTrue(check, "写入授权组门禁失败!"); } - return flag; + log.info("写入授权组门禁完成"); + + log.info("开始写入授权组电梯,eleIds:{}", eleIds); + for (SisElevatorInfoVo ele : eleVoList) { + SisAuthGroupRef groupRef = new SisAuthGroupRef(); + groupRef.setAuthGroupId(authGroupId); + groupRef.setDeviceType(2L); + groupRef.setDeviceId(ele.getElevatorId()); + check = baseMapper.insert(groupRef) > 0; + Assert.isTrue(check, "写入授权组电梯失败!"); + + log.info("开始写入授权组电梯楼层,floorIds:{}", floorIds); + // 获取该电梯所在单元的楼层信息 + List floorVoList = remoteFloorService.queryByUnitId(ele.getUnitId()); + // 该单元所有楼层id + List allFloors = floorVoList.stream().map(RemoteFloorVo::getId).toList(); + // 对比找出授权楼层id + List authFloors = floorIds.stream().filter(allFloors::contains).toList(); + SisElevatorFloorRefBo refBo = new SisElevatorFloorRefBo(); + refBo.setAuthGroupId(authGroupId); + refBo.setElevatorId(ele.getElevatorId()); + refBo.setFloorIds(authFloors); + sisElevatorFloorRefService.insertByBo(refBo); + } + log.info("写入授权组电梯完成"); + + return check; } /** @@ -113,7 +167,7 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService { /** * 保存前的数据校验 */ - private void validEntityBeforeSave(SisAuthGroupRef entity){ + private void validEntityBeforeSave(SisAuthGroupRef entity) { //TODO 做一些数据校验,如唯一约束 } @@ -126,7 +180,7 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService { */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; @@ -138,9 +192,21 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService { * @param groupId 权限id */ @Override - public List queryListByGroupId(Long groupId){ + public List queryListByGroupId(Long groupId) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(SisAuthGroupRef::getGroupId, groupId); + lqw.eq(SisAuthGroupRef::getAuthGroupId, groupId); return baseMapper.selectVoList(lqw); } + + /** + * 通过权限组id,删除授权设备列表 + * + * @param groupId 权限id + */ + @Override + public Boolean deleteByGroupId(Long groupId) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SisAuthGroupRef::getAuthGroupId, groupId); + return baseMapper.delete(lqw) > 0; + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupServiceImpl.java index 61444015..0d5b3640 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupServiceImpl.java @@ -1,8 +1,6 @@ package org.dromara.sis.service.impl; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; -import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -12,12 +10,6 @@ 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.api.RemoteFloorService; -import org.dromara.property.api.domain.vo.RemoteFloorVo; -import org.dromara.sis.domain.bo.SisAuthGroupRefBo; -import org.dromara.sis.domain.bo.SisElevatorFloorRefBo; -import org.dromara.sis.domain.vo.SisAccessControlVo; -import org.dromara.sis.domain.vo.SisElevatorInfoVo; import org.dromara.sis.service.*; import org.springframework.stereotype.Service; import org.dromara.sis.domain.bo.SisAuthGroupBo; @@ -43,13 +35,10 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService { private final SisAuthGroupMapper baseMapper; - private final ISisElevatorInfoService elevatorInfoService; - private final ISisAccessControlService accessControlService; private final ISisAuthGroupRefService sisAuthGroupRefService; - private final ISisElevatorFloorRefService sisElevatorFloorRefService; - @DubboReference - private RemoteFloorService remoteFloorService; + + /** * 查询授权组 * @@ -57,7 +46,7 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService { * @return 授权组 */ @Override - public SisAuthGroupVo queryById(Long id){ + public SisAuthGroupVo queryById(Long id) { return baseMapper.selectVoById(id); } @@ -109,51 +98,11 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService { add.setName(bo.getName()); add.setGroupType(bo.getGroupType()); - // 电梯设备 - List eleVoList = elevatorInfoService.queryListByIds(bo.getEleIds()); - if (CollUtil.isEmpty(eleVoList)) { - return false; - } - boolean flag = baseMapper.insert(add) > 0; Assert.isTrue(flag, "新增授权组失败"); if (flag) { - log.info("开始写入授权组门禁,acIds:{}", bo.getAcIds()); - boolean check; - for(Long ac : bo.getAcIds()){ - SisAuthGroupRefBo groupRef = new SisAuthGroupRefBo(); - groupRef.setGroupId(add.getId()); - groupRef.setDeviceType(1L); - groupRef.setDeviceId(ac); - check = sisAuthGroupRefService.insertByBo(groupRef); - Assert.isTrue(check, "写入授权组门禁失败!"); - } - log.info("写入授权组门禁完成"); - - log.info("开始写入授权组电梯,eleIds:{}", bo.getEleIds()); - for (SisElevatorInfoVo ele : eleVoList) { - SisAuthGroupRefBo groupRef = new SisAuthGroupRefBo(); - groupRef.setGroupId(add.getId()); - groupRef.setDeviceType(2L); - groupRef.setDeviceId(ele.getElevatorId()); - check = sisAuthGroupRefService.insertByBo(groupRef); - Assert.isTrue(check, "写入授权组电梯失败!"); - - log.info("开始写入授权组电梯楼层,floorIds:{}", bo.getFloorIds()); - // 获取该电梯所在单元的楼层信息 - List floorVoList = remoteFloorService.queryByUnitId(ele.getUnitId()); - // 该单元所有楼层id - List allFloors = floorVoList.stream().map(RemoteFloorVo::getId).toList(); - // 对比找出授权楼层id - List authFloors = bo.getFloorIds().stream().filter(allFloors::contains).toList(); - SisElevatorFloorRefBo refBo = new SisElevatorFloorRefBo(); - refBo.setAuthGroupId(add.getId()); - refBo.setElevatorId(ele.getElevatorId()); - refBo.setFloorIds(authFloors); - sisElevatorFloorRefService.insertByBo(refBo); - } - log.info("写入授权组电梯完成"); + flag = sisAuthGroupRefService.insertByBo(add.getId(), bo.getAcIds(), bo.getEleIds(), bo.getFloorIds()); } return flag; } @@ -165,16 +114,24 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService { * @return 是否修改成功 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean updateByBo(SisAuthGroupBo bo) { SisAuthGroup update = MapstructUtils.convert(bo, SisAuthGroup.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; + Assert.notNull(update, "数据转换错误"); + boolean flag = baseMapper.updateById(update) > 0; + Assert.isTrue(flag, "修改授权组失败"); + + if (flag) { + flag = sisAuthGroupRefService.insertByBo(update.getId(), bo.getAcIds(), bo.getEleIds(), bo.getFloorIds()); + } + + return flag; } /** * 保存前的数据校验 */ - private void validEntityBeforeSave(SisAuthGroup entity){ + private void validEntityBeforeSave(SisAuthGroup entity) { //TODO 做一些数据校验,如唯一约束 } @@ -187,7 +144,7 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService { */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; 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 92a3dc14..01f8ce2b 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,10 +1,8 @@ package org.dromara.sis.service.impl; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.IdUtil; import org.apache.dubbo.config.annotation.DubboReference; -import org.dromara.common.core.constant.CodePrefixConstants; +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; @@ -13,26 +11,20 @@ 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.resource.api.RemoteFileService; +import org.dromara.property.api.RemoteFloorService; +import org.dromara.property.api.domain.vo.RemoteFloorVo; import org.dromara.sis.api.domain.RemotePersonAuth; +import org.dromara.sis.domain.bo.SisAccessControlBo; +import org.dromara.sis.domain.bo.SisElevatorInfoBo; import org.dromara.sis.domain.bo.SisPersonLibImgBo; import org.dromara.sis.domain.vo.SisAccessControlVo; -import org.dromara.sis.domain.vo.SisAuthGroupRefVo; -import org.dromara.sis.sdk.e8.E8PlatformApi; -import org.dromara.sis.sdk.e8.domain.accessControl.req.CustomerAuthAddReq; -import org.dromara.sis.sdk.e8.domain.custom.req.CustomAddReq; -import org.dromara.sis.sdk.e8.domain.voucher.req.IssueVoucherReq; -import org.dromara.sis.sdk.huawei.HuaWeiBoxApi; -import org.dromara.sis.sdk.huawei.domain.AddHWPersonReq; -import org.dromara.sis.service.ISisAccessControlService; -import org.dromara.sis.service.ISisAuthGroupRefService; -import org.dromara.sis.service.ISisPersonLibImgService; +import org.dromara.sis.domain.vo.SisElevatorInfoVo; +import org.dromara.sis.service.*; 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.service.ISisAuthRecordService; import org.springframework.transaction.annotation.Transactional; import java.util.*; @@ -48,15 +40,13 @@ import java.util.*; @Service public class SisAuthRecordServiceImpl implements ISisAuthRecordService { - private final HuaWeiBoxApi huaWeiBoxApi; - private final E8PlatformApi e8PlatformApi; private final SisAuthRecordMapper baseMapper; - private final ISisAuthGroupRefService sisAuthGroupRefService; + private final ISisElevatorInfoService elevatorInfoService; private final ISisPersonLibImgService sisPersonLibImgService; private final ISisAccessControlService sisAccessControlService; @DubboReference - private final RemoteFileService remoteFileService; + private RemoteFloorService remoteFloorService; /** * 查询授权记录 @@ -115,131 +105,37 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { */ @Override @Transactional(rollbackFor = Exception.class) - public Long insertByPerson(RemotePersonAuth bo) { + public Boolean insertByPerson(RemotePersonAuth bo) { SisAuthRecord add = new SisAuthRecord(); - add.setTargetType(2L); + add.setTargetType(1L); add.setTargetId(bo.getId()); add.setGroupId(bo.getAuthGroupId()); - add.setBegDate(bo.getBegDate()); - add.setEndDate(bo.getEndDate()); + add.setBegDate(bo.getAuthBegDate()); + add.setEndDate(bo.getAuthEndDate()); boolean flag = baseMapper.insert(add) > 0; Assert.isTrue(flag, "新增授权记录失败"); - - Long e8Id = null; - try { - byte[] imageByte = remoteFileService.downloadToByteArray(Long.parseLong(bo.getOssId())); - - // 写入华为平台 - Long huaweiBoxId = syncHuaweiBox(bo, imageByte); - + if (flag) { // 写入安防人像信息 - this.syncPersonImg(bo, huaweiBoxId); - - // 写入E8平台 - e8Id = syncE8Plat(bo, imageByte); - - - } catch (Exception e) { - throw new RuntimeException(e.getMessage()); + this.syncPersonImg(bo); } - return e8Id; + return flag; } - private void syncPersonImg(RemotePersonAuth bo, Long huaweiBoxId){ + private void syncPersonImg(RemotePersonAuth bo) { log.info("开始写入安防人像信息"); SisPersonLibImgBo personLibImg = new SisPersonLibImgBo(); personLibImg.setImgOssId(Long.parseLong(bo.getOssId())); personLibImg.setImgName(bo.getName()); personLibImg.setSex(bo.getSex()); - personLibImg.setEmail(bo.getEmail()); - personLibImg.setTel(bo.getPhone()); - personLibImg.setCertificateType(bo.getCardType()); + personLibImg.setCertificateType(1); personLibImg.setCertificateNo(bo.getIdCardNumber()); - personLibImg.setRemoteImgId(huaweiBoxId); + personLibImg.setResidentPersonId(bo.getId()); sisPersonLibImgService.insertByBo(personLibImg); log.info("写入安防人像信息完成"); } - private Long syncHuaweiBox(RemotePersonAuth bo, byte[] imgByte) { - log.info("开始写入华为平台"); - AddHWPersonReq req = new AddHWPersonReq(); - req.setIndex(CodePrefixConstants.PERSON_LIB_IMAGE_CODE_PREFIX + IdUtil.getSnowflakeNextIdStr()); - req.setName(bo.getName()); - req.setGender(bo.getSex() == 1 ? "0" : bo.getSex() == 2 ? "1" : "-1"); - req.setCredentialType("0"); - req.setCredentialNumber(bo.getIdCardNumber()); - - ArrayList pictures = new ArrayList<>(); - pictures.add(Base64.getEncoder().encodeToString(imgByte)); - req.setPictures(pictures); - - Long pId = huaWeiBoxApi.addPerson(List.of(req)); - Assert.notNull(pId, "调用华为盒子新增图片失败"); - log.info("写入华为盒子完成,pId={}", pId); - return pId; - } - - private Long syncE8Plat(RemotePersonAuth bo, byte[] imgByte) { - - log.info("e8平台上传照片"); - String e8ImgUrl = e8PlatformApi.uploadFace(imgByte); - Assert.notNull(e8ImgUrl, "图片上传E8平台失败"); - log.info("e8平台上传照片完成"); - - log.info("e8同步新建人员"); - CustomAddReq req = new CustomAddReq(); - req.setName(bo.getName()); - req.setGender(bo.getSex()); - req.setMobile(bo.getPhone()); - req.setEmail(bo.getEmail()); - req.setIdentityType(0); - req.setIdentityNo(bo.getIdCardNumber()); - Long e8Id = e8PlatformApi.addCustomer(req).getId(); - Assert.notNull(e8Id, "e8同步新建人员失败"); - log.info("e8同步新建人员完成"); - - - log.info("e8平台开始发行凭证"); - IssueVoucherReq voucherReq = new IssueVoucherReq(); - voucherReq.setVoucherType(70); - voucherReq.setPersonID(e8Id); - voucherReq.setTxtData(e8ImgUrl); - voucherReq.setStartTime(bo.getBegDate().toString()); - voucherReq.setEndTime(bo.getEndDate().toString()); - Long voucherId = e8PlatformApi.issueVoucher(voucherReq); - Assert.notNull(voucherId, "e8平台发行凭证失败"); - log.info("e8平台发行凭证成功"); - - // 获取门禁 - List refVos = sisAuthGroupRefService.queryListByGroupId(bo.getAuthGroupId()); - Collection deviceIds = refVos.stream().filter(ref -> ref.getDeviceType() == 1).map(SisAuthGroupRefVo::getDeviceId).toList(); - if(CollUtil.isNotEmpty(deviceIds)){ - // 初始化赋值 - CustomerAuthAddReq authReq = new CustomerAuthAddReq(); - authReq.setPersonIds(List.of(e8Id)); - authReq.setStartTime(bo.getBegDate().toString()); - authReq.setEndTime(bo.getEndDate().toString()); - List list = new ArrayList<>(); - SisAccessControlVo accessControlVo; - for(Long deviceId : deviceIds){ - accessControlVo = sisAccessControlService.queryById(deviceId); - CustomerAuthAddReq.AuthGroupData authData = new CustomerAuthAddReq.AuthGroupData(); - authData.setId(Long.parseLong(accessControlVo.getOutDoorCode())); - authData.setType(1); - list.add(authData); - } - authReq.setAuthData(list); - - log.info("e8平台开始授权"); - Boolean flag = e8PlatformApi.addCustomerAuth(authReq); - Assert.isTrue(flag, "E8平台授权失败!"); - log.info("E8平台授权完成!"); - } - return e8PlatformApi.addCustomer(req).getId(); - } - /** * 修改授权记录 * @@ -274,4 +170,107 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { } return baseMapper.deleteByIds(ids) > 0; } + + /** + * 查询所有可授权设备树 + * + * @return List> + */ + @Override + public List> authDeviceTree() { + // 暂时将所有数据放入写死的根节点中 + TreeNode root = new TreeNode<>(); + root.setLevel(0); + root.setCode(0L); + root.setParentCode(-1L); + root.setTitle("授权设备"); + + // 创建门禁设备父节点 + TreeNode accessNode = new TreeNode<>(); + accessNode.setLevel(1); + accessNode.setCode(1L); + accessNode.setParentCode(0L); + accessNode.setTitle("门禁设备"); + + // 创建电梯父节点 + TreeNode elevatorNode = new TreeNode<>(); + elevatorNode.setLevel(1); + elevatorNode.setCode(2L); + elevatorNode.setParentCode(0L); + elevatorNode.setTitle("电梯设备"); + + + List eleVoList = elevatorInfoService.queryList(new SisElevatorInfoBo()); + List acVoList = sisAccessControlService.queryList(new SisAccessControlBo()); + + List> acChildrenList = acVoList.stream().map(item -> { + TreeNode node = new TreeNode<>(); + node.setLevel(2); + node.setCode(item.getId()); + node.setParentCode(1L); + node.setLabel("accessControl"); + node.setTitle(item.getAccessName()); + return node; + }).toList(); + + List> eleChildrenList = new ArrayList<>(); + eleVoList.forEach(item -> { + // 电梯子节点 + TreeNode eleNode = new TreeNode<>(); + eleNode.setLevel(2); + eleNode.setParentCode(2L); + eleNode.setLabel("elevator"); + eleNode.setCode(item.getElevatorId()); + eleNode.setTitle(item.getElevatorName()); + + // 楼层节点 + List> floorTree = new ArrayList<>(); + // 获取楼层 + List floorInfoList = remoteFloorService.queryByUnitId(item.getUnitId()); + floorInfoList.forEach(floor -> { + TreeNode floorNode = new TreeNode<>(); + floorNode.setLevel(3); + floorNode.setLabel("floor"); + floorNode.setCode(floor.getId()); + floorNode.setTitle(floor.getFloorName()); + floorNode.setParentCode(item.getElevatorId()); + floorTree.add(floorNode); + }); + eleNode.setChildren(floorTree); + eleChildrenList.add(eleNode); + }); + + // 将子节点列表分别添加到对应的父节点 + accessNode.setChildren(acChildrenList); + elevatorNode.setChildren(eleChildrenList); + + + // 最后将两个父节点添加到根节点 + root.setChildren(List.of(accessNode, elevatorNode)); + return List.of(root); + } + + /** + * 根据人脸比对ID,返回授权记录 + * + * @param personId 人脸比对ID + */ + @Override + public SisAuthRecordVo checkAuth(Long personId) { + return baseMapper.checkAuth(personId).get(0); + } + + /** + * 根据权限组ID,人员id,返回授权记录 + * + * @param groupId 权限组ID + * @param personId 人员id + * @return SisAuthRecordVo + */ + public SisAuthRecordVo queryByGroupIdAndPersonId(Long groupId, Long personId) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SisAuthRecord::getGroupId, groupId) + .eq(SisAuthRecord::getTargetId, personId); + return baseMapper.selectVoOne(lqw); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java index 079b4225..af62f4aa 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java @@ -21,6 +21,7 @@ import org.dromara.sis.domain.vo.SisDeviceGroupVo; import org.dromara.sis.mapper.SisDeviceChannelMapper; import org.dromara.sis.sdk.hik.HikApiService; import org.dromara.sis.sdk.hik.HikSdkConstans; +import org.dromara.sis.sdk.hik.model.DeviceInfo; import org.dromara.sis.service.ISisDeviceChannelService; import org.dromara.sis.service.ISisDeviceGroupService; import org.springframework.stereotype.Service; @@ -195,13 +196,12 @@ public class SisDeviceChannelServiceImpl implements ISisDeviceChannelService { @Override public Boolean handleHikDeviceChannel(SisDeviceManageBo bo) { + // 调用hik sdk登录 + boolean isLogin = HikApiService.getInstance().login(bo.getDeviceIp(), bo.getDevicePort().shortValue(), bo.getDeviceAccount(), bo.getDevicePwd()); + if (!isLogin) { + throw new RuntimeException("海康设备添加失败."); + } if (DeviceTypeEnum.IPC.getType().equals(bo.getDeviceType())) { - // 只需要验证hik设备能能否登录即可 - // 调用hik sdk登录 - boolean isLogin = HikApiService.getInstance().login(bo.getDeviceIp(), bo.getDevicePort().shortValue(), bo.getDeviceAccount(), bo.getDevicePwd()); - if (!isLogin) { - throw new RuntimeException("海康设备添加失败."); - } // 写入设备通道信息 SisDeviceChannel channel = new SisDeviceChannel(); channel.setDeviceId(bo.getId()); @@ -216,10 +216,30 @@ public class SisDeviceChannelServiceImpl implements ISisDeviceChannelService { channel.setChannelNo(HikSdkConstans.DEFAULT_CHANNEL); this.insert(channel); return true; - } else if (DeviceTypeEnum.NVR.getType().equals(bo.getDeviceType())) { - //TODO - } else if (DeviceTypeEnum.DVR.getType().equals(bo.getDeviceType())) { + } else if (DeviceTypeEnum.NVR.getType().equals(bo.getDeviceType()) || DeviceTypeEnum.DVR.getType().equals(bo.getDeviceType())) { + DeviceInfo channelInfo = HikApiService.getInstance().getChannelInfo(bo.getDeviceIp()); + if (channelInfo != null && CollUtil.isNotEmpty(channelInfo.getChannelInfo())) { + List channels = new ArrayList<>(channelInfo.getChannelInfo().size()); + channelInfo.getChannelInfo().forEach(item -> { + SisDeviceChannel channel = new SisDeviceChannel(); + channel.setDeviceId(bo.getId()); + channel.setGroupId(bo.getGroupId()); + channel.setDeviceIp(bo.getDeviceIp()); + channel.setDevicePort(HikSdkConstans.DEFAULT_RTSP_PORT); + channel.setFactoryNo(bo.getFactoryNo()); + channel.setDeviceAccount(bo.getDeviceAccount()); + channel.setDevicePwd(bo.getDevicePwd()); + channel.setDeviceMac(bo.getDeviceMac()); + channel.setChannelName(item.getChannelName()); + channel.setChannelNo(item.getChannelId() + HikSdkConstans.DEFAULT_CHANNEL_PREFX); + channels.add(channel); + }); + this.baseMapper.insertBatch(channels); + } + return true; + } else { + log.info("未知的设备类型,不处理。"); } return false; } 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 848d7831..6a18844a 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 @@ -45,7 +45,7 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { private final ISisLibImgRefService sisLibImgRefService; @DubboReference - private final RemoteFileService remoteFileService; + private RemoteFileService remoteFileService; /** * 查询人像信息 @@ -178,4 +178,20 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { public List queryListByIds(Collection Ids) { return baseMapper.selectVoByIds(Ids); } + + /** + * 根据入驻员工id,更新huaweiBoxId + * + * @param personId 入驻员工id + * @param huaweiBoxId 华为盒子图像id + * @return Boolean + */ + @Override + public Boolean updateByPersonId(Long personId, Long huaweiBoxId){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(SisPersonLibImg::getResidentPersonId, personId); + SisPersonLibImg update = new SisPersonLibImg(); + update.setRemoteImgId(huaweiBoxId); + return baseMapper.update(update, lqw) > 0; + } } 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 91142918..d2481576 100644 --- a/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml +++ b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml @@ -5,16 +5,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"