From 1e1da7964f1794a8319dba4bc257c4e62fb407fc Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Thu, 4 Sep 2025 17:25:00 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E5=B7=A1?= =?UTF-8?q?=E6=A3=80=E6=98=8E=E7=BB=86bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MeetParticipantsController.java | 67 ++++++++ .../MInspectionTaskDetailController.java | 29 +++- .../property/domain/InspectionPoint.java | 5 +- .../property/domain/InspectionTask.java | 4 + .../property/domain/InspectionTaskDetail.java | 4 + .../property/domain/MeetParticipants.java | 55 ++++++ .../dromara/property/domain/TbBuilding.java | 12 ++ .../org/dromara/property/domain/TbFloor.java | 13 +- .../property/domain/bo/InspectionPointBo.java | 6 +- .../domain/bo/MeetParticipantsBo.java | 57 +++++++ .../property/domain/bo/TbBuildingBo.java | 13 +- .../dromara/property/domain/bo/TbFloorBo.java | 13 +- .../property/domain/vo/InspectionPointVo.java | 5 +- .../domain/vo/InspectionTaskDetailVo.java | 31 +++- .../domain/vo/MeetParticipantsVo.java | 60 +++++++ .../property/domain/vo/TbBuildingVo.java | 18 +- .../dromara/property/domain/vo/TbFloorVo.java | 24 ++- .../domain/vo/mobile/MInspectionPointVo.java | 67 -------- .../vo/mobile/MInspectionTaskDetailVo.java | 161 ++++++++++++++++++ .../mapper/MeetParticipantsMapper.java | 15 ++ .../service/IInspectionPointService.java | 1 - .../service/IInspectionTaskDetailService.java | 15 +- .../service/IMeetParticipantsService.java | 52 ++++++ .../impl/InspectionPlanServiceImpl.java | 33 +++- .../impl/InspectionPointServiceImpl.java | 4 - .../impl/InspectionTaskDetailServiceImpl.java | 129 +++++++++++--- .../impl/MeetParticipantsServiceImpl.java | 158 +++++++++++++++++ .../service/impl/TbBuildingServiceImpl.java | 8 + .../service/impl/TbFloorServiceImpl.java | 34 +++- 29 files changed, 974 insertions(+), 119 deletions(-) create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/MeetParticipantsController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetParticipants.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetParticipantsBo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetParticipantsVo.java delete mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionPointVo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionTaskDetailVo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MeetParticipantsMapper.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/service/IMeetParticipantsService.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetParticipantsServiceImpl.java diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/MeetParticipantsController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/MeetParticipantsController.java new file mode 100644 index 00000000..01467d0c --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/MeetParticipantsController.java @@ -0,0 +1,67 @@ +package org.dromara.property.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.property.domain.bo.MeetParticipantsBo; +import org.dromara.property.domain.vo.MeetParticipantsVo; +import org.dromara.property.service.IMeetParticipantsService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 会议室参会记录 + * 前端访问路由地址为:/property/participants + * + * @author mocheng + * @date 2025-09-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/participants") +public class MeetParticipantsController extends BaseController { + + private final IMeetParticipantsService meetParticipantsService; + + /** + * 查询会议室参会记录列表 + */ + //@SaCheckPermission("property:participants:list") + @GetMapping("/list") + public TableDataInfo list(MeetParticipantsBo bo, PageQuery pageQuery) { + return meetParticipantsService.queryPageList(bo, pageQuery); + } + + + /** + * 获取会议室参会记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("property:participants:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(meetParticipantsService.queryById(id)); + } + + /** + * 新增会议室参会记录 + */ + @SaCheckPermission("property:participants:add") + @Log(title = "会议室参会记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody MeetParticipantsBo bo) { + return toAjax(meetParticipantsService.insertByBo(bo)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskDetailController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskDetailController.java index 1eac4a9e..4b5010ba 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskDetailController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskDetailController.java @@ -2,22 +2,21 @@ package org.dromara.property.controller.mobile; import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.EditGroup; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; import org.dromara.property.domain.bo.InspectionTaskDetailBo; -import org.dromara.property.domain.vo.mobile.MInspectionPointVo; -import org.dromara.property.service.IInspectionPointService; +import org.dromara.property.domain.vo.mobile.MInspectionTaskDetailVo; import org.dromara.property.service.IInspectionTaskDetailService; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * @author yuyongle * @version 1.0 - * @description: TODO + * @description: 移动端巡检点任务 * @date 2025/9/1 17:13 */ @Validated @@ -30,7 +29,23 @@ public class MInspectionTaskDetailController extends BaseController { * 查询巡检点列表 */ @GetMapping("/list") - public TableDataInfo list(InspectionTaskDetailBo bo, PageQuery pageQuery) { + public TableDataInfo list(InspectionTaskDetailBo bo, PageQuery pageQuery) { return inspectionTaskDetailService.mQueryPageList(bo,pageQuery); } + + + /** + * 修改巡检明细 + */ + @PostMapping("/signIn") + public R signIn(@Validated(EditGroup.class) @RequestBody InspectionTaskDetailBo bo) { + return toAjax(inspectionTaskDetailService.signIn(bo)); + } + /** + * 提交巡检明细 + */ + @PostMapping("/submit") + public R submit(@Validated(EditGroup.class) @RequestBody InspectionTaskDetailBo bo) { + return toAjax(inspectionTaskDetailService.submit(bo)); + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPoint.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPoint.java index f7df1d5a..de55d3cb 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPoint.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPoint.java @@ -36,7 +36,10 @@ public class InspectionPoint extends TenantEntity { * 巡检点名称 */ private String pointName; - + /** + * 巡检位置 + */ + private String inspectionLocation; /** * 巡检点类型 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTask.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTask.java index 4a317e69..c4098708 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTask.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTask.java @@ -29,6 +29,10 @@ public class InspectionTask extends TenantEntity { @TableId(value = "id") private Long id; + /** + * 任务名称 + */ + private String taskName; /** * 巡检计划id */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java index be920a68..9ac75503 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java @@ -55,6 +55,10 @@ public class InspectionTaskDetail extends TenantEntity { * 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码) */ private String signType; + /** + * 实际签到状态(0未签到1.已签到) + */ + private String actualSignState; /** * 实际巡检时间 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetParticipants.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetParticipants.java new file mode 100644 index 00000000..52093fdd --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetParticipants.java @@ -0,0 +1,55 @@ +package org.dromara.property.domain; + +import net.sf.jsqlparser.util.validation.metadata.DatabaseException; +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.util.Date; + +/** + * 会议室参会记录对象 meet_participants + * + * @author mocheng + * @date 2025-09-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("meet_participants") +public class MeetParticipants extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 会议室id + */ + private Long meetBookId; + + /** + * 入驻人员id + */ + private Long residentPersonId; + /** + * 签到状态 + */ + private String signState; + /** + * 签到时间 + */ + private Date signTime; + + /** + * 搜索值 + */ + private String searchValue; + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbBuilding.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbBuilding.java index 6c64de2a..b6c72f68 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbBuilding.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbBuilding.java @@ -58,6 +58,18 @@ public class TbBuilding extends TenantEntity { * 电梯数量 */ private Integer elevatorCount; + /** + * 建筑面积(平方米) + */ + private Float area; + /** + * 套内面积(平方米) + */ + private Float insideInArea; + /** + * 公摊面积(平方米) + */ + private Float sharedArea; /** * 竣工日期 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbFloor.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbFloor.java index 7f6accc1..3cc3b28d 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbFloor.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbFloor.java @@ -56,7 +56,18 @@ public class TbFloor extends TenantEntity { * 楼层类型 */ private Integer floorType; - + /** + * 建筑面积(平方米) + */ + private Float area; + /** + * 套内面积(平方米) + */ + private Float insideInArea; + /** + * 公摊面积(平方米) + */ + private Float sharedArea; /** * 房间数量 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPointBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPointBo.java index 174c74a8..61d76b3e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPointBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPointBo.java @@ -43,7 +43,11 @@ public class InspectionPointBo extends BaseEntity { */ @NotBlank(message = "巡检点类型不能为空", groups = { AddGroup.class, EditGroup.class }) private String pointType; - + /** + * 巡检位置 + */ + @NotBlank(message = "巡检位置不能为空", groups = { AddGroup.class, EditGroup.class }) + private String inspectionLocation; /** * nfc编码 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetParticipantsBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetParticipantsBo.java new file mode 100644 index 00000000..ef032c5e --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetParticipantsBo.java @@ -0,0 +1,57 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.MeetParticipants; +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; + +/** + * 会议室参会记录业务对象 meet_participants + * + * @author mocheng + * @date 2025-09-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = MeetParticipants.class, reverseConvertGenerate = false) +public class MeetParticipantsBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 会议室预约id + */ + @NotNull(message = "会议室预约不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long meetBookId; + + /** + * 入驻人员id + */ + @NotNull(message = "入驻人员id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long residentPersonId; + /** + * 签到状态 + */ + private String signState; + /** + * 签到时间 + */ + private Date signTime; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbBuildingBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbBuildingBo.java index 458da36d..06ed65fe 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbBuildingBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbBuildingBo.java @@ -45,7 +45,18 @@ public class TbBuildingBo extends BaseEntity { * 总层数 */ private Integer floorCount; - + /** + * 建筑面积(平方米) + */ + private Float area; + /** + * 套内面积(平方米) + */ + private Float insideInArea; + /** + * 公摊面积(平方米) + */ + private Float sharedArea; /** * 单元数 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java index 2e4ecaec..2fd9b5c3 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java @@ -42,7 +42,18 @@ public class TbFloorBo extends BaseEntity { */ @NotNull(message = "楼层号不能为空", groups = { AddGroup.class, EditGroup.class }) private Integer floorNumber; - + /** + * 建筑面积(平方米) + */ + private Float area; + /** + * 套内面积(平方米) + */ + private Float insideInArea; + /** + * 公摊面积(平方米) + */ + private Float sharedArea; /** * 楼层类型 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPointVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPointVo.java index 0c688eb7..f72124bf 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPointVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPointVo.java @@ -48,7 +48,10 @@ public class InspectionPointVo implements Serializable { */ @ExcelProperty(value = "巡检点名称") private String pointName; - + /** + * 巡检位置 + */ + private String inspectionLocation; /** * 巡检点类型 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskDetailVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskDetailVo.java index 479b7b04..c6541115 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskDetailVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskDetailVo.java @@ -43,24 +43,43 @@ public class InspectionTaskDetailVo implements Serializable { */ @ExcelProperty(value = "任务id") private Long taskId; - + /** + * 任务text + */ + @ExcelProperty(value = "任务text") + private String taskText; /** * 路线id */ @ExcelProperty(value = "路线id") private Long routeId; + /** + * 路线text + */ + @ExcelProperty(value = "路线text") + private String routeText; /** * 巡检计划id */ @ExcelProperty(value = "巡检计划id") private Long planId; + /** + * 巡检计划text + */ + @ExcelProperty(value = " 巡检计划text") + private Long planText; /** * 巡检点id */ @ExcelProperty(value = "巡检点id") private Long pointId; + /** + * 巡检点text + */ + @ExcelProperty(value = "巡检点text") + private Long pointText; /** * 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码) @@ -102,12 +121,22 @@ public class InspectionTaskDetailVo implements Serializable { */ @ExcelProperty(value = "计划巡检人") private String planInspectionPerson; + /** + * 计划巡检人text + */ + @ExcelProperty(value = "计划巡检人Text") + private String planInspectionPersonText; /** * 实际巡检人 */ @ExcelProperty(value = "实际巡检人") private String actualInspectionPerson; + /** + * 实际巡检人Text + */ + @ExcelProperty(value = "实际巡检人Text") + private String actualInspectionPersonText; /** * 巡检结果 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetParticipantsVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetParticipantsVo.java new file mode 100644 index 00000000..9cb0c6a3 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetParticipantsVo.java @@ -0,0 +1,60 @@ +package org.dromara.property.domain.vo; + +import org.dromara.property.domain.MeetParticipants; +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; + + + +/** + * 会议室参会记录视图对象 meet_participants + * + * @author mocheng + * @date 2025-09-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = MeetParticipants.class) +public class MeetParticipantsVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 会议室预约id + */ + private Long meetBookId; + /** + * 入驻人员id + */ + private Long residentPersonId; + /** + * 会议室预约记录 + */ + private MeetBookingVo meetBookingVo; + /** + * 参会人员 + */ + private ResidentPersonVo residentPersonVo; + /** + * 签到状态 + */ + private String signState; + /** + * 签到时间 + */ + private Date signTime; +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbBuildingVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbBuildingVo.java index 3f892373..6ac2ba2b 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbBuildingVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbBuildingVo.java @@ -35,7 +35,10 @@ public class TbBuildingVo implements Serializable { */ @ExcelProperty(value = "园区编码") private Long communityId; - + /** + * 园区文本 + */ + private String communityText; /** * 建筑名称 */ @@ -62,7 +65,18 @@ public class TbBuildingVo implements Serializable { @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "buildType", other = "sis_build_use_type") private String buildTypeName; - + /** + * 建筑面积(平方米) + */ + private Float area; + /** + * 套内面积(平方米) + */ + private Float insideInArea; + /** + * 公摊面积(平方米) + */ + private Float sharedArea; /** * 电梯数量 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java index b4735df3..533f759c 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java @@ -1,5 +1,8 @@ package org.dromara.property.domain.vo; +import jakarta.validation.constraints.NotBlank; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; import org.dromara.property.domain.TbFloor; import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; @@ -38,12 +41,20 @@ public class TbFloorVo implements Serializable { * 社区id */ private Long communityId; + /** + * 社区文本 + */ + private String communityText; /** * 建筑名称 */ @ExcelProperty(value = "建筑名称") private Long buildingId; + /** + * 建筑文本 + */ + private String buildingText; /** * 单元编码 @@ -74,7 +85,18 @@ public class TbFloorVo implements Serializable { */ @ExcelProperty(value = "房间数量") private Integer roomCount; - + /** + * 建筑面积(平方米) + */ + private Float area; + /** + * 套内面积(平方米) + */ + private Float insideInArea; + /** + * 公摊面积(平方米) + */ + private Float sharedArea; /** * 层高 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionPointVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionPointVo.java deleted file mode 100644 index 26920080..00000000 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionPointVo.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.dromara.property.domain.vo.mobile; - - -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.dromara.property.domain.InspectionTaskDetail; - -import java.io.Serial; -import java.util.Date; - -/** - * @author yuyongle - * @version 1.0 - * @description: TODO - * @date 2025/9/1 16:24 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = InspectionTaskDetail.class) -public class MInspectionPointVo { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键id - */ - @ExcelProperty(value = "主键id") - private Long id; - - /** - * 巡检点id - */ - @ExcelProperty(value = "巡检点id") - private Long pointId; - /** - * 巡检点名称 - */ - @ExcelProperty(value = "巡检点名称") - private String pointName; - - /** - * 巡检状态(0未完成,1已完成) - */ - @ExcelProperty(value = "巡检状态(0未完成,1已完成)") - private String inspectionState; - - /** - * 巡检结果 - */ - @ExcelProperty(value = "巡检结果") - private String inspectionResults; - - /** - * 点开始时间 - */ - @ExcelProperty(value = "点开始时间") - private Date pointStartTime; - - /** - * 点结束时间 - */ - @ExcelProperty(value = "点结束时间") - private Date pointEndTime; -} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionTaskDetailVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionTaskDetailVo.java new file mode 100644 index 00000000..7f919127 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionTaskDetailVo.java @@ -0,0 +1,161 @@ +package org.dromara.property.domain.vo.mobile; + + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.property.domain.InspectionTaskDetail; + +import java.io.Serial; +import java.util.Date; + +/** + * @author yuyongle + * @version 1.0 + * @description: TODO + * @date 2025/9/1 16:24 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = InspectionTaskDetail.class) +public class MInspectionTaskDetailVo { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 巡检点id + */ + @ExcelProperty(value = "巡检点id") + private Long pointId; + /** + * 巡检点名称 + */ + @ExcelProperty(value = "巡检点名称") + private String pointName; + + /** + * 巡检状态(0未完成,1已完成) + */ + @ExcelProperty(value = "巡检状态(0未完成,1已完成)") + private String inspectionState; + + /** + * 巡检结果 + */ + @ExcelProperty(value = "巡检结果") + private String inspectionResults; + + /** + * 点开始时间 + */ + @ExcelProperty(value = "点开始时间") + private Date pointStartTime; + + /** + * 点结束时间 + */ + @ExcelProperty(value = "点结束时间") + private Date pointEndTime; + + /** + * 任务id + */ + @ExcelProperty(value = "任务id") + private Long taskId; + + /** + * 路线id + */ + @ExcelProperty(value = "路线id") + private Long routeId; + + /** + * 巡检计划id + */ + @ExcelProperty(value = "巡检计划id") + private Long planId; + + /** + * 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码) + */ + @ExcelProperty(value = "签到类型(1.现场拍照、2.摄像头签到、3.现场扫码)") + private String signType; + + /** + * 实际巡检时间 + */ + @ExcelProperty(value = "实际巡检时间") + private Date actualInspectionTime; + + /** + * 实际签到状态(0未签到1.已签到) + */ + private String actualSignState; + + /** + * 巡检图片 + */ + @ExcelProperty(value = "巡检图片") + private String inspectionImage; + + /** + * 巡检图片Url + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "inspectionImage") + private String inspectionImageUrl; + /** + * 计划巡检人 + */ + @ExcelProperty(value = "计划巡检人") + private String planInspectionPerson; + /** + * 计划巡检人文本 + */ + @ExcelProperty(value = "计划巡检人文本") + private String planInspectionPersonText; + + /** + * 实际巡检人 + */ + @ExcelProperty(value = "实际巡检人") + private String actualInspectionPerson; + /** + * 实际巡检人文本 + */ + @ExcelProperty(value = "实际巡检人文本") + private String actualInspectionPersonText; + + /** + * 巡检描述 + */ + @ExcelProperty(value = "巡检描述") + private String inspectionDesc; + + /** + * 巡检位置 + */ + @ExcelProperty(value = "巡检位置") + private String inspectionLocation; + + /** + * 实际巡检时间 + */ + @ExcelProperty(value = "实际巡检时间") + private Date inspectionTime; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MeetParticipantsMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MeetParticipantsMapper.java new file mode 100644 index 00000000..40ef64cd --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MeetParticipantsMapper.java @@ -0,0 +1,15 @@ +package org.dromara.property.mapper; + +import org.dromara.property.domain.MeetParticipants; +import org.dromara.property.domain.vo.MeetParticipantsVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 会议室参会记录Mapper接口 + * + * @author mocheng + * @date 2025-09-03 + */ +public interface MeetParticipantsMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPointService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPointService.java index 215b14b2..6ccd07bf 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPointService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPointService.java @@ -3,7 +3,6 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.property.domain.bo.InspectionPointBo; import org.dromara.property.domain.vo.InspectionPointVo; -import org.dromara.property.domain.vo.mobile.MInspectionPointVo; import java.util.Collection; import java.util.List; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java index 8a404105..1e142436 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java @@ -4,7 +4,7 @@ import org.dromara.property.domain.vo.InspectionTaskDetailVo; import org.dromara.property.domain.bo.InspectionTaskDetailBo; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.property.domain.vo.mobile.MInspectionPointVo; +import org.dromara.property.domain.vo.mobile.MInspectionTaskDetailVo; import java.util.Collection; import java.util.List; @@ -75,5 +75,16 @@ public interface IInspectionTaskDetailService { * @param pageQuery * @return */ - TableDataInfo mQueryPageList(InspectionTaskDetailBo bo, PageQuery pageQuery); + TableDataInfo mQueryPageList(InspectionTaskDetailBo bo, PageQuery pageQuery); + + /** + * 巡检明细签到 + * @param bo + * @return + */ + Boolean signIn(InspectionTaskDetailBo bo); + /** + * 提交巡检明细 + */ + Boolean submit(InspectionTaskDetailBo bo); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IMeetParticipantsService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IMeetParticipantsService.java new file mode 100644 index 00000000..649d0ebd --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IMeetParticipantsService.java @@ -0,0 +1,52 @@ +package org.dromara.property.service; + +import org.dromara.property.domain.MeetParticipants; +import org.dromara.property.domain.vo.MeetParticipantsVo; +import org.dromara.property.domain.bo.MeetParticipantsBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 会议室参会记录Service接口 + * + * @author mocheng + * @date 2025-09-03 + */ +public interface IMeetParticipantsService { + + /** + * 查询会议室参会记录 + * + * @param id 主键 + * @return 会议室参会记录 + */ + MeetParticipantsVo queryById(Long id); + + /** + * 分页查询会议室参会记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 会议室参会记录分页列表 + */ + TableDataInfo queryPageList(MeetParticipantsBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的会议室参会记录列表 + * + * @param bo 查询条件 + * @return 会议室参会记录列表 + */ + List queryList(MeetParticipantsBo bo); + + /** + * 新增会议室参会记录 + * + * @param bo 会议室参会记录 + * @return 是否新增成功 + */ + Boolean insertByBo(MeetParticipantsBo bo); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java index 5bb675a3..90c1c898 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java @@ -55,8 +55,10 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService { private final ResidentPersonMapper residentPersonMapper; private final InspectionPlanStaffMapper inspectionPlanStaffMapper; private final InspectionRouteMapper inspectionRouteMapper; + private final InspectionPointMapper inspectionPointMapper; private final InspectionRoutePointMapper inspectionRoutePointMapper; private final InspectionTaskMapper inspectionTaskMapper; + private final InspectionTaskDetailMapper inspectionTaskDetailMapper; @DubboReference private RemoteUserService remoteUserService; @@ -227,6 +229,7 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService { if (DateUtil.isIn(today, startDate, endDate) && inspectionDayList.contains(day)) { InspectionTask task = new InspectionTask(); task.setInspectionPlanId(p.getId()); + task.setTaskName(plan.getPlanName()+"的任务"); task.setTaskType(plan.getSignType()); task.setPlanInsTime(startDate + "~" + p.getEndTime()); task.setTenantId(plan.getTenantId()); @@ -268,6 +271,7 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService { task.setInspectionPlanId(p.getId()); task.setInspectionPlanId(p.getId()); task.setTaskType(plan.getSignType()); + task.setTaskName(plan.getPlanName()+"的任务"); task.setPlanInsTime(startDate + "~" + p.getEndTime()); task.setTenantId(plan.getTenantId()); task.setStatus("0"); @@ -275,7 +279,6 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService { String userIds = inspectionPlanStaffVos.stream().map(vo -> vo.getUserId().toString()).collect(Collectors.joining(",")); String userNames = inspectionPlanStaffVos.stream().map(InspectionPlanStaffVo::getUserName).collect(Collectors.joining(",")); - task.setPlanUserId(userIds); task.setPlanUserName(userNames); } else { @@ -301,13 +304,28 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService { Assert.isTrue(CollUtil.isNotEmpty(inspectionRoutePointVoList), "该计划路线没有关联的巡检点"); //收集巡检点id List pointIds = inspectionRoutePointVoList.stream().map(vo -> vo.getPointId()).toList(); - List inspectionRoutePointVos = inspectionRoutePointMapper.selectVoByIds(pointIds); - Assert.isTrue(CollUtil.isNotEmpty(inspectionRoutePointVos), "未找到巡检点"); - inspectionRoutePointVos.forEach(vo -> { + List inspectionPointVos = inspectionPointMapper.selectVoByIds(pointIds); + Assert.isTrue(CollUtil.isNotEmpty(inspectionPointVos), "未找到巡检点"); + //根据计划id查询计划巡检人 + List inspectionPlanStaffVos = inspectionPlanStaffMapper.selectVoList( + new LambdaQueryWrapper() + .eq(InspectionPlanStaff::getInspectionPlanId, plan.getId()) + ); + //收集userId为以,分隔 + String userIds = inspectionPlanStaffVos.stream().map(vo -> vo.getUserId().toString()).collect(Collectors.joining(",")); + //查询用户姓名用,分割 + // String nickname = remoteUserService.selectNicknameByIds(userIds); + + inspectionPointVos.forEach(vo -> { InspectionTaskDetail taskDetail = new InspectionTaskDetail(); taskDetail.setTaskId(task.getId()); - taskDetail.setRouteId(vo.getRouteId()); - taskDetail.setPointId(vo.getPointId()); + taskDetail.setRouteId(plan.getInspectionRouteId()); + taskDetail.setPointId(vo.getId()); + taskDetail.setPlanId(plan.getId()); + taskDetail.setInspectionState("0"); + taskDetail.setSignType(plan.getSignType()); + taskDetail.setInspectionLocation(vo.getInspectionLocation()); + taskDetail.setPlanInspectionPerson(userIds); // 分割 String[] parts = StrUtil.splitToArray(task.getPlanInsTime(), '~'); String dateTimeStr1 = parts[0]; // 完整时间 @@ -321,6 +339,9 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService { Date endDate = DateUtil.parse(dateTimeStr2, DatePattern.NORM_DATETIME_FORMAT); taskDetail.setPointStartTime(startDate); taskDetail.setPointEndTime(endDate); + taskDetail.setActualSignState("0"); + taskDetail.setInspectionLocation(vo.getInspectionLocation()); + inspectionTaskDetailMapper.insert(taskDetail); }); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPointServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPointServiceImpl.java index b47d781c..e4dd9d86 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPointServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPointServiceImpl.java @@ -11,13 +11,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.property.domain.InspectionPlanStaff; import org.dromara.property.domain.InspectionPoint; import org.dromara.property.domain.bo.InspectionPointBo; import org.dromara.property.domain.vo.InspectionItemVo; -import org.dromara.property.domain.vo.InspectionPlanVo; import org.dromara.property.domain.vo.InspectionPointVo; -import org.dromara.property.domain.vo.mobile.MInspectionPointVo; import org.dromara.property.mapper.InspectionItemMapper; import org.dromara.property.mapper.InspectionPlanMapper; import org.dromara.property.mapper.InspectionPointMapper; @@ -25,7 +22,6 @@ import org.dromara.property.service.IInspectionPointService; 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; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskDetailServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskDetailServiceImpl.java index cebbe748..5abaa7be 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskDetailServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskDetailServiceImpl.java @@ -2,6 +2,7 @@ package org.dromara.property.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -12,20 +13,19 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.property.domain.vo.InspectionPointVo; -import org.dromara.property.domain.vo.mobile.MInspectionPointVo; -import org.dromara.property.mapper.InspectionPointMapper; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.property.domain.InspectionPlan; +import org.dromara.property.domain.vo.*; +import org.dromara.property.domain.vo.mobile.MInspectionTaskDetailVo; +import org.dromara.property.mapper.*; +import org.dromara.system.api.model.LoginUser; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.InspectionTaskDetailBo; -import org.dromara.property.domain.vo.InspectionTaskDetailVo; import org.dromara.property.domain.InspectionTaskDetail; -import org.dromara.property.mapper.InspectionTaskDetailMapper; import org.dromara.property.service.IInspectionTaskDetailService; +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.*; import java.util.stream.Collectors; /** @@ -41,6 +41,9 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer private final InspectionTaskDetailMapper baseMapper; private final InspectionPointMapper inspectionPointMapper; + private final InspectionPlanMapper inspectionPlanMapper; + private final InspectionRouteMapper inspectionRouteMapper; + private final InspectionTaskMapper inspectionTaskMapper; /** * 查询巡检明细 @@ -49,7 +52,7 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer * @return 巡检明细 */ @Override - public InspectionTaskDetailVo queryById(Long id){ + public InspectionTaskDetailVo queryById(Long id) { return baseMapper.selectVoById(id); } @@ -64,9 +67,38 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer public TableDataInfo queryPageList(InspectionTaskDetailBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + if (CollUtil.isNotEmpty(result.getRecords())) { + //收集任务id为list + List taskIds = result.getRecords().stream().map(InspectionTaskDetailVo::getTaskId).toList(); + //收集任务为map id和名称 + Map taskNameMap = inspectionTaskMapper.selectVoByIds(taskIds).stream() + .collect(Collectors.toMap(InspectionTaskVo::getId, InspectionTaskVo::getPlanName)); + //收集路线id为list + List routeIds = result.getRecords().stream().map(InspectionTaskDetailVo::getRouteId).toList(); + //收集任务为map id和名称 + Map routeNameMap = inspectionRouteMapper.selectVoByIds(routeIds).stream() + .collect(Collectors.toMap(InspectionRouteVo::getId, InspectionRouteVo::getRouteName)); + //收集路线列表 + List inspectionRoutes = inspectionRouteMapper.selectVoByIds(routeIds); + //收集计划id为list + List planIds = result.getRecords().stream().map(InspectionTaskDetailVo::getPlanId).toList(); + //收集计划列表 + Map planNameMap = inspectionPlanMapper.selectVoByIds(routeIds).stream() + .collect(Collectors.toMap(InspectionPlanVo::getId, InspectionPlanVo::getPlanName)); + //巡检点id为list + List pointIds = result.getRecords().stream().map(InspectionTaskDetailVo::getPointId).toList(); + result.getRecords().stream().forEach(vo -> { + disposeData(vo); + }); + } + return TableDataInfo.build(result); } + private void disposeData(InspectionTaskDetailVo vo) { + + } + /** * 查询符合条件的巡检明细列表 * @@ -110,6 +142,7 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer * @return 是否新增成功 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(InspectionTaskDetailBo bo) { InspectionTaskDetail add = MapstructUtils.convert(bo, InspectionTaskDetail.class); validEntityBeforeSave(add); @@ -127,6 +160,7 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer * @return 是否修改成功 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean updateByBo(InspectionTaskDetailBo bo) { InspectionTaskDetail update = MapstructUtils.convert(bo, InspectionTaskDetail.class); validEntityBeforeSave(update); @@ -136,7 +170,7 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer /** * 保存前的数据校验 */ - private void validEntityBeforeSave(InspectionTaskDetail entity){ + private void validEntityBeforeSave(InspectionTaskDetail entity) { //TODO 做一些数据校验,如唯一约束 } @@ -148,13 +182,15 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer * @return 是否删除成功 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; } //移动端 + /** * APP端查询巡检明细列表 * @@ -163,25 +199,25 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer * @return */ @Override - public TableDataInfo mQueryPageList(InspectionTaskDetailBo bo, PageQuery pageQuery) { + public TableDataInfo mQueryPageList(InspectionTaskDetailBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); // 转换 VO 类型 - List mInspectionTaskDetailVo=new ArrayList<>(); + List mInspectionTaskDetailVo = new ArrayList<>(); // 转换并设置 typeName - if(CollUtil.isNotEmpty(result.getRecords())){ + if (CollUtil.isNotEmpty(result.getRecords())) { //收集巡检点id List pointIdList = result.getRecords().stream().map(InspectionTaskDetailVo::getPointId).collect(Collectors.toList()); - //查询巡检点转成巡检点名称转成map id->名称 + //查询巡检点转成巡检点名称转成map id->名称 Map pointNameMap = inspectionPointMapper.selectVoByIds(pointIdList).stream().collect(Collectors.toMap(InspectionPointVo::getId, InspectionPointVo::getPointName)); mInspectionTaskDetailVo = result.getRecords().stream().map(vo -> { - MInspectionPointVo mVo = BeanUtil.copyProperties(vo, MInspectionPointVo.class); - dataProcessing(mVo,pointNameMap); + MInspectionTaskDetailVo mVo = BeanUtil.copyProperties(vo, MInspectionTaskDetailVo.class); + dataProcessing(mVo, pointNameMap); return mVo; }).collect(Collectors.toList()); } // 构建分页结果 - Page pageResult = new Page<>(); + Page pageResult = new Page<>(); pageResult.setRecords(mInspectionTaskDetailVo); pageResult.setTotal(result.getTotal()); pageResult.setCurrent(result.getCurrent()); @@ -190,11 +226,62 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer } /** + * 处理数据 * * @param mInspectionTaskDetailVo * @param pointNameMap */ - private void dataProcessing(MInspectionPointVo mInspectionTaskDetailVo, Map pointNameMap){ - mInspectionTaskDetailVo.setPointName( ObjectUtil.defaultIfNull(pointNameMap.get(mInspectionTaskDetailVo.getPointId()), "未知点位")); + private void dataProcessing(MInspectionTaskDetailVo mInspectionTaskDetailVo, Map pointNameMap) { + mInspectionTaskDetailVo.setPointName(ObjectUtil.defaultIfNull(pointNameMap.get(mInspectionTaskDetailVo.getPointId()), "未知点位")); + } + + /** + * 巡检明细签到 + * + * @param bo + * @return + */ + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean signIn(InspectionTaskDetailBo bo) { + //查询巡检明细 + InspectionTaskDetail inspectionTaskDetail = baseMapper.selectById(bo.getId()); + String planInspectionPerson = inspectionTaskDetail.getPlanInspectionPerson(); + + // 将逗号分隔的字符串转换为Long类型的List + List planInspectionPersonIds = Collections.emptyList(); + if (StringUtils.isNotBlank(planInspectionPerson)) { + planInspectionPersonIds = Arrays.stream(planInspectionPerson.split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .collect(Collectors.toList()); + } + Assert.isTrue(inspectionTaskDetail.getActualSignState().equals("0"), "该巡检点已签到,请勿重复签到"); + bo.setPointStartTime(new Date()); + bo.setActualSignState("1"); + //当前登录用户id + LoginUser loginUser = LoginHelper.getLoginUser(); + Assert.isTrue(planInspectionPersonIds.contains(loginUser.getUserId()), "当前签到人不在计划巡检人列表内"); + bo.setActualInspectionPerson(loginUser.getUserId().toString()); + InspectionTaskDetail update = MapstructUtils.convert(bo, InspectionTaskDetail.class); + return baseMapper.updateById(update) > 0; + } + + /** + * 提交巡检明细 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean submit(InspectionTaskDetailBo bo) { + //查询巡检明细 + InspectionTaskDetail inspectionTaskDetail = baseMapper.selectById(bo.getId()); + Assert.isTrue(inspectionTaskDetail.getInspectionState().equals("0"), "该巡检点已巡检,请勿重复提交"); + bo.setInspectionState("1"); + bo.setPointEndTime(new Date()); + bo.setInspectionState("1"); + InspectionTaskDetail update = MapstructUtils.convert(bo, InspectionTaskDetail.class); + return baseMapper.updateById(update) > 0; } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetParticipantsServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetParticipantsServiceImpl.java new file mode 100644 index 00000000..12c9ad12 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetParticipantsServiceImpl.java @@ -0,0 +1,158 @@ +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; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.property.domain.bo.MeetBookingBo; +import org.dromara.property.domain.vo.MeetBookingVo; +import org.dromara.property.domain.vo.ResidentPersonVo; +import org.dromara.property.domain.vo.ResidentUnitVo; +import org.dromara.property.mapper.MeetBookingMapper; +import org.dromara.property.mapper.ResidentPersonMapper; +import org.dromara.property.mapper.ResidentUnitMapper; +import org.springframework.stereotype.Service; +import org.dromara.property.domain.bo.MeetParticipantsBo; +import org.dromara.property.domain.vo.MeetParticipantsVo; +import org.dromara.property.domain.MeetParticipants; +import org.dromara.property.mapper.MeetParticipantsMapper; +import org.dromara.property.service.IMeetParticipantsService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; +import java.util.stream.Collectors; + +/** + * 会议室参会记录Service业务层处理 + * + * @author mocheng + * @date 2025-09-03 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class MeetParticipantsServiceImpl implements IMeetParticipantsService { + + private final MeetParticipantsMapper baseMapper; + private final MeetBookingMapper meetBookingMapper; + private final ResidentPersonMapper residentPersonMapper; + private final ResidentUnitMapper residentUnitMapper; + + + /** + * 查询会议室参会记录 + * + * @param id 主键 + * @return 会议室参会记录 + */ + @Override + public MeetParticipantsVo queryById(Long id) { + MeetParticipantsVo meetParticipantsVo = baseMapper.selectVoById(id); + ResidentPersonVo residentPersonVo = residentPersonMapper.selectVoById(meetParticipantsVo.getResidentPersonId()); + MeetBookingVo meetBookingVo = meetBookingMapper.selectVoById(meetParticipantsVo.getMeetBookId()); + meetParticipantsVo.setResidentPersonVo(ObjectUtil.isNotEmpty(residentPersonVo)?residentPersonVo:null); + meetParticipantsVo.setMeetBookingVo(ObjectUtil.isNotEmpty(meetBookingVo)?meetBookingVo:null); + return meetParticipantsVo; + } + + /** + * 分页查询会议室参会记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 会议室参会记录分页列表 + */ + @Override + public TableDataInfo queryPageList(MeetParticipantsBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + if (CollUtil.isNotEmpty(result.getRecords())) { + //将会议室id和入驻人员id收集 + List meetIds = result.getRecords().stream().map(MeetParticipantsVo::getMeetBookId).distinct().toList(); + List residentPersonIds = result.getRecords().stream().map(MeetParticipantsVo::getResidentPersonId).distinct().toList(); + List residentPersonVos = residentPersonMapper.selectVoByIds(residentPersonIds); + List meetBookingVos = meetBookingMapper.selectVoByIds(meetIds); + handData(residentPersonVos, meetBookingVos); + //处理数据 + result.getRecords().forEach(s -> { + s.setMeetBookingVo(meetBookingVos.stream().filter(vo -> vo.getId().equals(s.getMeetBookId())).findFirst().orElse(null)); + s.setResidentPersonVo(residentPersonVos.stream().filter(vo -> vo.getId().equals(s.getResidentPersonId())).findFirst().orElse(null)); + }); + } + return TableDataInfo.build(result); + } +/** + * 处理数据 + */ + private void handData(List residentPersonVos ,List meetBookingVos){ + List residentUnitVolist = residentUnitMapper.selectVoList(); + List residentPersonVoList = residentPersonMapper.selectVoList(); + meetBookingVos.stream().forEach(s -> { + if (CollUtil.isNotEmpty(residentUnitVolist)) { + ResidentUnitVo residentUnitVo = residentUnitVolist.stream() + .filter(vo -> vo.getId() != null && String.valueOf(vo.getId()).equals(s.getUnit())).findFirst().orElse(null); + s.setUnitName(ObjectUtil.isNotEmpty(residentUnitVo) ? residentUnitVo.getName() : null); + } + if (CollUtil.isNotEmpty(residentPersonVoList)) { + ResidentPersonVo residentPersonVo = residentPersonVoList.stream() + .filter(vo -> vo.getId() != null && String.valueOf(vo.getId()).equals(s.getPerson())).findFirst().orElse(null); + s.setPersonName(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getUserName() : null); + s.setPhone(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getPhone() : null); + } + }); + } + /** + * 查询符合条件的会议室参会记录列表 + * + * @param bo 查询条件 + * @return 会议室参会记录列表 + */ + @Override + public List queryList(MeetParticipantsBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(MeetParticipantsBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(MeetParticipants::getId); + lqw.eq(bo.getMeetBookId() != null, MeetParticipants::getMeetBookId, bo.getMeetBookId()); + lqw.eq(bo.getResidentPersonId() != null, MeetParticipants::getResidentPersonId, bo.getResidentPersonId()); + lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), MeetParticipants::getSearchValue, bo.getSearchValue()); + return lqw; + } + + /** + * 新增会议室参会记录 + * + * @param bo 会议室参会记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(MeetParticipantsBo bo) { + MeetParticipants add = MapstructUtils.convert(bo, MeetParticipants.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(MeetParticipants entity) { + //TODO 做一些数据校验,如唯一约束 + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbBuildingServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbBuildingServiceImpl.java index ab046057..791e373f 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbBuildingServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbBuildingServiceImpl.java @@ -23,6 +23,7 @@ import org.springframework.stereotype.Service; import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 建筑Service业务层处理 @@ -60,6 +61,13 @@ public class TbBuildingServiceImpl implements ITbBuildingService { public TableDataInfo queryPageList(TbBuildingBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + //收集社区id + List communityIds = result.getRecords().stream().map(TbBuildingVo::getCommunityId).toList(); + //查询社区名称map + Map communityMap = communityMapper.selectVoByIds(communityIds).stream().collect(Collectors.toMap(TbCommunityVo::getId, TbCommunityVo::getCommunityName)); + result.getRecords().forEach(s->{ + s.setCommunityText(communityMap.get(s.getCommunityId())); + }); return TableDataInfo.build(result); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java index 656c5529..d2d8eda3 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java @@ -1,5 +1,7 @@ package org.dromara.property.service.impl; +import aj.org.objectweb.asm.Handle; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -10,12 +12,18 @@ import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.property.domain.TbCommunity; import org.dromara.property.domain.TbE8Config; import org.dromara.property.domain.TbFloor; import org.dromara.property.domain.bo.TbFloorBo; +import org.dromara.property.domain.vo.InspectionPointVo; import org.dromara.property.domain.vo.TbBuildingVo; +import org.dromara.property.domain.vo.TbCommunityVo; import org.dromara.property.domain.vo.TbFloorVo; +import org.dromara.property.mapper.TbBuildingMapper; +import org.dromara.property.mapper.TbCommunityMapper; import org.dromara.property.mapper.TbFloorMapper; +import org.dromara.property.mapper.TbRoomMapper; import org.dromara.property.service.ITbBuildingService; import org.dromara.property.service.ITbFloorService; import org.dromara.property.service.ITbUnitService; @@ -23,8 +31,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 楼层Service业务层处理 @@ -40,6 +50,8 @@ public class TbFloorServiceImpl implements ITbFloorService { private final TbFloorMapper baseMapper; private final ITbUnitService tbUnitService; private final ITbBuildingService iTbBuildingService; + private final TbBuildingMapper tbBuildingMapper; + private final TbCommunityMapper tbCommunityMapper; /** * 查询楼层 @@ -63,9 +75,29 @@ public class TbFloorServiceImpl implements ITbFloorService { public TableDataInfo queryPageList(TbFloorBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + if (CollUtil.isNotEmpty(result.getRecords())) { + //收集园区id + List communityIds = result.getRecords().stream().map(TbFloorVo::getCommunityId).toList(); + //查询园区为map + Map pointNameMap = tbCommunityMapper.selectVoByIds(communityIds).stream().collect(Collectors.toMap(TbCommunityVo::getId, TbCommunityVo::getCommunityName)); + + + //收集建筑id + List buildingIds = result.getRecords().stream().map(TbFloorVo::getBuildingId).toList(); + //查询建筑为map + Map buildingNameMap = tbBuildingMapper.selectVoByIds(buildingIds).stream().collect(Collectors.toMap(TbBuildingVo::getId, TbBuildingVo::getBuildingName)); + result.getRecords().stream().forEach(s -> { + handleData(s, pointNameMap, buildingNameMap); + }); + } return TableDataInfo.build(result); } + private void handleData(TbFloorVo floorVo, Map pointNameMap, Map buildingNameMap) { + floorVo.setCommunityText(pointNameMap.get(floorVo.getCommunityId())); + floorVo.setBuildingText(buildingNameMap.get(floorVo.getBuildingId())); + } + /** * 查询符合条件的楼层列表 * @@ -85,7 +117,7 @@ public class TbFloorServiceImpl implements ITbFloorService { .orderByDesc(TbFloor::getUpdateTime); lqw.like(StringUtils.isNotBlank(bo.getFloorName()), TbFloor::getFloorName, bo.getFloorName()); lqw.eq(bo.getFloorNumber() != null, TbFloor::getFloorNumber, bo.getFloorNumber()); - lqw.eq(bo.getBuildingId()!= null, TbFloor::getUnitId, bo.getBuildingId()); + lqw.eq(bo.getBuildingId() != null, TbFloor::getUnitId, bo.getBuildingId()); lqw.eq(bo.getFloorType() != null, TbFloor::getFloorType, bo.getFloorType()); lqw.eq(bo.getRoomCount() != null, TbFloor::getRoomCount, bo.getRoomCount()); lqw.eq(bo.getFloorHeight() != null, TbFloor::getFloorHeight, bo.getFloorHeight()); -- 2.43.0 From 745145ebe2a3d2445854d401a851ccb7afcb2044 Mon Sep 17 00:00:00 2001 From: lxj <15683799673@163.com> Date: Thu, 4 Sep 2025 18:27:15 +0800 Subject: [PATCH 02/14] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SisAlarmEventsServiceImpl.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java index 109f0c20..02f4b36e 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java @@ -211,15 +211,13 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { // 写入事件处理表 SisAlarmEventProcess alarmEventProcess = new SisAlarmEventProcess(); - alarmEventProcess.setId(0L); - alarmEventProcess.setAlarmId(0L); - alarmEventProcess.setSolveId(0L); - alarmEventProcess.setSolveName(""); - alarmEventProcess.setState(0); - alarmEventProcess.setWorkReply(""); + alarmEventProcess.setAlarmId(alarmEvents.getSolveId()); + alarmEventProcess.setState(alarmEvents.getState()); + alarmEventProcess.setWorkReply("系统自动生成"); alarmEventProcess.setWorkReplyTime(new Date()); - alarmEventProcess.setReceiveTaskTag(0L); - alarmEventProcess.setTenantId(""); + alarmEventProcess.setTenantId(sisDeviceManage.getTenantId()); + alarmEventProcessService.insert(alarmEventProcess); + // 写入附件表 List ls = new ArrayList<>(); @@ -280,7 +278,8 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { events.setSolveName(bo.getSolveName()); events.setSolveTime(now); events.setState(AlarmStatus.CONFIRMED.getCode()); - this.baseMapper.updateById(events); + int i = this.baseMapper.updateById(events); + log.info("修改事件表完成,result={}", i > 0); // 写入处理流程 SisAlarmEventProcess process = new SisAlarmEventProcess(); process.setAlarmId(sisAlarmEventsVo.getId()); -- 2.43.0 From 87f5ee97fac25b797daba3fcffe8462f50b884da Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Fri, 5 Sep 2025 17:55:47 +0800 Subject: [PATCH 03/14] =?UTF-8?q?feat(property):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=85=A5=E9=A9=BB=E5=91=98=E5=B7=A5=E7=99=BB=E5=BD=95=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/RemoteResidentPersonService.java | 11 ++ .../api/model/LoginResidentPerson.java | 119 ++++++++++++++++++ ruoyi-auth/pom.xml | 5 + .../dromara/auth/form/ResidentLoginBody.java | 31 +++++ .../service/impl/ResidentAuthStrategy.java | 68 ++++++++++ .../ResidentPersonException.java | 19 +++ ruoyi-common/ruoyi-common-satoken/pom.xml | 5 + .../core/service/SaPermissionImpl.java | 28 ++++- .../common/satoken/utils/LoginHelper.java | 52 ++++++++ .../controller/ResidentPersonController.java | 7 +- .../controller/ResidentUnitController.java | 4 +- .../xcx/XResidentPersonController.java | 114 +++++++++++++++++ .../bo/{ => residentBo}/ResidentPersonBo.java | 11 +- .../bo/{ => residentBo}/ResidentUnitBo.java | 4 +- .../{ => entity/resident}/ResidentPerson.java | 8 +- .../{ => entity/resident}/ResidentUnit.java | 2 +- .../domain/vo/MeetParticipantsVo.java | 4 +- .../ResidentPersonImportVo.java | 6 +- .../vo/{ => residentVo}/ResidentPersonVo.java | 23 +++- .../vo/{ => residentVo}/ResidentUnitVo.java | 4 +- .../RemoteResidentPersonServiceImpl.java | 48 ++++++- .../ResidentPersonImportListener.java | 11 +- .../property/mapper/ResidentPersonMapper.java | 4 +- .../property/mapper/ResidentUnitMapper.java | 4 +- .../service/IResidentPersonService.java | 13 +- .../service/IResidentUnitService.java | 7 +- .../impl/CapitalApplicationServiceImpl.java | 1 + .../impl/CostCarChargeServiceImpl.java | 4 +- .../impl/CostHouseChargeServiceImpl.java | 3 +- .../CustomerContingenPlanServiceImpl.java | 5 +- .../impl/InspectionPlanServiceImpl.java | 3 +- .../service/impl/MachineServiceImpl.java | 3 +- .../service/impl/MeetBookingServiceImpl.java | 4 +- .../impl/MeetParticipantsServiceImpl.java | 7 +- .../service/impl/MeetServiceImpl.java | 5 - .../impl/ResidentPersonServiceImpl.java | 44 +++++-- .../service/impl/ResidentUnitServiceImpl.java | 18 +-- .../impl/ServerBookingServiceImpl.java | 1 - .../TbMeterRecordServiceImpl.java | 1 + .../property/tasks/InspectionTasks.java | 8 +- .../dromara/property/tasks/MachineTasks.java | 8 +- .../property/utils/UploadFaceUtil.java | 4 +- .../TbMeterReocordMapper.xml | 4 +- 43 files changed, 618 insertions(+), 117 deletions(-) create mode 100644 ruoyi-api/property-api/src/main/java/org/dromara/property/api/model/LoginResidentPerson.java create mode 100644 ruoyi-auth/src/main/java/org/dromara/auth/form/ResidentLoginBody.java create mode 100644 ruoyi-auth/src/main/java/org/dromara/auth/service/impl/ResidentAuthStrategy.java create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/residentPerson/ResidentPersonException.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XResidentPersonController.java rename ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/{ => residentBo}/ResidentPersonBo.java (92%) rename ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/{ => residentBo}/ResidentUnitBo.java (95%) rename ruoyi-modules/Property/src/main/java/org/dromara/property/domain/{ => entity/resident}/ResidentPerson.java (93%) rename ruoyi-modules/Property/src/main/java/org/dromara/property/domain/{ => entity/resident}/ResidentUnit.java (96%) rename ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/{ => residentVo}/ResidentPersonImportVo.java (85%) rename ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/{ => residentVo}/ResidentPersonVo.java (86%) rename ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/{ => residentVo}/ResidentUnitVo.java (94%) diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteResidentPersonService.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteResidentPersonService.java index b3d4986c..0ab4d6f5 100644 --- a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteResidentPersonService.java +++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteResidentPersonService.java @@ -1,6 +1,8 @@ package org.dromara.property.api; +import org.dromara.common.core.exception.residentPerson.ResidentPersonException; import org.dromara.property.api.domain.vo.RemoteResidentPersonVo; +import org.dromara.property.api.model.LoginResidentPerson; import java.util.List; @@ -16,4 +18,13 @@ public interface RemoteResidentPersonService { // 更新E8平台id Boolean updateE8Id(Long personId, Long e8Id); + + /** + * 通过手机号查询用户信息 + * + * @param phone 手机号 + * @param tenantId 租户id + * @return 结果 + */ + LoginResidentPerson getResidentPersonInfo(String phone, String tenantId) throws ResidentPersonException; } diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/model/LoginResidentPerson.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/model/LoginResidentPerson.java new file mode 100644 index 00000000..99a9d9a6 --- /dev/null +++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/model/LoginResidentPerson.java @@ -0,0 +1,119 @@ +package org.dromara.property.api.model; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Set; + +/** + * @author lsm + * @apiNote LoginResidentPerson + * @since 2025/9/5 + */ +@Data +@NoArgsConstructor +public class LoginResidentPerson implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 租户ID + */ + private String tenantId; + + /** + * 用户ID + */ + private Long userId; + + /** + * 所属单位id + */ + private Long unitId; + + /** + * 所属单位名称 + */ + private String unitName; + + /** + * 用户唯一标识 + */ + private String token; + + /** + * 用户类型 + */ + private String userType; + + /** + * 登录时间 + */ + private Long loginTime; + + /** + * 过期时间 + */ + private Long expireTime; + + /** + * 登录IP地址 + */ + private String ipaddr; + + /** + * 登录地点 + */ + private String loginLocation; + + /** + * 浏览器类型 + */ + private String browser; + + /** + * 操作系统 + */ + private String os; + + /** + * 用户名 + */ + private String username; + + /** + * 用户昵称 + */ + private String nickname; + + /** + * 密码 + */ + private String password; + + /** + * 用户角色(1管理员2普通用户) + */ + private Integer userRoles; + + /** + * 客户端 + */ + private String clientKey; + + /** + * 获取登录id + */ + public String getLoginId() { + if (userType == null) { + throw new IllegalArgumentException("用户类型不能为空"); + } + if (userId == null) { + throw new IllegalArgumentException("用户ID不能为空"); + } + return userType + ":" + userId; + } +} diff --git a/ruoyi-auth/pom.xml b/ruoyi-auth/pom.xml index 902f1c44..fff261f1 100644 --- a/ruoyi-auth/pom.xml +++ b/ruoyi-auth/pom.xml @@ -99,6 +99,11 @@ ruoyi-common-loadbalancer + + org.dromara + property-api + + diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/form/ResidentLoginBody.java b/ruoyi-auth/src/main/java/org/dromara/auth/form/ResidentLoginBody.java new file mode 100644 index 00000000..818ca029 --- /dev/null +++ b/ruoyi-auth/src/main/java/org/dromara/auth/form/ResidentLoginBody.java @@ -0,0 +1,31 @@ +package org.dromara.auth.form; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.domain.model.LoginBody; +import org.hibernate.validator.constraints.Length; + +/** + * @author lsm + * @apiNote ResidentLoginBody + * @since 2025/9/5 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class ResidentLoginBody extends LoginBody { + + /** + * 用户名 + */ + @NotBlank(message = "{user.username.not.blank}") + @Length(min = 2, max = 30, message = "{user.username.length.valid}") + private String username; + + /** + * 用户密码 + */ + @NotBlank(message = "{user.password.not.blank}") + @Length(min = 5, max = 30, message = "{user.password.length.valid}") + private String password; +} diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/service/impl/ResidentAuthStrategy.java b/ruoyi-auth/src/main/java/org/dromara/auth/service/impl/ResidentAuthStrategy.java new file mode 100644 index 00000000..3c23b388 --- /dev/null +++ b/ruoyi-auth/src/main/java/org/dromara/auth/service/impl/ResidentAuthStrategy.java @@ -0,0 +1,68 @@ +package org.dromara.auth.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import cn.dev33.satoken.stp.parameter.SaLoginParameter; +import cn.hutool.crypto.digest.BCrypt; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.auth.domain.vo.LoginVo; +import org.dromara.auth.form.PasswordLoginBody; +import org.dromara.auth.service.IAuthStrategy; +import org.dromara.auth.service.SysLoginService; +import org.dromara.common.core.enums.LoginType; +import org.dromara.common.core.utils.ValidatorUtils; +import org.dromara.common.json.utils.JsonUtils; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.tenant.helper.TenantHelper; +import org.dromara.property.api.RemoteResidentPersonService; +import org.dromara.property.api.model.LoginResidentPerson; +import org.dromara.system.api.domain.vo.RemoteClientVo; +import org.springframework.stereotype.Service; + +/** + * @author lsm + * @apiNote ResidentAuthStrategy + * @since 2025/9/5 + */ +@Slf4j +@Service("resident" + IAuthStrategy.BASE_NAME) +@RequiredArgsConstructor +public class ResidentAuthStrategy implements IAuthStrategy { + + private final SysLoginService loginService; + + @DubboReference + private RemoteResidentPersonService remoteResidentPersonService; + + @Override + public LoginVo login(String body, RemoteClientVo client) { + PasswordLoginBody loginBody = JsonUtils.parseObject(body, PasswordLoginBody.class); + ValidatorUtils.validate(loginBody); + assert loginBody != null; + String tenantId = loginBody.getTenantId(); + String username = loginBody.getUsername(); + String password = loginBody.getPassword(); + + LoginResidentPerson loginUser = TenantHelper.dynamic(tenantId, () -> { + LoginResidentPerson user = remoteResidentPersonService.getResidentPersonInfo(username, tenantId); + loginService.checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword())); + return user; + }); + loginUser.setClientKey(client.getClientKey()); + SaLoginParameter model = new SaLoginParameter(); + model.setDeviceType(client.getDeviceType()); + // 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置 + // 例如: 后台用户30分钟过期 app用户1天过期 + model.setTimeout(client.getTimeout()); + model.setActiveTimeout(client.getActiveTimeout()); + model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId()); + LoginHelper.residentLogin(loginUser, model); + + LoginVo loginVo = new LoginVo(); + loginVo.setAccessToken(StpUtil.getTokenValue()); + loginVo.setExpireIn(StpUtil.getTokenTimeout()); + loginVo.setClientId(client.getClientId()); + return loginVo; + } +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/residentPerson/ResidentPersonException.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/residentPerson/ResidentPersonException.java new file mode 100644 index 00000000..eae962d8 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/residentPerson/ResidentPersonException.java @@ -0,0 +1,19 @@ +package org.dromara.common.core.exception.residentPerson; + +import org.dromara.common.core.exception.base.BaseException; + +import java.io.Serial; + +/** + * @author lsm + * @apiNote ResidentPersonException + * @since 2025/9/5 + */ +public class ResidentPersonException extends BaseException { + @Serial + private static final long serialVersionUID = 1L; + + public ResidentPersonException(String message) { + super("residentPerson", null, null, message); + } +} diff --git a/ruoyi-common/ruoyi-common-satoken/pom.xml b/ruoyi-common/ruoyi-common-satoken/pom.xml index 5643acb8..82beefe3 100644 --- a/ruoyi-common/ruoyi-common-satoken/pom.xml +++ b/ruoyi-common/ruoyi-common-satoken/pom.xml @@ -35,6 +35,11 @@ ruoyi-api-system + + org.dromara + property-api + + org.dromara diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java index e6b0404f..7b0b2125 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java @@ -8,10 +8,13 @@ import org.dromara.common.core.service.PermissionService; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.property.api.model.LoginResidentPerson; import org.dromara.system.api.model.LoginUser; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Objects; /** * sa-token 权限管理实现类 @@ -26,15 +29,30 @@ public class SaPermissionImpl implements StpInterface { @Override public List getPermissionList(Object loginId, String loginType) { LoginUser loginUser = LoginHelper.getLoginUser(); - if (ObjectUtil.isNull(loginUser) || !loginUser.getLoginId().equals(loginId)) { + LoginResidentPerson loginResidentPerson = LoginHelper.getLoginResident(); + // 使用Objects.equals进行null安全的比较 + boolean isUserMatch = ObjectUtil.isNotNull(loginUser) && Objects.equals(loginUser.getLoginId(), loginId); + boolean isResidentMatch = ObjectUtil.isNotNull(loginResidentPerson) && Objects.equals(loginResidentPerson.getLoginId(), loginId); + if (isUserMatch) { + // 用户匹配时的逻辑 PermissionService permissionService = getPermissionService(); - if (ObjectUtil.isNotNull(permissionService)) { - List list = StringUtils.splitList(loginId.toString(), ":"); - return new ArrayList<>(permissionService.getMenuPermission(Long.parseLong(list.get(1)))); - } else { + if (ObjectUtil.isNull(permissionService)) { throw new ServiceException("PermissionService 实现类不存在"); } + List parts = StringUtils.splitList(loginId.toString(), ":"); + return new ArrayList<>(permissionService.getMenuPermission(Long.parseLong(parts.get(1)))); + } else if (isResidentMatch) { + // 居民匹配时的逻辑 + return Arrays.asList( + "resident:person:list", + "resident:person:add", + "resident:person:query", + "resident:person:edit", + "resident:person:remove" + ); } + + UserType userType = UserType.getUserType(loginUser.getUserType()); if (userType == UserType.APP_USER) { // 其他端 自行根据业务编写 diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java index 7d2136e6..69bd60ec 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java @@ -11,6 +11,7 @@ import lombok.NoArgsConstructor; import org.dromara.common.core.constant.SystemConstants; import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.enums.UserType; +import org.dromara.property.api.model.LoginResidentPerson; import org.dromara.system.api.model.LoginUser; import java.util.Set; @@ -83,6 +84,57 @@ public class LoginHelper { return (T) session.get(LOGIN_USER_KEY); } + + /** + * 入驻员工 + */ + private static final String UNIT_KEY = "unitId"; + public static final String UNIT_NAME_KEY = "unitName"; + private static final String RESIDENT_PERSON_KEY = "residentPerson"; + + /** + * 登录系统 基于 设备类型 + * 针对相同用户体系不同设备 + * + * @param loginUser 登录用户信息 + * @param model 配置参数 + */ + public static void residentLogin(LoginResidentPerson loginUser, SaLoginParameter model) { + model = ObjectUtil.defaultIfNull(model, new SaLoginParameter()); + StpUtil.login(loginUser.getLoginId(), + model.setExtra(TENANT_KEY, loginUser.getTenantId()) + .setExtra(USER_KEY, loginUser.getUserId()) + .setExtra(USER_NAME_KEY, loginUser.getUsername()) + .setExtra(UNIT_KEY, loginUser.getUnitId()) + .setExtra(UNIT_NAME_KEY, loginUser.getUnitName()) + ); + StpUtil.getTokenSession().set(RESIDENT_PERSON_KEY, loginUser); + } + + /** + * 获取用户(多级缓存) + */ + @SuppressWarnings("unchecked cast") + public static T getLoginResident() { + SaSession session = StpUtil.getTokenSession(); + if (ObjectUtil.isNull(session)) { + return null; + } + return (T) session.get(RESIDENT_PERSON_KEY); + } + + /** + * 获取用户基于token + */ + @SuppressWarnings("unchecked cast") + public static T getLoginResident(String token) { + SaSession session = StpUtil.getTokenSessionByToken(token); + if (ObjectUtil.isNull(session)) { + return null; + } + return (T) session.get(RESIDENT_PERSON_KEY); + } + /** * 获取用户id */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentPersonController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentPersonController.java index 2ac858dc..773c5223 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentPersonController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentPersonController.java @@ -9,8 +9,7 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; import lombok.extern.slf4j.Slf4j; -import org.dromara.common.excel.core.ExcelResult; -import org.dromara.property.domain.vo.ResidentPersonImportVo; +import org.dromara.property.domain.vo.residentVo.ResidentPersonImportVo; import org.dromara.property.listener.ResidentPersonImportListener; import org.dromara.property.utils.UploadFaceUtil; import org.springframework.http.MediaType; @@ -26,8 +25,8 @@ import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.property.domain.vo.ResidentPersonVo; -import org.dromara.property.domain.bo.ResidentPersonBo; +import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; +import org.dromara.property.domain.bo.residentBo.ResidentPersonBo; import org.dromara.property.service.IResidentPersonService; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.springframework.web.multipart.MultipartFile; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentUnitController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentUnitController.java index bc8a7e0e..0ae747e8 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentUnitController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentUnitController.java @@ -17,8 +17,8 @@ import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.property.domain.vo.ResidentUnitVo; -import org.dromara.property.domain.bo.ResidentUnitBo; +import org.dromara.property.domain.vo.residentVo.ResidentUnitVo; +import org.dromara.property.domain.bo.residentBo.ResidentUnitBo; import org.dromara.property.service.IResidentUnitService; import org.dromara.common.mybatis.core.page.TableDataInfo; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XResidentPersonController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XResidentPersonController.java new file mode 100644 index 00000000..43491054 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XResidentPersonController.java @@ -0,0 +1,114 @@ +package org.dromara.property.controller.xcx; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.web.core.BaseController; +import org.dromara.property.api.model.LoginResidentPerson; +import org.dromara.property.domain.bo.residentBo.ResidentPersonBo; +import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; +import org.dromara.property.service.IResidentPersonService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 移动端访问入驻员工 + * 前端访问路由地址为:/property/person + * + * @author mocheng + * @since 2025-06-19 + */ +@Slf4j +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/xcx/person") +public class XResidentPersonController extends BaseController { + + private final IResidentPersonService residentPersonService; + /** + * 获取登录员工信息 + */ + @GetMapping("/getInfo") + public R getInfo() { + LoginResidentPerson loginUser = LoginHelper.getLoginResident(); + ResidentPersonVo vo = new ResidentPersonVo(); + assert loginUser != null; + vo.setId(loginUser.getUserId()); + vo.setUserName(loginUser.getUsername()); + vo.setUserRoles(loginUser.getUserRoles()); + vo.setUnitId(loginUser.getUnitId()); + vo.setUnitName(loginUser.getUnitName()); + return R.ok(vo); + } + + /** + * 查询单位未审核入驻员工列表 + */ + @SaCheckPermission("resident:person:list") + @GetMapping("/list") + public TableDataInfo list(ResidentPersonBo bo, PageQuery pageQuery) { + return residentPersonService.queryPageList(bo, pageQuery); + } + + /** + * 获取入驻员工详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("resident:person:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(residentPersonService.queryById(id)); + } + + /** + * 新增入驻员工 + */ + @SaCheckPermission("resident:person:add") + @Log(title = "入驻员工", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody ResidentPersonBo bo) { + return toAjax(residentPersonService.insertByBo(bo)); + } + + /** + * 修改入驻员工 + */ + @SaCheckPermission("resident:person:edit") + @Log(title = "入驻员工", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody ResidentPersonBo bo) { + return toAjax(residentPersonService.updateByBo(bo)); + } + + /** + * 删除入驻员工 + * + * @param ids 主键串 + */ + @SaCheckPermission("resident:person:remove") + @Log(title = "入驻员工", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(residentPersonService.deleteWithValidByIds(List.of(ids), true)); + } + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentPersonBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentPersonBo.java similarity index 92% rename from ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentPersonBo.java rename to ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentPersonBo.java index 47fbb1c2..15eca760 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentPersonBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentPersonBo.java @@ -1,6 +1,6 @@ -package org.dromara.property.domain.bo; +package org.dromara.property.domain.bo.residentBo; -import org.dromara.property.domain.ResidentPerson; +import org.dromara.property.domain.entity.resident.ResidentPerson; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; @@ -114,7 +114,7 @@ public class ResidentPersonBo extends BaseEntity { /** * 状态 */ - private Long state = 1L; + private Integer state = 1; /** * 备注 @@ -129,9 +129,10 @@ public class ResidentPersonBo extends BaseEntity { /** * 用户角色(1管理员2普通用户) */ - private String userRoles; + private Integer userRoles; + /** * 是否审核通过(1通过2不通过) */ - private String isAudit; + private Integer isAudit; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentUnitBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentUnitBo.java similarity index 95% rename from ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentUnitBo.java rename to ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentUnitBo.java index 95612baf..1aade1e7 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentUnitBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentUnitBo.java @@ -1,6 +1,6 @@ -package org.dromara.property.domain.bo; +package org.dromara.property.domain.bo.residentBo; -import org.dromara.property.domain.ResidentUnit; +import org.dromara.property.domain.entity.resident.ResidentUnit; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentPerson.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/entity/resident/ResidentPerson.java similarity index 93% rename from ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentPerson.java rename to ruoyi-modules/Property/src/main/java/org/dromara/property/domain/entity/resident/ResidentPerson.java index 00f96171..addd508e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentPerson.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/entity/resident/ResidentPerson.java @@ -1,4 +1,4 @@ -package org.dromara.property.domain; +package org.dromara.property.domain.entity.resident; import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; @@ -87,15 +87,15 @@ public class ResidentPerson extends TenantEntity { /** * 状态 */ - private Long state; + private Integer state; /** * 用户角色(1管理员2普通用户) */ - private String userRoles; + private Integer userRoles; /** * 是否审核通过(1通过2不通过) */ - private String isAudit; + private Integer isAudit; /** * 备注 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentUnit.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/entity/resident/ResidentUnit.java similarity index 96% rename from ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentUnit.java rename to ruoyi-modules/Property/src/main/java/org/dromara/property/domain/entity/resident/ResidentUnit.java index 8faa2608..0b5d4986 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentUnit.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/entity/resident/ResidentUnit.java @@ -1,4 +1,4 @@ -package org.dromara.property.domain; +package org.dromara.property.domain.entity.resident; import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetParticipantsVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetParticipantsVo.java index 9cb0c6a3..35fbc0fc 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetParticipantsVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetParticipantsVo.java @@ -2,11 +2,9 @@ package org.dromara.property.domain.vo; import org.dromara.property.domain.MeetParticipants; 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 org.dromara.property.domain.vo.residentVo.ResidentPersonVo; import java.io.Serial; import java.io.Serializable; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonImportVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonImportVo.java similarity index 85% rename from ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonImportVo.java rename to ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonImportVo.java index b849480e..ebb89f9b 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonImportVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonImportVo.java @@ -1,17 +1,13 @@ -package org.dromara.property.domain.vo; +package org.dromara.property.domain.vo.residentVo; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.NoArgsConstructor; import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; -import org.dromara.property.domain.ResidentPerson; import java.io.Serial; import java.io.Serializable; -import java.util.Date; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonVo.java similarity index 86% rename from ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonVo.java rename to ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonVo.java index 88f0d0b2..9cb930f6 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonVo.java @@ -1,7 +1,8 @@ -package org.dromara.property.domain.vo; +package org.dromara.property.domain.vo.residentVo; import java.util.Date; -import org.dromara.property.domain.ResidentPerson; + +import org.dromara.property.domain.entity.resident.ResidentPerson; import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; @@ -11,7 +12,6 @@ import java.io.Serial; import java.io.Serializable; - /** * 入驻员工视图对象 resident_person * @@ -102,7 +102,7 @@ public class ResidentPersonVo implements Serializable { * 状态 */ @ExcelProperty(value = "状态") - private Long state; + private Integer state; /** * 备注 @@ -143,5 +143,20 @@ public class ResidentPersonVo implements Serializable { */ private Integer rosterType; + /** + * 密码 + */ + private String password; + + /** + * 用户角色(1管理员2普通用户) + */ + private Integer userRoles; + + /** + * 是否审核通过(1通过2不通过) + */ + private Integer isAudit; + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentUnitVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentUnitVo.java similarity index 94% rename from ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentUnitVo.java rename to ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentUnitVo.java index 2e9cc0f6..e93abf8d 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentUnitVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentUnitVo.java @@ -1,7 +1,7 @@ -package org.dromara.property.domain.vo; +package org.dromara.property.domain.vo.residentVo; import java.util.Date; -import org.dromara.property.domain.ResidentUnit; +import org.dromara.property.domain.entity.resident.ResidentUnit; import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java index 9fa95e96..8e5a84f4 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java @@ -1,12 +1,16 @@ package org.dromara.property.dubbo; +import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.property.api.RemoteResidentPersonService; import org.dromara.property.api.domain.vo.RemoteResidentPersonVo; -import org.dromara.property.domain.bo.ResidentPersonBo; -import org.dromara.property.domain.vo.ResidentPersonVo; +import org.dromara.property.api.model.LoginResidentPerson; +import org.dromara.property.domain.bo.residentBo.ResidentPersonBo; +import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; +import org.dromara.common.core.exception.residentPerson.ResidentPersonException; import org.dromara.property.service.IResidentPersonService; import java.util.List; @@ -52,4 +56,44 @@ public class RemoteResidentPersonServiceImpl implements RemoteResidentPersonServ return residentPersonService.updateByBo(bo); } + + /** + * 通过手机号查询用户信息 + * + * @param phone 手机号 + * @param tenantId 租户id + * @return 结果 + */ + public LoginResidentPerson getResidentPersonInfo(String phone, String tenantId) throws ResidentPersonException { + return TenantHelper.dynamic(tenantId, () -> { + ResidentPersonVo vo = residentPersonService.queryByPhone(phone, tenantId); + if (ObjectUtil.isEmpty(vo)) { + throw new ResidentPersonException("入驻员工"); + } + if (vo.getIsAudit() == null || vo.getIsAudit() != 1) { + throw new ResidentPersonException("当前员工未审核"); + } + + if (vo.getState() == 0) { + throw new ResidentPersonException("当前员工账号被禁用"); + } + + if (vo.getState() == 2) { + throw new ResidentPersonException("当前员工已离职"); + } + + LoginResidentPerson login = new LoginResidentPerson(); + login.setTenantId(tenantId); + login.setUserId(vo.getId()); + login.setUsername(vo.getUserName()); + login.setNickname(vo.getUserName()); + login.setPassword(vo.getPassword()); + login.setUserRoles(vo.getUserRoles()); + login.setUnitId(vo.getUnitId()); + login.setUnitName(vo.getUnitName()); + login.setUserType("resident_person"); + return login; + }); + } + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/listener/ResidentPersonImportListener.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/listener/ResidentPersonImportListener.java index 0231a2cf..93e9ca70 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/listener/ResidentPersonImportListener.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/listener/ResidentPersonImportListener.java @@ -15,14 +15,13 @@ import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.excel.core.ExcelListener; import org.dromara.common.excel.core.ExcelResult; import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.property.domain.bo.ResidentPersonBo; -import org.dromara.property.domain.vo.ResidentPersonImportVo; -import org.dromara.property.domain.vo.ResidentPersonVo; -import org.dromara.property.domain.vo.ResidentUnitVo; +import org.dromara.property.domain.bo.residentBo.ResidentPersonBo; +import org.dromara.property.domain.vo.residentVo.ResidentPersonImportVo; +import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; +import org.dromara.property.domain.vo.residentVo.ResidentUnitVo; import org.dromara.property.service.IResidentPersonService; import org.dromara.property.service.IResidentUnitService; -import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -69,7 +68,7 @@ public class ResidentPersonImportListener extends AnalysisEventListener() + .eq(ResidentPerson::getPhone, phone) + .eq(ResidentPerson::getTenantId, tenantId)); } /** @@ -73,6 +89,9 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { public TableDataInfo queryPageList(ResidentPersonBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + result.getRecords().forEach(s -> { + s.setPassword(null); + }); return TableDataInfo.build(result); } @@ -85,7 +104,11 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { @Override public List queryList(ResidentPersonBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); + List residentPersonVos = baseMapper.selectVoList(lqw); + residentPersonVos.forEach(s -> { + s.setPassword(null); + }); + return residentPersonVos; } private LambdaQueryWrapper buildQueryWrapper(ResidentPersonBo bo) { @@ -123,10 +146,11 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { // 首次入驻新用户权限组默认使用公司权限 ResidentUnitVo ruVo = residentUnitService.queryById(bo.getUnitId()); - add.setPassword("123456"); + // 密码加密,不存明文密码 + add.setPassword(BCrypt.hashpw("123456")); //查询该单位下是否有管理员 new LambdaQueryWrapper().eq(ResidentPerson::getUnitId, bo.getUnitId()) - .eq(ResidentPerson::getUserRoles, "1"); + .eq(ResidentPerson::getUserRoles, 1); add.setAuthGroupId(ruVo.getAuthGroupId()); add.setAuthBegDate(ruVo.getAuthBegDate()); @@ -188,7 +212,7 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { private void validEntityBeforeSave(ResidentPerson entity) { //TODO 做一些数据校验,如唯一约束 LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(ResidentPerson::getIdCard, entity.getUserName()) + lqw.eq(ResidentPerson::getPhone, entity.getPhone()) .eq(ResidentPerson::getUnitId, entity.getUnitId()); boolean exists = baseMapper.exists(lqw); Assert.isTrue(!exists, "当前单位,{}已入驻!", entity.getUserName()); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java index 9bd9fa87..e44eca30 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java @@ -10,14 +10,14 @@ 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.ResidentPerson; +import org.dromara.property.domain.entity.resident.ResidentPerson; import org.dromara.property.mapper.ResidentPersonMapper; import org.dromara.property.service.IResidentPersonService; import org.dromara.property.service.ITbRoomService; import org.springframework.stereotype.Service; -import org.dromara.property.domain.bo.ResidentUnitBo; -import org.dromara.property.domain.vo.ResidentUnitVo; -import org.dromara.property.domain.ResidentUnit; +import org.dromara.property.domain.bo.residentBo.ResidentUnitBo; +import org.dromara.property.domain.vo.residentVo.ResidentUnitVo; +import org.dromara.property.domain.entity.resident.ResidentUnit; import org.dromara.property.mapper.ResidentUnitMapper; import org.dromara.property.service.IResidentUnitService; import org.springframework.transaction.annotation.Transactional; @@ -32,7 +32,7 @@ import java.util.stream.Collectors; * 入驻单位Service业务层处理 * * @author mocheng - * @date 2025-06-19 + * @since 2025-06-19 */ @Slf4j @RequiredArgsConstructor @@ -139,16 +139,16 @@ public class ResidentUnitServiceImpl implements IResidentUnitService { /** * 新增一个管理员 - * @param unit + * @param unit 入驻单位 */ private void addResidentPerson(ResidentUnit unit) { ResidentPerson residentPerson = new ResidentPerson(); residentPerson.setUserName(unit.getContactPerson()); residentPerson.setPhone(unit.getPhone().toString()); residentPerson.setGender(1L); - residentPerson.setState(2L); - residentPerson.setUserRoles("1"); - residentPerson.setIsAudit("1"); + residentPerson.setState(2); + residentPerson.setUserRoles(1); + residentPerson.setIsAudit(1); residentPerson.setAuthGroupId(unit.getAuthGroupId()); residentPerson.setAuthBegDate(unit.getAuthBegDate()); residentPerson.setAuthEndDate(unit.getAuthEndDate()); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServerBookingServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServerBookingServiceImpl.java index 441baa60..14919434 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServerBookingServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServerBookingServiceImpl.java @@ -9,7 +9,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.property.domain.ResidentUnit; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.ServerBookingBo; import org.dromara.property.domain.vo.ServerBookingVo; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java index bf6a03b9..e43c7040 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java @@ -301,6 +301,7 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService { private Map trendMonthData(String floorId, String meterId, Long meterType, String year) { Map resultMap = new HashMap<>(); List> monthList = baseMapper.getMonthTrend(StrUtil.isBlank(floorId) ? null : Long.parseLong(floorId), StrUtil.isBlank(meterId) ? null : Long.parseLong(meterId), meterType, year); + log.info("year:{},monthList:{}", year, monthList); List monthData = new ArrayList<>(); monthList.forEach(item -> monthData.add(new String[]{item.get("month").toString(), item.get("total_consumption").toString()})); Float total = monthList.stream().map(map -> new BigDecimal(map.get("total_consumption").toString())).reduce(BigDecimal::add).orElse(BigDecimal.ZERO).floatValue(); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/InspectionTasks.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/InspectionTasks.java index a15a866d..3f47d06e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/InspectionTasks.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/InspectionTasks.java @@ -13,7 +13,7 @@ import org.dromara.property.domain.InspectionTask; import org.dromara.property.domain.bo.InspectionPlanBo; import org.dromara.property.domain.vo.InspectionPlanStaffVo; import org.dromara.property.domain.vo.InspectionPlanVo; -import org.dromara.property.domain.vo.ResidentPersonVo; +import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; import org.dromara.property.mapper.InspectionPlanStaffMapper; import org.dromara.property.mapper.InspectionTaskMapper; import org.dromara.property.mapper.ResidentPersonMapper; @@ -21,10 +21,6 @@ import org.dromara.property.service.IInspectionPlanService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; import java.time.LocalTime; @@ -35,8 +31,6 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; -import static org.dromara.common.mybatis.core.mapper.BaseMapperPlus.log; - /** * @Author:yuyongle * @Date:2025/7/11 15:28 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/MachineTasks.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/MachineTasks.java index c3f8b73f..45b12581 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/MachineTasks.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/MachineTasks.java @@ -14,7 +14,7 @@ import org.dromara.property.domain.MachineMaintainTask; import org.dromara.property.domain.bo.MachineMaintainPlanBo; import org.dromara.property.domain.vo.MachineMaintainPlanStaffVo; import org.dromara.property.domain.vo.MachineMaintainPlanVo; -import org.dromara.property.domain.vo.ResidentPersonVo; +import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; import org.dromara.property.mapper.MachineMaintainPlanStaffMapper; import org.dromara.property.mapper.MachineMaintainTaskMapper; import org.dromara.property.mapper.ResidentPersonMapper; @@ -22,10 +22,6 @@ import org.dromara.property.service.IMachineMaintainPlanService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; import java.time.LocalTime; @@ -36,8 +32,6 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; -import static org.dromara.common.mybatis.core.mapper.BaseMapperPlus.log; - /** * @Author:yuyongle * @Date:2025/7/17 09:25 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/UploadFaceUtil.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/UploadFaceUtil.java index 7046e48b..38a93128 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/UploadFaceUtil.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/UploadFaceUtil.java @@ -4,8 +4,8 @@ import cn.hutool.core.bean.BeanUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; -import org.dromara.property.domain.bo.ResidentPersonBo; -import org.dromara.property.domain.vo.ResidentPersonVo; +import org.dromara.property.domain.bo.residentBo.ResidentPersonBo; +import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; import org.dromara.property.service.IResidentPersonService; import org.dromara.resource.api.RemoteFileService; import org.dromara.resource.api.domain.RemoteFile; diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/smartDevicesService/TbMeterReocordMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/smartDevicesService/TbMeterReocordMapper.xml index b56d55e2..0a3f97ee 100644 --- a/ruoyi-modules/Property/src/main/resources/mapper/Property/smartDevicesService/TbMeterReocordMapper.xml +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/smartDevicesService/TbMeterReocordMapper.xml @@ -53,8 +53,8 @@ AND a.meter_id = #{meterId} - GROUP BY MONTH(reading_time) - ORDER BY `month`; + GROUP BY `month` + ORDER BY `month` -- 2.43.0 From 391bf01ce794ccbce0ff8024267bd885532f5a1f Mon Sep 17 00:00:00 2001 From: 15683799673 Date: Fri, 5 Sep 2025 18:02:04 +0800 Subject: [PATCH 04/14] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=91=8A=E8=AD=A6?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SisAlarmEventsController.java | 21 ++++++++++++++++ .../sis/domain/vo/QueryStatisticsAlarmVo.java | 25 +++++++++++++++++++ .../sis/mapper/SisAlarmEventsMapper.java | 10 ++++++++ .../sis/service/ISisAlarmEventsService.java | 19 +++++++++++++- .../impl/SisAlarmEventsServiceImpl.java | 12 +++++++++ .../mapper/sis/SisAlarmEventsMapper.xml | 14 +++++++++++ 6 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/QueryStatisticsAlarmVo.java diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventsController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventsController.java index 3c164ae2..0f3046ae 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventsController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventsController.java @@ -19,6 +19,7 @@ import org.dromara.common.web.core.BaseController; import org.dromara.sis.domain.bo.SisAlarmEventsBo; import org.dromara.sis.domain.bo.alarm.AlarmAssignmentBo; import org.dromara.sis.domain.bo.alarm.AlarmCompleteBo; +import org.dromara.sis.domain.vo.QueryStatisticsAlarmVo; import org.dromara.sis.domain.vo.SisAlarmEventsVo; import org.dromara.sis.service.ISisAlarmEventsService; import org.dromara.system.api.model.LoginUser; @@ -161,5 +162,25 @@ public class SisAlarmEventsController extends BaseController { return sisAlarmEventsService.queryCurrAssignment(bo, pageQuery); } + /** + * 分类查询当日预警数据 + * + * @return 返回预警统计数据 + */ + @GetMapping("/query/statistics/currDay") + public R> queryStatisticsCurrDay() { + List vo = sisAlarmEventsService.queryStatisticsCurrDay(); + return R.ok(vo); + } + /** + * 分类查询所有的预警信息 + * + * @return 返回预警统计数据 + */ + @GetMapping("/query/statistics") + public R> queryStatistics() { + List vo = sisAlarmEventsService.queryStatistics(); + return R.ok(vo); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/QueryStatisticsAlarmVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/QueryStatisticsAlarmVo.java new file mode 100644 index 00000000..794cc646 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/QueryStatisticsAlarmVo.java @@ -0,0 +1,25 @@ +package org.dromara.sis.domain.vo; + +import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; + +@Data +public class QueryStatisticsAlarmVo { + + /** + * 预警类型 + */ + private Integer typeCode; + + /** + * 预警类型名称 + */ + @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "typeCode", other = "event_small_type") + private String typeName; + + /** + * 预警总数 + */ + private Integer total; +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAlarmEventsMapper.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAlarmEventsMapper.java index 2aee9ab4..c929b4ee 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAlarmEventsMapper.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAlarmEventsMapper.java @@ -1,9 +1,14 @@ package org.dromara.sis.mapper; +import org.apache.ibatis.annotations.Param; import org.dromara.sis.domain.SisAlarmEvents; +import org.dromara.sis.domain.vo.QueryStatisticsAlarmVo; import org.dromara.sis.domain.vo.SisAlarmEventsVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import java.util.Date; +import java.util.List; + /** * 告警Mapper接口 * @@ -12,4 +17,9 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; */ public interface SisAlarmEventsMapper extends BaseMapperPlus { + List queryStatisticsCurrDay(@Param("now") Date now); + + List queryStatistics(); + + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java index ec33a236..46f152e2 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java @@ -7,6 +7,7 @@ import org.dromara.sis.domain.bo.SisAlarmEventsBo; import org.dromara.sis.domain.bo.alarm.AlarmAssignmentBo; import org.dromara.sis.domain.bo.alarm.AlarmCompleteBo; import org.dromara.sis.domain.enums.EventSmallTypeEnum; +import org.dromara.sis.domain.vo.QueryStatisticsAlarmVo; import org.dromara.sis.domain.vo.SisAlarmEventsVo; import java.util.Collection; @@ -84,6 +85,7 @@ public interface ISisAlarmEventsService { /** * 任务分配操作 + * * @param bo 分配参数 * @return 返回是否分配成功 */ @@ -91,7 +93,8 @@ public interface ISisAlarmEventsService { /** * 查询当前用户的告警处理任务 - * @param bo 查询参数 + * + * @param bo 查询参数 * @param pageQuery 分页参数 * @return 返回任务列表 */ @@ -99,10 +102,24 @@ public interface ISisAlarmEventsService { /** * 任务完成 + * * @param bo 任务完成参数 * @return 返回是否成功 */ Boolean complete(AlarmCompleteBo bo); + /** + * 分类统计进入预警数量 + * + * @return 返回预警统计信息 + */ + List queryStatisticsCurrDay(); + + /** + * 分类查询总的预警数量 + * @return 返回预警信息 + */ + List queryStatistics(); + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java index 02f4b36e..2f59f655 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java @@ -30,6 +30,7 @@ import org.dromara.sis.domain.bo.alarm.AlarmCompleteBo; import org.dromara.sis.domain.enums.AlarmStatus; import org.dromara.sis.domain.enums.EventBigTypeEnum; import org.dromara.sis.domain.enums.EventSmallTypeEnum; +import org.dromara.sis.domain.vo.QueryStatisticsAlarmVo; import org.dromara.sis.domain.vo.SisAlarmEventsVo; import org.dromara.sis.mapper.SisAlarmEventsMapper; import org.dromara.sis.service.ISisAlarmEventAttachmentsService; @@ -349,4 +350,15 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { return true; } + + @Override + public List queryStatisticsCurrDay() { + Date now = new Date(); + return this.baseMapper.queryStatisticsCurrDay(now); + } + + @Override + public List queryStatistics() { + return this.baseMapper.queryStatistics(); + } } diff --git a/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAlarmEventsMapper.xml b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAlarmEventsMapper.xml index fe53102b..83318a47 100644 --- a/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAlarmEventsMapper.xml +++ b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAlarmEventsMapper.xml @@ -4,4 +4,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + -- 2.43.0 From 6538635e6dc92b8014e70b7806c3463427162c9f Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Fri, 5 Sep 2025 19:07:41 +0800 Subject: [PATCH 05/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E5=B7=A1?= =?UTF-8?q?=E6=A3=80=E6=98=8E=E7=BB=86bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CustomerFeedbacksController.java | 2 +- .../property/controller/IndexController.java | 32 ++++ .../MInspectionTaskDetailController.java | 10 +- .../property/domain/CustomerFeedbacks.java | 4 +- .../property/domain/InspectionTaskDetail.java | 6 +- .../org/dromara/property/domain/Meet.java | 4 + .../domain/bo/CustomerFeedbacksBo.java | 7 +- .../dromara/property/domain/bo/MeetBo.java | 3 + .../dromara/property/domain/bo/TbRoomBo.java | 9 + .../mobile/InspectionTaskDetailToOrderBo.java | 121 +++++++++++++ .../domain/vo/CustomerFeedbacksVo.java | 9 +- .../property/domain/vo/IndexCountVo.java | 134 +++++++++++++++ .../domain/vo/InspectionTaskDetailVo.java | 5 +- .../dromara/property/domain/vo/MeetVo.java | 3 + .../domain/vo/ServiceWorkOrdersVo.java | 7 +- .../dromara/property/domain/vo/TbRoomVo.java | 18 ++ .../vo/mobile/MInspectionTaskDetailVo.java | 9 + .../service/IInspectionTaskDetailService.java | 8 + .../property/service/IndexService.java | 15 ++ .../impl/CustomerFeedbacksServiceImpl.java | 40 +++-- .../service/impl/IndexServiceImpl.java | 128 ++++++++++++++ .../impl/InspectionTaskDetailServiceImpl.java | 161 +++++++++++++++--- .../service/impl/TbRoomServiceImpl.java | 41 ++++- 23 files changed, 718 insertions(+), 58 deletions(-) create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/IndexController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/mobile/InspectionTaskDetailToOrderBo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/IndexCountVo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/service/IndexService.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/IndexServiceImpl.java diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerFeedbacksController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerFeedbacksController.java index bb26c674..2a9c7937 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerFeedbacksController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerFeedbacksController.java @@ -40,7 +40,7 @@ public class CustomerFeedbacksController extends BaseController { /** * 查询客户服务-意见反馈列表 */ - // @SaCheckPermission("system:feedbacks:list") + @SaCheckPermission("system:feedbacks:list") @GetMapping("/list") public TableDataInfo list(CustomerFeedbacksBo bo, PageQuery pageQuery) { return customerFeedbacksService.queryPageList(bo, pageQuery); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/IndexController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/IndexController.java new file mode 100644 index 00000000..777b25a9 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/IndexController.java @@ -0,0 +1,32 @@ +package org.dromara.property.controller; + + +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.property.domain.vo.IndexCountVo; +import org.dromara.property.service.IndexService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author yuyongle + * @version 1.0 + * @description: 首页展示数据 + * @date 2025/9/5 14:35 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/index") +public class IndexController { + private final IndexService indexService; + /** + * 首页统计数量 + */ + @GetMapping("/indexCount") + public R indexCount() { + return R.ok(indexService.indexCount()); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskDetailController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskDetailController.java index 4b5010ba..4a2d6854 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskDetailController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskDetailController.java @@ -8,6 +8,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; import org.dromara.property.domain.bo.InspectionTaskDetailBo; +import org.dromara.property.domain.bo.mobile.InspectionTaskDetailToOrderBo; import org.dromara.property.domain.vo.mobile.MInspectionTaskDetailVo; import org.dromara.property.service.IInspectionTaskDetailService; import org.springframework.validation.annotation.Validated; @@ -35,7 +36,7 @@ public class MInspectionTaskDetailController extends BaseController { /** - * 修改巡检明细 + * 扫码签到 */ @PostMapping("/signIn") public R signIn(@Validated(EditGroup.class) @RequestBody InspectionTaskDetailBo bo) { @@ -48,4 +49,11 @@ public class MInspectionTaskDetailController extends BaseController { public R submit(@Validated(EditGroup.class) @RequestBody InspectionTaskDetailBo bo) { return toAjax(inspectionTaskDetailService.submit(bo)); } + /** + * 巡检提报工单 + */ + @PostMapping("/reportedOrder") + public R reportedOrder(@Validated(EditGroup.class) @RequestBody InspectionTaskDetailToOrderBo bo) { + return toAjax(inspectionTaskDetailService.reportedOrder(bo)); + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CustomerFeedbacks.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CustomerFeedbacks.java index f0f9a840..4ae8e33a 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CustomerFeedbacks.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CustomerFeedbacks.java @@ -72,7 +72,7 @@ public class CustomerFeedbacks extends TenantEntity { private String status; /** - * 客服电话 + * 反馈单位 */ - private String serviceName; + private Long feedbackUnit; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java index 9ac75503..57a52f6e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java @@ -1,5 +1,6 @@ package org.dromara.property.domain; +import cn.idev.excel.annotation.ExcelProperty; import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; @@ -115,7 +116,10 @@ public class InspectionTaskDetail extends TenantEntity { * 点结束时间 */ private Date pointEndTime; - + /** + * 工单id + */ + private Long orderId; /** * 搜索值 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Meet.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Meet.java index 6567fad3..e57051ef 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Meet.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Meet.java @@ -1,5 +1,6 @@ package org.dromara.property.domain; +import cn.idev.excel.annotation.ExcelProperty; import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; @@ -41,6 +42,9 @@ public class Meet extends TenantEntity { * 5圆形会议室 * 6贵宾会议室) */ + + private String secrecyGrade; + private String meetingRoomType; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CustomerFeedbacksBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CustomerFeedbacksBo.java index 8e995092..eadb50fc 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CustomerFeedbacksBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CustomerFeedbacksBo.java @@ -76,11 +76,8 @@ public class CustomerFeedbacksBo extends BaseEntity { * 客服电话 */ private String serviceName; - /** - * 搜索值 + * 反馈单位 */ - private String searchValue; - - + private Long feedbackUnit; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetBo.java index 20eb0676..491b6898 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetBo.java @@ -45,6 +45,9 @@ public class MeetBo extends BaseEntity { * 5圆形会议室 * 6贵宾会议室) */ + @ExcelProperty(value = "保密等级") + private String secrecyGrade; + @NotBlank(message = "会议室类型不能为空") private String meetingRoomType; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbRoomBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbRoomBo.java index bfc8aeeb..9a0deafc 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbRoomBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbRoomBo.java @@ -79,4 +79,13 @@ public class TbRoomBo extends BaseEntity { * 是否重要(1非常重要、2重要、3一般) */ private String imgUrl; + /** + * 园区id + */ + private Long communityId; + + /** + * 建筑id + */ + private Long buildingId; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/mobile/InspectionTaskDetailToOrderBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/mobile/InspectionTaskDetailToOrderBo.java new file mode 100644 index 00000000..b281af32 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/mobile/InspectionTaskDetailToOrderBo.java @@ -0,0 +1,121 @@ +package org.dromara.property.domain.bo.mobile; + + +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; + +import java.util.Date; + +/** + * @author yuyongle + * @version 1.0 + * @description: TODO + * @date 2025/9/5 11:40 + */ +@Data +public class InspectionTaskDetailToOrderBo { + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + /** + * 工单类型id + */ + @NotNull(message = "工单类型id不能为空", groups = { EditGroup.class }) + private Long orderTypeId; + /** + * 任务id + */ + @NotNull(message = "任务id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long taskId; + + /** + * 路线id + */ + private Long routeId; + + /** + * 巡检计划id + */ + @NotNull(message = "巡检计划id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long planId; + + /** + * 巡检点id + */ + private Long pointId; + + /** + * 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码) + */ + private String signType; + + /** + * 实际巡检时间 + */ + private Date actualInspectionTime; + + /** + * 实际签到状态(1已签到2.未签到) + */ + private String actualSignState; + + /** + * 巡检状态(0未完成,1已完成) + */ + private String inspectionState; + + /** + * 巡检图片 + */ + private String inspectionImage; + + /** + * 计划巡检人 + */ + private String planInspectionPerson; + + /** + * 实际巡检人 + */ + private String actualInspectionPerson; + + + /** + * 巡检结果 + */ + private String inspectionResults; + + /** + * 巡检描述 + */ + private String inspectionDesc; + + /** + * 巡检位置 + */ + private String inspectionLocation; + + /** + * 实际巡检时间 + */ + private Date inspectionTime; + + /** + * 备注 + */ + private String remark; + + /** + * 点开始时间 + */ + private Date pointStartTime; + + /** + * 点结束时间 + */ + private Date pointEndTime; +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CustomerFeedbacksVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CustomerFeedbacksVo.java index 7784ed58..6acdb93d 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CustomerFeedbacksVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CustomerFeedbacksVo.java @@ -94,10 +94,13 @@ public class CustomerFeedbacksVo implements Serializable { private String status; /** - * 客服电话 + * 反馈单位 */ - @ExcelProperty(value = "客服电话") - private String serviceName; + private Long feedbackUnit; + /** + * 反馈单位文本 + */ + private String feedbackUnitText; /** * 搜索值 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/IndexCountVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/IndexCountVo.java new file mode 100644 index 00000000..ceb63769 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/IndexCountVo.java @@ -0,0 +1,134 @@ +package org.dromara.property.domain.vo; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.List; + +@Data +@Accessors(chain = true) +@NoArgsConstructor // 无参构造用于反序列化 +@AllArgsConstructor(access = AccessLevel.PRIVATE) // 私有全参构造,供 Builder 使用 +public class IndexCountVo { + + private Integer workOrdersTotal; // 总工单数 + private Integer workOrdersToday; // 今日工单数 + private List satisfactionChartList; // 工单类型分布饼图 + private List statusChartVoChartList; // 设备状态分布图表 + private Integer visitorsToday; // 今日访客数 + private Integer visitorsTotal; // 总访客数 + + @Data + @Accessors(chain = true) + @NoArgsConstructor + @AllArgsConstructor(access = AccessLevel.PRIVATE) + public static class PieChartVo { + private String type; // 类型名称(如:维修、咨询) + private Integer quantity; // 数量 + + public static PieChartVoBuilder builder() { + return new PieChartVoBuilder(); + } + + public static class PieChartVoBuilder { + private String type; + private Integer quantity; + + public PieChartVoBuilder type(String type) { + this.type = type; + return this; + } + + public PieChartVoBuilder quantity(Integer quantity) { + this.quantity = quantity; + return this; + } + + public PieChartVo build() { + return new PieChartVo(type, quantity); + } + } + } + + @Data + @Accessors(chain = true) + @NoArgsConstructor + @AllArgsConstructor(access = AccessLevel.PRIVATE) + public static class StatusChartVo { + private String type; // 类型名称(如:维修、咨询) + private Integer quantity; // 数量 + + public static StatusChartVoBuilder builder() { + return new StatusChartVoBuilder(); + } + + public static class StatusChartVoBuilder { + private String type; + private Integer quantity; + + public StatusChartVoBuilder type(String type) { + this.type = type; + return this; + } + + public StatusChartVoBuilder quantity(Integer quantity) { + this.quantity = quantity; + return this; + } + + public StatusChartVo build() { + return new StatusChartVo(type, quantity); + } + } + } + + public static IndexCountVoBuilder builder() { + return new IndexCountVoBuilder(); + } + + public static class IndexCountVoBuilder { + private Integer workOrdersTotal; + private Integer workOrdersToday; + private List satisfactionChartList; + private List statusChartVoChartList; + private Integer visitorsToday; + private Integer visitorsTotal; + + public IndexCountVoBuilder workOrdersTotal(Integer workOrdersTotal) { + this.workOrdersTotal = workOrdersTotal; + return this; + } + + public IndexCountVoBuilder workOrdersToday(Integer workOrdersToday) { + this.workOrdersToday = workOrdersToday; + return this; + } + + public IndexCountVoBuilder visitorsToday(Integer visitorsToday) { + this.visitorsToday = visitorsToday; + return this; + } + + public IndexCountVoBuilder visitorsTotal(Integer visitorsTotal) { + this.visitorsTotal = visitorsTotal; + return this; + } + + public IndexCountVoBuilder satisfactionChartList(List satisfactionChartList) { + this.satisfactionChartList = satisfactionChartList; + return this; + } + + public IndexCountVoBuilder statusChartVoChartList(List statusChartVoChartList) { + this.statusChartVoChartList = statusChartVoChartList; + return this; + } + + public IndexCountVo build() { + return new IndexCountVo(workOrdersTotal, workOrdersToday, satisfactionChartList, statusChartVoChartList, visitorsToday, visitorsTotal); + } + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskDetailVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskDetailVo.java index c6541115..e1a48883 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskDetailVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskDetailVo.java @@ -58,7 +58,10 @@ public class InspectionTaskDetailVo implements Serializable { */ @ExcelProperty(value = "路线text") private String routeText; - + /** + * 工单id + */ + private Long orderId; /** * 巡检计划id */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetVo.java index b562928e..47dc24de 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetVo.java @@ -48,6 +48,9 @@ public class MeetVo implements Serializable { */ @ExcelProperty(value = "会议室类型") private String meetingRoomType; + + @ExcelProperty(value = "保密等级") + private String secrecyGrade; /** * 会议室位置 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java index 5ab02bee..ff8ba198 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java @@ -5,11 +5,12 @@ import cn.idev.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.dromara.property.domain.ServiceWorkOrders; +import org.dromara.property.domain.vo.mobile.MServiceWorkOrdersRecordVo; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -156,4 +157,8 @@ public class ServiceWorkOrdersVo implements Serializable { * 创建时间 */ private Date createTime; + /** + * 工单记录 + */ + List recordVoList; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbRoomVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbRoomVo.java index 4290fc39..35e6d934 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbRoomVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbRoomVo.java @@ -56,6 +56,11 @@ public class TbRoomVo implements Serializable { */ @ExcelProperty(value = "所属楼层ID") private Long floorId; + /** + * 所属楼层text + */ + @ExcelProperty(value = "所属楼层Text") + private String floorText; /** * 房间号(如101,202) @@ -120,4 +125,17 @@ public class TbRoomVo implements Serializable { * 图片 */ private String imgUrl; + /** + * 园区文本 + */ + private String communityText; + + /** + * 建筑文本 + */ + private String buildingText; + /** + * 入驻单位文本 + */ + private String residentUnitText; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionTaskDetailVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionTaskDetailVo.java index 7f919127..ef1e0260 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionTaskDetailVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionTaskDetailVo.java @@ -84,6 +84,11 @@ public class MInspectionTaskDetailVo { */ @ExcelProperty(value = "巡检计划id") private Long planId; + /** + * 工单id + */ + @ExcelProperty(value = "工单id") + private Long orderId; /** * 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码) @@ -158,4 +163,8 @@ public class MInspectionTaskDetailVo { */ @ExcelProperty(value = "备注") private String remark; + /** + * 工单 + */ + private MServiceWorkOrdersVo mServiceWorkOrdersVo; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java index 1e142436..5b4f3626 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java @@ -1,5 +1,6 @@ package org.dromara.property.service; +import org.dromara.property.domain.bo.mobile.InspectionTaskDetailToOrderBo; import org.dromara.property.domain.vo.InspectionTaskDetailVo; import org.dromara.property.domain.bo.InspectionTaskDetailBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -87,4 +88,11 @@ public interface IInspectionTaskDetailService { * 提交巡检明细 */ Boolean submit(InspectionTaskDetailBo bo); + + /** + * 巡检提报工单 + * @param bo + * @return + */ + Boolean reportedOrder(InspectionTaskDetailToOrderBo bo); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IndexService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IndexService.java new file mode 100644 index 00000000..f7ba1d94 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IndexService.java @@ -0,0 +1,15 @@ +package org.dromara.property.service; + +import org.dromara.property.domain.vo.IndexCountVo; + +/** + * 首页展示数据 + * @author yuyongle + * @date 2025-06-21 + */ +public interface IndexService { + /** + * 首页统计数量 + */ + IndexCountVo indexCount(); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CustomerFeedbacksServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CustomerFeedbacksServiceImpl.java index bbd57e96..81bfb14c 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CustomerFeedbacksServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CustomerFeedbacksServiceImpl.java @@ -3,26 +3,26 @@ package org.dromara.property.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; +import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.property.domain.*; +import org.dromara.property.domain.CustomerFeedbacks; +import org.dromara.property.domain.ServiceWorkOrders; +import org.dromara.property.domain.ServiceWorkOrdersRecord; +import org.dromara.property.domain.ServiceWorkOrdersType; import org.dromara.property.domain.bo.CustomerFeedbacksBo; -import org.dromara.property.domain.bo.ServiceWorkOrdersBo; import org.dromara.property.domain.vo.CustomerFeedbacksVo; -import org.dromara.property.domain.vo.CustomerNoticesVo; -import org.dromara.property.mapper.CustomerFeedbacksMapper; -import org.dromara.property.mapper.ServiceWorkOrdersMapper; -import org.dromara.property.mapper.ServiceWorkOrdersRecordMapper; -import org.dromara.property.mapper.ServiceWorkOrdersTypeMapper; + +import org.dromara.property.domain.vo.residentVo.ResidentUnitVo; +import org.dromara.property.mapper.*; import org.dromara.property.service.ICustomerFeedbacksService; import org.dromara.system.api.RemoteUserService; import org.dromara.system.api.domain.vo.RemoteUserVo; @@ -30,10 +30,9 @@ import org.dromara.system.api.model.LoginUser; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Collection; import java.util.stream.Collectors; /** @@ -51,6 +50,7 @@ public class CustomerFeedbacksServiceImpl implements ICustomerFeedbacksService { private final ServiceWorkOrdersMapper serviceWorkOrdersMapper; private final ServiceWorkOrdersTypeMapper serviceWorkOrdersTypeMapper; private final ServiceWorkOrdersRecordMapper serviceWorkOrdersRecordMapper; + private final ResidentUnitMapper residentUnitMapper; @DubboReference private RemoteUserService remoteUserService; @@ -96,8 +96,12 @@ public class CustomerFeedbacksServiceImpl implements ICustomerFeedbacksService { .distinct() .collect(Collectors.toList()); List remoteUserVos = remoteUserService.selectListByIds(uerIds); + //收集反馈单位id + List feedbackUnitIds = result.getRecords().stream().map(CustomerFeedbacksVo::getFeedbackUnit).distinct().toList(); + //收集反馈单位weimap + Map unitNameMap = residentUnitMapper.selectVoByIds(feedbackUnitIds).stream().collect(Collectors.toMap(ResidentUnitVo::getId, ResidentUnitVo::getName)); result.getRecords().stream().forEach(s -> { - assembly(s, serviceWorkOrdersTypes, remoteUserVos); + assembly(s, serviceWorkOrdersTypes, remoteUserVos,unitNameMap); }); } return TableDataInfo.build(result); @@ -108,7 +112,7 @@ public class CustomerFeedbacksServiceImpl implements ICustomerFeedbacksService { * @param customerFeedbacksVo 意见反馈返回信息 * */ - private void assembly(CustomerFeedbacksVo customerFeedbacksVo, List serviceWorkOrdersTypes, List remoteUserVos) { + private void assembly(CustomerFeedbacksVo customerFeedbacksVo, List serviceWorkOrdersTypes, List remoteUserVos,Map unitNameMap) { if (CollUtil.isNotEmpty(remoteUserVos)) { RemoteUserVo remoteUserVo = remoteUserVos.stream() .filter(vo -> vo.getUserId() != null && vo.getUserId().equals(customerFeedbacksVo.getFeedbackPersion())).findFirst().orElse(null); @@ -118,6 +122,7 @@ public class CustomerFeedbacksServiceImpl implements ICustomerFeedbacksService { ServiceWorkOrdersType serviceWorkOrdersType = serviceWorkOrdersTypes.stream().filter(vo -> vo.getId() != null && vo.getId().equals(customerFeedbacksVo.getFeedbackType())).findFirst().orElse(null); customerFeedbacksVo.setFeedbackTypeName(ObjectUtil.isNotEmpty(serviceWorkOrdersType) ? serviceWorkOrdersType.getOrderTypeName() : null); } + customerFeedbacksVo.setFeedbackUnitText(unitNameMap.get(customerFeedbacksVo.getFeedbackUnit())); } /** @@ -145,7 +150,6 @@ public class CustomerFeedbacksServiceImpl implements ICustomerFeedbacksService { lqw.eq(StringUtils.isNotBlank(bo.getFeedbackImg()), CustomerFeedbacks::getFeedbackImg, bo.getFeedbackImg()); lqw.eq(StringUtils.isNotBlank(bo.getIsWorkOrder()), CustomerFeedbacks::getIsWorkOrder, bo.getIsWorkOrder()); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), CustomerFeedbacks::getStatus, bo.getStatus()); - lqw.like(StringUtils.isNotBlank(bo.getServiceName()), CustomerFeedbacks::getServiceName, bo.getServiceName()); lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), CustomerFeedbacks::getSearchValue, bo.getSearchValue()); return lqw; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/IndexServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/IndexServiceImpl.java new file mode 100644 index 00000000..c0aab859 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/IndexServiceImpl.java @@ -0,0 +1,128 @@ +package org.dromara.property.service.impl; + + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.property.domain.Machine; +import org.dromara.property.domain.MachineType; +import org.dromara.property.domain.ServiceWorkOrders; +import org.dromara.property.domain.ServiceWorkOrdersType; +import org.dromara.property.domain.entity.resident.ResidentPerson; +import org.dromara.property.domain.vo.IndexCountVo; +import org.dromara.property.domain.vo.ServiceWorkOrderAnalysisVo; +import org.dromara.property.mapper.*; +import org.dromara.property.service.IndexService; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author yuyongle + * @version 1.0 + * @description: 首页展示数据 + * @date 2025/9/5 15:01 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class IndexServiceImpl implements IndexService { + private final ServiceWorkOrdersMapper serviceWorkOrdersMapper; + private final ServiceWorkOrdersTypeMapper typesMapper; + private final ResidentPersonMapper residentPersonMapper; + private final MachineTypeMapper machineTypeMapper; + private final MachineMapper machineMapper; + + /** + * 首页统计数量 + */ + @Override + public IndexCountVo indexCount() { + IndexCountVo indexCountVo = new IndexCountVo(); + List serviceWorkOrderList = serviceWorkOrdersMapper.selectList(); + indexCountVo.setWorkOrdersTotal(serviceWorkOrderList.size()); + if (CollUtil.isNotEmpty(serviceWorkOrderList)) { + //筛选今日创建的工单 + List serviceWorkOrdersToday = serviceWorkOrderList.stream() + .filter(s -> DateUtil.isSameDay(s.getCreateTime(), new Date())) + .toList(); + indexCountVo.setWorkOrdersToday(serviceWorkOrdersToday.size()); + List pieChartVos = calculateWorkOrderTypeDistribution(serviceWorkOrderList); + indexCountVo.setSatisfactionChartList(pieChartVos); + }else { + indexCountVo.setWorkOrdersToday(0); + indexCountVo.setSatisfactionChartList(new ArrayList<>()); + } + //查询访客数量 + List residentPersionList = residentPersonMapper.selectList(); + indexCountVo.setVisitorsTotal(residentPersionList.size()); + if (CollUtil.isNotEmpty(residentPersionList)) { + //筛选今日创建的工单 + List todayResidentPersonlist = residentPersionList.stream() + .filter(s -> DateUtil.isSameDay(s.getCreateTime(), new Date())) + .toList(); + indexCountVo.setVisitorsToday(todayResidentPersonlist.size()); + }else { + indexCountVo.setVisitorsToday(0); + } + //查询设备各状态数量 + List statusChartVos = new ArrayList<>(); + + return indexCountVo; + } + // 计算工单类型分布 + private List calculateWorkOrderTypeDistribution(List serviceWorkOrdersList) { + // 按 typeId 分组统计数量 + Map workOrderTypeCounts = serviceWorkOrdersList.stream() + .collect(Collectors.groupingBy(ServiceWorkOrders::getType, Collectors.counting())); + + List result = new ArrayList<>(); + + for (Map.Entry entry : workOrderTypeCounts.entrySet()) { + Long typeId = entry.getKey(); + Integer count = entry.getValue().intValue(); + + // 查询类型名称 + ServiceWorkOrdersType serviceWorkOrdersType = typesMapper.selectById(typeId); + String type = serviceWorkOrdersType != null ? serviceWorkOrdersType.getOrderTypeName() : "未知类型"; + + // 添加到结果中 + result.add( IndexCountVo.PieChartVo.builder() + .type(type) + .quantity(count) + .build()); + } + + return result; + } + + // 计算设备类型分布 + private List calculateMachineTypeDistribution(List machinesList) { + // 按 typeId 分组统计数量 + Map machineTypeCounts = machinesList.stream() + .collect(Collectors.groupingBy(Machine::getMachineTypeId, Collectors.counting())); + List result = new ArrayList<>(); + + for (Map.Entry entry : machineTypeCounts.entrySet()) { + Long typeId = entry.getKey(); + Integer count = entry.getValue().intValue(); + + // 查询类型名称 + MachineType machineType = machineTypeMapper.selectById(typeId); + String type = machineType != null ? machineType.getMachineTypeName() : "未知类型"; + // 添加到结果中 + result.add(IndexCountVo.StatusChartVo.builder() + .type(type) + .quantity(count) + .build()); + } + + return result; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskDetailServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskDetailServiceImpl.java index 5abaa7be..04423e19 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskDetailServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskDetailServiceImpl.java @@ -2,8 +2,11 @@ package org.dromara.property.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; +import org.apache.commons.beanutils.BeanMap; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -13,18 +16,27 @@ 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.redis.utils.RedisUtils; import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.property.domain.InspectionPlan; +import org.dromara.property.domain.*; +import org.dromara.property.domain.bo.ServiceWorkOrdersTypeBo; +import org.dromara.property.domain.bo.mobile.InspectionTaskDetailToOrderBo; +import org.dromara.property.domain.enums.OrderReportingTypeEnum; +import org.dromara.property.domain.enums.OrderTypeOperationEnum; +import org.dromara.property.domain.enums.WorkOrderStatusEnum; import org.dromara.property.domain.vo.*; import org.dromara.property.domain.vo.mobile.MInspectionTaskDetailVo; +import org.dromara.property.domain.vo.mobile.MServiceWorkOrdersRecordVo; +import org.dromara.property.domain.vo.mobile.MServiceWorkOrdersVo; import org.dromara.property.mapper.*; +import org.dromara.property.mapper.attendanceMapper.AttendanceUserGroupMapper; import org.dromara.system.api.model.LoginUser; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.InspectionTaskDetailBo; -import org.dromara.property.domain.InspectionTaskDetail; import org.dromara.property.service.IInspectionTaskDetailService; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -44,6 +56,10 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer private final InspectionPlanMapper inspectionPlanMapper; private final InspectionRouteMapper inspectionRouteMapper; private final InspectionTaskMapper inspectionTaskMapper; + private final ServiceWorkOrdersTypeMapper typesMapper; + private final ServiceWorkOrdersMapper serviceWorkOrdersMapper; + private final ServiceWorkOrdersRecordMapper workOrdersRecordMapper; + private final AttendanceUserGroupMapper attendanceUserGroupMapper; /** * 查询巡检明细 @@ -68,25 +84,25 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); if (CollUtil.isNotEmpty(result.getRecords())) { - //收集任务id为list - List taskIds = result.getRecords().stream().map(InspectionTaskDetailVo::getTaskId).toList(); - //收集任务为map id和名称 - Map taskNameMap = inspectionTaskMapper.selectVoByIds(taskIds).stream() - .collect(Collectors.toMap(InspectionTaskVo::getId, InspectionTaskVo::getPlanName)); - //收集路线id为list - List routeIds = result.getRecords().stream().map(InspectionTaskDetailVo::getRouteId).toList(); - //收集任务为map id和名称 - Map routeNameMap = inspectionRouteMapper.selectVoByIds(routeIds).stream() - .collect(Collectors.toMap(InspectionRouteVo::getId, InspectionRouteVo::getRouteName)); - //收集路线列表 - List inspectionRoutes = inspectionRouteMapper.selectVoByIds(routeIds); - //收集计划id为list - List planIds = result.getRecords().stream().map(InspectionTaskDetailVo::getPlanId).toList(); - //收集计划列表 - Map planNameMap = inspectionPlanMapper.selectVoByIds(routeIds).stream() - .collect(Collectors.toMap(InspectionPlanVo::getId, InspectionPlanVo::getPlanName)); - //巡检点id为list - List pointIds = result.getRecords().stream().map(InspectionTaskDetailVo::getPointId).toList(); +// //收集任务id为list +// List taskIds = result.getRecords().stream().map(InspectionTaskDetailVo::getTaskId).toList(); +// //收集任务为map id和名称 +// Map taskNameMap = inspectionTaskMapper.selectVoByIds(taskIds).stream() +// .collect(Collectors.toMap(InspectionTaskVo::getId, InspectionTaskVo::getPlanName)); +// //收集路线id为list +// List routeIds = result.getRecords().stream().map(InspectionTaskDetailVo::getRouteId).toList(); +// //收集任务为map id和名称 +// Map routeNameMap = inspectionRouteMapper.selectVoByIds(routeIds).stream() +// .collect(Collectors.toMap(InspectionRouteVo::getId, InspectionRouteVo::getRouteName)); +// //收集路线列表 +// List inspectionRoutes = inspectionRouteMapper.selectVoByIds(routeIds); +// //收集计划id为list +// List planIds = result.getRecords().stream().map(InspectionTaskDetailVo::getPlanId).toList(); +// //收集计划列表 +// Map planNameMap = inspectionPlanMapper.selectVoByIds(routeIds).stream() +// .collect(Collectors.toMap(InspectionPlanVo::getId, InspectionPlanVo::getPlanName)); +// //巡检点id为list +// List pointIds = result.getRecords().stream().map(InspectionTaskDetailVo::getPointId).toList(); result.getRecords().stream().forEach(vo -> { disposeData(vo); }); @@ -233,6 +249,19 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer */ private void dataProcessing(MInspectionTaskDetailVo mInspectionTaskDetailVo, Map pointNameMap) { mInspectionTaskDetailVo.setPointName(ObjectUtil.defaultIfNull(pointNameMap.get(mInspectionTaskDetailVo.getPointId()), "未知点位")); + //查询工单 + if(ObjectUtil.isNotEmpty(mInspectionTaskDetailVo.getOrderId())){ + ServiceWorkOrdersVo serviceWorkOrdersVo = serviceWorkOrdersMapper.selectVoById(mInspectionTaskDetailVo.getOrderId()); + if(ObjectUtil.isNotEmpty(serviceWorkOrdersVo)){ + List serviceWorkOrdersRecordVos = workOrdersRecordMapper.selectVoList( + new LambdaQueryWrapper<>(ServiceWorkOrdersRecord.class).eq(ServiceWorkOrdersRecord::getOrderId, serviceWorkOrdersVo.getId()) + ); + List mServiceWorkOrdersRecordVos = BeanUtil.copyToList(serviceWorkOrdersRecordVos, MServiceWorkOrdersRecordVo.class); + serviceWorkOrdersVo.setRecordVoList(mServiceWorkOrdersRecordVos); + mInspectionTaskDetailVo.setMServiceWorkOrdersVo(ObjectUtil.isNotEmpty( serviceWorkOrdersVo)? BeanUtil.copyProperties(serviceWorkOrdersVo, MServiceWorkOrdersVo.class):null); + + } + } } /** @@ -284,4 +313,94 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer InspectionTaskDetail update = MapstructUtils.convert(bo, InspectionTaskDetail.class); return baseMapper.updateById(update) > 0; } + /** + * 巡检提报工单 + * @param bo + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean reportedOrder(InspectionTaskDetailToOrderBo bo) { + //查询工单类型 + ServiceWorkOrdersType serviceWorkOrdersType = typesMapper.selectById(bo.getOrderTypeId()); + ServiceWorkOrders serviceWorkOrders = new ServiceWorkOrders(); + serviceWorkOrders.setReportingType(OrderReportingTypeEnum.PHONE_REPORT.getValue()); + LoginUser user = LoginHelper.getLoginUser(); + serviceWorkOrders.setOrderNo("GD" + IdUtil.getSnowflakeNextIdStr()); + serviceWorkOrders.setOrderName("巡检"+bo.getPointId()); + serviceWorkOrders.setStatus(WorkOrderStatusEnum.CREATE_ORDER.getValue()); + serviceWorkOrders.setInitiatorPeople(user.getNickname()); + serviceWorkOrders.setProcessingWeight(serviceWorkOrdersType.getProcessingWeight()); + serviceWorkOrders.setType(serviceWorkOrdersType.getId()); + serviceWorkOrders.setLocation(bo.getInspectionLocation()); + boolean flag = serviceWorkOrdersMapper.insert(serviceWorkOrders) > 0; + if (flag) { + bo.setId(serviceWorkOrders.getId()); + ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord(); + serviceWorkOrdersRecord.setOrderId(serviceWorkOrders.getId()); + serviceWorkOrdersRecord.setStatus(serviceWorkOrders.getStatus()); + //serviceWorkOrdersRecord.setHandler(add.getHandler()); + boolean flags = workOrdersRecordMapper.insert(serviceWorkOrdersRecord) > 0; + if (flags) { + if (serviceWorkOrdersType.getOperationMode().equals(OrderTypeOperationEnum.AUTOMATE_DISPATCH.getValue())) { + handleServiceWorkOrder(serviceWorkOrders,serviceWorkOrdersType,bo); + } + } + } + return flag; + } + //自动派单 + private void handleServiceWorkOrder(ServiceWorkOrders serviceWorkOrders,ServiceWorkOrdersType serviceWorkOrdersType,InspectionTaskDetailToOrderBo bo) { + LocalDate today = LocalDate.now(); + // 1. 获取今日排班人员(优先查缓存,未命中则查询数据库并缓存) + List attendanceUserGroups = RedisUtils.getCacheList(DateUtil.today()); + List attendanceUserGroupList = attendanceUserGroupMapper.selectList( + new LambdaQueryWrapper() + .le(AttendanceUserGroup::getStartDate, today) + .ge(AttendanceUserGroup::getEndDate, today) + .eq(AttendanceUserGroup::getDeptId, serviceWorkOrdersType.getDeptId()) + .orderByAsc(AttendanceUserGroup::getStartDate) + ); + if (CollUtil.isEmpty(attendanceUserGroups)|| attendanceUserGroups.size() != attendanceUserGroupList.size()) { + attendanceUserGroups=attendanceUserGroupList; + Assert.isTrue(CollUtil.isNotEmpty(attendanceUserGroups), "暂无排班人员"); + // 缓存当天排班数据(假设当天不会变) + RedisUtils.setCacheList(DateUtil.today(), attendanceUserGroups); + } + + // 2. 获取并更新轮询索引(原子性很重要) + int currentIndex; + Integer lastScheduleId = RedisUtils.getCacheObject(DateUtil.today() + "LastScheduleId"); + if (lastScheduleId == null || lastScheduleId < 0 || lastScheduleId >= attendanceUserGroups.size()) { + currentIndex = 0; // 越界或未设置,重置为0 + } else { + currentIndex = lastScheduleId + 1; + if (currentIndex >= attendanceUserGroups.size()) { + currentIndex = 0; // 循环轮询 + } + } + RedisUtils.setCacheObject(DateUtil.today() + "LastScheduleId", currentIndex); + // 3. 分配处理人 + AttendanceUserGroup assignedGroup = attendanceUserGroups.get(currentIndex); + Long employeeId = assignedGroup.getEmployeeId(); + + serviceWorkOrders.setHandler(employeeId); + serviceWorkOrders.setStatus(WorkOrderStatusEnum.DISPATCHED.getValue()); + + // 4. 插入记录 + ServiceWorkOrdersRecord record = new ServiceWorkOrdersRecord(); + record.setOrderId(serviceWorkOrders.getId()); + record.setHandler(employeeId); + record.setStatus(WorkOrderStatusEnum.DISPATCHED.getValue()); + workOrdersRecordMapper.insert(record); + + // 5. 更新工单 + serviceWorkOrders.setDispatchTime(new Date()); + serviceWorkOrdersMapper.updateById(serviceWorkOrders); + //修改巡检明细接口 + InspectionTaskDetail inspectionTaskDetail = baseMapper.selectById(bo.getId()); + inspectionTaskDetail.setOrderId(serviceWorkOrders.getId()); + baseMapper.updateById(inspectionTaskDetail); + log.info("成功派单,工单号:{}", serviceWorkOrders.getOrderNo()); + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbRoomServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbRoomServiceImpl.java index 34a59e1c..c7b2de9e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbRoomServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbRoomServiceImpl.java @@ -1,6 +1,8 @@ package org.dromara.property.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -11,10 +13,15 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.property.domain.TbRoom; -import org.dromara.property.domain.TbRoomBooking; import org.dromara.property.domain.bo.TbRoomBo; +import org.dromara.property.domain.entity.resident.ResidentUnit; +import org.dromara.property.domain.vo.TbBuildingVo; +import org.dromara.property.domain.vo.TbCommunityVo; import org.dromara.property.domain.vo.TbFloorVo; import org.dromara.property.domain.vo.TbRoomVo; +import org.dromara.property.mapper.ResidentUnitMapper; +import org.dromara.property.mapper.TbBuildingMapper; +import org.dromara.property.mapper.TbCommunityMapper; import org.dromara.property.mapper.TbRoomMapper; import org.dromara.property.service.ITbFloorService; import org.dromara.property.service.ITbRoomService; @@ -37,6 +44,9 @@ public class TbRoomServiceImpl implements ITbRoomService { private final TbRoomMapper baseMapper; private final ITbFloorService tbFloorService; + private final TbBuildingMapper tbBuildingMapper; + private final TbCommunityMapper tbCommunityMapper; + private final ResidentUnitMapper residentUnitMapper; /** * 查询房间信息 @@ -46,7 +56,24 @@ public class TbRoomServiceImpl implements ITbRoomService { */ @Override public TbRoomVo queryById(Long id) { - return baseMapper.selectVoById(id); + TbRoomVo tbRoomVo = baseMapper.selectVoById(id); + //查询园区id + TbCommunityVo tbCommunityVo = tbCommunityMapper.selectVoById(tbRoomVo.getCommunityId()); + tbRoomVo.setCommunityText(ObjectUtil.isNotEmpty(tbCommunityVo) ? tbCommunityVo.getCommunityName() : null); + //查询楼栋id + TbBuildingVo tbBuildingVo = tbBuildingMapper.selectVoById(tbRoomVo.getBuildingId()); + tbRoomVo.setBuildingText(ObjectUtil.isNotEmpty(tbBuildingVo) ? tbBuildingVo.getBuildingName() : null); + //查询楼栋信息 + TbFloorVo tbFloorVo = tbFloorService.queryById(tbRoomVo.getFloorId()); + tbRoomVo.setFloorText(ObjectUtil.isNotEmpty(tbFloorVo) ? tbFloorVo.getFloorName() : null); + List residentUnits = residentUnitMapper.selectList( + new LambdaQueryWrapper() + .eq(ResidentUnit::getLocation, tbRoomVo.getId()) + ); + if (CollUtil.isNotEmpty(residentUnits)) { + tbRoomVo.setResidentUnitText(residentUnits.get(0).getName()); + } + return tbRoomVo; } /** @@ -83,6 +110,8 @@ public class TbRoomServiceImpl implements ITbRoomService { lqw.eq(StringUtils.isNotBlank(bo.getRoomNumber()), TbRoom::getRoomNumber, bo.getRoomNumber()); lqw.eq(bo.getRoomType() != null, TbRoom::getRoomType, bo.getRoomType()); lqw.eq(bo.getFloorId() != null, TbRoom::getFloorId, bo.getFloorId()); + lqw.eq(bo.getCommunityId() != null, TbRoom::getCommunityId, bo.getCommunityId()); + lqw.eq(bo.getBuildingId() != null, TbRoom::getBuildingId, bo.getBuildingId()); lqw.eq(bo.getArea() != null, TbRoom::getArea, bo.getArea()); lqw.eq(StringUtils.isNotBlank(bo.getLayout()), TbRoom::getLayout, bo.getLayout()); lqw.eq(bo.getOrientation() != null, TbRoom::getOrientation, bo.getOrientation()); @@ -154,19 +183,23 @@ public class TbRoomServiceImpl implements ITbRoomService { /** * 获取房间名称 + * * @param roomId 房间id * @return 房间名称 */ @Override public String queryRoomName(Long roomId) { return baseMapper.queryRoomName(roomId); - } /** + } + + /** * 获取房间名称 + * * @param * @return 房间名称 */ @Override - public List queryRoomNameList(List ids) { + public List queryRoomNameList(List ids) { return baseMapper.queryRoomNameList(ids); } } -- 2.43.0 From e70e245cddf537928c7de62f116e55c241652496 Mon Sep 17 00:00:00 2001 From: dy <2389062315@qq.com> Date: Fri, 5 Sep 2025 22:57:30 +0800 Subject: [PATCH 06/14] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=B8=8D=E5=BF=85?= =?UTF-8?q?=E8=A6=81=E7=9A=84=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../property/api/domain/vo/RemoteFloorVo.java | 8 ++++---- .../dromara/property/domain/TbCommunity.java | 16 +++++++-------- .../org/dromara/property/domain/TbFloor.java | 8 ++++---- .../property/domain/bo/TbCommunityBo.java | 20 +++++++++---------- .../dromara/property/domain/bo/TbFloorBo.java | 10 +++++----- .../property/domain/vo/TbCommunityVo.java | 20 +++++++++---------- .../dromara/property/domain/vo/TbFloorVo.java | 10 +++++----- .../dubbo/RemoteFloorServiceImpl.java | 2 +- .../service/impl/TbCommunityServiceImpl.java | 4 ++-- .../service/impl/TbFloorServiceImpl.java | 12 +++++------ 10 files changed, 55 insertions(+), 55 deletions(-) diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteFloorVo.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteFloorVo.java index 62adc36a..4cccce59 100644 --- a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteFloorVo.java +++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteFloorVo.java @@ -33,10 +33,10 @@ public class RemoteFloorVo implements Serializable { */ private String floorName; - /** - * 楼层号 - */ - private Long floorNumber; +// /** +// * 楼层号 +// */ +// private Long floorNumber; /** * 楼层类型 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbCommunity.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbCommunity.java index 084fc4c6..fc765685 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbCommunity.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbCommunity.java @@ -34,10 +34,10 @@ public class TbCommunity extends TenantEntity { */ private String communityName; - /** - * 社区类型 1:园区,2:小区 - */ - private Integer communityType; +// /** +// * 社区类型 1:园区,2:小区 +// */ +// private Integer communityType; private String cityFullCode; @@ -58,10 +58,10 @@ public class TbCommunity extends TenantEntity { */ private String district; - /** - * 地址 - */ - private String addr; +// /** +// * 地址 +// */ +// private String addr; /** * 经度 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbFloor.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbFloor.java index 3cc3b28d..8fa19206 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbFloor.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbFloor.java @@ -47,10 +47,10 @@ public class TbFloor extends TenantEntity { */ private String floorName; - /** - * 楼层号 - */ - private Integer floorNumber; +// /** +// * 楼层号 +// */ +// private Integer floorNumber; /** * 楼层类型 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbCommunityBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbCommunityBo.java index 1b11acd3..c009d74c 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbCommunityBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbCommunityBo.java @@ -35,11 +35,11 @@ public class TbCommunityBo extends BaseEntity { @NotBlank(message = "社区名称不能为空", groups = {AddGroup.class, EditGroup.class}) private String communityName; - /** - * 社区类型 1:园区,2:小区 - */ - @NotNull(message = "社区类型 1:园区,2:小区不能为空", groups = {AddGroup.class, EditGroup.class}) - private Integer communityType; +// /** +// * 社区类型 1:园区,2:小区 +// */ +// @NotNull(message = "社区类型 1:园区,2:小区不能为空", groups = {AddGroup.class, EditGroup.class}) +// private Integer communityType; @NotBlank(message = "城市不能为null", groups = {AddGroup.class, EditGroup.class}) private String cityFullCode; @@ -61,11 +61,11 @@ public class TbCommunityBo extends BaseEntity { */ private String district; - /** - * 地址 - */ - @NotBlank(message = "地址不能为空", groups = {AddGroup.class, EditGroup.class}) - private String addr; +// /** +// * 地址 +// */ +// @NotBlank(message = "地址不能为空", groups = {AddGroup.class, EditGroup.class}) +// private String addr; /** * 经度 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java index 2fd9b5c3..bab33942 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java @@ -37,11 +37,11 @@ public class TbFloorBo extends BaseEntity { @NotBlank(message = "楼层数名称不能为空", groups = { AddGroup.class, EditGroup.class }) private String floorName; - /** - * 楼层号 - */ - @NotNull(message = "楼层号不能为空", groups = { AddGroup.class, EditGroup.class }) - private Integer floorNumber; +// /** +// * 楼层号 +// */ +// @NotNull(message = "楼层号不能为空", groups = { AddGroup.class, EditGroup.class }) +// private Integer floorNumber; /** * 建筑面积(平方米) */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbCommunityVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbCommunityVo.java index 9e4853f9..086ef84b 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbCommunityVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbCommunityVo.java @@ -37,11 +37,11 @@ public class TbCommunityVo implements Serializable { @ExcelProperty(value = "社区名称") private String communityName; - /** - * 社区类型 1:园区,2:小区 - */ - @ExcelProperty(value = "社区类型 1:园区,2:小区") - private Long communityType; +// /** +// * 社区类型 1:园区,2:小区 +// */ +// @ExcelProperty(value = "社区类型 1:园区,2:小区") +// private Long communityType; private String cityFullCode; @@ -65,11 +65,11 @@ public class TbCommunityVo implements Serializable { @ExcelProperty(value = "区") private String district; - /** - * 地址 - */ - @ExcelProperty(value = "地址") - private String addr; +// /** +// * 地址 +// */ +// @ExcelProperty(value = "地址") +// private String addr; /** * 经度 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java index 533f759c..bf90780e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java @@ -68,11 +68,11 @@ public class TbFloorVo implements Serializable { @ExcelProperty(value = "楼层数名称") private String floorName; - /** - * 楼层号 - */ - @ExcelProperty(value = "楼层号") - private Long floorNumber; +// /** +// * 楼层号 +// */ +// @ExcelProperty(value = "楼层号") +// private Long floorNumber; /** * 楼层类型 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteFloorServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteFloorServiceImpl.java index 46ea27fa..c7856cd3 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteFloorServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteFloorServiceImpl.java @@ -99,7 +99,7 @@ public class RemoteFloorServiceImpl implements RemoteFloorService { RemoteFloorVo remoteFloorVo = new RemoteFloorVo(); remoteFloorVo.setId(item.getId()); remoteFloorVo.setFloorName(item.getFloorName()); - remoteFloorVo.setFloorNumber(item.getFloorNumber()); +// remoteFloorVo.setFloorNumber(item.getFloorNumber()); remoteFloorVos.add(remoteFloorVo); }); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java index 6c272ef2..ea5550c2 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java @@ -174,11 +174,11 @@ public class TbCommunityServiceImpl implements ITbCommunityService { lqw.orderByDesc(TbCommunity::getCreateTime) .orderByDesc(TbCommunity::getUpdateTime); lqw.like(StringUtils.isNotBlank(bo.getCommunityName()), TbCommunity::getCommunityName, bo.getCommunityName()); - lqw.eq(bo.getCommunityType() != null, TbCommunity::getCommunityType, bo.getCommunityType()); +// lqw.eq(bo.getCommunityType() != null, TbCommunity::getCommunityType, bo.getCommunityType()); lqw.eq(StringUtils.isNotBlank(bo.getProvince()), TbCommunity::getProvince, bo.getProvince()); lqw.eq(StringUtils.isNotBlank(bo.getCity()), TbCommunity::getCity, bo.getCity()); lqw.eq(StringUtils.isNotBlank(bo.getDistrict()), TbCommunity::getDistrict, bo.getDistrict()); - lqw.eq(StringUtils.isNotBlank(bo.getAddr()), TbCommunity::getAddr, bo.getAddr()); +// lqw.eq(StringUtils.isNotBlank(bo.getAddr()), TbCommunity::getAddr, bo.getAddr()); lqw.eq(StringUtils.isNotBlank(bo.getLon()), TbCommunity::getLon, bo.getLon()); lqw.eq(StringUtils.isNotBlank(bo.getLat()), TbCommunity::getLat, bo.getLat()); lqw.eq(bo.getArea() != null, TbCommunity::getArea, bo.getArea()); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java index d2d8eda3..eef9de46 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java @@ -116,7 +116,7 @@ public class TbFloorServiceImpl implements ITbFloorService { lqw.orderByDesc(TbFloor::getCreateTime) .orderByDesc(TbFloor::getUpdateTime); lqw.like(StringUtils.isNotBlank(bo.getFloorName()), TbFloor::getFloorName, bo.getFloorName()); - lqw.eq(bo.getFloorNumber() != null, TbFloor::getFloorNumber, bo.getFloorNumber()); +// lqw.eq(bo.getFloorNumber() != null, TbFloor::getFloorNumber, bo.getFloorNumber()); lqw.eq(bo.getBuildingId() != null, TbFloor::getUnitId, bo.getBuildingId()); lqw.eq(bo.getFloorType() != null, TbFloor::getFloorType, bo.getFloorType()); lqw.eq(bo.getRoomCount() != null, TbFloor::getRoomCount, bo.getRoomCount()); @@ -139,10 +139,10 @@ public class TbFloorServiceImpl implements ITbFloorService { // 验证同一单元楼层是否已经存在 LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(TbFloor::getBuildingId, bo.getBuildingId()) - .eq(TbFloor::getFloorNumber, bo.getFloorNumber()); + lqw.eq(TbFloor::getBuildingId, bo.getBuildingId()); +// .eq(TbFloor::getFloorNumber, bo.getFloorNumber()); boolean numberExists = baseMapper.selectCount(lqw) > 0; - Assert.isFalse(numberExists, "单元:{},建筑:{}已存在。", bo.getBuildingId(), bo.getFloorNumber()); + Assert.isFalse(numberExists, "建筑:{}已存在。", bo.getBuildingId()); TbFloor add = MapstructUtils.convert(bo, TbFloor.class); add.setCommunityId(tbBuildingVo.getCommunityId()); @@ -202,8 +202,8 @@ public class TbFloorServiceImpl implements ITbFloorService { @Override public List queryByBuildingId(Long buildingId) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(TbFloor::getBuildingId, buildingId) - .orderByAsc(TbFloor::getFloorNumber); + lqw.eq(TbFloor::getBuildingId, buildingId); +// .orderByAsc(TbFloor::getFloorNumber); return baseMapper.selectVoList(lqw); } } -- 2.43.0 From c565114c4ca01e606ecf9ff3c1e09d14d8a2180f Mon Sep 17 00:00:00 2001 From: dy <2389062315@qq.com> Date: Sat, 6 Sep 2025 01:14:38 +0800 Subject: [PATCH 07/14] =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../property/domain/vo/IndexCountVo.java | 10 ++--- .../service/impl/IndexServiceImpl.java | 45 ++++++++++++++----- 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/IndexCountVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/IndexCountVo.java index ceb63769..d5e9b3f8 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/IndexCountVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/IndexCountVo.java @@ -58,7 +58,7 @@ public class IndexCountVo { @NoArgsConstructor @AllArgsConstructor(access = AccessLevel.PRIVATE) public static class StatusChartVo { - private String type; // 类型名称(如:维修、咨询) + private String state; // 使用状态(如:使用中,停用中,已报废,闲置中) private Integer quantity; // 数量 public static StatusChartVoBuilder builder() { @@ -66,11 +66,11 @@ public class IndexCountVo { } public static class StatusChartVoBuilder { - private String type; + private String state; private Integer quantity; - public StatusChartVoBuilder type(String type) { - this.type = type; + public StatusChartVoBuilder state(String state) { + this.state = state; return this; } @@ -80,7 +80,7 @@ public class IndexCountVo { } public StatusChartVo build() { - return new StatusChartVo(type, quantity); + return new StatusChartVo(state, quantity); } } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/IndexServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/IndexServiceImpl.java index c0aab859..ce60a053 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/IndexServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/IndexServiceImpl.java @@ -74,6 +74,17 @@ public class IndexServiceImpl implements IndexService { //查询设备各状态数量 List statusChartVos = new ArrayList<>(); + indexCountVo.setStatusChartVoChartList(statusChartVos); + + //查询设备总数 + List machineList = machineMapper.selectList(); + //查询设备各状态数量 + List machineStatusChartVos = calculateMachineTypeDistribution(machineList); + statusChartVos.addAll(machineStatusChartVos); + indexCountVo.setStatusChartVoChartList(statusChartVos); + //查询各种工单状态 + + return indexCountVo; } // 计算工单类型分布 @@ -104,21 +115,33 @@ public class IndexServiceImpl implements IndexService { // 计算设备类型分布 private List calculateMachineTypeDistribution(List machinesList) { - // 按 typeId 分组统计数量 - Map machineTypeCounts = machinesList.stream() - .collect(Collectors.groupingBy(Machine::getMachineTypeId, Collectors.counting())); +// // 按 typeId 分组统计数量 +// Map machineTypeCounts = machinesList.stream() +// .collect(Collectors.groupingBy(Machine::getMachineTypeId, Collectors.counting())); List result = new ArrayList<>(); - for (Map.Entry entry : machineTypeCounts.entrySet()) { - Long typeId = entry.getKey(); - Integer count = entry.getValue().intValue(); +// for (Map.Entry entry : machineTypeCounts.entrySet()) { +// Long typeId = entry.getKey(); +// Integer count = entry.getValue().intValue(); +// +// // 查询类型名称 +// MachineType machineType = machineTypeMapper.selectById(typeId); +// String type = machineType != null ? machineType.getMachineTypeName() : "未知类型"; +// // 添加到结果中 +// result.add(IndexCountVo.StatusChartVo.builder() +// .type(type) +// .quantity(count) +// .build()); +// } - // 查询类型名称 - MachineType machineType = machineTypeMapper.selectById(typeId); - String type = machineType != null ? machineType.getMachineTypeName() : "未知类型"; - // 添加到结果中 + //计算状态分布 + Map machineStateCounts = machinesList.stream() + .collect(Collectors.groupingBy(Machine::getState, Collectors.counting())); + for (Map.Entry entry : machineStateCounts.entrySet()) { + String state = entry.getKey(); + Integer count = entry.getValue().intValue(); result.add(IndexCountVo.StatusChartVo.builder() - .type(type) + .state(state) .quantity(count) .build()); } -- 2.43.0 From 0b0103ea07e285ed127a8afad871756a468b3af3 Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Sat, 6 Sep 2025 10:39:03 +0800 Subject: [PATCH 08/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=8D=95=E4=BD=8D=E6=B3=A8=E5=86=8C=E7=AE=A1=E7=90=86=E5=91=98?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/property/service/impl/ResidentUnitServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java index e44eca30..e85c84b3 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.property.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.crypto.digest.BCrypt; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -154,6 +155,7 @@ public class ResidentUnitServiceImpl implements IResidentUnitService { residentPerson.setAuthEndDate(unit.getAuthEndDate()); residentPerson.setUnitId(unit.getId()); residentPerson.setUnitName(unit.getName()); + residentPerson.setPassword(BCrypt.hashpw("123456")); personMapper.insert(residentPerson); } /** -- 2.43.0 From 22c6efea632a63eda3d7293346993c558646f70b Mon Sep 17 00:00:00 2001 From: dy <2389062315@qq.com> Date: Sat, 6 Sep 2025 12:52:48 +0800 Subject: [PATCH 09/14] =?UTF-8?q?=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/property/domain/TbBuilding.java | 8 ++++---- .../java/org/dromara/property/domain/TbCommunity.java | 8 ++++---- .../org/dromara/property/domain/bo/TbBuildingBo.java | 10 +++++----- .../org/dromara/property/domain/bo/TbCommunityBo.java | 10 +++++----- .../org/dromara/property/domain/vo/TbBuildingVo.java | 10 +++++----- .../org/dromara/property/domain/vo/TbCommunityVo.java | 10 +++++----- .../property/service/impl/TbBuildingServiceImpl.java | 2 +- .../property/service/impl/TbCommunityServiceImpl.java | 2 +- 8 files changed, 30 insertions(+), 30 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbBuilding.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbBuilding.java index b6c72f68..cb92a912 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbBuilding.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbBuilding.java @@ -76,10 +76,10 @@ public class TbBuilding extends TenantEntity { */ private Date completionDate; - /** - * 地址 - */ - private String addr; +// /** +// * 地址 +// */ +// private String addr; /** * 经度 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbCommunity.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbCommunity.java index fc765685..da340c60 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbCommunity.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbCommunity.java @@ -58,10 +58,10 @@ public class TbCommunity extends TenantEntity { */ private String district; -// /** -// * 地址 -// */ -// private String addr; + /** + * 地址 + */ + private String addr; /** * 经度 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbBuildingBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbBuildingBo.java index 06ed65fe..76aa6cdc 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbBuildingBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbBuildingBo.java @@ -77,11 +77,11 @@ public class TbBuildingBo extends BaseEntity { */ private Date completionDate; - /** - * 地址 - */ - @NotBlank(message = "地址不能为空", groups = {AddGroup.class, EditGroup.class}) - private String addr; +// /** +// * 地址 +// */ +// @NotBlank(message = "地址不能为空", groups = {AddGroup.class, EditGroup.class}) +// private String addr; /** * 经度 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbCommunityBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbCommunityBo.java index c009d74c..a953c0a4 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbCommunityBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbCommunityBo.java @@ -61,11 +61,11 @@ public class TbCommunityBo extends BaseEntity { */ private String district; -// /** -// * 地址 -// */ -// @NotBlank(message = "地址不能为空", groups = {AddGroup.class, EditGroup.class}) -// private String addr; + /** + * 地址 + */ + @NotBlank(message = "地址不能为空", groups = {AddGroup.class, EditGroup.class}) + private String addr; /** * 经度 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbBuildingVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbBuildingVo.java index 6ac2ba2b..ce1d24e0 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbBuildingVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbBuildingVo.java @@ -89,11 +89,11 @@ public class TbBuildingVo implements Serializable { @ExcelProperty(value = "竣工日期") private Date completionDate; - /** - * 地址 - */ - @ExcelProperty(value = "地址") - private String addr; +// /** +// * 地址 +// */ +// @ExcelProperty(value = "地址") +// private String addr; /** * 经度 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbCommunityVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbCommunityVo.java index 086ef84b..c2e0cff8 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbCommunityVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbCommunityVo.java @@ -65,11 +65,11 @@ public class TbCommunityVo implements Serializable { @ExcelProperty(value = "区") private String district; -// /** -// * 地址 -// */ -// @ExcelProperty(value = "地址") -// private String addr; + /** + * 地址 + */ + @ExcelProperty(value = "地址") + private String addr; /** * 经度 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbBuildingServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbBuildingServiceImpl.java index 791e373f..20b85250 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbBuildingServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbBuildingServiceImpl.java @@ -95,7 +95,7 @@ public class TbBuildingServiceImpl implements ITbBuildingService { lqw.eq(bo.getBuildType() != null, TbBuilding::getBuildType, bo.getBuildType()); lqw.eq(bo.getElevatorCount() != null, TbBuilding::getElevatorCount, bo.getElevatorCount()); lqw.eq(bo.getCompletionDate() != null, TbBuilding::getCompletionDate, bo.getCompletionDate()); - lqw.eq(StringUtils.isNotBlank(bo.getAddr()), TbBuilding::getAddr, bo.getAddr()); +// lqw.eq(StringUtils.isNotBlank(bo.getAddr()), TbBuilding::getAddr, bo.getAddr()); lqw.eq(StringUtils.isNotBlank(bo.getLon()), TbBuilding::getLon, bo.getLon()); lqw.eq(StringUtils.isNotBlank(bo.getLat()), TbBuilding::getLat, bo.getLat()); lqw.eq(bo.getSort() != null, TbBuilding::getSort, bo.getSort()); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java index ea5550c2..ab4cc5a7 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java @@ -178,7 +178,7 @@ public class TbCommunityServiceImpl implements ITbCommunityService { lqw.eq(StringUtils.isNotBlank(bo.getProvince()), TbCommunity::getProvince, bo.getProvince()); lqw.eq(StringUtils.isNotBlank(bo.getCity()), TbCommunity::getCity, bo.getCity()); lqw.eq(StringUtils.isNotBlank(bo.getDistrict()), TbCommunity::getDistrict, bo.getDistrict()); -// lqw.eq(StringUtils.isNotBlank(bo.getAddr()), TbCommunity::getAddr, bo.getAddr()); + lqw.eq(StringUtils.isNotBlank(bo.getAddr()), TbCommunity::getAddr, bo.getAddr()); lqw.eq(StringUtils.isNotBlank(bo.getLon()), TbCommunity::getLon, bo.getLon()); lqw.eq(StringUtils.isNotBlank(bo.getLat()), TbCommunity::getLat, bo.getLat()); lqw.eq(bo.getArea() != null, TbCommunity::getArea, bo.getArea()); -- 2.43.0 From 0bf8cf45e8bd5d21ce6c8871009e1565582828f3 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Sat, 6 Sep 2025 13:16:40 +0800 Subject: [PATCH 10/14] =?UTF-8?q?feat(property):=20=E7=94=A8=20Server-Sent?= =?UTF-8?q?=20Events=20(SSE)=20=E6=9B=BF=E4=BB=A3=20WebSocket=20=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resource/api/RemoteMessageService.java | 9 +++ .../api/RemoteMessageServiceStub.java | 16 +++++ .../common/sse/core/SseEmitterManager.java | 28 +++++++++ .../common/sse/utils/SseMessageUtils.java | 14 +++++ ruoyi-modules/Property/pom.xml | 5 ++ .../bo/residentBo/ResidentPersonBo.java | 2 +- .../TbMeterInfoServiceImpl.java | 63 ++++++++----------- .../dubbo/RemoteMessageServiceImpl.java | 12 ++++ 8 files changed, 111 insertions(+), 38 deletions(-) diff --git a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageService.java b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageService.java index d674c81f..7a8533e9 100644 --- a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageService.java +++ b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageService.java @@ -23,4 +23,13 @@ public interface RemoteMessageService { * @param message 消息内容 */ void publishAll(String message); + + /** + * 向指定的用户的指定会话发送消息 + * + * @param userId 要发送消息的用户id + * @param token 用户的会话令牌 + * @param message 要发送的消息内容 + */ + void sendMessage(Long userId, String token, String message); } diff --git a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageServiceStub.java b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageServiceStub.java index 0ee2791e..a980af95 100644 --- a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageServiceStub.java +++ b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageServiceStub.java @@ -44,4 +44,20 @@ public class RemoteMessageServiceStub implements RemoteMessageService { log.warn("推送功能未开启或服务未找到"); } } + + /** + * 向指定的用户的指定会话发送消息 + * + * @param userId 要发送消息的用户id + * @param token 用户的会话令牌 + * @param message 要发送的消息内容 + */ + @Override + public void sendMessage(Long userId, String token, String message) { + try { + remoteMessageService.sendMessage(userId, token, message); + } catch (Exception e) { + log.warn("推送功能未开启或服务未找到"); + } + } } diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java index cb944285..fec8fc6f 100644 --- a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java +++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java @@ -132,6 +132,34 @@ public class SseEmitterManager { } } + + /** + * 向指定的用户的指定会话发送消息 + * + * @param userId 要发送消息的用户id + * @param token 用户的会话令牌 + * @param message 要发送的消息内容 + */ + public void sendMessage(Long userId, String token, String message) { + Map emitters = USER_TOKEN_EMITTERS.get(userId); + if (MapUtil.isNotEmpty(emitters)) { + for (Map.Entry entry : emitters.entrySet()){ + if (entry.getKey().equals(token)) { + try { + entry.getValue().send(SseEmitter.event() + .name("message") + .data(message)); + } catch (Exception e) { + SseEmitter remove = emitters.remove(entry.getKey()); + if (remove != null) { + remove.complete(); + } + } + } + } + } + } + /** * 本机全用户会话发送消息 * diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/SseMessageUtils.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/SseMessageUtils.java index ce3aad47..84867370 100644 --- a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/SseMessageUtils.java +++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/SseMessageUtils.java @@ -38,6 +38,20 @@ public class SseMessageUtils { MANAGER.sendMessage(userId, message); } + /** + * 向指定的用户的指定会话发送消息 + * + * @param userId 要发送消息的用户id + * @param token 用户的会话令牌 + * @param message 要发送的消息内容 + */ + public static void sendMessage(Long userId, String token, String message) { + if (!isEnable()) { + return; + } + MANAGER.sendMessage(userId, token, message); + } + /** * 本机全用户会话发送消息 * diff --git a/ruoyi-modules/Property/pom.xml b/ruoyi-modules/Property/pom.xml index 4135f974..d3af6ed2 100644 --- a/ruoyi-modules/Property/pom.xml +++ b/ruoyi-modules/Property/pom.xml @@ -125,6 +125,11 @@ ruoyi-common-websocket + + org.dromara + ruoyi-common-sse + + org.apache.rocketmq rocketmq-spring-boot-starter diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentPersonBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentPersonBo.java index 15eca760..d8eed187 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentPersonBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentPersonBo.java @@ -114,7 +114,7 @@ public class ResidentPersonBo extends BaseEntity { /** * 状态 */ - private Integer state = 1; + private Integer state; /** * 备注 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java index 3c7ea77b..2a83acc9 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java @@ -1,8 +1,10 @@ package org.dromara.property.service.impl.smartDevicesImpl; +import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import com.alibaba.fastjson.JSONObject; +import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.domain.TreeNode; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -15,8 +17,6 @@ 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.common.websocket.dto.WebSocketMessageDto; -import org.dromara.common.websocket.utils.WebSocketUtils; import org.dromara.property.domain.bo.TbFloorBo; import org.dromara.property.domain.vo.TbBuildingVo; import org.dromara.property.domain.vo.TbCommunityVo; @@ -27,6 +27,7 @@ import org.dromara.property.service.ITbCommunityService; import org.dromara.property.service.ITbFloorService; import org.dromara.property.tasks.HeartbeatTasks; import org.dromara.property.utils.MeterRecordUtil; +import org.dromara.resource.api.RemoteMessageService; import org.dromara.system.api.model.LoginUser; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.smartDevicesBo.TbMeterInfoBo; @@ -61,6 +62,9 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { private final MeterRecordUtil meterRecordUtil; private final HeartbeatTasks heartbeatTasks; + @DubboReference + private RemoteMessageService remoteMessageService; + /** * 查询水电气 * @@ -85,8 +89,7 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); // 创建楼层ID到楼层名称的映射,避免重复查询 List floorList = floorService.queryList(new TbFloorBo()); - Map floorMap = floorList.stream() - .collect(Collectors.toMap(TbFloorVo::getId, TbFloorVo::getFloorName, (key1, key2) -> key1)); + Map floorMap = floorList.stream().collect(Collectors.toMap(TbFloorVo::getId, TbFloorVo::getFloorName, (key1, key2) -> key1)); // 为每个灯控信息设置楼层名称 result.getRecords().forEach(record -> { @@ -270,13 +273,13 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { // 获取当前登录用户 LoginUser user = LoginHelper.getLoginUser(); + String tokenValue = StpUtil.getTokenValue(); if (user == null) { heartbeatTasks.stopTask("Meter_Status_Reading"); return; } // 初始化WebSocket消息 - WebSocketMessageDto webSocketMessage = new WebSocketMessageDto(); JSONObject jsonObject = new JSONObject(); jsonObject.put("type", "meter"); @@ -291,23 +294,17 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { heartbeatTasks.stopTask("Meter_Status_Reading"); jsonObject.put("readingTime", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")); jsonObject.put("data", new ArrayList<>()); - webSocketMessage.setMessage(jsonObject.toString()); - webSocketMessage.setSessionKeys(List.of(user.getUserId())); - WebSocketUtils.publishMessage(webSocketMessage); + remoteMessageService.sendMessage(user.getUserId(), tokenValue, jsonObject.toString()); return; } // 获取唯一的主机IP列表 - String[] hostIpArr = meterInfoVoList.stream() - .map(TbMeterInfoVo::getHostIp) - .distinct() - .toArray(String[]::new); + String[] hostIpArr = meterInfoVoList.stream().map(TbMeterInfoVo::getHostIp).distinct().toArray(String[]::new); // 统计每个IP对应的仪表数量 Map ipCountMap = new HashMap<>(); for (String ip : hostIpArr) { - ipCountMap.put(ip, baseMapper.selectCount(new LambdaQueryWrapper() - .eq(TbMeterInfo::getHostIp, ip))); + ipCountMap.put(ip, baseMapper.selectCount(new LambdaQueryWrapper().eq(TbMeterInfo::getHostIp, ip))); } // 启动定时任务 @@ -319,44 +316,39 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { meterResults = meterRecordUtil.getMeterStatus(ipCountMap, hostIpArr); } catch (Exception e) { // 获取数据失败,设置所有仪表通信状态为0并发送消息 - handleMeterCommunicationFailure(user, jsonObject, meterInfoVoList, webSocketMessage); + handleMeterCommunicationFailure(user, jsonObject, meterInfoVoList, tokenValue); return; } // 处理仪表读数和状态 - processMeterResults(user, jsonObject, meterResults, meterInfoVoList, webSocketMessage); + processMeterResults(user, jsonObject, meterResults, meterInfoVoList, tokenValue); }, 30000); } /** * 处理仪表通信失败的情况 * - * @param meterInfoVoList 仪表列表 - * @param jsonObject 消息对象 - * @param webSocketMessage WebSocket消息 - * @param user 当前用户 + * @param meterInfoVoList 仪表列表 + * @param jsonObject 消息对象 + * @param user 当前用户 */ - private void handleMeterCommunicationFailure(LoginUser user, JSONObject jsonObject, List meterInfoVoList, WebSocketMessageDto webSocketMessage) { + private void handleMeterCommunicationFailure(LoginUser user, JSONObject jsonObject, List meterInfoVoList, String tokenValue) { meterInfoVoList.forEach(item -> item.setCommunicationState(0L)); jsonObject.put("data", meterInfoVoList); - webSocketMessage.setMessage(jsonObject.toString()); - webSocketMessage.setSessionKeys(List.of(user.getUserId())); - WebSocketUtils.publishMessage(webSocketMessage); + remoteMessageService.sendMessage(user.getUserId(), tokenValue, jsonObject.toString()); } /** * 处理仪表读数结果 * - * @param meterInfoVoList 仪表列表 - * @param meterResults 读数结果 - * @param jsonObject 消息对象 - * @param webSocketMessage WebSocket消息 - * @param user 当前用户 + * @param meterInfoVoList 仪表列表 + * @param meterResults 读数结果 + * @param jsonObject 消息对象 + * @param user 当前用户 */ - private void processMeterResults(LoginUser user, JSONObject jsonObject, List meterResults, List meterInfoVoList, WebSocketMessageDto webSocketMessage) { + private void processMeterResults(LoginUser user, JSONObject jsonObject, List meterResults, List meterInfoVoList, String tokenValue) { // 创建IP到结果的映射,提高查找效率 - Map meterResultMap = meterResults.stream() - .collect(Collectors.toMap(MeterResult::getIp, Function.identity(), (v1, v2) -> v1)); + Map meterResultMap = meterResults.stream().collect(Collectors.toMap(MeterResult::getIp, Function.identity(), (v1, v2) -> v1)); for (TbMeterInfoVo item : meterInfoVoList) { MeterResult meterResult = meterResultMap.get(item.getHostIp()); @@ -373,8 +365,7 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { try { int codeIndex = Integer.parseInt(meterCode); if (codeIndex >= 0 && codeIndex < collectionValue.size()) { - BigDecimal initReading = BigDecimal.valueOf(collectionValue.get(codeIndex)) - .setScale(2, RoundingMode.HALF_UP); + BigDecimal initReading = BigDecimal.valueOf(collectionValue.get(codeIndex)).setScale(2, RoundingMode.HALF_UP); item.setInitReading(initReading); item.setCommunicationState(initReading.compareTo(BigDecimal.ZERO) == 0 ? 0L : 1L); } else { @@ -386,8 +377,6 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { } jsonObject.put("data", meterInfoVoList); - webSocketMessage.setMessage(jsonObject.toString()); - webSocketMessage.setSessionKeys(List.of(user.getUserId())); - WebSocketUtils.publishMessage(webSocketMessage); + remoteMessageService.sendMessage(user.getUserId(), tokenValue, jsonObject.toString()); } } diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteMessageServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteMessageServiceImpl.java index 887cd5fb..5a3dfbd7 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteMessageServiceImpl.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteMessageServiceImpl.java @@ -45,4 +45,16 @@ public class RemoteMessageServiceImpl implements RemoteMessageService { SseMessageUtils.publishAll(message); } + /** + * 向指定的用户的指定会话发送消息 + * + * @param userId 要发送消息的用户id + * @param token 用户的会话令牌 + * @param message 要发送的消息内容 + */ + @Override + public void sendMessage(Long userId, String token, String message) { + SseMessageUtils.sendMessage(userId, token, message); + } + } -- 2.43.0 From 1e4eec84012d5e3ebe63cf4bc35516187e63ced4 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Sat, 6 Sep 2025 14:26:44 +0800 Subject: [PATCH 11/14] =?UTF-8?q?refactor(property):=20=20-=20TbMeterInfoS?= =?UTF-8?q?erviceImpl=20=E4=B8=AD=E6=A8=A1=E6=8B=9F=20token=20=E4=B8=8A?= =?UTF-8?q?=E4=B8=8B=E6=96=87=20=20-=20resident=E6=9C=8D=E5=8A=A1=E5=88=86?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ResidentPersonController.java | 2 +- .../property/controller/ResidentUnitController.java | 2 +- .../controller/xcx/XResidentPersonController.java | 2 +- .../dubbo/RemoteResidentPersonServiceImpl.java | 2 +- .../listener/ResidentPersonImportListener.java | 4 ++-- .../ResidentPersonServiceImpl.java | 13 +++++++++---- .../{ => residentImpl}/ResidentUnitServiceImpl.java | 6 +++--- .../smartDevicesImpl/TbMeterInfoServiceImpl.java | 9 +++++++-- .../IResidentPersonService.java | 2 +- .../{ => residentService}/IResidentUnitService.java | 2 +- .../org/dromara/property/utils/UploadFaceUtil.java | 2 +- 11 files changed, 28 insertions(+), 18 deletions(-) rename ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/{ => residentImpl}/ResidentPersonServiceImpl.java (95%) rename ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/{ => residentImpl}/ResidentUnitServiceImpl.java (97%) rename ruoyi-modules/Property/src/main/java/org/dromara/property/service/{ => residentService}/IResidentPersonService.java (97%) rename ruoyi-modules/Property/src/main/java/org/dromara/property/service/{ => residentService}/IResidentUnitService.java (96%) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentPersonController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentPersonController.java index 773c5223..29f9c45f 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentPersonController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentPersonController.java @@ -27,7 +27,7 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; import org.dromara.property.domain.bo.residentBo.ResidentPersonBo; -import org.dromara.property.service.IResidentPersonService; +import org.dromara.property.service.residentService.IResidentPersonService; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.springframework.web.multipart.MultipartFile; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentUnitController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentUnitController.java index 0ae747e8..f9570734 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentUnitController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentUnitController.java @@ -19,7 +19,7 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.property.domain.vo.residentVo.ResidentUnitVo; import org.dromara.property.domain.bo.residentBo.ResidentUnitBo; -import org.dromara.property.service.IResidentUnitService; +import org.dromara.property.service.residentService.IResidentUnitService; import org.dromara.common.mybatis.core.page.TableDataInfo; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XResidentPersonController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XResidentPersonController.java index 43491054..c34c4ada 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XResidentPersonController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XResidentPersonController.java @@ -18,7 +18,7 @@ import org.dromara.common.web.core.BaseController; import org.dromara.property.api.model.LoginResidentPerson; import org.dromara.property.domain.bo.residentBo.ResidentPersonBo; import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; -import org.dromara.property.service.IResidentPersonService; +import org.dromara.property.service.residentService.IResidentPersonService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java index 8e5a84f4..3f9400ae 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java @@ -11,7 +11,7 @@ import org.dromara.property.api.model.LoginResidentPerson; import org.dromara.property.domain.bo.residentBo.ResidentPersonBo; import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; import org.dromara.common.core.exception.residentPerson.ResidentPersonException; -import org.dromara.property.service.IResidentPersonService; +import org.dromara.property.service.residentService.IResidentPersonService; import java.util.List; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/listener/ResidentPersonImportListener.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/listener/ResidentPersonImportListener.java index 93e9ca70..786ce5ed 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/listener/ResidentPersonImportListener.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/listener/ResidentPersonImportListener.java @@ -19,8 +19,8 @@ import org.dromara.property.domain.bo.residentBo.ResidentPersonBo; import org.dromara.property.domain.vo.residentVo.ResidentPersonImportVo; import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; import org.dromara.property.domain.vo.residentVo.ResidentUnitVo; -import org.dromara.property.service.IResidentPersonService; -import org.dromara.property.service.IResidentUnitService; +import org.dromara.property.service.residentService.IResidentPersonService; +import org.dromara.property.service.residentService.IResidentUnitService; import java.util.Date; import java.util.List; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentPersonServiceImpl.java similarity index 95% rename from ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java rename to ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentPersonServiceImpl.java index 45d6532c..597a51e9 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentPersonServiceImpl.java @@ -1,6 +1,7 @@ -package org.dromara.property.service.impl; +package org.dromara.property.service.impl.residentImpl; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.digest.BCrypt; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.dubbo.config.annotation.DubboReference; @@ -13,7 +14,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.extern.slf4j.Slf4j; import org.dromara.property.domain.vo.residentVo.ResidentUnitVo; -import org.dromara.property.service.IResidentUnitService; +import org.dromara.property.service.residentService.IResidentUnitService; import org.dromara.sis.api.RemoteSisAuthService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; @@ -22,7 +23,7 @@ import org.dromara.property.domain.bo.residentBo.ResidentPersonBo; import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; import org.dromara.property.domain.entity.resident.ResidentPerson; import org.dromara.property.mapper.ResidentPersonMapper; -import org.dromara.property.service.IResidentPersonService; +import org.dromara.property.service.residentService.IResidentPersonService; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; @@ -147,7 +148,11 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { // 首次入驻新用户权限组默认使用公司权限 ResidentUnitVo ruVo = residentUnitService.queryById(bo.getUnitId()); // 密码加密,不存明文密码 - add.setPassword(BCrypt.hashpw("123456")); + if (Objects.equals(add.getPassword(), "") || add.getPassword() == null){ + add.setPassword(BCrypt.hashpw("123456")); + }else { + add.setPassword(BCrypt.hashpw(add.getPassword())); + } //查询该单位下是否有管理员 new LambdaQueryWrapper().eq(ResidentPerson::getUnitId, bo.getUnitId()) .eq(ResidentPerson::getUserRoles, 1); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentUnitServiceImpl.java similarity index 97% rename from ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java rename to ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentUnitServiceImpl.java index e85c84b3..b1fbf5b0 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentUnitServiceImpl.java @@ -1,4 +1,4 @@ -package org.dromara.property.service.impl; +package org.dromara.property.service.impl.residentImpl; import cn.hutool.core.collection.CollUtil; import cn.hutool.crypto.digest.BCrypt; @@ -13,14 +13,14 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.property.domain.entity.resident.ResidentPerson; import org.dromara.property.mapper.ResidentPersonMapper; -import org.dromara.property.service.IResidentPersonService; +import org.dromara.property.service.residentService.IResidentPersonService; import org.dromara.property.service.ITbRoomService; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.residentBo.ResidentUnitBo; import org.dromara.property.domain.vo.residentVo.ResidentUnitVo; import org.dromara.property.domain.entity.resident.ResidentUnit; import org.dromara.property.mapper.ResidentUnitMapper; -import org.dromara.property.service.IResidentUnitService; +import org.dromara.property.service.residentService.IResidentUnitService; import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java index 2a83acc9..565b37fc 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.property.service.impl.smartDevicesImpl; +import cn.dev33.satoken.context.mock.SaTokenContextMockUtil; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; @@ -335,7 +336,9 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { private void handleMeterCommunicationFailure(LoginUser user, JSONObject jsonObject, List meterInfoVoList, String tokenValue) { meterInfoVoList.forEach(item -> item.setCommunicationState(0L)); jsonObject.put("data", meterInfoVoList); - remoteMessageService.sendMessage(user.getUserId(), tokenValue, jsonObject.toString()); + SaTokenContextMockUtil.setMockContext(() -> { + remoteMessageService.sendMessage(user.getUserId(), tokenValue, jsonObject.toString()); + }); } /** @@ -377,6 +380,8 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { } jsonObject.put("data", meterInfoVoList); - remoteMessageService.sendMessage(user.getUserId(), tokenValue, jsonObject.toString()); + SaTokenContextMockUtil.setMockContext(() -> { + remoteMessageService.sendMessage(user.getUserId(), tokenValue, jsonObject.toString()); + }); } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IResidentPersonService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/residentService/IResidentPersonService.java similarity index 97% rename from ruoyi-modules/Property/src/main/java/org/dromara/property/service/IResidentPersonService.java rename to ruoyi-modules/Property/src/main/java/org/dromara/property/service/residentService/IResidentPersonService.java index 485c7332..cfd79358 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IResidentPersonService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/residentService/IResidentPersonService.java @@ -1,4 +1,4 @@ -package org.dromara.property.service; +package org.dromara.property.service.residentService; import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; import org.dromara.property.domain.bo.residentBo.ResidentPersonBo; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IResidentUnitService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/residentService/IResidentUnitService.java similarity index 96% rename from ruoyi-modules/Property/src/main/java/org/dromara/property/service/IResidentUnitService.java rename to ruoyi-modules/Property/src/main/java/org/dromara/property/service/residentService/IResidentUnitService.java index c840b6e2..cc6d23e5 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IResidentUnitService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/residentService/IResidentUnitService.java @@ -1,4 +1,4 @@ -package org.dromara.property.service; +package org.dromara.property.service.residentService; import org.dromara.property.domain.vo.residentVo.ResidentUnitVo; import org.dromara.property.domain.bo.residentBo.ResidentUnitBo; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/UploadFaceUtil.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/UploadFaceUtil.java index 38a93128..c17836fc 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/UploadFaceUtil.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/UploadFaceUtil.java @@ -6,7 +6,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.property.domain.bo.residentBo.ResidentPersonBo; import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; -import org.dromara.property.service.IResidentPersonService; +import org.dromara.property.service.residentService.IResidentPersonService; import org.dromara.resource.api.RemoteFileService; import org.dromara.resource.api.domain.RemoteFile; import org.springframework.stereotype.Service; -- 2.43.0 From bc1301518c8bb83a81731a2a0f297ee6462214cf Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Sat, 6 Sep 2025 14:57:37 +0800 Subject: [PATCH 12/14] =?UTF-8?q?ref(Property):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BB=AA=E8=A1=A8=E6=95=B0=E6=8D=AE=E8=8E=B7=E5=8F=96=E5=92=8C?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../smartDevicesController/TbMeterInfoController.java | 2 ++ .../service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java | 4 +++- .../main/java/org/dromara/property/utils/MeterRecordUtil.java | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java index 967996d2..716e3bfa 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java @@ -44,6 +44,8 @@ public class TbMeterInfoController extends BaseController { @SaCheckPermission("property:meterInfo:list") @GetMapping("/list") public TableDataInfo list(TbMeterInfoBo bo, PageQuery pageQuery) { + pageQuery.setOrderByColumn("createTime"); + pageQuery.setIsAsc("desc"); return tbMeterInfoService.queryPageList(bo, pageQuery); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java index 565b37fc..4da94807 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java @@ -3,6 +3,7 @@ package org.dromara.property.service.impl.smartDevicesImpl; import cn.dev33.satoken.context.mock.SaTokenContextMockUtil; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.TimeInterval; import cn.hutool.core.lang.Assert; import com.alibaba.fastjson.JSONObject; import org.apache.dubbo.config.annotation.DubboReference; @@ -118,7 +119,6 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { private LambdaQueryWrapper buildQueryWrapper(TbMeterInfoBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.orderByAsc(TbMeterInfo::getId); lqw.like(StringUtils.isNotBlank(bo.getHostIp()), TbMeterInfo::getHostIp, bo.getHostIp()); lqw.eq(StringUtils.isNotBlank(bo.getMeterCode()), TbMeterInfo::getMeterCode, bo.getMeterCode()); lqw.eq(StringUtils.isNotBlank(bo.getFactoryNo()), TbMeterInfo::getFactoryNo, bo.getFactoryNo()); @@ -314,7 +314,9 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { List meterResults; try { + TimeInterval timeInterval = new TimeInterval(); meterResults = meterRecordUtil.getMeterStatus(ipCountMap, hostIpArr); + log.info("仪表数据获取耗时:{}ms", timeInterval.interval()); } catch (Exception e) { // 获取数据失败,设置所有仪表通信状态为0并发送消息 handleMeterCommunicationFailure(user, jsonObject, meterInfoVoList, tokenValue); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/MeterRecordUtil.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/MeterRecordUtil.java index aec441d0..bfec4d8e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/MeterRecordUtil.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/MeterRecordUtil.java @@ -40,7 +40,7 @@ public class MeterRecordUtil { JSONObject jsonObject = new JSONObject(); jsonObject.putOnce("ipMap", ipMap); jsonObject.putOnce("ipArr", ipArr); - String post = HttpUtil.post(meterRecordUrl + READING_URL, jsonObject.toString(), 3000); + String post = HttpUtil.post(meterRecordUrl + READING_URL, jsonObject.toString()); Result> result = JSONUtil.toBean(post, new TypeReference>>() {}, true); return result.getData(); } -- 2.43.0 From 4a3097e490da8ce78f799e06274d62674b5f84e8 Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Sat, 6 Sep 2025 16:07:13 +0800 Subject: [PATCH 13/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E9=83=A8=E9=97=A8=E4=B8=8B=E7=9A=84=E6=8E=A5?= =?UTF-8?q?=E5=8D=95=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/property/service/impl/EnumFetcherServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/EnumFetcherServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/EnumFetcherServiceImpl.java index b10e19d8..e171a8fd 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/EnumFetcherServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/EnumFetcherServiceImpl.java @@ -162,7 +162,7 @@ public class EnumFetcherServiceImpl implements EnumFetcherService { new LambdaQueryWrapper() .le(AttendanceUserGroup::getStartDate, today) .ge(AttendanceUserGroup::getEndDate, today) - .eq(AttendanceUserGroup::getDeptId, serviceWorkOrdersType.getCreateDept()) + .eq(AttendanceUserGroup::getDeptId, serviceWorkOrdersType.getDeptId()) ); if (CollUtil.isEmpty(attendanceUserGroups)) { -- 2.43.0 From 7f813393c5abc6beb3896ec4f08624fd152214a5 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Sat, 6 Sep 2025 17:07:59 +0800 Subject: [PATCH 14/14] =?UTF-8?q?refactor(property):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=99=BA=E8=83=BD=E6=B0=B4=E8=A1=A8=E6=8A=84=E8=A1=A8=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TbMeterRecordServiceImpl.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java index e43c7040..1492aaeb 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.property.service.impl.smartDevicesImpl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; @@ -169,20 +170,24 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService { continue; } + String newReadingTime = result.getRecordTime(); + Date newReadingTimeDate = DateUtil.parse(newReadingTime); + Date oldReadingTimeDate = DateUtil.offset(newReadingTimeDate, DateField.HOUR, -1); + // 获取设备id Collection meterIds = infoList.stream().map(TbMeterInfoVo::getId).toList(); // 取出上次抄表记录 LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.in(TbMeterRecord::getMeterId, meterIds) - .orderByDesc(TbMeterRecord::getReadingTime) - .last("limit " + meterIds.size()); + .eq(TbMeterRecord::getReadingTime, oldReadingTimeDate) + .orderByDesc(TbMeterRecord::getReadingTime); List recordOld = baseMapper.selectList(lqw); List recordNew = new ArrayList<>(infoList.size()); boolean hasOldRecords = CollUtil.isNotEmpty(recordOld); - log.info("当前采集器ip下{}抄表记录, ip:{}", hasOldRecords ? "有" : "无", result.getIp()); + log.info("当前采集器ip下{}前一小时抄表记录, ip:{}", hasOldRecords ? "有" : "无", result.getIp()); // 创建meterId到旧记录的映射,提高查找效率 Map oldRecordMap = hasOldRecords ? recordOld.stream().collect(Collectors.toMap(TbMeterRecord::getMeterId, Function.identity())) : @@ -197,10 +202,12 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService { record.setTenantId(info.getTenantId()); // 获取当前读数 - BigDecimal currentReading = BigDecimal.valueOf( - result.getCollectionValue().get(Integer.parseInt(info.getMeterCode())) - ); - record.setCurrentReading(currentReading); + int meterCode = Integer.parseInt(info.getMeterCode()); + if (meterCode + 1 <= result.getCollectionValue().size()){ + record.setCurrentReading(BigDecimal.valueOf(result.getCollectionValue().get(meterCode))); + }else { + record.setCurrentReading(BigDecimal.ZERO); + } // 设置上次读数 if (hasOldRecords) { @@ -209,10 +216,10 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService { record.setPreviousReading(oldRecord.getCurrentReading()); } else { // 如果没有找到对应的旧记录,使用默认值 - record.setPreviousReading(BigDecimal.ZERO); + record.setPreviousReading(record.getCurrentReading()); } } else { - record.setPreviousReading(BigDecimal.ZERO); + record.setPreviousReading(record.getCurrentReading()); } record.setReadingMethod(MeterRecordTypeEnum.AUTO_RECORD.getCode()); -- 2.43.0