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] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E5=B7=A1=E6=A3=80?= =?UTF-8?q?=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); } }