diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ApplicationController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ApplicationController.java index 5f17fa20..038e46f0 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ApplicationController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ApplicationController.java @@ -62,7 +62,7 @@ public class ApplicationController extends BaseController { * * @param id 主键 */ - @SaCheckPermission("property:application:query") + //@SaCheckPermission("property:application:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable("id") Long id) { @@ -90,7 +90,13 @@ public class ApplicationController extends BaseController { public R edit(@Validated(EditGroup.class) @RequestBody ApplicationBo bo) { return toAjax(applicationService.updateByBo(bo)); } - + /** + * 审核通过 + */ + @PostMapping("/verified") + public R verified(@Validated(EditGroup.class) @RequestBody ApplicationBo bo) { + return toAjax(applicationService.verifiedByBo(bo)); + } /** * 删除资产领用 * diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/DepotLogController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/DepotLogController.java index 6fe74b6b..390d083e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/DepotLogController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/DepotLogController.java @@ -40,7 +40,7 @@ public class DepotLogController extends BaseController { /** * 查询仓库记录列表 */ - @SaCheckPermission("property:log:list") + //@SaCheckPermission("property:log:list") @GetMapping("/list") public TableDataInfo list(DepotLogBo bo, PageQuery pageQuery) { return depotLogService.queryPageList(bo, pageQuery); @@ -62,7 +62,7 @@ public class DepotLogController extends BaseController { * * @param id 主键 */ - @SaCheckPermission("property:log:query") + // @SaCheckPermission("property:log:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable("id") Long id) { diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServiceWorkOrdersTypeController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServiceWorkOrdersTypeController.java index 90c08a0b..7c124cde 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServiceWorkOrdersTypeController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ServiceWorkOrdersTypeController.java @@ -103,4 +103,13 @@ public class ServiceWorkOrdersTypeController extends BaseController { @PathVariable("ids") Long[] ids) { return toAjax(serviceWorkOrdersTypeService.deleteWithValidByIds(List.of(ids), true)); } + + /** + * 查询【工单类型】树结构 + */ + @SaCheckPermission("system:workOrdersType:list") + @GetMapping("/typeTree") + public R> typeTree() { + return R.ok(serviceWorkOrdersTypeService.typeTree()) ; + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbVisitorManagementController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbVisitorManagementController.java index f9e7ffbd..bf854706 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbVisitorManagementController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbVisitorManagementController.java @@ -70,8 +70,10 @@ public class TbVisitorManagementController extends BaseController { */ @PostMapping("/getcode") public R getcode(QrCodeInfo qrCodeInfo) { - Long string = (Long) StpUtil.getLoginId(); - qrCodeInfo.setUserid(string); + String userid =StpUtil.getLoginId().toString(); + String[] split = userid.split(":"); + Long s1 = Long.valueOf(split[1]); + qrCodeInfo.setUserid(s1); String s = remoteConfigService.selectQrTimeOut(); int i = Integer.parseInt(s); UUID value = UUID.randomUUID(); @@ -123,7 +125,7 @@ public class TbVisitorManagementController extends BaseController { } /** - * 新增访客管理 + * 小程序新增访客管理 */ @SaCheckPermission("property:visitorManagement:add") @Log(title = "访客管理", businessType = BusinessType.INSERT) @@ -137,6 +139,18 @@ public class TbVisitorManagementController extends BaseController { return toAjax(tbVisitorManagementService.insertByBo(bo)); } + /** + * pc端新增访客管理 + */ + @SaCheckPermission("property:visitorManagement::addVisitorManagement") + @Log(title = "访客管理", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping + public R addVistorManagement(@Validated(AddGroup.class) @RequestBody TbVisitorManagementBo bo) { + return toAjax(tbVisitorManagementService.insertVistorManagementByBo(bo)); + } + + /** * 修改访客管理 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Application.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Application.java index 91805b2f..64f9e14b 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Application.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Application.java @@ -42,12 +42,12 @@ public class Application extends TenantEntity { /** * 数量 */ - private Long number; + private Integer number; /** * 状态 */ - private Long state; + private Integer state; /** * 审批人id diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Asset.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Asset.java index dd3b05a7..40598e87 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Asset.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Asset.java @@ -4,6 +4,8 @@ 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; @@ -47,7 +49,7 @@ public class Asset extends TenantEntity { /** * 价格 */ - private Long price; + private BigDecimal price; /** * 库存 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Depot.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Depot.java index eca7bc57..c9be067c 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Depot.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Depot.java @@ -45,7 +45,7 @@ public class Depot extends TenantEntity { /** * 状态 */ - private Long state; + private Integer state; /** * 创建人id diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/DepotLog.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/DepotLog.java index 14138671..c192b8d4 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/DepotLog.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/DepotLog.java @@ -4,6 +4,8 @@ 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; @@ -42,7 +44,7 @@ public class DepotLog extends TenantEntity { /** * 流转类型 */ - private Long type; + private Integer type; /** * 流转时间 @@ -57,7 +59,7 @@ public class DepotLog extends TenantEntity { /** * 状态 */ - private Long state; + private Integer state; /** * 备注 @@ -67,17 +69,17 @@ public class DepotLog extends TenantEntity { /** * 价格 */ - private Long price; + private BigDecimal price; /** * 总价 */ - private Long priceSum; + private BigDecimal priceSum; /** * 数量 */ - private Long number; + private Integer number; /** * 供应商id diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPointRecord.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPointRecord.java new file mode 100644 index 00000000..6a198b2a --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPointRecord.java @@ -0,0 +1,58 @@ +package org.dromara.property.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 巡检点签到记录对象 inspection_point_record + * + * @author mocheng + * @date 2025-08-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("inspection_point_record") +public class InspectionPointRecord extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 巡检点id + */ + private Long pointId; + + /** + * 签到人id + */ + private Long userId; + + /** + * 签到时间 + */ + private Date signTime; + + /** + * 备注 + */ + private String remark; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionRoutePoint.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionRoutePoint.java new file mode 100644 index 00000000..7746ccfb --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionRoutePoint.java @@ -0,0 +1,63 @@ +package org.dromara.property.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 巡检路线巡检点关联对象 inspection_route_point + * + * @author mocheng + * @date 2025-08-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("inspection_route_point") +public class InspectionRoutePoint extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 巡检路线id + */ + private Long routeId; + + /** + * 巡检点id + */ + private Long pointId; + + /** + * 开始时间 + */ + private Date startTime; + + /** + * 结束时间 + */ + private Date endTime; + + /** + * 备注 + */ + private String remark; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrdersType.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrdersType.java index 95677afb..4837b99e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrdersType.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrdersType.java @@ -62,4 +62,9 @@ public class ServiceWorkOrdersType extends TenantEntity { */ private String searchValue; + /** + *上级类型id + */ + private Long parentId; + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ApplicationBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ApplicationBo.java index dcd69e84..af8b802b 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ApplicationBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ApplicationBo.java @@ -41,12 +41,12 @@ public class ApplicationBo extends BaseEntity { /** * 数量 */ - private Long number; + private Integer number; /** * 状态 */ - private Long state; + private Integer state; /** * 审批人id diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AssetBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AssetBo.java index 97948ef5..284fb176 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AssetBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AssetBo.java @@ -8,6 +8,8 @@ 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 com.fasterxml.jackson.annotation.JsonFormat; @@ -46,12 +48,12 @@ public class AssetBo extends BaseEntity { /** * 价格 */ - private Long price; + private BigDecimal price; /** * 库存 */ - private Long stock; + private Integer stock; /** * 计量单位 @@ -81,7 +83,7 @@ public class AssetBo extends BaseEntity { /** * 固定资产类型 */ - private Long type; + private Integer type; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AssetTypeBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AssetTypeBo.java index be8b16b1..c24b83ac 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AssetTypeBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AssetTypeBo.java @@ -34,7 +34,7 @@ public class AssetTypeBo extends BaseEntity { /** * 排序 */ - private Long sort; + private Integer sort; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanOrderBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanOrderBo.java index a4957a5b..fd6daed4 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanOrderBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanOrderBo.java @@ -90,6 +90,8 @@ public class CleanOrderBo extends BaseEntity { @NotBlank(message = "结束时间不能为空", groups = {AddGroup.class, EditGroup.class}) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") private String endTime; + + /** * 评价 */ @@ -102,6 +104,11 @@ public class CleanOrderBo extends BaseEntity { * 图片 */ private String imgUrl; + + /** + * 单位id + */ + @NotNull(message = "单位id不能为空", groups = {AddGroup.class, EditGroup.class}) private Long unitId; // /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/DepotLogBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/DepotLogBo.java index 86f4b228..1f5993c6 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/DepotLogBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/DepotLogBo.java @@ -8,6 +8,8 @@ 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 com.fasterxml.jackson.annotation.JsonFormat; @@ -66,12 +68,12 @@ public class DepotLogBo extends BaseEntity { /** * 价格 */ - private Long price; + private BigDecimal price; /** * 总价 */ - private Long priceSum; + private BigDecimal priceSum; /** * 数量 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPointRecordBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPointRecordBo.java new file mode 100644 index 00000000..6d78b6e2 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPointRecordBo.java @@ -0,0 +1,60 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.InspectionPointRecord; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 巡检点签到记录业务对象 inspection_point_record + * + * @author mocheng + * @date 2025-08-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = InspectionPointRecord.class, reverseConvertGenerate = false) +public class InspectionPointRecordBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 巡检点id + */ + @NotNull(message = "巡检点id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long pointId; + + /** + * 签到人id + */ + @NotNull(message = "签到人id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long userId; + + /** + * 签到时间 + */ + @NotNull(message = "签到时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date signTime; + + /** + * 备注 + */ + private String remark; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionRouteBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionRouteBo.java index 14aefc3f..74d20196 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionRouteBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionRouteBo.java @@ -9,6 +9,8 @@ import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; import org.dromara.property.domain.InspectionRoute; +import java.util.List; + /** * 巡检路线业务对象 inspection_route * @@ -41,4 +43,9 @@ public class InspectionRouteBo extends BaseEntity { */ @NotNull(message = "排序不能为空", groups = { EditGroup.class }) private Integer sort; + /** + * 巡检路线巡检点关联 + */ + @NotEmpty(message = "巡检点不能为空", groups = { EditGroup.class }) + List inspectionRoutePointBoList; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionRoutePointBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionRoutePointBo.java new file mode 100644 index 00000000..c202fcd2 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionRoutePointBo.java @@ -0,0 +1,66 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.InspectionRoutePoint; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 巡检路线巡检点关联业务对象 inspection_route_point + * + * @author mocheng + * @date 2025-08-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = InspectionRoutePoint.class, reverseConvertGenerate = false) +public class InspectionRoutePointBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 巡检路线id + */ + // @NotNull(message = "巡检路线id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long routeId; + + /** + * 巡检点id + */ + @NotNull(message = "巡检点id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long pointId; + + /** + * 开始时间 + */ + @NotNull(message = "开始时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date startTime; + + /** + * 结束时间 + */ + @NotNull(message = "结束时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date endTime; + + /** + * 备注 + */ + private String remark; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersTypeBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersTypeBo.java index ab0d9a20..3d7d0ca9 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersTypeBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersTypeBo.java @@ -60,4 +60,9 @@ public class ServiceWorkOrdersTypeBo extends BaseEntity { */ private Integer isTransfers; + /** + *上级类型id + */ + private Long parentId; + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java index 4779e1c4..2da2f5b6 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java @@ -25,7 +25,7 @@ public class TbVisitorManagementBo extends BaseEntity { /** * qr码id */ - @NotNull(message = "qr码id不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "qr码id不能为空", groups = { AddGroup.class, EditGroup.class }) private Long qrCodeId; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ApplicationVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ApplicationVo.java index a2567b76..7db03f09 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ApplicationVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ApplicationVo.java @@ -64,13 +64,13 @@ public class ApplicationVo implements Serializable { * 数量 */ @ExcelProperty(value = "数量") - private Long number; + private Integer number; /** * 状态 */ @ExcelProperty(value = "状态") - private Long state; + private Integer state; /** * 审批人id diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AssetTypeVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AssetTypeVo.java index 19c444bf..d1b30eaf 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AssetTypeVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AssetTypeVo.java @@ -44,7 +44,7 @@ public class AssetTypeVo implements Serializable { * 排序 */ @ExcelProperty(value = "排序") - private Long sort; + private Integer sort; /** * 创建时间 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AssetVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AssetVo.java index b1879e8e..222b1dbf 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AssetVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AssetVo.java @@ -1,5 +1,6 @@ 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.Asset; @@ -64,7 +65,7 @@ public class AssetVo implements Serializable { * 价格 */ @ExcelProperty(value = "价格") - private Long price; + private BigDecimal price; /** * 库存 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/DepotLogVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/DepotLogVo.java index d88032be..22d68fb6 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/DepotLogVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/DepotLogVo.java @@ -1,5 +1,6 @@ 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.DepotLog; @@ -41,18 +42,28 @@ public class DepotLogVo implements Serializable { */ @ExcelProperty(value = "仓库id") private Long depotId; + /** + * 仓库名称 + */ + @ExcelProperty(value = "仓库名称") + private String depotName; /** * 资产id */ @ExcelProperty(value = "资产id") private Long assetId; + /** + * 资产名称 + */ + @ExcelProperty(value = "资产名称") + private String assetName; /** * 流转类型 */ @ExcelProperty(value = "流转类型") - private Long type; + private Integer type; /** * 流转时间 @@ -64,13 +75,17 @@ public class DepotLogVo implements Serializable { * 操作人id */ @ExcelProperty(value = "操作人id") - private Long userId; + private Long userId; /** + * 操作人id + */ + @ExcelProperty(value = "操作人名称") + private String userName; /** * 状态 */ @ExcelProperty(value = "状态") - private Long state; + private Integer state; /** * 备注 @@ -82,25 +97,30 @@ public class DepotLogVo implements Serializable { * 价格 */ @ExcelProperty(value = "价格") - private Long price; + private BigDecimal price; /** * 总价 */ @ExcelProperty(value = "总价") - private Long priceSum; + private BigDecimal priceSum; /** * 数量 */ @ExcelProperty(value = "数量") - private Long number; + private Integer number; /** * 供应商id */ @ExcelProperty(value = "供应商id") private Long supplierId; + /** + * 供应商名称 + */ + @ExcelProperty(value = "供应商名称") + private String supplierName; /** * 创建时间 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/DepotVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/DepotVo.java index 71ebc916..0dcf3b7a 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/DepotVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/DepotVo.java @@ -56,7 +56,7 @@ public class DepotVo implements Serializable { * 状态 */ @ExcelProperty(value = "状态") - private Long state; + private Integer state; /** * 创建时间 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPointRecordVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPointRecordVo.java new file mode 100644 index 00000000..b5fcfbec --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPointRecordVo.java @@ -0,0 +1,70 @@ +package org.dromara.property.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.property.domain.InspectionPointRecord; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 巡检点签到记录视图对象 inspection_point_record + * + * @author mocheng + * @date 2025-08-04 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = InspectionPointRecord.class) +public class InspectionPointRecordVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 巡检点id + */ + @ExcelProperty(value = "巡检点id") + private Long pointId; + + /** + * 签到人id + */ + @ExcelProperty(value = "签到人id") + private Long userId; + + /** + * 签到时间 + */ + @ExcelProperty(value = "签到时间") + private Date signTime; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 搜索值 + */ + @ExcelProperty(value = "搜索值") + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionRoutePointVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionRoutePointVo.java new file mode 100644 index 00000000..9d42dcda --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionRoutePointVo.java @@ -0,0 +1,76 @@ +package org.dromara.property.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.property.domain.InspectionRoutePoint; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 巡检路线巡检点关联视图对象 inspection_route_point + * + * @author mocheng + * @date 2025-08-04 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = InspectionRoutePoint.class) +public class InspectionRoutePointVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 巡检路线id + */ + @ExcelProperty(value = "巡检路线id") + private Long routeId; + + /** + * 巡检点id + */ + @ExcelProperty(value = "巡检点id") + private Long pointId; + + /** + * 开始时间 + */ + @ExcelProperty(value = "开始时间") + private Date startTime; + + /** + * 结束时间 + */ + @ExcelProperty(value = "结束时间") + private Date endTime; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 搜索值 + */ + @ExcelProperty(value = "搜索值") + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersTypeVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersTypeVo.java index b56c3c54..c6c49fab 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersTypeVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersTypeVo.java @@ -8,7 +8,8 @@ import org.dromara.property.domain.ServiceWorkOrdersType; import java.io.Serial; import java.io.Serializable; - +import java.util.ArrayList; +import java.util.List; /** @@ -75,4 +76,14 @@ public class ServiceWorkOrdersTypeVo implements Serializable { @ExcelProperty(value = "搜索值") private String searchValue; + /** + * 上级类型id + */ + private Long parentId; + + /** + * 子级类型 + */ + private List children = new ArrayList<>(); + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionPointRecordMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionPointRecordMapper.java new file mode 100644 index 00000000..529a2ae1 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionPointRecordMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.property.domain.InspectionPointRecord; +import org.dromara.property.domain.vo.InspectionPointRecordVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 巡检点签到记录Mapper接口 + * + * @author mocheng + * @date 2025-08-04 + */ +@Mapper +public interface InspectionPointRecordMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionRoutePointMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionRoutePointMapper.java new file mode 100644 index 00000000..55ed8813 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionRoutePointMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.property.domain.InspectionRoutePoint; +import org.dromara.property.domain.vo.InspectionRoutePointVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 巡检路线巡检点关联Mapper接口 + * + * @author mocheng + * @date 2025-08-04 + */ +@Mapper +public interface InspectionRoutePointMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IApplicationService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IApplicationService.java index 3dadf24a..c12d39f6 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IApplicationService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IApplicationService.java @@ -66,4 +66,11 @@ public interface IApplicationService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 审核通过 + * @param bo + * @return + */ + Boolean verifiedByBo(ApplicationBo bo); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersTypeService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersTypeService.java index a838a21e..a578ced8 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersTypeService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersTypeService.java @@ -65,4 +65,10 @@ public interface IServiceWorkOrdersTypeService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 查询【工单类型】树结构 + * @return 工单类型树结构 + */ + List typeTree(); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ITbVisitorManagementService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ITbVisitorManagementService.java index 2547e04a..c79756d4 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ITbVisitorManagementService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ITbVisitorManagementService.java @@ -56,6 +56,9 @@ public interface ITbVisitorManagementService { */ Boolean insertByBo(TbVisitorManagementBo bo); + + Boolean insertVistorManagementByBo(TbVisitorManagementBo bo); + /** * 修改访客管理 * diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ApplicationServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ApplicationServiceImpl.java index 4f0e60db..80d4c0dd 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ApplicationServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ApplicationServiceImpl.java @@ -1,5 +1,7 @@ package org.dromara.property.service.impl; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import org.dromara.common.core.utils.MapstructUtils; @@ -11,9 +13,12 @@ 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.common.satoken.utils.LoginHelper; import org.dromara.property.domain.Asset; +import org.dromara.property.domain.DepotLog; import org.dromara.property.domain.vo.AssetVo; import org.dromara.property.mapper.AssetMapper; +import org.dromara.property.mapper.DepotLogMapper; import org.dromara.system.api.RemoteUserService; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.ApplicationBo; @@ -21,12 +26,11 @@ import org.dromara.property.domain.vo.ApplicationVo; import org.dromara.property.domain.Application; import org.dromara.property.mapper.ApplicationMapper; import org.dromara.property.service.IApplicationService; +import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.sql.Array; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; /** * 资产领用Service业务层处理 @@ -42,6 +46,7 @@ public class ApplicationServiceImpl implements IApplicationService { private final ApplicationMapper baseMapper; private final AssetMapper assetMapper; private final RemoteUserService remoteUserService; + private final DepotLogMapper depotLogMapper; /** * 查询资产领用 @@ -50,12 +55,14 @@ public class ApplicationServiceImpl implements IApplicationService { * @return 资产领用 */ @Override - public ApplicationVo queryById(Long id){ + public ApplicationVo queryById(Long id) { ApplicationVo applicationVo = baseMapper.selectVoById(id); applicationVo.setUserName(remoteUserService.selectUserNameById(applicationVo.getUserId())); - applicationVo.setAcceptanceUserName(remoteUserService.selectUserNameById(applicationVo.getAcceptanceUserId())); + if (ObjectUtil.isNotEmpty(applicationVo.getAcceptanceUserId())) { + applicationVo.setAcceptanceUserName(remoteUserService.selectUserNameById(applicationVo.getAcceptanceUserId())); + } AssetVo assetVo = assetMapper.selectVoById(applicationVo.getAssetId()); - applicationVo.setAssetName(assetVo==null?"资产不存在" : assetVo.getName()); + applicationVo.setAssetName(assetVo == null ? "资产不存在" : assetVo.getName()); return applicationVo; } @@ -70,21 +77,41 @@ public class ApplicationServiceImpl implements IApplicationService { public TableDataInfo queryPageList(ApplicationBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - ArrayList ids = new ArrayList<>(); - result.getRecords().forEach(r -> ids.add(r.getUserId())); - result.getRecords().forEach(r -> ids.add(r.getAcceptanceUserId())); - Map userNamesByIds = remoteUserService.selectUserNamesByIds(ids); - result.getRecords().forEach(r ->r.setUserName(userNamesByIds.get(r.getUserId()))); - result.getRecords().forEach(r ->r.setAcceptanceUserName(userNamesByIds.get(r.getUserId()))); -// result.getRecords().forEach(r -> r.setUserName(remoteUserService.selectUserNameById(r.getUserId()))); -// result.getRecords().forEach(r -> r.setAcceptanceUserName(remoteUserService.selectUserNameById(r.getAcceptanceUserId()))); + + // 收集用户ID用于批量查询用户名 + Set userIds = new HashSet<>(); + result.getRecords().forEach(r -> { + if (r.getUserId() != null) { + userIds.add(r.getUserId()); + } + if (r.getAcceptanceUserId() != null) { + userIds.add(r.getAcceptanceUserId()); + } + }); + + // 批量获取用户名 + Map userNamesByIds = remoteUserService.selectUserNamesByIds(new ArrayList<>(userIds)); + + // 设置用户名(添加空值检查) + result.getRecords().forEach(r -> { + if (r.getUserId() != null) { + r.setUserName(userNamesByIds.get(r.getUserId())); + } + if (r.getAcceptanceUserId() != null) { + r.setAcceptanceUserName(userNamesByIds.get(r.getAcceptanceUserId())); + } + }); + + // 设置资产名称 result.getRecords().forEach(r -> { AssetVo assetVo = assetMapper.selectVoById(r.getAssetId()); - r.setAssetName(assetVo==null?"资产不存在" : assetVo.getName()); + r.setAssetName(assetVo == null ? "资产不存在" : assetVo.getName()); }); + return TableDataInfo.build(result); } + /** * 查询符合条件的资产领用列表 * @@ -99,7 +126,7 @@ public class ApplicationServiceImpl implements IApplicationService { applicationVos.forEach(r -> r.setAcceptanceUserName(remoteUserService.selectUserNameById(r.getAcceptanceUserId()))); applicationVos.forEach(r -> { AssetVo assetVo = assetMapper.selectVoById(r.getAssetId()); - r.setAssetName(assetVo==null?"资产不存在" : assetVo.getName()); + r.setAssetName(assetVo == null ? "资产不存在" : assetVo.getName()); }); return applicationVos; } @@ -140,20 +167,17 @@ public class ApplicationServiceImpl implements IApplicationService { * * @param bo 资产领用 * @return 是否修改成功 - * - * */ @Override public Boolean updateByBo(ApplicationBo bo) { Application update = MapstructUtils.convert(bo, Application.class); - validEntityBeforeSave(update); boolean b = baseMapper.updateById(update) > 0; - if (b&&bo.getState()==1){ + if (b && bo.getState() == 1) { Asset asset = assetMapper.selectById(bo.getAssetId()); - if (asset.getStock()>=update.getNumber()) { + if (asset.getStock() >= update.getNumber()) { UpdateWrapper assetUpdateWrapper = new UpdateWrapper<>(); - assetUpdateWrapper.eq("id",bo.getAssetId()) - .set("stock",assetMapper.selectVoById(bo.getAssetId()).getStock()-update.getNumber()); + assetUpdateWrapper.eq("id", bo.getAssetId()) + .set("stock", assetMapper.selectVoById(bo.getAssetId()).getStock() - update.getNumber()); assetMapper.update(assetUpdateWrapper); } @@ -164,8 +188,9 @@ public class ApplicationServiceImpl implements IApplicationService { /** * 保存前的数据校验 */ - private void validEntityBeforeSave(Application entity){ + private void validEntityBeforeSave(Application entity) { //TODO 做一些数据校验,如唯一约束 + entity.setApplicationTime(new Date()); } /** @@ -177,9 +202,47 @@ public class ApplicationServiceImpl implements IApplicationService { */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; } + + /** + * 审核通过 + * + * @param bo + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean verifiedByBo(ApplicationBo bo) { + Application update = MapstructUtils.convert(bo, Application.class); + if (bo.getState().equals(1)) { + //查询领用资产 + Asset asset = assetMapper.selectById(bo.getAssetId()); + Assert.isTrue(ObjectUtil.isNotNull(asset), "领用资产不存在"); + BigDecimal stock = new BigDecimal(asset.getStock()); + BigDecimal number = new BigDecimal(bo.getNumber()); + BigDecimal remain = stock.subtract(number); + Assert.isTrue(remain.compareTo(BigDecimal.ZERO) >= 0, "库存不足无法领用"); + asset.setStock(Long.valueOf(String.valueOf(remain))); + boolean b = assetMapper.updateById(asset) > 0; + if (b) { + DepotLog depotLog = new DepotLog(); + depotLog.setDepotId(asset.getDepotId()); + depotLog.setAssetId(asset.getId()); + depotLog.setType(1); + depotLog.setTime(new Date()); + depotLog.setUserId(LoginHelper.getUserId()); + depotLog.setPrice(asset.getPrice()); + depotLog.setNumber(bo.getNumber()); + depotLog.setPriceSum((asset.getPrice().multiply(new BigDecimal(bo.getNumber())))); + depotLog.setSupplierId(asset.getSuppliersId()); + depotLogMapper.insert(depotLog); + } + } + boolean flag = baseMapper.updateById(update) > 0; + return flag; + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AssetServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AssetServiceImpl.java index d4318066..039ef3c6 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AssetServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AssetServiceImpl.java @@ -119,7 +119,11 @@ public class AssetServiceImpl implements IAssetService { lqw.eq(StringUtils.isNotBlank(bo.getModel()), Asset::getModel, bo.getModel()); lqw.eq(StringUtils.isNotBlank(bo.getSpecs()), Asset::getSpecs, bo.getSpecs()); lqw.eq(bo.getPrice() != null, Asset::getPrice, bo.getPrice()); - lqw.eq(bo.getStock() != null, Asset::getStock, bo.getStock()); + if(params.containsKey("stock")){ + lqw.gt(Asset::getStock, 0); + }else { + lqw.eq(bo.getStock() != null, Asset::getStock, bo.getStock()); + } lqw.eq(StringUtils.isNotBlank(bo.getUnit()), Asset::getUnit, bo.getUnit()); lqw.eq(bo.getDepotId() != null, Asset::getDepotId, bo.getDepotId()); lqw.eq(StringUtils.isNotBlank(bo.getMsg()), Asset::getMsg, bo.getMsg()); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java index afada305..b57b6b20 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java @@ -2,6 +2,7 @@ package org.dromara.property.service.impl; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; @@ -44,6 +45,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS private final AttendanceGroupMapper attendanceGroupMapper; + // private final AttendanceArrangementGroupMapper arrangementGroupMapper; private final AttendanceWeekSetMapper weekSetMapper; @@ -125,7 +127,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS vo.setShift(attendanceShift); - }else if (Objects.equals(attendanceGroup.getAttendanceType(), StatusConstant.SHIFTSCHEDULE)) { + } else if (Objects.equals(attendanceGroup.getAttendanceType(), StatusConstant.SHIFTSCHEDULE)) { //3.2排班制 //将startDate作为第一天,endDate作为最后一天,循环判断当前日期是第几天,取出当前天数的班次信息。 @@ -163,7 +165,6 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS } - //根据cycleDay查询出当前日期的班次信息 AttendanceScheduleCycle cycle = scheduleCycleMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId).eq(AttendanceScheduleCycle::getDayNumber, cycleDay)); //将cycle存到vo中 @@ -260,84 +261,153 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS public TableDataInfo queryList(AttendanceArrangementBo bo) { LocalDate month = bo.getMonth().atEndOfMonth(); - // 1. 拿到日历的开始时间和结束时间 LocalDate calendarStartDate = month.withDayOfMonth(1); LocalDate calendarEndDate = month.withDayOfMonth(calendarStartDate.lengthOfMonth()); - // 2. 根据日历的开始时间和结束时间查询出每一天的排班信息 - // 2.1 循环日历的开始时间和结束时间,判断 calendarStartDate 在哪些排班中 - List result = new ArrayList<>(); + //使用mybatisplus的between查询在calendarStartDate和calendarEndDate之间的排班信息 + List startResult = baseMapper.selectVoList(Wrappers.lambdaQuery() + .between(AttendanceArrangement::getStartDate, calendarStartDate.atStartOfDay(ZoneId.systemDefault()).toInstant(), + calendarEndDate.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1))); + //查询结束时间在calendarStartDate和calendarEndDate之间的排班信息 + List endResult = baseMapper.selectList(Wrappers.lambdaQuery() + .between(AttendanceArrangement::getEndDate, calendarStartDate.atStartOfDay(ZoneId.systemDefault()).toInstant(), + calendarEndDate.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1))); - for (LocalDate date = calendarStartDate; date.isBefore(calendarEndDate); date = date.plusDays(1)) { - // 2.2 根据当前日期查询在开始时间和结束时间之间的排班信息 - //查询当前日期在哪些排班中,当前日期大于等于排班开始日期,小于等于排班结束日期 - // 查询指定日期在哪些排班中 - List arrangementList = baseMapper.selectList( - Wrappers.lambdaQuery() - .between(AttendanceArrangement::getStartDate, date.atStartOfDay(ZoneId.systemDefault()).toInstant(), - date.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1))); + //合并两个list,并去重 + List result = new ArrayList<>(startResult.stream().distinct().toList()); + result.addAll(endResult.stream().map(vo -> { + AttendanceArrangementVo newVo = MapstructUtils.convert(vo, AttendanceArrangementVo.class); + newVo.setStartDate(vo.getStartDate()); + newVo.setEndDate(vo.getEndDate()); + return newVo; + }).toList()); -// //根据arrangementList查询出排班的id -// List scheduleIdList = arrangementList.stream().map(AttendanceArrangement::getId).toList(); -// //根据排班的id查询出排班的人员详细信息 -// List userGroupList = userGroupMapper.selectList(Wrappers.lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList)); + //去掉result中id重复的排班信息 + result = result.stream().distinct().toList(); - - // 根据排班查询出考勤组id - List groupIds = arrangementList.stream() - .map(AttendanceArrangement::getGroupId) - .distinct() - .toList(); - - // 如果当前日期没有排班,则跳过当前日期 - if (groupIds.isEmpty()) { - continue; - } - - // 循环 groupIds,循环和 AttendanceGroup 中的 id 做对比,如果有相同的,则取出 attendanceGroup 中的所有数据 - for (Long groupId : groupIds) { - AttendanceGroup attendanceGroup = attendanceGroupMapper.selectById(groupId); - if (attendanceGroup != null) { - // 创建 AttendanceArrangementVo 对象并设置属性 - AttendanceArrangementVo vo = new AttendanceArrangementVo(); - vo.setStartDate(arrangementList.get(0).getStartDate()); - vo.setEndDate(arrangementList.get(0).getEndDate()); - - //获取到第一个排班的id - Long arrangementId = arrangementList.get(0).getId(); - //根据arrangementId查询出人员组的详细信息 - AttendanceGroup group = attendanceGroupMapper.selectById(arrangementId); - //将group存到vo中 - vo.setAttendanceGroup(group); - - //根据arrangementList查询出排班的id - List scheduleIdList = arrangementList.stream().map(AttendanceArrangement::getId).distinct().toList(); - //根据排班的id查询出排班的人员详细信息 - List userGroupList = userGroupMapper.selectList(Wrappers.lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList)); - - - //新建attendanceGroup对象,将排班信息和考勤组信息添加到vo中 - vo.setAttendanceGroup(attendanceGroup); - //将排班人员信息添加到排班信息中 - vo.setUserGroupList(userGroupList); - - result.add(vo); + //根据排班查询出考勤组id + List groupIds = result.stream().map(AttendanceArrangementVo::getGroupId).distinct().toList(); + // 循环 groupIds,循环和 AttendanceGroup 中的 id 做对比,如果有相同的,则取出 attendanceGroup 中的所有数据 + for (Long groupId : groupIds) { + AttendanceGroup attendanceGroup = attendanceGroupMapper.selectById(groupId); + if (attendanceGroup != null) { + // 循环排班列表,将排班信息和考勤组信息添加到vo中 + for (AttendanceArrangementVo vo : result) { + if (vo.getGroupId().equals(groupId)) { + vo.setAttendanceGroup(attendanceGroup); + } } } + } + + // 循环排班列表,查询排班人员信息 + for (AttendanceArrangementVo vo : result) { + // 根据排班查询出人员组的详细信息 + List userGroupList = userGroupMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceUserGroup::getScheduleId, vo.getId())); + // 将排班人员信息添加到排班信息中 + vo.setUserGroupList(userGroupList); } + +// LocalDate month = bo.getMonth().atEndOfMonth(); +// // 1. 拿到日历的开始时间和结束时间 +// LocalDate calendarStartDate = month.withDayOfMonth(1); +// LocalDate calendarEndDate = month.withDayOfMonth(calendarStartDate.lengthOfMonth()); +// +// // 2. 根据日历的开始时间和结束时间查询出每一天的排班信息 +// // 2.1 循环日历的开始时间和结束时间,判断 calendarStartDate 在哪些排班中 +// List result = new ArrayList<>(); +// +// +// //查询所有排班信息 +// List arrangementList1 = baseMapper.selectList(); +// //取出排班的开始时间和结束时间 +// List startDateList = arrangementList1.stream().map(AttendanceArrangement::getStartDate).toList(); +// List endDateList = arrangementList1.stream().map(AttendanceArrangement::getEndDate).toList(); +// +// int count = 0; +// +// for (LocalDate date = calendarStartDate; date.isBefore(calendarEndDate); date = date.plusDays(1)) { +// // 2.2 根据当前日期查询在开始时间和结束时间之间的排班信息 +// //查询当前日期在哪些排班中,当前日期大于等于排班开始日期,小于等于排班结束日期 +// +// if (count >= startDateList.size() || count >= endDateList.size()){ +// continue; +// } +// +// +// +//// // 查询指定日期在哪些排班中 +//// List arrangementList = baseMapper.selectList( +//// Wrappers.lambdaQuery() +//// .between(AttendanceArrangement::getStartDate, date.atStartOfDay(ZoneId.systemDefault()).toInstant(), +//// date.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1))); +// +// +// // 查询指定日期在哪些排班中 +// List arrangementList = baseMapper.selectList( +// Wrappers.lambdaQuery() +// .between(AttendanceArrangement::getStartDate, startDateList.get(count).atStartOfDay(ZoneId.systemDefault()).toInstant(), +// endDateList.get(count).atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1))); +// +// +// +// +//// //根据arrangementList查询出排班的id +//// List scheduleIdList = arrangementList.stream().map(AttendanceArrangement::getId).toList(); +//// //根据排班的id查询出排班的人员详细信息 +//// List userGroupList = userGroupMapper.selectList(Wrappers.lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList)); +// +// +// // 根据排班查询出考勤组id +// List groupIds = arrangementList.stream() +// .map(AttendanceArrangement::getGroupId) +// .distinct() +// .toList(); +// +// // 如果当前日期没有排班,则跳过当前日期 +// if (groupIds.isEmpty()) { +// count++; +// continue; +// } +// +// // 循环 groupIds,循环和 AttendanceGroup 中的 id 做对比,如果有相同的,则取出 attendanceGroup 中的所有数据 +// for (Long groupId : groupIds) { +// AttendanceGroup attendanceGroup = attendanceGroupMapper.selectById(groupId); +// if (attendanceGroup != null) { +// // 创建 AttendanceArrangementVo 对象并设置属性 +// AttendanceArrangementVo vo = new AttendanceArrangementVo(); +// vo.setId(arrangementList.get(0).getId()); +// vo.setStartDate(arrangementList.get(0).getStartDate()); +// vo.setEndDate(arrangementList.get(0).getEndDate()); +// +// //获取到第一个排班的id +// Long arrangementId = arrangementList.get(0).getId(); +// //根据arrangementId查询出人员组的详细信息 +// AttendanceGroup group = attendanceGroupMapper.selectById(arrangementId); +// //将group存到vo中 +// vo.setAttendanceGroup(group); +// +// //根据arrangementList查询出排班的id +// List scheduleIdList = arrangementList.stream().map(AttendanceArrangement::getId).distinct().toList(); +// //根据排班的id查询出排班的人员详细信息 +// List userGroupList = userGroupMapper.selectList(Wrappers.lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList)); +// +// +// //新建attendanceGroup对象,将排班信息和考勤组信息添加到vo中 +// vo.setAttendanceGroup(attendanceGroup); +// //将排班人员信息添加到排班信息中 +// vo.setUserGroupList(userGroupList); +// +// result.add(vo); +// } +// } +// +// count++; +// } return TableDataInfo.build(result); -// // 计算交集的开始时间(取较晚的开始时间)和结束时间(取较早的结束时间) -// Date overlapStart = calendarStartDate.after(startDate) -// ? calendarStartDate : startDate; -// Date overlapEnd = calendarEndTimeDate.before(endDate) -// ? calendarEndTimeDate : endDate; - - //根据交集的时间范围查询排班信息 - - } 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 index ed58c698..02ed3ce6 100644 --- 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 @@ -196,7 +196,7 @@ public class CapitalApplicationServiceImpl implements ICapitalApplicationService asset.setName(capitalInfo.getCapitalName()); asset.setSpecs(capitalInfo.getSpec()); asset.setSpecs(capitalInfo.getSpec()); - asset.setPrice(capitalInfo.getBuyUnitPrice().longValue()); + asset.setPrice(capitalInfo.getBuyUnitPrice()); asset.setSuppliersId(capitalApplication.getSupplier()); asset.setStorageTime(new Date()); asset.setType(0L); @@ -221,6 +221,7 @@ public class CapitalApplicationServiceImpl implements ICapitalApplicationService */ private void validEntityBeforeSave(CapitalApplication entity) { entity.setState("0"); + entity.setApplicationTime(new Date()); } /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/DepotLogServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/DepotLogServiceImpl.java index 90ec425a..35c9f725 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/DepotLogServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/DepotLogServiceImpl.java @@ -1,5 +1,7 @@ package org.dromara.property.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -9,6 +11,11 @@ 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.Asset; +import org.dromara.property.domain.Depot; +import org.dromara.property.mapper.AssetMapper; +import org.dromara.property.mapper.DepotMapper; +import org.dromara.system.api.RemoteUserService; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.DepotLogBo; import org.dromara.property.domain.vo.DepotLogVo; @@ -16,9 +23,8 @@ import org.dromara.property.domain.DepotLog; import org.dromara.property.mapper.DepotLogMapper; import org.dromara.property.service.IDepotLogService; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; +import java.util.stream.Collectors; /** * 仓库记录Service业务层处理 @@ -32,6 +38,9 @@ import java.util.Collection; public class DepotLogServiceImpl implements IDepotLogService { private final DepotLogMapper baseMapper; + private final AssetMapper assetsMapper; + private final DepotMapper depotMapper; + private final RemoteUserService remoteUserService; /** * 查询仓库记录 @@ -40,8 +49,10 @@ public class DepotLogServiceImpl implements IDepotLogService { * @return 仓库记录 */ @Override - public DepotLogVo queryById(Long id){ - return baseMapper.selectVoById(id); + public DepotLogVo queryById(Long id) { + DepotLogVo depotLogVo = baseMapper.selectVoById(id); + handleData(depotLogVo,null,null,null); + return depotLogVo; } /** @@ -55,6 +66,41 @@ public class DepotLogServiceImpl implements IDepotLogService { public TableDataInfo queryPageList(DepotLogBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + // 收集用户ID用于批量查询用户名 + Set userIds = new HashSet<>(); + Set assetIds = new HashSet<>(); + Set depotIds = new HashSet<>(); + result.getRecords().forEach(r -> { + if (r.getUserId() != null) { + userIds.add(r.getUserId()); + } + if (ObjectUtil.isNotEmpty(r.getAssetId())) { + assetIds.add(r.getAssetId()); + } + if (ObjectUtil.isNotEmpty(r.getDepotId())) { + depotIds.add(r.getDepotId()); + } + }); + + // 批量获取用户名 + Map userNamesByIds = remoteUserService.selectUserNamesByIds(new ArrayList<>(userIds)); + //批量获取资产名 + Map assetNamesByIds = assetsMapper.selectList( + new LambdaQueryWrapper() + .select(Asset::getId, Asset::getName) + .in(Asset::getId, assetIds) + ).stream() + .collect(Collectors.toMap(Asset::getId, Asset::getName)); + //批量获取厂库名 + Map depotNamesByIds = depotMapper.selectList( + new LambdaQueryWrapper() + .select(Depot::getId, Depot::getDepotName) + .in(Depot::getId, depotIds) + ).stream() + .collect(Collectors.toMap(Depot::getId, Depot::getDepotName)); + result.getRecords().stream().forEach(s -> { + handleData(s, userNamesByIds, assetNamesByIds, depotNamesByIds); + }); return TableDataInfo.build(result); } @@ -87,6 +133,33 @@ public class DepotLogServiceImpl implements IDepotLogService { return lqw; } + /** + * 处理数据 + */ + private void handleData(DepotLogVo depotLogVo, Map userNamesByIds, Map assetNamesByIds, Map depotNamesByIds) { + //批量获取资产名 + if(CollUtil.isEmpty(assetNamesByIds)){ + assetNamesByIds = assetsMapper.selectList( + new LambdaQueryWrapper() + .select(Asset::getId, Asset::getName) + ).stream() + .collect(Collectors.toMap(Asset::getId, Asset::getName)); + } + + //批量获取厂库名 + if(CollUtil.isEmpty(depotNamesByIds)){ + depotNamesByIds = depotMapper.selectList( + new LambdaQueryWrapper() + .select(Depot::getId, Depot::getDepotName) + ).stream() + .collect(Collectors.toMap(Depot::getId, Depot::getDepotName)); + } + + depotLogVo.setAssetName(CollUtil.isNotEmpty(assetNamesByIds)?assetNamesByIds.get(depotLogVo.getAssetId()):null); + depotLogVo.setDepotName(CollUtil.isNotEmpty(depotNamesByIds)?depotNamesByIds.get(depotLogVo.getDepotName()):null); + depotLogVo.setUserName(CollUtil.isNotEmpty(userNamesByIds)?userNamesByIds.get(depotLogVo.getUserId()):remoteUserService.selectNicknameById(depotLogVo.getUserId())); + } + /** * 新增仓库记录 * @@ -120,7 +193,7 @@ public class DepotLogServiceImpl implements IDepotLogService { /** * 保存前的数据校验 */ - private void validEntityBeforeSave(DepotLog entity){ + private void validEntityBeforeSave(DepotLog entity) { //TODO 做一些数据校验,如唯一约束 } @@ -133,7 +206,7 @@ public class DepotLogServiceImpl implements IDepotLogService { */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionRouteServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionRouteServiceImpl.java index 7a4e1dbf..70fb07b3 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionRouteServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionRouteServiceImpl.java @@ -10,9 +10,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.property.domain.InspectionRoute; +import org.dromara.property.domain.InspectionRoutePoint; import org.dromara.property.domain.bo.InspectionRouteBo; import org.dromara.property.domain.vo.InspectionRouteVo; import org.dromara.property.mapper.InspectionRouteMapper; +import org.dromara.property.mapper.InspectionRoutePointMapper; import org.dromara.property.service.IInspectionRouteService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -20,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * 巡检路线Service业务层处理 @@ -33,6 +36,7 @@ import java.util.Collection; public class InspectionRouteServiceImpl implements IInspectionRouteService { private final InspectionRouteMapper baseMapper; + private final InspectionRoutePointMapper routePointMapper; /** * 查询巡检路线 @@ -94,6 +98,14 @@ public class InspectionRouteServiceImpl implements IInspectionRouteService { boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); + List routePointList = bo.getInspectionRoutePointBoList().stream() + .map(pointBo -> { + InspectionRoutePoint point = MapstructUtils.convert(pointBo, InspectionRoutePoint.class); + point.setRouteId(add.getId()); + return point; + }) + .collect(Collectors.toList()); + routePointMapper.insertBatch(routePointList); } return flag; } 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 80b47600..17bd272f 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 @@ -174,6 +174,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { lqw.eq(bo.getCompleTime() != null, ServiceWorkOrders::getCompleTime, bo.getCompleTime()); lqw.eq(Objects.nonNull(bo.getServiceEvalua()), ServiceWorkOrders::getServiceEvalua, bo.getServiceEvalua()); lqw.eq(Objects.nonNull(bo.getType()), ServiceWorkOrders::getType, bo.getType()); + lqw.eq(StringUtils.isNotBlank(bo.getProcessingWeight()), ServiceWorkOrders::getProcessingWeight, bo.getProcessingWeight()); lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), ServiceWorkOrders::getSearchValue, bo.getSearchValue()); return lqw; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java index ca7db910..4256baea 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java @@ -18,6 +18,7 @@ import org.dromara.property.service.IServiceWorkOrdersTypeService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; @@ -138,4 +139,35 @@ public class ServiceWorkOrdersTypeServiceImpl implements IServiceWorkOrdersTypeS } return baseMapper.deleteByIds(ids) > 0; } + + /** + * 查询【工单类型】树结构 + * @return 工单类型树结构 + */ + @Override + public List typeTree() { + List list = baseMapper.selectVoList(); + return buildTree(list,null); + } + + + /** + * 递归构建树结构 + * @param types 所有类型列表 + * @param parentId 父节点id + * @return 树结构列表 + */ + public static List buildTree(List types, Long parentId) { + List tree = new ArrayList<>(); + for (ServiceWorkOrdersTypeVo type : types) { + Long currentParentId = type.getParentId(); + if ((parentId == null && currentParentId == null) || + (parentId != null && parentId.equals(currentParentId))) { + List children = buildTree(types, type.getId()); + type.getChildren().addAll(children); + tree.add(type); + } + } + return tree; + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbVisitorManagementServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbVisitorManagementServiceImpl.java index d77f73d0..da2e3a85 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbVisitorManagementServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbVisitorManagementServiceImpl.java @@ -93,7 +93,7 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi } /** - * 新增访客管理 + * 小程序新增访客管理 * * @param bo 访客管理 * @return 是否新增成功 @@ -111,6 +111,26 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi return flag; } + + /** + * pc端新增访客管理 + * + * @param bo 访客管理 + * @return 是否新增成功 + */ + @Override + public Boolean insertVistorManagementByBo(TbVisitorManagementBo bo) { +// QrCodeInfo info = RedisUtils.getCacheObject("Qrcode" + bo.getQrCodeId()); + TbVisitorManagement add = MapstructUtils.convert(bo, TbVisitorManagement.class); + validEntityBeforeSave(add); +// add.setCreateById(info.getUserid()); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + /** * 修改访客管理 * diff --git a/ruoyi-modules/Sis/pom.xml b/ruoyi-modules/Sis/pom.xml index 0152e6d0..5985c62c 100644 --- a/ruoyi-modules/Sis/pom.xml +++ b/ruoyi-modules/Sis/pom.xml @@ -118,6 +118,11 @@ 2.4.0 + + org.apache.rocketmq + rocketmq-spring-boot-starter + + com.hik examples diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/consumer/CleanLiftAuthRocketConsumer.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/consumer/CleanLiftAuthRocketConsumer.java new file mode 100644 index 00000000..b2e9323a --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/consumer/CleanLiftAuthRocketConsumer.java @@ -0,0 +1,60 @@ +package org.dromara.sis.consumer; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.common.message.MessageExt; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.dromara.sis.domain.vo.SisElevatorFloorRefVo; +import org.dromara.sis.domain.vo.SisElevatorInfoVo; +import org.dromara.sis.sdk.hik.HikApiService; +import org.dromara.sis.service.ISisElevatorFloorRefService; +import org.dromara.sis.service.ISisElevatorInfoService; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Objects; + +/** + * @author lsm + * @apiNote CleanLiftAuthRocketConsumer + * @since 2025/8/5 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@RocketMQMessageListener(topic = "lift-topic", consumerGroup = "lift-consumer-group") +public class CleanLiftAuthRocketConsumer implements RocketMQListener { + + private final ISisElevatorInfoService sisElevatorInfoService; + private final ISisElevatorFloorRefService sisElevatorFloorRefService; + + @Override + public void onMessage(MessageExt ext) { + log.info("【消费者】接收消息:消息体 => {}", new String(ext.getBody())); + + Long deviceId = Long.parseLong(ext.getUserProperty("deviceId")); + Long groupId = Long.parseLong(ext.getUserProperty("groupId")); + Long deviceFloorId = Long.parseLong(ext.getUserProperty("deviceFloorId")); + + // 获取当前电梯信息 + SisElevatorInfoVo ele = sisElevatorInfoService.queryById(deviceId); + + // 获取权限组下电梯⇄楼层关联信息 + List groupRef = sisElevatorFloorRefService.queryByAuthGroupId(groupId); + + // 取出当前电梯的楼层授权信息 + List eleRef = groupRef.stream().filter(o -> Objects.equals(o.getElevatorId(), deviceId)).toList(); + + for (SisElevatorFloorRefVo ref : eleRef){ + if (ref.getOutChannel() != null && Objects.equals(ref.getFloorId(), deviceFloorId)){ + HikApiService.getInstance().controlGateway(ele.getControlIp(), ref.getOutChannel().intValue(), 3); + } + + if (ref.getInChannel() != null && Objects.equals(ref.getFloorId(), deviceFloorId)){ + HikApiService.getInstance().controlGateway(ele.getControlIp(), ref.getInChannel().intValue(), 3); + } + } + log.info("梯控清除权限完成"); + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlController.java index c0c34452..54c80725 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlController.java @@ -18,6 +18,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; import org.dromara.sis.domain.bo.SisAccessControlBo; import org.dromara.sis.domain.vo.SisAccessControlVo; +import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq; import org.dromara.sis.service.ISisAccessControlService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -126,4 +127,16 @@ public class SisAccessControlController extends BaseController { return R.ok(sisAccessControlService.syncE8()); } + + /** + * 远程开门 + * + * @param req 远程开门参数 + */ + @PostMapping("/e8/remoteOpenDoor") + public R remoteOpenDoor(@RequestBody RemoteOpenDoorReq req) { + return R.ok(sisAccessControlService.remoteOpenDoor(req)); + } + + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisElevatorInfoController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisElevatorInfoController.java index b4ab49e0..29a53596 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisElevatorInfoController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisElevatorInfoController.java @@ -6,9 +6,6 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; -import org.dromara.sis.domain.bo.SisElevatorFloorRefBo; -import org.dromara.sis.domain.vo.SisElevatorFloorRefVo; -import org.dromara.sis.service.ISisElevatorFloorRefService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -40,8 +37,6 @@ public class SisElevatorInfoController extends BaseController { private final ISisElevatorInfoService sisElevatorInfoService; - private final ISisElevatorFloorRefService sisElevatorFloorRefService; - /** * 查询电梯基本信息列表 */ @@ -108,26 +103,4 @@ public class SisElevatorInfoController extends BaseController { @PathVariable("elevatorIds") Long[] elevatorIds) { return toAjax(sisElevatorInfoService.deleteWithValidByIds(List.of(elevatorIds), true)); } - - /** - * 新增电梯⇄楼层关联 - * - * @param bo 电梯⇄楼层关联 - */ - @RepeatSubmit() - @PostMapping("/ref/add") - public R addRef(@Validated(AddGroup.class) @RequestBody SisElevatorFloorRefBo bo) { - return toAjax(sisElevatorFloorRefService.insertByBo(bo)); - } - - /** - * 查询电梯⇄楼层关联 - * - * @param id 电梯id - */ - @GetMapping("/ref/{id}") - public R> queryRef(@NotNull(message = "电梯id不能为空") - @PathVariable("id") Long id) { - return R.ok(sisElevatorFloorRefService.queryByAuthGroupId(id)); - } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceBindRef.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceBindRef.java index 1f7dcd53..dff03c38 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceBindRef.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceBindRef.java @@ -45,5 +45,9 @@ public class SisDeviceBindRef extends TenantEntity { */ private Integer controlType; + /** + * 楼层id + */ + private Long deviceFloorId; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java index e18bbf54..38fd0d3c 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java @@ -80,4 +80,9 @@ public class SisDeviceManage extends BaseEntity { private String tenantId; + /** + * 楼层id + */ + private Long floorId; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceBindRefBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceBindRefBo.java index 8bb20811..ea6fb647 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceBindRefBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceBindRefBo.java @@ -46,5 +46,8 @@ public class SisDeviceBindRefBo extends BaseEntity { @NotNull(message = "控制类型(1:门禁,2:电梯呼梯,3:电梯梯控不能为空", groups = { AddGroup.class, EditGroup.class }) private Integer controlType; - + /** + * 楼层id + */ + private Long deviceFloorId; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceManageBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceManageBo.java index 75f6be27..81662907 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceManageBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceManageBo.java @@ -62,6 +62,12 @@ public class SisDeviceManageBo extends BaseEntity { @NotBlank(message = "设备密码不能为空", groups = {AddGroup.class, EditGroup.class}) private String devicePwd; + /** + * 楼层id + */ + @NotNull(message = "楼层id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long floorId; + /** * 设备类型 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthGroupVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthGroupVo.java index 3f57f152..2e16205c 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthGroupVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthGroupVo.java @@ -10,6 +10,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.util.Collection; import java.util.Date; @@ -18,7 +19,7 @@ import java.util.Date; * 授权组视图对象 sis_auth_group * * @author lsm - * @date 2025-07-23 + * @since 2025-07-23 */ @Data @ExcelIgnoreUnannotated @@ -52,5 +53,19 @@ public class SisAuthGroupVo implements Serializable { @ExcelProperty(value = "是否启用(0:禁用,1启用)") private Boolean isEnable; + /** + * 门禁id + */ + private Collection acIds; + + /** + * 电梯 + */ + private Collection eleIds; + + /** + * 门禁id + */ + private Collection floorIds; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceBindRefVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceBindRefVo.java index 02a76655..9c5a13e6 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceBindRefVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceBindRefVo.java @@ -53,6 +53,9 @@ public class SisDeviceBindRefVo implements Serializable { @ExcelProperty(value = "控制类型(1:门禁,2:电梯呼梯,3:电梯梯控") private Integer controlType; - + /** + * 楼层id + */ + private Long deviceFloorId; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java index 0e0249d4..0c56837a 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java @@ -77,6 +77,11 @@ public class SisDeviceManageVo implements Serializable { @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "deviceType", other = "sis_ipc_device_type") private Integer deviceTypeName; + /** + * 楼层id + */ + private Long floorId; + /** * 设备厂商编号 */ @@ -90,5 +95,4 @@ public class SisDeviceManageVo implements Serializable { private Long groupId; private String groupName; - } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorFloorRefVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorFloorRefVo.java index 0ebdd583..6ba04fae 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorFloorRefVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorFloorRefVo.java @@ -50,5 +50,14 @@ public class SisElevatorFloorRefVo implements Serializable { @ExcelProperty(value = "授权组id") private Long authGroupId; + /** + * 内部通道号 + */ + private Long inChannel; + + /** + * 外部通道号 + */ + private Long outChannel; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemotePrecautionaryImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemotePrecautionaryImpl.java deleted file mode 100644 index 40fe52f6..00000000 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemotePrecautionaryImpl.java +++ /dev/null @@ -1,35 +0,0 @@ -//package org.dromara.sis.dubbo; -// -//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -//import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -//import lombok.RequiredArgsConstructor; -//import lombok.extern.slf4j.Slf4j; -//import org.apache.dubbo.config.annotation.DubboService; -//import org.dromara.sis.api.RemotePrecautionary; -//import org.dromara.sis.api.domain.RemotePrecautionaryVo; -// -//import java.util.List; -//import java.util.Map; -//import java.util.stream.Stream; -// -//@Slf4j -//@DubboService -//@RequiredArgsConstructor -//public class RemotePrecautionaryImpl implements RemotePrecautionary { -// private final PrecautionaryMapper precautionaryMapper; -// -// @Override -// public List getList() { -// Page Page = new Page<>(1, 10); -// QueryWrapper wrapper = new QueryWrapper<>(); -// wrapper.orderByAsc("time"); -// return precautionaryMapper.selectVoPage(Page, wrapper); -// } -// -// @Override -// public Map count() { -// List precautionaries = precautionaryMapper.selectList(); -// Stream longStream = precautionaries.stream().map(Precautionary::getType); -// return Map.of(); -// } -//} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAccessControlMapper.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAccessControlMapper.java index 6a593fd7..226224b8 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAccessControlMapper.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAccessControlMapper.java @@ -1,5 +1,6 @@ package org.dromara.sis.mapper; +import org.apache.ibatis.annotations.Mapper; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.sis.domain.SisAccessControl; import org.dromara.sis.domain.vo.SisAccessControlVo; @@ -8,8 +9,9 @@ import org.dromara.sis.domain.vo.SisAccessControlVo; * 门禁设备Mapper接口 * * @author lxj - * @date 2025-06-25 + * @since 2025-06-25 */ +@Mapper public interface SisAccessControlMapper extends BaseMapperPlus { SisAccessControlVo queryById(Long id); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/producer/CleanLiftAuthRocketProducer.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/producer/CleanLiftAuthRocketProducer.java new file mode 100644 index 00000000..aafcf234 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/producer/CleanLiftAuthRocketProducer.java @@ -0,0 +1,39 @@ +package org.dromara.sis.producer; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.common.message.Message; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * @author lsm + * @apiNote CleanLiftAuthRocketProducer + * @since 2025/8/5 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CleanLiftAuthRocketProducer { + + @Resource + private RocketMQTemplate rocketMQTemplate; + + public void sendMessage(Long deviceId, Long groupId, Long deviceFloorId, String info, Integer lay) { + // 发送延迟消息 + // RocketMQ预定义了一些延迟等级,每个等级对应不同的延迟时间范围。这些等级从1到18,分别对应1s、5s、10s、30s、1m、2m、3m、4m、5m、6m、7m、8m、9m、10m、20m、30m、1h、2h的延迟时间。 + org.apache.rocketmq.common.message.Message msg = new Message("lift-topic", "lift-tag", info.getBytes()); + msg.putUserProperty("deviceId", deviceId.toString()); + msg.putUserProperty("groupId", groupId.toString()); + msg.putUserProperty("deviceFloorId", deviceFloorId.toString()); + msg.setDelayTimeLevel(lay); + try { + rocketMQTemplate.getProducer().send(msg); + log.info("发送RocketMQ消息成功"); + } catch (Exception e) { + log.error("发送RocketMQ消息失败", e); + } + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/accessControl/req/RemoteOpenDoorReq.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/accessControl/req/RemoteOpenDoorReq.java index c4b98512..8262a131 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/accessControl/req/RemoteOpenDoorReq.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/accessControl/req/RemoteOpenDoorReq.java @@ -2,6 +2,7 @@ package org.dromara.sis.sdk.e8.domain.accessControl.req; import lombok.Data; +import java.util.Collection; import java.util.List; /** @@ -27,6 +28,11 @@ public class RemoteOpenDoorReq { */ private Long operatorId; + /** + * 门禁IDs + */ + private Collection acIds; + /** * 门操作数据 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java index d9bdb48b..acc08a0d 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java @@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.sis.domain.bo.SisAccessControlBo; import org.dromara.sis.domain.vo.SisAccessControlVo; +import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq; import java.util.Collection; import java.util.List; @@ -78,7 +79,7 @@ public interface ISisAccessControlService { /** * 查询门禁树 * - * @return + * @return 树 */ List> queryAcTree(); @@ -89,4 +90,11 @@ public interface ISisAccessControlService { */ Boolean syncE8(); + /** + * 远程开门 + * + * @param req 远程开门参数 + */ + Boolean remoteOpenDoor(RemoteOpenDoorReq req); + } 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 c6cbd785..57c1f40e 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 @@ -79,7 +79,7 @@ public interface ISisAuthGroupRefService { /** * 通过权限组id,删除授权设备列表 * - * @param groupId 权限id + * @param groupIds 权限id */ - Boolean deleteByGroupId(Long groupId); + Boolean deleteByGroupId(Collection groupIds); } 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 bff61495..5c7b032a 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 @@ -109,9 +109,17 @@ public interface ISisAuthRecordService { /** * 批量删除授权记录 * - * @param ids 入驻员工ids + * @param ids 入驻员工ids * @param e8Ids e8id */ Boolean deleteByPersonIds(Collection ids, Collection e8Ids); + /** + * 根据权限组ID,查询授权记录 + * + * @param groupIds 权限组ID + */ + Boolean queryByGroupIds(Collection groupIds); + + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorChannelRefService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorChannelRefService.java index 4037e412..c48676bb 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorChannelRefService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorChannelRefService.java @@ -75,4 +75,12 @@ public interface ISisElevatorFloorChannelRefService { * @return 是否添加成功 */ Boolean batchInsert(Long elevatorId, Collection bo); + + + /** + * 通过楼层id,查询通道信息 + * + * @param floorIds 楼层ids + */ + List queryByFloorIds(Collection floorIds); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java index 69b4ff9d..cad946f1 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java @@ -74,6 +74,13 @@ public interface ISisElevatorFloorRefService { */ List queryByAuthGroupId(Long authGroupId); + /** + * 根据权限组id,删除电梯⇄楼层关联信息 + * + * @param authGroupIds 权限组ids + */ + Boolean deleteByAuthGroupId(Collection authGroupIds); + /** * 批量更新电梯⇄楼层通道关联信息 * diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java index 5fb53a84..01b6f66d 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java @@ -26,6 +26,7 @@ import org.dromara.sis.domain.vo.SisAccessControlVo; import org.dromara.sis.domain.vo.SisDeviceManageVo; import org.dromara.sis.mapper.SisAccessControlMapper; import org.dromara.sis.sdk.e8.E8PlatformApi; +import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq; import org.dromara.sis.sdk.e8.domain.door.res.AuthDoorDeviceFindRes; import org.dromara.sis.service.ISisAcDeviceRefService; import org.dromara.sis.service.ISisAccessControlService; @@ -149,6 +150,7 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { SisDeviceBindRef sisDeviceBindRef = new SisDeviceBindRef(); sisDeviceBindRef.setDeviceId(sisDeviceManageVo.getId()); sisDeviceBindRef.setDeviceIp(sisDeviceManageVo.getDeviceIp()); + sisDeviceBindRef.setDeviceFloorId(sisDeviceManageVo.getFloorId()); sisDeviceBindRef.setBindId(bo.getId()); sisDeviceBindRef.setControlType(ControlTypeEnum.ACCESS_CONTROL.getCode()); // 删除绑定关系 @@ -281,4 +283,24 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { } return baseMapper.insertBatch(sisACBos); } + + /** + * 远程开门 + * + * @param req 远程开门参数 + */ + @Override + public Boolean remoteOpenDoor(RemoteOpenDoorReq req) { + List vo = baseMapper.selectVoByIds(req.getAcIds()); + + List list = new ArrayList<>(); + for (SisAccessControlVo item : vo) { + RemoteOpenDoorReq.ControlData data = new RemoteOpenDoorReq.ControlData(); + data.setDoorId(Long.parseLong(item.getOutDoorCode())); + data.setDeviceId(Long.parseLong(item.getOutCode())); + list.add(data); + } + req.setControlList(list); + return e8PlatformApi.remoteOpenDoor(req); + } } 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 26a12b6b..605a381f 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,5 +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; @@ -32,7 +33,7 @@ import java.util.Collection; * 权限组⇄设备关联Service业务层处理 * * @author lsm - * @date 2025-07-23 + * @since 2025-07-23 */ @Slf4j @Service @@ -107,10 +108,7 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService { @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(Long authGroupId, Collection acIds, Collection eleIds, Collection floorIds) { // 删除权限组⇄设备关联关系 - this.deleteByGroupId(authGroupId); - - // 电梯设备 - List eleVoList = elevatorInfoService.queryListByIds(eleIds); + this.deleteByGroupId(List.of(authGroupId)); log.info("开始写入授权组门禁,acIds:{}", acIds); boolean check = false; @@ -124,30 +122,34 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService { } 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, "写入授权组电梯失败!"); + if (CollUtil.isNotEmpty(eleIds)) { + // 电梯设备 + List eleVoList = elevatorInfoService.queryListByIds(eleIds); - log.info("开始写入授权组电梯楼层,floorIds:{}", floorIds); - // 获取该电梯所在单元的楼层信息 - List floorVoList = remoteFloorService.queryByBuildingId(ele.getBuildingId()); - // 该单元所有楼层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("开始写入授权组电梯,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.queryByBuildingId(ele.getBuildingId()); + // 该单元所有楼层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("写入授权组电梯完成"); } - log.info("写入授权组电梯完成"); - return check; } @@ -201,12 +203,13 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService { /** * 通过权限组id,删除授权设备列表 * - * @param groupId 权限id + * @param groupIds 权限id */ @Override - public Boolean deleteByGroupId(Long groupId) { + @Transactional(rollbackFor = Exception.class) + public Boolean deleteByGroupId(Collection groupIds) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(SisAuthGroupRef::getAuthGroupId, groupId); + lqw.in(SisAuthGroupRef::getAuthGroupId, groupIds); 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 0d5b3640..880cd7b0 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 @@ -10,6 +10,9 @@ 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.sis.domain.SisElevatorFloorRef; +import org.dromara.sis.domain.vo.SisAuthGroupRefVo; +import org.dromara.sis.domain.vo.SisElevatorFloorRefVo; import org.dromara.sis.service.*; import org.springframework.stereotype.Service; import org.dromara.sis.domain.bo.SisAuthGroupBo; @@ -35,8 +38,9 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService { private final SisAuthGroupMapper baseMapper; + private final ISisAuthRecordService sisAuthRecordService; private final ISisAuthGroupRefService sisAuthGroupRefService; - + private final ISisElevatorFloorRefService sisElevatorFloorRefService; /** @@ -47,7 +51,21 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService { */ @Override public SisAuthGroupVo queryById(Long id) { - return baseMapper.selectVoById(id); + + // 门禁设备 + List groupRefs = sisAuthGroupRefService.queryListByGroupId(id); + Collection acIds = groupRefs.stream().filter(vo -> vo.getDeviceType() == 1).map(SisAuthGroupRefVo::getDeviceId).toList(); + + // 楼层 + List floorRefs = sisElevatorFloorRefService.queryByAuthGroupId(id); + Collection floorIds = floorRefs.stream().map(SisElevatorFloorRefVo::getFloorId).toList(); + + SisAuthGroupVo vo = baseMapper.selectVoById(id); + + vo.setAcIds(acIds); + vo.setFloorIds(floorIds); + + return vo; } /** @@ -122,6 +140,7 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService { Assert.isTrue(flag, "修改授权组失败"); if (flag) { + assert update != null; flag = sisAuthGroupRefService.insertByBo(update.getId(), bo.getAcIds(), bo.getEleIds(), bo.getFloorIds()); } @@ -143,10 +162,25 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService { * @return 是否删除成功 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 + boolean auth = sisAuthRecordService.queryByGroupIds(ids); + Assert.isTrue(!auth, "授权组已分配"); } - return baseMapper.deleteByIds(ids) > 0; + + boolean flag = baseMapper.deleteByIds(ids) > 0; + Assert.isTrue(flag, "删除授权组失败"); + + if (flag) { + // 删除授权组⇄授权设备关联表 + Boolean ref = sisAuthGroupRefService.deleteByGroupId(ids); + Assert.isTrue(ref, "删除授权组⇄授权设备失败"); + + // 删除授权组⇄电梯⇄楼层 + Boolean floor = sisElevatorFloorRefService.deleteByAuthGroupId(ids); + Assert.isTrue(floor, "删除授权组⇄电梯⇄楼层失败"); + } + return flag; } } 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 64a95406..5a25d307 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 @@ -320,6 +320,10 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { */ @Override public SisAuthRecordVo checkAuth(Long personId) { + List authVoList = baseMapper.checkAuth(personId); + if (CollUtil.isEmpty(authVoList)) { + return null; + } return baseMapper.checkAuth(personId).get(0); } @@ -371,4 +375,17 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { } return flag; } + + /** + * 根据权限组ID,查询授权记录 + * + * @param groupIds 权限组IDs + */ + @Override + public Boolean queryByGroupIds(Collection groupIds){ + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.in(SisAuthRecord::getGroupId, groupIds); + List authVoList = baseMapper.selectVoList(lqw); + return CollUtil.isNotEmpty(authVoList); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java index 86973097..2562c7fe 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java @@ -50,7 +50,11 @@ public class SisDeviceManageServiceImpl implements ISisDeviceManageService { */ @Override public SisDeviceManageVo queryById(Long id) { - return baseMapper.selectVoById(id); + SisDeviceManageVo deviceManageVo = baseMapper.selectVoById(id); + + log.info("查询设备管理:{}", deviceManageVo); + + return deviceManageVo; } /** diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorChannelRefServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorChannelRefServiceImpl.java index f8b96df8..fd80aa26 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorChannelRefServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorChannelRefServiceImpl.java @@ -2,7 +2,6 @@ package org.dromara.sis.service.impl; import cn.hutool.core.lang.Assert; import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -26,7 +25,7 @@ import java.util.Collection; * 电梯⇄楼层⇄通道关联Service业务层处理 * * @author lsm - * @date 2025-08-04 + * @since 2025-08-04 */ @Slf4j @RequiredArgsConstructor @@ -155,4 +154,16 @@ public class SisElevatorFloorChannelRefServiceImpl implements ISisElevatorFloorC Assert.isTrue(flag, "批量增加电梯⇄楼层⇄通道关联信息失败"); return flag; } + + /** + * 通过楼层id,查询通道信息 + * + * @param floorIds 楼层ids + */ + @Override + public List queryByFloorIds(Collection floorIds){ + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.in(SisElevatorFloorChannelRef::getFloorId, floorIds); + return baseMapper.selectVoList(lqw); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java index 43e932e0..3020dc70 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java @@ -10,6 +10,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.sis.domain.SisElevatorFloorChannelRef; +import org.dromara.sis.domain.vo.SisElevatorFloorChannelRefVo; +import org.dromara.sis.service.ISisElevatorFloorChannelRefService; import org.springframework.stereotype.Service; import org.dromara.sis.domain.bo.SisElevatorFloorRefBo; import org.dromara.sis.domain.vo.SisElevatorFloorRefVo; @@ -18,9 +20,12 @@ import org.dromara.sis.mapper.SisElevatorFloorRefMapper; import org.dromara.sis.service.ISisElevatorFloorRefService; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 电梯⇄楼层关联Service业务层处理 @@ -34,6 +39,7 @@ import java.util.Collection; public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefService { private final SisElevatorFloorRefMapper baseMapper; + private final ISisElevatorFloorChannelRefService sisElevatorFloorChannelRefService; /** * 查询电梯⇄楼层关联 @@ -94,15 +100,33 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi Collection ids = list.stream().map(SisElevatorFloorRefVo::getId).toList(); baseMapper.deleteByIds(ids); - boolean flag = false; - for (Long num : bo.getFloorIds()){ + // 通道关系 + List channelInfo = sisElevatorFloorChannelRefService.queryByFloorIds(bo.getFloorIds()); + + // 创建Map提高查找效率,避免在循环中重复流操作 + Map channelInfoMap = channelInfo.stream() + .collect(Collectors.toMap(SisElevatorFloorChannelRefVo::getFloorId, Function.identity())); + + List refInfo = new ArrayList<>(); + + for (Long num : bo.getFloorIds()) { SisElevatorFloorRef add = new SisElevatorFloorRef(); add.setFloorId(num); add.setAuthGroupId(bo.getAuthGroupId()); add.setElevatorId(bo.getElevatorId()); - flag = baseMapper.insert(add) > 0; - Assert.isTrue(flag, "新增电梯⇄楼层关联关系失败"); + + // 存在通道关系同时写入 + SisElevatorFloorChannelRefVo channelRef = channelInfoMap.get(num); + if (channelRef != null) { + add.setOutChannel(channelRef.getOutChannel()); + add.setInChannel(channelRef.getInChannel()); + } + + refInfo.add(add); } + + boolean flag = baseMapper.insertBatch(refInfo); + Assert.isTrue(flag, "电梯楼层关联关系写入失败!"); return flag; } @@ -142,34 +166,53 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi } /** - * 根据电梯id,获取电梯⇄楼层关联信息 + * 根据权限组id,获取电梯⇄楼层关联信息 * * @param authGroupId 电梯id */ @Override public List queryByAuthGroupId(Long authGroupId) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(SisElevatorFloorRef::getElevatorId, authGroupId); + lqw.eq(SisElevatorFloorRef::getAuthGroupId, authGroupId); return baseMapper.selectVoList(lqw); } + /** + * 根据权限组id,删除电梯⇄楼层关联信息 + * + * @param authGroupIds 权限组ids + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean deleteByAuthGroupId(Collection authGroupIds) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.in(SisElevatorFloorRef::getAuthGroupId, authGroupIds); + return baseMapper.delete(lqw) > 0; + } + /** * 批量更新电梯⇄楼层通道关联信息 * - * @param info 通道信息 + * @param info 通道信息 */ @Override - public Boolean batchUpdateChannel(Collection info){ + public Boolean batchUpdateChannel(Collection info) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.in(SisElevatorFloorRef::getFloorId, info.stream().map(SisElevatorFloorChannelRef::getFloorId).toList()); List list = baseMapper.selectList(lqw); + // 创建Map提高查找效率,避免在循环中重复流操作 + Map floorInfoMap = info.stream() + .collect(Collectors.toMap(SisElevatorFloorChannelRef::getFloorId, Function.identity())); - for (SisElevatorFloorRef item : list){ - item.setInChannel(info.stream().filter(x -> x.getFloorId().equals(item.getFloorId())).findFirst().get().getInChannel()); + for (SisElevatorFloorRef item : list) { + SisElevatorFloorChannelRef floorInfo = floorInfoMap.get(item.getFloorId()); + if (floorInfo != null) { + item.setInChannel(floorInfo.getInChannel()); + item.setOutChannel(floorInfo.getOutChannel()); + } } - return false; - + return baseMapper.updateBatchById(list); } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java index 08819ef0..b0c5aa14 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java @@ -20,12 +20,10 @@ import org.dromara.sis.domain.SisElevatorFloorChannelRef; import org.dromara.sis.domain.SisElevatorInfo; import org.dromara.sis.domain.bo.SisElevatorInfoBo; import org.dromara.sis.domain.enums.ControlTypeEnum; +import org.dromara.sis.domain.vo.SisDeviceManageVo; import org.dromara.sis.domain.vo.SisElevatorInfoVo; import org.dromara.sis.mapper.SisElevatorInfoMapper; -import org.dromara.sis.service.ISisDeviceBindRefService; -import org.dromara.sis.service.ISisElevatorFloorChannelRefService; -import org.dromara.sis.service.ISisElevatorFloorRefService; -import org.dromara.sis.service.ISisElevatorInfoService; +import org.dromara.sis.service.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -45,6 +43,7 @@ import static org.dromara.common.core.constant.CodePrefixConstants.ELEVATOR_CONT public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService { private final SisElevatorInfoMapper baseMapper; + private final ISisDeviceManageService deviceManageService; private final ISisDeviceBindRefService deviceBindRefService; private final ISisElevatorFloorRefService elevatorFloorRefService; private final ISisElevatorFloorChannelRefService elevatorFloorChannelRefService; @@ -201,20 +200,26 @@ public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService { List ls = new ArrayList<>(); // 梯控 if (bo.getElevatorControlDeviceId() != null) { + SisDeviceManageVo vo = deviceManageService.queryById(bo.getElevatorControlDeviceId().getDeviceId()); + SisDeviceBindRef ref = new SisDeviceBindRef(); ref.setDeviceId(bo.getElevatorControlDeviceId().getDeviceId()); ref.setDeviceIp(bo.getElevatorControlDeviceId().getDeviceIp()); ref.setBindId(bo.getElevatorId()); + ref.setDeviceFloorId(vo.getFloorId()); ref.setControlType(ControlTypeEnum.ELEVATOR_CONTROL.getCode()); ls.add(ref); } // 远程呼叫 if (bo.getRemoteCallElevatorDeviceId() != null && !bo.getRemoteCallElevatorDeviceId().isEmpty()) { for (SisElevatorInfoBo.DeviceInfo deviceInfo : bo.getRemoteCallElevatorDeviceId()) { + SisDeviceManageVo vo = deviceManageService.queryById(deviceInfo.getDeviceId()); + SisDeviceBindRef ref = new SisDeviceBindRef(); ref.setDeviceId(deviceInfo.getDeviceId()); ref.setDeviceIp(deviceInfo.getDeviceIp()); ref.setBindId(bo.getElevatorId()); + ref.setDeviceFloorId(vo.getFloorId()); ref.setControlType(ControlTypeEnum.REMOTE_CALL_ELEVATOR.getCode()); ls.add(ref); } diff --git a/ruoyi-modules/Sis/src/main/resources/application.yml b/ruoyi-modules/Sis/src/main/resources/application.yml index 0715e047..33447213 100644 --- a/ruoyi-modules/Sis/src/main/resources/application.yml +++ b/ruoyi-modules/Sis/src/main/resources/application.yml @@ -43,4 +43,9 @@ spring: - optional:nacos:datasource.yml - optional:nacos:${spring.application.name}.yml - +--- # rocketmq 配置 +rocketmq: + name-server: 192.168.24.101:9876 + producer: + # 生产者组 + group: dist-test diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/controller/SysOssController.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/controller/SysOssController.java index 77beb930..f8c469ba 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/controller/SysOssController.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/controller/SysOssController.java @@ -6,11 +6,13 @@ import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.core.validate.QueryGroup; +import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.web.core.BaseController; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.resource.domain.QrCodeInfo; import org.dromara.resource.domain.bo.SysOssBo; import org.dromara.resource.domain.vo.SysOssUploadVo; import org.dromara.resource.domain.vo.SysOssVo; @@ -80,6 +82,32 @@ public class SysOssController extends BaseController { return R.ok(uploadVo); } + + /** + * 上传OSS对象存储 + * + * @param file 文件 + */ + @SaCheckPermission("system:oss:upload") + @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) + @PostMapping(value = "/qrupload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R codeUpload(@RequestPart("file") MultipartFile file,String code) { + if (ObjectUtil.isNull(file)) { + return R.fail("上传文件不能为空"); + } + QrCodeInfo info = RedisUtils.getCacheObject("Qrcode" + code); + if (info==null){ + return R.fail("二维码已过期"); + } + + SysOssVo oss = iSysOssService.qrupload(file,info); + SysOssUploadVo uploadVo = new SysOssUploadVo(); + uploadVo.setUrl(oss.getUrl()); + uploadVo.setFileName(oss.getOriginalName()); + uploadVo.setOssId(oss.getOssId().toString()); + return R.ok(uploadVo); + } + /** * 下载OSS对象存储 * diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/domain/QrCodeInfo.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/domain/QrCodeInfo.java new file mode 100644 index 00000000..975ed6b2 --- /dev/null +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/domain/QrCodeInfo.java @@ -0,0 +1,10 @@ +package org.dromara.resource.domain; +import lombok.Data; + +@Data +public class QrCodeInfo { + private String deviceCode; // 对应“设备码” + private String generateTime; // 对应“生成时间” + private String qrCodeId; // 对应“二维码ID” + private Long userid; +} diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssService.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssService.java index 76c545ee..22472437 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssService.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssService.java @@ -3,6 +3,7 @@ package org.dromara.resource.service; import jakarta.servlet.http.HttpServletResponse; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.resource.domain.QrCodeInfo; import org.dromara.resource.domain.bo.SysOssBo; import org.dromara.resource.domain.vo.SysOssVo; import org.springframework.web.multipart.MultipartFile; @@ -60,6 +61,14 @@ public interface ISysOssService { */ SysOssVo upload(MultipartFile file); + /** + * 上传 MultipartFile 到对象存储服务,并保存文件信息到数据库 + * + * @param file 要上传的 MultipartFile 对象 + * @return 上传成功后的 SysOssVo 对象,包含文件信息 + */ + SysOssVo qrupload(MultipartFile file, QrCodeInfo qrCodeInfo); + /** * 上传文件到对象存储服务,并保存文件信息到数据库 * diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java index 2e94612c..6069bc5d 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.CacheNames; +import org.dromara.common.core.domain.R; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.SpringUtils; @@ -20,6 +21,8 @@ import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.entity.UploadResult; import org.dromara.common.oss.enums.AccessPolicyType; import org.dromara.common.oss.factory.OssFactory; +import org.dromara.common.redis.utils.RedisUtils; +import org.dromara.resource.domain.QrCodeInfo; import org.dromara.resource.domain.SysOss; import org.dromara.resource.domain.bo.SysOssBo; import org.dromara.resource.domain.vo.SysOssVo; @@ -33,10 +36,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.time.Duration; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -199,6 +199,21 @@ public class SysOssServiceImpl implements ISysOssService { return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult); } + @Override + public SysOssVo qrupload(MultipartFile file, QrCodeInfo info) { + String originalfileName = file.getOriginalFilename(); + String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); + OssClient storage = OssFactory.instance(); + UploadResult uploadResult; + try { + uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType()); + } catch (IOException e) { + throw new ServiceException(e.getMessage()); + } + // 保存文件信息 + return buildResultEntityQr(originalfileName, suffix, storage.getConfigKey(), uploadResult,info); + } + /** * 上传文件到对象存储服务,并保存文件信息到数据库 * @@ -227,6 +242,20 @@ public class SysOssServiceImpl implements ISysOssService { return this.matchingUrl(sysOssVo); } + private SysOssVo buildResultEntityQr(String originalfileName, String suffix, String configKey, UploadResult uploadResult,QrCodeInfo info) { + SysOss oss = new SysOss(); + oss.setUrl(uploadResult.getUrl()); + oss.setFileSuffix(suffix); + oss.setFileName(uploadResult.getFilename()); + oss.setOriginalName(originalfileName); + oss.setService(configKey); + oss.setCreateBy(info.getUserid()); + oss.setCreateTime(new Date()); + baseMapper.insert(oss); + SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class); + return this.matchingUrl(sysOssVo); + } + /** * 新增OSS对象存储 *